diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/widgets/SampleLinksWidget.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/widgets/SampleLinksWidget.js
index adb54d73d7587ed378dda586bf552cf753fff089..2c535414f8665637e7982ea4ce4922970b2ab3a3 100644
--- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/widgets/SampleLinksWidget.js
+++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/widgets/SampleLinksWidget.js
@@ -82,7 +82,7 @@ function SampleLinksWidget(containerId, profile, serverFacade, title, sampleType
 			
 			//Update Values
 			this.stateObj = {};
-			var stateFieldValue = stateField.val();
+			var stateFieldValue = Util.getEmptyIfNull(stateField.val());
 			if(stateFieldValue === "") {
 				return;
 			}
diff --git a/plasmid/source/core-plugins/newbrowser/1/compatibility/managed.py b/plasmid/source/core-plugins/newbrowser/1/compatibility/managed.py
new file mode 100644
index 0000000000000000000000000000000000000000..118c87ffec65301b990707ea4373b71db56ff506
--- /dev/null
+++ b/plasmid/source/core-plugins/newbrowser/1/compatibility/managed.py
@@ -0,0 +1,101 @@
+from ch.systemsx.cisd.openbis.generic.server import CommonServiceProvider
+
+# Configuration
+# This needs to be edited for each sample type to match the Profile.js ANNOTATION_PROPERTIES map.
+configuration = {}
+configuration["PROTEIN"] = { "PHOSPHO" : True, "ISOTYPE" : False }
+
+#Global Variables
+server = CommonServiceProvider.getCommonServer()
+contextOrNull = server.tryToAuthenticateAsSystem()
+propertyTypes = server.listPropertyTypes(contextOrNull.getSessionToken(), False)
+    
+def getPropertyType(propertyTypeCode):
+    print "Searching property type: " + propertyTypeCode
+    for propertyType in propertyTypes:
+        if propertyType.code == propertyTypeCode:
+            return propertyType
+    return None;
+
+def createAnnotationsFor(permId, annotations):
+    newAnnotation = elementFactory().createSampleLink(permId)
+    for annotation in annotations:
+        newAnnotation.addAttribute(annotation, annotations[annotation])
+    return newAnnotation
+
+def getWidgetForAdd(sampleTypeCode):
+    widgets = []
+    widget = inputWidgetFactory().createTextInputField("permId")\
+                            .setMandatory(True)\
+                            .setValue("")\
+                            .setDescription("")
+    widgets.append(widget)
+    for propertyTypeCode in configuration[sampleTypeCode].keys():
+        propertyType = getPropertyType(propertyTypeCode)
+        widget = inputWidgetFactory().createTextInputField(propertyType.label)\
+                        .setMandatory(configuration[sampleTypeCode][propertyTypeCode])\
+                        .setValue("")\
+                        .setDescription(propertyType.description)
+        widgets.append(widget)
+    return widgets;
+
+def configureUI():
+    print "All property types: " + str(propertyTypes)
+    # Add Headers
+    tableBuilder = createTableBuilder()
+    tableBuilder.addHeader("permId")
+    for sampleTypeCode in configuration.keys():
+        for propertyTypeCode in configuration[sampleTypeCode].keys():
+            tableBuilder.addHeader(propertyTypeCode)
+
+    property.setOwnTab(True)
+    uiDescription = property.getUiDescription()
+    uiDescription.useTableOutput(tableBuilder.getTableModel())
+    
+    # Add Rows
+    samples = list(propertyConverter().convertToElements(property))
+    for sample in samples:
+        row = tableBuilder.addRow()
+        for annotation in sample.getAttributes():
+            row.setCell(annotation, sample.getAttribute(annotation))
+            
+    # Add Create buttons
+    for sampleTypeCode in configuration.keys():
+        title = "Add " + sampleTypeCode;
+        addAction = uiDescription.addTableAction(title).setDescription(title)
+        widgets = getWidgetForAdd(sampleTypeCode)
+        addAction.addInputWidgets(widgets)
+    
+    # Add Delete button
+    deleteAction = uiDescription.addTableAction("Delete")\
+                                .setDescription('Are you sure you want to delete selected annotation?')
+    deleteAction.setRowSelectionRequired() # Delete is enabled when at least 1 row is selected.
+
+def isValid(dataType, value):
+    print "isValid"
+    return True
+
+def updateFromUI(action):
+    converter = propertyConverter()
+    elements = list(converter.convertToElements(property))
+    
+    if action.name.startswith("Add"):
+        sampleTypeCode = action.name[4:]
+        permId = action.getInputValue("permId")
+        annotations = {}
+        for propertyTypeCode in configuration[sampleTypeCode]:
+            propertyType = getPropertyType(propertyTypeCode)
+            propertyTypeValue = action.getInputValue(propertyType.label)
+            if not isValid(propertyType.dataType, propertyTypeValue):
+                raise ValidationException("Property " + str(propertyType.label) + " with invalid value " + str(propertyTypeValue))
+            annotations[propertyTypeCode] = propertyTypeValue
+        newAnnotation = createAnnotationsFor(permId, annotations)
+        elements.append(newAnnotation)
+    
+    if action.name.startswith("Delete"):
+        rowIds = list(action.getSelectedRows())
+        rowIds.reverse()
+        for rowId in rowIds:
+            elements.pop(rowId) 
+    
+    property.value = converter.convertToString(elements)
\ No newline at end of file