diff --git a/DynareBison.yy b/DynareBison.yy
index 8ee0389b57ac5cfa7723f92385748e3fe16c42d0..df1d842400b9c5d5cbd32ad6c0e7789d03cd14a7 100644
--- a/DynareBison.yy
+++ b/DynareBison.yy
@@ -1250,7 +1250,10 @@ homotopy_list : homotopy_item
               ;
 
 homotopy_item : NAME COMMA expression COMMA expression ';'
-              { driver.homotopy_val($1,$3,$5);};
+                { driver.homotopy_val($1, $3, $5);}
+              | NAME COMMA expression ';'
+                { driver.homotopy_val($1, NULL, $3);}
+              ;
 
 number : INT_NUMBER
        | FLOAT_NUMBER
diff --git a/NumericalInitialization.cc b/NumericalInitialization.cc
index b7783141e8130aff7eb084b091d5c9e3967f3cbf..a38f4fdaffb56064b4e2a7ed3ddf20e7bd04d7d9 100644
--- a/NumericalInitialization.cc
+++ b/NumericalInitialization.cc
@@ -179,7 +179,10 @@ HomotopyStatement::writeOutput(ostream &output, const string &basename) const
       const int id = symbol_table.getID(name) + 1;
 
       output << "options_.homotopy_values = vertcat(options_.homotopy_values, [ " << type << ", " << id << ", ";
-      expression1->writeOutput(output);
+      if (expression1 != NULL)
+        expression1->writeOutput(output);
+      else
+        output << "NaN";
       output << ", ";
       expression2->writeOutput(output);
       output << "]);" << endl;
diff --git a/ParsingDriver.cc b/ParsingDriver.cc
index eec83386b03ce380ba4e9d160588cb1db1f0382d..6e0e10b120ad487d4bd8f3cd8a8d0c71082f58f9 100644
--- a/ParsingDriver.cc
+++ b/ParsingDriver.cc
@@ -347,10 +347,7 @@ ParsingDriver::homotopy_val(string *name, NodeID val1, NodeID val2)
       && type != eExogenousDet)
     error("homotopy_val: " + *name + " should be a parameter or exogenous variable");
 
-  if (homotopy_values.find(*name) != homotopy_values.end())
-    error("homotopy_val: " + *name +" declared twice");
-
-  homotopy_values[*name] = make_pair(val1, val2);
+  homotopy_values.push_back(make_pair(*name, make_pair(val1, val2)));
 
   delete name;
 }
diff --git a/include/NumericalInitialization.hh b/include/NumericalInitialization.hh
index f920c96756df6553ec6da7a70808361b102f65be..41459423a8d399e880cb9b4029d57b0e82283231 100644
--- a/include/NumericalInitialization.hh
+++ b/include/NumericalInitialization.hh
@@ -95,11 +95,9 @@ public:
 class HomotopyStatement : public Statement
 {
 public:
-  /*!
-    Contrary to Initval and Endval, we use a map, since it is impossible to reuse
-    a given initialization value in a second initialization inside the block.
-  */
-  typedef map<string,pair<NodeID,NodeID> > homotopy_values_type;
+  //! Stores the declarations of homotopy_setup
+  /*! Order matter so we use a vector. First NodeID can be NULL if no initial value given. */
+  typedef vector<pair<string, pair<NodeID, NodeID> > > homotopy_values_type;
 private:
   const homotopy_values_type homotopy_values;
   const SymbolTable &symbol_table;
diff --git a/include/ParsingDriver.hh b/include/ParsingDriver.hh
index 72c0cdbea71e045c6f8fb12afbc8a827ef9d1af5..071e5592eb5d0f91324b1a695827c24fd05878b2 100644
--- a/include/ParsingDriver.hh
+++ b/include/ParsingDriver.hh
@@ -209,7 +209,8 @@ public:
   void init_val(string *name, NodeID rhs);
   //! Writes an histval block
   void hist_val(string *name, string *lag, NodeID rhs);
-  //! Writes an homotopy_setup block
+  //! Adds an entry in a homotopy_setup block
+  /*! Second argument "val1" can be NULL if no initial value provided */
   void homotopy_val(string *name, NodeID val1, NodeID val2);
   //! Writes end of an initval block
   void end_initval();