diff --git a/SymbolTable.cc b/SymbolTable.cc
index d92661e6f0954f92e1aa717a6df01146aa80f21d..dff6b9e1b2b6573bcb30df08e29da3f009fc98dd 100644
--- a/SymbolTable.cc
+++ b/SymbolTable.cc
@@ -657,10 +657,16 @@ SymbolTable::addAdlParameter(const string &basename, int lag) throw (FrozenExcep
 
   try
     {
-      return addSymbol(varname.str(), eParameter);
+      int symb_id = addSymbol(varname.str(), eParameter);
+      adl_params.push_back(symb_id);
+      return symb_id;
     }
   catch (AlreadyDeclaredException &e)
     {
+      int symb_id = getID(varname.str());
+      if (find(adl_params.begin(), adl_params.end(), symb_id) != adl_params.end())
+        return symb_id;
+
       cerr << "ERROR: you should rename your variable called " << varname.str() << ", this name is internally used by Dynare" << endl;
       exit(EXIT_FAILURE);
     }
diff --git a/SymbolTable.hh b/SymbolTable.hh
index bca56d5f4631de60b47c0948915e98f4c7f5fca5..81070b00cd0177a758ae626c352c152fdcc9dbe4 100644
--- a/SymbolTable.hh
+++ b/SymbolTable.hh
@@ -153,6 +153,9 @@ private:
   //! Stores the list of observed exogenous variables
   vector<int> varexobs;
 
+  //! Stores list of parameters declared in adl substitution
+  vector<int> adl_params;
+
 public:
   SymbolTable();
   //! Thrown when trying to access an unknown symbol (by name)