diff --git a/DynamicModel.cc b/DynamicModel.cc
index cc3dcf1c9b5ec8c67852a71dde49c3808c9cef00..ce3ea1134b03a0e52b783dc25a496f64e9eb3ee2 100644
--- a/DynamicModel.cc
+++ b/DynamicModel.cc
@@ -3897,11 +3897,17 @@ DynamicModel::findUnusedEndogenous()
 set<int>
 DynamicModel::findUnusedExogenous()
 {
-  set<int> usedExo, unusedExo;
+  set<int> usedExo, unusedExo, unobservedExo;
   for (int i = 0; i < (int) equations.size(); i++)
     equations[i]->collectVariables(eExogenous, usedExo);
+  for (int i = 0; i < (int) equations.size(); i++)
+    equations[i]->collectVariables(eExogenous, usedExo);
+  set<int> observedExo = symbol_table.getExogenous();
   set<int> allExo = symbol_table.getExogenous();
   set_difference(allExo.begin(), allExo.end(),
+                 observedExo.begin(), observedExo.end(),
+                 inserter(unobservedExo, unobservedExo.begin()));
+  set_difference(unobservedExo.begin(), unobservedExo.end(),
                  usedExo.begin(), usedExo.end(),
                  inserter(unusedExo, unusedExo.begin()));
   return unusedExo;
diff --git a/SymbolTable.cc b/SymbolTable.cc
index 6d5f6ac2d895269457515df21d404a6226969d6d..ce7fed3f8db817af1a41c23c71b3428f428a35aa 100644
--- a/SymbolTable.cc
+++ b/SymbolTable.cc
@@ -861,6 +861,18 @@ SymbolTable::getExogenous() const
   return exogs;
 }
 
+set<int>
+SymbolTable::getObservedExogenous() const
+{
+  set <int> oexogs;
+  for (symbol_table_type::const_iterator it = symbol_table.begin();
+       it != symbol_table.end(); it++)
+    if (getType(it->second) == eExogenous)
+      if (isObservedExogenousVariable(it->second))
+        oexogs.insert(it->second);
+  return oexogs;
+}
+
 set<int>
 SymbolTable::getEndogenous() const
 {
diff --git a/SymbolTable.hh b/SymbolTable.hh
index 1015003d9f0fb4fb2503a32b93ef579c5c1775b8..37f95c181b07db5bc81bfe959fd90897e7f7a06b 100644
--- a/SymbolTable.hh
+++ b/SymbolTable.hh
@@ -328,6 +328,8 @@ public:
   vector <int> getTrendVarIds() const;
   //! Get list of exogenous variables
   set <int> getExogenous() const;
+  //! Get list of exogenous variables
+  set <int> getObservedExogenous() const;
   //! Get list of endogenous variables
   set <int> getEndogenous() const;
   //! Is a given symbol an auxiliary variable