diff --git a/org.eclipse.scout.rt.ui.rap.theme.rayo.mobile/theme/scout.mobile.css b/org.eclipse.scout.rt.ui.rap.theme.rayo.mobile/theme/scout.mobile.css
index a311add..bf844bd 100644
--- a/org.eclipse.scout.rt.ui.rap.theme.rayo.mobile/theme/scout.mobile.css
+++ b/org.eclipse.scout.rt.ui.rap.theme.rayo.mobile/theme/scout.mobile.css
@@ -720,24 +720,15 @@
   padding:2px;
 }
 
-Composite.formbarContainer { background-color:#ddebf4; }
+Composite.formbarContainer {
+  background-color:#ddebf4;
+  padding:5px;
+}
 
 Composite.labelfield { padding:6px 0px 0px 0px; }
 
 Composite.htmlfield { padding:6px 0px 0px 0px; }
 
-Composite[BORDER].inputField {
-  padding:0px 0px 0px 0px;
-  border:1px solid #95b7c1;
-  border-radius:4px;
-}
-
-Composite[BORDER].inputField-readOnly {
-  padding:0px 0px 0px 0px;
-  border:1px solid #c9dadf;
-  border-radius:4px;
-}
-
 Button.formButton {
   background-image:none;
   color:#000000;
@@ -905,14 +896,14 @@
 
 Link-Hyperlink:disabled { color:#2a5a76; }
 
-Composite[BORDER].colorfield {
+Composite.colorfield {
   padding:0px 2px 0px 0px;
   border:1px solid #95b7c1;
   border-radius:4px;
   background-image:none;
 }
 
-Composite[BORDER].colorfield-disabled {
+Composite.colorfield-disabled {
   padding:0px 2px 0px 0px;
   border:1px solid #c9dadf;
   border-radius:4px;
@@ -982,6 +973,18 @@
   border:none;
 }
 
+Composite.datefield {
+  padding:0px 0px 0px 0px;
+  border:1px solid #95b7c1;
+  border-radius:4px;
+}
+
+Composite.datefield-disabled {
+  padding:0px 0px 0px 0px;
+  border:1px solid #c9dadf;
+  border-radius:4px;
+}
+
 Text.datefield {
   border-radius:4px;
   background-image:none;
@@ -1321,6 +1324,18 @@
   cursor:pointer;
 }
 
+Composite.numberfield {
+  padding:0px 0px 0px 0px;
+  border:1px solid #95b7c1;
+  border-radius:4px;
+}
+
+Composite.numberfield-disabled {
+  padding:0px 0px 0px 0px;
+  border:1px solid #c9dadf;
+  border-radius:4px;
+}
+
 ScrollBar {
   background-color:transparent;
   background-image:gradient(linear,left top,right top,from(#d4e1e7),to(#c6d6df));
@@ -1475,15 +1490,15 @@
 
 Shell-CloseButton:inactive:hover { background-image:url(theme/img/window/shell-close-hover.png); }
 
-Composite[BORDER].smartfield {
-  padding:0px 2px 0px 0px;
+Composite.smartfield {
+  padding:0px;
   border:1px solid #95b7c1;
   border-radius:4px;
   background-image:none;
 }
 
-Composite[BORDER].smartfield-disabled {
-  padding:0px 2px 0px 0px;
+Composite.smartfield-disabled {
+  padding:0px;
   border:1px solid #c9dadf;
   border-radius:4px;
 }
@@ -1571,6 +1586,18 @@
   background-color:#fafdff;
 }
 
+Composite.stringfield {
+  padding:0px 0px 0px 0px;
+  border:1px solid #95b7c1;
+  border-radius:4px;
+}
+
+Composite.stringfield-disabled {
+  padding:0px 0px 0px 0px;
+  border:1px solid #c9dadf;
+  border-radius:4px;
+}
+
 Composite.tabboxContainer { background-color:#cde3ee; }
 
 Composite.tabboxButton {
@@ -1963,6 +1990,18 @@
 
 Text-Message { color:#a7a6aa; }
 
+Composite.timefield {
+  padding:0px 0px 0px 0px;
+  border:1px solid #95b7c1;
+  border-radius:4px;
+}
+
+Composite.timefield-disabled {
+  padding:0px 0px 0px 0px;
+  border:1px solid #c9dadf;
+  border-radius:4px;
+}
+
 Text.timefield {
   border-radius:4px;
   background-image:none;
@@ -2392,10 +2431,6 @@
 
 Composite.smartFieldActionBar { background-image:gradient(linear,left top,left bottom,from(#ddebf4),to(#d4e1e7)); }
 
-Composite.smartfield { padding:0px; }
-
-Composite.smartfield-disabled { padding:0px; }
-
 Composite.smartfield:hover { background-color:#fef9f1; }
 
 Composite.smartfield_browse { background-image:url(theme/img/button/smartfield_browse.png); }
diff --git a/org.eclipse.scout.rt.ui.rap.theme.rayo/theme/scout.css b/org.eclipse.scout.rt.ui.rap.theme.rayo/theme/scout.css
index f0ed8a0..9b9c936 100644
--- a/org.eclipse.scout.rt.ui.rap.theme.rayo/theme/scout.css
+++ b/org.eclipse.scout.rt.ui.rap.theme.rayo/theme/scout.css
@@ -757,16 +757,6 @@
   /* a little padding to make sure the content is on the same line as the field's label */
   padding: 4px 0px 0px 0px;
 }
-Composite[BORDER].inputField {
-  padding: 0px 0px 0px 0px;
-  border: 1px solid #95b7c1;
-  border-radius: 4px;
-}
-Composite[BORDER].inputField-readOnly {
-  padding: 0px 0px 0px 0px;
-  border: 1px solid #c9dadf;
-  border-radius: 4px;
-}
 Button.formButton {
   background-image: none;
   color: #000000;
@@ -866,14 +856,14 @@
 Link-Hyperlink:disabled {
   color: #2a5a76;
 }
-Composite[BORDER].colorfield {
+Composite.colorfield {
   /* 2px on the right side to move the button a little bit away from the border */
   padding: 0px 2px 0px 0px;
   border: 1px solid #95b7c1;
   border-radius: 4px;
   background-image: none;
 }
-Composite[BORDER].colorfield-disabled {
+Composite.colorfield-disabled {
   /* 2px on the right side to move the button a little bit away from the border */
   padding: 0px 2px 0px 0px;
   border: 1px solid #c9dadf;
@@ -941,6 +931,16 @@
   border: none;
 }
 /*Datefield*/
+Composite.datefield {
+  padding: 0px 0px 0px 0px;
+  border: 1px solid #95b7c1;
+  border-radius: 4px;
+}
+Composite.datefield-disabled {
+  padding: 0px 0px 0px 0px;
+  border: 1px solid #c9dadf;
+  border-radius: 4px;
+}
 Text.datefield {
   border-radius: 4px;
   background-image: none;
@@ -1252,6 +1252,17 @@
   border: none;
   cursor: pointer;
 }
+/*Numberfield*/
+Composite.numberfield {
+  padding: 0px 0px 0px 0px;
+  border: 1px solid #95b7c1;
+  border-radius: 4px;
+}
+Composite.numberfield-disabled {
+  padding: 0px 0px 0px 0px;
+  border: 1px solid #c9dadf;
+  border-radius: 4px;
+}
 /* ScrollBar */
 ScrollBar {
   background-color: transparent;
@@ -1420,14 +1431,14 @@
 Shell-CloseButton:inactive:hover {
   background-image: url(theme/img/window/shell-close-hover.png );
 }
-Composite[BORDER].smartfield {
+Composite.smartfield {
   /* 2px on the right side to move the button a little bit away from the border */
   padding: 0px 2px 0px 0px;
   border: 1px solid #95b7c1;
   border-radius: 4px;
   background-image: none;
 }
-Composite[BORDER].smartfield-disabled {
+Composite.smartfield-disabled {
   /* 2px on the right side to move the button a little bit away from the border */
   padding: 0px 2px 0px 0px;
   border: 1px solid #c9dadf;
@@ -1511,6 +1522,17 @@
   color: #fe9a23;
   background-color: #fafdff;
 }
+/*Stringfield*/
+Composite.stringfield {
+  padding: 0px 0px 0px 0px;
+  border: 1px solid #95b7c1;
+  border-radius: 4px;
+}
+Composite.stringfield-disabled {
+  padding: 0px 0px 0px 0px;
+  border: 1px solid #c9dadf;
+  border-radius: 4px;
+}
 /**
  *  RwtScoutTabBox / RwtScoutTabItem     start
  */
@@ -1779,6 +1801,16 @@
   color: #a7a6aa;
 }
 /*Timefield*/
+Composite.timefield {
+  padding: 0px 0px 0px 0px;
+  border: 1px solid #95b7c1;
+  border-radius: 4px;
+}
+Composite.timefield-disabled {
+  padding: 0px 0px 0px 0px;
+  border: 1px solid #c9dadf;
+  border-radius: 4px;
+}
 Text.timefield {
   border-radius: 4px;
   background-image: none;
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java
index 7cf9127..28a5c28 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutDateField.java
@@ -108,7 +108,7 @@
     StatusLabelEx label = getUiEnvironment().getFormToolkit().createStatusLabel(container, getScoutObject());
 
     m_dateContainer = getUiEnvironment().getFormToolkit().createComposite(container, SWT.BORDER);
-    m_dateContainer.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER);
+    m_dateContainer.setData(RWT.CUSTOM_VARIANT, VARIANT_DATEFIELD);
 
     m_menuMarkerComposite = new RwtContextMenuMarkerComposite(m_dateContainer, getUiEnvironment(), SWT.NONE);
     getUiEnvironment().getFormToolkit().adapt(m_menuMarkerComposite);
@@ -290,10 +290,10 @@
     super.setEnabledFromScout(b);
     m_dropDownButton.setEnabled(b);
     if (b) {
-      m_dateContainer.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER);
+      m_dateContainer.setData(RWT.CUSTOM_VARIANT, VARIANT_DATEFIELD);
     }
     else {
-      m_dateContainer.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER_READONLY);
+      m_dateContainer.setData(RWT.CUSTOM_VARIANT, VARIANT_DATEFIELD_DISABLED);
     }
   }
 
@@ -494,8 +494,8 @@
 
     @Override
     public void widgetSelected(SelectionEvent e) {
-      getUiField().forceFocus();
-      handleUiDateChooserAction();
+          getUiField().forceFocus();
+          handleUiDateChooserAction();
     }
   } // end class P_RwtBrowseButtonListener
 
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutTimeField.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutTimeField.java
index d53ea63..12acbc6 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutTimeField.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/datefield/RwtScoutTimeField.java
@@ -108,7 +108,7 @@
     StatusLabelEx label = getUiEnvironment().getFormToolkit().createStatusLabel(container, getScoutObject());
 
     m_timeContainer = getUiEnvironment().getFormToolkit().createComposite(container, SWT.BORDER);
-    m_timeContainer.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER);
+    m_timeContainer.setData(RWT.CUSTOM_VARIANT, VARIANT_TIMEFIELD);
 
     m_menuMarkerComposite = new RwtContextMenuMarkerComposite(m_timeContainer, getUiEnvironment(), SWT.NONE);
     getUiEnvironment().getFormToolkit().adapt(m_menuMarkerComposite);
@@ -158,7 +158,6 @@
         }
       }
     });
-
     //
     setUiContainer(container);
     setUiLabel(label);
@@ -287,10 +286,10 @@
     m_dropDownButton.setEnabled(b);
     getUiField().setEnabled(b);
     if (b) {
-      m_timeContainer.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER);
+      m_timeContainer.setData(RWT.CUSTOM_VARIANT, VARIANT_TIMEFIELD);
     }
     else {
-      m_timeContainer.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER_READONLY);
+      m_timeContainer.setData(RWT.CUSTOM_VARIANT, VARIANT_TIMEFIELD_DISABLED);
     }
   }
 
@@ -489,8 +488,8 @@
 
     @Override
     public void widgetSelected(SelectionEvent e) {
-      getUiField().forceFocus();
-      handleUiTimeChooserAction();
+          getUiField().forceFocus();
+          handleUiTimeChooserAction();
     }
   } // end class P_RwtBrowseButtonListener
 
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/numberfield/IRwtScoutNumberField.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/numberfield/IRwtScoutNumberField.java
index 4c51a8f..18ba716 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/numberfield/IRwtScoutNumberField.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/numberfield/IRwtScoutNumberField.java
@@ -16,11 +16,14 @@
 
 /**
  * <h3>IRwtScoutNumberField</h3>
- * 
+ *
  * @since 3.7.0 June 2011
  */
 public interface IRwtScoutNumberField extends IRwtScoutFormField<INumberField<?>> {
 
+  String VARIANT_NUMBERFIELD = "numberfield";
+  String VARIANT_NUMBERFIELD_DISABLED = "numberfield-disabled";
+
   @Override
   Text getUiField();
 }
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/numberfield/RwtScoutNumberField.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/numberfield/RwtScoutNumberField.java
index 7a072cc..9eccf06 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/numberfield/RwtScoutNumberField.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/numberfield/RwtScoutNumberField.java
@@ -78,7 +78,7 @@
 
     m_menuMarkerComposite = new RwtContextMenuMarkerComposite(container, getUiEnvironment());
     getUiEnvironment().getFormToolkit().adapt(m_menuMarkerComposite);
-    m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER);
+    m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, VARIANT_NUMBERFIELD);
     m_menuMarkerComposite.addSelectionListener(new SelectionAdapter() {
       private static final long serialVersionUID = 1L;
 
@@ -211,10 +211,10 @@
   protected void setEnabledFromScout(boolean b) {
     super.setEnabledFromScout(b);
     if (b) {
-      m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER);
+      m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, VARIANT_NUMBERFIELD);
     }
     else {
-      m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER_READONLY);
+      m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, VARIANT_NUMBERFIELD_DISABLED);
     }
   }
 
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/stringfield/IRwtScoutStringField.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/stringfield/IRwtScoutStringField.java
index 81f2005..b84b33e 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/stringfield/IRwtScoutStringField.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/stringfield/IRwtScoutStringField.java
@@ -16,6 +16,9 @@
 
 public interface IRwtScoutStringField extends IRwtScoutFormField<IStringField> {
 
+  String VARIANT_STRINGFIELD = "stringfield";
+  String VARIANT_STRINGFIELD_DISABLED = "stringfield-disabled";
+
   @Override
   StyledTextEx getUiField();
 }
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/stringfield/RwtScoutStringField.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/stringfield/RwtScoutStringField.java
index 7439ee6..0a869b8 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/stringfield/RwtScoutStringField.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/form/fields/stringfield/RwtScoutStringField.java
@@ -80,7 +80,7 @@
 
     m_menuMarkerComposite = new RwtContextMenuMarkerComposite(container, getUiEnvironment());
     getUiEnvironment().getFormToolkit().adapt(m_menuMarkerComposite);
-    m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER);
+    m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, VARIANT_STRINGFIELD);
     m_menuMarkerComposite.addSelectionListener(new SelectionAdapter() {
       private static final long serialVersionUID = 1L;
 
@@ -183,10 +183,10 @@
   protected void setEnabledFromScout(boolean b) {
     super.setEnabledFromScout(b);
     if (b) {
-      m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER);
+      m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, VARIANT_STRINGFIELD);
     }
     else {
-      m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, RwtUtility.VARIANT_COMPOSITE_INPUT_FIELD_BORDER_READONLY);
+      m_menuMarkerComposite.setData(RWT.CUSTOM_VARIANT, VARIANT_STRINGFIELD_DISABLED);
     }
   }
 
diff --git a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/util/RwtUtility.java b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/util/RwtUtility.java
index 32480b8..f72b8b0 100644
--- a/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/util/RwtUtility.java
+++ b/org.eclipse.scout.rt.ui.rap/src/org/eclipse/scout/rt/ui/rap/util/RwtUtility.java
@@ -82,9 +82,6 @@
   public static final String VARIANT_LISTBOX_DISABLED = "listboxDisabled";
   public static final String VARIANT_EMPTY = "empty";
 
-  public static final String VARIANT_COMPOSITE_INPUT_FIELD_BORDER = "inputField";
-  public static final String VARIANT_COMPOSITE_INPUT_FIELD_BORDER_READONLY = "inputField-readOnly";
-
   private static final Map<String, Integer> SCOUT_RWT_KEY_MAP;
   private static final Map<Integer, String> RWT_SCOUT_KEY_MAP;
 
