[NWD] Remove more dead code in EPPlus.

Change-Id: If3334f3fa0a5ae56e6c328cb4d34c4ecf1c5315d
Reviewed-on: https://gnocchi-internal-review.git.corp.google.com/c/third_party/epplus/+/207760
Reviewed-by: Hughes Hilton <hugheshilton@google.com>
diff --git a/EPPlus/CellStore.cs b/EPPlus/CellStore.cs
index 71aece7..a00f890 100644
--- a/EPPlus/CellStore.cs
+++ b/EPPlus/CellStore.cs
@@ -1184,25 +1184,9 @@
       page.Index--;
       page.Offset += _pageSize;
     }
-    //else if (page.Rows[0].Index >= PageSize) //Delete
-    //{
-    //    page.Index++;
-    //    AddPageRowOffset(page, -PageSize);
-    //}
-    //else if (page.Rows[0].Index <= -PageSize)   //Delete
-    //{
-    //    page.Index--;
-    //    AddPageRowOffset(page, PageSize);
-    //}
     return page;
   }
 
-  private void AddPageRowOffset(PageIndex page, short offset) {
-    for (int r = 0; r < page.RowCount; r++) {
-      page.Rows[r].Index += offset;
-    }
-  }
-
   private void AddPage(ColumnIndex column, int pos, short index) {
     AddPage(column, pos);
     column._pages[pos] = new() {
diff --git a/EPPlus/ConditionalFormatting/ExcelConditionalFormattingCollection.cs b/EPPlus/ConditionalFormatting/ExcelConditionalFormattingCollection.cs
index 3c19a93..8d0ecf1 100644
--- a/EPPlus/ConditionalFormatting/ExcelConditionalFormattingCollection.cs
+++ b/EPPlus/ConditionalFormatting/ExcelConditionalFormattingCollection.cs
@@ -67,15 +67,9 @@
 public class ExcelConditionalFormattingCollection
     : XmlHelper,
       IEnumerable<IExcelConditionalFormattingRule> {
-  /****************************************************************************************/
-
-
   private readonly List<IExcelConditionalFormattingRule> _rules = new();
   private readonly ExcelWorksheet _worksheet;
 
-  /****************************************************************************************/
-
-
   /// <summary>
   /// Initialize the <see cref="ExcelConditionalFormattingCollection"/>
   /// </summary>
@@ -159,12 +153,6 @@
     }
   }
 
-  /****************************************************************************************/
-
-
-  /// <summary>
-  ///
-  /// </summary>
   private void EnsureRootElementExists() {
     // Find the <worksheet> node
     if (_worksheet.WorksheetXml.DocumentElement == null) {
@@ -173,15 +161,6 @@
   }
 
   /// <summary>
-  /// GetRootNode
-  /// </summary>
-  /// <returns></returns>
-  private XmlNode GetRootNode() {
-    EnsureRootElementExists();
-    return _worksheet.WorksheetXml.DocumentElement;
-  }
-
-  /// <summary>
   /// Validates address - not empty (collisions are allowded)
   /// </summary>
   /// <param name="address"></param>
@@ -212,9 +191,6 @@
     return lastPriority + 1;
   }
 
-  /****************************************************************************************/
-
-
   /// <summary>
   /// Number of validations
   /// </summary>
@@ -322,9 +298,6 @@
     return _rules.Find(x => x.Priority == priority);
   }
 
-  /****************************************************************************************/
-
-
   /// <summary>
   /// Add rule (internal)
   /// </summary>
diff --git a/EPPlus/ConditionalFormatting/ExcelConditionalFormattingColorScaleValue.cs b/EPPlus/ConditionalFormatting/ExcelConditionalFormattingColorScaleValue.cs
index 1f1bda6..a8585f0 100644
--- a/EPPlus/ConditionalFormatting/ExcelConditionalFormattingColorScaleValue.cs
+++ b/EPPlus/ConditionalFormatting/ExcelConditionalFormattingColorScaleValue.cs
@@ -41,16 +41,10 @@
 /// Describes the values of the interpolation points in a gradient scale.
 /// </summary>
 public class ExcelConditionalFormattingColorScaleValue : XmlHelper {
-  /****************************************************************************************/
-
-
   private eExcelConditionalFormattingValueObjectPosition _position;
   private eExcelConditionalFormattingRuleType _ruleType;
   private readonly ExcelWorksheet _worksheet;
 
-  /****************************************************************************************/
-
-
   /// <summary>
   /// Initialize the cfvo (§18.3.1.11) node
   /// </summary>
@@ -213,9 +207,6 @@
           null,
           namespaceManager) {}
 
-  /****************************************************************************************/
-
-
   /// <summary>
   /// Get the node order (1, 2 ou 3) according to the Position (Low, Middle and High)
   /// and the Rule Type (TwoColorScale ou ThreeColorScale).
@@ -288,9 +279,6 @@
     TopNode = currentTopNode;
   }
 
-  /****************************************************************************************/
-
-
   /// <summary>
   ///
   /// </summary>
@@ -446,10 +434,8 @@
         CreateNodeByOrdem(
             eExcelConditionalFormattingValueObjectNodeType.Cfvo,
             ExcelConditionalFormattingConstants.Paths._valAttribute,
-            (value == null) ? string.Empty : value);
+            value ?? string.Empty);
       }
     }
   }
-
-  /****************************************************************************************/
 }
diff --git a/EPPlus/ConditionalFormatting/ExcelConditionalFormattingHelper.cs b/EPPlus/ConditionalFormatting/ExcelConditionalFormattingHelper.cs
index 41fbe30..0ea9a45 100644
--- a/EPPlus/ConditionalFormatting/ExcelConditionalFormattingHelper.cs
+++ b/EPPlus/ConditionalFormatting/ExcelConditionalFormattingHelper.cs
@@ -85,7 +85,7 @@
   public static string GetAttributeString(XmlNode node, string attribute) {
     try {
       var value = node.Attributes[attribute].Value;
-      return (value == null) ? string.Empty : value;
+      return value ?? string.Empty;
     } catch {
       return string.Empty;
     }
diff --git a/EPPlus/ConditionalFormatting/ExcelConditionalFormattingIconDatabarValue.cs b/EPPlus/ConditionalFormatting/ExcelConditionalFormattingIconDatabarValue.cs
index 2e080d2..bffef35 100644
--- a/EPPlus/ConditionalFormatting/ExcelConditionalFormattingIconDatabarValue.cs
+++ b/EPPlus/ConditionalFormatting/ExcelConditionalFormattingIconDatabarValue.cs
@@ -42,15 +42,9 @@
 /// Describes the values of the interpolation points in a gradient scale.
 /// </summary>
 public class ExcelConditionalFormattingIconDataBarValue : XmlHelper {
-  /****************************************************************************************/
-
-
   private eExcelConditionalFormattingRuleType _ruleType;
   private readonly ExcelWorksheet _worksheet;
 
-  /****************************************************************************************/
-
-
   /// <summary>
   /// Initialize the cfvo (§18.3.1.11) node
   /// </summary>
@@ -213,11 +207,6 @@
       XmlNamespaceManager namespaceManager)
       : this(type, 0, null, ruleType, address, priority, worksheet, null, namespaceManager) {}
 
-  /****************************************************************************************/
-
-  /****************************************************************************************/
-
-
   /// <summary>
   ///
   /// </summary>
@@ -296,6 +285,4 @@
       }
     }
   }
-
-  /****************************************************************************************/
 }
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveAverage.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveAverage.cs
index 6e82c2f..cf90b06 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveAverage.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveAverage.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveOrEqualAverage.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveOrEqualAverage.cs
index 60a89d0..dcbf944 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveOrEqualAverage.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveOrEqualAverage.cs
@@ -58,7 +58,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveStdDev.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveStdDev.cs
index 0883462..bd905e1 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveStdDev.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAboveStdDev.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAverageGroup.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAverageGroup.cs
index cebdb51..34076ba 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAverageGroup.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingAverageGroup.cs
@@ -62,7 +62,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {}
+          namespaceManager ?? worksheet.NameSpaceManager) {}
 
   /// <summary>
   ///
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBeginsWith.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBeginsWith.cs
index 9dc918e..d8cdd26 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBeginsWith.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBeginsWith.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowAverage.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowAverage.cs
index be13fa3..ef68fc1 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowAverage.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowAverage.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowOrEqualAverage.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowOrEqualAverage.cs
index 39eb327..4d8cd67 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowOrEqualAverage.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowOrEqualAverage.cs
@@ -58,7 +58,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowStdDev.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowStdDev.cs
index b2419f6..8291319 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowStdDev.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBelowStdDev.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBetween.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBetween.cs
index b27a308..fb1bb73 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBetween.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBetween.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBottom.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBottom.cs
index 4b23f49..ae9e861 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBottom.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBottom.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBottomPercent.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBottomPercent.cs
index 494078d..719901f 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBottomPercent.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingBottomPercent.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsBlanks.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsBlanks.cs
index 16ea6c2..d5eafe0 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsBlanks.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsBlanks.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsErrors.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsErrors.cs
index 5c743dc..f5d65f9 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsErrors.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsErrors.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsText.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsText.cs
index 88a4d43..ed433cc 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsText.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingContainsText.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingDataBar.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingDataBar.cs
index ed32ace..2a80337 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingDataBar.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingDataBar.cs
@@ -64,7 +64,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     SchemaNodeOrder = new[] { "cfvo", "color" };
     //Create the <dataBar> node inside the <cfRule> node
     if (itemElementNode != null && itemElementNode.HasChildNodes) {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingDuplicateValues.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingDuplicateValues.cs
index 1231fc9..ecba659 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingDuplicateValues.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingDuplicateValues.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {}
+          namespaceManager ?? worksheet.NameSpaceManager) {}
 
   /// <summary>
   ///
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingEndsWith.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingEndsWith.cs
index d02ed50..39d2a2b 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingEndsWith.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingEndsWith.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingEqual.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingEqual.cs
index 8a6ed42..ddade06 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingEqual.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingEqual.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingExpression.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingExpression.cs
index 8ba9823..ce887c5 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingExpression.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingExpression.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingFiveIconSet.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingFiveIconSet.cs
index 8c557d7..e75f49a 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingFiveIconSet.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingFiveIconSet.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode != null && itemElementNode.HasChildNodes) {
       XmlNode iconNode4 = TopNode.SelectSingleNode(
           "d:iconSet/d:cfvo[position()=4]",
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingFourIconSet.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingFourIconSet.cs
index 14430b9..10bd1b3 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingFourIconSet.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingFourIconSet.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode != null && itemElementNode.HasChildNodes) {
       XmlNode iconNode4 = TopNode.SelectSingleNode(
           "d:iconSet/d:cfvo[position()=4]",
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingGreaterThan.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingGreaterThan.cs
index 2e3d9ee..9e57c1e 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingGreaterThan.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingGreaterThan.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingGreaterThanOrEqual.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingGreaterThanOrEqual.cs
index 6a19464..1a83939 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingGreaterThanOrEqual.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingGreaterThanOrEqual.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLast7Days.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLast7Days.cs
index e2593d3..100f6da 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLast7Days.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLast7Days.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLastMonth.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLastMonth.cs
index 1d31a44..3888e32 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLastMonth.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLastMonth.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLastWeek.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLastWeek.cs
index 05c6513..9edbe40 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLastWeek.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLastWeek.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLessThan.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLessThan.cs
index de178ec..5695da9 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLessThan.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLessThan.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLessThanOrEqual.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLessThanOrEqual.cs
index 7c43a2e..3e54630 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLessThanOrEqual.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingLessThanOrEqual.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNextMonth.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNextMonth.cs
index 3d756f4..a7a23e6 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNextMonth.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNextMonth.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNextWeek.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNextWeek.cs
index 95726a1..1c01b87 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNextWeek.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNextWeek.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotBetween.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotBetween.cs
index 71c565c..afa0de5 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotBetween.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotBetween.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsBlanks.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsBlanks.cs
index b0e06b2..babf13b 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsBlanks.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsBlanks.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsErrors.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsErrors.cs
index 7d42bd3..e6fa828 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsErrors.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsErrors.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsText.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsText.cs
index 279d6b4..1b86511 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsText.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotContainsText.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotEqual.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotEqual.cs
index e882682..8782151 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotEqual.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingNotEqual.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThisMonth.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThisMonth.cs
index 6104959..db86666 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThisMonth.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThisMonth.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThisWeek.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThisWeek.cs
index a42007d..1635e36 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThisWeek.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThisWeek.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThreeColorScale.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThreeColorScale.cs
index a63bf04..fa0574e 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThreeColorScale.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThreeColorScale.cs
@@ -61,7 +61,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     // Create the <colorScale> node inside the <cfRule> node
     var colorScaleNode = CreateComplexNode(
         Node,
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThreeIconSet.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThreeIconSet.cs
index cc0a2ad..2b8b27e 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThreeIconSet.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingThreeIconSet.cs
@@ -49,7 +49,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {}
+          namespaceManager ?? worksheet.NameSpaceManager) {}
 }
 
 /// <summary>
@@ -80,7 +80,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode != null && itemElementNode.HasChildNodes) {
       int pos = 1;
       foreach (XmlNode node in itemElementNode.SelectNodes("d:iconSet/d:cfvo", NameSpaceManager)) {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTimePeriodGroup.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTimePeriodGroup.cs
index f8ebade..52fe1ab 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTimePeriodGroup.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTimePeriodGroup.cs
@@ -62,7 +62,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {}
+          namespaceManager ?? worksheet.NameSpaceManager) {}
 
   /// <summary>
   ///
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingToday.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingToday.cs
index 6b99262..b2d1755 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingToday.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingToday.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTomorrow.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTomorrow.cs
index 6b5aa92..fcfab71 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTomorrow.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTomorrow.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTop.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTop.cs
index 95697d0..5672d2d 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTop.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTop.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTopPercent.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTopPercent.cs
index 929369d..0d4a06c 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTopPercent.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTopPercent.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTwoColorScale.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTwoColorScale.cs
index 29a5a9e..69ee8b1 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTwoColorScale.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingTwoColorScale.cs
@@ -71,7 +71,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     // Create the <colorScale> node inside the <cfRule> node
     var colorScaleNode = CreateComplexNode(
         Node,
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingUniqueValues.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingUniqueValues.cs
index ef4d72e..ff0ba0d 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingUniqueValues.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingUniqueValues.cs
@@ -60,7 +60,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {}
+          namespaceManager ?? worksheet.NameSpaceManager) {}
 
   /// <summary>
   ///
diff --git a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingYesterday.cs b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingYesterday.cs
index 158948c..a5701ec 100644
--- a/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingYesterday.cs
+++ b/EPPlus/ConditionalFormatting/Rules/ExcelConditionalFormattingYesterday.cs
@@ -57,7 +57,7 @@
           priority,
           worksheet,
           itemElementNode,
-          (namespaceManager == null) ? worksheet.NameSpaceManager : namespaceManager) {
+          namespaceManager ?? worksheet.NameSpaceManager) {
     if (itemElementNode
         == null) //Set default values and create attributes if needed
     {
diff --git a/EPPlus/DataValidation/ExcelDataValidation.cs b/EPPlus/DataValidation/ExcelDataValidation.cs
index 0f74ed9..78b6259 100644
--- a/EPPlus/DataValidation/ExcelDataValidation.cs
+++ b/EPPlus/DataValidation/ExcelDataValidation.cs
@@ -93,7 +93,7 @@
       ExcelDataValidationType validationType,
       XmlNode itemElementNode,
       XmlNamespaceManager namespaceManager)
-      : base(namespaceManager != null ? namespaceManager : worksheet.NameSpaceManager) {
+      : base(namespaceManager ?? worksheet.NameSpaceManager) {
     Require.Argument(address).IsNotNullOrEmpty("address");
     address = CheckAndFixRangeAddress(address);
     if (itemElementNode == null) {
diff --git a/EPPlus/DataValidation/ExcelDataValidationCollection.cs b/EPPlus/DataValidation/ExcelDataValidationCollection.cs
index 76c07a3..4518881 100644
--- a/EPPlus/DataValidation/ExcelDataValidationCollection.cs
+++ b/EPPlus/DataValidation/ExcelDataValidationCollection.cs
@@ -103,9 +103,6 @@
         _validations.Add(ExcelDataValidationFactory.Create(type, worksheet, addr, node));
       }
     }
-    if (_validations.Count > 0) {
-      OnValidationCountChanged();
-    }
   }
 
   private void EnsureRootElementExists() {
@@ -117,21 +114,6 @@
     }
   }
 
-  private void OnValidationCountChanged() {
-    //if (TopNode != null)
-    //{
-    //    SetXmlNodeString("@count", _validations.Count.ToString());
-    //}
-  }
-
-  private XmlNode GetRootNode() {
-    EnsureRootElementExists();
-    TopNode = _worksheet.WorksheetXml.SelectSingleNode(
-        _dataValidationPath,
-        _worksheet.NameSpaceManager);
-    return TopNode;
-  }
-
   /// <summary>
   /// Validates address - not empty, collisions
   /// </summary>
@@ -184,7 +166,6 @@
     EnsureRootElementExists();
     var item = new ExcelDataValidationAny(_worksheet, address, ExcelDataValidationType.Any);
     _validations.Add(item);
-    OnValidationCountChanged();
     return item;
   }
 
@@ -198,7 +179,6 @@
     EnsureRootElementExists();
     var item = new ExcelDataValidationInt(_worksheet, address, ExcelDataValidationType.Whole);
     _validations.Add(item);
-    OnValidationCountChanged();
     return item;
   }
 
@@ -213,7 +193,6 @@
     EnsureRootElementExists();
     var item = new ExcelDataValidationDecimal(_worksheet, address, ExcelDataValidationType.Decimal);
     _validations.Add(item);
-    OnValidationCountChanged();
     return item;
   }
 
@@ -228,7 +207,6 @@
     EnsureRootElementExists();
     var item = new ExcelDataValidationList(_worksheet, address, ExcelDataValidationType.List);
     _validations.Add(item);
-    OnValidationCountChanged();
     return item;
   }
 
@@ -242,7 +220,6 @@
     EnsureRootElementExists();
     var item = new ExcelDataValidationInt(_worksheet, address, ExcelDataValidationType.TextLength);
     _validations.Add(item);
-    OnValidationCountChanged();
     return item;
   }
 
@@ -259,7 +236,6 @@
         address,
         ExcelDataValidationType.DateTime);
     _validations.Add(item);
-    OnValidationCountChanged();
     return item;
   }
 
@@ -268,7 +244,6 @@
     EnsureRootElementExists();
     var item = new ExcelDataValidationTime(_worksheet, address, ExcelDataValidationType.Time);
     _validations.Add(item);
-    OnValidationCountChanged();
     return item;
   }
 
@@ -282,7 +257,6 @@
     EnsureRootElementExists();
     var item = new ExcelDataValidationCustom(_worksheet, address, ExcelDataValidationType.Custom);
     _validations.Add(item);
-    OnValidationCountChanged();
     return item;
   }
 
@@ -293,17 +267,13 @@
   /// <returns>True if remove succeeds, otherwise false</returns>
   /// <exception cref="ArgumentNullException">if <paramref name="item"/> is null</exception>
   public bool Remove(IExcelDataValidation item) {
-    if (!(item is ExcelDataValidation)) {
+    if (!(item is ExcelDataValidation validation)) {
       throw new InvalidCastException(
           "The supplied item must inherit OfficeOpenXml.DataValidation.ExcelDataValidation");
     }
     Require.Argument(item).IsNotNull("item");
-    TopNode.RemoveChild(((ExcelDataValidation)item).TopNode);
-    var retVal = _validations.Remove(item);
-    if (retVal) {
-      OnValidationCountChanged();
-    }
-    return retVal;
+    TopNode.RemoveChild(validation.TopNode);
+    return _validations.Remove(validation);
   }
 
   /// <summary>
@@ -317,8 +287,8 @@
   /// <param name="index"></param>
   /// <returns></returns>
   public IExcelDataValidation this[int index] {
-    get { return _validations[index]; }
-    set { _validations[index] = value; }
+    get => _validations[index];
+    set => _validations[index] = value;
   }
 
   /// <summary>
@@ -367,16 +337,15 @@
   public void RemoveAll(Predicate<IExcelDataValidation> match) {
     var matches = _validations.FindAll(match);
     foreach (var m in matches) {
-      if (!(m is ExcelDataValidation)) {
+      if (!(m is ExcelDataValidation validation)) {
         throw new InvalidCastException(
             "The supplied item must inherit OfficeOpenXml.DataValidation.ExcelDataValidation");
       }
       TopNode
           .SelectSingleNode(_dataValidationPath.TrimStart('/'), NameSpaceManager)
-          .RemoveChild(((ExcelDataValidation)m).TopNode);
+          .RemoveChild(validation.TopNode);
     }
     _validations.RemoveAll(match);
-    OnValidationCountChanged();
   }
 
   IEnumerator<IExcelDataValidation> IEnumerable<IExcelDataValidation>.GetEnumerator() {
diff --git a/EPPlus/DataValidation/ExcelDataValidationType.cs b/EPPlus/DataValidation/ExcelDataValidationType.cs
index 50b8571..1c7465c 100644
--- a/EPPlus/DataValidation/ExcelDataValidationType.cs
+++ b/EPPlus/DataValidation/ExcelDataValidationType.cs
@@ -173,10 +173,10 @@
   /// <param name="obj"></param>
   /// <returns></returns>
   public override bool Equals(object obj) {
-    if (!(obj is ExcelDataValidationType)) {
+    if (!(obj is ExcelDataValidationType type)) {
       return false;
     }
-    return ((ExcelDataValidationType)obj).Type == Type;
+    return type.Type == Type;
   }
 
   /// <summary>
diff --git a/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaDateTime.cs b/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaDateTime.cs
index 5543046..3dbc85d 100644
--- a/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaDateTime.cs
+++ b/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaDateTime.cs
@@ -47,8 +47,7 @@
       : base(namespaceManager, topNode, formulaPath) {
     var value = GetXmlNodeString(formulaPath);
     if (!string.IsNullOrEmpty(value)) {
-      double oADate = default(double);
-      if (double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out oADate)) {
+      if (double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out var oADate)) {
         Value = DateTime.FromOADate(oADate);
       } else {
         ExcelFormula = value;
diff --git a/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaDecimal.cs b/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaDecimal.cs
index 67b921d..995c459 100644
--- a/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaDecimal.cs
+++ b/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaDecimal.cs
@@ -49,8 +49,7 @@
       : base(namespaceManager, topNode, formulaPath) {
     var value = GetXmlNodeString(formulaPath);
     if (!string.IsNullOrEmpty(value)) {
-      double dValue = default(double);
-      if (double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out dValue)) {
+      if (double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out var dValue)) {
         Value = dValue;
       } else {
         ExcelFormula = value;
diff --git a/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaInt.cs b/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaInt.cs
index 70dc8cc..6bd31d2 100644
--- a/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaInt.cs
+++ b/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaInt.cs
@@ -45,8 +45,7 @@
       : base(namespaceManager, topNode, formulaPath) {
     var value = GetXmlNodeString(formulaPath);
     if (!string.IsNullOrEmpty(value)) {
-      int intValue = default(int);
-      if (int.TryParse(value, out intValue)) {
+      if (int.TryParse(value, out var intValue)) {
         Value = intValue;
       } else {
         ExcelFormula = value;
diff --git a/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaTime.cs b/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaTime.cs
index 38a8176..54d9844 100644
--- a/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaTime.cs
+++ b/EPPlus/DataValidation/Formulas/ExcelDataValidationFormulaTime.cs
@@ -47,8 +47,7 @@
       : base(namespaceManager, topNode, formulaPath) {
     var value = GetXmlNodeString(formulaPath);
     if (!string.IsNullOrEmpty(value)) {
-      decimal time = default(decimal);
-      if (decimal.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out time)) {
+      if (decimal.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out var time)) {
         Value = new(time);
       } else {
         Value = new();
diff --git a/EPPlus/Drawing/Vml/ExcelVmlDrawingComment.cs b/EPPlus/Drawing/Vml/ExcelVmlDrawingComment.cs
index 560529e..3392fc7 100644
--- a/EPPlus/Drawing/Vml/ExcelVmlDrawingComment.cs
+++ b/EPPlus/Drawing/Vml/ExcelVmlDrawingComment.cs
@@ -140,7 +140,7 @@
   /// If the drawing object is visible.
   /// </summary>
   public bool Visible {
-    get { return (TopNode.SelectSingleNode(_visiblePath, NameSpaceManager) != null); }
+    get => (TopNode.SelectSingleNode(_visiblePath, NameSpaceManager) != null);
     set {
       if (value) {
         CreateNode(_visiblePath);
@@ -153,7 +153,6 @@
   }
 
   private const string _backgroundcolorPath = "@fillcolor";
-  private const string _backgroundcolor2Path = "v:fill/@color2";
 
   /// <summary>
   /// Background color
@@ -167,12 +166,11 @@
       if (col.StartsWith("#")) {
         col = col.Substring(1, col.Length - 1);
       }
-      int res;
       if (int.TryParse(
           col,
           NumberStyles.AllowHexSpecifier,
           CultureInfo.InvariantCulture,
-          out res)) {
+          out var res)) {
         return Color.FromArgb(res);
       }
       return Color.Empty;
@@ -233,12 +231,11 @@
       if (col.StartsWith("#")) {
         col = col.Substring(1, col.Length - 1);
       }
-      int res;
       if (int.TryParse(
           col,
           NumberStyles.AllowHexSpecifier,
           CultureInfo.InvariantCulture,
-          out res)) {
+          out var res)) {
         return Color.FromArgb(res);
       }
       return Color.Empty;
@@ -264,13 +261,12 @@
         wt = wt.Substring(0, wt.Length - 2);
       }
 
-      Single ret;
-      if (Single.TryParse(wt, NumberStyles.Any, CultureInfo.InvariantCulture, out ret)) {
+      if (Single.TryParse(wt, NumberStyles.Any, CultureInfo.InvariantCulture, out var ret)) {
         return ret;
       }
       return 0;
     }
-    set { SetXmlNodeString(_linewidthPath, value.ToString(CultureInfo.InvariantCulture) + "pt"); }
+    set => SetXmlNodeString(_linewidthPath, value.ToString(CultureInfo.InvariantCulture) + "pt");
   }
 
   ///// <summary>
@@ -336,15 +332,13 @@
   /// </summary>
   public bool AutoFit {
     get {
-      string value;
-      GetStyle(GetXmlNodeString(_textboxStylePath), "mso-fit-shape-to-text", out value);
+      GetStyle(GetXmlNodeString(_textboxStylePath), "mso-fit-shape-to-text", out var value);
       return value == "t";
     }
-    set {
+    set =>
       SetXmlNodeString(
           _textboxStylePath,
           SetStyle(GetXmlNodeString(_textboxStylePath), "mso-fit-shape-to-text", value ? "t" : ""));
-    }
   }
 
   private const string _lockedPath = "x:ClientData/x:Locked";
@@ -353,8 +347,8 @@
   /// If the object is locked when the sheet is protected
   /// </summary>
   public bool Locked {
-    get { return GetXmlNodeBool(_lockedPath, false); }
-    set { SetXmlNodeBool(_lockedPath, value, false); }
+    get => GetXmlNodeBool(_lockedPath, false);
+    set => SetXmlNodeBool(_lockedPath, value, false);
   }
 
   private const string _lockTextPath = "x:ClientData/x:LockText";
@@ -363,8 +357,8 @@
   /// Specifies that the object's text is locked
   /// </summary>
   public bool LockText {
-    get { return GetXmlNodeBool(_lockTextPath, false); }
-    set { SetXmlNodeBool(_lockTextPath, value, false); }
+    get => GetXmlNodeBool(_lockTextPath, false);
+    set => SetXmlNodeBool(_lockTextPath, value, false);
   }
 
   private ExcelVmlDrawingPosition _from;
@@ -401,14 +395,12 @@
   private const string _stylePath = "@style";
 
   internal string Style {
-    get { return GetXmlNodeString(_stylePath); }
-    set { SetXmlNodeString(_stylePath, value); }
+    get => GetXmlNodeString(_stylePath);
+    set => SetXmlNodeString(_stylePath, value);
   }
 
   ulong IRangeId.RangeID {
-    get {
-      return ExcelCellBase.GetCellId(Range.Worksheet.SheetID, Range.Start.Row, Range.Start.Column);
-    }
+    get => ExcelCellBase.GetCellId(Range.Worksheet.SheetID, Range.Start.Row, Range.Start.Column);
     set {}
   }
 }
diff --git a/EPPlus/Drawing/Vml/ExcelVmlDrawingCommentCollection.cs b/EPPlus/Drawing/Vml/ExcelVmlDrawingCommentCollection.cs
index 6a908e3..deb294c 100644
--- a/EPPlus/Drawing/Vml/ExcelVmlDrawingCommentCollection.cs
+++ b/EPPlus/Drawing/Vml/ExcelVmlDrawingCommentCollection.cs
@@ -158,8 +158,7 @@
     if (_nextID == 0) {
       foreach (ExcelVmlDrawingComment draw in this) {
         if (draw.Id.Length > 3 && draw.Id.StartsWith("vml")) {
-          int id;
-          if (int.TryParse(draw.Id.Substring(3, draw.Id.Length - 3), out id)) {
+          if (int.TryParse(draw.Id.Substring(3, draw.Id.Length - 3), out var id)) {
             if (id > _nextID) {
               _nextID = id;
             }
@@ -177,9 +176,7 @@
     return _drawings.ContainsKey(rangeId);
   }
 
-  internal int Count {
-    get { return _drawings.Count; }
-  }
+  internal int Count => _drawings.Count;
 
   public IEnumerator GetEnumerator() {
     return _drawings;
diff --git a/EPPlus/Drawing/Vml/ExcelVmlDrawingPosition.cs b/EPPlus/Drawing/Vml/ExcelVmlDrawingPosition.cs
index 3d02863..294f9b2 100644
--- a/EPPlus/Drawing/Vml/ExcelVmlDrawingPosition.cs
+++ b/EPPlus/Drawing/Vml/ExcelVmlDrawingPosition.cs
@@ -93,8 +93,7 @@
     string anchor = GetXmlNodeString("x:Anchor");
     string[] numbers = anchor.Split(',');
     if (numbers.Length == 8) {
-      int ret;
-      if (int.TryParse(numbers[_startPos + pos], out ret)) {
+      if (int.TryParse(numbers[_startPos + pos], out var ret)) {
         return ret;
       }
     }
diff --git a/EPPlus/EPPlusSDK.csproj b/EPPlus/EPPlusSDK.csproj
index 00f19ed..a26851d 100644
--- a/EPPlus/EPPlusSDK.csproj
+++ b/EPPlus/EPPlusSDK.csproj
@@ -4,17 +4,9 @@
     <RootNamespace>OfficeOpenXml</RootNamespace>
     <AssemblyName>EPPlus</AssemblyName>
     <PackageId>Appsheet.EPPlus</PackageId>
-    <Version>1.0.5</Version>
-    <DefaultItemExcludes>$(DefaultItemExcludes);Properties/AssemblyInfo.cs;FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/**;FormulaParsing/LexicalAnalysis/TokenHandler.cs;FormulaParsing/Excel/Functions/Math/Rank.cs</DefaultItemExcludes>
-    <DefineConstants>Core;STANDARD20</DefineConstants>
-    <ImplicitUsings>disable</ImplicitUsings>
+    <Version>1.0.6</Version>
   </PropertyGroup>
   <ItemGroup>
-    <PackageReference Include="Microsoft.CSharp" Version="4.7.0"/>
-    <PackageReference Include="System.CodeDom" Version="5.0.0"/>
     <PackageReference Include="System.Drawing.Common" Version="6.0.0"/>
-    <PackageReference Include="System.Security.Cryptography.Pkcs" Version="5.0.1"/>
-    <PackageReference Include="System.Security.Permissions" Version="5.0.0"/>
-    <PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0"/>
   </ItemGroup>
 </Project>
diff --git a/EPPlus/ExcelAddress.cs b/EPPlus/ExcelAddress.cs
index 22fcf59..9a5f20d 100644
--- a/EPPlus/ExcelAddress.cs
+++ b/EPPlus/ExcelAddress.cs
@@ -410,16 +410,12 @@
   /// <summary>
   /// The address for the range
   /// </summary>
-  public virtual string Address {
-    get { return _address; }
-  }
+  public virtual string Address => _address;
 
   /// <summary>
   /// If the address is a defined name
   /// </summary>
-  public bool IsName {
-    get { return _fromRow < 0; }
-  }
+  public bool IsName => _fromRow < 0;
 
   /// <summary>
   /// Returns the address text
@@ -444,11 +440,7 @@
     }
   }
 
-  internal string AddressSpaceSeparated {
-    get {
-      return _address.Replace(',', ' '); //Conditional formatting and a few other places use space as separator for mulit addresses.
-    }
-  }
+  internal string AddressSpaceSeparated => _address.Replace(',', ' '); //Conditional formatting and a few other places use space as separator for mulit addresses.
 
   /// <summary>
   /// Validate the address
@@ -460,15 +452,11 @@
     }
   }
 
-  internal string WorkSheet {
-    get { return _ws; }
-  }
+  internal string WorkSheet => _ws;
 
   protected internal List<ExcelAddress> _addresses;
 
-  internal virtual List<ExcelAddress> Addresses {
-    get { return _addresses; }
-  }
+  internal virtual List<ExcelAddress> Addresses => _addresses;
 
   private bool ExtractAddress(string fullAddress) {
     var brackPos = new Stack<int>();
@@ -864,10 +852,8 @@
     if (IsFormula(address)) {
       return AddressType.Formula;
     }
-    string wb,
-        ws,
-        intAddress;
-    if (SplitAddress(address, out wb, out ws, out intAddress)) {
+    string ws;
+    if (SplitAddress(address, out var wb, out ws, out var intAddress)) {
       if (intAddress.Contains(
           "[")) //Table reference
       {
@@ -955,12 +941,10 @@
       return false;
     }
     var cells = intAddress.Split(':');
-    int fromRow,
-        toRow,
-        fromCol,
+    int toRow,
         toCol;
 
-    if (!GetRowCol(cells[0], out fromRow, out fromCol, false)) {
+    if (!GetRowCol(cells[0], out var fromRow, out var fromCol, false)) {
       return false;
     }
     if (cells.Length > 1) {
@@ -1052,22 +1036,9 @@
     return false;
   }
 
-  private static bool IsValidName(string address) {
-    if (Regex.IsMatch(
-        address,
-        "[^0-9./*-+,½!\"@#£%&/{}()\\[\\]=?`^~':;<>|][^/*-+,½!\"@#£%&/{}()\\[\\]=?`^~':;<>|]*")) {
-      return true;
-    }
-    return false;
-  }
+  public int Rows => _toRow - _fromRow + 1;
 
-  public int Rows {
-    get { return _toRow - _fromRow + 1; }
-  }
-
-  public int Columns {
-    get { return _toCol - _fromCol + 1; }
-  }
+  public int Columns => _toCol - _fromCol + 1;
 
   internal bool IsMultiCell() {
     return (_fromRow < _fromCol || _fromCol < _toCol);
diff --git a/EPPlus/ExcelCellBase.cs b/EPPlus/ExcelCellBase.cs
index 36e1450..df48cb3 100644
--- a/EPPlus/ExcelCellBase.cs
+++ b/EPPlus/ExcelCellBase.cs
@@ -274,10 +274,8 @@
   /// <param name="colIncr"></param>
   /// <returns></returns>
   private static string ToR1C1(string part, int row, int col, int rowIncr, int colIncr) {
-    int addrRow,
-        addrCol;
     string ret = "R";
-    if (GetRowCol(part, out addrRow, out addrCol, false)) {
+    if (GetRowCol(part, out var addrRow, out var addrCol, false)) {
       if (addrRow == 0 || addrCol == 0) {
         return part;
       }
@@ -299,16 +297,13 @@
   }
 
   private static string ToR1C1_V1(string part, int row, int col, int rowIncr, int colIncr) {
-    int addrRow,
-        addrCol;
-
     // Handle range expressions
     if ((part.Length > 1) && (part.IndexOf(':', 1) > 0)) {
       return RangeToR1C1_V1(part, row, col, rowIncr, colIncr);
     }
 
     string ret = "R";
-    if (GetRowCol(part, out addrRow, out addrCol, false)) {
+    if (GetRowCol(part, out var addrRow, out var addrCol, false)) {
       if (addrRow == 0 || addrCol == 0) {
         return part;
       }
@@ -352,13 +347,14 @@
       int col,
       int rowIncr,
       int colIncr) {
-    int addrRow,
-        addrCol;
-    bool fixedRow,
-        fixedCol;
-
     string result = "";
-    if (GetRowCol_V1(part, out addrRow, out addrCol, false, out fixedRow, out fixedCol)) {
+    if (GetRowCol_V1(
+        part,
+        out var addrRow,
+        out var addrCol,
+        false,
+        out var fixedRow,
+        out var fixedCol)) {
       if (addrRow > 0) {
         result += "R";
         if (fixedRow) {
@@ -409,8 +405,7 @@
     }
 
     int cStart = check.IndexOf("C");
-    bool absoluteRow,
-        absoluteCol;
+    bool absoluteRow;
     if (cStart == -1) {
       int rNum = GetRc(part, row, out absoluteRow);
       if (rNum > int.MinValue) {
@@ -419,7 +414,10 @@
       return part;
     } else {
       int rNum = GetRc(part.Substring(1, cStart - 1), row, out absoluteRow);
-      int cNum = GetRc(part.Substring(cStart + 1, part.Length - cStart - 1), col, out absoluteCol);
+      int cNum = GetRc(
+          part.Substring(cStart + 1, part.Length - cStart - 1),
+          col,
+          out var absoluteCol);
       if (rNum > int.MinValue && cNum > int.MinValue) {
         return GetAddress(rNum, absoluteRow, cNum, absoluteCol);
       }
@@ -585,8 +583,7 @@
     }
 
     // Return number value
-    int result;
-    return (int.TryParse(value.Substring(0, length), out result)) ? result : Int32.MinValue;
+    return (int.TryParse(value.Substring(0, length), out var result)) ? result : Int32.MinValue;
   }
 
   private static string RangeToA1_V1(string part, int row, int col, int rowIncr, int colIncr) {
@@ -603,98 +600,6 @@
     return result;
   }
 
-  private static string RangeCellToA1_V1(string part, int row, int col, int rowIncr, int colIncr) {
-    int addrRow,
-        addrCol;
-    bool fixedRow,
-        fixedCol;
-
-    string result = "";
-    if (GetRowCol_V1(part, out addrRow, out addrCol, false, out fixedRow, out fixedCol)) {
-      if (addrRow > 0) {
-        result += "R";
-        if (fixedRow) {
-          // Absolute row
-          result += addrRow.ToString();
-        } else if (addrRow - row != 0) {
-          // Relative row
-          result += string.Format("[{0}]", addrRow - row);
-        }
-      }
-
-      if (addrCol > 0) {
-        result += "C";
-        if (fixedCol) {
-          // Absolute column
-          result += addrCol;
-        } else if (addrCol - col != 0) {
-          // Relative column
-          result += string.Format("[{0}]", addrCol - col);
-        }
-      }
-      return result;
-    }
-    return part;
-  }
-
-  /// <summary>
-  /// Adds or subtracts a row or column to an address
-  /// </summary>
-  /// <param name="address"></param>
-  /// <param name="row"></param>
-  /// <param name="col"></param>
-  /// <param name="rowIncr"></param>
-  /// <param name="colIncr"></param>
-  /// <returns></returns>
-  private static string AddToRowColumnTranslator(
-      string address,
-      int row,
-      int col,
-      int rowIncr,
-      int colIncr) {
-    int fromRow,
-        fromCol;
-    if (address == "#REF!") {
-      return address;
-    }
-    if (GetRowCol(address, out fromRow, out fromCol, false)) {
-      if (fromRow == 0 || fromCol == 0) {
-        return address;
-      }
-      if (rowIncr != 0 && row != 0 && fromRow >= row && address.IndexOf('$', 1) == -1) {
-        if (fromRow < row - rowIncr) {
-          return "#REF!";
-        }
-
-        fromRow = fromRow + rowIncr;
-      }
-
-      if (colIncr != 0 && col != 0 && fromCol >= col && address.StartsWith("$") == false) {
-        if (fromCol < col - colIncr) {
-          return "#REF!";
-        }
-
-        fromCol = fromCol + colIncr;
-      }
-
-      address = GetAddress(fromRow, address.IndexOf('$', 1) > -1, fromCol, address.StartsWith("$"));
-    }
-    return address;
-  }
-
-  /// <summary>
-  /// Returns with brackets if the value is negative
-  /// </summary>
-  /// <param name="v">The value</param>
-  /// <returns></returns>
-  private static string GetRcFmt(int v) {
-    return (v < 0
-            ? string.Format("[{0}]", v)
-            : v > 0
-                ? v.ToString()
-                : "");
-  }
-
   /// <summary>
   /// Get the offset value for RC format
   /// </summary>
@@ -727,32 +632,6 @@
     return int.MinValue;
   }
 
-  private static int GetRC_V1(string value, int offsetValue, out bool fixedAddr) {
-    if ((value == "") || (value == "R") || (value == "C")) {
-      // Relative address with no offset
-      fixedAddr = false;
-      return offsetValue;
-    }
-    int num;
-    if (value[1] == '['
-        && value[value.Length - 1]
-            == ']') //Offset?
-    {
-      // Relative address
-      fixedAddr = false;
-      if (int.TryParse(value.Substring(2, value.Length - 3), out num)) {
-        return (offsetValue + num);
-      }
-      return int.MinValue;
-    }
-    // Absolute address
-    fixedAddr = true;
-    if (int.TryParse(value.Substring(1, value.Length - 1), out num)) {
-      return num;
-    }
-    return int.MinValue;
-  }
-
   /// <summary>
   /// Returns the character representation of the numbered column
   /// </summary>
@@ -1303,9 +1182,7 @@
   public static bool IsValidCellAddress(string cellAddress) {
     bool result = false;
     try {
-      int row,
-          col;
-      if (GetRowColFromAddress(cellAddress, out row, out col)) {
+      if (GetRowColFromAddress(cellAddress, out var row, out var col)) {
         if (row > 0 && col > 0 && row <= ExcelPackage.MaxRows && col <= ExcelPackage.MaxColumns) {
           result = true;
         } else {
diff --git a/EPPlus/ExcelNamedRangeCollection.cs b/EPPlus/ExcelNamedRangeCollection.cs
index 748b7e7..3584a54 100644
--- a/EPPlus/ExcelNamedRangeCollection.cs
+++ b/EPPlus/ExcelNamedRangeCollection.cs
@@ -178,13 +178,9 @@
   /// <remarks>
   /// Throws a KeyNotFoundException if the key is not in the collection.
   /// </remarks>
-  public ExcelNamedRange this[string name] {
-    get { return _list[_dic[name]]; }
-  }
+  public ExcelNamedRange this[string name] => _list[_dic[name]];
 
-  public ExcelNamedRange this[int index] {
-    get { return _list[index]; }
-  }
+  public ExcelNamedRange this[int index] => _list[index];
 
   /// <summary>
   /// Implement interface method IEnumerator&lt;ExcelNamedRange&gt; GetEnumerator()
diff --git a/EPPlus/ExcelProtectedRangeCollection.cs b/EPPlus/ExcelProtectedRangeCollection.cs
index 728a3e4..fdc2053 100644
--- a/EPPlus/ExcelProtectedRangeCollection.cs
+++ b/EPPlus/ExcelProtectedRangeCollection.cs
@@ -75,9 +75,7 @@
     _baseList.RemoveAt(index);
   }
 
-  public ExcelProtectedRange this[int index] {
-    get { return _baseList[index]; }
-  }
+  public ExcelProtectedRange this[int index] => _baseList[index];
 
   IEnumerator<ExcelProtectedRange> IEnumerable<ExcelProtectedRange>.GetEnumerator() {
     return _baseList.GetEnumerator();
diff --git a/EPPlus/ExcelRangeBase.cs b/EPPlus/ExcelRangeBase.cs
index b94a638..b4e48a8 100644
--- a/EPPlus/ExcelRangeBase.cs
+++ b/EPPlus/ExcelRangeBase.cs
@@ -137,7 +137,7 @@
     _worksheet = xlWorksheet;
     _workbook = wb;
     if (string.IsNullOrEmpty(_ws)) {
-      _ws = (xlWorksheet == null ? null : xlWorksheet.Name);
+      _ws = xlWorksheet?.Name;
     }
     AddressChange += ExcelRangeBase_AddressChange;
     SetDelegate();
@@ -237,11 +237,6 @@
     _worksheet._styles.SetValue(row, col, (int)value);
   }
 
-  private void Set_StyleName(object value, int row, int col) {
-    //_worksheet.Cell(row, col).SetNewStyleName(value.ToString(), _styleID);
-    _worksheet._styles.SetValue(row, col, _styleID);
-  }
-
   private void Set_Value(object value, int row, int col) {
     //ExcelCell c = _worksheet.Cell(row, col);
     var sfi = _worksheet._formulas.GetValue(row, col);
@@ -257,7 +252,7 @@
   private void Set_Formula(object value, int row, int col) {
     //ExcelCell c = _worksheet.Cell(row, col);
     var f = _worksheet._formulas.GetValue(row, col);
-    if (f is int && (int)f >= 0) {
+    if (f is int i && i >= 0) {
       SplitFormulas(_worksheet.Cells[row, col]);
     }
 
@@ -321,13 +316,13 @@
 
   private void Set_HyperLink(object value, int row, int col) {
     //_worksheet.Cell(row, col).Hyperlink = value as Uri;
-    if (value is Uri) {
-      _worksheet._hyperLinks.SetValue(row, col, (Uri)value);
+    if (value is Uri uri) {
+      _worksheet._hyperLinks.SetValue(row, col, uri);
 
-      if (value is ExcelHyperLink) {
-        _worksheet._values.SetValue(row, col, ((ExcelHyperLink)value).Display);
+      if (uri is ExcelHyperLink link) {
+        _worksheet._values.SetValue(row, col, link.Display);
       } else {
-        _worksheet._values.SetValue(row, col, ((Uri)value).OriginalString);
+        _worksheet._values.SetValue(row, col, uri.OriginalString);
       }
     } else {
       _worksheet._hyperLinks.SetValue(row, col, null);
@@ -629,18 +624,6 @@
     }
   }
 
-  private bool IsInfinityValue(object value) {
-    double? valueAsDouble = value as double?;
-
-    if (valueAsDouble.HasValue
-        && (double.IsNegativeInfinity(valueAsDouble.Value)
-                || double.IsPositiveInfinity(valueAsDouble.Value))) {
-      return true;
-    }
-
-    return false;
-  }
-
   private object GetValueArray() {
     ExcelAddressBase addr;
     if (_fromRow == 1
@@ -670,60 +653,11 @@
     return v;
   }
 
-  private ExcelAddressBase GetAddressDim(ExcelRangeBase addr) {
-    int fromRow,
-        fromCol,
-        toRow,
-        toCol;
-    var d = _worksheet.Dimension;
-    fromRow = addr._fromRow < d._fromRow ? d._fromRow : addr._fromRow;
-    fromCol = addr._fromCol < d._fromCol ? d._fromCol : addr._fromCol;
-
-    toRow = addr._toRow > d._toRow ? d._toRow : addr._toRow;
-    toCol = addr._toCol > d._toCol ? d._toCol : addr._toCol;
-
-    if (addr._fromCol == fromRow && addr._toRow == toRow && addr._toCol == _toCol) {
-      return addr;
-    }
-    if (_fromRow > _toRow || _fromCol > _toCol) {
-      return null;
-    }
-    return new(fromRow, fromCol, toRow, toCol);
-  }
-
-  private object GetSingleValue() {
-    if (IsRichText) {
-      return RichText.Text;
-    }
-    return _worksheet._values.GetValue(_fromRow, _fromCol);
-  }
-
   /// <summary>
   /// Returns the formatted value.
   /// </summary>
   public string Text => GetFormattedText(false);
 
-  private void SetMinWidth(double minimumWidth, int fromCol, int toCol) {
-    var iterator = new CellsStoreEnumerator<object>(_worksheet._values, 0, fromCol, 0, toCol);
-    var prevCol = fromCol;
-    foreach (ExcelColumn col in iterator) {
-      col.Width = minimumWidth;
-      if (_worksheet.DefaultColWidth > minimumWidth && col.ColumnMin > prevCol) {
-        var newCol = _worksheet.Column(prevCol);
-        newCol.ColumnMax = col.ColumnMin - 1;
-        newCol.Width = minimumWidth;
-      }
-      prevCol = col.ColumnMax + 1;
-    }
-    if (_worksheet.DefaultColWidth > minimumWidth && prevCol < toCol) {
-      var newCol = _worksheet.Column(prevCol);
-      newCol.ColumnMax = toCol;
-      newCol.Width = minimumWidth;
-    }
-  }
-
-  internal string TextForWidth => GetFormattedText(true);
-
   private string GetFormattedText(bool forWidthCalc) {
     object v = Value;
     if (v == null) {
@@ -775,20 +709,20 @@
         var date = DateTime.FromOADate(d);
         return date.ToString(format, nf.Culture);
       }
-    } else if (v is DateTime) {
+    } else if (v is DateTime time) {
       if (nf.DataType == ExcelNumberFormatXml.eFormatType.DateTime) {
-        return ((DateTime)v).ToString(format, nf.Culture);
+        return time.ToString(format, nf.Culture);
       }
-      double d = ((DateTime)v).ToOADate();
+      double d = time.ToOADate();
       if (string.IsNullOrEmpty(nf.FractionFormat)) {
         return d.ToString(format, nf.Culture);
       }
       return nf.FormatFraction(d);
-    } else if (v is TimeSpan) {
+    } else if (v is TimeSpan span) {
       if (nf.DataType == ExcelNumberFormatXml.eFormatType.DateTime) {
-        return new DateTime(((TimeSpan)v).Ticks).ToString(format, nf.Culture);
+        return new DateTime(span.Ticks).ToString(format, nf.Culture);
       }
-      double d = (new DateTime(((TimeSpan)v).Ticks)).ToOADate();
+      double d = (new DateTime(span.Ticks)).ToOADate();
       if (string.IsNullOrEmpty(nf.FractionFormat)) {
         return d.ToString(format, nf.Culture);
       }
@@ -1195,7 +1129,7 @@
     for (int col = address._fromCol; col <= address._toCol; col++) {
       for (int row = address._fromRow; row <= address._toRow; row++) {
         var f = _worksheet._formulas.GetValue(row, col);
-        if (f is int && (int)f >= 0) {
+        if (f is int i && i >= 0) {
           SplitFormulas(address);
           return;
         }
@@ -1208,8 +1142,7 @@
     for (int col = address._fromCol; col <= address._toCol; col++) {
       for (int row = address._fromRow; row <= address._toRow; row++) {
         var f = _worksheet._formulas.GetValue(row, col);
-        if (f is int) {
-          int id = (int)f;
+        if (f is int id) {
           if (id >= 0 && !formulas.Contains(id)) {
             if (_worksheet._sharedFormulas[id].IsArray
                 && Collide(_worksheet.Cells[_worksheet._sharedFormulas[id].Address])
@@ -1652,12 +1585,12 @@
           _worksheet.Cells[row, col++].Value = item;
         } else {
           foreach (var t in members) {
-            if (t is PropertyInfo) {
-              _worksheet.Cells[row, col++].Value = ((PropertyInfo)t).GetValue(item, null);
-            } else if (t is FieldInfo) {
-              _worksheet.Cells[row, col++].Value = ((FieldInfo)t).GetValue(item);
-            } else if (t is MethodInfo) {
-              _worksheet.Cells[row, col++].Value = ((MethodInfo)t).Invoke(item, null);
+            if (t is PropertyInfo info) {
+              _worksheet.Cells[row, col++].Value = info.GetValue(item, null);
+            } else if (t is FieldInfo fieldInfo) {
+              _worksheet.Cells[row, col++].Value = fieldInfo.GetValue(item);
+            } else if (t is MethodInfo methodInfo) {
+              _worksheet.Cells[row, col++].Value = methodInfo.Invoke(item, null);
             }
           }
         }
@@ -2308,24 +2241,6 @@
     }
   }
 
-  private void DeleteCheckMergedCells(ExcelAddressBase range) {
-    var removeItems = new List<string>();
-    foreach (var addr in Worksheet.MergedCells) {
-      var addrCol = range.Collide(new ExcelAddress(range.WorkSheet, addr));
-      if (addrCol != eAddressCollition.No) {
-        if (addrCol == eAddressCollition.Inside) {
-          removeItems.Add(addr);
-        } else {
-          throw (new InvalidOperationException(
-                  "Can't remove/overwrite a part of cells that are merged"));
-        }
-      }
-    }
-    foreach (var item in removeItems) {
-      Worksheet.MergedCells.Remove(item);
-    }
-  }
-
   public void Dispose() {}
 
   //int _index;
diff --git a/EPPlus/ExcelRow.cs b/EPPlus/ExcelRow.cs
index 3dfd422..bb94e2b 100644
--- a/EPPlus/ExcelRow.cs
+++ b/EPPlus/ExcelRow.cs
@@ -87,9 +87,7 @@
   /// <summary>
   /// Provides access to the node representing the row.
   /// </summary>
-  internal XmlNode Node {
-    get { return (_rowElement); }
-  }
+  internal XmlNode Node => (_rowElement);
 
   /// <summary>
   /// Allows the row to be hidden in the worksheet
@@ -153,7 +151,7 @@
   /// Sets the style for the entire column using a style name.
   /// </summary>
   public string StyleName {
-    get { return _styleName; }
+    get => _styleName;
     set {
       StyleID = _worksheet.Workbook.Styles.GetStyleIdFromName(value);
       _styleName = value;
@@ -164,8 +162,8 @@
   /// Sets the style for the entire row using the style ID.
   /// </summary>
   public int StyleID {
-    get { return _worksheet._styles.GetValue(Row, 0); }
-    set { _worksheet._styles.SetValue(Row, 0, value); }
+    get => _worksheet._styles.GetValue(Row, 0);
+    set => _worksheet._styles.SetValue(Row, 0, value);
   }
 
   /// <summary>
@@ -237,14 +235,8 @@
   /// The Style applied to the whole row. Only effekt cells with no individual style set.
   /// Use ExcelRange object if you want to set specific styles.
   /// </summary>
-  public ExcelStyle Style {
-    get {
-      return _worksheet.Workbook.Styles.GetStyleObject(
-          StyleID,
-          _worksheet.PositionID,
-          Row + ":" + Row);
-    }
-  }
+  public ExcelStyle Style =>
+    _worksheet.Workbook.Styles.GetStyleObject(StyleID, _worksheet.PositionID, Row + ":" + Row);
 
   /// <summary>
   /// Adds a manual page break after the row.
@@ -264,8 +256,8 @@
   }
 
   public bool Merged {
-    get { return _worksheet.MergedCells[Row, 0] != null; }
-    set { _worksheet.MergedCells.Add(new(Row, 1, Row, ExcelPackage.MaxColumns), true); }
+    get => _worksheet.MergedCells[Row, 0] != null;
+    set => _worksheet.MergedCells.Add(new(Row, 1, Row, ExcelPackage.MaxColumns), true);
   }
 
   internal static ulong GetRowId(int sheetId, int row) {
@@ -274,8 +266,8 @@
 
   [Obsolete]
   ulong IRangeId.RangeID {
-    get { return RowID; }
-    set { Row = ((int)(value >> 29)); }
+    get => RowID;
+    set => Row = ((int)(value >> 29));
   }
 
   /// <summary>
diff --git a/EPPlus/ExcelStyleCollection.cs b/EPPlus/ExcelStyleCollection.cs
index 2e2d203..b544547 100644
--- a/EPPlus/ExcelStyleCollection.cs
+++ b/EPPlus/ExcelStyleCollection.cs
@@ -69,9 +69,7 @@
 
   public T this[int positionId] => _list[positionId];
 
-  public int Count {
-    get { return _list.Count; }
-  }
+  public int Count => _list.Count;
 
   //internal int Add(T item)
   //{
diff --git a/EPPlus/ExcelStyles.cs b/EPPlus/ExcelStyles.cs
index 8c786e0..9f1b283 100644
--- a/EPPlus/ExcelStyles.cs
+++ b/EPPlus/ExcelStyles.cs
@@ -750,14 +750,6 @@
     //throw(new Exception("Named style does not exist"));
   }
 
-  private int GetXmlNodeInt(XmlNode node) {
-    int i;
-    if (int.TryParse(GetXmlNode(node), out i)) {
-      return i;
-    }
-    return 0;
-  }
-
   private string GetXmlNode(XmlNode node) {
     if (node == null) {
       return "";
diff --git a/EPPlus/ExcelWorkbook.cs b/EPPlus/ExcelWorkbook.cs
index 3bc05dd..3331644 100644
--- a/EPPlus/ExcelWorkbook.cs
+++ b/EPPlus/ExcelWorkbook.cs
@@ -174,9 +174,8 @@
       foreach (XmlElement elem in nl) {
         string fullAddress = elem.InnerText;
 
-        int localSheetId;
         ExcelWorksheet nameWorksheet;
-        if (!int.TryParse(elem.GetAttribute("localSheetId"), out localSheetId)) {
+        if (!int.TryParse(elem.GetAttribute("localSheetId"), out var localSheetId)) {
           localSheetId = -1;
           nameWorksheet = null;
         } else {
@@ -191,8 +190,7 @@
           int end = fullAddress.IndexOf("]", start);
           if (start >= 0 && end >= 0) {
             string externalIndex = fullAddress.Substring(start + 1, end - start - 1);
-            int index;
-            if (int.TryParse(externalIndex, out index)) {
+            if (int.TryParse(externalIndex, out var index)) {
               if (index > 0 && index <= _externalReferences.Count) {
                 fullAddress =
                     fullAddress.Substring(0, start)
@@ -214,7 +212,6 @@
                     .AddressType
                     .ExternalAddress) //A value or a formula
         {
-          double value;
           range = new(this, nameWorksheet, elem.GetAttribute("name"), true);
           if (nameWorksheet == null) {
             namedRange = _names.Add(elem.GetAttribute("name"), range);
@@ -230,7 +227,7 @@
               fullAddress,
               NumberStyles.Any,
               CultureInfo.InvariantCulture,
-              out value)) {
+              out var value)) {
             namedRange.NameValue = value;
           } else {
             //if (addressType == ExcelAddressBase.AddressType.ExternalAddress || addressType == ExcelAddressBase.AddressType.ExternalName)
@@ -378,8 +375,8 @@
   private const string _codeModuleNamePath = "d:workbookPr/@codeName";
 
   internal string CodeModuleName {
-    get { return GetXmlNodeString(_codeModuleNamePath); }
-    set { SetXmlNodeString(_codeModuleNamePath, value); }
+    get => GetXmlNodeString(_codeModuleNamePath);
+    set => SetXmlNodeString(_codeModuleNamePath, value);
   }
 
   internal void CodeNameChange(string value) {
@@ -395,7 +392,7 @@
   /// This option was included in Microsoft Excel for Windows to make it compatible with Excel for the Macintosh, which defaults to January 2, 1904.
   /// </summary>
   public bool Date1904 {
-    get { return GetXmlNodeBool(_date1904Path, false); }
+    get => GetXmlNodeBool(_date1904Path, false);
     set {
       if (Date1904 != value) {
         // Like Excel when the option it's changed update it all cells with Date format
@@ -445,7 +442,6 @@
       StreamWriter stream = new StreamWriter(
           partWorkbook.GetStream(FileMode.Create, FileAccess.Write));
       _workbookXml.Save(stream);
-      //stream.Close();
     }
   }
 
@@ -502,7 +498,7 @@
       }
       return (_stylesXml);
     }
-    set { _stylesXml = value; }
+    set => _stylesXml = value;
   }
 
   /// <summary>
@@ -570,8 +566,8 @@
   /// <remarks>This property is always true for both new workbooks and loaded templates(on load). If this is not the wanted behavior set this property to false.</remarks>
   /// </summary>
   public bool FullCalcOnLoad {
-    get { return GetXmlNodeBool(_fullCalcOnLoadPath); }
-    set { SetXmlNodeBool(_fullCalcOnLoadPath, value); }
+    get => GetXmlNodeBool(_fullCalcOnLoadPath);
+    set => SetXmlNodeBool(_fullCalcOnLoadPath, value);
   }
 
   /// <summary>
@@ -762,9 +758,8 @@
           elem.InnerText = Convert
               .ToDouble(name.NameValue, CultureInfo.InvariantCulture)
               .ToString("R15", CultureInfo.InvariantCulture);
-        } else if (name.NameValue is DateTime) {
-          elem.InnerText =
-              ((DateTime)name.NameValue).ToOADate().ToString(CultureInfo.InvariantCulture);
+        } else if (name.NameValue is DateTime time) {
+          elem.InnerText = time.ToOADate().ToString(CultureInfo.InvariantCulture);
         } else {
           elem.InnerText = "\"" + name.NameValue + "\"";
         }
diff --git a/EPPlus/ExcelWorksheet.cs b/EPPlus/ExcelWorksheet.cs
index 85a6ccd..c561c33 100644
--- a/EPPlus/ExcelWorksheet.cs
+++ b/EPPlus/ExcelWorksheet.cs
@@ -697,7 +697,6 @@
     }
   }
 
-  private const string _tabColorPath = "d:sheetPr/d:tabColor/@rgb";
   private const string _codeModuleNamePath = "d:sheetPr/@codeName";
 
   internal string CodeModuleName {
@@ -785,8 +784,7 @@
     LoadColPageBreakes(xr);
     //...then the rest of the Xml is extracted and loaded into the WorksheetXml document.
     stream.Seek(0, SeekOrigin.Begin);
-    Encoding encoding;
-    xml = GetWorkSheetXml(stream, start, end, out encoding);
+    xml = GetWorkSheetXml(stream, start, end, out var encoding);
 
     //first char is invalid sometimes??
     if (xml[0] != '<') {
@@ -824,8 +822,7 @@
     while (xr.Read()) {
       if (xr.LocalName == "brk") {
         if (xr.NodeType == XmlNodeType.Element) {
-          int id;
-          if (int.TryParse(xr.GetAttribute("id"), out id)) {
+          if (int.TryParse(xr.GetAttribute("id"), out var id)) {
             Row(id).PageBreak = true;
           }
         }
@@ -842,8 +839,7 @@
     while (xr.Read()) {
       if (xr.LocalName == "brk") {
         if (xr.NodeType == XmlNodeType.Element) {
-          int id;
-          if (int.TryParse(xr.GetAttribute("id"), out id)) {
+          if (int.TryParse(xr.GetAttribute("id"), out var id)) {
             Column(id).PageBreak = true;
           }
         }
@@ -1014,9 +1010,8 @@
               xr.GetAttribute("hidden") != null && xr.GetAttribute("hidden") == "1" ? true : false;
           _values.SetValue(0, min, col);
 
-          int style;
           if (!(xr.GetAttribute("style") == null
-                      || !int.TryParse(xr.GetAttribute("style"), out style))) {
+                      || !int.TryParse(xr.GetAttribute("style"), out var style))) {
             _styles.SetValue(0, min, style);
           }
         }
@@ -1025,23 +1020,6 @@
   }
 
   /// <summary>
-  /// Read until the node is found. If not found the xmlreader is reseted.
-  /// </summary>
-  /// <param name="xr">The reader</param>
-  /// <param name="nodeText">Text to search for</param>
-  /// <param name="altNode">Alternative text to search for</param>
-  /// <returns></returns>
-  private static bool ReadXmlReaderUntil(XmlTextReader xr, string nodeText, string altNode) {
-    do {
-      if (xr.LocalName == nodeText || xr.LocalName == altNode) {
-        return true;
-      }
-    } while (xr.Read());
-    xr.Close();
-    return false;
-  }
-
-  /// <summary>
   /// Load Hyperlinks
   /// </summary>
   /// <param name="xr">The reader</param>
@@ -1051,16 +1029,12 @@
     }
     while (xr.Read()) {
       if (xr.LocalName == "hyperlink") {
-        int fromRow,
-            fromCol,
-            toRow,
-            toCol;
         ExcelCellBase.GetRowColFromAddress(
             xr.GetAttribute("ref"),
-            out fromRow,
-            out fromCol,
-            out toRow,
-            out toCol);
+            out var fromRow,
+            out var fromCol,
+            out int toRow,
+            out var toCol);
         ExcelHyperLink hl = null;
         if (xr.GetAttribute("id", ExcelPackage._schemaRelationships) != null) {
           var rId = xr.GetAttribute("id", ExcelPackage._schemaRelationships);
@@ -1429,8 +1403,7 @@
                   && nf
                       <= 47)) // Duration
       {
-        double res;
-        if (double.TryParse(v, NumberStyles.Any, CultureInfo.InvariantCulture, out res)) {
+        if (double.TryParse(v, NumberStyles.Any, CultureInfo.InvariantCulture, out var res)) {
           if (Workbook.Date1904) {
             res += ExcelWorkbook._date1904Offset;
           }
@@ -1451,8 +1424,7 @@
           || (nf
                   == 22)) // DateTime
       {
-        double res;
-        if (double.TryParse(v, NumberStyles.Any, CultureInfo.InvariantCulture, out res)) {
+        if (double.TryParse(v, NumberStyles.Any, CultureInfo.InvariantCulture, out var res)) {
           if (Workbook.Date1904) {
             res += ExcelWorkbook._date1904Offset;
           }
@@ -1469,8 +1441,7 @@
           _values.SetValue(row, col, v);
         }
       } else {
-        double d;
-        if (double.TryParse(v, NumberStyles.Any, CultureInfo.InvariantCulture, out d)) {
+        if (double.TryParse(v, NumberStyles.Any, CultureInfo.InvariantCulture, out var d)) {
           _values.SetValue(row, col, d);
         } else {
           // Cope with Google Sheets export of cells having a formula.
@@ -1727,12 +1698,15 @@
   /// <param name="selectSheet">Make the sheet active</param>
   public void Select(string address, bool selectSheet) {
     CheckSheetType();
-    int fromCol,
-        fromRow,
-        toCol,
+    int toCol,
         toRow;
     //Get rows and columns and validate as well
-    ExcelCellBase.GetRowColFromAddress(address, out fromRow, out fromCol, out toRow, out toCol);
+    ExcelCellBase.GetRowColFromAddress(
+        address,
+        out var fromRow,
+        out var fromCol,
+        out toRow,
+        out toCol);
 
     if (selectSheet) {
       View.TabSelected = true;
@@ -1937,8 +1911,8 @@
       var csec = new CellsStoreEnumerator<object>(_values, 0, 1, 0, ExcelPackage.MaxColumns);
       var lst = new List<ExcelColumn>();
       foreach (var col in csec) {
-        if (col is ExcelColumn) {
-          lst.Add((ExcelColumn)col);
+        if (col is ExcelColumn column) {
+          lst.Add(column);
         }
       }
 
@@ -2081,246 +2055,6 @@
     }
   }
 
-  private void FixSharedFormulasRows(int position, int rows) {
-    List<Formulas> added = new List<Formulas>();
-    List<Formulas> deleted = new List<Formulas>();
-
-    foreach (int id in _sharedFormulas.Keys) {
-      var f = _sharedFormulas[id];
-      int fromCol,
-          fromRow,
-          toCol,
-          toRow;
-
-      ExcelCellBase.GetRowColFromAddress(f.Address, out fromRow, out fromCol, out toRow, out toCol);
-      if (position >= fromRow
-          && position + (Math.Abs(rows))
-              <= toRow) //Insert/delete is whithin the share formula address
-      {
-        if (rows
-            > 0) //Insert
-        {
-          f.Address =
-              ExcelCellBase.GetAddress(fromRow, fromCol)
-                  + ":"
-                  + ExcelCellBase.GetAddress(position - 1, toCol);
-          if (toRow != fromRow) {
-            Formulas newF = new Formulas(SourceCodeTokenizer.Default);
-            newF.StartCol = f.StartCol;
-            newF.StartRow = position + rows;
-            newF.Address =
-                ExcelCellBase.GetAddress(position + rows, fromCol)
-                    + ":"
-                    + ExcelCellBase.GetAddress(toRow + rows, toCol);
-            newF.Formula = ExcelCellBase.TranslateFromR1C1(
-                ExcelCellBase.TranslateToR1C1(f.Formula, f.StartRow, f.StartCol),
-                position,
-                f.StartCol);
-            added.Add(newF);
-          }
-        } else {
-          if (fromRow - rows < toRow) {
-            f.Address = ExcelCellBase.GetAddress(fromRow, fromCol, toRow + rows, toCol);
-          } else {
-            f.Address =
-                ExcelCellBase.GetAddress(fromRow, fromCol)
-                    + ":"
-                    + ExcelCellBase.GetAddress(toRow + rows, toCol);
-          }
-        }
-      } else if (position <= toRow) {
-        if (rows
-            > 0) //Insert before shift down
-        {
-          f.StartRow += rows;
-          //f.Formula = ExcelCell.UpdateFormulaReferences(f.Formula, rows, 0, position, 0); //Recalc the cells positions
-          f.Address =
-              ExcelCellBase.GetAddress(fromRow + rows, fromCol)
-                  + ":"
-                  + ExcelCellBase.GetAddress(toRow + rows, toCol);
-        } else {
-          //Cells[f.Address].SetSharedFormulaID(int.MinValue);
-          if (position <= fromRow
-              && position + Math.Abs(rows)
-                  > toRow) //Delete the formula
-          {
-            deleted.Add(f);
-          } else {
-            toRow = toRow + rows < position - 1 ? position - 1 : toRow + rows;
-            if (position <= fromRow) {
-              fromRow = fromRow + rows < position ? position : fromRow + rows;
-            }
-
-            f.Address = ExcelCellBase.GetAddress(fromRow, fromCol, toRow, toCol);
-            Cells[f.Address].SetSharedFormulaId(f.Index);
-            //f.StartRow = fromRow;
-
-            //f.Formula = ExcelCell.UpdateFormulaReferences(f.Formula, rows, 0, position, 0);
-          }
-        }
-      }
-    }
-
-    AddFormulas(added, position, rows);
-
-    //Remove formulas
-    foreach (Formulas f in deleted) {
-      _sharedFormulas.Remove(f.Index);
-    }
-
-    //Fix Formulas
-    added = new();
-    foreach (int id in _sharedFormulas.Keys) {
-      var f = _sharedFormulas[id];
-      UpdateSharedFormulaRow(ref f, position, rows, ref added);
-    }
-    AddFormulas(added, position, rows);
-  }
-
-  private void AddFormulas(List<Formulas> added, int position, int rows) {
-    //Add new formulas
-    foreach (Formulas f in added) {
-      f.Index = GetMaxShareFunctionIndex(false);
-      _sharedFormulas.Add(f.Index, f);
-      Cells[f.Address].SetSharedFormulaId(f.Index);
-    }
-  }
-
-  private void UpdateSharedFormulaRow(
-      ref Formulas formula,
-      int startRow,
-      int rows,
-      ref List<Formulas> newFormulas) {
-    int fromRow,
-        fromCol,
-        toRow,
-        toCol;
-    int newFormulasCount = newFormulas.Count;
-    ExcelCellBase.GetRowColFromAddress(
-        formula.Address,
-        out fromRow,
-        out fromCol,
-        out toRow,
-        out toCol);
-    //int refSplits = Regex.Split(formula.Formula, "#REF!").GetUpperBound(0);
-    string formualR1C1;
-    if (rows > 0 || fromRow <= startRow) {
-      formualR1C1 = ExcelCellBase.TranslateToR1C1(
-          formula.Formula,
-          formula.StartRow,
-          formula.StartCol);
-      formula.Formula = ExcelCellBase.TranslateFromR1C1(formualR1C1, fromRow, formula.StartCol);
-    } else {
-      formualR1C1 = ExcelCellBase.TranslateToR1C1(
-          formula.Formula,
-          formula.StartRow - rows,
-          formula.StartCol);
-      formula.Formula = ExcelCellBase.TranslateFromR1C1(
-          formualR1C1,
-          formula.StartRow,
-          formula.StartCol);
-    }
-    //bool isRef = false;
-    //Formulas restFormula=formula;
-    string prevFormualR1C1 = formualR1C1;
-    for (int row = fromRow; row <= toRow; row++) {
-      for (int col = fromCol; col <= toCol; col++) {
-        string newFormula;
-        string currentFormulaR1C1;
-        if (rows > 0 || row < startRow) {
-          newFormula = ExcelCellBase.UpdateFormulaReferences(
-              ExcelCellBase.TranslateFromR1C1(formualR1C1, row, col),
-              rows,
-              0,
-              startRow,
-              0);
-          currentFormulaR1C1 = ExcelCellBase.TranslateToR1C1(newFormula, row, col);
-        } else {
-          newFormula = ExcelCellBase.UpdateFormulaReferences(
-              ExcelCellBase.TranslateFromR1C1(formualR1C1, row - rows, col),
-              rows,
-              0,
-              startRow,
-              0);
-          currentFormulaR1C1 = ExcelCellBase.TranslateToR1C1(newFormula, row, col);
-        }
-        if (currentFormulaR1C1
-            != prevFormualR1C1) //newFormula.Contains("#REF!"))
-        {
-          //if (refSplits == 0 || Regex.Split(newFormula, "#REF!").GetUpperBound(0) != refSplits)
-          //{
-          //isRef = true;
-          if (row == fromRow && col == fromCol) {
-            formula.Formula = newFormula;
-          } else {
-            if (newFormulas.Count == newFormulasCount) {
-              formula.Address = ExcelCellBase.GetAddress(
-                  formula.StartRow,
-                  formula.StartCol,
-                  row - 1,
-                  col);
-            } else {
-              newFormulas[newFormulas.Count - 1].Address = ExcelCellBase.GetAddress(
-                  newFormulas[newFormulas.Count - 1].StartRow,
-                  newFormulas[newFormulas.Count - 1].StartCol,
-                  row - 1,
-                  col);
-            }
-            var refFormula = new Formulas(SourceCodeTokenizer.Default);
-            refFormula.Formula = newFormula;
-            refFormula.StartRow = row;
-            refFormula.StartCol = col;
-            newFormulas.Add(refFormula);
-
-            //restFormula = null;
-            prevFormualR1C1 = currentFormulaR1C1;
-          }
-        }
-        //    }
-        //    else
-        //    {
-        //        isRef = false;
-        //    }
-        //}
-        //else
-        //{
-        //    isRef = false;
-        //}
-        //if (restFormula==null)
-        //{
-        //if (newFormulas.Count == newFormulasCount)
-        //{
-        //    formula.Address = ExcelCellBase.GetAddress(formula.StartRow, formula.StartCol, row - 1, col);
-        //}
-        //else
-        //{
-        //                            newFormulas[newFormulas.Count - 1].Address = ExcelCellBase.GetAddress(newFormulas[newFormulas.Count - 1].StartRow, newFormulas[0].StartCol, row - 1, col);
-        //}
-
-        //restFormula = new Formulas();
-        //restFormula.Formula = newFormula;
-        //restFormula.StartRow = row;
-        //restFormula.StartCol = col;
-        //newFormulas.Add(restFormula);
-        //}
-      }
-    }
-    if (rows < 0 && formula.StartRow > startRow) {
-      if (formula.StartRow + rows < startRow) {
-        formula.StartRow = startRow;
-      } else {
-        formula.StartRow += rows;
-      }
-    }
-    if (newFormulas.Count > newFormulasCount) {
-      newFormulas[newFormulas.Count - 1].Address = ExcelCellBase.GetAddress(
-          newFormulas[newFormulas.Count - 1].StartRow,
-          newFormulas[newFormulas.Count - 1].StartCol,
-          toRow,
-          toCol);
-    }
-  }
-
   /// <summary>
   /// Delete the specified row from the worksheet.
   /// </summary>
@@ -2409,11 +2143,10 @@
           0,
           ExcelPackage.MaxColumns);
       foreach (var column in csec) {
-        if (column is ExcelColumn) {
-          var c = (ExcelColumn)column;
-          if (c._columnMin >= columnFrom) {
-            c._columnMin -= columns;
-            c._columnMax -= columns;
+        if (column is ExcelColumn excelColumn) {
+          if (excelColumn._columnMin >= columnFrom) {
+            excelColumn._columnMin -= columns;
+            excelColumn._columnMax -= columns;
           }
         }
       }
@@ -2480,19 +2213,11 @@
         delSf.Add(sf.Index);
       } else {
         sf.Address = a.Address;
-        //sf.Formula = ExcelCellBase.UpdateFormulaReferences(sf.Formula, 0, -columns, 0, columnFrom);
         if (sf.StartCol > columnFrom) {
           var c = Math.Min(sf.StartCol - columnFrom, columns);
           sf.Formula = ExcelCellBase.UpdateFormulaReferences(sf.Formula, 0, -c, 0, 1);
           sf.StartCol -= c;
         }
-
-        //sf.Address = a.Address;
-        //sf.Formula = ExcelCellBase.UpdateFormulaReferences(sf.Formula, 0,-columns,0, columnFrom);
-        //if (sf.StartCol >= columnFrom)
-        //{
-        //    sf.StartCol -= sf.StartCol;
-        //}
       }
     }
     foreach (var ix in delSf) {
@@ -2535,10 +2260,8 @@
   /// <returns>The value</returns>
   public object GetValue(int row, int column) {
     CheckSheetType();
-    //ulong cellID = ExcelCellBase.GetCellID(SheetID, Row, Column);
     var v = _values.GetValue(row, column);
     if (v != null) {
-      //var cell = ((ExcelCell)_cells[cellID]);
       if (_flags.GetFlagValue(row, column, CellFlags.RichText)) {
         return Cells[row, column].RichText.Text;
       }
@@ -2587,8 +2310,7 @@
         return ((T)(object)(new DateTime(((TimeSpan)v).Ticks)));
       }
       if (fromType == typeof(string)) {
-        DateTime dt;
-        if (DateTime.TryParse(v.ToString(), out dt)) {
+        if (DateTime.TryParse(v.ToString(), out var dt)) {
           return (T)(object)(dt);
         }
         return default(T);
@@ -2605,8 +2327,7 @@
         return ((T)(object)(new TimeSpan(((DateTime)v).Ticks)));
       }
       if (fromType == typeof(string)) {
-        TimeSpan ts;
-        if (TimeSpan.TryParse(v.ToString(), out ts)) {
+        if (TimeSpan.TryParse(v.ToString(), out var ts)) {
           return (T)(object)(ts);
         }
         return default(T);
@@ -2666,9 +2387,7 @@
   /// <param name="value">The value</param>
   public void SetValue(string address, object value) {
     CheckSheetType();
-    int row,
-        col;
-    ExcelCellBase.GetRowCol(address, out row, out col, true);
+    ExcelCellBase.GetRowCol(address, out var row, out var col, true);
     if (row < 1 || col < 1 || row > ExcelPackage.MaxRows && col > ExcelPackage.MaxColumns) {
       throw new ArgumentOutOfRangeException("Address is invalid or out of range");
     }
@@ -2739,18 +2458,13 @@
       GetBlockPos(xml, "cols", ref colStart, ref colEnd);
 
       streamWriter.Write(xml.Substring(0, colStart));
-      var colBreaks = new List<int>();
-      //if (_columns.Count > 0)
-      //{
       UpdateColumnData(streamWriter);
-      //}
 
       int cellStart = colEnd,
           cellEnd = colEnd;
       GetBlockPos(xml, "sheetData", ref cellStart, ref cellEnd);
 
       streamWriter.Write(xml.Substring(colEnd, cellStart - colEnd));
-      var rowBreaks = new List<int>();
       UpdateRowCellData(streamWriter);
 
       int mergeStart = cellEnd,
@@ -2768,28 +2482,19 @@
           hyperEnd = mergeEnd;
       GetBlockPos(xml, "hyperlinks", ref hyperStart, ref hyperEnd);
       streamWriter.Write(xml.Substring(mergeEnd, hyperStart - mergeEnd));
-      //if (_hyperLinkCells.Count > 0)
-      //{
       UpdateHyperLinks(streamWriter);
-      // }
 
       int rowBreakStart = hyperEnd,
           rowBreakEnd = hyperEnd;
       GetBlockPos(xml, "rowBreaks", ref rowBreakStart, ref rowBreakEnd);
       streamWriter.Write(xml.Substring(hyperEnd, rowBreakStart - hyperEnd));
-      //if (rowBreaks.Count > 0)
-      //{
       UpdateRowBreaks(streamWriter);
-      //}
 
       int colBreakStart = rowBreakEnd,
           colBreakEnd = rowBreakEnd;
       GetBlockPos(xml, "colBreaks", ref colBreakStart, ref colBreakEnd);
       streamWriter.Write(xml.Substring(rowBreakEnd, colBreakStart - rowBreakEnd));
-      //if (colBreaks.Count > 0)
-      //{
       UpdateColBreaks(streamWriter);
-      //}
       streamWriter.Write(xml.Substring(colBreakEnd, xml.Length - colBreakEnd));
     }
   }
@@ -3114,7 +2819,6 @@
     StringBuilder breaks = new StringBuilder();
     int count = 0;
     var cse = new CellsStoreEnumerator<object>(_values, 0, 0, 0, ExcelPackage.MaxColumns);
-    //foreach (ExcelColumn col in _columns)
     while (cse.Next()) {
       var col = cse.Value as ExcelColumn;
       if (col != null && col.PageBreak) {
@@ -3148,21 +2852,7 @@
   /// Inserts the cols collection into the XML document
   /// </summary>
   private void UpdateColumnData(StreamWriter sw) {
-    //ExcelColumn prevCol = null;   //commented out 11/1-12 JK
-    //foreach (ExcelColumn col in _columns)
-    //{
-    //    if (prevCol != null)
-    //    {
-    //        if(prevCol.ColumnMax != col.ColumnMin-1)
-    //        {
-    //            prevCol._columnMax=col.ColumnMin-1;
-    //        }
-    //    }
-    //    prevCol = col;
-    //}
     var cse = new CellsStoreEnumerator<object>(_values, 0, 1, 0, ExcelPackage.MaxColumns);
-    //sw.Write("<cols>");
-    //foreach (ExcelColumn col in _columns)
     bool first = true;
     while (cse.Next()) {
       if (first) {
@@ -3203,11 +2893,6 @@
         sw.Write(" style=\"{0}\"", styleId);
       }
       sw.Write(" />");
-
-      //if (col.PageBreak)
-      //{
-      //    colBreaks.Add(col.ColumnMin);
-      //}
     }
     if (!first) {
       sw.Write("</cols>");
@@ -3258,8 +2943,7 @@
         }
         object v = cse.Value;
         object formula = _formulas.GetValue(cse.Row, cse.Column);
-        if (formula is int) {
-          int sfId = (int)formula;
+        if (formula is int sfId) {
           var f = _sharedFormulas[sfId];
           if (f.Address.IndexOf(':') > 0) {
             if (f.StartCol == cse.Column && f.StartRow == cse.Row) {
@@ -3366,14 +3050,8 @@
             }
           }
         }
-        ////Update hyperlinks.
-        //if (cell.Hyperlink != null)
-        //{
-        //    _hyperLinkCells.Add(cell.CellID);
-        //}
       } else //ExcelRow
       {
-        //int newRow=((ExcelRow)cse.Value).Row;
         WriteRow(cache, cellXfs, row, cse.Row);
         row = cse.Row;
       }
@@ -3392,8 +3070,6 @@
   }
 
   private object GetFormulaValue(object v) {
-    //if (_workbook._isCalculated)
-    //{
     if (v != null && v.ToString() != "") {
       return "<v>" + SecurityElement.Escape(GetValueForXml(v)) + "</v>"; //Fixes issue 15071
     }
@@ -3404,7 +3080,7 @@
     if (v is bool) {
       return " t=\"b\"";
     }
-    if ((v is double && double.IsInfinity((double)v)) || v is ExcelErrorValue) {
+    if ((v is double d && double.IsInfinity(d)) || v is ExcelErrorValue) {
       return " t=\"e\"";
     }
     if (allowStr
@@ -3422,21 +3098,21 @@
   private string GetValueForXml(object v) {
     string s;
     try {
-      if (v is DateTime) {
-        double sdv = ((DateTime)v).ToOADate();
+      if (v is DateTime time) {
+        double sdv = time.ToOADate();
 
         if (Workbook.Date1904) {
           sdv -= ExcelWorkbook._date1904Offset;
         }
 
         s = sdv.ToString(CultureInfo.InvariantCulture);
-      } else if (v is TimeSpan) {
-        s = new DateTime(((TimeSpan)v).Ticks).ToOADate().ToString(CultureInfo.InvariantCulture);
+      } else if (v is TimeSpan span) {
+        s = new DateTime(span.Ticks).ToOADate().ToString(CultureInfo.InvariantCulture);
         ;
       } else if (v.GetType().IsPrimitive || v is double || v is decimal) {
-        if (v is double && double.IsNaN((double)v)) {
+        if (v is double d && double.IsNaN(d)) {
           s = "";
-        } else if (v is double && double.IsInfinity((double)v)) {
+        } else if (v is double d1 && double.IsInfinity(d1)) {
           s = "#NUM!";
         } else {
           s = Convert
@@ -3494,48 +3170,6 @@
     cache.Append(">");
   }
 
-  private void WriteRow(
-      StreamWriter sw,
-      ExcelStyleCollection<ExcelXfs> cellXfs,
-      int prevRow,
-      int row) {
-    if (prevRow != -1) {
-      sw.Write("</row>");
-    }
-    //ulong rowID = ExcelRow.GetRowID(SheetID, row);
-    sw.Write("<row r=\"{0}\" ", row);
-    RowInternal currRow = _values.GetValue(row, 0) as RowInternal;
-    if (currRow != null) {
-      if (currRow.Hidden) {
-        sw.Write("ht=\"0\" hidden=\"1\" ");
-      } else if (currRow.Height != DefaultRowHeight) {
-        sw.Write(string.Format(CultureInfo.InvariantCulture, "ht=\"{0}\" ", currRow.Height));
-        if (currRow.CustomHeight) {
-          sw.Write("customHeight=\"1\" ");
-        }
-      }
-
-      if (currRow.OutlineLevel > 0) {
-        sw.Write("outlineLevel =\"{0}\" ", currRow.OutlineLevel);
-        if (currRow.Collapsed) {
-          if (currRow.Hidden) {
-            sw.Write(" collapsed=\"1\" ");
-          } else {
-            sw.Write(" collapsed=\"1\" hidden=\"1\" "); //Always hidden
-          }
-        }
-      }
-      if (currRow.Phonetic) {
-        sw.Write("ph=\"1\" ");
-      }
-    }
-    var s = _styles.GetValue(row, 0);
-    if (s > 0) {
-      sw.Write("s=\"{0}\" customFormat=\"1\"", cellXfs[s].newID);
-    }
-    sw.Write(">");
-  }
-
   /// <summary>
   /// Update xml with hyperlinks
   /// </summary>
@@ -3553,26 +3187,24 @@
       //int row, col;
       var uri = _hyperLinks.GetValue(cse.Row, cse.Column);
       //ExcelCell cell = _cells[cellId] as ExcelCell;
-      if (uri is ExcelHyperLink
-          && !string.IsNullOrEmpty((uri as ExcelHyperLink).ReferenceAddress)) {
-        ExcelHyperLink hl = uri as ExcelHyperLink;
+      if (uri is ExcelHyperLink link && !string.IsNullOrEmpty(link.ReferenceAddress)) {
         sw.Write(
             "<hyperlink ref=\"{0}\" location=\"{1}\" {2}{3}/>",
-            Cells[cse.Row, cse.Column, cse.Row + hl.RowSpann, cse.Column + hl.ColSpann].Address,
+            Cells[cse.Row, cse.Column, cse.Row + link.RowSpann, cse.Column + link.ColSpann].Address,
             ExcelCellBase.GetFullAddress(
                 SecurityElement.Escape(Name),
-                SecurityElement.Escape(hl.ReferenceAddress)),
-            string.IsNullOrEmpty(hl.Display)
+                SecurityElement.Escape(link.ReferenceAddress)),
+            string.IsNullOrEmpty(link.Display)
                 ? ""
-                : "display=\"" + SecurityElement.Escape(hl.Display) + "\" ",
-            string.IsNullOrEmpty(hl.ToolTip)
+                : "display=\"" + SecurityElement.Escape(link.Display) + "\" ",
+            string.IsNullOrEmpty(link.ToolTip)
                 ? ""
-                : "tooltip=\"" + SecurityElement.Escape(hl.ToolTip) + "\" ");
+                : "tooltip=\"" + SecurityElement.Escape(link.ToolTip) + "\" ");
       } else if (uri != null) {
         string id;
         Uri hyp;
-        if (uri is ExcelHyperLink) {
-          hyp = ((ExcelHyperLink)uri).OriginalUri;
+        if (uri is ExcelHyperLink hyperLink) {
+          hyp = hyperLink.OriginalUri;
         } else {
           hyp = uri;
         }
@@ -3583,8 +3215,7 @@
               hyp,
               TargetMode.External,
               ExcelPackage._schemaHyperlink);
-          if (uri is ExcelHyperLink) {
-            ExcelHyperLink hl = uri as ExcelHyperLink;
+          if (uri is ExcelHyperLink hl) {
             sw.Write(
                 "<hyperlink ref=\"{0}\" {2}{3}r:id=\"{1}\" />",
                 ExcelCellBase.GetAddress(cse.Row, cse.Column),
@@ -3637,11 +3268,7 @@
   public ExcelAddressBase Dimension {
     get {
       CheckSheetType();
-      int fromRow,
-          fromCol,
-          toRow,
-          toCol;
-      if (_values.GetDimension(out fromRow, out fromCol, out toRow, out toCol)) {
+      if (_values.GetDimension(out var fromRow, out var fromCol, out var toRow, out var toCol)) {
         var addr = new ExcelAddressBase(fromRow, fromCol, toRow, toCol);
         addr._ws = Name;
         return addr;
@@ -3800,9 +3427,9 @@
     var cse = new CellsStoreEnumerator<object>(_values);
     var offset = Workbook.Date1904 ? -ExcelWorkbook._date1904Offset : ExcelWorkbook._date1904Offset;
     while (cse.MoveNext()) {
-      if (cse.Value is DateTime) {
+      if (cse.Value is DateTime time) {
         try {
-          double sdv = ((DateTime)cse.Value).ToOADate();
+          double sdv = time.ToOADate();
           sdv += offset;
 
           cse.Value = DateTime.FromOADate(sdv);
@@ -3813,8 +3440,8 @@
 
   public string GetFormula(int row, int col) {
     var v = _formulas.GetValue(row, col);
-    if (v is int) {
-      return _sharedFormulas[(int)v].GetFormula(row, col, Name);
+    if (v is int i) {
+      return _sharedFormulas[i].GetFormula(row, col, Name);
     }
     if (v != null) {
       return v.ToString();
@@ -3824,8 +3451,8 @@
 
   public string GetFormulaR1C1(int row, int col) {
     var v = _formulas.GetValue(row, col);
-    if (v is int) {
-      var sf = _sharedFormulas[(int)v];
+    if (v is int i) {
+      var sf = _sharedFormulas[i];
       return ExcelCellBase.TranslateToR1C1(
           Formulas.RemoveDummyFunction(sf.Formula),
           sf.StartRow,
@@ -3839,8 +3466,8 @@
 
   public string GetFormulaR1C1_V1(int row, int col) {
     var v = _formulas.GetValue(row, col);
-    if (v is int) {
-      var sf = _sharedFormulas[(int)v];
+    if (v is int i) {
+      var sf = _sharedFormulas[i];
       return ExcelCellBase.TranslateToR1C1_V1(
           Formulas.RemoveDummyFunction(sf.Formula),
           sf.StartRow,
@@ -3857,8 +3484,8 @@
 
   public string GetArrayFormulaAddress(int row, int col) {
     var v = _formulas.GetValue(row, col);
-    if ((v is int) && (_sharedFormulas[(int)v].IsArray)) {
-      return _sharedFormulas[(int)v].Address;
+    if ((v is int i) && (_sharedFormulas[i].IsArray)) {
+      return _sharedFormulas[i].Address;
     }
     return "";
   }
diff --git a/EPPlus/ExcelWorksheetView.cs b/EPPlus/ExcelWorksheetView.cs
index 03303b8..bd132e5 100644
--- a/EPPlus/ExcelWorksheetView.cs
+++ b/EPPlus/ExcelWorksheetView.cs
@@ -66,14 +66,17 @@
         return address;
       }
       set {
-        int fromCol,
-            fromRow,
-            toCol,
+        int toCol,
             toRow;
         if (_selectionNode == null) {
           CreateSelectionElement();
         }
-        ExcelCellBase.GetRowColFromAddress(value, out fromRow, out fromCol, out toRow, out toCol);
+        ExcelCellBase.GetRowColFromAddress(
+            value,
+            out var fromRow,
+            out var fromCol,
+            out toRow,
+            out toCol);
         SetXmlNodeString(_activeCellPath, value);
         if (((XmlElement)TopNode).GetAttribute("sqref") == "") {
           SelectedRange = ExcelCellBase.GetAddress(fromRow, fromCol);
@@ -102,14 +105,17 @@
         return address;
       }
       set {
-        int fromCol,
-            fromRow,
-            toCol,
+        int toCol,
             toRow;
         if (_selectionNode == null) {
           CreateSelectionElement();
         }
-        ExcelCellBase.GetRowColFromAddress(value, out fromRow, out fromCol, out toRow, out toCol);
+        ExcelCellBase.GetRowColFromAddress(
+            value,
+            out var fromRow,
+            out var fromCol,
+            out toRow,
+            out toCol);
         SetXmlNodeString(_selectionRangePath, value);
         if (((XmlElement)TopNode).GetAttribute("activeCell") == "") {
           ActiveCell = ExcelCellBase.GetAddress(fromRow, fromCol);
@@ -152,44 +158,27 @@
   /// </summary>
   protected internal XmlElement SheetViewElement => (XmlElement)TopNode;
 
-  private XmlElement _selectionNode;
-
-  private XmlElement SelectionNode {
-    get {
-      _selectionNode =
-          SheetViewElement.SelectSingleNode("//d:selection", _worksheet.NameSpaceManager)
-              as XmlElement;
-      if (_selectionNode == null) {
-        _selectionNode = _worksheet.WorksheetXml.CreateElement(
-            "selection",
-            ExcelPackage._schemaMain);
-        SheetViewElement.AppendChild(_selectionNode);
-      }
-      return _selectionNode;
-    }
-  }
-
   /// <summary>
   /// The active cell.
   /// </summary>
   public string ActiveCell {
-    get { return Panes[Panes.GetUpperBound(0)].ActiveCell; }
-    set { Panes[Panes.GetUpperBound(0)].ActiveCell = value; }
+    get => Panes[Panes.GetUpperBound(0)].ActiveCell;
+    set => Panes[Panes.GetUpperBound(0)].ActiveCell = value;
   }
 
   /// <summary>
   /// Selected Cells in the worksheet.Used in combination with ActiveCell
   /// </summary>
   public string SelectedRange {
-    get { return Panes[Panes.GetUpperBound(0)].SelectedRange; }
-    set { Panes[Panes.GetUpperBound(0)].SelectedRange = value; }
+    get => Panes[Panes.GetUpperBound(0)].SelectedRange;
+    set => Panes[Panes.GetUpperBound(0)].SelectedRange = value;
   }
 
   /// <summary>
   /// Indicates if the worksheet is selected within the workbook
   /// </summary>
   public bool TabSelected {
-    get { return GetXmlNodeBool("@tabSelected"); }
+    get => GetXmlNodeBool("@tabSelected");
     set {
       if (value) {
         //    // ensure no other worksheet has its tabSelected attribute set to 1
@@ -215,7 +204,7 @@
   /// Sets the view mode of the worksheet to pagelayout
   /// </summary>
   public bool PageLayoutView {
-    get { return GetXmlNodeString("@view") == "pageLayout"; }
+    get => GetXmlNodeString("@view") == "pageLayout";
     set {
       if (value) {
         SetXmlNodeString("@view", "pageLayout");
@@ -229,7 +218,7 @@
   /// Sets the view mode of the worksheet to pagebreak
   /// </summary>
   public bool PageBreakView {
-    get { return GetXmlNodeString("@view") == "pageBreakPreview"; }
+    get => GetXmlNodeString("@view") == "pageBreakPreview";
     set {
       if (value) {
         SetXmlNodeString("@view", "pageBreakPreview");
@@ -243,23 +232,23 @@
   /// Show gridlines in the worksheet
   /// </summary>
   public bool ShowGridLines {
-    get { return GetXmlNodeBool("@showGridLines"); }
-    set { SetXmlNodeString("@showGridLines", value ? "1" : "0"); }
+    get => GetXmlNodeBool("@showGridLines");
+    set => SetXmlNodeString("@showGridLines", value ? "1" : "0");
   }
 
   /// <summary>
   /// Show the Column/Row headers (containg column letters and row numbers)
   /// </summary>
   public bool ShowHeaders {
-    get { return GetXmlNodeBool("@showRowColHeaders"); }
-    set { SetXmlNodeString("@showRowColHeaders", value ? "1" : "0"); }
+    get => GetXmlNodeBool("@showRowColHeaders");
+    set => SetXmlNodeString("@showRowColHeaders", value ? "1" : "0");
   }
 
   /// <summary>
   /// Window zoom magnification for current view representing percent values.
   /// </summary>
   public int ZoomScale {
-    get { return GetXmlNodeInt("@zoomScale"); }
+    get => GetXmlNodeInt("@zoomScale");
     set {
       if (value < 10 || value > 400) {
         throw new ArgumentOutOfRangeException("Zoome scale out of range (10-400)");
@@ -272,13 +261,13 @@
   /// Flag indicating whether the sheet is in 'right to left' display mode. When in this mode,Column A is on the far right, Column B ;is one column left of Column A, and so on. Also,information in cells is displayed in the Right to Left format.
   /// </summary>
   public bool RightToLeft {
-    get { return GetXmlNodeBool("@rightToLeft"); }
-    set { SetXmlNodeString("@rightToLeft", value ? "1" : "0"); }
+    get => GetXmlNodeBool("@rightToLeft");
+    set => SetXmlNodeString("@rightToLeft", value ? "1" : "0");
   }
 
   internal bool WindowProtection {
-    get { return GetXmlNodeBool("@windowProtection", false); }
-    set { SetXmlNodeBool("@windowProtection", value, false); }
+    get => GetXmlNodeBool("@windowProtection", false);
+    set => SetXmlNodeBool("@windowProtection", value, false);
   }
 
   /// <summary>
diff --git a/EPPlus/ExcelWorksheets.cs b/EPPlus/ExcelWorksheets.cs
index dd56dab..1ed69a2 100644
--- a/EPPlus/ExcelWorksheets.cs
+++ b/EPPlus/ExcelWorksheets.cs
@@ -338,9 +338,7 @@
   /// </summary>
   /// <param name="name">The name of the worksheet</param>
   /// <returns></returns>
-  public ExcelWorksheet this[string name] {
-    get { return GetByName(name); }
-  }
+  public ExcelWorksheet this[string name] => GetByName(name);
 
   internal ExcelWorksheet GetBySheetId(int localSheetId) {
     foreach (ExcelWorksheet ws in this) {
diff --git a/EPPlus/FormulaParsing/CalculateExtentions.cs b/EPPlus/FormulaParsing/CalculateExtentions.cs
index 9cb1c28..8d8792b 100644
--- a/EPPlus/FormulaParsing/CalculateExtentions.cs
+++ b/EPPlus/FormulaParsing/CalculateExtentions.cs
@@ -75,36 +75,6 @@
     CalcChain(worksheet.Workbook, parser, dc);
   }
 
-  // I added this method in December 2019 to analyze why formula calculation was taking
-  // so long during a 'Regenerate' of a Microsoft Excel table.
-  private static void DisplayCalcChain(ExcelWorksheet worksheet, DependencyChain dc) {
-    // Open Output file
-    string outputFolderName = @"C:\\EPPlus";
-    Directory.CreateDirectory(outputFolderName);
-    DateTime invocationDateTime = DateTime.Now;
-    string outputFileName = Path.Combine(
-        outputFolderName,
-        $"CalcChain_{worksheet.Name}_{invocationDateTime.ToString("yyyyMMdd_HHmmss_fff")}.txt");
-    FileStream fileStream = new FileStream(outputFileName, FileMode.CreateNew);
-    StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8, 65536);
-
-    // Display CalcChain
-    foreach (int index in dc.CalcOrder) {
-      FormulaCell formulaCell = dc.list[index];
-      string calcChainValue = "";
-      calcChainValue += $"Index {index}, ";
-      calcChainValue += $"Worksheet '{formulaCell.ws.Name}', ";
-      calcChainValue += $"Row {formulaCell.Row}, ";
-      calcChainValue += $"Col {formulaCell.Column}, ";
-      calcChainValue += $" Formula '{formulaCell.Formula}'";
-      streamWriter.WriteLine(calcChainValue);
-    }
-
-    // Close Output file
-    streamWriter.Flush();
-    streamWriter.Close();
-  }
-
   public static void Calculate(this ExcelRangeBase range) {
     Calculate(range, new());
   }
diff --git a/EPPlus/FormulaParsing/DependencyChain/DependenyChainFactory.cs b/EPPlus/FormulaParsing/DependencyChain/DependenyChainFactory.cs
index 009a8e5..f198123 100644
--- a/EPPlus/FormulaParsing/DependencyChain/DependenyChainFactory.cs
+++ b/EPPlus/FormulaParsing/DependencyChain/DependenyChainFactory.cs
@@ -101,16 +101,16 @@
       ExcelNamedRange name,
       ExcelCalculationOption options) {
     var ws = name.Worksheet;
-    var id = ExcelCellBase.GetCellId(ws == null ? 0 : ws.SheetID, name.Index, 0);
+    var id = ExcelCellBase.GetCellId(ws?.SheetID ?? 0, name.Index, 0);
     if (!depChain.index.ContainsKey(id)) {
       var f = new FormulaCell {
-        SheetID = ws == null ? 0 : ws.SheetID,
+        SheetID = ws?.SheetID ?? 0,
         Row = name.Index,
         Column = 0,
         Formula = name.NameFormula,
       };
       if (!string.IsNullOrEmpty(f.Formula)) {
-        f.Tokens = lexer.Tokenize(f.Formula, (ws == null ? null : ws.Name)).ToList();
+        f.Tokens = lexer.Tokenize(f.Formula, ws?.Name).ToList();
         if (ws == null) {
           name._workbook._formulaTokens.SetValue(name.Index, 0, f.Tokens);
         } else {
@@ -164,8 +164,8 @@
           Row = fs.Row,
           Column = fs.Column,
         };
-        if (fs.Value is int) {
-          f.Formula = ws._sharedFormulas[(int)fs.Value].GetFormula(fs.Row, fs.Column, ws.Name);
+        if (fs.Value is int value) {
+          f.Formula = ws._sharedFormulas[value].GetFormula(fs.Row, fs.Column, ws.Name);
         } else {
           f.Formula = fs.Value.ToString();
         }
@@ -237,15 +237,13 @@
           }
         }
       } else if (t.TokenType == TokenType.NameValue) {
-        string adrWb,
-            adrWs,
-            adrName;
+        string adrWb;
         ExcelNamedRange name;
         ExcelAddressBase.SplitAddress(
             t.Value,
             out adrWb,
-            out adrWs,
-            out adrName,
+            out var adrWs,
+            out var adrName,
             f.ws == null ? "" : f.ws.Name);
         if (!string.IsNullOrEmpty(adrWs)) {
           if (f.ws == null) {
diff --git a/EPPlus/FormulaParsing/EpplusExcelDataProvider.cs b/EPPlus/FormulaParsing/EpplusExcelDataProvider.cs
index 0783dcc..8dfe6d1 100644
--- a/EPPlus/FormulaParsing/EpplusExcelDataProvider.cs
+++ b/EPPlus/FormulaParsing/EpplusExcelDataProvider.cs
@@ -68,15 +68,11 @@
 
     public ICellInfo Current => _cell;
 
-    public ExcelWorksheet Worksheet {
-      get { return _ws; }
-    }
+    public ExcelWorksheet Worksheet => _ws;
 
     public void Dispose() {}
 
-    object IEnumerator.Current {
-      get { return this; }
-    }
+    object IEnumerator.Current => this;
 
     public bool MoveNext() {
       _cellCount++;
@@ -101,9 +97,7 @@
       return this;
     }
 
-    public ExcelAddressBase Address {
-      get { return _address; }
-    }
+    public ExcelAddressBase Address => _address;
 
     public object GetValue(int row, int col) {
       return _ws.GetValue(row, col);
diff --git a/EPPlus/FormulaParsing/Excel/Functions/ArgumentCollectionUtil.cs b/EPPlus/FormulaParsing/Excel/Functions/ArgumentCollectionUtil.cs
index 3abd514..9f04f77 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/ArgumentCollectionUtil.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/ArgumentCollectionUtil.cs
@@ -72,8 +72,8 @@
       double result,
       Func<FunctionArgument, double, double> action) {
     foreach (var item in collection) {
-      if (item.Value is IEnumerable<FunctionArgument>) {
-        result = CalculateCollection((IEnumerable<FunctionArgument>)item.Value, result, action);
+      if (item.Value is IEnumerable<FunctionArgument> value) {
+        result = CalculateCollection(value, result, action);
       } else {
         result = action(item, result);
       }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/BoolArgumentParser.cs b/EPPlus/FormulaParsing/Excel/Functions/BoolArgumentParser.cs
index f492580..3f24d9c 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/BoolArgumentParser.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/BoolArgumentParser.cs
@@ -31,21 +31,20 @@
 
 public class BoolArgumentParser : ArgumentParser {
   public override object Parse(object obj) {
-    if (obj is ExcelDataProvider.IRangeInfo) {
-      var r = ((ExcelDataProvider.IRangeInfo)obj).FirstOrDefault();
-      obj = (r == null ? null : r.Value);
+    if (obj is ExcelDataProvider.IRangeInfo info) {
+      var r = info.FirstOrDefault();
+      obj = r?.Value;
     }
     if (obj == null) {
       return false;
     }
-    if (obj is bool) {
-      return (bool)obj;
+    if (obj is bool b) {
+      return b;
     }
     if (obj.IsNumeric()) {
       return Convert.ToBoolean(obj);
     }
-    bool result;
-    if (bool.TryParse(obj.ToString(), out result)) {
+    if (bool.TryParse(obj.ToString(), out var result)) {
       return result;
     }
     return result;
diff --git a/EPPlus/FormulaParsing/Excel/Functions/CollectionFlattener.cs b/EPPlus/FormulaParsing/Excel/Functions/CollectionFlattener.cs
index 04eeab3..dfcf5d9 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/CollectionFlattener.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/CollectionFlattener.cs
@@ -42,8 +42,8 @@
       List<T> argList,
       Action<FunctionArgument, IList<T>> convertFunc) {
     foreach (var arg in arguments) {
-      if (arg.Value is IEnumerable<FunctionArgument>) {
-        FuncArgsToFlatEnumerable((IEnumerable<FunctionArgument>)arg.Value, argList, convertFunc);
+      if (arg.Value is IEnumerable<FunctionArgument> value) {
+        FuncArgsToFlatEnumerable(value, argList, convertFunc);
       } else {
         convertFunc(arg, argList);
       }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/DateTime/DateValue.cs b/EPPlus/FormulaParsing/Excel/Functions/DateTime/DateValue.cs
index 0b5f372..a474018 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/DateTime/DateValue.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/DateTime/DateValue.cs
@@ -17,8 +17,7 @@
   }
 
   internal CompileResult Execute(string dateString) {
-    System.DateTime result;
-    System.DateTime.TryParse(dateString, out result);
+    System.DateTime.TryParse(dateString, out var result);
     return result != System.DateTime.MinValue
         ? CreateResult(result.ToOADate(), DataType.Date)
         : CreateResult(ExcelErrorValue.Create(eErrorType.Value), DataType.ExcelError);
diff --git a/EPPlus/FormulaParsing/Excel/Functions/DateTime/Days360.cs b/EPPlus/FormulaParsing/Excel/Functions/DateTime/Days360.cs
index 20810ef..797053e 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/DateTime/Days360.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/DateTime/Days360.cs
@@ -68,10 +68,4 @@
             - (startYear * 12 * 30 + startMonth * 30 + startDay);
     return CreateResult(result, DataType.Integer);
   }
-
-  private int GetNumWholeMonths(System.DateTime dt1, System.DateTime dt2) {
-    var startDate = new System.DateTime(dt1.Year, dt1.Month, 1).AddMonths(1);
-    var endDate = new System.DateTime(dt2.Year, dt2.Month, 1);
-    return ((endDate.Year - startDate.Year) * 12) + (endDate.Month - startDate.Month);
-  }
 }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/DateTime/TimeStringParser.cs b/EPPlus/FormulaParsing/Excel/Functions/DateTime/TimeStringParser.cs
index 4a76f6f..533528d 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/DateTime/TimeStringParser.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/DateTime/TimeStringParser.cs
@@ -64,8 +64,7 @@
     if (Regex.IsMatch(input, _regEx12)) {
       return Parse12HourTimeString(input);
     }
-    System.DateTime dateTime;
-    if (System.DateTime.TryParse(input, out dateTime)) {
+    if (System.DateTime.TryParse(input, out var dateTime)) {
       return GetSerialNumber(dateTime.Hour, dateTime.Minute, dateTime.Second);
     }
     return -1;
@@ -74,10 +73,7 @@
   private double Parse12HourTimeString(string input) {
     string dayPart = string.Empty;
     dayPart = input.Substring(input.Length - 2, 2);
-    int hour;
-    int minute;
-    int second;
-    GetValuesFromString(input, out hour, out minute, out second);
+    GetValuesFromString(input, out var hour, out var minute, out var second);
     if (dayPart == "PM") {
       hour += 12;
     }
@@ -86,10 +82,7 @@
   }
 
   private double Parse24HourTimeString(string input) {
-    int hour;
-    int minute;
-    int second;
-    GetValuesFromString(input, out hour, out minute, out second);
+    GetValuesFromString(input, out var hour, out var minute, out var second);
     ValidateValues(hour, minute, second);
     return GetSerialNumber(hour, minute, second);
   }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/DateTime/TimeValue.cs b/EPPlus/FormulaParsing/Excel/Functions/DateTime/TimeValue.cs
index ac259b8..c2de2e0 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/DateTime/TimeValue.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/DateTime/TimeValue.cs
@@ -17,8 +17,7 @@
   }
 
   internal CompileResult Execute(string dateString) {
-    System.DateTime result;
-    System.DateTime.TryParse(dateString, out result);
+    System.DateTime.TryParse(dateString, out var result);
     return result != System.DateTime.MinValue
         ? CreateResult(GetTimeValue(result), DataType.Date)
         : CreateResult(ExcelErrorValue.Create(eErrorType.Value), DataType.ExcelError);
diff --git a/EPPlus/FormulaParsing/Excel/Functions/DoubleArgumentParser.cs b/EPPlus/FormulaParsing/Excel/Functions/DoubleArgumentParser.cs
index d987c85..ed0cec4 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/DoubleArgumentParser.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/DoubleArgumentParser.cs
@@ -27,22 +27,22 @@
 using System.Linq;
 using OfficeOpenXml.FormulaParsing.Exceptions;
 using OfficeOpenXml.FormulaParsing.Utilities;
-using util = OfficeOpenXml.Utils;
+using ConvertUtil = OfficeOpenXml.Utils.ConvertUtil;
 
 namespace OfficeOpenXml.FormulaParsing.Excel.Functions;
 
 public class DoubleArgumentParser : ArgumentParser {
   public override object Parse(object obj) {
     Require.That(obj).Named("argument").IsNotNull();
-    if (obj is ExcelDataProvider.IRangeInfo) {
-      var r = ((ExcelDataProvider.IRangeInfo)obj).FirstOrDefault();
-      return r == null ? 0 : r.ValueDouble;
+    if (obj is ExcelDataProvider.IRangeInfo info) {
+      var r = info.FirstOrDefault();
+      return r?.ValueDouble ?? 0;
     }
     if (obj is double) {
       return obj;
     }
     if (obj.IsNumeric()) {
-      return util.ConvertUtil.GetValueDouble(obj);
+      return ConvertUtil.GetValueDouble(obj);
     }
     var str = obj != null ? obj.ToString() : string.Empty;
     try {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/DoubleEnumerableArgConverter.cs b/EPPlus/FormulaParsing/Excel/Functions/DoubleEnumerableArgConverter.cs
index 2ff7a2c..1895872 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/DoubleEnumerableArgConverter.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/DoubleEnumerableArgConverter.cs
@@ -68,8 +68,8 @@
         (arg, argList) => {
           //var cellInfo = arg.Value as EpplusExcelDataProvider.CellInfo;
           //var value = cellInfo != null ? cellInfo.Value : arg.Value;
-          if (arg.Value is ExcelDataProvider.IRangeInfo) {
-            foreach (var cell in (ExcelDataProvider.IRangeInfo)arg.Value) {
+          if (arg.Value is ExcelDataProvider.IRangeInfo info) {
+            foreach (var cell in info) {
               argList.Add(cell.ValueDoubleLogical);
             }
           } else {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/ExcelFunction.cs b/EPPlus/FormulaParsing/Excel/Functions/ExcelFunction.cs
index ad03cae..a1ae44c 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/ExcelFunction.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/ExcelFunction.cs
@@ -86,7 +86,7 @@
       var r = arg.ValueAsRangeInfo;
       return r.GetValue(r.Address._fromRow, r.Address._fromCol);
     }
-    return arg == null ? null : arg.Value;
+    return arg?.Value;
   }
 
   /// <summary>
diff --git a/EPPlus/FormulaParsing/Excel/Functions/FunctionArgument.cs b/EPPlus/FormulaParsing/Excel/Functions/FunctionArgument.cs
index 7dec4b3..baa9da7 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/FunctionArgument.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/FunctionArgument.cs
@@ -44,7 +44,7 @@
 
   public object Value { get; private set; }
 
-  public Type Type => Value != null ? Value.GetType() : null;
+  public Type Type => Value?.GetType();
 
   public bool IsExcelRange => Value != null && Value is ExcelDataProvider.IRangeInfo;
 
@@ -56,8 +56,8 @@
 
   public object ValueFirst {
     get {
-      if (Value is ExcelDataProvider.INameInfo) {
-        Value = ((ExcelDataProvider.INameInfo)Value).Value;
+      if (Value is ExcelDataProvider.INameInfo info) {
+        Value = info.Value;
       }
       var v = Value as ExcelDataProvider.IRangeInfo;
       if (v == null) {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Information/ErrorType.cs b/EPPlus/FormulaParsing/Excel/Functions/Information/ErrorType.cs
index 9c565cc..f68f0f9 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Information/ErrorType.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Information/ErrorType.cs
@@ -41,7 +41,6 @@
       return CreateResult(ExcelErrorValue.Create(eErrorType.Na), DataType.ExcelError);
     }
     var errorType = error.ValueAsExcelErrorValue;
-    int retValue;
     switch (errorType.Type) {
       case eErrorType.Null:
         return CreateResult(1, DataType.Integer);
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Information/IsBlank.cs b/EPPlus/FormulaParsing/Excel/Functions/Information/IsBlank.cs
index e231841..8923a4c 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Information/IsBlank.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Information/IsBlank.cs
@@ -38,9 +38,8 @@
     }
     var result = true;
     foreach (var arg in arguments) {
-      if (arg.Value is ExcelDataProvider.IRangeInfo) {
-        var r = (ExcelDataProvider.IRangeInfo)arg.Value;
-        if (r.GetValue(r.Address._fromRow, r.Address._fromCol) != null) {
+      if (arg.Value is ExcelDataProvider.IRangeInfo info) {
+        if (info.GetValue(info.Address._fromRow, info.Address._fromCol) != null) {
           result = false;
         }
       } else {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Information/IsErr.cs b/EPPlus/FormulaParsing/Excel/Functions/Information/IsErr.cs
index ef90818..d857231 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Information/IsErr.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Information/IsErr.cs
@@ -11,14 +11,13 @@
     var result = isError.Execute(arguments, context);
     if ((bool)result.Result) {
       var arg = GetFirstValue(arguments);
-      if (arg is ExcelDataProvider.IRangeInfo) {
-        var r = (ExcelDataProvider.IRangeInfo)arg;
-        var e = r.GetValue(r.Address._fromRow, r.Address._fromCol) as ExcelErrorValue;
+      if (arg is ExcelDataProvider.IRangeInfo info) {
+        var e = info.GetValue(info.Address._fromRow, info.Address._fromCol) as ExcelErrorValue;
         if (e != null && e.Type == eErrorType.Na) {
           return CreateResult(false, DataType.Boolean);
         }
       } else {
-        if (arg is ExcelErrorValue && ((ExcelErrorValue)arg).Type == eErrorType.Na) {
+        if (arg is ExcelErrorValue value && value.Type == eErrorType.Na) {
           return CreateResult(false, DataType.Boolean);
         }
       }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Information/IsError.cs b/EPPlus/FormulaParsing/Excel/Functions/Information/IsError.cs
index d9802cf..11aaf0b 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Information/IsError.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Information/IsError.cs
@@ -37,10 +37,9 @@
       return CreateResult(false, DataType.Boolean);
     }
     foreach (var argument in arguments) {
-      if (argument.Value is ExcelDataProvider.IRangeInfo) {
-        var r = (ExcelDataProvider.IRangeInfo)argument.Value;
+      if (argument.Value is ExcelDataProvider.IRangeInfo info) {
         if (ExcelErrorValue.Values.IsErrorValue(
-            r.GetValue(r.Address._fromRow, r.Address._fromCol))) {
+            info.GetValue(info.Address._fromRow, info.Address._fromCol))) {
           return CreateResult(true, DataType.Boolean);
         }
       } else {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Information/IsNa.cs b/EPPlus/FormulaParsing/Excel/Functions/Information/IsNa.cs
index 82adcfe..641ea01 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Information/IsNa.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Information/IsNa.cs
@@ -39,7 +39,7 @@
 
     var v = GetFirstValue(arguments);
 
-    if (v is ExcelErrorValue && ((ExcelErrorValue)v).Type == eErrorType.Na) {
+    if (v is ExcelErrorValue value && value.Type == eErrorType.Na) {
       return CreateResult(true, DataType.Boolean);
     }
     return CreateResult(false, DataType.Boolean);
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Information/N.cs b/EPPlus/FormulaParsing/Excel/Functions/Information/N.cs
index 18d6665..cf3d171 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Information/N.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Information/N.cs
@@ -12,8 +12,8 @@
     ValidateArguments(arguments, 1);
     var arg = GetFirstValue(arguments);
 
-    if (arg is bool) {
-      var val = (bool)arg ? 1d : 0d;
+    if (arg is bool b) {
+      var val = b ? 1d : 0d;
       return CreateResult(val, DataType.Decimal);
     }
     if (IsNumeric(arg)) {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/IntArgumentParser.cs b/EPPlus/FormulaParsing/Excel/Functions/IntArgumentParser.cs
index b510d93..40a5d21 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/IntArgumentParser.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/IntArgumentParser.cs
@@ -33,9 +33,8 @@
 public class IntArgumentParser : ArgumentParser {
   public override object Parse(object obj) {
     Require.That(obj).Named("argument").IsNotNull();
-    int result;
-    if (obj is ExcelDataProvider.IRangeInfo) {
-      var r = ((ExcelDataProvider.IRangeInfo)obj).FirstOrDefault();
+    if (obj is ExcelDataProvider.IRangeInfo info) {
+      var r = info.FirstOrDefault();
       return r == null ? 0 : Convert.ToInt32(r.ValueDouble);
     }
     var objType = obj.GetType();
@@ -45,7 +44,7 @@
     if (objType == typeof(double) || objType == typeof(decimal)) {
       return Convert.ToInt32(obj);
     }
-    if (!int.TryParse(obj.ToString(), out result)) {
+    if (!int.TryParse(obj.ToString(), out var result)) {
       throw new ExcelErrorValueException(ExcelErrorValue.Create(eErrorType.Value));
     }
     return result;
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/Average.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/Average.cs
index 159d9de..b154d24 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/Average.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/Average.cs
@@ -52,8 +52,8 @@
     if (ShouldIgnore(arg)) {
       return;
     }
-    if (arg.Value is IEnumerable<FunctionArgument>) {
-      foreach (var item in (IEnumerable<FunctionArgument>)arg.Value) {
+    if (arg.Value is IEnumerable<FunctionArgument> value) {
+      foreach (var item in value) {
         Calculate(item, context, ref retVal, ref nValues, true);
       }
     } else if (arg.IsExcelRange) {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/AverageA.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/AverageA.cs
index 00f575f..5cbcdb0 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/AverageA.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/AverageA.cs
@@ -52,8 +52,8 @@
     if (ShouldIgnore(arg)) {
       return;
     }
-    if (arg.Value is IEnumerable<FunctionArgument>) {
-      foreach (var item in (IEnumerable<FunctionArgument>)arg.Value) {
+    if (arg.Value is IEnumerable<FunctionArgument> value) {
+      foreach (var item in value) {
         Calculate(item, context, ref retVal, ref nValues, true);
       }
     } else if (arg.IsExcelRange) {
@@ -65,9 +65,9 @@
         if (IsNumeric(c.Value)) {
           nValues++;
           retVal += c.ValueDouble;
-        } else if (c.Value is bool) {
+        } else if (c.Value is bool cValue) {
           nValues++;
-          retVal += (bool)c.Value ? 1 : 0;
+          retVal += cValue ? 1 : 0;
         } else if (c.Value is string) {
           nValues++;
         }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/AverageIf.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/AverageIf.cs
index 3b83858..0423f98 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/AverageIf.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/AverageIf.cs
@@ -125,24 +125,4 @@
     }
     return Divide(retVal, nMatches);
   }
-
-  private double Calculate(FunctionArgument arg, string expression) {
-    var retVal = 0d;
-    if (ShouldIgnore(arg) || !_numericExpressionEvaluator.Evaluate(arg.Value, expression)) {
-      return retVal;
-    }
-    if (IsNumeric(arg.Value)) {
-      retVal += ConvertUtil.GetValueDouble(arg.Value);
-    }
-    //else if (arg.Value is System.DateTime)
-    //{
-    //    retVal += Convert.ToDateTime(arg.Value).ToOADate();
-    //}
-    else if (arg.Value is IEnumerable<FunctionArgument>) {
-      foreach (var item in (IEnumerable<FunctionArgument>)arg.Value) {
-        retVal += Calculate(item, expression);
-      }
-    }
-    return retVal;
-  }
 }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/CountA.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/CountA.cs
index 3e7fd3c..a9e3b52 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/CountA.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/CountA.cs
@@ -51,8 +51,8 @@
             nItems++;
           }
         }
-      } else if (item.Value is IEnumerable<FunctionArgument>) {
-        Calculate((IEnumerable<FunctionArgument>)item.Value, context, ref nItems);
+      } else if (item.Value is IEnumerable<FunctionArgument> value) {
+        Calculate(value, context, ref nItems);
       } else {
         _CheckForAndHandleExcelError(item, context);
         if (!ShouldIgnore(item) && ShouldCount(item.Value)) {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/CountIf.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/CountIf.cs
index e5e7f14..277058c 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/CountIf.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/CountIf.cs
@@ -50,8 +50,8 @@
           result++;
         }
       }
-    } else if (range.Value is IEnumerable<FunctionArgument>) {
-      foreach (var arg in (IEnumerable<FunctionArgument>)range.Value) {
+    } else if (range.Value is IEnumerable<FunctionArgument> value) {
+      foreach (var arg in value) {
         if (Evaluate(arg.Value, criteria)) {
           result++;
         }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/Rank.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/Rank.cs
deleted file mode 100644
index ae71b2c..0000000
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/Rank.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using OfficeOpenXml.FormulaParsing.ExpressionGraph;
-
-namespace OfficeOpenXml.FormulaParsing.Excel.Functions.Math {
-  public class Rank : ExcelFunction {
-    bool _isAvg;
-
-    public Rank(bool isAvg = false) {
-      _isAvg = isAvg;
-    }
-
-    public override CompileResult Execute(
-        IEnumerable<FunctionArgument> arguments,
-        ParsingContext context) {
-      ValidateArguments(arguments, 2);
-      var number = ArgToDecimal(arguments, 0);
-      var refer = arguments.ElementAt(1);
-      bool asc = false;
-      if (arguments.Count() > 2) {
-        asc = base.ArgToBool(arguments, 2);
-      }
-      var l = new List<double>();
-
-      foreach (var c in refer.ValueAsRangeInfo) {
-        var v = Utils.ConvertUtil.GetValueDouble(c.Value, false, true);
-        if (!double.IsNaN(v)) {
-          l.Add(v);
-        }
-      }
-      l.Sort();
-      double ix;
-      if (asc) {
-        ix = l.IndexOf(number) + 1;
-        if (_isAvg) {
-          int st = Convert.ToInt32(ix);
-          while (l.Count > st && l[st] == number) {
-            st++;
-          }
-          if (st > ix) {
-            ix = ix + ((st - ix) / 2D);
-          }
-        }
-      } else {
-        ix = l.LastIndexOf(number);
-        if (_isAvg) {
-          int st = Convert.ToInt32(ix) - 1;
-          while (0 <= st && l[st] == number) {
-            st--;
-          }
-          if (st + 1 < ix) {
-            ix = ix - ((ix - st - 1) / 2D);
-          }
-        }
-        ix = l.Count - ix;
-      }
-      if (ix <= 0 || ix > l.Count) {
-        return new CompileResult(ExcelErrorValue.Create(eErrorType.NA), DataType.ExcelError);
-      } else {
-        return CreateResult(ix, DataType.Decimal);
-      }
-    }
-  }
-}
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/Sum.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/Sum.cs
index 5d3550e..b9b6850 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/Sum.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/Sum.cs
@@ -47,12 +47,12 @@
     if (ShouldIgnore(arg)) {
       return retVal;
     }
-    if (arg.Value is IEnumerable<FunctionArgument>) {
-      foreach (var item in (IEnumerable<FunctionArgument>)arg.Value) {
+    if (arg.Value is IEnumerable<FunctionArgument> value) {
+      foreach (var item in value) {
         retVal += Calculate(item, context);
       }
-    } else if (arg.Value is ExcelDataProvider.IRangeInfo) {
-      foreach (var c in (ExcelDataProvider.IRangeInfo)arg.Value) {
+    } else if (arg.Value is ExcelDataProvider.IRangeInfo info) {
+      foreach (var c in info) {
         if (ShouldIgnore(c, context) == false) {
           CheckForAndHandleExcelError(c);
           retVal += c.ValueDouble;
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/SumIf.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/SumIf.cs
index 1750c4e..232d460 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/SumIf.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/SumIf.cs
@@ -71,23 +71,6 @@
   }
 
   private double CalculateWithSumRange(
-      IEnumerable<FunctionArgument> range,
-      string criteria,
-      IEnumerable<FunctionArgument> sumRange,
-      ParsingContext context) {
-    var retVal = 0d;
-    var flattenedRange = ArgsToDoubleEnumerable(range, context);
-    var flattenedSumRange = ArgsToDoubleEnumerable(sumRange, context);
-    for (var x = 0; x < flattenedRange.Count(); x++) {
-      var candidate = flattenedSumRange.ElementAt(x);
-      if (_evaluator.Evaluate(flattenedRange.ElementAt(x), criteria)) {
-        retVal += candidate;
-      }
-    }
-    return retVal;
-  }
-
-  private double CalculateWithSumRange(
       ExcelDataProvider.IRangeInfo range,
       string criteria,
       ExcelDataProvider.IRangeInfo sumRange,
@@ -100,8 +83,8 @@
         if (sumRange.Address._fromRow + or <= sumRange.Address._toRow
             && sumRange.Address._fromCol + oc <= sumRange.Address._toCol) {
           var v = sumRange.GetOffset(or, oc);
-          if (v is ExcelErrorValue) {
-            throw (new ExcelErrorValueException((ExcelErrorValue)v));
+          if (v is ExcelErrorValue value) {
+            throw (new ExcelErrorValueException(value));
           }
           retVal += Util.ConvertUtil.GetValueDouble(v, true);
         }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/SumProduct.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/SumProduct.cs
index 6985eb7..0ee2d19 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/SumProduct.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/SumProduct.cs
@@ -41,8 +41,8 @@
     foreach (var arg in arguments) {
       results.Add(new());
       var currentResult = results.Last();
-      if (arg.Value is IEnumerable<FunctionArgument>) {
-        foreach (var val in (IEnumerable<FunctionArgument>)arg.Value) {
+      if (arg.Value is IEnumerable<FunctionArgument> value) {
+        foreach (var val in value) {
           AddValue(val.Value, currentResult);
         }
       } else if (arg.Value is FunctionArgument) {
@@ -77,8 +77,8 @@
   private void AddValue(object convertVal, List<double> currentResult) {
     if (IsNumeric(convertVal)) {
       currentResult.Add(Convert.ToDouble(convertVal));
-    } else if (convertVal is ExcelErrorValue) {
-      throw (new ExcelErrorValueException((ExcelErrorValue)convertVal));
+    } else if (convertVal is ExcelErrorValue val) {
+      throw (new ExcelErrorValueException(val));
     } else {
       currentResult.Add(0d);
     }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Math/Sumsq.cs b/EPPlus/FormulaParsing/Excel/Functions/Math/Sumsq.cs
index 9bb56d3..cb18398 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Math/Sumsq.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Math/Sumsq.cs
@@ -22,8 +22,8 @@
     if (ShouldIgnore(arg)) {
       return retVal;
     }
-    if (arg.Value is IEnumerable<FunctionArgument>) {
-      foreach (var item in (IEnumerable<FunctionArgument>)arg.Value) {
+    if (arg.Value is IEnumerable<FunctionArgument> arguments) {
+      foreach (var item in arguments) {
         retVal += Calculate(item, context, true);
       }
     } else {
diff --git a/EPPlus/FormulaParsing/Excel/Functions/ObjectEnumerableArgConverter.cs b/EPPlus/FormulaParsing/Excel/Functions/ObjectEnumerableArgConverter.cs
index 71c5252..6e56c59 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/ObjectEnumerableArgConverter.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/ObjectEnumerableArgConverter.cs
@@ -35,8 +35,8 @@
     return base.FuncArgsToFlatEnumerable(
         arguments,
         (arg, argList) => {
-          if (arg.Value is ExcelDataProvider.IRangeInfo) {
-            foreach (var cell in (ExcelDataProvider.IRangeInfo)arg.Value) {
+          if (arg.Value is ExcelDataProvider.IRangeInfo info) {
+            foreach (var cell in info) {
               if (!CellStateHelper.ShouldIgnore(ignoreHidden, cell, context)) {
                 argList.Add(cell.Value);
               }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/RefAndLookup/Address.cs b/EPPlus/FormulaParsing/Excel/Functions/RefAndLookup/Address.cs
index 3d75525..b0ce169 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/RefAndLookup/Address.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/RefAndLookup/Address.cs
@@ -48,7 +48,7 @@
     }
     if (arguments.Count() > 3) {
       var fourthArg = arguments.ElementAt(3).Value;
-      if (fourthArg is bool && !(bool)fourthArg) {
+      if (fourthArg is bool arg && !arg) {
         throw new InvalidOperationException("Excelformulaparser does not support the R1C1 format!");
       }
     }
diff --git a/EPPlus/FormulaParsing/Excel/Functions/Text/Value.cs b/EPPlus/FormulaParsing/Excel/Functions/Text/Value.cs
index 3ad4fc8..2a05519 100644
--- a/EPPlus/FormulaParsing/Excel/Functions/Text/Value.cs
+++ b/EPPlus/FormulaParsing/Excel/Functions/Text/Value.cs
@@ -16,10 +16,6 @@
       .NumberFormat
       .NumberDecimalSeparator;
   private readonly string _timeSeparator = CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator;
-  private readonly string _shortTimePattern = CultureInfo
-      .CurrentCulture
-      .DateTimeFormat
-      .ShortTimePattern;
   private readonly DateValue _dateValueFunc = new();
   private readonly TimeValue _timeValueFunc = new();
 
diff --git a/EPPlus/FormulaParsing/Excel/Operators/Operator.cs b/EPPlus/FormulaParsing/Excel/Operators/Operator.cs
index 9134b3c..e6d25e2 100644
--- a/EPPlus/FormulaParsing/Excel/Operators/Operator.cs
+++ b/EPPlus/FormulaParsing/Excel/Operators/Operator.cs
@@ -39,14 +39,10 @@
   private const int _precedencePercent = 2;
   private const int _precedenceExp = 4;
   private const int _precedenceMultiplyDevide = 6;
-  private const int _precedenceIntegerDivision = 8;
-  private const int _precedenceModulus = 10;
   private const int _precedenceAddSubtract = 12;
   private const int _precedenceConcat = 15;
   private const int _precedenceComparison = 25;
 
-  private Operator() {}
-
   private Operator(
       Operators @operator,
       int precedence,
@@ -62,9 +58,7 @@
 
   int IOperator.Precedence => _precedence;
 
-  Operators IOperator.Operator {
-    get { return _operator; }
-  }
+  Operators IOperator.Operator => _operator;
 
   public CompileResult Apply(CompileResult left, CompileResult right) {
     if (left.Result is ExcelErrorValue) {
@@ -93,8 +87,7 @@
                   (l, r) => {
                     l = l == null || l.Result == null ? new(0, DataType.Integer) : l;
                     r = r == null || r.Result == null ? new(0, DataType.Integer) : r;
-                    ExcelErrorValue errorVal;
-                    if (EitherIsError(l, r, out errorVal)) {
+                    if (EitherIsError(l, r, out var errorVal)) {
                       return new(errorVal);
                     }
                     if (l.DataType == DataType.Integer && r.DataType == DataType.Integer) {
@@ -352,8 +345,7 @@
       CompileResult l,
       CompileResult r,
       Func<int, bool> comparison) {
-    ExcelErrorValue errorVal;
-    if (EitherIsError(l, r, out errorVal)) {
+    if (EitherIsError(l, r, out var errorVal)) {
       return new(errorVal);
     }
     object left,
diff --git a/EPPlus/FormulaParsing/ExcelCell.cs b/EPPlus/FormulaParsing/ExcelCell.cs
deleted file mode 100644
index aedd49c..0000000
--- a/EPPlus/FormulaParsing/ExcelCell.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace OfficeOpenXml.FormulaParsing;
-
-public class ExcelCell {
-  public ExcelCell(object val, string formula, int colIndex, int rowIndex) {
-    Value = val;
-    Formula = formula;
-    ColIndex = colIndex;
-    RowIndex = rowIndex;
-  }
-
-  public int ColIndex { get; private set; }
-
-  public int RowIndex { get; private set; }
-
-  public object Value { get; private set; }
-
-  public string Formula { get; private set; }
-}
diff --git a/EPPlus/FormulaParsing/ExcelUtilities/ExpressionEvaluator.cs b/EPPlus/FormulaParsing/ExcelUtilities/ExpressionEvaluator.cs
index 53cf288..df05bb4 100644
--- a/EPPlus/FormulaParsing/ExcelUtilities/ExpressionEvaluator.cs
+++ b/EPPlus/FormulaParsing/ExcelUtilities/ExpressionEvaluator.cs
@@ -77,8 +77,8 @@
       d = Convert.ToDouble(op);
       return true;
     }
-    if (op is DateTime) {
-      d = ((DateTime)op).ToOADate();
+    if (op is DateTime time) {
+      d = time.ToOADate();
       return true;
     }
     if (op != null) {
@@ -96,8 +96,7 @@
     }
     var operatorCandidate = GetNonAlphanumericStartChars(expression);
     if (!string.IsNullOrEmpty(operatorCandidate) && operatorCandidate != "-") {
-      IOperator op;
-      if (OperatorsDict.Instance.TryGetValue(operatorCandidate, out op)) {
+      if (OperatorsDict.Instance.TryGetValue(operatorCandidate, out var op)) {
         var right = expression.Replace(operatorCandidate, string.Empty);
         if (left == null && right == string.Empty) {
           return op.Operator == Operators.Equals;
@@ -105,12 +104,9 @@
         if (left == null ^ right == string.Empty) {
           return op.Operator == Operators.NotEqualTo;
         }
-        double leftNum,
-            rightNum;
-        DateTime date;
-        bool leftIsNumeric = TryConvertToDouble(left, out leftNum);
-        bool rightIsNumeric = double.TryParse(right, out rightNum);
-        bool rightIsDate = DateTime.TryParse(right, out date);
+        bool leftIsNumeric = TryConvertToDouble(left, out var leftNum);
+        bool rightIsNumeric = double.TryParse(right, out var rightNum);
+        bool rightIsDate = DateTime.TryParse(right, out var date);
         if (leftIsNumeric && rightIsNumeric) {
           return EvaluateOperator(leftNum, rightNum, op);
         }
diff --git a/EPPlus/FormulaParsing/ExcelUtilities/NumericExpressionEvaluator.cs b/EPPlus/FormulaParsing/ExcelUtilities/NumericExpressionEvaluator.cs
index 6e326a7..174d595 100644
--- a/EPPlus/FormulaParsing/ExcelUtilities/NumericExpressionEvaluator.cs
+++ b/EPPlus/FormulaParsing/ExcelUtilities/NumericExpressionEvaluator.cs
@@ -67,8 +67,7 @@
       return Convert.ToDouble(op);
     }
     if (op != null) {
-      double output;
-      if (double.TryParse(op.ToString(), out output)) {
+      if (double.TryParse(op.ToString(), out var output)) {
         return output;
       }
     }
@@ -79,11 +78,9 @@
     var operatorCandidate = GetNonNumericStartChars(expression);
     var leftNum = OperandAsDouble(left);
     if (!string.IsNullOrEmpty(operatorCandidate) && leftNum != null) {
-      IOperator op;
-      if (OperatorsDict.Instance.TryGetValue(operatorCandidate, out op)) {
+      if (OperatorsDict.Instance.TryGetValue(operatorCandidate, out var op)) {
         var numericCandidate = expression.Replace(operatorCandidate, string.Empty);
-        double d;
-        if (double.TryParse(numericCandidate, out d)) {
+        if (double.TryParse(numericCandidate, out var d)) {
           var leftResult = _compileResultFactory.Create(leftNum);
           var rightResult = _compileResultFactory.Create(d);
           var result = op.Apply(leftResult, rightResult);
diff --git a/EPPlus/FormulaParsing/ExcelUtilities/RangeAddressFactory.cs b/EPPlus/FormulaParsing/ExcelUtilities/RangeAddressFactory.cs
index a2ae075..2ff911b 100644
--- a/EPPlus/FormulaParsing/ExcelUtilities/RangeAddressFactory.cs
+++ b/EPPlus/FormulaParsing/ExcelUtilities/RangeAddressFactory.cs
@@ -35,7 +35,6 @@
 
 public class RangeAddressFactory {
   private readonly ExcelDataProvider _excelDataProvider;
-  private readonly AddressTranslator _addressTranslator;
   private readonly IndexToAddressTranslator _indexToAddressTranslator;
 
   public RangeAddressFactory(ExcelDataProvider excelDataProvider)
@@ -52,7 +51,6 @@
     Require.That(addressTranslator).Named("addressTranslator").IsNotNull();
     Require.That(indexToAddressTranslator).Named("indexToAddressTranslator").IsNotNull();
     _excelDataProvider = excelDataProvider;
-    _addressTranslator = addressTranslator;
     _indexToAddressTranslator = indexToAddressTranslator;
   }
 
@@ -91,15 +89,6 @@
       ToRow = (dim != null && adr._toRow > dim.Row) ? dim.Row : adr._toRow,
       ToCol = adr._toCol,
     };
-
-    //if (addressInfo.IsMultipleCells)
-    //{
-    //    HandleMultipleCellAddress(rangeAddress, addressInfo);
-    //}
-    //else
-    //{
-    //    HandleSingleCellAddress(rangeAddress, addressInfo);
-    //}
     return rangeAddress;
   }
 
@@ -115,42 +104,6 @@
       ToRow = adr._toRow,
       ToCol = adr._toCol,
     };
-
-    //if (addressInfo.IsMultipleCells)
-    //{
-    //    HandleMultipleCellAddress(rangeAddress, addressInfo);
-    //}
-    //else
-    //{
-    //    HandleSingleCellAddress(rangeAddress, addressInfo);
-    //}
     return rangeAddress;
   }
-
-  private void HandleSingleCellAddress(RangeAddress rangeAddress, ExcelAddressInfo addressInfo) {
-    int col,
-        row;
-    _addressTranslator.ToColAndRow(addressInfo.StartCell, out col, out row);
-    rangeAddress.FromCol = col;
-    rangeAddress.ToCol = col;
-    rangeAddress.FromRow = row;
-    rangeAddress.ToRow = row;
-  }
-
-  private void HandleMultipleCellAddress(RangeAddress rangeAddress, ExcelAddressInfo addressInfo) {
-    int fromCol,
-        fromRow;
-    _addressTranslator.ToColAndRow(addressInfo.StartCell, out fromCol, out fromRow);
-    int toCol,
-        toRow;
-    _addressTranslator.ToColAndRow(
-        addressInfo.EndCell,
-        out toCol,
-        out toRow,
-        AddressTranslator.RangeCalculationBehaviour.LastPart);
-    rangeAddress.FromCol = fromCol;
-    rangeAddress.ToCol = toCol;
-    rangeAddress.FromRow = fromRow;
-    rangeAddress.ToRow = toRow;
-  }
 }
diff --git a/EPPlus/FormulaParsing/ExcelUtilities/ValueMatcher.cs b/EPPlus/FormulaParsing/ExcelUtilities/ValueMatcher.cs
index aeb4a47..0fb50ba 100644
--- a/EPPlus/FormulaParsing/ExcelUtilities/ValueMatcher.cs
+++ b/EPPlus/FormulaParsing/ExcelUtilities/ValueMatcher.cs
@@ -63,15 +63,13 @@
   }
 
   private static object CheckGetRange(object v) {
-    if (v is ExcelDataProvider.IRangeInfo) {
-      var r = ((ExcelDataProvider.IRangeInfo)v);
-      if (r.GetNCells() > 1) {
+    if (v is ExcelDataProvider.IRangeInfo info) {
+      if (info.GetNCells() > 1) {
         v = ExcelErrorValue.Create(eErrorType.Na);
       }
-      v = r.GetOffset(0, 0);
-    } else if (v is ExcelDataProvider.INameInfo) {
-      var n = ((ExcelDataProvider.INameInfo)v);
-      v = CheckGetRange(n);
+      v = info.GetOffset(0, 0);
+    } else if (v is ExcelDataProvider.INameInfo nameInfo) {
+      v = CheckGetRange(nameInfo);
     }
     return v;
   }
@@ -81,16 +79,14 @@
   }
 
   protected virtual int CompareStringToObject(string o1, object o2) {
-    double d1;
-    if (double.TryParse(o1, out d1)) {
+    if (double.TryParse(o1, out var d1)) {
       return d1.CompareTo(Convert.ToDouble(o2));
     }
     return IncompatibleOperands;
   }
 
   protected virtual int CompareObjectToString(object o1, string o2) {
-    double d2;
-    if (double.TryParse(o2, out d2)) {
+    if (double.TryParse(o2, out var d2)) {
       return Convert.ToDouble(o1).CompareTo(d2);
     }
     return IncompatibleOperands;
diff --git a/EPPlus/FormulaParsing/ExcelValues.cs b/EPPlus/FormulaParsing/ExcelValues.cs
index e4d860b..c15c606 100644
--- a/EPPlus/FormulaParsing/ExcelValues.cs
+++ b/EPPlus/FormulaParsing/ExcelValues.cs
@@ -198,9 +198,9 @@
   }
 
   public override bool Equals(object obj) {
-    if (!(obj is ExcelErrorValue)) {
+    if (!(obj is ExcelErrorValue value)) {
       return false;
     }
-    return ((ExcelErrorValue)obj).ToString() == ToString();
+    return value.ToString() == ToString();
   }
 }
diff --git a/EPPlus/FormulaParsing/Exceptions/ExcelErrorCodes.cs b/EPPlus/FormulaParsing/Exceptions/ExcelErrorCodes.cs
index f182e8a..9dc8ea4 100644
--- a/EPPlus/FormulaParsing/Exceptions/ExcelErrorCodes.cs
+++ b/EPPlus/FormulaParsing/Exceptions/ExcelErrorCodes.cs
@@ -46,8 +46,8 @@
   }
 
   public override bool Equals(object obj) {
-    if (obj is ExcelErrorCodes) {
-      return ((ExcelErrorCodes)obj).Code.Equals(Code);
+    if (obj is ExcelErrorCodes codes) {
+      return codes.Code.Equals(Code);
     }
     return false;
   }
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/CompileResult.cs b/EPPlus/FormulaParsing/ExpressionGraph/CompileResult.cs
index 9535d05..2545f6a 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/CompileResult.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/CompileResult.cs
@@ -74,11 +74,11 @@
       if (IsNumeric) {
         return Result == null ? 0 : Convert.ToDouble(Result);
       }
-      if (Result is DateTime) {
-        return ((DateTime)Result).ToOADate();
+      if (Result is DateTime time) {
+        return time.ToOADate();
       }
-      if (Result is TimeSpan) {
-        return new DateTime(((TimeSpan)Result).Ticks).ToOADate();
+      if (Result is TimeSpan span) {
+        return new DateTime(span.Ticks).ToOADate();
       }
       if (IsNumericString) {
         try {
@@ -87,8 +87,8 @@
           return 0;
         }
       }
-      if (Result is ExcelDataProvider.IRangeInfo) {
-        var c = ((ExcelDataProvider.IRangeInfo)Result).FirstOrDefault();
+      if (Result is ExcelDataProvider.IRangeInfo info) {
+        var c = info.FirstOrDefault();
         if (c == null) {
           return 0;
         }
@@ -100,15 +100,12 @@
 
   public DataType DataType { get; private set; }
 
-  public bool IsNumeric {
-    get {
-      return DataType == DataType.Decimal
-          || DataType == DataType.Integer
-          || DataType == DataType.Empty
-          || DataType == DataType.Boolean
-          || DataType == DataType.Date;
-    }
-  }
+  public bool IsNumeric =>
+    DataType == DataType.Decimal
+        || DataType == DataType.Integer
+        || DataType == DataType.Empty
+        || DataType == DataType.Boolean
+        || DataType == DataType.Date;
 
   public bool IsNumericString {
     get { return DataType == DataType.String && ConvertUtil.IsNumericString(Result); }
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/CompileResultFactory.cs b/EPPlus/FormulaParsing/ExpressionGraph/CompileResultFactory.cs
index af6f09f..4434031 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/CompileResultFactory.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/CompileResultFactory.cs
@@ -35,11 +35,11 @@
 
 public class CompileResultFactory {
   public virtual CompileResult Create(object obj) {
-    if ((obj is ExcelDataProvider.INameInfo)) {
-      obj = ((ExcelDataProvider.INameInfo)obj).Value;
+    if ((obj is ExcelDataProvider.INameInfo info)) {
+      obj = info.Value;
     }
-    if (obj is ExcelDataProvider.IRangeInfo) {
-      obj = ((ExcelDataProvider.IRangeInfo)obj).GetOffset(0, 0);
+    if (obj is ExcelDataProvider.IRangeInfo rangeInfo) {
+      obj = rangeInfo.GetOffset(0, 0);
     }
     if (obj == null) {
       return new(null, DataType.Empty);
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/DecimalExpression.cs b/EPPlus/FormulaParsing/ExpressionGraph/DecimalExpression.cs
index 9c32645..9d82c5a 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/DecimalExpression.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/DecimalExpression.cs
@@ -51,9 +51,7 @@
   }
 
   public override CompileResult Compile() {
-    double result = _compiledValue.HasValue
-        ? _compiledValue.Value
-        : double.Parse(ExpressionString, CultureInfo.InvariantCulture);
+    double result = _compiledValue ?? double.Parse(ExpressionString, CultureInfo.InvariantCulture);
     result = _negate ? result * -1 : result;
     return new(result, DataType.Decimal);
   }
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/ExcelAddressExpression.cs b/EPPlus/FormulaParsing/ExpressionGraph/ExcelAddressExpression.cs
index 4f68d2c..8e409b7 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/ExcelAddressExpression.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/ExcelAddressExpression.cs
@@ -107,7 +107,5 @@
     return compileResult;
   }
 
-  public bool IsNegated {
-    get { return _negate; }
-  }
+  public bool IsNegated => _negate;
 }
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/ExpressionGraphBuilder.cs b/EPPlus/FormulaParsing/ExpressionGraph/ExpressionGraphBuilder.cs
index de2f384..156b425 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/ExpressionGraphBuilder.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/ExpressionGraphBuilder.cs
@@ -65,9 +65,8 @@
   private void BuildUp(Token[] tokens, Expression parent) {
     while (_tokenIndex < tokens.Length) {
       var token = tokens[_tokenIndex];
-      IOperator op = null;
       if (token.TokenType == TokenType.Operator
-          && OperatorsDict.Instance.TryGetValue(token.Value, out op)) {
+          && OperatorsDict.Instance.TryGetValue(token.Value, out var op)) {
         SetOperatorOnExpression(parent, op);
       } else if (token.TokenType == TokenType.Function) {
         BuildFunctionExpression(tokens, parent, token.Value);
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/ErrorHandlingFunctionCompiler.cs b/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/ErrorHandlingFunctionCompiler.cs
index 303821a..f93b6ce 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/ErrorHandlingFunctionCompiler.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/ErrorHandlingFunctionCompiler.cs
@@ -45,7 +45,7 @@
     foreach (var child in children) {
       try {
         var arg = child.Compile();
-        BuildFunctionArguments(arg != null ? arg.Result : null, args);
+        BuildFunctionArguments(arg?.Result, args);
       } catch (ExcelErrorValueException efe) {
         return ((ErrorHandlingFunction)Function).HandleError(efe.ErrorValue.ToString());
       } catch // (Exception e)
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/FunctionCompiler.cs b/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/FunctionCompiler.cs
index cb164b0..8be6020 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/FunctionCompiler.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/FunctionCompiler.cs
@@ -44,9 +44,8 @@
   }
 
   protected void BuildFunctionArguments(object result, List<FunctionArgument> args) {
-    if (result is IEnumerable<object> && !(result is ExcelDataProvider.IRangeInfo)) {
+    if (result is IEnumerable<object> objects && !(objects is ExcelDataProvider.IRangeInfo)) {
       var argList = new List<FunctionArgument>();
-      var objects = result as IEnumerable<object>;
       foreach (var arg in objects) {
         BuildFunctionArguments(arg, argList);
       }
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/IfFunctionCompiler.cs b/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/IfFunctionCompiler.cs
index 0818ce5..15d262b 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/IfFunctionCompiler.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/IfFunctionCompiler.cs
@@ -66,20 +66,19 @@
     var v = firstChild.Compile().Result;
 
     /****  Handle names and ranges ****/
-    if (v is ExcelDataProvider.INameInfo) {
-      v = ((ExcelDataProvider.INameInfo)v).Value;
+    if (v is ExcelDataProvider.INameInfo info) {
+      v = info.Value;
     }
 
-    if (v is ExcelDataProvider.IRangeInfo) {
-      var r = ((ExcelDataProvider.IRangeInfo)v);
-      if (r.GetNCells() > 1) {
+    if (v is ExcelDataProvider.IRangeInfo rangeInfo) {
+      if (rangeInfo.GetNCells() > 1) {
         throw (new ArgumentException("Logical can't be more than one cell"));
       }
-      v = r.GetOffset(0, 0);
+      v = rangeInfo.GetOffset(0, 0);
     }
     bool boolVal;
-    if (v is bool) {
-      boolVal = (bool)v;
+    if (v is bool b) {
+      boolVal = b;
     } else {
       if (ConvertUtil.IsNumeric(v)) {
         boolVal = ConvertUtil.GetValueDouble(v) != 0;
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/LookupFunctionCompiler.cs b/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/LookupFunctionCompiler.cs
index a350504..de672c1 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/LookupFunctionCompiler.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/FunctionCompilers/LookupFunctionCompiler.cs
@@ -49,7 +49,7 @@
         firstChild = false;
       }
       var arg = child.Compile();
-      BuildFunctionArguments(arg != null ? arg.Result : null, args);
+      BuildFunctionArguments(arg?.Result, args);
     }
     return Function.Execute(args, context);
   }
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/IntegerExpression.cs b/EPPlus/FormulaParsing/ExpressionGraph/IntegerExpression.cs
index 973b523..f24afa0 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/IntegerExpression.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/IntegerExpression.cs
@@ -52,9 +52,7 @@
   }
 
   public override CompileResult Compile() {
-    double result = _compiledValue.HasValue
-        ? _compiledValue.Value
-        : double.Parse(ExpressionString, CultureInfo.InvariantCulture);
+    double result = _compiledValue ?? double.Parse(ExpressionString, CultureInfo.InvariantCulture);
     result = _negate ? result * -1 : result;
     return new(result, DataType.Integer);
   }
diff --git a/EPPlus/FormulaParsing/ExpressionGraph/NamedValueExpression.cs b/EPPlus/FormulaParsing/ExpressionGraph/NamedValueExpression.cs
index 080f8a0..cdf7582 100644
--- a/EPPlus/FormulaParsing/ExpressionGraph/NamedValueExpression.cs
+++ b/EPPlus/FormulaParsing/ExpressionGraph/NamedValueExpression.cs
@@ -53,10 +53,9 @@
     if (name.Value == null) {
       return null;
     }
-    if (name.Value is ExcelDataProvider.IRangeInfo) {
-      var range = (ExcelDataProvider.IRangeInfo)name.Value;
+    if (name.Value is ExcelDataProvider.IRangeInfo range) {
       if (range.IsMulti) {
-        return new(name.Value, DataType.Enumerable);
+        return new(range, DataType.Enumerable);
       }
       if (range.IsEmpty) {
         return null;
diff --git a/EPPlus/FormulaParsing/FormulaParser.cs b/EPPlus/FormulaParsing/FormulaParser.cs
index faa0536..06bd4a6 100644
--- a/EPPlus/FormulaParsing/FormulaParser.cs
+++ b/EPPlus/FormulaParsing/FormulaParser.cs
@@ -80,9 +80,8 @@
 
   public ILexer Lexer => _lexer;
 
-  public IEnumerable<string> FunctionNames {
-    get { return _parsingContext.Configuration.FunctionRepository.FunctionNames; }
-  }
+  public IEnumerable<string> FunctionNames =>
+    _parsingContext.Configuration.FunctionRepository.FunctionNames;
 
   internal virtual object Parse(string formula, RangeAddress rangeAddress) {
     using (var scope = _parsingContext.Scopes.NewScope(rangeAddress)) {
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/SourceCodeTokenizer.cs b/EPPlus/FormulaParsing/LexicalAnalysis/SourceCodeTokenizer.cs
index 01e9bf9..51f6f4b 100644
--- a/EPPlus/FormulaParsing/LexicalAnalysis/SourceCodeTokenizer.cs
+++ b/EPPlus/FormulaParsing/LexicalAnalysis/SourceCodeTokenizer.cs
@@ -71,8 +71,7 @@
     bool isSingleQuoteString = false;
     for (int i = 0; i < context.FormulaChars.Length; i++) {
       var c = context.FormulaChars[i];
-      Token tokenSeparator;
-      if (CharIsTokenSeparator(c, out tokenSeparator)) {
+      if (CharIsTokenSeparator(c, out var tokenSeparator)) {
         if (context.IsInString) {
           if (IsDoubleQuote(tokenSeparator, i, context)) {
             i++;
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenFactory.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenFactory.cs
index 96c87a3..6ba0d9b 100644
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenFactory.cs
+++ b/EPPlus/FormulaParsing/LexicalAnalysis/TokenFactory.cs
@@ -64,8 +64,7 @@
   }
 
   public Token Create(IEnumerable<Token> tokens, string token, string worksheet) {
-    Token tokenSeparator = null;
-    if (_tokenSeparatorProvider.Tokens.TryGetValue(token, out tokenSeparator)) {
+    if (_tokenSeparatorProvider.Tokens.TryGetValue(token, out var tokenSeparator)) {
       return tokenSeparator;
     }
     var tokenList = (IList<Token>)tokens;
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenHandler.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenHandler.cs
deleted file mode 100644
index 8c2a271..0000000
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenHandler.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-/*******************************************************************************
- * You may amend and distribute as you like, but don't remove this header!
- *
- * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
- * See http://www.codeplex.com/EPPlus for details.
- *
- * Copyright (C) 2011  Jan Källman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
- * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
- *
- * All code and executables are provided "as is" with no warranty either express or implied.
- * The author accepts no liability for any damage or loss of business that this product may cause.
- *
- * Code change notes:
- *
- * Author							Change						Date
- * ******************************************************************************
- * Mats Alm   		                Added       		        2015-12-28
- *******************************************************************************/
-using System.Text.RegularExpressions;
-using OfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers;
-
-namespace OfficeOpenXml.FormulaParsing.LexicalAnalysis {
-  public class TokenHandler : ITokenIndexProvider {
-    public TokenHandler(
-        TokenizerContext context,
-        ITokenFactory tokenFactory,
-        ITokenSeparatorProvider tokenProvider) {
-      _context = context;
-      _tokenFactory = tokenFactory;
-      _tokenProvider = tokenProvider;
-    }
-
-    private readonly TokenizerContext _context;
-    private readonly ITokenSeparatorProvider _tokenProvider;
-    private readonly ITokenFactory _tokenFactory;
-    private int _tokenIndex = -1;
-
-    public string Worksheet { get; set; }
-
-    public bool HasMore() {
-      return _tokenIndex < (_context.FormulaChars.Length - 1);
-    }
-
-    public void Next() {
-      _tokenIndex++;
-      Handle();
-    }
-
-    private void Handle() {
-      var c = _context.FormulaChars[_tokenIndex];
-      Token tokenSeparator;
-      if (CharIsTokenSeparator(c, out tokenSeparator)) {
-        if (TokenSeparatorHandler.Handle(c, tokenSeparator, _context, this)) {
-          return;
-        }
-
-        if (_context.CurrentTokenHasValue) {
-          if (Regex.IsMatch(_context.CurrentToken, "^\"*$")) {
-            _context.AddToken(_tokenFactory.Create(_context.CurrentToken, TokenType.StringContent));
-          } else {
-            _context.AddToken(CreateToken(_context, Worksheet));
-          }
-
-          //If the a next token is an opening parantheses and the previous token is interpeted as an address or name, then the currenct token is a function
-          if (tokenSeparator.TokenType == TokenType.OpeningParenthesis
-              && (_context.LastToken.TokenType == TokenType.ExcelAddress
-                      || _context.LastToken.TokenType == TokenType.NameValue)) {
-            _context.LastToken.TokenType = TokenType.Function;
-          }
-        }
-        if (tokenSeparator.Value == "-") {
-          if (TokenIsNegator(_context)) {
-            _context.AddToken(new Token("-", TokenType.Negator));
-            return;
-          }
-        }
-        _context.AddToken(tokenSeparator);
-        _context.NewToken();
-        return;
-      }
-      _context.AppendToCurrentToken(c);
-    }
-
-    private bool CharIsTokenSeparator(char c, out Token token) {
-      var result = _tokenProvider.Tokens.ContainsKey(c.ToString());
-      token = result ? token = _tokenProvider.Tokens[c.ToString()] : null;
-      return result;
-    }
-
-    private static bool TokenIsNegator(TokenizerContext context) {
-      return TokenIsNegator(context.LastToken);
-    }
-
-    private static bool TokenIsNegator(Token t) {
-      return t == null
-          || t.TokenType == TokenType.Operator
-          || t.TokenType == TokenType.OpeningParenthesis
-          || t.TokenType == TokenType.Comma
-          || t.TokenType == TokenType.SemiColon
-          || t.TokenType == TokenType.OpeningEnumerable;
-    }
-
-    private Token CreateToken(TokenizerContext context, string worksheet) {
-      if (context.CurrentToken == "-") {
-        if (context.LastToken == null && context.LastToken.TokenType == TokenType.Operator) {
-          return new Token("-", TokenType.Negator);
-        }
-      }
-      return _tokenFactory.Create(context.Result, context.CurrentToken, worksheet);
-    }
-
-    int ITokenIndexProvider.Index {
-      get { return _tokenIndex; }
-    }
-
-    void ITokenIndexProvider.MoveIndexPointerForward() {
-      _tokenIndex++;
-    }
-  }
-}
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/BracketHandler.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/BracketHandler.cs
deleted file mode 100644
index ea4236a..0000000
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/BracketHandler.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * You may amend and distribute as you like, but don't remove this header!
- *
- * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
- * See http://www.codeplex.com/EPPlus for details.
- *
- * Copyright (C) 2011  Jan Källman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
- * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
- *
- * All code and executables are provided "as is" with no warranty either express or implied.
- * The author accepts no liability for any damage or loss of business that this product may cause.
- *
- * Code change notes:
- *
- * Author							Change						Date
- * ******************************************************************************
- * Mats Alm   		                Added       		        2015-12-28
- *******************************************************************************/
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace OfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers {
-  public class BracketHandler : SeparatorHandler {
-    public override bool Handle(
-        char c,
-        Token tokenSeparator,
-        TokenizerContext context,
-        ITokenIndexProvider tokenIndexProvider) {
-      if (tokenSeparator.TokenType == TokenType.OpeningBracket) {
-        context.AppendToCurrentToken(c);
-        context.BracketCount++;
-        return true;
-      }
-      if (tokenSeparator.TokenType == TokenType.ClosingBracket) {
-        context.AppendToCurrentToken(c);
-        context.BracketCount--;
-        return true;
-      }
-      if (context.BracketCount > 0) {
-        context.AppendToCurrentToken(c);
-        return true;
-      }
-      return false;
-    }
-  }
-}
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/MultipleCharSeparatorHandler.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/MultipleCharSeparatorHandler.cs
deleted file mode 100644
index dc02369..0000000
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/MultipleCharSeparatorHandler.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * You may amend and distribute as you like, but don't remove this header!
- *
- * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
- * See http://www.codeplex.com/EPPlus for details.
- *
- * Copyright (C) 2011  Jan Källman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
- * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
- *
- * All code and executables are provided "as is" with no warranty either express or implied.
- * The author accepts no liability for any damage or loss of business that this product may cause.
- *
- * Code change notes:
- *
- * Author							Change						Date
- * ******************************************************************************
- * Mats Alm   		                Added       		        2015-12-28
- *******************************************************************************/
-using System;
-using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
-using System.Text;
-
-namespace OfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers {
-  public class MultipleCharSeparatorHandler : SeparatorHandler {
-    ITokenSeparatorProvider _tokenSeparatorProvider;
-
-    public MultipleCharSeparatorHandler()
-        : this(new TokenSeparatorProvider()) {}
-
-    public MultipleCharSeparatorHandler(ITokenSeparatorProvider tokenSeparatorProvider) {
-      _tokenSeparatorProvider = tokenSeparatorProvider;
-    }
-
-    public override bool Handle(
-        char c,
-        Token tokenSeparator,
-        TokenizerContext context,
-        ITokenIndexProvider tokenIndexProvider) {
-      // two operators in sequence could be "<=" or ">="
-      if (IsPartOfMultipleCharSeparator(context, c)) {
-        var sOp = context.LastToken.Value + c.ToString(CultureInfo.InvariantCulture);
-        var op = _tokenSeparatorProvider.Tokens[sOp];
-        context.ReplaceLastToken(op);
-        context.NewToken();
-        return true;
-      }
-      return false;
-    }
-
-    private bool IsPartOfMultipleCharSeparator(TokenizerContext context, char c) {
-      var lastToken = context.LastToken != null ? context.LastToken.Value : string.Empty;
-      return _tokenSeparatorProvider.IsOperator(lastToken)
-          && _tokenSeparatorProvider.IsPossibleLastPartOfMultipleCharOperator(
-              c.ToString(CultureInfo.InvariantCulture))
-          && !context.CurrentTokenHasValue;
-    }
-  }
-}
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/SeparatorHandler.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/SeparatorHandler.cs
deleted file mode 100644
index 702a12d..0000000
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/SeparatorHandler.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * You may amend and distribute as you like, but don't remove this header!
- *
- * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
- * See http://www.codeplex.com/EPPlus for details.
- *
- * Copyright (C) 2011  Jan Källman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
- * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
- *
- * All code and executables are provided "as is" with no warranty either express or implied.
- * The author accepts no liability for any damage or loss of business that this product may cause.
- *
- * Code change notes:
- *
- * Author							Change						Date
- * ******************************************************************************
- * Mats Alm   		                Added       		        2015-12-28
- *******************************************************************************/
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace OfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers {
-  public abstract class SeparatorHandler {
-    protected bool IsDoubleQuote(
-        Token tokenSeparator,
-        int formulaCharIndex,
-        TokenizerContext context) {
-      return tokenSeparator.TokenType == TokenType.String
-          && formulaCharIndex + 1 < context.FormulaChars.Length
-          && context.FormulaChars[formulaCharIndex + 1] == '\"';
-    }
-
-    public abstract bool Handle(
-        char c,
-        Token tokenSeparator,
-        TokenizerContext context,
-        ITokenIndexProvider tokenIndexProvider);
-  }
-}
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/SheetnameHandler.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/SheetnameHandler.cs
deleted file mode 100644
index f435fb3..0000000
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/SheetnameHandler.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * You may amend and distribute as you like, but don't remove this header!
- *
- * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
- * See http://www.codeplex.com/EPPlus for details.
- *
- * Copyright (C) 2011  Jan Källman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
- * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
- *
- * All code and executables are provided "as is" with no warranty either express or implied.
- * The author accepts no liability for any damage or loss of business that this product may cause.
- *
- * Code change notes:
- *
- * Author							Change						Date
- * ******************************************************************************
- * Mats Alm   		                Added       		        2015-12-28
- *******************************************************************************/
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace OfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers {
-  public class SheetnameHandler : SeparatorHandler {
-    public override bool Handle(
-        char c,
-        Token tokenSeparator,
-        TokenizerContext context,
-        ITokenIndexProvider tokenIndexProvider) {
-      if (context.IsInSheetName) {
-        if (IsDoubleQuote(tokenSeparator, tokenIndexProvider.Index, context)) {
-          tokenIndexProvider.MoveIndexPointerForward();
-          context.AppendToCurrentToken(c);
-          return true;
-        }
-        if (tokenSeparator.TokenType != TokenType.WorksheetName) {
-          context.AppendToCurrentToken(c);
-          return true;
-        }
-      }
-
-      if (tokenSeparator.TokenType == TokenType.WorksheetName) {
-        if (context.LastToken != null && context.LastToken.TokenType == TokenType.WorksheetName) {
-          context.AddToken(
-              !context.CurrentTokenHasValue
-                  ? new Token(string.Empty, TokenType.WorksheetNameContent)
-                  : new Token(context.CurrentToken, TokenType.WorksheetNameContent));
-        }
-        context.AddToken(new Token("'", TokenType.WorksheetName));
-        context.ToggleIsInSheetName();
-        context.NewToken();
-        return true;
-      }
-      return false;
-    }
-  }
-}
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/StringHandler.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/StringHandler.cs
deleted file mode 100644
index 2ef629c..0000000
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/StringHandler.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * You may amend and distribute as you like, but don't remove this header!
- *
- * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
- * See http://www.codeplex.com/EPPlus for details.
- *
- * Copyright (C) 2011  Jan Källman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
- * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
- *
- * All code and executables are provided "as is" with no warranty either express or implied.
- * The author accepts no liability for any damage or loss of business that this product may cause.
- *
- * Code change notes:
- *
- * Author							Change						Date
- * ******************************************************************************
- * Mats Alm   		                Added       		        2015-12-28
- *******************************************************************************/
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace OfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers {
-  public class StringHandler : SeparatorHandler {
-    public override bool Handle(
-        char c,
-        Token tokenSeparator,
-        TokenizerContext context,
-        ITokenIndexProvider tokenIndexProvider) {
-      if (context.IsInString) {
-        if (IsDoubleQuote(tokenSeparator, tokenIndexProvider.Index, context)) {
-          tokenIndexProvider.MoveIndexPointerForward();
-          context.AppendToCurrentToken(c);
-          return true;
-        }
-        if (tokenSeparator.TokenType != TokenType.String) {
-          context.AppendToCurrentToken(c);
-          return true;
-        }
-      }
-
-      if (tokenSeparator.TokenType == TokenType.String) {
-        if (context.LastToken != null
-            && context.LastToken.TokenType == TokenType.OpeningEnumerable) {
-          context.AppendToCurrentToken(c);
-          context.ToggleIsInString();
-          return true;
-        }
-        if (context.LastToken != null && context.LastToken.TokenType == TokenType.String) {
-          context.AddToken(
-              !context.CurrentTokenHasValue
-                  ? new Token(string.Empty, TokenType.StringContent)
-                  : new Token(context.CurrentToken, TokenType.StringContent));
-        }
-        context.AddToken(new Token("\"", TokenType.String));
-        context.ToggleIsInString();
-        context.NewToken();
-        return true;
-      }
-      return false;
-    }
-  }
-}
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/TokenSeparatorHandler.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/TokenSeparatorHandler.cs
deleted file mode 100644
index 8afb997..0000000
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorHandlers/TokenSeparatorHandler.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * You may amend and distribute as you like, but don't remove this header!
- *
- * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
- * See http://www.codeplex.com/EPPlus for details.
- *
- * Copyright (C) 2011  Jan Källman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
- * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
- *
- * All code and executables are provided "as is" with no warranty either express or implied.
- * The author accepts no liability for any damage or loss of business that this product may cause.
- *
- * Code change notes:
- *
- * Author							Change						Date
- * ******************************************************************************
- * Mats Alm   		                Added       		        2015-12-28
- *******************************************************************************/
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace OfficeOpenXml.FormulaParsing.LexicalAnalysis.TokenSeparatorHandlers {
-  /// <summary>
-  /// This class provides access to <see cref="SeparatorHandler"/>s - classes that exposes functionatlity
-  /// needed when parsing strings to tokens.
-  /// </summary>
-  public static class TokenSeparatorHandler {
-    private static SeparatorHandler[] _handlers = new SeparatorHandler[] {
-      new StringHandler(),
-      new BracketHandler(),
-      new SheetnameHandler(),
-      new MultipleCharSeparatorHandler(),
-    };
-
-    /// <summary>
-    /// Handles a tokenseparator.
-    /// </summary>
-    /// <param name="c"></param>
-    /// <param name="tokenSeparator"></param>
-    /// <param name="context"></param>
-    /// <param name="tokenIndexProvider"></param>
-    /// <returns>Returns true if the tokenseparator was handled.</returns>
-    public static bool Handle(
-        char c,
-        Token tokenSeparator,
-        TokenizerContext context,
-        ITokenIndexProvider tokenIndexProvider) {
-      foreach (var handler in _handlers) {
-        if (handler.Handle(c, tokenSeparator, context, tokenIndexProvider)) {
-          return true;
-        }
-      }
-      return false;
-    }
-  }
-}
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorProvider.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorProvider.cs
index cddd2f3..337f2a2 100644
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorProvider.cs
+++ b/EPPlus/FormulaParsing/LexicalAnalysis/TokenSeparatorProvider.cs
@@ -66,8 +66,7 @@
   IDictionary<string, Token> ITokenSeparatorProvider.Tokens => _tokens;
 
   public bool IsOperator(string item) {
-    Token token;
-    if (_tokens.TryGetValue(item, out token)) {
+    if (_tokens.TryGetValue(item, out var token)) {
       if (token.TokenType == TokenType.Operator) {
         return true;
       }
diff --git a/EPPlus/FormulaParsing/LexicalAnalysis/TokenizerContext.cs b/EPPlus/FormulaParsing/LexicalAnalysis/TokenizerContext.cs
index 34fc6f2..ef9c31a 100644
--- a/EPPlus/FormulaParsing/LexicalAnalysis/TokenizerContext.cs
+++ b/EPPlus/FormulaParsing/LexicalAnalysis/TokenizerContext.cs
@@ -1,4 +1,4 @@
-/*******************************************************************************
+/*******************************************************************************
  * You may amend and distribute as you like, but don't remove this header!
  *
  * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
@@ -50,9 +50,7 @@
 
   public char[] FormulaChars => _chars;
 
-  public IList<Token> Result {
-    get { return _result; }
-  }
+  public IList<Token> Result => _result;
 
   public bool IsInString { get; private set; }
 
@@ -62,13 +60,10 @@
 
   internal int BracketCount { get; set; }
 
-  public string CurrentToken {
-    get { return _currentToken.ToString(); }
-  }
+  public string CurrentToken => _currentToken.ToString();
 
-  public bool CurrentTokenHasValue {
-    get { return !string.IsNullOrEmpty(IsInString ? CurrentToken : CurrentToken.Trim()); }
-  }
+  public bool CurrentTokenHasValue =>
+    !string.IsNullOrEmpty(IsInString ? CurrentToken : CurrentToken.Trim());
 
   public void NewToken() {
     _currentToken = new();
@@ -98,7 +93,5 @@
     _result.Add(newToken);
   }
 
-  public Token LastToken {
-    get { return _result.Count > 0 ? _result.Last() : null; }
-  }
+  public Token LastToken => _result.Count > 0 ? _result.Last() : null;
 }
diff --git a/EPPlus/OfficeProperties.cs b/EPPlus/OfficeProperties.cs
index d18b047..1b0a6be 100644
--- a/EPPlus/OfficeProperties.cs
+++ b/EPPlus/OfficeProperties.cs
@@ -204,12 +204,10 @@
   /// Gets/sets the created property of the document (core property)
   /// </summary>
   public DateTime Created {
-    get {
-      DateTime date;
-      return DateTime.TryParse(_coreHelper.GetXmlNodeString(_createdPath), out date)
+    get =>
+      DateTime.TryParse(_coreHelper.GetXmlNodeString(_createdPath), out var date)
           ? date
           : DateTime.MinValue;
-    }
     set {
       var dateString = value.ToUniversalTime().ToString("s", CultureInfo.InvariantCulture) + "Z";
       _coreHelper.SetXmlNodeString(_createdPath, dateString);
@@ -312,12 +310,10 @@
   /// Gets/sets the modified property of the document (core property)
   /// </summary>
   public DateTime Modified {
-    get {
-      DateTime date;
-      return DateTime.TryParse(_coreHelper.GetXmlNodeString(_modifiedPath), out date)
+    get =>
+      DateTime.TryParse(_coreHelper.GetXmlNodeString(_modifiedPath), out var date)
           ? date
           : DateTime.MinValue;
-    }
     set {
       var dateString = value.ToUniversalTime().ToString("s", CultureInfo.InvariantCulture) + "Z";
       _coreHelper.SetXmlNodeString(_modifiedPath, dateString);
@@ -325,16 +321,6 @@
     }
   }
 
-  private string GetExtendedPropertyValue(string propertyName) {
-    string retValue = null;
-    string searchString = string.Format("xp:Properties/xp:{0}", propertyName);
-    XmlNode node = ExtendedPropertiesXml.SelectSingleNode(searchString, NameSpaceManager);
-    if (node != null) {
-      retValue = node.InnerText;
-    }
-    return retValue;
-  }
-
   /// <summary>
   /// Provides access to the XML document which holds the document's custom properties
   /// </summary>
@@ -367,20 +353,17 @@
       string value = node.LastChild.InnerText;
       switch (node.LastChild.LocalName) {
         case "filetime":
-          DateTime dt;
-          if (DateTime.TryParse(value, out dt)) {
+          if (DateTime.TryParse(value, out var dt)) {
             return dt;
           }
           return null;
         case "i4":
-          int i;
-          if (int.TryParse(value, out i)) {
+          if (int.TryParse(value, out var i)) {
             return i;
           }
           return null;
         case "r8":
-          double d;
-          if (double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out d)) {
+          if (double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out var d)) {
             return d;
           }
           return null;
@@ -437,20 +420,20 @@
     if (value is bool) {
       valueElem = CustomPropertiesXml.CreateElement("vt", "bool", ExcelPackage._schemaVt);
       valueElem.InnerText = value.ToString().ToLower(CultureInfo.InvariantCulture);
-    } else if (value is DateTime) {
+    } else if (value is DateTime time) {
       valueElem = CustomPropertiesXml.CreateElement("vt", "filetime", ExcelPackage._schemaVt);
-      valueElem.InnerText = ((DateTime)value).AddHours(-1).ToString("yyyy-MM-ddTHH:mm:ssZ");
+      valueElem.InnerText = time.AddHours(-1).ToString("yyyy-MM-ddTHH:mm:ssZ");
     } else if (value is short || value is int) {
       valueElem = CustomPropertiesXml.CreateElement("vt", "i4", ExcelPackage._schemaVt);
       valueElem.InnerText = value.ToString();
     } else if (value is double || value is decimal || value is float || value is long) {
       valueElem = CustomPropertiesXml.CreateElement("vt", "r8", ExcelPackage._schemaVt);
-      if (value is double) {
-        valueElem.InnerText = ((double)value).ToString(CultureInfo.InvariantCulture);
-      } else if (value is float) {
-        valueElem.InnerText = ((float)value).ToString(CultureInfo.InvariantCulture);
-      } else if (value is decimal) {
-        valueElem.InnerText = ((decimal)value).ToString(CultureInfo.InvariantCulture);
+      if (value is double d) {
+        valueElem.InnerText = d.ToString(CultureInfo.InvariantCulture);
+      } else if (value is float f) {
+        valueElem.InnerText = f.ToString(CultureInfo.InvariantCulture);
+      } else if (value is decimal value1) {
+        valueElem.InnerText = value1.ToString(CultureInfo.InvariantCulture);
       } else {
         valueElem.InnerText = value.ToString();
       }
diff --git a/EPPlus/OpenOfficeXml.snk b/EPPlus/OpenOfficeXml.snk
deleted file mode 100644
index a8067be..0000000
--- a/EPPlus/OpenOfficeXml.snk
+++ /dev/null
Binary files differ
diff --git a/EPPlus/Packaging/ZipPackageRelationshipBase.cs b/EPPlus/Packaging/ZipPackageRelationshipBase.cs
index 6c0411f..882358e 100644
--- a/EPPlus/Packaging/ZipPackageRelationshipBase.cs
+++ b/EPPlus/Packaging/ZipPackageRelationshipBase.cs
@@ -46,8 +46,7 @@
 
   protected void UpdateMaxRId(string id, ref int maxRId) {
     if (id.StartsWith("rId")) {
-      int num;
-      if (int.TryParse(id.Substring(3), out num)) {
+      if (int.TryParse(id.Substring(3), out var num)) {
         if (num == maxRId - 1) {
           maxRId--;
         }
@@ -108,8 +107,7 @@
         rel.SourceUri = new(source, UriKind.Relative);
       }
       if (rel.Id.StartsWith("rid", StringComparison.InvariantCultureIgnoreCase)) {
-        int id;
-        if (int.TryParse(rel.Id.Substring(3), out id)) {
+        if (int.TryParse(rel.Id.Substring(3), out var id)) {
           if (id >= maxRId
               && id
                   < int.MaxValue
diff --git a/EPPlus/Packaging/ZipPackageRelationshipCollection.cs b/EPPlus/Packaging/ZipPackageRelationshipCollection.cs
index dab1030..f828f61 100644
--- a/EPPlus/Packaging/ZipPackageRelationshipCollection.cs
+++ b/EPPlus/Packaging/ZipPackageRelationshipCollection.cs
@@ -91,7 +91,5 @@
     writer.Write("</Relationships>");
   }
 
-  public int Count {
-    get { return _rels.Count; }
-  }
+  public int Count => _rels.Count;
 }
diff --git a/EPPlus/Properties/AssemblyInfo.cs b/EPPlus/Properties/AssemblyInfo.cs
deleted file mode 100644
index 2fc9137..0000000
--- a/EPPlus/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * You may amend and distribute as you like, but don't remove this header!
- *
- * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
- * See http://www.codeplex.com/EPPlus for details.
- *
- * Copyright (C) 2011  Jan Källman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
- * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
- *
- * All code and executables are provided "as is" with no warranty either express or implied.
- * The author accepts no liability for any damage or loss of business that this product may cause.
- *
- * Code change notes:
- *
- * Author							Change						Date
- *******************************************************************************
- * Jan Källman		Added		10-SEP-2009
- * Jan Källman		License changed GPL-->LGPL 2011-12-27
- *******************************************************************************/
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Security;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("EPPlus 4.0.4")]
-[assembly: AssemblyDescription(
-    "Allows Excel files(xlsx;xlsm) to be created on the server. See epplus.codeplex.com")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("EPPlus")]
-[assembly: AssemblyProduct("EPPlus 4.0.4")]
-[assembly: AssemblyCopyright(
-    "Copyright 2009- ©Jan Källman. Parts of the Interface comes from ExcelPackage-project")]
-[assembly: AssemblyTrademark("The GNU Lesser General Public License (LGPL)")]
-[assembly: AssemblyCulture("")]
-[assembly: ComVisible(false)]
-[assembly: InternalsVisibleTo(
-    "EPPlusTest, PublicKey=00240000048000009400000006020000002400005253413100040000010001001dd11308ec93a6ebcec727e183a8972dc6f95c23ecc34aa04f40cbfc9c17b08b4a0ea5c00dcd203bace44d15a30ce8796e38176ae88e960ceff9cc439ab938738ba0e603e3d155fc298799b391c004fc0eb4393dd254ce25db341eb43303e4c488c9500e126f1288594f0710ec7d642e9c72e76dd860649f1c48249c00e31fba")]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("9dd43b8d-c4fe-4a8b-ad6e-47ef83bbbb01")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("4.0.4.0")]
-[assembly: AssemblyFileVersion("4.0.4.0")]
-[assembly: AllowPartiallyTrustedCallers]
diff --git a/EPPlus/RangeCollection.cs b/EPPlus/RangeCollection.cs
index 90fbfb9..5dfb567 100644
--- a/EPPlus/RangeCollection.cs
+++ b/EPPlus/RangeCollection.cs
@@ -101,9 +101,7 @@
   /// </summary>
   /// <param name="index"></param>
   /// <returns></returns>
-  internal IRangeId this[int index] {
-    get { return _cells[_cellIndex[index].ListPointer]; }
-  }
+  internal IRangeId this[int index] => _cells[_cellIndex[index].ListPointer];
 
   internal int Count {
     get { return _cells.Count; }
diff --git a/EPPlus/Style/ExcelParagraphCollection.cs b/EPPlus/Style/ExcelParagraphCollection.cs
index 784c4cc..a74fe57 100644
--- a/EPPlus/Style/ExcelParagraphCollection.cs
+++ b/EPPlus/Style/ExcelParagraphCollection.cs
@@ -71,8 +71,8 @@
   /// <returns></returns>
   public ExcelParagraph Add(string text) {
     XmlDocument doc;
-    if (TopNode is XmlDocument) {
-      doc = TopNode as XmlDocument;
+    if (TopNode is XmlDocument document) {
+      doc = document;
     } else {
       doc = TopNode.OwnerDocument;
     }
diff --git a/EPPlus/Style/ExcelRichTextCollection.cs b/EPPlus/Style/ExcelRichTextCollection.cs
index 0f4e29d..5e87c4b 100644
--- a/EPPlus/Style/ExcelRichTextCollection.cs
+++ b/EPPlus/Style/ExcelRichTextCollection.cs
@@ -90,8 +90,8 @@
   public ExcelRichText Add(string text) {
     ConvertRichtext();
     XmlDocument doc;
-    if (TopNode is XmlDocument) {
-      doc = TopNode as XmlDocument;
+    if (TopNode is XmlDocument document) {
+      doc = document;
     } else {
       doc = TopNode.OwnerDocument;
     }
@@ -161,9 +161,8 @@
       this[0].Size = fnt.Size;
       this[0].UnderLine = fnt.UnderLine;
 
-      int hex;
       if (fnt.Color.Rgb != ""
-          && int.TryParse(fnt.Color.Rgb, NumberStyles.HexNumber, null, out hex)) {
+          && int.TryParse(fnt.Color.Rgb, NumberStyles.HexNumber, null, out var hex)) {
         this[0].Color = Color.FromArgb(hex);
       }
     }
diff --git a/EPPlus/Style/ExcelStyle.cs b/EPPlus/Style/ExcelStyle.cs
index f9ad943..9c2509a 100644
--- a/EPPlus/Style/ExcelStyle.cs
+++ b/EPPlus/Style/ExcelStyle.cs
@@ -190,8 +190,6 @@
           new(eStyleClass.Style, eStyleProperty.Hidden, value, _positionID, _address));
   }
 
-  private const string _xfIdPath = "@xfId";
-
   /// <summary>
   /// The index in the style collection
   /// </summary>
diff --git a/EPPlus/Style/XmlAccess/ExcelBorderXml.cs b/EPPlus/Style/XmlAccess/ExcelBorderXml.cs
index 9a7e12c..9d19974 100644
--- a/EPPlus/Style/XmlAccess/ExcelBorderXml.cs
+++ b/EPPlus/Style/XmlAccess/ExcelBorderXml.cs
@@ -62,8 +62,8 @@
   /// Left border style properties
   /// </summary>
   public ExcelBorderItemXml Left {
-    get { return _left; }
-    internal set { _left = value; }
+    get => _left;
+    internal set => _left = value;
   }
 
   private const string _rightPath = "d:right";
@@ -73,8 +73,8 @@
   /// Right border style properties
   /// </summary>
   public ExcelBorderItemXml Right {
-    get { return _right; }
-    internal set { _right = value; }
+    get => _right;
+    internal set => _right = value;
   }
 
   private const string _topPath = "d:top";
@@ -84,8 +84,8 @@
   /// Top border style properties
   /// </summary>
   public ExcelBorderItemXml Top {
-    get { return _top; }
-    internal set { _top = value; }
+    get => _top;
+    internal set => _top = value;
   }
 
   private const string _bottomPath = "d:bottom";
@@ -95,8 +95,8 @@
   /// Bottom border style properties
   /// </summary>
   public ExcelBorderItemXml Bottom {
-    get { return _bottom; }
-    internal set { _bottom = value; }
+    get => _bottom;
+    internal set => _bottom = value;
   }
 
   private const string _diagonalPath = "d:diagonal";
@@ -106,8 +106,8 @@
   /// Diagonal border style properties
   /// </summary>
   public ExcelBorderItemXml Diagonal {
-    get { return _diagonal; }
-    internal set { _diagonal = value; }
+    get => _diagonal;
+    internal set => _diagonal = value;
   }
 
   private const string _diagonalUpPath = "@diagonalUp";
@@ -117,8 +117,8 @@
   /// Diagonal up border
   /// </summary>
   public bool DiagonalUp {
-    get { return _diagonalUp; }
-    internal set { _diagonalUp = value; }
+    get => _diagonalUp;
+    internal set => _diagonalUp = value;
   }
 
   private const string _diagonalDownPath = "@diagonalDown";
@@ -128,8 +128,8 @@
   /// Diagonal down border
   /// </summary>
   public bool DiagonalDown {
-    get { return _diagonalDown; }
-    internal set { _diagonalDown = value; }
+    get => _diagonalDown;
+    internal set => _diagonalDown = value;
   }
 
   internal ExcelBorderXml Copy() {
diff --git a/EPPlus/Style/XmlAccess/ExcelFontXml.cs b/EPPlus/Style/XmlAccess/ExcelFontXml.cs
index 11b6bb9..88ab554 100644
--- a/EPPlus/Style/XmlAccess/ExcelFontXml.cs
+++ b/EPPlus/Style/XmlAccess/ExcelFontXml.cs
@@ -106,7 +106,7 @@
   /// The name of the font
   /// </summary>
   public string Name {
-    get { return _name; }
+    get => _name;
     set {
       Scheme = ""; //Reset schema to avoid corrupt file if unsupported font is selected.
       _name = value;
@@ -120,8 +120,8 @@
   /// Font size
   /// </summary>
   public float Size {
-    get { return _size; }
-    set { _size = value; }
+    get => _size;
+    set => _size = value;
   }
 
   private const string _familyPath = "d:family/@val";
@@ -131,11 +131,8 @@
   /// Font family
   /// </summary>
   public int Family {
-    get {
-      return (_family == int.MinValue ? 0 : _family);
-      ;
-    }
-    set { _family = value; }
+    get => (_family == int.MinValue ? 0 : _family);
+    set => _family = value;
   }
 
   private ExcelColorXml _color;
@@ -145,8 +142,8 @@
   /// Text color
   /// </summary>
   public ExcelColorXml Color {
-    get { return _color; }
-    internal set { _color = value; }
+    get => _color;
+    internal set => _color = value;
   }
 
   private const string _schemePath = "d:scheme/@val";
@@ -156,8 +153,8 @@
   /// Font Scheme
   /// </summary>
   public string Scheme {
-    get { return _scheme; }
-    private set { _scheme = value; }
+    get => _scheme;
+    private set => _scheme = value;
   }
 
   private const string _boldPath = "d:b";
@@ -167,8 +164,8 @@
   /// If the font is bold
   /// </summary>
   public bool Bold {
-    get { return _bold; }
-    set { _bold = value; }
+    get => _bold;
+    set => _bold = value;
   }
 
   private const string _italicPath = "d:i";
@@ -178,8 +175,8 @@
   /// If the font is italic
   /// </summary>
   public bool Italic {
-    get { return _italic; }
-    set { _italic = value; }
+    get => _italic;
+    set => _italic = value;
   }
 
   private const string _strikePath = "d:strike";
@@ -189,8 +186,8 @@
   /// If the font is striked out
   /// </summary>
   public bool Strike {
-    get { return _strike; }
-    set { _strike = value; }
+    get => _strike;
+    set => _strike = value;
   }
 
   private const string _underLinedPath = "d:u";
@@ -200,8 +197,8 @@
   /// When set to true a the text is underlined with a single line
   /// </summary>
   public bool UnderLine {
-    get { return UnderLineType != ExcelUnderLineType.None; }
-    set { _underlineType = value ? ExcelUnderLineType.Single : ExcelUnderLineType.None; }
+    get => UnderLineType != ExcelUnderLineType.None;
+    set => _underlineType = value ? ExcelUnderLineType.Single : ExcelUnderLineType.None;
   }
 
   private ExcelUnderLineType _underlineType;
@@ -210,8 +207,8 @@
   /// If the font is underlined
   /// </summary>
   public ExcelUnderLineType UnderLineType {
-    get { return _underlineType; }
-    set { _underlineType = value; }
+    get => _underlineType;
+    set => _underlineType = value;
   }
 
   private const string _verticalAlignPath = "d:vertAlign/@val";
@@ -221,8 +218,8 @@
   /// Vertical aligned
   /// </summary>
   public string VerticalAlign {
-    get { return _verticalAlign; }
-    set { _verticalAlign = value; }
+    get => _verticalAlign;
+    set => _verticalAlign = value;
   }
 
   public void SetFromFont(Font font) {
diff --git a/EPPlus/Style/XmlAccess/ExcelNumberFormatXml.cs b/EPPlus/Style/XmlAccess/ExcelNumberFormatXml.cs
index 0d0b46f..6e5d10d 100644
--- a/EPPlus/Style/XmlAccess/ExcelNumberFormatXml.cs
+++ b/EPPlus/Style/XmlAccess/ExcelNumberFormatXml.cs
@@ -103,7 +103,6 @@
 
   internal override string Id => _format;
 
-  private const string _fmtPath = "@formatCode";
   private string _format = string.Empty;
 
   public string Format {
@@ -603,8 +602,7 @@
 
       string[] fmt = FractionFormat.Split('/');
 
-      int fixedDenominator;
-      if (!int.TryParse(fmt[1], out fixedDenominator)) {
+      if (!int.TryParse(fmt[1], out var fixedDenominator)) {
         fixedDenominator = 0;
       }
 
diff --git a/EPPlus/Table/ExcelTable.cs b/EPPlus/Table/ExcelTable.cs
index 0b9144a..2438154 100644
--- a/EPPlus/Table/ExcelTable.cs
+++ b/EPPlus/Table/ExcelTable.cs
@@ -358,7 +358,6 @@
   }
 
   private const string _totalsrowcountPath = "@totalsRowCount";
-  private const string _totalsrowshownPath = "@totalsRowShown";
 
   /// <summary>
   /// If the total row is visible or not
diff --git a/EPPlus/Table/PivotTable/ExcelPivotTable.cs b/EPPlus/Table/PivotTable/ExcelPivotTable.cs
index 75c6360..6ea4244 100644
--- a/EPPlus/Table/PivotTable/ExcelPivotTable.cs
+++ b/EPPlus/Table/PivotTable/ExcelPivotTable.cs
@@ -62,8 +62,7 @@
 
     //Add row fields.
     foreach (XmlElement rowElem in TopNode.SelectNodes("d:rowFields/d:field", NameSpaceManager)) {
-      int x;
-      if (int.TryParse(rowElem.GetAttribute("x"), out x) && x >= 0) {
+      if (int.TryParse(rowElem.GetAttribute("x"), out var x) && x >= 0) {
         RowFields.AddInternal(Fields[x]);
       } else {
         rowElem.ParentNode.RemoveChild(rowElem);
@@ -72,8 +71,7 @@
 
     ////Add column fields.
     foreach (XmlElement colElem in TopNode.SelectNodes("d:colFields/d:field", NameSpaceManager)) {
-      int x;
-      if (int.TryParse(colElem.GetAttribute("x"), out x) && x >= 0) {
+      if (int.TryParse(colElem.GetAttribute("x"), out var x) && x >= 0) {
         ColumnFields.AddInternal(Fields[x]);
       } else {
         colElem.ParentNode.RemoveChild(colElem);
@@ -85,8 +83,7 @@
     foreach (XmlElement pageElem in TopNode.SelectNodes(
         "d:pageFields/d:pageField",
         NameSpaceManager)) {
-      int fld;
-      if (int.TryParse(pageElem.GetAttribute("fld"), out fld) && fld >= 0) {
+      if (int.TryParse(pageElem.GetAttribute("fld"), out var fld) && fld >= 0) {
         var field = Fields[fld];
         field._pageFieldSettings = new(NameSpaceManager, pageElem, field, fld);
         PageFields.AddInternal(field);
@@ -98,8 +95,7 @@
     foreach (XmlElement dataElem in TopNode.SelectNodes(
         "d:dataFields/d:dataField",
         NameSpaceManager)) {
-      int fld;
-      if (int.TryParse(dataElem.GetAttribute("fld"), out fld) && fld >= 0) {
+      if (int.TryParse(dataElem.GetAttribute("fld"), out var fld) && fld >= 0) {
         var field = Fields[fld];
         var dataField = new ExcelPivotTableDataField(NameSpaceManager, dataElem, field);
         DataFields.AddInternal(dataField);
diff --git a/EPPlus/Table/PivotTable/ExcelPivotTableField.cs b/EPPlus/Table/PivotTable/ExcelPivotTableField.cs
index 654ab71..9869a11 100644
--- a/EPPlus/Table/PivotTable/ExcelPivotTableField.cs
+++ b/EPPlus/Table/PivotTable/ExcelPivotTableField.cs
@@ -507,8 +507,7 @@
         newElement;
     foreach (XmlElement field in rowsNode.ChildNodes) {
       string x = field.GetAttribute(indexAttrText);
-      int fieldIndex;
-      if (int.TryParse(x, out fieldIndex)) {
+      if (int.TryParse(x, out var fieldIndex)) {
         if (fieldIndex
             == index) //Row already exists
         {
@@ -955,10 +954,9 @@
         rowColFields = TopNode.SelectSingleNode("../../d:colFields", NameSpaceManager);
       }
 
-      int fieldIndex,
-          index = 0;
+      var index = 0;
       foreach (XmlElement rowfield in rowColFields.ChildNodes) {
-        if (int.TryParse(rowfield.GetAttribute("x"), out fieldIndex)) {
+        if (int.TryParse(rowfield.GetAttribute("x"), out var fieldIndex)) {
           if (_table.Fields[fieldIndex].BaseIndex == BaseIndex) {
             var newElement = rowColFields.OwnerDocument.CreateElement(
                 "field",
diff --git a/EPPlus/Table/PivotTable/ExcelPivotTableFieldCollection.cs b/EPPlus/Table/PivotTable/ExcelPivotTableFieldCollection.cs
index e60e735..5f7053d 100644
--- a/EPPlus/Table/PivotTable/ExcelPivotTableFieldCollection.cs
+++ b/EPPlus/Table/PivotTable/ExcelPivotTableFieldCollection.cs
@@ -105,8 +105,7 @@
   /// <returns>The matching field. If none is found null is returned</returns>
   public ExcelPivotTableField GetDateGroupField(eDateGroupBy groupBy) {
     foreach (var fld in _list) {
-      if (fld.Grouping is ExcelPivotTableFieldDateGroup
-          && (((ExcelPivotTableFieldDateGroup)fld.Grouping).GroupBy) == groupBy) {
+      if (fld.Grouping is ExcelPivotTableFieldDateGroup group && (group.GroupBy) == groupBy) {
         return fld;
       }
     }
diff --git a/EPPlus/Table/PivotTable/ExcelPivotTableFieldGroup.cs b/EPPlus/Table/PivotTable/ExcelPivotTableFieldGroup.cs
index ea1f9d4..99fbd3c 100644
--- a/EPPlus/Table/PivotTable/ExcelPivotTableFieldGroup.cs
+++ b/EPPlus/Table/PivotTable/ExcelPivotTableFieldGroup.cs
@@ -91,29 +91,19 @@
   /// <summary>
   /// Start value
   /// </summary>
-  public double Start {
-    get => (double)GetXmlNodeDoubleNull(_startPath);
-    private set => SetXmlNodeString(_startPath, value.ToString(CultureInfo.InvariantCulture));
-  }
+  public double Start => (double)GetXmlNodeDoubleNull(_startPath);
 
   private const string _endPath = "d:fieldGroup/d:rangePr/@endNum";
 
   /// <summary>
   /// End value
   /// </summary>
-  public double End {
-    get => (double)GetXmlNodeDoubleNull(_endPath);
-    private set => SetXmlNodeString(_endPath, value.ToString(CultureInfo.InvariantCulture));
-  }
+  public double End => (double)GetXmlNodeDoubleNull(_endPath);
 
   private const string _groupIntervalPath = "d:fieldGroup/d:rangePr/@groupInterval";
 
   /// <summary>
   /// Interval
   /// </summary>
-  public double Interval {
-    get => (double)GetXmlNodeDoubleNull(_groupIntervalPath);
-    private set =>
-      SetXmlNodeString(_groupIntervalPath, value.ToString(CultureInfo.InvariantCulture));
-  }
+  public double Interval => (double)GetXmlNodeDoubleNull(_groupIntervalPath);
 }
diff --git a/EPPlus/Utils/ConvertUtil.cs b/EPPlus/Utils/ConvertUtil.cs
index fddf785..2802caa 100644
--- a/EPPlus/Utils/ConvertUtil.cs
+++ b/EPPlus/Utils/ConvertUtil.cs
@@ -39,10 +39,10 @@
         return 0;
       }
       if (IsNumeric(v)) {
-        if (v is DateTime) {
-          d = ((DateTime)v).ToOADate();
-        } else if (v is TimeSpan) {
-          d = DateTime.FromOADate(0).Add((TimeSpan)v).ToOADate();
+        if (v is DateTime time) {
+          d = time.ToOADate();
+        } else if (v is TimeSpan span) {
+          d = DateTime.FromOADate(0).Add(span).ToOADate();
         } else {
           d = Convert.ToDouble(v, CultureInfo.InvariantCulture);
         }
diff --git a/EPPlus/XmlHelper.cs b/EPPlus/XmlHelper.cs
index 9455242..a958baf 100644
--- a/EPPlus/XmlHelper.cs
+++ b/EPPlus/XmlHelper.cs
@@ -442,8 +442,8 @@
     foreach (string s in split) {
       node = node.SelectSingleNode(s, NameSpaceManager);
       if (node != null) {
-        if (node is XmlAttribute) {
-          (node as XmlAttribute).OwnerElement.Attributes.Remove(node as XmlAttribute);
+        if (node is XmlAttribute attribute) {
+          attribute.OwnerElement.Attributes.Remove(attribute);
         } else {
           node.ParentNode.RemoveChild(node);
         }
@@ -456,8 +456,7 @@
   internal void DeleteNode(string path) {
     var node = TopNode.SelectSingleNode(path, NameSpaceManager);
     if (node != null) {
-      if (node is XmlAttribute) {
-        var att = (XmlAttribute)node;
+      if (node is XmlAttribute att) {
         att.OwnerElement.Attributes.Remove(att);
       } else {
         node.ParentNode.RemoveChild(node);
@@ -515,8 +514,8 @@
     if (value == removeIf) {
       var node = TopNode.SelectSingleNode(path, NameSpaceManager);
       if (node != null) {
-        if (node is XmlAttribute) {
-          var elem = (node as XmlAttribute).OwnerElement;
+        if (node is XmlAttribute attribute) {
+          var elem = attribute.OwnerElement;
           elem.ParentNode.RemoveChild(elem);
         } else {
           TopNode.RemoveChild(node);
@@ -560,41 +559,37 @@
   }
 
   internal int GetXmlNodeInt(string path) {
-    int i;
-    if (int.TryParse(GetXmlNodeString(path), out i)) {
+    if (int.TryParse(GetXmlNodeString(path), out var i)) {
       return i;
     }
     return int.MinValue;
   }
 
   internal int? GetXmlNodeIntNull(string path) {
-    int i;
     string s = GetXmlNodeString(path);
-    if (s != "" && int.TryParse(s, out i)) {
+    if (s != "" && int.TryParse(s, out var i)) {
       return i;
     }
     return null;
   }
 
   internal decimal GetXmlNodeDecimal(string path) {
-    decimal d;
     if (decimal.TryParse(
         GetXmlNodeString(path),
         NumberStyles.Any,
         CultureInfo.InvariantCulture,
-        out d)) {
+        out var d)) {
       return d;
     }
     return 0;
   }
 
   internal decimal? GetXmlNodeDecimalNull(string path) {
-    decimal d;
     if (decimal.TryParse(
         GetXmlNodeString(path),
         NumberStyles.Any,
         CultureInfo.InvariantCulture,
-        out d)) {
+        out var d)) {
       return d;
     }
     return null;
@@ -605,8 +600,7 @@
     if (s == "") {
       return null;
     }
-    double v;
-    if (double.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture, out v)) {
+    if (double.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture, out var v)) {
       return v;
     }
     return null;
@@ -617,8 +611,7 @@
     if (s == "") {
       return double.NaN;
     }
-    double v;
-    if (double.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture, out v)) {
+    if (double.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture, out var v)) {
       return v;
     }
     return double.NaN;
@@ -633,7 +626,7 @@
 
     if (nameNode != null) {
       if (nameNode.NodeType == XmlNodeType.Attribute) {
-        return nameNode.Value != null ? nameNode.Value : "";
+        return nameNode.Value ?? "";
       }
       return nameNode.InnerText;
     }
diff --git a/NetCoreTests/NetCoreTests.csproj b/NetCoreTests/NetCoreTests.csproj
index b5e9414..9af6cc5 100644
--- a/NetCoreTests/NetCoreTests.csproj
+++ b/NetCoreTests/NetCoreTests.csproj
@@ -8,15 +8,9 @@
     <PackageReference Include="MSTest.TestAdapter" Version="2.2.8"/>
     <PackageReference Include="MSTest.TestFramework" Version="2.2.8"/>
     <PackageReference Include="Microsoft.NET.Test.SDK" Version="17.1.0"/>
-    <PackageReference Include="System.Net.Http" Version="4.3.4"/>
-    <PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0"/>
-    <PackageReference Include="System.Text.RegularExpressions" Version="4.3.1"/>
 
     <ProjectReference Include="..\EPPlus\EPPlusSDK.csproj"/>
 
     <None Include="TestWorkbooks/**" CopyToOutputDirectory="PreserveNewest"/>
-
-    <!--Transient dependency; required to address b/230278644-->
-    <PackageReference Include="Newtonsoft.Json" Version="13.0.1"/>
   </ItemGroup>
 </Project>