diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifier.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifier.java
index 74394898bc2fe52d31b46ba0d85aeec7264ab5f5..a480f85f132a4273b92f86a0faba879fbe72bb53 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifier.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifier.java
@@ -93,29 +93,35 @@ public final class MaterialIdentifier implements Serializable
      * full identifier is specified.
      * 
      * @return <code>null</code> if no full identifier specified and material type is unknown.
+     * @throw {@link IllegalArgumentException} if material type of full identifier doesn't match
+     *        specified material type.
      */
     public static MaterialIdentifier tryCreate(String codeOrIdentifierOrNull,
             ICodeHolder materialTypeCodeHolderOrNull)
     {
         MaterialIdentifier materialIdentifier =
                 MaterialIdentifier.tryParseIdentifier(codeOrIdentifierOrNull);
-        if (materialIdentifier == null)
+        if (materialIdentifier != null)
         {
-            // if the material type of the property is fixed, then we accept when only material
-            // code is specified and its type is skipped (we know what the type should be)
             if (materialTypeCodeHolderOrNull != null
-                    && StringUtils.isBlank(codeOrIdentifierOrNull) == false)
+                    && materialIdentifier.getTypeCode().equals(
+                            materialTypeCodeHolderOrNull.getCode()) == false)
             {
-                materialIdentifier =
-                        new MaterialIdentifier(codeOrIdentifierOrNull,
-                                materialTypeCodeHolderOrNull.getCode());
-            } else
-            {
-                // identifier is invalid or null
-                return null;
+                throw new IllegalArgumentException("Material identified by '" + materialIdentifier
+                        + "' has to be of type " + materialTypeCodeHolderOrNull.getCode() + ".");
             }
+            return materialIdentifier;
+        }
+        // if the material type of the property is fixed, then we accept when only material
+        // code is specified and its type is skipped (we know what the type should be)
+        if (materialTypeCodeHolderOrNull != null
+                && StringUtils.isBlank(codeOrIdentifierOrNull) == false)
+        {
+            return new MaterialIdentifier(codeOrIdentifierOrNull,
+                    materialTypeCodeHolderOrNull.getCode());
         }
-        return materialIdentifier;
+        // identifier is invalid or null
+        return null;
     }
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java
index 27d4e2130084714282afcf0551c6b0e3f71c4ab6..15cfe7f2537c1aff9b092cb40fd036914a4247d0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceChecker.java
@@ -357,15 +357,21 @@ class EntityExistenceChecker
             {
                 String value = property.getValue();
                 MaterialTypePE materialType = propertyTypePE.getMaterialType();
-                MaterialIdentifier materialIdentifier =
-                        MaterialIdentifier.tryCreate(value, materialType);
-                if (materialIdentifier == null)
+                try
                 {
-                    errors.add("Material identifier not in the form '<material code> (<material type code>)': "
-                            + value);
-                } else
+                    MaterialIdentifier materialIdentifier =
+                            MaterialIdentifier.tryCreate(value, materialType);
+                    if (materialIdentifier == null)
+                    {
+                        errors.add("Material identifier not in the form '<material code> (<material type code>)': "
+                                + value);
+                    } else
+                    {
+                        materialExistenceManager.exists(materialIdentifier);
+                    }
+                } catch (Exception ex)
                 {
-                    materialExistenceManager.exists(materialIdentifier);
+                    errors.add(ex.getMessage());
                 }
             }
         }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifierTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifierTest.java
index 3aa917f1316d9934fbf5e8e0e7348c98823bb732..6abce0277275758c5eff02c32e6f8d38bc75ad39 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifierTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/MaterialIdentifierTest.java
@@ -53,11 +53,26 @@ public class MaterialIdentifierTest extends AssertJUnit
     @Test
     public void testTryCreateWithFullIdentifierAndType()
     {
-        MaterialType materialType = new MaterialTypeBuilder().code("MY_M").getMaterialType();
+        MaterialType materialType = new MaterialTypeBuilder().code("MY_MATERIAL").getMaterialType();
         assertEquals("ABC (MY_MATERIAL)",
                 MaterialIdentifier.tryCreate("ABC (MY_MATERIAL)", materialType).toString());
     }
 
+    @Test
+    public void testTryCreateWithFullIdentifierAndInconsistentType()
+    {
+        MaterialType materialType = new MaterialTypeBuilder().code("MY_M").getMaterialType();
+        try
+        {
+            MaterialIdentifier.tryCreate("ABC (MY_MATERIAL)", materialType);
+            fail("IllegalArgumentException expected");
+        } catch (IllegalArgumentException ex)
+        {
+            assertEquals("Material identified by 'ABC (MY_MATERIAL)' has to be of type MY_M.",
+                    ex.getMessage());
+        }
+    }
+
     @Test
     public void testTryCreateWithCodeAndType()
     {