diff --git a/spm.h b/spm.h
index 8277a83d88c1bb12307abf931b412207fd3c684c..95653c6589c0b9d41f649ad32b5ab32f92b1b863 100644
--- a/spm.h
+++ b/spm.h
@@ -21,18 +21,23 @@
  * @struct pastix_spm_s - Sparse matrix data structure
  */
 struct pastix_spm_s {
-    int           mtxtype;   /*< Matrix structure: PastixGeneral, PastixSymmetric or PastixHermitian.          */
-    int           flttype;   /*< avals datatype: PastixPattern, PastixFloat, PastixDouble, PastixComplex32 or PastixComplex64 */
-    int           fmttype;   /*< Matrix storage format: PastixCSC, PastixCSR, PastixIJV                        */
-    pastix_int_t  gN;        /*< Global number of vertices in the compressed graph   */
-    pastix_int_t  n;         /*< Local number of vertices in the compressed graph    */
-    pastix_int_t  gnnz;      /*< Global number of non zeroes in the compressed graph */
-    pastix_int_t  nnz;       /*< Local number of non zeroes in the compressed graph  */
-    pastix_int_t  dof;       /*< Number of degrees of freedom per unknown            */
-    pastix_int_t *colptr;    /*< List of indirections to rows for each vertex        */
-    pastix_int_t *rowptr;    /*< List of edges for each vertex                       */
-    pastix_int_t *loc2glob;  /*< Corresponding numbering from local to global        */
-    void         *values;    /*< Values stored in the matrix                         */
+    int           mtxtype;   /*< Matrix structure: PastixGeneral, PastixSymmetric
+                                 or PastixHermitian.                                         */
+    int           flttype;   /*< avals datatype: PastixPattern, PastixFloat, PastixDouble,
+                                 PastixComplex32 or PastixComplex64                          */
+    int           fmttype;   /*< Matrix storage format: PastixCSC, PastixCSR, PastixIJV      */
+    pastix_int_t  gN;        /*< Global number of vertices in the compressed graph           */
+    pastix_int_t  n;         /*< Local number of vertices in the compressed graph            */
+    pastix_int_t  gnnz;      /*< Global number of non zeroes in the compressed graph         */
+    pastix_int_t  nnz;       /*< Local number of non zeroes in the compressed graph          */
+    pastix_int_t  dof;       /*< Number of degrees of freedom per unknown,
+                                 if > 0, constant degree of freedom
+                                 otherwise, irregular degree of freedom (refer to dofs)      */
+    pastix_int_t *dofs;      /*< Number of degrees of freedom per unknown (NULL, if dof > 0) */
+    pastix_int_t *colptr;    /*< List of indirections to rows for each vertex                */
+    pastix_int_t *rowptr;    /*< List of edges for each vertex                               */
+    pastix_int_t *loc2glob;  /*< Corresponding numbering from local to global                */
+    void         *values;    /*< Values stored in the matrix                                 */
 };
 
 int
@@ -56,7 +61,6 @@ csc_save( pastix_int_t  n,
 int spmLoad( pastix_spm_t *spm, FILE *infile );
 int spmSave( pastix_spm_t *spm, FILE *outfile );
 
-
 int spmGenRHS(int type, int nrhs, const pastix_spm_t *spm, void *x, int ldx, void *b, int ldb );
 int spmCheckAxb( int nrhs, const pastix_spm_t *spm, void *x0, int ldx0, void *b, int ldb, const void *x, int ldx );