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 0301841573ac7da1051fd30f5fa86c949bb91aed..beb664c7fca96285d125d0e88ff3bee545a68784 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,12 +357,20 @@ class EntityExistenceChecker
             {
                 String value = property.getValue();
                 MaterialTypePE materialType = propertyTypePE.getMaterialType();
-                if (materialType != null) // if material type is null, it means, the property is of
-                                          // "any material type", so we don't need to check if it
-                                          // exist
+                MaterialIdentifier materialIdentifier;
+                if (materialType != null)
+                {
+                    materialIdentifier = new MaterialIdentifier(value, materialType.getCode());
+                } else
+                {
+                    materialIdentifier = MaterialIdentifier.tryParseIdentifier(value);
+                }
+                if (materialIdentifier == null)
+                {
+                    errors.add("Material identifier not in the form '<material code> (<material type code>)': "
+                            + value);
+                } else
                 {
-                    MaterialIdentifier materialIdentifier =
-                            new MaterialIdentifier(value, materialType.getCode());
                     materialExistenceManager.exists(materialIdentifier);
                 }
             }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceCheckerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceCheckerTest.java
index 6ddaa8056009138e0a715cabe05b420bbb83c220..d4e8b2869cde195b7137ccc5003e4f5f27fc8b8b 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceCheckerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/EntityExistenceCheckerTest.java
@@ -448,6 +448,57 @@ public class EntityExistenceCheckerTest extends AssertJUnit
                 sample("/S1/A3", null, null, "material:B")))));
 
         assertThat(checker.getErrors(), containsExactly(new String[0]));
+        context.assertIsSatisfied();
+    }
+
+    @Test
+    public void testCheckNewSamplesWithMaterialPropertOfAnyType()
+    {
+        MaterialType type = new MaterialType();
+        type.setCode("M1");
+        MaterialTypePE materialType = materialType(type, "ALPHA");
+        prepareForAssertMaterialTypeExists(type.getCode(), materialType);
+        SampleType sampleType = new SampleType();
+        sampleType.setCode("S1");
+        prepareForAssertSampleTypeExists(sampleType.getCode(),
+                sampleType((MaterialTypePE) null, "MATERIAL"));
+        context.checking(new Expectations()
+            {
+                {
+                    one(materialDAO).tryFindMaterial(new MaterialIdentifier("B", "M1"));
+                    will(returnValue(new MaterialPE()));
+                }
+            });
+
+        checker.checkNewMaterials(Arrays.asList(new NewMaterialsWithTypes(type, Arrays
+                .asList(material("A", "alpha:12")))));
+        checker.checkNewSamples(Arrays.asList(new NewSamplesWithTypes(sampleType, Arrays.asList(
+                sample("/S1/A1", null, null, "material:A (M1)"),
+                sample("/S1/A2", null, null, "material:B (M1)"),
+                sample("/S1/A3", null, null, "material:B (M1)")))));
+
+        assertThat(checker.getErrors(), containsExactly(new String[0]));
+        context.assertIsSatisfied();
+    }
+
+    @Test
+    public void testCheckNewSamplesWithMaterialPropertyOfAnyTypeWithInvalidMaterialIdentifier()
+    {
+        SampleType sampleType = new SampleType();
+        sampleType.setCode("S1");
+        prepareForAssertSampleTypeExists(sampleType.getCode(),
+                sampleType((MaterialTypePE) null, "MATERIAL"));
+
+        checker.checkNewSamples(Arrays.asList(new NewSamplesWithTypes(sampleType, Arrays.asList(
+                sample("/S1/A1", null, null, "material:A"),
+                sample("/S1/A2", null, null, "material:B"),
+                sample("/S1/A3", null, null, "material:B")))));
+
+        assertEquals("[Material identifier not in the form "
+                + "'<material code> (<material type code>)': A, "
+                + "Material identifier not in the form '<material code> "
+                + "(<material type code>)': B]", checker.getErrors().toString());
+        context.assertIsSatisfied();
     }
 
     @Test