diff --git a/SymbolTable.cc b/SymbolTable.cc
index dca0ea8f4d7b295f45f74dc8bb6e3e8f376f0c87..cf986b41eeb91142fc417ebd1c907dbb1f9d1a7e 100644
--- a/SymbolTable.cc
+++ b/SymbolTable.cc
@@ -156,8 +156,7 @@ SymbolTable::changeType(int id, SymbolType newtype) throw (UnknownSymbolIDExcept
   if (frozen)
     throw FrozenException();
 
-  if (id < 0 || id > symbol_table.size())
-    throw UnknownSymbolIDException(id);
+  validateSymbID(id);
 
   type_table[id] = newtype;
 }
@@ -732,8 +731,8 @@ SymbolTable::getAuxiliaryVarsExprNode(int symb_id) const throw (SearchFailedExce
 void
 SymbolTable::markPredetermined(int symb_id) throw (UnknownSymbolIDException, FrozenException)
 {
-  if (symb_id < 0 || symb_id > symbol_table.size())
-    throw UnknownSymbolIDException(symb_id);
+  validateSymbID(symb_id);
+
   if (frozen)
     throw FrozenException();
 
@@ -745,9 +744,7 @@ SymbolTable::markPredetermined(int symb_id) throw (UnknownSymbolIDException, Fro
 bool
 SymbolTable::isPredetermined(int symb_id) const throw (UnknownSymbolIDException)
 {
-  if (symb_id < 0 || symb_id > symbol_table.size())
-    throw UnknownSymbolIDException(symb_id);
-
+  validateSymbID(symb_id);
   return (predetermined_variables.find(symb_id) != predetermined_variables.end());
 }
 
@@ -760,9 +757,7 @@ SymbolTable::predeterminedNbr() const
 void
 SymbolTable::addObservedVariable(int symb_id) throw (UnknownSymbolIDException)
 {
-  if (symb_id < 0 || symb_id > symbol_table.size())
-    throw UnknownSymbolIDException(symb_id);
-
+  validateSymbID(symb_id);
   assert(getType(symb_id) == eEndogenous);
   varobs.push_back(symb_id);
 }
diff --git a/SymbolTable.hh b/SymbolTable.hh
index 20a7d5735eb0cdcc864bbd7ea52d3e01f4e1844c..b97ad162ab50a3c7bd486b1fdcda95ffc4ec23d0 100644
--- a/SymbolTable.hh
+++ b/SymbolTable.hh
@@ -219,6 +219,8 @@ private:
   int addLeadAuxiliaryVarInternal(bool endo, int index, expr_t arg) throw (FrozenException);
   //! Factorized code for Json writing
   void writeJsonVarVector(ostream &output, const vector<int> &varvec) const;
+  //! Factorized code for asserting that 0 <= symb_id <= symbol_table.size()
+  inline void validateSymbID(int symb_id) const throw (UnknownSymbolIDException);
 public:
   //! Add a symbol
   /*! Returns the symbol ID */
@@ -362,6 +364,13 @@ public:
   set <int> getOrigEndogenous() const;
 };
 
+inline void
+SymbolTable::validateSymbID(int symb_id) const throw (UnknownSymbolIDException)
+{
+  if (symb_id < 0 || symb_id > symbol_table.size())
+    throw UnknownSymbolIDException(symb_id);
+}
+
 inline bool
 SymbolTable::exists(const string &name) const
 {
@@ -372,37 +381,29 @@ SymbolTable::exists(const string &name) const
 inline string
 SymbolTable::getName(int id) const throw (UnknownSymbolIDException)
 {
-  if (id < 0 || id > symbol_table.size())
-    throw UnknownSymbolIDException(id);
-  else
-    return name_table[id];
+  validateSymbID(id);
+  return name_table[id];
 }
 
 inline string
 SymbolTable::getTeXName(int id) const throw (UnknownSymbolIDException)
 {
-  if (id < 0 || id > symbol_table.size())
-    throw UnknownSymbolIDException(id);
-  else
-    return tex_name_table[id];
+  validateSymbID(id);
+  return tex_name_table[id];
 }
 
 inline string
 SymbolTable::getLongName(int id) const throw (UnknownSymbolIDException)
 {
-  if (id < 0 || id > symbol_table.size())
-    throw UnknownSymbolIDException(id);
-  else
-    return long_name_table[id];
+  validateSymbID(id);
+  return long_name_table[id];
 }
 
 inline SymbolType
 SymbolTable::getType(int id) const throw (UnknownSymbolIDException)
 {
-  if (id < 0 || id > symbol_table.size())
-    throw UnknownSymbolIDException(id);
-  else
-    return type_table[id];
+  validateSymbID(id);
+  return type_table[id];
 }
 
 inline SymbolType
@@ -427,8 +428,7 @@ SymbolTable::getTypeSpecificID(int id) const throw (UnknownSymbolIDException, No
   if (!frozen)
     throw NotYetFrozenException();
 
-  if (id < 0 || id > symbol_table.size())
-    throw UnknownSymbolIDException(id);
+  validateSymbID(id);
 
   return type_specific_ids[id];
 }