diff --git a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/BooleanDataType.java b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/BooleanDataType.java
index 36eeed2658..d94cfa9c4a 100644
--- a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/BooleanDataType.java
+++ b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/BooleanDataType.java
@@ -41,7 +41,7 @@ public void writeExternal(ObjectOutput out) throws IOException {
 
     @Override
     public boolean verifyDataType(final Object value) {
-        if ( value instanceof Boolean ) {
+        if (value instanceof Boolean || "true".equalsIgnoreCase(value.toString()) || "false".equalsIgnoreCase(value.toString())) {
             return true;
         }
         return false;
diff --git a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/FloatDataType.java b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/FloatDataType.java
index e3fa20d017..29ebdc9e89 100644
--- a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/FloatDataType.java
+++ b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/FloatDataType.java
@@ -20,6 +20,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 
+import org.apache.commons.lang3.StringUtils;
 import org.jbpm.process.core.datatype.DataType;
 
 /**
@@ -41,9 +42,9 @@ public void writeExternal(ObjectOutput out) throws IOException {
 
     @Override
     public boolean verifyDataType(final Object value) {
-        if ( value instanceof Float ) {
+        if (value instanceof Float || StringUtils.isNumeric(value.toString())) {
             return true;
-        } else if ( value == null ) {
+        } else if (value == null) {
             return true;
         } else {
             return false;
diff --git a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/IntegerDataType.java b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/IntegerDataType.java
index a0a2194e06..802ab8474c 100644
--- a/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/IntegerDataType.java
+++ b/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/type/IntegerDataType.java
@@ -21,6 +21,7 @@
 import java.io.ObjectOutput;
 
 import org.jbpm.process.core.datatype.DataType;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * Representation of an integer datatype.
@@ -41,9 +42,9 @@ public void writeExternal(ObjectOutput out) throws IOException {
 
     @Override
     public boolean verifyDataType(final Object value) {
-        if ( value instanceof Integer ) {
+        if (value instanceof Integer || StringUtils.isNumeric(value.toString())) {
             return true;
-        } else if ( value == null ) {
+        } else if (value == null) {
             return true;
         } else {
             return false;
diff --git a/jbpm-flow/src/main/java/org/jbpm/process/instance/context/variable/VariableScopeInstance.java b/jbpm-flow/src/main/java/org/jbpm/process/instance/context/variable/VariableScopeInstance.java
index ef744868be..1ca7774e5d 100644
--- a/jbpm-flow/src/main/java/org/jbpm/process/instance/context/variable/VariableScopeInstance.java
+++ b/jbpm-flow/src/main/java/org/jbpm/process/instance/context/variable/VariableScopeInstance.java
@@ -104,6 +104,7 @@ public void setVariable(String name, Object value) {
         		return;
         	}
         }
+
         // check if variable that is being set is readonly and has already been set
         if (oldValue != null && !oldValue.equals(value) && getVariableScope().isReadOnly(name)) {
             throw new VariableViolationException(getProcessInstance().getId(), name, "Variable '" + name + "' is already set and is marked as read only");