diff --git a/parser.src/NumericalConstants.cc b/parser.src/NumericalConstants.cc
index 38bc49186d9e9bf0fe4b89b02580da11371a7495..b964e6eb8efe083fa37cb93ce992dcb3299b4917 100644
--- a/parser.src/NumericalConstants.cc
+++ b/parser.src/NumericalConstants.cc
@@ -10,12 +10,13 @@ using namespace std;
 #include "NumericalConstants.hh"
 //------------------------------------------------------------------------------
 vector<string> NumericalConstants::mNumericalConstants;
+map<string, int, less<string> > NumericalConstants::numConstantsIndex;
+
 //------------------------------------------------------------------------------
 NumericalConstants::NumericalConstants()
 {
-  mNumericalConstants.push_back("0.0");
-  mNumericalConstants.push_back("1.0");
-
+  AddConstant("0.0");
+  AddConstant("1.0");
 }
 
 //------------------------------------------------------------------------------
@@ -27,12 +28,15 @@ NumericalConstants::~NumericalConstants()
 //------------------------------------------------------------------------------
 int NumericalConstants::AddConstant(string iConst)
 {
-  if (iConst == "0.0")
-    return 0;
-  else if (iConst == "1.0")
-    return 1;
+  map<string, int, less<string> >::iterator iter = numConstantsIndex.find(iConst);
+
+  if (iter != numConstantsIndex.end())
+    return iter->second;
+
+  int id = (int) mNumericalConstants.size();
   mNumericalConstants.push_back(iConst);
-  return (int) mNumericalConstants.size()-1;
+  numConstantsIndex[iConst] = id;
+  return id;
 }
 
 //------------------------------------------------------------------------------
diff --git a/parser.src/include/NumericalConstants.hh b/parser.src/include/NumericalConstants.hh
index ccba024b0e6075b90da3c4eb9a62a5cee56c5e67..7fcb1b3b851723ca1757125afa1e8989910aeb17 100644
--- a/parser.src/include/NumericalConstants.hh
+++ b/parser.src/include/NumericalConstants.hh
@@ -9,6 +9,7 @@
 //------------------------------------------------------------------------------
 #include <string>
 #include <vector>
+#include <map>
 //------------------------------------------------------------------------------
 /*!
   \class  NumericalConstants
@@ -19,6 +20,8 @@ class NumericalConstants
 private :
   /*! Vector of numerical constants */
   static std::vector<std::string>  mNumericalConstants;
+  //! Map matching constants to their id
+  static std::map<std::string, int, std::less<std::string> > numConstantsIndex;
 public :
   /*! Construcor */
   NumericalConstants();