diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 6b3a84bbb6228832391c6c60972929eb3c04a703..53cb39adc6fe9ad4ca2fb10275220131fa77f558 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -4746,7 +4746,8 @@ DynamicModel::computeChainRuleJacobian()
               break;
             }
 
-          blocks_derivatives[blk][{ eq, var, lag }] = d;
+          if (d != Zero)
+            blocks_derivatives[blk][{ eq, var, lag }] = d;
         }
     }
 }
diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index 205b1fd5d500751494ced2d693d19281d9e600b5..d7a07050eeb19c86a88324132447867046f1625c 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -2060,10 +2060,8 @@ StaticModel::computeChainRuleJacobian()
             {
               int var_orig = getBlockVariableID(blk, var);
               expr_t d1 = equations[eq_orig]->getChainRuleDerivative(getDerivID(symbol_table.getID(SymbolType::endogenous, var_orig), 0), recursive_vars);
-              if (d1 == Zero)
-                continue;
-
-              blocks_derivatives[blk][{ eq, var, 0 }] = d1;
+              if (d1 != Zero)
+                blocks_derivatives[blk][{ eq, var, 0 }] = d1;
             }
         }
     }