diff --git a/explelibx-mgrid/exple-mul.cpp b/explelibx-mgrid/exple-mul.cpp
index 76a1186b289498a09db76d76bf1be23f457d80c3..dbf352e09ece795494d42f26616c284cbc8b0096 100644
--- a/explelibx-mgrid/exple-mul.cpp
+++ b/explelibx-mgrid/exple-mul.cpp
@@ -1,12 +1,20 @@
 #include "exple-mul.h"
 
+int sgn(int val) {
+    return (0 < val) - (val < 0);
+}
+
+int abs(int a) {
+    return (a >= 0)? a : -a;
+}
+
 int exple::mul(int a, int b)
 {
   int result = 0;
 
-  for (int n = 0; n<b; n++)
+  for (int n = 0; n<abs(b); n++)
   {
     result += a;
   }
-  return result;
+  return result * sgn(b);
 }