diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPropertyTypeDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPropertyTypeDialog.java
index 9e7ac0b959cd96a7ed7ce4b243ccf6c0921b7c39..79a87947bf36cc5081b0d26f11aef61fe45d4c01 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPropertyTypeDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddPropertyTypeDialog.java
@@ -195,8 +195,7 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog
 
     private RadioGroup scriptTypeRadioGroup;
 
-    private boolean userDidChangeShownInEditViewCheckBox = false; // Track if the user has set a
-                                                                  // value
+    private boolean userDidChangeShownInEditViewCheckBox = false; // Track if the user has set a value
 
     private boolean userDidChangeShowRawValueCheckBox = false; // Track if the user has set a value
 
@@ -212,10 +211,9 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog
     //
     public AddPropertyTypeDialog(final IViewContext<ICommonClientServiceAsync> viewContext,
             final IDelegatedAction postRegistrationCallback, EntityKind entityKind,
-            String entityCode, InMemoryGridAddCallback inMemoryGridCallback)
+            String entityCode, InMemoryGridAddCallback inMemoryGridCallback, EntityType inMemoryEntityType)
     {
-        super(viewContext, viewContext.getMessage(Dict.PROPERTY_TYPE_REGISTRATION),
-                postRegistrationCallback);
+        super(viewContext, viewContext.getMessage(Dict.PROPERTY_TYPE_REGISTRATION), postRegistrationCallback);
         this.viewContext = viewContext;
         this.inMemoryGridCallback = inMemoryGridCallback;
         this.entityKind = entityKind;
@@ -225,6 +223,9 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog
         getFormPanel().setLabelWidth(LABEL_WIDTH);
         loading = new Label(viewContext.getMessage(Dict.LOAD_IN_PROGRESS));
         addField(loading);
+        
+        
+        this.entity = inMemoryEntityType;
         loadEntityDialog(entityKind, entityCode);
     }
 
@@ -256,7 +257,7 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog
     {
 
         private String code;
-
+        
         AsyncCallbackEntityTypeForDialog(String code)
         {
             this.code = code;
@@ -285,7 +286,10 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog
 
     private void entityLoaded(EntityType entity)
     {
-        this.entity = entity;
+        if(inMemoryGridCallback  == null) { //If is not an in memory grid
+            this.entity = entity;
+        }
+        
         removeField(loading);
         // Enable Layout Changes
         getFormPanel().setLayoutOnChange(true);
@@ -858,27 +862,23 @@ public class AddPropertyTypeDialog extends AbstractRegistrationDialog
             propertyType = this.createPropertyType();
         }
 
+        EntityType entityType = null;
+        
         if(inMemoryGridCallback == null) {
-            final EntityType entityType = (EntityType) getEntityTypeSelectionWidget().tryGetSelected();
-            if (propertyType != null && entityType != null && propertyType.getDataType() != null)
-            {
-                final List<EntityTypePropertyType<?>> etpts = new ArrayList<EntityTypePropertyType<?>>(entityType.getAssignedPropertyTypes());
-                sectionSelectionWidget = SectionSelectionWidget.create(viewContext, etpts);
-                this.addField(sectionSelectionWidget);
-                etptSelectionWidget = createETPTSelectionWidget(etpts);
-                this.addField(etptSelectionWidget);
-            }
+            entityType = (EntityType) getEntityTypeSelectionWidget().tryGetSelected();
         } else {
-            if (propertyType != null && propertyType.getDataType() != null)
-            {
-                final List<EntityTypePropertyType<?>> etpts = new ArrayList<EntityTypePropertyType<?>>();
-                sectionSelectionWidget = SectionSelectionWidget.create(viewContext, etpts);
-                this.addField(sectionSelectionWidget);
-                etptSelectionWidget = createETPTSelectionWidget(etpts);
-                this.addField(etptSelectionWidget);
-            }
+            entityType = entity;
         }
         
+        if (propertyType != null && entityType != null && propertyType.getDataType() != null)
+        {
+            final List<EntityTypePropertyType<?>> etpts = new ArrayList<EntityTypePropertyType<?>>(entityType.getAssignedPropertyTypes());
+            sectionSelectionWidget = SectionSelectionWidget.create(viewContext, etpts);
+            this.addField(sectionSelectionWidget);
+            etptSelectionWidget = createETPTSelectionWidget(etpts);
+            this.addField(etptSelectionWidget);
+        }
+
         fixLayout();
     }
 
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 9d1de048dda294a35691437be679bbd8e53ec3d9..7f3d0cf39754a41bf46b87a4cba442a5bc70732d 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
@@ -17,13 +17,17 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewETNewPTAssigments;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewPTNewAssigment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleTypePropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Script;
 
 import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
@@ -119,22 +123,30 @@ public class NewEntityTypeForm extends ContentPanel
         switch (kind)
         {
             case SAMPLE:
-                newTypeWithAssigments.setEntity(new SampleType());
+                SampleType sampleType = new SampleType();
+                sampleType.setSampleTypePropertyTypes(new ArrayList<SampleTypePropertyType>());
+                newTypeWithAssigments.setEntity(sampleType);
                 typeGrid = (SampleTypeGrid) SampleTypeGrid.create(viewContext).getComponent();
                 dialog = ((SampleTypeGrid) typeGrid).getNewDialog((SampleType) newTypeWithAssigments.getEntity());
                 break;
             case DATA_SET:
-                newTypeWithAssigments.setEntity(new DataSetType());
+                DataSetType dataSetType = new DataSetType();
+                dataSetType.setDataSetTypePropertyTypes(new ArrayList<DataSetTypePropertyType>());
+                newTypeWithAssigments.setEntity(dataSetType);
                 typeGrid = (DataSetTypeGrid) DataSetTypeGrid.create(viewContext).getComponent();
                 dialog = ((DataSetTypeGrid) typeGrid).getNewDialog((DataSetType) newTypeWithAssigments.getEntity());
                 break;
             case EXPERIMENT:
-                newTypeWithAssigments.setEntity(new ExperimentType());
+                ExperimentType experimentType = new ExperimentType();
+                experimentType.setExperimentTypePropertyTypes(new ArrayList<ExperimentTypePropertyType>());
+                newTypeWithAssigments.setEntity(experimentType);
                 typeGrid = (ExperimentTypeGrid) ExperimentTypeGrid.create(viewContext).getComponent();
                 dialog = ((ExperimentTypeGrid) typeGrid).getNewDialog((ExperimentType) newTypeWithAssigments.getEntity());
                 break;
             case MATERIAL:
-                newTypeWithAssigments.setEntity(new MaterialType());
+                MaterialType materialType = new MaterialType();
+                materialType.setMaterialTypePropertyTypes(new ArrayList<MaterialTypePropertyType>());
+                newTypeWithAssigments.setEntity(materialType);
                 typeGrid = (MaterialTypeGrid) MaterialTypeGrid.create(viewContext).getComponent();
                 dialog = (AddEntityTypeDialog<MaterialType>) ((MaterialTypeGrid) typeGrid).getNewDialog((MaterialType) newTypeWithAssigments.getEntity());
                 break;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
index 5bcedb4c01792a54613bb5e9643df6f332621efb..88c0675d1fad6fbf7f86b64f20c07c88f271e48d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
@@ -230,8 +230,9 @@ public class PropertyTypeAssignmentGrid extends TypedTableGrid<EntityTypePropert
                                                 viewContext,
                                                 createRefreshGridAction(),
                                                 newTypeWithAssigments.getEntity().getEntityKind(),
-                                                newTypeWithAssigments.getEntity().getCode(),
-                                                new InMemoryGridAddCallback()
+                                                null,
+                                                new InMemoryGridAddCallback(),
+                                                newTypeWithAssigments.getEntity()
                                                 );
                                         dialog.show();
                                     }
@@ -268,7 +269,7 @@ public class PropertyTypeAssignmentGrid extends TypedTableGrid<EntityTypePropert
                                     {
                                         AddPropertyTypeDialog dialog =
                                                 new AddPropertyTypeDialog(viewContext, createRefreshGridAction(), addEntity.getEntityKind(),
-                                                        addEntity.getCode(), null);
+                                                        addEntity.getCode(), null, null);
                                         dialog.show();
                                     }
                                 });
@@ -331,13 +332,8 @@ public class PropertyTypeAssignmentGrid extends TypedTableGrid<EntityTypePropert
     
     public class InMemoryGridRemoveCallback {
         public void callback(final EntityTypePropertyType<?> etpt) {
-            for(int i = 0; i < newTypeWithAssigments.getAssigments().size(); i++) {
-                if(newTypeWithAssigments.getAssigments().get(i).getPropertyType().getCode().equals(etpt.getPropertyType().getCode())) {
-                    newTypeWithAssigments.getAssigments().remove(i);
-                    break;
-                }
-            }
-            newTypeWithAssigments.refreshOrder();
+            String codeToDelete = etpt.getPropertyType().getCode();
+            newTypeWithAssigments.refreshOrderDelete(codeToDelete);
             refresh();
         }
     }
@@ -348,8 +344,7 @@ public class PropertyTypeAssignmentGrid extends TypedTableGrid<EntityTypePropert
             newPTNewAssigment.setExistingPropertyType(isExixtingPropertyType);
             newPTNewAssigment.setPropertyType(propertyType);
             newPTNewAssigment.setAssignment(assignment);
-            newTypeWithAssigments.getAssigments().add(newPTNewAssigment);
-            newTypeWithAssigments.refreshOrder();
+            newTypeWithAssigments.refreshOrderAdd(newPTNewAssigment);
             refresh();
         }
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewETNewPTAssigments.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewETNewPTAssigments.java
index 1648549787d97428781bff8b8c9d2261436648a8..cfd1eb07f95be8fb2806d2c6e4f70ff3ae52007f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewETNewPTAssigments.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewETNewPTAssigments.java
@@ -1,6 +1,8 @@
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
 import java.io.Serializable;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 public class NewETNewPTAssigments implements Serializable
@@ -30,79 +32,102 @@ public class NewETNewPTAssigments implements Serializable
     }
     
 
-    public void refreshOrder() {
-//        //
-//        // Get List
-//        //
-//        List<? extends EntityTypePropertyType<?>> list = entity.getAssignedPropertyTypes();
-//        
-//        switch (entity.getEntityKind())
-//        {
-//            case SAMPLE:
-//                SampleType sampleType = (SampleType) entity;
-//                if(entity.getAssignedPropertyTypes() == null) {
-//                    sampleType.setSampleTypePropertyTypes(new ArrayList<SampleTypePropertyType>());
-//                }
-//                entity.getAssignedPropertyTypes().clear();
-//                break;
-//            case EXPERIMENT:
-//                ExperimentType experimentType = (ExperimentType) entity;
-//                if(entity.getAssignedPropertyTypes() == null) {
-//                    experimentType.setExperimentTypePropertyTypes(new ArrayList<ExperimentTypePropertyType>());
-//                }
-//                entity.getAssignedPropertyTypes().clear();
-//                break;
-//            case DATA_SET:
-//                DataSetType datasetType = (DataSetType) entity;
-//                if(entity.getAssignedPropertyTypes() == null) {
-//                    datasetType.setDataSetTypePropertyTypes(new ArrayList<DataSetTypePropertyType>());
-//                }
-//                entity.getAssignedPropertyTypes().clear();
-//                break;
-//            case MATERIAL:
-//                MaterialType materialType = (MaterialType) entity;
-//                if(entity.getAssignedPropertyTypes() == null) {
-//                    materialType.setMaterialTypePropertyTypes(new ArrayList<MaterialTypePropertyType>());
-//                }
-//                entity.getAssignedPropertyTypes().clear();
-//                break;
-//        }
-//        
-//        //
-//        // Update List
-//        //
-//        for(int i = 0; i < assigments.size(); i++) {
-//            NewPTNewAssigment assigment = assigments.get(i);
-//            int insertPos = -1;
-//            EntityTypePropertyType<?> etpt = getEntityTypePropertyType(entity.getEntityKind(), assigment);
-//            
-//            if(assigment.getAssignment().getOrdinal() == 0) {
-//                insertPos = 0;
-//            } else if (assigment.getAssignment().getOrdinal() != 0) {
-//                insertPos = i;
-//            }
-//            etpt.setOrdinal(insertPos+1L);
-//            
-//            switch (entity.getEntityKind())
-//            {
-//                case SAMPLE:
-//                    SampleType sampleType = (SampleType) entity;
-//                    sampleType.getAssignedPropertyTypes().add(insertPos, (SampleTypePropertyType) etpt);
-//                    break;
-//                case EXPERIMENT:
-//                    ExperimentType experimentType = (ExperimentType) entity;
-//                    experimentType.getAssignedPropertyTypes().add(insertPos, (ExperimentTypePropertyType) etpt);
-//                    break;
-//                case DATA_SET:
-//                    DataSetType datasetType = (DataSetType) entity;
-//                    datasetType.getAssignedPropertyTypes().add(insertPos, (DataSetTypePropertyType) etpt);
-//                    break;
-//                case MATERIAL:
-//                    MaterialType materialType = (MaterialType) entity;
-//                    materialType.getAssignedPropertyTypes().add(insertPos, (MaterialTypePropertyType) etpt);
-//                    break;
-//            }
-//        }
+    public void refreshOrderDelete(String code) {
+        //
+        // Delete Code - Internal/External List
+        //
+        for(int i = 0; i < entity.getAssignedPropertyTypes().size(); i++) {
+            if(entity.getAssignedPropertyTypes().get(i).getPropertyType().getCode().equals(code)) {
+                entity.getAssignedPropertyTypes().remove(i);
+                assigments.remove(i);
+            }
+        }
+        
+        //
+        // Update Ordinal - Internal/External List
+        //
+        for(int i = 0; i < entity.getAssignedPropertyTypes().size(); i++) {
+            entity.getAssignedPropertyTypes().get(i).setOrdinal((long) i + 1);
+            assigments.get(i).getAssignment().setOrdinal((long) i + 1);
+        }
+    }
+    
+    public void refreshOrderAdd(NewPTNewAssigment newAssigment) {
+        int insertPos = 0;
+        
+        if(assigments.isEmpty()) {
+            insertPos = 0;
+        } else {
+            insertPos = newAssigment.getAssignment().getOrdinal().intValue();
+        }
+            
+        //
+        // Update Internal List - Reorder the items due to an insert
+        //
+        EntityTypePropertyType<?> newEtpt = getEntityTypePropertyType(entity.getEntityKind(), newAssigment);
+        
+        switch (entity.getEntityKind())
+        {
+            case SAMPLE:
+                SampleType sampleType = (SampleType) entity;
+                sampleType.getAssignedPropertyTypes().add(insertPos, (SampleTypePropertyType) newEtpt);
+                break;
+            case EXPERIMENT:
+                ExperimentType experimentType = (ExperimentType) entity;
+                experimentType.getAssignedPropertyTypes().add(insertPos, (ExperimentTypePropertyType) newEtpt);
+                break;
+            case DATA_SET:
+                DataSetType datasetType = (DataSetType) entity;
+                datasetType.getAssignedPropertyTypes().add(insertPos, (DataSetTypePropertyType) newEtpt);
+                break;
+            case MATERIAL:
+                MaterialType materialType = (MaterialType) entity;
+                materialType.getAssignedPropertyTypes().add(insertPos, (MaterialTypePropertyType) newEtpt);
+                break;
+        }
+        
+        //
+        // Update Internal List - Second pass set proper positions after reordering
+        //
+        for(int i = 0; i < entity.getAssignedPropertyTypes().size(); i++) {
+            entity.getAssignedPropertyTypes().get(i).setOrdinal((long) i + 1);
+        }
+        
+        //
+        // Update Visible List with internal list order
+        //
+        assigments.add(newAssigment);
+        for(int i = 0; i < entity.getAssignedPropertyTypes().size(); i++) {
+            EntityTypePropertyType<?> etpt = entity.getAssignedPropertyTypes().get(i);
+            String code = etpt.getPropertyType().getCode();
+            
+            for(NewPTNewAssigment assigment:assigments) {
+                if(assigment.getPropertyType().getCode().equals(code)) {
+                    assigment.getAssignment().setOrdinal((long) (i + 1));
+                }
+            }
+        }
+        
+        //
+        // Update Visible List order
+        //
+        Collections.sort(assigments, new NewPTNewAssigmentComparator());
+    }
+    
+    private class NewPTNewAssigmentComparator implements Comparator<NewPTNewAssigment>{
+
+        @Override
+        public int compare(NewPTNewAssigment arg0, NewPTNewAssigment arg1)
+        {
+            int isEqualIfZero = 0;
+            if(arg0.getAssignment().getOrdinal() > arg1.getAssignment().getOrdinal()) {
+                isEqualIfZero = 1;
+            } else if(arg0.getAssignment().getOrdinal() < arg1.getAssignment().getOrdinal()) {
+                isEqualIfZero = -1;
+            }
+            return isEqualIfZero;
+        }
+        
     }
     
     public static EntityTypePropertyType<?> getEntityTypePropertyType(EntityKind kind, NewPTNewAssigment propertyTypeAsg) {