diff --git a/.eslintrc.json b/.eslintrc.json
index a28ce2d..fff6061 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -71,7 +71,6 @@
         "no-new-wrappers": "off",
         "camelcase": "off",
         "no-useless-return": "off",
-        "operator-assignment": "off",
         "no-lonely-if": "off",
         "newline-per-chained-call": "off",
         "no-useless-concat": "off",
diff --git a/player/js/3rd_party/transformation-matrix.js b/player/js/3rd_party/transformation-matrix.js
index a3a68c3..a45d466 100644
--- a/player/js/3rd_party/transformation-matrix.js
+++ b/player/js/3rd_party/transformation-matrix.js
@@ -153,7 +153,7 @@
       _p[12] = _p[12] * a2 + _p[15] * m2;
       _p[13] = _p[13] * f2 + _p[15] * n2;
       _p[14] = _p[14] * k2 + _p[15] * o2;
-      _p[15] = _p[15] * p2;
+      _p[15] *= p2;
       // }
       this._identityCalculated = false;
       return this;
diff --git a/player/js/elements/htmlElements/HShapeElement.js b/player/js/elements/htmlElements/HShapeElement.js
index b562c8e..7d2fe07 100644
--- a/player/js/elements/htmlElements/HShapeElement.js
+++ b/player/js/elements/htmlElements/HShapeElement.js
@@ -112,9 +112,9 @@
     a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
     c = 3 * p1[i] - 3 * p0[i];
 
-    b = b | 0;
-    a = a | 0;
-    c = c | 0;
+    b |= 0;
+    a |= 0;
+    c |= 0;
 
     if (a === 0) {
       if (b === 0) {
diff --git a/player/js/utils/expressions/ExpressionManager.js b/player/js/utils/expressions/ExpressionManager.js
index 5c8ae1f..baa690e 100644
--- a/player/js/utils/expressions/ExpressionManager.js
+++ b/player/js/utils/expressions/ExpressionManager.js
@@ -47,7 +47,7 @@
     }
     if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
       a = a.slice(0);
-      a[0] = a[0] + b;
+      a[0] += b;
       return a;
     }
     if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
@@ -86,7 +86,7 @@
     }
     if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
       a = a.slice(0);
-      a[0] = a[0] - b;
+      a[0] -= b;
       return a;
     }
     if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
diff --git a/player/js/utils/pooling/pool_factory.js b/player/js/utils/pooling/pool_factory.js
index 79ce028..0369fd1 100644
--- a/player/js/utils/pooling/pool_factory.js
+++ b/player/js/utils/pooling/pool_factory.js
@@ -23,7 +23,7 @@
     function release(element) {
       if (_length === _maxLength) {
         pool = pooling.double(pool);
-        _maxLength = _maxLength * 2;
+        _maxLength *= 2;
       }
       if (_release) {
         _release(element);
diff --git a/player/js/utils/pooling/shapeCollection_pool.js b/player/js/utils/pooling/shapeCollection_pool.js
index c787095..804a12c 100644
--- a/player/js/utils/pooling/shapeCollection_pool.js
+++ b/player/js/utils/pooling/shapeCollection_pool.js
@@ -28,7 +28,7 @@
 
     if (_length === _maxLength) {
       pool = pooling.double(pool);
-      _maxLength = _maxLength * 2;
+      _maxLength *= 2;
     }
     pool[_length] = shapeCollection;
     _length += 1;
diff --git a/player/js/utils/text/TextAnimatorProperty.js b/player/js/utils/text/TextAnimatorProperty.js
index fc9bc8b..da86d11 100644
--- a/player/js/utils/text/TextAnimatorProperty.js
+++ b/player/js/utils/text/TextAnimatorProperty.js
@@ -406,9 +406,9 @@
         if (documentData.strokeColorAnim && animatorProps.sc.propType) {
           for (k = 0; k < 3; k += 1) {
             if (mult.length) {
-              sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult[0];
+              sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];
             } else {
-              sc[k] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult;
+              sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;
             }
           }
         }
@@ -416,9 +416,9 @@
           if (animatorProps.fc.propType) {
             for (k = 0; k < 3; k += 1) {
               if (mult.length) {
-                fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult[0];
+                fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];
               } else {
-                fc[k] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult;
+                fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;
               }
             }
           }
