diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/BigDecimalPresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/BigDecimalPresenter.java
index bd9be04..52d8127 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/BigDecimalPresenter.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/BigDecimalPresenter.java
@@ -13,6 +13,7 @@
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
+import java.util.Locale;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.scout.sdk.jobs.OperationJob;
@@ -27,7 +28,7 @@
 
 /**
  * <h3>{@link BigDecimalPresenter}</h3>
- * 
+ *
  * @author Matthias Villiger
  * @since 3.10.0 02.12.2013
  */
@@ -36,12 +37,10 @@
   private final IPropertySourceParser<BigDecimal> m_parser;
   private final NumberFormat m_formatter;
 
-  //TODO: fix bigdecmial presenter
-
   public BigDecimalPresenter(PropertyViewFormToolkit toolkit, Composite parent) {
     super(toolkit, parent, "[\\-\\+0-9eE\\.']*");
     m_parser = new BigDecimalPropertySourceParser();
-    m_formatter = DecimalFormat.getInstance();
+    m_formatter = DecimalFormat.getInstance(Locale.ENGLISH);
     m_formatter.setMaximumFractionDigits(20);
   }
 
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/DoublePresenter.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/DoublePresenter.java
index 1efa0af..851fe69 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/DoublePresenter.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/view/properties/presenter/single/DoublePresenter.java
@@ -12,6 +12,7 @@
 
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
+import java.util.Locale;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.scout.sdk.jobs.OperationJob;
@@ -35,7 +36,7 @@
   public DoublePresenter(PropertyViewFormToolkit toolkit, Composite parent) {
     super(toolkit, parent, "[\\-\\+0-9\\.\\'eEinfdFD]*");
     m_parser = new DoublePropertySourceParser();
-    m_formatter = DecimalFormat.getInstance();
+    m_formatter = DecimalFormat.getInstance(Locale.ENGLISH);
     m_formatter.setMaximumFractionDigits(20);
   }
 
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/PropertyMethodSourceUtility.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/PropertyMethodSourceUtility.java
index abfb324..dc7daba 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/PropertyMethodSourceUtility.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/config/PropertyMethodSourceUtility.java
@@ -15,6 +15,7 @@
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.text.ParseException;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -73,7 +74,7 @@
    * return Integer.MAX_VALUE;
    * } // result: Integer.MAX_VALUE;
    * </xmp>
-   * 
+   *
    * @param method
    * @return
    * @throws CoreException
@@ -157,7 +158,7 @@
    * input: IConstants.A output: the value of A
    * input: null output: null
    * </xmp>
-   * 
+   *
    * @param parameter
    * @param method
    * @return
@@ -188,7 +189,7 @@
    * input: "AString" output: AString
    * input: IConstants.A output: the value of A
    * </xmp>
-   * 
+   *
    * @param parameter
    * @param method
    * @return
@@ -217,7 +218,7 @@
       parameter = parameter.replace('e', 'E');
       parameter = parameter.replace("E+", "E");
       try {
-        return DecimalFormat.getInstance().parse(parameter).doubleValue();
+        return DecimalFormat.getInstance(Locale.ENGLISH).parse(parameter).doubleValue();
       }
       catch (ParseException e) {
         throw new CoreException(new ScoutStatus("Error parsing parameter '" + parameter + "' to a decimal.", e));
@@ -235,7 +236,7 @@
         referencedValue = referencedValue.replace('e', 'E');
         referencedValue = referencedValue.replace("E+", "E");
         try {
-          return DecimalFormat.getInstance().parse(prefix + referencedValue).doubleValue();
+          return DecimalFormat.getInstance(Locale.ENGLISH).parse(prefix + referencedValue).doubleValue();
         }
         catch (ParseException e) {
           throw new CoreException(new ScoutStatus("Error parsing parameter '" + prefix + referencedValue + "' to a decimal.", e));
@@ -270,7 +271,7 @@
         referencedValue = referencedValue.replace('e', 'E');
         referencedValue = referencedValue.replace("E+", "E");
         try {
-          return DecimalFormat.getInstance().parse(prefix + referencedValue).intValue();
+          return DecimalFormat.getInstance(Locale.ENGLISH).parse(prefix + referencedValue).intValue();
         }
         catch (ParseException e) {
           throw new CoreException(new ScoutStatus("Error parsing parameter '" + prefix + referencedValue + "' to a decimal.", e));
@@ -358,7 +359,7 @@
    * <br>
    * Input: 2358.2357<br>
    * Output: 2358.2357
-   * 
+   *
    * @param parameter
    * @return
    * @throws CoreException
@@ -376,7 +377,7 @@
 
   /**
    * parses the given return clause input string into the corresponding rounding mode enum value.
-   * 
+   *
    * @param parameter
    *          The return clause
    * @return The bigdecimal value of the return clause.
@@ -409,7 +410,7 @@
    * <br>
    * Input: 2358<br>
    * Output: 2358
-   * 
+   *
    * @param parameter
    * @return
    * @throws CoreException
@@ -624,7 +625,7 @@
    * Input: TEXTS.get("abc")<br>
    * Output: abc
    * </code>
-   * 
+   *
    * @param input
    *          The String to parse.
    * @return
