Index: trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/ExcelCellBase.cs
===================================================================
--- trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/ExcelCellBase.cs	(revision 12074)
+++ trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/ExcelCellBase.cs	(revision 12100)
@@ -481,15 +481,13 @@
             return GetRowCol(address, out row, out col, throwException, out fixedRow, out fixedCol);
         }
-        internal static bool GetRowCol(string address, out int row, out int col, bool throwException, out bool fixedRow, out bool fixedCol)
-        {
+        internal static bool GetRowCol(string address, out int row, out int col, bool throwException, out bool fixedRow, out bool fixedCol) {
             bool colPart = true;
-            string sRow = "", sCol = "";
+            int colStartIx = 0;
+            int colLength = 0;
             col = 0;
+            row = 0;
             fixedRow = false;
             fixedCol = false;
-            if (address.IndexOf(':') > 0)  //If it is a mult-cell address use 
-            {
-                address = address.Substring(0, address.IndexOf(':'));
-            }
+
             if (address.EndsWith("#REF!"))
             {
@@ -502,25 +500,38 @@
             if (sheetMarkerIndex >= 0)
             {
-                address = address.Substring(sheetMarkerIndex + 1);
-            }
-
-            address = address.ToUpper(CultureInfo.InvariantCulture);
-            for (int i = 0; i < address.Length; i++)
-            {
-                if ((address[i] >= 'A' && address[i] <= 'Z') && colPart && sCol.Length <= 3)
-                {
-                    sCol += address[i];
-                }
-                else if (address[i] >= '0' && address[i] <= '9')
-                {
-                    sRow += address[i];
+                colStartIx = sheetMarkerIndex + 1;
+            }
+
+            for (int i = colStartIx; i < address.Length; i++)
+            {
+                char c = address[i];
+                if (colPart && ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) && colLength <= 3)
+                {
+                    col *= 26;
+                    col += ((int)c) - 64;
+                    colLength++;
+                }
+                else if (c >= '0' && c <= '9')
+                {
+                    row *= 10;
+                    row += ((int)c) - 48;
                     colPart = false;
                 }
-                else if (address[i] == '$')
-                {
-                    if (i == 0) 
-                        fixedCol = true; 
-                    else 
+                else if (c == '$')
+                {
+                    if (i == colStartIx)
+                    {
+                        colStartIx++;
+                        fixedCol = true;
+                    }
+                    else
+                    {
+                        colPart = false;
                         fixedRow = true;
+                    }
+                }
+                else if (c == ':')
+                {
+                    break;
                 }
                 else
@@ -538,33 +549,5 @@
                 }
             }
-
-            // Get the column number
-            if (sCol != "")
-            {
-                col = GetColumn(sCol);
-            }
-            else
-            {
-                col = 0;
-                int.TryParse(sRow, out row);
-                return row>0;
-            }
-            // Get the row number
-            if (sRow == "") //Blank, fullRow
-            {
-                //if (throwException)
-                //{
-                //    throw (new Exception(string.Format("Invalid Address format {0}", address)));
-                //}
-                //else
-                //{                    
-                row = 0;
-                return col > 0;
-                //}
-            }
-            else
-            {
-                return int.TryParse(sRow, out row);
-            }
+            return row != 0 || col != 0;
         }
 
Index: trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/ExcelRangeBase.cs
===================================================================
--- trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/ExcelRangeBase.cs	(revision 12074)
+++ trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/ExcelRangeBase.cs	(revision 12100)
@@ -59,5 +59,5 @@
 	/// A range of cells 
 	/// </summary>
-	public class ExcelRangeBase : ExcelAddress, IExcelCell, IDisposable, IEnumerable<ExcelRangeBase>, IEnumerator<ExcelRangeBase>
+	public class ExcelRangeBase : ExcelAddress, IExcelCell, IEnumerable<ExcelRangeBase>
 	{
 		/// <summary>
@@ -2758,12 +2758,10 @@
 		public IEnumerator<ExcelRangeBase> GetEnumerator()
 		{
-			Reset();
-			return this;
+            return new ExcelRangeBaseEnumerator(this);
 		}
 
 		IEnumerator IEnumerable.GetEnumerator()
 		{
-			Reset();
-			return this;
+            return new ExcelRangeBaseEnumerator(this);
 		}
 
@@ -2771,54 +2769,71 @@
 		/// The current range when enumerating
 		/// </summary>
-		public ExcelRangeBase Current
-		{
-			get
-			{
-				return new ExcelRangeBase(_worksheet, ExcelAddressBase.GetAddress(cellEnum.Row, cellEnum.Column));
-			}
-		}
-
-		/// <summary>
-		/// The current range when enumerating
-		/// </summary>
-		object IEnumerator.Current
-		{
-			get
-			{
-				return ((object)(new ExcelRangeBase(_worksheet, ExcelAddressBase.GetAddress(cellEnum.Row, cellEnum.Column))));
-			}
-		}
-
-		int _enumAddressIx = -1;
-        public bool MoveNext()
-		{
-            if (cellEnum.Next())
-            {
-                return true;
+        public class ExcelRangeBaseEnumerator : IEnumerator<ExcelRangeBase> {
+            private CellsStoreEnumerator<object> _cellEnum;
+            private int _enumAddressIx = -1;
+            private ExcelRangeBase _range;
+            private ExcelRangeBase _current;
+
+            /// <summary>
+            /// The current range when enumerating
+            /// </summary>
+            public ExcelRangeBase Current {
+                get {
+                    return _current;
+                }
             }
-            else if (_addresses!=null)
-            {
-                _enumAddressIx++;
-                if (_enumAddressIx < _addresses.Count)
-                {
-                    cellEnum = new CellsStoreEnumerator<object>(_worksheet._values, 
-                        _addresses[_enumAddressIx]._fromRow, 
-                        _addresses[_enumAddressIx]._fromCol, 
-                        _addresses[_enumAddressIx]._toRow, 
-                        _addresses[_enumAddressIx]._toCol);
-                    return MoveNext();
-                }
-                else
-                {
-                    return false;
+
+            /// <summary>
+            /// The current range when enumerating
+            /// </summary>
+            object IEnumerator.Current {
+                get {
+                    return _current;
                 }
             }
-            return false;
-		}
-
-		public void Reset()
-		{
-            _enumAddressIx = -1;
-            cellEnum = new CellsStoreEnumerator<object>(_worksheet._values, _fromRow, _fromCol, _toRow, _toCol);
+
+            public ExcelRangeBaseEnumerator(ExcelRangeBase range) {
+                this._range = range;
+                Reset();
+            }
+            public bool MoveNext() {
+                if (_cellEnum.Next()) {
+                    _current._fromCol = _cellEnum.Column;
+                    _current._fromRow = _cellEnum.Row;
+                    _current._toCol = _cellEnum.Column;
+                    _current._toRow = _cellEnum.Row;
+                    _current.Address = GetAddress(_current._fromRow, _current._fromCol);
+                    return true;
+                }
+                else if (_range._addresses != null) {
+                    _enumAddressIx++;
+                    if (_enumAddressIx < _range._addresses.Count) {
+                        _cellEnum = new CellsStoreEnumerator<object>(_range._worksheet._values,
+                            _range._addresses[_enumAddressIx]._fromRow,
+                            _range._addresses[_enumAddressIx]._fromCol,
+                            _range._addresses[_enumAddressIx]._toRow,
+                            _range._addresses[_enumAddressIx]._toCol);
+                        return MoveNext();
+                    }
+                    else {
+                        return false;
+                    }
+                }
+                return false;
+            }
+
+            public void Reset() {
+                _enumAddressIx = -1;
+                _cellEnum = new CellsStoreEnumerator<object>(_range._worksheet._values, _range._fromRow, _range._fromCol, _range._toRow, _range._toCol);
+                _current = new ExcelRangeBase(_range._worksheet, ExcelAddressBase.GetAddress(_cellEnum.Row, _cellEnum.Column));
+            }
+
+            public void Dispose() {
+                if (_cellEnum != null) {
+                    _cellEnum.Dispose();
+                    _cellEnum = null;
+                }
+            }
+
         }
 
Index: trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/Table/PivotTable/ExcelPivotTable.cs
===================================================================
--- trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/Table/PivotTable/ExcelPivotTable.cs	(revision 12074)
+++ trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/Table/PivotTable/ExcelPivotTable.cs	(revision 12100)
@@ -151,8 +151,5 @@
             LoadFields();
 
-            using (var r=sheet.Cells[address.Address])
-            {
-                r.Clear();
-            }
+            sheet.Cells[address.Address].Clear();
         }
         private void init()
