diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/CodeField.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/CodeField.java
index 7f1b3baad78700e04a577d2ef065faf9cb1e9788..0ba19c604dc6eb3f48069e9af4ac6e50b4469ca1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/CodeField.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/field/CodeField.java
@@ -35,10 +35,17 @@ public final class CodeField extends VarcharField
     public final static String CODE_PATTERN = "^[a-zA-Z0-9_\\-]+$";
 
     public CodeField(final IMessageProvider messageProvider, final String label)
+    {
+        this(messageProvider, label, CODE_PATTERN);
+    }
+
+    public CodeField(final IMessageProvider messageProvider, final String label,
+            final String pattern)
     {
         super(label, true);
         setMaxLength(40);
-        setRegex(CODE_PATTERN);
+        setRegex(pattern);
         getMessages().setRegexText(messageProvider.getMessage(Dict.INVALID_CODE_MESSAGE, "Code"));
     }
+
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistration.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistration.java
index cb50d34706957d9da6b762d645bedb8b860ff152..6276b58689ff0013391b49ff7f8be6a7701b8b03 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistration.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeRegistration.java
@@ -39,6 +39,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Abstrac
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.CodeField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.VarcharField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataType;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Vocabulary;
@@ -49,8 +50,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.VocabularyTerm;
  * 
  * @author Christian Ribeaud
  */
+// TODO 2008-12-16, Christian Ribeaud: Reset info box when starting to input something.
 public final class PropertyTypeRegistration extends AbstractRegistrationForm
 {
+    private final static String DOT_EXTENDED_CODE_PATTERN = "^[a-zA-Z0-9_\\-\\.]+$";
+
     private static final String PREFIX = "property-type-registration";
 
     public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX;
@@ -125,16 +129,21 @@ public final class PropertyTypeRegistration extends AbstractRegistrationForm
         return formLayout;
     }
 
+    private final CodeField createCodeField()
+    {
+        return new CodeField(viewContext, viewContext.getMessage(Dict.CODE),
+                DOT_EXTENDED_CODE_PATTERN);
+    }
+
     private final void addFields()
     {
-        formPanel.add(codeField = new CodeField(viewContext, viewContext.getMessage(Dict.CODE)));
+        formPanel.add(codeField = createCodeField());
         formPanel.add(labelField = createLabelField());
         formPanel.add(descriptionField =
                 createDescriptionField(viewContext.getMessage(Dict.DESCRIPTION), true));
         formPanel.add(dataTypeSelectionWidget = new DataTypeSelectionWidget(viewContext));
         formPanel.add(vocabularyFieldSet = createFieldSet());
-        vocabularyFieldSet.add(vocabularyField =
-                new CodeField(viewContext, viewContext.getMessage(Dict.CODE)));
+        vocabularyFieldSet.add(vocabularyField = createCodeField());
         vocabularyFieldSet.add(vocabularyDescription =
                 createDescriptionField(viewContext.getMessage(Dict.DESCRIPTION), false));
         vocabularyFieldSet.add(vocabularyTermsField = createVocabularyTermsTextArea());
@@ -228,8 +237,9 @@ public final class PropertyTypeRegistration extends AbstractRegistrationForm
         propertyType.setCode(codeField.getValue());
         propertyType.setLabel(labelField.getValue());
         propertyType.setDescription(descriptionField.getValue());
-        if (DataTypeCode.CONTROLLEDVOCABULARY.equals(dataTypeSelectionWidget
-                .tryGetSelectedDataType().getCode()))
+        final DataType selectedDataType = dataTypeSelectionWidget.tryGetSelectedDataType();
+        propertyType.setDataType(selectedDataType);
+        if (DataTypeCode.CONTROLLEDVOCABULARY.equals(selectedDataType.getCode()))
         {
             final Vocabulary vocabulary = new Vocabulary();
             vocabulary.setCode(vocabularyField.getValue());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
index 7bebefd88b5563efda65632970c2c51865a78003..ebb9b0aeb067adf4a01275c3833de3ddf6a06c38 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
@@ -23,7 +23,6 @@ import ch.systemsx.cisd.authentication.ISessionManager;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.NewSample;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
-import ch.systemsx.cisd.openbis.generic.shared.dto.CodeConverter;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
@@ -227,12 +226,11 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe
                 + " MANDATORY(%S) DEFAULT(%S)", propertyTypeCode, entityTypeCode, isMandatory,
                 defaultValue);
     }
-    
-    
+
     public final void registerPropertyType(final String sessionToken,
             final PropertyType propertyType)
     {
-        logTracking(sessionToken, "register_property_type", "PROPERTY_TYPE(%s)", CodeConverter
-                .tryToBusinessLayer(propertyType.getCode(), true));
+        logTracking(sessionToken, "register_property_type", "PROPERTY_TYPE(%s)", propertyType
+                .getCode());
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java
index 9612ace9b56edf289859bfe78bf90de3e0980378..07a06b2cdd19ff88571e1177af5f402fda10adcf 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/PropertyTypeBO.java
@@ -20,10 +20,14 @@ import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.PropertyType;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Vocabulary;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
+import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityDataType;
 
 /**
@@ -41,6 +45,21 @@ public final class PropertyTypeBO extends AbstractBusinessObject implements IPro
         super(daoFactory, session);
     }
 
+    private final VocabularyPE createVocabulary(final Vocabulary vocabulary)
+    {
+        final VocabularyPE vocabularyPE = new VocabularyPE();
+        vocabularyPE.setCode(vocabulary.getCode());
+        vocabularyPE.setDescription(vocabulary.getDescription());
+        vocabularyPE.setDatabaseInstance(getHomeDatabaseInstance());
+        for (final VocabularyTerm term : vocabulary.getTerms())
+        {
+            final VocabularyTermPE vocabularyTermPE = new VocabularyTermPE();
+            vocabularyTermPE.setCode(term.getCode());
+            vocabularyPE.addTerm(vocabularyTermPE);
+        }
+        return null;
+    }
+
     //
     // IPropertyTypeBO
     //
@@ -68,7 +87,14 @@ public final class PropertyTypeBO extends AbstractBusinessObject implements IPro
         propertyTypePE.setRegistrator(findRegistrator());
         if (EntityDataType.CONTROLLEDVOCABULARY.equals(dataTypePE.getCode()))
         {
-            // propertyTypePE.setVocabulary(vocabulary);
+            VocabularyPE vocabularyPE =
+                    getVocabularyDAO().tryFindVocabularyByCode(
+                            propertyType.getVocabulary().getCode());
+            if (vocabularyPE == null)
+            {
+                vocabularyPE = createVocabulary(propertyType.getVocabulary());
+            }
+            propertyTypePE.setVocabulary(vocabularyPE);
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/VocabularyTermPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/VocabularyTermPE.java
index 4d354ef5432f182cd8c1773f8e7c2703b9d3c74d..28bec7c5d0b5fc1979cbca6681c4d1f5522d5e00 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/VocabularyTermPE.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/VocabularyTermPE.java
@@ -115,7 +115,7 @@ public class VocabularyTermPE extends HibernateAbstractRegistrationHolder implem
     }
 
     @Transient
-    public VocabularyPE getVocabulary()
+    VocabularyPE getVocabulary()
     {
         return getVocabularyInternal();
     }