diff --git a/src/Numerics/LinearAlgebra/Storage/Indexers/Static/PackedStorageIndexer.cs b/src/Numerics/LinearAlgebra/Storage/Indexers/Static/PackedStorageIndexer.cs
new file mode 100644
index 00000000..6d4eba54
--- /dev/null
+++ b/src/Numerics/LinearAlgebra/Storage/Indexers/Static/PackedStorageIndexer.cs
@@ -0,0 +1,50 @@
+namespace MathNet.Numerics.LinearAlgebra.Storage.Indexers.Static
+{
+ using System;
+ using Properties;
+
+ ///
+ /// A class for managing indexing when using Packed Storage indexer, which is a column-major packing scheme for dense Symmetric, Hermitian or Triangular square matrices.
+ ///
+ public abstract class PackedStorageIndexer : StaticStorageIndexer
+ {
+ ///
+ /// Number of rows or columns.
+ ///
+ protected readonly int Order;
+
+ ///
+ /// Length of the stored data.
+ ///
+ private readonly int _dataLength;
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// The order of the matrix.
+ ///
+ /// is out of range.
+ protected PackedStorageIndexer(int order)
+ {
+ if (order <= 0)
+ {
+ throw new ArgumentOutOfRangeException(Resources.MatrixRowsOrColumnsMustBePositive);
+ }
+
+ Order = order;
+ _dataLength = order * (order + 1) / 2;
+ }
+
+ ///
+ /// Gets the length of the stored data.
+ ///
+ public override int DataLength
+ {
+ get
+ {
+ return _dataLength;
+ }
+ }
+ }
+}
diff --git a/src/Numerics/Numerics.csproj b/src/Numerics/Numerics.csproj
index 4e1d798f..9d2198d4 100644
--- a/src/Numerics/Numerics.csproj
+++ b/src/Numerics/Numerics.csproj
@@ -142,6 +142,7 @@
+