diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
index c0c56d49087a7fd9d6d4e3e1d9e4cecfbb7c32fb..d5a060450b26732d31f6313466c80d416f2cc490 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
@@ -1366,12 +1366,13 @@ public final class ComponentProvider
 
     public AbstractTabItemFactory getSampleTypeBrowser()
     {
+    	final ComponentProvider componentProvider = this;
         return new AbstractTabItemFactory()
             {
                 @Override
                 public ITabItem create()
                 {
-                    IDisposableComponent component = SampleTypeGrid.create(viewContext);
+                    IDisposableComponent component = SampleTypeGrid.create(viewContext, componentProvider);
                     return createTab(getTabTitle(), component);
                 }
 
@@ -1404,12 +1405,13 @@ public final class ComponentProvider
 
     public AbstractTabItemFactory getMaterialTypeBrowser()
     {
+		final ComponentProvider componentProvider = this;
         return new AbstractTabItemFactory()
             {
                 @Override
                 public ITabItem create()
                 {
-                    IDisposableComponent component = MaterialTypeGrid.create(viewContext);
+                    IDisposableComponent component = MaterialTypeGrid.create(viewContext, componentProvider);
                     return createTab(getTabTitle(), component);
                 }
 
@@ -1442,26 +1444,20 @@ public final class ComponentProvider
 
     public AbstractTabItemFactory getNewEntityTypeForm(final EntityKind kind, final EntityType type)
     {
+    	final ComponentProvider componentProvider = this;
         return new AbstractTabItemFactory()
             {
                 @Override
                 public ITabItem create()
                 {
-                    DatabaseModificationAwareComponent component = NewEntityTypeForm.create(kind, type, viewContext);
+                    DatabaseModificationAwareComponent component = NewEntityTypeForm.create(kind, type, viewContext, componentProvider);
                     return createRegistrationTab(getTabTitle(), component);
                 }
 
                 @Override
                 public String getId()
                 {
-                    if (type == null) // Create new entity option
-                    {
-                        return NewEntityTypeForm.BROWSER_ID + "-" + kind.name() + "-" + System.currentTimeMillis();
-                    } else
-                    // Edit existing entity option
-                    {
-                        return NewEntityTypeForm.BROWSER_ID + "-" + kind.name() + "-" + type.getCode();
-                    }
+                    return NewEntityTypeForm.getTabId(kind, type);
                 }
 
                 @Override
@@ -1493,12 +1489,13 @@ public final class ComponentProvider
 
     public AbstractTabItemFactory getExperimentTypeBrowser()
     {
+    	final ComponentProvider componentProvider = this;
         return new AbstractTabItemFactory()
             {
                 @Override
                 public ITabItem create()
                 {
-                    IDisposableComponent component = ExperimentTypeGrid.create(viewContext);
+                    IDisposableComponent component = ExperimentTypeGrid.create(viewContext, componentProvider);
                     return createTab(getTabTitle(), component);
                 }
 
@@ -1531,12 +1528,13 @@ public final class ComponentProvider
 
     public AbstractTabItemFactory getDataSetTypeBrowser()
     {
+    	final ComponentProvider componentProvider = this;
         return new AbstractTabItemFactory()
             {
                 @Override
                 public ITabItem create()
                 {
-                    IDisposableComponent component = DataSetTypeGrid.create(viewContext);
+                    IDisposableComponent component = DataSetTypeGrid.create(viewContext, componentProvider);
                     return createTab(getTabTitle(), component);
                 }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java
index 7bf476cc33aab15300d0947dcabb020b9af707cf..d78631375550e2e7432258b862dd8c91fa44c43e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetTypeGrid.java
@@ -23,6 +23,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DataSetKindSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
@@ -64,15 +65,15 @@ public class DataSetTypeGrid extends AbstractEntityTypeGrid<DataSetType>
     public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX;
 
     public static IDisposableComponent create(
-            final IViewContext<ICommonClientServiceAsync> viewContext)
+            final IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider)
     {
-        final DataSetTypeGrid grid = new DataSetTypeGrid(viewContext);
+        final DataSetTypeGrid grid = new DataSetTypeGrid(viewContext, componentProvider);
         return grid.asDisposableWithoutToolbar();
     }
 
-    private DataSetTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext)
+    private DataSetTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider)
     {
-        super(viewContext, BROWSER_ID, GRID_ID);
+        super(viewContext, componentProvider, BROWSER_ID, GRID_ID);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
index 2ca54a1c2c225050f3ebb97882d2141ff8909021..8a84955cb71f7573bdd683efa9e1cb0327d0fba3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
@@ -61,13 +61,18 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed
 {
     protected IDelegatedAction postRegistrationCallback;
 
+    protected ComponentProvider componentProvider;
+
     abstract protected void register(T entityType, AsyncCallback<Void> registrationCallback);
 
     protected AbstractEntityTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext,
+            ComponentProvider componentProvider,
             String browserId, String gridId)
     {
         super(viewContext, browserId, true, DisplayTypeIDGenerator.TYPE_BROWSER_GRID);
+        this.componentProvider = componentProvider;
         postRegistrationCallback = createRefreshGridAction();
+
         extendBottomToolbar();
         allowMultipleSelection();
     }
@@ -94,7 +99,7 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed
                             @Override
                             public void componentSelected(ButtonEvent ce)
                             {
-                                DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext).getNewEntityTypeForm(entityKind, null));
+                                DispatcherHelper.dispatchNaviEvent(componentProvider.getNewEntityTypeForm(entityKind, null));
                             }
                         });
             buttonAddNew.setId("add-entity-type-new-" + getEntityKindOrNull());
@@ -107,7 +112,7 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed
                             public void invoke(BaseEntityModel<TableModelRowWithObject<T>> selectedItem, boolean keyPressed)
                             {
                                 T entityType = selectedItem.getBaseObject().getObjectOrNull();
-                                DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext).getNewEntityTypeForm(entityKind, entityType));
+                                DispatcherHelper.dispatchNaviEvent(componentProvider.getNewEntityTypeForm(entityKind, entityType));
                             }
 
                         });
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java
index 771012fa71b30cc4529ce4f1f2a7f2b84ae18480..8830e65e04a5e57dbf306c15256d817225d9e6ab 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/NewEntityTypeForm.java
@@ -6,8 +6,10 @@ import java.util.List;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CompositeDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.MainTabPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.DataSetKindModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.BorderLayoutDataFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DataSetKindSelectionWidget;
@@ -44,6 +46,7 @@ import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.widget.Component;
 import com.extjs.gxt.ui.client.widget.ContentPanel;
 import com.extjs.gxt.ui.client.widget.MessageBox;
+import com.extjs.gxt.ui.client.widget.TabItem;
 import com.extjs.gxt.ui.client.widget.button.Button;
 import com.extjs.gxt.ui.client.widget.button.ButtonBar;
 import com.extjs.gxt.ui.client.widget.form.Field;
@@ -67,6 +70,8 @@ public class NewEntityTypeForm extends ContentPanel
 
     private NewETNewPTAssigments newTypeWithAssigments;
 
+    private final ComponentProvider componentProvider;
+
     //
     // Entity Form Related
     //
@@ -77,11 +82,13 @@ public class NewEntityTypeForm extends ContentPanel
     //
     // Form Creation
     //
-    private NewEntityTypeForm(EntityKind kind, EntityType entityToEdit, IViewContext<ICommonClientServiceAsync> viewContext)
+    private NewEntityTypeForm(EntityKind kind, EntityType entityToEdit, IViewContext<ICommonClientServiceAsync> viewContext,
+            ComponentProvider componentProvider)
     {
         this.kind = kind;
         this.entityToEdit = entityToEdit;
         this.viewContext = viewContext;
+        this.componentProvider = componentProvider;
 
         // Main panel
         setLayout(new BorderLayout());
@@ -89,19 +96,20 @@ public class NewEntityTypeForm extends ContentPanel
         this.setBorders(false);
         this.setBodyBorder(false);
 
-        initForm(false);
+        initForm();
     }
 
     public static DatabaseModificationAwareComponent create(
             EntityKind kind,
             EntityType entityToEdit,
-            final IViewContext<ICommonClientServiceAsync> viewContext)
+            final IViewContext<ICommonClientServiceAsync> viewContext,
+            ComponentProvider componentProvider)
     {
-        NewEntityTypeForm form = new NewEntityTypeForm(kind, entityToEdit, viewContext);
+        NewEntityTypeForm form = new NewEntityTypeForm(kind, entityToEdit, viewContext, componentProvider);
         return new DatabaseModificationAwareComponent(form, new CompositeDatabaseModificationObserver());
     }
 
-    private void initForm(boolean isRefresh)
+    private void initForm()
     {
         // Cleanup for the form and for the in memory structure
         removeAll();
@@ -110,7 +118,7 @@ public class NewEntityTypeForm extends ContentPanel
 
         // Top panel
         initEntityTypeForm();
-        if (entityToEdit == null || isRefresh)
+        if (entityToEdit == null)
         {
             initCreateEntity();
         } else
@@ -143,19 +151,19 @@ public class NewEntityTypeForm extends ContentPanel
         switch (kind)
         {
             case SAMPLE:
-                typeGrid = (SampleTypeGrid) SampleTypeGrid.create(viewContext).getComponent();
+                typeGrid = (SampleTypeGrid) SampleTypeGrid.create(viewContext, componentProvider).getComponent();
                 dialog = ((SampleTypeGrid) typeGrid).getNewDialog((SampleType) new SampleType());
                 break;
             case DATA_SET:
-                typeGrid = (DataSetTypeGrid) DataSetTypeGrid.create(viewContext).getComponent();
+                typeGrid = (DataSetTypeGrid) DataSetTypeGrid.create(viewContext, componentProvider).getComponent();
                 dialog = ((DataSetTypeGrid) typeGrid).getNewDialog((DataSetType) new DataSetType());
                 break;
             case EXPERIMENT:
-                typeGrid = (ExperimentTypeGrid) ExperimentTypeGrid.create(viewContext).getComponent();
+                typeGrid = (ExperimentTypeGrid) ExperimentTypeGrid.create(viewContext, componentProvider).getComponent();
                 dialog = ((ExperimentTypeGrid) typeGrid).getNewDialog((ExperimentType) new ExperimentType());
                 break;
             case MATERIAL:
-                typeGrid = (MaterialTypeGrid) MaterialTypeGrid.create(viewContext).getComponent();
+                typeGrid = (MaterialTypeGrid) MaterialTypeGrid.create(viewContext, componentProvider).getComponent();
                 dialog = (AddEntityTypeDialog<MaterialType>) ((MaterialTypeGrid) typeGrid)
                         .getNewDialog((MaterialType) new MaterialType());
                 break;
@@ -408,6 +416,18 @@ public class NewEntityTypeForm extends ContentPanel
         }
     }
 
+    public static String getTabId(EntityKind kind, EntityType type)
+    {
+        if (type == null) // Create new entity option
+        {
+            return NewEntityTypeForm.BROWSER_ID + "-" + kind.name() + "-New";
+        } else
+        // Edit existing entity option
+        {
+            return NewEntityTypeForm.BROWSER_ID + "-" + kind.name() + "-" + type.getCode();
+        }
+    }
+
     private class AsyncCallbackEntityType implements AsyncCallback<String>
     {
         @Override
@@ -433,11 +453,16 @@ public class NewEntityTypeForm extends ContentPanel
             if (entityToEdit == null)
             {
                 MessageBox.alert("Success", "Registration Successful.", null);
-                initForm(true);
             } else
             {
                 MessageBox.alert("Success", "Update Successful.", null);
             }
+
+            // Close Tab
+            MainTabPanel tabPanel = (MainTabPanel) componentProvider.tryGetMainTabPanel();
+            String getTabId = getTabId(kind, entityToEdit) + MainTabPanel.TAB_SUFFIX;
+            TabItem item = tabPanel.getItemByItemId(getTabId);
+            item.close();
         }
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeGrid.java
index 2594baa367a6522a7ddb034c9d845794adc4b26a..3277126a9af908e8fe2b1c9a7fbeb0cddce1857f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentTypeGrid.java
@@ -22,6 +22,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEntityTypeGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddEntityTypeDialog;
@@ -49,15 +50,15 @@ public class ExperimentTypeGrid extends AbstractEntityTypeGrid<ExperimentType>
     public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX;
 
     public static IDisposableComponent create(
-            final IViewContext<ICommonClientServiceAsync> viewContext)
+            final IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider)
     {
-        final ExperimentTypeGrid grid = new ExperimentTypeGrid(viewContext);
+        final ExperimentTypeGrid grid = new ExperimentTypeGrid(viewContext, componentProvider);
         return grid.asDisposableWithoutToolbar();
     }
 
-    private ExperimentTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext)
+    private ExperimentTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider)
     {
-        super(viewContext, BROWSER_ID, GRID_ID);
+        super(viewContext, componentProvider, BROWSER_ID, GRID_ID);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeGrid.java
index eb4d0c7a7b0bbf329c2c2edc107059df00646d65..07b95842148d2d59e97156753ee275c155754777 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialTypeGrid.java
@@ -22,6 +22,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEntityTypeGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AddEntityTypeDialog;
@@ -49,15 +50,15 @@ public class MaterialTypeGrid extends AbstractEntityTypeGrid<MaterialType>
     public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX;
 
     public static IDisposableComponent create(
-            final IViewContext<ICommonClientServiceAsync> viewContext)
+            final IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider)
     {
-        final MaterialTypeGrid grid = new MaterialTypeGrid(viewContext);
+        final MaterialTypeGrid grid = new MaterialTypeGrid(viewContext, componentProvider);
         return grid.asDisposableWithoutToolbar();
     }
 
-    private MaterialTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext)
+    private MaterialTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider)
     {
-        super(viewContext, BROWSER_ID, GRID_ID);
+        super(viewContext, componentProvider, BROWSER_ID, GRID_ID);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
index 31537ecd706804278d5b1d1245d5102c0a4e4945..4be35136b985fac97a2d9cf16a361afc0856daac 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleTypeGrid.java
@@ -23,6 +23,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.entity_type.AbstractEditEntityTypeDialog;
@@ -74,15 +75,15 @@ public class SampleTypeGrid extends AbstractEntityTypeGrid<SampleType>
     private static final Boolean DEFAULT_SHOW_PARENTS_VALUE = true;
 
     public static IDisposableComponent create(
-            final IViewContext<ICommonClientServiceAsync> viewContext)
+            final IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider)
     {
-        final SampleTypeGrid grid = new SampleTypeGrid(viewContext);
+        final SampleTypeGrid grid = new SampleTypeGrid(viewContext, componentProvider);
         return grid.asDisposableWithoutToolbar();
     }
 
-    private SampleTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext)
+    private SampleTypeGrid(IViewContext<ICommonClientServiceAsync> viewContext, ComponentProvider componentProvider)
     {
-        super(viewContext, BROWSER_ID, GRID_ID);
+        super(viewContext, componentProvider, BROWSER_ID, GRID_ID);
     }
 
     @Override