diff --git a/src/main/java/com/ardublock/translator/block/operators/PidBlock.java b/src/main/java/com/ardublock/translator/block/operators/PidBlock.java
index 8433fa794fc47fcd54aa03b7f2be77bc52a53e6d..3bc24436b6eb7bd033ad7ec6ee9fa60b276eb0e4 100644
--- a/src/main/java/com/ardublock/translator/block/operators/PidBlock.java
+++ b/src/main/java/com/ardublock/translator/block/operators/PidBlock.java
@@ -73,15 +73,15 @@ public class PidBlock extends TranslatorBlock
 					+ "    long error       = setpoint - input;                  // get error\n" 
 					+ "    out = kp * error;                                     //P output\n\n";
 		if(integrative) {
-			functionCode +="    cumError  = cumError + error;    // compute integral\n";
+			functionCode +="    cumError  = cumError + (error * intervalSecond);    // compute integral\n";
 			if(limited) {
 				functionCode += "    cumError    = constrain(cumError, limitLow * 100.0, limitHigh * 100.0);            //limit integral against windup\n";
 			}
-			functionCode +=  "    out = out + (ki * intervalSecond) * cumError;                            //I output\n\n";
+			functionCode +=  "    out = out + (ki * cumError);                            //I output\n\n";
 		}
 		if(derivative) {
-			functionCode +="    long rateError   = error - lastError; // compute derivative\n" 
-						+  "    out = out - (kd / intervalSecond) * rateError;                           //D output\n\n";
+			functionCode +="    long rateError   = (error - lastError)  / intervalSecond; // compute derivative\n" 
+						+  "    out = out + kd * rateError;                           //D output\n\n";
 		}
 		if(limited) {
 			functionCode +="    out = constrain(out, limitLow, limitHigh);            //limit output\n\n";