diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
index 80b573230e678bd67ac13cd5415b4a08c69ed3a3..7db6fdf26f238bbef356cf08b5814d1bcd6426e9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
@@ -51,6 +51,7 @@ public class TopMenu extends LayoutContainer
     {
         ADMINISTRATION_MENU_MANAGE_GROUPS,
         ADMINISTRATION_MENU_MANAGE_TYPES,
+        ADMINISTRATION_MENU_MANAGE_PROPERTY_TYPES,
         ADMINISTRATION_MENU_MANAGE_AUTHORIZATION,
 
         AUTHORIZATION_MENU_USERS, AUTHORIZATION_MENU_ROLES,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/PropertyTypesMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/PropertyTypesMenu.java
index 14a9c85f272e9d27d94f4491876eb4cc0cb1db00..4d4fe997eedbe098f9446b00f5e3f3200b9ec12a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/PropertyTypesMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/PropertyTypesMenu.java
@@ -36,6 +36,7 @@ public class PropertyTypesMenu extends MenuItem
     public PropertyTypesMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
         super(messageProvider.getMessage(Dict.MENU_PROPERTY_TYPES));
+        setId(TopMenu.ActionMenuKind.ADMINISTRATION_MENU_MANAGE_PROPERTY_TYPES.toString());
 
         Menu menu = new Menu();
         menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROPERTY_TYPES_MENU_BROWSE_PROPERTY_TYPES,
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/AuthorizationTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/AuthorizationTest.java
index 07bd9360e3e009f4268be7b1d3b2ea21cf6eac47..4fb27c59f606be0f7576f0aaf25d24512cdbf03a 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/AuthorizationTest.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/AuthorizationTest.java
@@ -7,9 +7,9 @@ import org.testng.annotations.Test;
 import ch.systemsx.cisd.openbis.uitest.infra.SeleniumTest;
 import ch.systemsx.cisd.openbis.uitest.infra.User;
 import ch.systemsx.cisd.openbis.uitest.page.HomePage;
-import ch.systemsx.cisd.openbis.uitest.page.InvalidPasswordDialog;
 import ch.systemsx.cisd.openbis.uitest.page.LoginPage;
-import ch.systemsx.cisd.openbis.uitest.page.RoleAssignmentBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.InvalidPasswordDialog;
+import ch.systemsx.cisd.openbis.uitest.page.tab.RoleAssignmentBrowser;
 
 @Test(groups =
     { "no-login" })
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/PropertyTypeTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/PropertyTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a7a8c5b3fb04fb82c9be83325ce47b86f50ef4af
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/PropertyTypeTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest;
+
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.openbis.uitest.infra.SeleniumTest;
+import ch.systemsx.cisd.openbis.uitest.type.PropertyType;
+
+/**
+ * @author anttil
+ */
+@Test(groups =
+    { "login-admin" })
+public class PropertyTypeTest extends SeleniumTest
+{
+    @Test
+    public void newPropertyTypeIsListedInPropertyTypeBrowser() throws Exception
+    {
+
+        PropertyType propertyType = new PropertyType();
+
+        openbis.create(propertyType);
+
+        /*
+        assertThat(PropertyTypeBrowser.class, listsPropertyType(propertyType));
+        */
+    }
+}
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SampleTypeTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SampleTypeTest.java
index d72595bcba55ee61879e77ee3bb5d9f3d0772c75..891c30f70f3438161c811889c352d8d3bb18cda9 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SampleTypeTest.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SampleTypeTest.java
@@ -20,11 +20,11 @@ import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.testng.annotations.Test;
 
-import ch.systemsx.cisd.openbis.uitest.infra.SampleType;
 import ch.systemsx.cisd.openbis.uitest.infra.SeleniumTest;
-import ch.systemsx.cisd.openbis.uitest.page.AddSampleTypeDialog;
-import ch.systemsx.cisd.openbis.uitest.page.SampleBrowser;
-import ch.systemsx.cisd.openbis.uitest.page.SampleTypeBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.AddSampleTypeDialog;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleTypeBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.SampleType;
 
 /**
  * @author anttil
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SpaceTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SpaceTest.java
index ce685841d9be7bba1d73c1e308b0704ac26cca9c..cac627436527bab7b4585f26f5535dd56928b04e 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SpaceTest.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SpaceTest.java
@@ -5,8 +5,8 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.openbis.uitest.infra.SeleniumTest;
-import ch.systemsx.cisd.openbis.uitest.infra.Space;
-import ch.systemsx.cisd.openbis.uitest.page.SpaceBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SpaceBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.Space;
 
 @Test(groups =
     { "login-admin" })
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/VocabularyTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/VocabularyTest.java
index 337ad18adf9bb32a681a69cd36910521355a1088..691371056c28af0b5e875dc98d4f55abfebe75f3 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/VocabularyTest.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/VocabularyTest.java
@@ -5,8 +5,8 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.openbis.uitest.infra.SeleniumTest;
-import ch.systemsx.cisd.openbis.uitest.infra.Vocabulary;
-import ch.systemsx.cisd.openbis.uitest.page.VocabularyBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.VocabularyBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.Vocabulary;
 
 @Test(groups =
     { "login-admin" })
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/ApplicationRunner.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/ApplicationRunner.java
index 9cacecda26c305df1689a8eafa7242f94727b0b3..a572a7793e0bb95b742116bac7bcd3a0d889ca88 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/ApplicationRunner.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/ApplicationRunner.java
@@ -16,17 +16,22 @@
 
 package ch.systemsx.cisd.openbis.uitest.infra;
 
-import ch.systemsx.cisd.openbis.uitest.page.AddSampleTypeDialog;
-import ch.systemsx.cisd.openbis.uitest.page.AddSpaceDialog;
-import ch.systemsx.cisd.openbis.uitest.page.AddVocabularyDialog;
-import ch.systemsx.cisd.openbis.uitest.page.EditSampleTypeDialog;
 import ch.systemsx.cisd.openbis.uitest.page.LoginPage;
 import ch.systemsx.cisd.openbis.uitest.page.PrivatePage;
-import ch.systemsx.cisd.openbis.uitest.page.RoleAssignmentBrowser;
-import ch.systemsx.cisd.openbis.uitest.page.SampleBrowser;
-import ch.systemsx.cisd.openbis.uitest.page.SampleTypeBrowser;
-import ch.systemsx.cisd.openbis.uitest.page.SpaceBrowser;
-import ch.systemsx.cisd.openbis.uitest.page.VocabularyBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.AddSampleTypeDialog;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.AddSpaceDialog;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.AddVocabularyDialog;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.EditSampleTypeDialog;
+import ch.systemsx.cisd.openbis.uitest.page.tab.AddPropertyType;
+import ch.systemsx.cisd.openbis.uitest.page.tab.RoleAssignmentBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleTypeBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SpaceBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.VocabularyBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.PropertyType;
+import ch.systemsx.cisd.openbis.uitest.type.SampleType;
+import ch.systemsx.cisd.openbis.uitest.type.Space;
+import ch.systemsx.cisd.openbis.uitest.type.Vocabulary;
 
 /**
  * @author anttil
@@ -62,6 +67,13 @@ public class ApplicationRunner
         dialog.save();
     }
 
+    public void create(PropertyType propertyType)
+    {
+        AddPropertyType dialog = browseToAddPropertyType();
+        dialog.fillWith(propertyType);
+        dialog.save();
+    }
+
     public void update(SampleType sampleType)
     {
         SampleTypeBrowser sampleTypeBrowser = browseToSampleTypeBrowser();
@@ -127,6 +139,11 @@ public class ApplicationRunner
         return browseToVocabularyBrowser().add();
     }
 
+    public AddPropertyType browseToAddPropertyType()
+    {
+        return getMenus().admin().metadata().newPropertyType();
+    }
+
     public void closeAllTabs()
     {
         getMenus().closeTabs();
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SeleniumTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SeleniumTest.java
index cedac6e339190503891ea936fd223569ff41ab63..1f82f86c178ee76d6d0aa1f884f41a80831d457f 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SeleniumTest.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SeleniumTest.java
@@ -43,7 +43,8 @@ import org.testng.annotations.BeforeSuite;
 
 import ch.systemsx.cisd.openbis.uitest.page.BrowserPage;
 import ch.systemsx.cisd.openbis.uitest.page.Page;
-import ch.systemsx.cisd.openbis.uitest.page.SampleBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.SampleType;
 
 public abstract class SeleniumTest
 {
@@ -58,12 +59,12 @@ public abstract class SeleniumTest
     @BeforeSuite
     public void initWebDriver()
     {
-        /*
+
         System.setProperty("webdriver.firefox.bin",
                 "/Users/anttil/Desktop/Firefox 10.app/Contents/MacOS/firefox");
 
         System.setProperty("webdriver.firefox.profile", "default");
-        */
+
         driver = new FirefoxDriver();
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         delete(new File("targets/dist"));
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/Page.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/Page.java
index b65bfcfab48e558b1fa3138e85f15cc04746b62f..2b9ddfcd1e6699c2bcaefe6671d3a37d684102d7 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/Page.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/Page.java
@@ -22,6 +22,7 @@ import static org.hamcrest.Matchers.notNullValue;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 
 import org.openqa.selenium.By;
@@ -103,4 +104,20 @@ public abstract class Page
 
         new WebDriverWait(SeleniumTest.driver, 10).until(condition);
     }
+
+    protected void select(Collection<? extends WebElement> choices, String text)
+    {
+        Collection<String> found = new HashSet<String>();
+        for (WebElement choice : choices)
+        {
+            if (choice.getText().equals(text))
+            {
+                choice.click();
+                return;
+            }
+            found.add(choice.getText());
+        }
+        throw new IllegalArgumentException("Selection " + text + " not found");
+
+    }
 }
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/PrivatePage.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/PrivatePage.java
index 78ccb41b56074f9673319691e0fffb7eaf626f5f..db11d28c0d3512d8d7c953520bf39d148c023aad 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/PrivatePage.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/PrivatePage.java
@@ -21,6 +21,10 @@ import java.util.List;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
+import ch.systemsx.cisd.openbis.uitest.page.menu.AdminMenu;
+import ch.systemsx.cisd.openbis.uitest.page.menu.BrowseMenu;
+import ch.systemsx.cisd.openbis.uitest.page.menu.UserMenu;
+
 /**
  * @author anttil
  */
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSampleDialog.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleDialog.java
similarity index 86%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSampleDialog.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleDialog.java
index 91c940bd1cfd92b0eb57aa24c399eed5b076d71d..857f5f5bb04aa3072e0ac71ed0d00bef1d7ae04f 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSampleDialog.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleDialog.java
@@ -14,7 +14,9 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.dialog;
+
+import ch.systemsx.cisd.openbis.uitest.page.Page;
 
 
 public class AddSampleDialog extends Page
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSampleTypeDialog.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleTypeDialog.java
similarity index 94%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSampleTypeDialog.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleTypeDialog.java
index bac2c1a76ca5f7b38b14b7eed87c74769cdac4eb..e09124a419e38479d1811e2b570fa00c2470a4d4 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSampleTypeDialog.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSampleTypeDialog.java
@@ -14,13 +14,15 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.dialog;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.openqa.selenium.support.FindBys;
 
-import ch.systemsx.cisd.openbis.uitest.infra.SampleType;
+import ch.systemsx.cisd.openbis.uitest.page.Page;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleTypeBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.SampleType;
 
 public class AddSampleTypeDialog extends Page
 {
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSpaceDialog.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSpaceDialog.java
similarity index 86%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSpaceDialog.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSpaceDialog.java
index 6b5ff4165c86ea190842a2c9d8693ac2b3f2cf43..d48036d5a900f4aceffc5168ae5e3209eb723fe7 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddSpaceDialog.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddSpaceDialog.java
@@ -14,12 +14,14 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.dialog;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
-import ch.systemsx.cisd.openbis.uitest.infra.Space;
+import ch.systemsx.cisd.openbis.uitest.page.Page;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SpaceBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.Space;
 
 public class AddSpaceDialog extends Page
 {
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddVocabularyDialog.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddVocabularyDialog.java
similarity index 88%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddVocabularyDialog.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddVocabularyDialog.java
index 32f04e6c4a6f4557312af32e5c11b0cac2b125fd..b39ba701fcc7d03668944204ce10ebb2e2477a5a 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AddVocabularyDialog.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/AddVocabularyDialog.java
@@ -14,12 +14,14 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.dialog;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
-import ch.systemsx.cisd.openbis.uitest.infra.Vocabulary;
+import ch.systemsx.cisd.openbis.uitest.page.Page;
+import ch.systemsx.cisd.openbis.uitest.page.tab.VocabularyBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.Vocabulary;
 
 public class AddVocabularyDialog extends Page
 {
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/EditSampleTypeDialog.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/EditSampleTypeDialog.java
similarity index 93%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/EditSampleTypeDialog.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/EditSampleTypeDialog.java
index 08e4670a0b8f339357952edf4129557cf939c4c0..56dffecb31a5b7e9628832893b1913e4c17fbabf 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/EditSampleTypeDialog.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/EditSampleTypeDialog.java
@@ -14,13 +14,15 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.dialog;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.openqa.selenium.support.FindBys;
 
-import ch.systemsx.cisd.openbis.uitest.infra.SampleType;
+import ch.systemsx.cisd.openbis.uitest.page.Page;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleTypeBrowser;
+import ch.systemsx.cisd.openbis.uitest.type.SampleType;
 
 public class EditSampleTypeDialog extends Page
 {
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/InvalidPasswordDialog.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/InvalidPasswordDialog.java
similarity index 85%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/InvalidPasswordDialog.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/InvalidPasswordDialog.java
index 70f2299f43a01c90167ef5fbc31584c2addf3a3e..1ec0e486be8ab9309b8001c887a930e2a27e60e8 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/InvalidPasswordDialog.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/dialog/InvalidPasswordDialog.java
@@ -14,11 +14,14 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.dialog;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
+import ch.systemsx.cisd.openbis.uitest.page.LoginPage;
+import ch.systemsx.cisd.openbis.uitest.page.Page;
+
 public class InvalidPasswordDialog extends Page
 {
 
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AdminMenu.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/AdminMenu.java
similarity index 77%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AdminMenu.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/AdminMenu.java
index 723074f298f51823546bed6583d793d0aad7a04b..1fdb40aacc21788a165c30edb5cefafd2b7475bd 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AdminMenu.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/AdminMenu.java
@@ -14,13 +14,17 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.menu;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.interactions.Actions;
 import org.openqa.selenium.support.FindBy;
 
 import ch.systemsx.cisd.openbis.uitest.infra.SeleniumTest;
+import ch.systemsx.cisd.openbis.uitest.page.PrivatePage;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleTypeBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SpaceBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.VocabularyBrowser;
 
 public class AdminMenu extends PrivatePage
 {
@@ -34,6 +38,9 @@ public class AdminMenu extends PrivatePage
     @FindBy(id = "ADMINISTRATION_MENU_MANAGE_TYPES")
     private WebElement types;
 
+    @FindBy(id = "ADMINISTRATION_MENU_MANAGE_PROPERTY_TYPES")
+    private WebElement metadata;
+
     @FindBy(id = "openbis_top-menu_SAMPLE_MENU_TYPES")
     private WebElement sampleTypes;
 
@@ -59,6 +66,13 @@ public class AdminMenu extends PrivatePage
         return get(AdminMenu.class);
     }
 
+    public MetadataMenu metadata()
+    {
+        Actions builder = new Actions(SeleniumTest.driver);
+        builder.moveToElement(metadata).build().perform();
+        return get(MetadataMenu.class);
+    }
+
     public SampleTypeBrowser sampleTypes()
     {
         sampleTypes.click();
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AuthorizationMenu.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/AuthorizationMenu.java
similarity index 84%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AuthorizationMenu.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/AuthorizationMenu.java
index a1aa3029ab7d804ea0d1c6d4a2f467c4523dae9b..b46e475b1f301209df93cc409c85d96a8c1b60da 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/AuthorizationMenu.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/AuthorizationMenu.java
@@ -14,11 +14,14 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.menu;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
+import ch.systemsx.cisd.openbis.uitest.page.PrivatePage;
+import ch.systemsx.cisd.openbis.uitest.page.tab.RoleAssignmentBrowser;
+
 public class AuthorizationMenu extends PrivatePage
 {
 
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/BrowseMenu.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/BrowseMenu.java
similarity index 84%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/BrowseMenu.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/BrowseMenu.java
index 005abdc7527cbf5995e130592111b6feae57ba79..0a7c60c8660038f008185a012747aa27d44e5076 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/BrowseMenu.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/BrowseMenu.java
@@ -14,11 +14,14 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.menu;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
+import ch.systemsx.cisd.openbis.uitest.page.PrivatePage;
+import ch.systemsx.cisd.openbis.uitest.page.tab.SampleBrowser;
+
 public class BrowseMenu extends PrivatePage
 {
 
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/MetadataMenu.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/MetadataMenu.java
new file mode 100644
index 0000000000000000000000000000000000000000..de2ffc98a26c57c6ad71d53edd1f02ec0a5204c5
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/MetadataMenu.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest.page.menu;
+
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+
+import ch.systemsx.cisd.openbis.uitest.page.PrivatePage;
+import ch.systemsx.cisd.openbis.uitest.page.tab.AddPropertyType;
+
+public class MetadataMenu extends PrivatePage
+{
+
+    @FindBy(id = "openbis_top-menu_PROPERTY_TYPES_MENU_NEW_PROPERTY_TYPES")
+    private WebElement newPropertyType;
+
+    public AddPropertyType newPropertyType()
+    {
+        newPropertyType.click();
+        return get(AddPropertyType.class);
+    }
+}
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/UserMenu.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/UserMenu.java
similarity index 84%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/UserMenu.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/UserMenu.java
index 435333732afbb91bc5a065ee99e7611431e96b2f..ae12d91449666e9ead32f7d624008cc34a04e699 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/UserMenu.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/UserMenu.java
@@ -14,11 +14,14 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.menu;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
+import ch.systemsx.cisd.openbis.uitest.page.LoginPage;
+import ch.systemsx.cisd.openbis.uitest.page.PrivatePage;
+
 public class UserMenu extends PrivatePage
 {
 
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/AddPropertyType.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/AddPropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..05b777b2a873719b15950587b04935834b09c344
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/AddPropertyType.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest.page.tab;
+
+import java.util.List;
+
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.FindBys;
+
+import ch.systemsx.cisd.openbis.uitest.page.Page;
+import ch.systemsx.cisd.openbis.uitest.type.PropertyType;
+
+public class AddPropertyType extends Page
+{
+
+    @FindBy(id = "openbis_property-type-registration_form_code-input")
+    private WebElement code;
+
+    @FindBy(id = "openbis_property-type-registration_form_label-input")
+    private WebElement label;
+
+    @FindBy(id = "openbis_property-type-registration_form_description-input")
+    private WebElement description;
+
+    @FindBys(
+        {
+                @FindBy(id = "openbis_select_data-type"),
+                @FindBy(xpath = "img") })
+    private WebElement dataTypeDropDownOpener;
+
+    @FindBy(className = "x-combo-list-item")
+    private List<WebElement> dataTypeChoices;
+
+    @FindBys(
+        {
+                @FindBy(id = "openbis_select_vocabulary-select"),
+                @FindBy(xpath = "img") })
+    private WebElement vocabularyDropDownOpener;
+
+    @FindBy(className = "x-combo-list-item")
+    private List<WebElement> vocabularyChoices;
+
+    @FindBy(id = "openbis_property-type-registration_formsave-button")
+    private WebElement saveButton;
+
+    public void fillWith(PropertyType propertyType)
+    {
+        this.code.sendKeys(propertyType.getCode());
+        this.label.sendKeys(propertyType.getLabel());
+        this.description.sendKeys(propertyType.getDescription());
+        this.dataTypeDropDownOpener.click();
+        select(dataTypeChoices, propertyType.getDataType().getName());
+    }
+
+    public AddPropertyType save()
+    {
+        this.saveButton.click();
+        return get(AddPropertyType.class);
+    }
+}
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/RoleAssignmentBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/RoleAssignmentBrowser.java
similarity index 93%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/RoleAssignmentBrowser.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/RoleAssignmentBrowser.java
index 7b5a106d2e01b63981008eb13058de47c02a4c79..e4fd8b39ff711ed6435fc4c58f921e4e48476404 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/RoleAssignmentBrowser.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/RoleAssignmentBrowser.java
@@ -14,13 +14,15 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.tab;
 
 import java.util.List;
 
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
+import ch.systemsx.cisd.openbis.uitest.page.BrowserPage;
+
 public class RoleAssignmentBrowser extends BrowserPage
 {
 
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SampleBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleBrowser.java
similarity index 87%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SampleBrowser.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleBrowser.java
index c2083f8ec669a5f30aff73c0e60d3198248c4c2a..52c1cdbe9c5509d26fd2912e843ad070e930e6d2 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SampleBrowser.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleBrowser.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.tab;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -23,6 +23,9 @@ import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.openqa.selenium.support.FindBys;
 
+import ch.systemsx.cisd.openbis.uitest.page.BrowserPage;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.AddSampleDialog;
+
 public class SampleBrowser extends BrowserPage
 {
 
@@ -71,16 +74,8 @@ public class SampleBrowser extends BrowserPage
     public SampleBrowser selectSampleType(String sampleType)
     {
         sampleTypeList.click();
-        for (WebElement choice : choices)
-        {
-            if (choice.getText().equals(sampleType))
-            {
-                choice.click();
-                return get(SampleBrowser.class);
-            }
-        }
-
-        throw new RuntimeException("Sample type with name " + sampleType + " not found");
+        select(choices, sampleType);
+        return get(SampleBrowser.class);
     }
 
     public List<String> getSampleTypes()
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SampleTypeBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java
similarity index 87%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SampleTypeBrowser.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java
index d462dde9ed196655fcccd58c5ea348cb1aadcc95..75e02e0bd5481c92abae5cc84d89f9d3c7a21c28 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SampleTypeBrowser.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.tab;
 
 import java.util.List;
 
@@ -22,7 +22,10 @@ import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.openqa.selenium.support.FindBys;
 
-import ch.systemsx.cisd.openbis.uitest.infra.SampleType;
+import ch.systemsx.cisd.openbis.uitest.page.BrowserPage;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.AddSampleTypeDialog;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.EditSampleTypeDialog;
+import ch.systemsx.cisd.openbis.uitest.type.SampleType;
 
 public class SampleTypeBrowser extends BrowserPage
 {
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SpaceBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SpaceBrowser.java
similarity index 90%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SpaceBrowser.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SpaceBrowser.java
index cdfdb0c64d0ffc47f1414125dd5806a4eed8f75a..f6d41ea7a66e97abb5a840d6f333500c8b32187b 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/SpaceBrowser.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SpaceBrowser.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.tab;
 
 import java.util.List;
 
@@ -22,6 +22,9 @@ import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.openqa.selenium.support.FindBys;
 
+import ch.systemsx.cisd.openbis.uitest.page.BrowserPage;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.AddSpaceDialog;
+
 public class SpaceBrowser extends BrowserPage
 {
 
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/VocabularyBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/VocabularyBrowser.java
similarity index 90%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/VocabularyBrowser.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/VocabularyBrowser.java
index 68588df30a8fa4b00f2aae328037878456afff03..55d202eb48b9691b2ecdca092d86dd25cc4723d4 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/VocabularyBrowser.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/VocabularyBrowser.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.page;
+package ch.systemsx.cisd.openbis.uitest.page.tab;
 
 import java.util.List;
 
@@ -22,6 +22,9 @@ import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 import org.openqa.selenium.support.FindBys;
 
+import ch.systemsx.cisd.openbis.uitest.page.BrowserPage;
+import ch.systemsx.cisd.openbis.uitest.page.dialog.AddVocabularyDialog;
+
 public class VocabularyBrowser extends BrowserPage
 {
 
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/BasicPropertyTypeDataType.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/BasicPropertyTypeDataType.java
new file mode 100644
index 0000000000000000000000000000000000000000..109b3549dce99e497204485aaa15ab036ba5c138
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/BasicPropertyTypeDataType.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest.type;
+
+/**
+ * @author anttil
+ */
+public enum BasicPropertyTypeDataType implements PropertyTypeDataType
+{
+    BOOLEAN("BOOLEAN"),
+    HYPERLINK("HYPERLINK"),
+    INTEGER("INTEGER"),
+    MATERIAL("MATERIAL"),
+    MULTILINE_VARCHAR("MULTILINE_VARCHAR"),
+    REAL("REAL"),
+    TIMESTAMP("TIMESTAMP"),
+    VARCHAR("VARCHAR"),
+    XML("XML");
+
+    private String name;
+
+    private BasicPropertyTypeDataType(String name)
+    {
+        this.name = name;
+    }
+
+    @Override
+    public String getName()
+    {
+        return this.name;
+    }
+}
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/ControlledVocabularyPropertyTypeDataType.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/ControlledVocabularyPropertyTypeDataType.java
new file mode 100644
index 0000000000000000000000000000000000000000..5aafc31c6d504ffe6e4757cef5835b81dc6ae52d
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/ControlledVocabularyPropertyTypeDataType.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest.type;
+
+/**
+ * @author anttil
+ */
+public class ControlledVocabularyPropertyTypeDataType implements PropertyTypeDataType
+{
+
+    private String vocabularyCode;
+
+    public ControlledVocabularyPropertyTypeDataType(String vocabularyCode)
+    {
+        this.vocabularyCode = vocabularyCode;
+    }
+
+    @Override
+    public String getName()
+    {
+        return "CONTROLLEDVOCABULARY";
+    }
+
+    public String getVocabularyCode()
+    {
+        return vocabularyCode;
+    }
+
+}
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyType.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyType.java
new file mode 100644
index 0000000000000000000000000000000000000000..8168bb558ff3870b028deaeb7ca6713b8533fe2d
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyType.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest.type;
+
+import java.util.Map;
+import java.util.UUID;
+
+import ch.systemsx.cisd.openbis.uitest.infra.Browsable;
+
+/**
+ * @author anttil
+ */
+public class PropertyType implements Browsable
+{
+
+    private String code;
+
+    private String label;
+
+    private String description;
+
+    private PropertyTypeDataType dataType;
+
+    public PropertyType()
+    {
+        this.code = UUID.randomUUID().toString();
+        this.label = "label";
+        this.description = "description";
+        this.dataType = BasicPropertyTypeDataType.BOOLEAN;
+    }
+
+    public String getCode()
+    {
+        return code;
+    }
+
+    public PropertyType setCode(String code)
+    {
+        this.code = code;
+        return this;
+    }
+
+    public String getLabel()
+    {
+        return label;
+    }
+
+    public PropertyType setLabel(String label)
+    {
+        this.label = label;
+        return this;
+    }
+
+    public String getDescription()
+    {
+        return description;
+    }
+
+    public PropertyType setDescription(String description)
+    {
+        this.description = description;
+        return this;
+    }
+
+    public PropertyTypeDataType getDataType()
+    {
+        return dataType;
+    }
+
+    public PropertyType setDataType(PropertyTypeDataType dataType)
+    {
+        this.dataType = dataType;
+        return this;
+    }
+
+    @Override
+    public boolean isRepresentedBy(Map<String, String> row)
+    {
+        return this.code.equalsIgnoreCase(row.get("Code"));
+    }
+
+    @Override
+    public String toString()
+    {
+        return "PropertyType " + this.code;
+    }
+}
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyTypeDataType.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyTypeDataType.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2685fd31ef1d0bb3fd127218706b8b5b3dbf238
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/PropertyTypeDataType.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest.type;
+
+/**
+ * @author anttil
+ */
+public interface PropertyTypeDataType
+{
+    public String getName();
+}
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SampleType.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/SampleType.java
similarity index 97%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SampleType.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/SampleType.java
index dc89a1f8e9c3dabc88c114a163d5f0be03cf487f..191c25133707749aa0b443d285fd8e99eb01b8db 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SampleType.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/SampleType.java
@@ -14,11 +14,13 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.infra;
+package ch.systemsx.cisd.openbis.uitest.type;
 
 import java.util.Map;
 import java.util.UUID;
 
+import ch.systemsx.cisd.openbis.uitest.infra.Browsable;
+
 /**
  * @author anttil
  */
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Space.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Space.java
similarity index 93%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Space.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Space.java
index 7cfe68aeccddddef2458355239733a64183cacd4..c7c5c33700864d4c0e5216a050e65e6c423b2d5b 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Space.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Space.java
@@ -14,11 +14,13 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.infra;
+package ch.systemsx.cisd.openbis.uitest.type;
 
 import java.util.Map;
 import java.util.UUID;
 
+import ch.systemsx.cisd.openbis.uitest.infra.Browsable;
+
 /**
  * @author anttil
  */
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Vocabulary.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Vocabulary.java
similarity index 95%
rename from ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Vocabulary.java
rename to ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Vocabulary.java
index 98132e943cd6806bcc829dcf21ae7938864ae2ab..06a3c498f77ed2fe2e45e3c5bae59e58c05b775c 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/Vocabulary.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/type/Vocabulary.java
@@ -14,13 +14,15 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.uitest.infra;
+package ch.systemsx.cisd.openbis.uitest.type;
 
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import ch.systemsx.cisd.openbis.uitest.infra.Browsable;
+
 /**
  * @author anttil
  */