diff --git a/DDCore/src/Evaluator/ExpressionEvaluator.cpp b/DDCore/src/Evaluator/ExpressionEvaluator.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..101a57614fea9a853635618dc83f22f15716b168
--- /dev/null
+++ b/DDCore/src/Evaluator/ExpressionEvaluator.cpp
@@ -0,0 +1,92 @@
+// $Id$
+//==========================================================================
+//  AIDA Detector description implementation for LCD
+//--------------------------------------------------------------------------
+// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
+// All rights reserved.
+//
+// For the licensing terms see $DD4hepINSTALL/LICENSE.
+// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
+//
+// Author     : M.Frank
+//
+//==========================================================================
+
+#include "XML/Evaluator.h"
+#include "DD4hep/DD4hepUnits.h"
+
+
+namespace {
+  void _init(XmlTools::Evaluator& e) {
+    // Initialize numerical expressions parser with the standard math functions
+    // and the system of units used by Gaudi (Geant4)
+    e.setStdMath();
+  }
+  void _cgsUnits(XmlTools::Evaluator& e) {
+    // ===================================================================================
+    // CGS units
+    e.setSystemOfUnits(100., 1000., 1.0, 1.0, 1.0, 1.0, 1.0);
+  }
+  void _tgeoUnits(XmlTools::Evaluator& e) {
+    // ===================================================================================
+    // DDG4 units (TGeo) 1 sec = 10^9 [nsec]
+    //                   1 Coulomb = 1/e As
+    // Ampere = C/s = 1/e * As / s = 1. / 1.60217733e-19
+    // kilogram = joule*s*s/(m*m)          1/e_SI * 1 *1 / 1e2 / 1e2
+
+    //    e.setSystemOfUnits(1.e+2, 1./1.60217733e-6, 1.0, 1./1.60217733e-19, 1.0, 1.0, 1.0);
+    // use the units as defined in DD4hepUnits.h:
+    e.setSystemOfUnits( dd4hep::meter,
+                        dd4hep::kilogram,
+                        dd4hep::second,
+                        dd4hep::ampere,
+                        dd4hep::kelvin,
+                        dd4hep::mole,
+                        dd4hep::candela,
+                        dd4hep::rad );
+  }
+  void _g4Units(XmlTools::Evaluator& e) {
+    // ===================================================================================
+    // Geant4 units
+    // Geant4:  kilogram = joule*s*s/(m*m) 1/e_SI * 1e-6 * 1e9 1e9 / 1e3 / 1e3 = 1. / 1.60217733e-25
+    e.setSystemOfUnits(1.e+3, 1./1.60217733e-25, 1.e+9, 1./1.60217733e-10, 1.0, 1.0, 1.0);
+  }
+}
+
+namespace DD4hep {
+  XmlTools::Evaluator& evaluator() {
+    static XmlTools::Evaluator* e = 0;
+    if ( !e )   {
+      static XmlTools::Evaluator ev;
+      _init(ev);
+      _tgeoUnits(ev);
+      e = &ev;
+    }
+    return *e;
+  }
+
+  /// Access to G4 evaluator. Note: Uses Geant4 units!
+  XmlTools::Evaluator& g4Evaluator()   {
+    static XmlTools::Evaluator* e = 0;
+    if ( !e )   {
+      static XmlTools::Evaluator ev;
+      _init(ev);
+      _g4Units(ev);
+      e = &ev;
+    }
+    return *e;
+  }
+
+  /// Access to G4 evaluator. Note: Uses cgs units!
+  XmlTools::Evaluator& cgsEvaluator()   {
+    static XmlTools::Evaluator* e = 0;
+    if ( !e )   {
+      static XmlTools::Evaluator ev;
+      _init(ev);
+      _cgsUnits(ev);
+      e = &ev;
+    }
+    return *e;
+  }
+}
+