diff --git a/dumux/common/boundarytypes.hh b/dumux/common/boundarytypes.hh
index 6c14e3e25398a6a792ef375330ea87407640c375..d27dda86f5e33abcae0483a6844327f03ba387d7 100644
--- a/dumux/common/boundarytypes.hh
+++ b/dumux/common/boundarytypes.hh
@@ -59,14 +59,14 @@ public:
      */
     void resetEq(int eqIdx)
     {
-          boundaryInfo_[eqIdx].visited = 0;
+          boundaryInfo_[eqIdx].visited = false;
 
-          boundaryInfo_[eqIdx].isDirichlet = 0;
-          boundaryInfo_[eqIdx].isNeumann = 0;
-          boundaryInfo_[eqIdx].isOutflow = 0;
-          boundaryInfo_[eqIdx].isCouplingDirichlet = 0;
-          boundaryInfo_[eqIdx].isCouplingNeumann = 0;
-          boundaryInfo_[eqIdx].isCouplingMortar = 0;
+          boundaryInfo_[eqIdx].isDirichlet = false;
+          boundaryInfo_[eqIdx].isNeumann = false;
+          boundaryInfo_[eqIdx].isOutflow = false;
+          boundaryInfo_[eqIdx].isCouplingDirichlet = false;
+          boundaryInfo_[eqIdx].isCouplingNeumann = false;
+          boundaryInfo_[eqIdx].isCouplingMortar = false;
 
           eq2pvIdx_[eqIdx] = eqIdx;
           pv2eqIdx_[eqIdx] = eqIdx;
@@ -170,8 +170,8 @@ public:
     void setNeumann(int eqIdx)
     {
         resetEq(eqIdx);
-        boundaryInfo_[eqIdx].visited = 1;
-        boundaryInfo_[eqIdx].isNeumann = 1;
+        boundaryInfo_[eqIdx].visited = true;
+        boundaryInfo_[eqIdx].isNeumann = true;
 
         Valgrind::SetDefined(boundaryInfo_[eqIdx]);
     }
@@ -188,8 +188,8 @@ public:
     void setDirichlet(int pvIdx, int eqIdx)
     {
         resetEq(eqIdx);
-        boundaryInfo_[eqIdx].visited = 1;
-        boundaryInfo_[eqIdx].isDirichlet = 1;
+        boundaryInfo_[eqIdx].visited = true;
+        boundaryInfo_[eqIdx].isDirichlet = true;
 
         // update the equation <-> primary variable mapping
         eq2pvIdx_[eqIdx] = pvIdx;
@@ -208,8 +208,8 @@ public:
     void setOutflow(int eqIdx)
     {
         resetEq(eqIdx);
-        boundaryInfo_[eqIdx].visited = 1;
-        boundaryInfo_[eqIdx].isOutflow = 1;
+        boundaryInfo_[eqIdx].visited = true;
+        boundaryInfo_[eqIdx].isOutflow = true;
 
         Valgrind::SetDefined(boundaryInfo_[eqIdx]);
     }
@@ -221,8 +221,8 @@ public:
     void setCouplingDirichlet(int eqIdx)
     {
         resetEq(eqIdx);
-        boundaryInfo_[eqIdx].visited = 1;
-        boundaryInfo_[eqIdx].isCouplingDirichlet = 1;
+        boundaryInfo_[eqIdx].visited = true;
+        boundaryInfo_[eqIdx].isCouplingDirichlet = true;
 
         Valgrind::SetDefined(boundaryInfo_[eqIdx]);
     }
@@ -234,8 +234,8 @@ public:
     void setCouplingNeumann(int eqIdx)
     {
         resetEq(eqIdx);
-        boundaryInfo_[eqIdx].visited = 1;
-        boundaryInfo_[eqIdx].isCouplingNeumann = 1;
+        boundaryInfo_[eqIdx].visited = true;
+        boundaryInfo_[eqIdx].isCouplingNeumann = true;
 
         Valgrind::SetDefined(boundaryInfo_[eqIdx]);
     }
@@ -247,8 +247,8 @@ public:
     void setCouplingMortar(int eqIdx)
     {
         resetEq(eqIdx);
-        boundaryInfo_[eqIdx].visited = 1;
-        boundaryInfo_[eqIdx].isCouplingMortar = 1;
+        boundaryInfo_[eqIdx].visited = true;
+        boundaryInfo_[eqIdx].isCouplingMortar = true;
 
         Valgrind::SetDefined(boundaryInfo_[eqIdx]);
     }
@@ -444,19 +444,18 @@ public:
     { return eq2pvIdx_[eqIdx]; }
 
 protected:
-    // this is a bitfield structure!
-    struct __attribute__((__packed__)) {
-        unsigned char visited : 1;
-        unsigned char isDirichlet : 1;
-        unsigned char isNeumann : 1;
-        unsigned char isOutflow : 1;
-        unsigned char isCouplingDirichlet : 1;
-        unsigned char isCouplingNeumann : 1;
-        unsigned char isCouplingMortar : 1;
-    } boundaryInfo_[numEq];
-
-    unsigned char eq2pvIdx_[numEq];
-    unsigned char pv2eqIdx_[numEq];
+    struct BoundaryInfo {
+        bool visited;
+        bool isDirichlet;
+        bool isNeumann;
+        bool isOutflow;
+        bool isCouplingDirichlet;
+        bool isCouplingNeumann;
+        bool isCouplingMortar;
+    };
+
+    std::array<BoundaryInfo, numEq> boundaryInfo_;
+    std::array<unsigned int, numEq> eq2pvIdx_, pv2eqIdx_;
 };
 
 }