diff --git a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
index ad72f79..6a45326 100644
--- a/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML/ClosedXML/ClosedXML.csproj
@@ -140,6 +140,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/CalcEngine/CalcEngine.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/CalcEngine/CalcEngine.cs
new file mode 100644
index 0000000..22c24db
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/CalcEngine/CalcEngine.cs
@@ -0,0 +1,780 @@
+using System;
+using System.Reflection;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Globalization;
+using System.Diagnostics;
+using System.Text;
+using System.Text.RegularExpressions;
+using ClosedXML.Excel.CalcEngine;
+
+namespace ClosedXML.Excel.CalcEngine
+{
+ ///
+ /// CalcEngine parses strings and returns Expression objects that can
+ /// be evaluated.
+ ///
+ ///
+ /// This class has three extensibility points:
+ /// Use the DataContext property to add an object's properties to the engine scope.
+ /// Use the RegisterFunction method to define custom functions.
+ /// Override the GetExternalObject method to add arbitrary variables to the engine scope.
+ ///
+ public partial class CalcEngine
+ {
+ //---------------------------------------------------------------------------
+ #region ** fields
+
+ // members
+ string _expr; // expression being parsed
+ int _len; // length of the expression being parsed
+ int _ptr; // current pointer into expression
+ string _idChars; // valid characters in identifiers (besides alpha and digits)
+ Token _token; // current token being parsed
+ Dictionary