diff --git a/DynamicModel.cc b/DynamicModel.cc
index c05529c48d3ec391b9bf0c761392ee7a20510a33..10db3a8b9bece10aef9bf2192ac20feb7277b0b4 100644
--- a/DynamicModel.cc
+++ b/DynamicModel.cc
@@ -5342,127 +5342,6 @@ void
 DynamicModel::writeJsonOutput(ostream &output) const
 {
   writeJsonModelEquations(output, false);
-  output << ", ";
-  writeJsonXrefs(output);
-}
-
-void
-DynamicModel::writeJsonXrefs(ostream &output) const
-{
-  output << "\"xrefs\": {"
-         << "\"parameters\": [";
-  for (map<pair<int, int>, set<int> >::const_iterator it = json_xref_param.begin();
-       it != json_xref_param.end(); it++)
-    {
-      if (it != json_xref_param.begin())
-        output << ", ";
-      output << "{\"parameter\": \"" << symbol_table.getName(it->first.first) << "\""
-             << ", \"equations\": [";
-      for (set<int>::const_iterator it1 = it->second.begin();
-           it1 != it->second.end(); it1++)
-        {
-          if (it1 != it->second.begin())
-            output << ", ";
-          output << *it1 + 1;
-        }
-      output << "]}";
-    }
-  output << "]"
-         << ", \"endogenous\": [";
-  for (map<pair<int, int>, set<int> >::const_iterator it = json_xref_endo.begin();
-       it != json_xref_endo.end(); it++)
-    {
-      if (it != json_xref_endo.begin())
-        output << ", ";
-      output << "{\"endogenous\": \"" << symbol_table.getName(it->first.first) << "\""
-             << ", \"shift\": " << it->first.second
-             << ", \"equations\": [";
-      for (set<int>::const_iterator it1 = it->second.begin();
-           it1 != it->second.end(); it1++)
-        {
-          if (it1 != it->second.begin())
-            output << ", ";
-          output << *it1 + 1;
-        }
-      output << "]}";
-    }
-  output << "]"
-         << ", \"exogenous\": [";
-  for (map<pair<int, int>, set<int> >::const_iterator it = json_xref_exo.begin();
-       it != json_xref_exo.end(); it++)
-    {
-      if (it != json_xref_exo.begin())
-        output << ", ";
-      output << "{\"exogenous\": \"" << symbol_table.getName(it->first.first) << "\""
-             << ", \"shift\": " << it->first.second
-             << ", \"equations\": [";
-      for (set<int>::const_iterator it1 = it->second.begin();
-           it1 != it->second.end(); it1++)
-        {
-          if (it1 != it->second.begin())
-            output << ", ";
-          output << *it1 + 1;
-        }
-      output << "]}";
-    }
-  output << "]"
-         << ", \"exogenous_deterministic\": [";
-  for (map<pair<int, int>, set<int> >::const_iterator it = json_xref_exo_det.begin();
-       it != json_xref_exo_det.end(); it++)
-    {
-      if (it != json_xref_exo_det.begin())
-        output << ", ";
-      output << "{\"exogenous_det\": \"" << symbol_table.getName(it->first.first) << "\""
-             << ", \"shift\": " << it->first.second
-             << ", \"equations\": [";
-      for (set<int>::const_iterator it1 = it->second.begin();
-           it1 != it->second.end(); it1++)
-        {
-          if (it1 != it->second.begin())
-            output << ", ";
-          output << *it1 + 1;
-        }
-      output << "]}";
-    }
-  output << "]}" << endl;
-}
-
-void
-DynamicModel::computeJsonXrefs()
-{
-  map<int, ExprNode::JsonEquationInfo> xrefs;
-  int i = 0;
-  for (vector<BinaryOpNode *>::iterator it = equations.begin();
-       it != equations.end(); it++)
-    {
-      ExprNode::JsonEquationInfo ei;
-      (*it)->computeJsonXrefs(ei);
-      xrefs[i++] = ei;
-    }
-
-  i = 0;
-  for (map<int, ExprNode::JsonEquationInfo>::const_iterator it = xrefs.begin();
-       it != xrefs.end(); it++, i++)
-    {
-      computeJsonRevXref(json_xref_param, it->second.param, i);
-      computeJsonRevXref(json_xref_endo, it->second.endo, i);
-      computeJsonRevXref(json_xref_exo, it->second.exo, i);
-      computeJsonRevXref(json_xref_exo_det, it->second.exo_det, i);
-    }
-}
-
-void
-DynamicModel::computeJsonRevXref(map<pair<int, int>, set<int> > &xrefset, const set<pair<int, int> > &eiref, int eqn)
-{
-  for (set<pair<int, int> >::const_iterator it = eiref.begin();
-       it != eiref.end(); it++)
-    {
-      set<int> eq;
-      if (xrefset.find(*it) != xrefset.end())
-        eq = xrefset[*it];
-      eq.insert(eqn);
-      xrefset[*it] = eq;
-    }
 }
 
 void
@@ -5842,4 +5721,3 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
          << ", " << third_derivs1_output.str()
          << "}";
 }
-
diff --git a/DynamicModel.hh b/DynamicModel.hh
index cec66d97ec233f2289ee9e82907b836c75305fef..b0828a2b23e6de49aefcd80c2850d5b112b55de3 100644
--- a/DynamicModel.hh
+++ b/DynamicModel.hh
@@ -62,12 +62,6 @@ private:
   /*! Set by computeDerivIDs() */
   int max_exo_det_lag, max_exo_det_lead;
 
-  //! Cross references WITH lags (for #1387, potentially combine with cross references above upon decision by @michel)
-  map<pair<int, int>, set<int> > json_xref_param;
-  map<pair<int, int>, set<int> > json_xref_endo;
-  map<pair<int, int>, set<int> > json_xref_exo;
-  map<pair<int, int>, set<int> > json_xref_exo_det;
-
   //! Number of columns of dynamic jacobian
   /*! Set by computeDerivID()s and computeDynJacobianCols() */
   int dynJacobianColsNbr;
@@ -195,9 +189,6 @@ private:
   /*! pair< pair<static, forward>, pair<backward,mixed> > */
   vector<pair< pair<int, int>, pair<int, int> > > block_col_type;
 
-  //! Related to public function computeJsonXref
-  void computeJsonRevXref(map<pair<int, int>, set<int> > &xrefset, const set<pair<int, int> > &eiref, int eqn);
-
   //! List for each variable its block number and its maximum lag and lead inside the block
   vector<pair<int, pair<int, int> > > variable_block_lead_lag;
   //! List for each equation its block number
@@ -211,10 +202,7 @@ public:
   //! Adds a variable node
   /*! This implementation allows for non-zero lag */
   virtual VariableNode *AddVariable(int symb_id, int lag = 0);
-
-  //! For computing cross references for json output (i.e. that contains lag information) #1387
-  void computeJsonXrefs();
-
+  
   //! Execute computations (variable sorting + derivation)
   /*!
     \param jacobianExo whether derivatives w.r. to exo and exo_det should be in the Jacobian (derivatives w.r. to endo are always computed)
@@ -232,9 +220,6 @@ public:
   //! Write JSON Output
   void writeJsonOutput(ostream &output) const;
 
-  //! Write cross reference output if the xref maps have been filed
-  void writeJsonXrefs(ostream &output) const;
-
   //! Write JSON Output representation of dynamic model after computing pass
   void writeJsonComputingPassOutput(ostream &output, bool writeDetails) const;
 
diff --git a/ExprNode.cc b/ExprNode.cc
index dfb66d3df551e71634767cee8b456d12fa29e17f..5cc0298bdca44223c3b8b021eee6761b34f09ef7 100644
--- a/ExprNode.cc
+++ b/ExprNode.cc
@@ -396,11 +396,6 @@ NumConstNode::computeXrefs(EquationInfo &ei) const
 {
 }
 
-void
-NumConstNode::computeJsonXrefs(JsonEquationInfo &ei) const
-{
-}
-
 expr_t
 NumConstNode::cloneDynamic(DataTree &dynamic_datatree) const
 {
@@ -1136,34 +1131,6 @@ VariableNode::computeXrefs(EquationInfo &ei) const
     }
 }
 
-void
-VariableNode::computeJsonXrefs(JsonEquationInfo &ei) const
-{
-  switch (type)
-    {
-    case eEndogenous:
-      ei.endo.insert(make_pair(symb_id, lag));
-      break;
-    case eExogenous:
-      ei.exo.insert(make_pair(symb_id, lag));
-      break;
-    case eExogenousDet:
-      ei.exo_det.insert(make_pair(symb_id, lag));
-      break;
-    case eParameter:
-      ei.param.insert(make_pair(symb_id, 0));
-      break;
-    case eTrend:
-    case eLogTrend:
-    case eModelLocalVariable:
-    case eModFileLocalVariable:
-    case eStatementDeclaredVariable:
-    case eUnusedEndogenous:
-    case eExternalFunction:
-      break;
-    }
-}
-
 expr_t
 VariableNode::cloneDynamic(DataTree &dynamic_datatree) const
 {
@@ -2591,12 +2558,6 @@ UnaryOpNode::computeXrefs(EquationInfo &ei) const
   arg->computeXrefs(ei);
 }
 
-void
-UnaryOpNode::computeJsonXrefs(JsonEquationInfo &ei) const
-{
-  arg->computeJsonXrefs(ei);
-}
-
 expr_t
 UnaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
 {
@@ -4033,13 +3994,6 @@ BinaryOpNode::computeXrefs(EquationInfo &ei) const
   arg2->computeXrefs(ei);
 }
 
-void
-BinaryOpNode::computeJsonXrefs(JsonEquationInfo &ei) const
-{
-  arg1->computeJsonXrefs(ei);
-  arg2->computeJsonXrefs(ei);
-}
-
 expr_t
 BinaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
 {
@@ -4807,14 +4761,6 @@ TrinaryOpNode::computeXrefs(EquationInfo &ei) const
   arg3->computeXrefs(ei);
 }
 
-void
-TrinaryOpNode::computeJsonXrefs(JsonEquationInfo &ei) const
-{
-  arg1->computeJsonXrefs(ei);
-  arg2->computeJsonXrefs(ei);
-  arg3->computeJsonXrefs(ei);
-}
-
 expr_t
 TrinaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
 {
@@ -5698,15 +5644,6 @@ ExternalFunctionNode::computeXrefs(EquationInfo &ei) const
     (*it)->computeXrefs(ei);
 }
 
-void
-ExternalFunctionNode::computeJsonXrefs(JsonEquationInfo &ei) const
-{
-  vector<expr_t> dynamic_arguments;
-  for (vector<expr_t>::const_iterator it = arguments.begin();
-       it != arguments.end(); it++)
-    (*it)->computeJsonXrefs(ei);
-}
-
 expr_t
 ExternalFunctionNode::cloneDynamic(DataTree &dynamic_datatree) const
 {
@@ -6107,15 +6044,6 @@ FirstDerivExternalFunctionNode::computeXrefs(EquationInfo &ei) const
     (*it)->computeXrefs(ei);
 }
 
-void
-FirstDerivExternalFunctionNode::computeJsonXrefs(JsonEquationInfo &ei) const
-{
-  vector<expr_t> dynamic_arguments;
-  for (vector<expr_t>::const_iterator it = arguments.begin();
-       it != arguments.end(); it++)
-    (*it)->computeJsonXrefs(ei);
-}
-
 SecondDerivExternalFunctionNode::SecondDerivExternalFunctionNode(DataTree &datatree_arg,
                                                                  int top_level_symb_id_arg,
                                                                  const vector<expr_t> &arguments_arg,
@@ -6431,15 +6359,6 @@ SecondDerivExternalFunctionNode::computeXrefs(EquationInfo &ei) const
     (*it)->computeXrefs(ei);
 }
 
-void
-SecondDerivExternalFunctionNode::computeJsonXrefs(JsonEquationInfo &ei) const
-{
-  vector<expr_t> dynamic_arguments;
-  for (vector<expr_t>::const_iterator it = arguments.begin();
-       it != arguments.end(); it++)
-    (*it)->computeJsonXrefs(ei);
-}
-
 void
 SecondDerivExternalFunctionNode::compile(ostream &CompileCode, unsigned int &instruction_number,
                                          bool lhs_rhs, const temporary_terms_t &temporary_terms,
diff --git a/ExprNode.hh b/ExprNode.hh
index c6dca035285f16b10dee237d014333d32db90d1e..e4e5d9bcd0fd7d9d4dc1fbfae070116ac15e1af5 100644
--- a/ExprNode.hh
+++ b/ExprNode.hh
@@ -171,14 +171,6 @@ protected:
     set<int> exo_det;
   };
 
-  struct JsonEquationInfo
-  {
-    set<pair<int, int> > param;
-    set<pair<int, int> > endo;
-    set<pair<int, int> > exo;
-    set<pair<int, int> > exo_det;
-  };
-
 public:
   ExprNode(DataTree &datatree_arg);
   virtual ~ExprNode();
@@ -318,7 +310,6 @@ public:
    */
   //  virtual void computeXrefs(set<int> &param, set<int> &endo, set<int> &exo, set<int> &exo_det) const = 0;
   virtual void computeXrefs(EquationInfo &ei) const = 0;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const = 0;
   //! Try to normalize an equation linear in its endogenous variable
   virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const = 0;
 
@@ -506,7 +497,6 @@ public:
   virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
   virtual expr_t toStatic(DataTree &static_datatree) const;
   virtual void computeXrefs(EquationInfo &ei) const;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
   virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > >  &List_of_Op_RHS) const;
   virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
   virtual int maxEndoLead() const;
@@ -563,7 +553,6 @@ public:
   virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
   virtual expr_t toStatic(DataTree &static_datatree) const;
   virtual void computeXrefs(EquationInfo &ei) const;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
   SymbolType
   get_type() const
   {
@@ -663,7 +652,6 @@ public:
   };
   virtual expr_t toStatic(DataTree &static_datatree) const;
   virtual void computeXrefs(EquationInfo &ei) const;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
   virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > >  &List_of_Op_RHS) const;
   virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
   virtual int maxEndoLead() const;
@@ -768,7 +756,6 @@ public:
   }
   virtual expr_t toStatic(DataTree &static_datatree) const;
   virtual void computeXrefs(EquationInfo &ei) const;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
   virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > >  &List_of_Op_RHS) const;
   virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
   virtual int maxEndoLead() const;
@@ -854,7 +841,6 @@ public:
   virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
   virtual expr_t toStatic(DataTree &static_datatree) const;
   virtual void computeXrefs(EquationInfo &ei) const;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
   virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > >  &List_of_Op_RHS) const;
   virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
   virtual int maxEndoLead() const;
@@ -942,7 +928,6 @@ public:
   virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const = 0;
   virtual expr_t toStatic(DataTree &static_datatree) const = 0;
   virtual void computeXrefs(EquationInfo &ei) const = 0;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const = 0;
   virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > >  &List_of_Op_RHS) const;
   virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
   virtual int maxEndoLead() const;
@@ -1004,7 +989,6 @@ public:
   virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
   virtual expr_t toStatic(DataTree &static_datatree) const;
   virtual void computeXrefs(EquationInfo &ei) const;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
   virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
   virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
 };
@@ -1046,7 +1030,6 @@ public:
                                              deriv_node_temp_terms_t &tef_terms) const;
   virtual expr_t toStatic(DataTree &static_datatree) const;
   virtual void computeXrefs(EquationInfo &ei) const;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
   virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
   virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
 };
@@ -1090,7 +1073,6 @@ public:
                                              deriv_node_temp_terms_t &tef_terms) const;
   virtual expr_t toStatic(DataTree &static_datatree) const;
   virtual void computeXrefs(EquationInfo &ei) const;
-  virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
   virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
   virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
 };
diff --git a/ModFile.cc b/ModFile.cc
index ea9cf4e378dc0b8032dc9c6047bb5243d0348b41..7ee204ad42bed09eac3225e775a939c01242eca2 100644
--- a/ModFile.cc
+++ b/ModFile.cc
@@ -414,9 +414,6 @@ ModFile::transformPass(bool nostrict)
   // Freeze the symbol table
   symbol_table.freeze();
 
-  //! Need access to this info after transform pass so calculate it here
-  dynamic_model.computeJsonXrefs();
-
   /*
     Enforce the same number of equations and endogenous, except in three cases:
     - ramsey_model, ramsey_policy or discretionary_policy is used