diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index a4303bd906413aadebfc73c45f3da1e94bbde619..a877d8608f80d83a54a830ebc192c0a3349fd8b4 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -4286,12 +4286,11 @@ DynamicModel::computingPass(bool jacobianExo, bool hessian, bool thirdDerivative
         }
     }
   else
-    if (!no_tmp_terms)
-      {
-        computeTemporaryTerms(!use_dll);
-        if (bytecode)
-          computeTemporaryTermsMapping();
-      }
+    {
+      computeTemporaryTerms(!use_dll, no_tmp_terms);
+      if (bytecode && !no_tmp_terms)
+        computeTemporaryTermsMapping();
+    }
 }
 
 void
diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index 3cc8d6bb8828ad07d78d0c061f53256ca1c8cce3..91e126f645802fc854f72fe03c3248d332f85f47 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -1106,7 +1106,7 @@ ModelTree::computeThirdDerivatives(const set<int> &vars)
 }
 
 void
-ModelTree::computeTemporaryTerms(bool is_matlab)
+ModelTree::computeTemporaryTerms(bool is_matlab, bool no_tmp_terms)
 {
   map<expr_t, pair<int, NodeTreeReference>> reference_count;
   temporary_terms.clear();
@@ -1129,6 +1129,11 @@ ModelTree::computeTemporaryTerms(bool is_matlab)
       reference_count[v] = { ExprNode::min_cost(is_matlab)+1, NodeTreeReference::residuals };
     }
 
+  /* When option notmpterms is set, we only need to process model local
+     variables (and turn them into temporary terms); no need to go further */
+  if (no_tmp_terms)
+    return;
+
   map<NodeTreeReference, temporary_terms_t> temp_terms_map;
   temp_terms_map[NodeTreeReference::residuals] = temporary_terms_res;
   temp_terms_map[NodeTreeReference::firstDeriv] = temporary_terms_g1;
diff --git a/src/ModelTree.hh b/src/ModelTree.hh
index 1ec338316887adcb691b1360ba1c9595042ca98f..92adc7105e1627f1f1dc672489712ccaedbae4b1 100644
--- a/src/ModelTree.hh
+++ b/src/ModelTree.hh
@@ -186,7 +186,7 @@ protected:
   //! Write derivative of an equation w.r. to a variable
   void writeDerivative(ostream &output, int eq, int symb_id, int lag, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms) const;
   //! Computes temporary terms (for all equations and derivatives)
-  void computeTemporaryTerms(bool is_matlab);
+  void computeTemporaryTerms(bool is_matlab, bool no_tmp_terms);
   //! Computes temporary terms for the file containing parameters derivatives
   void computeParamsDerivativesTemporaryTerms();
   //! Writes temporary terms
diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index 4b339a5d4567661fa0ff8ab19017fafa3deaf445..22870c3fcbb3ef37d2224537520b3e788f079f0e 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -1139,12 +1139,9 @@ StaticModel::computingPass(const eval_context_t &eval_context, bool no_tmp_terms
     }
   else
     {
-      if (!no_tmp_terms)
-        {
-          computeTemporaryTerms(true);
-          if (bytecode)
-            computeTemporaryTermsMapping(temporary_terms, map_idx);
-        }
+      computeTemporaryTerms(true, no_tmp_terms);
+      if (bytecode && !no_tmp_terms)
+        computeTemporaryTermsMapping(temporary_terms, map_idx);
     }
 }