diff --git a/dumux/common/fixedlengthspline_.hh b/dumux/common/fixedlengthspline_.hh
index 886ea681497b6a79e8563989508c15055a315040..eccb78d1399fc33a3b48da4357bd3334e8eb07be 100644
--- a/dumux/common/fixedlengthspline_.hh
+++ b/dumux/common/fixedlengthspline_.hh
@@ -228,8 +228,8 @@ public:
         typename XYContainer::const_iterator it = points.begin();
         typename XYContainer::const_iterator endIt = points.end();
         for (int i = 0; it != endIt; ++i, ++it) {
-            xPos_[i] = std::tr1::get<0>(*it);
-            yPos_[i] = std::tr1::get<1>(*it);
+            xPos_[i] = std::get<0>(*it);
+            yPos_[i] = std::get<1>(*it);
         }
 
         // make a full spline
@@ -392,8 +392,8 @@ public:
         typename XYContainer::const_iterator it = points.begin();
         typename XYContainer::const_iterator endIt = points.end();
         for (int i = 0; it != endIt; ++i, ++it) {
-            xPos_[i] = std::tr1::get<0>(*it);
-            yPos_[i] = std::tr1::get<1>(*it);
+            xPos_[i] = std::get<0>(*it);
+            yPos_[i] = std::get<1>(*it);
         }
 
         // make a natural spline
diff --git a/dumux/common/splinecommon_.hh b/dumux/common/splinecommon_.hh
index aebcff7055c21baf106a8e8fdd77ccecfcf3073b..634d07b9d35858553ab85a882bd89502bccf92fb 100644
--- a/dumux/common/splinecommon_.hh
+++ b/dumux/common/splinecommon_.hh
@@ -34,6 +34,12 @@
 #include <iostream>
 #include <assert.h>
 
+#if __GNUC__ <= 4 &&  __GNUC_MINOR__ < 5
+namespace std {
+using tr1::get;
+};
+#endif
+
 namespace Dumux
 {
 //! \cond INTERNAL
diff --git a/dumux/common/variablelengthspline_.hh b/dumux/common/variablelengthspline_.hh
index 8a9ac906e95d2908d1e8aa91371a780a27babc52..d0f9a7d5c86b3e618683f41bb99a74d60358b905 100644
--- a/dumux/common/variablelengthspline_.hh
+++ b/dumux/common/variablelengthspline_.hh
@@ -238,8 +238,8 @@ public:
         typename XYContainer::const_iterator it = points.begin();
         typename XYContainer::const_iterator endIt = points.end();
         for (int i = 0; it != endIt; ++i, ++it) {
-            xPos_[i] = std::tr1::get<0>(*it);
-            yPos_[i] = std::tr1::get<1>(*it);
+            xPos_[i] = std::get<0>(*it);
+            yPos_[i] = std::get<1>(*it);
         }
 
         // make a full spline
@@ -409,8 +409,8 @@ public:
         typename XYContainer::const_iterator it = points.begin();
         typename XYContainer::const_iterator endIt = points.end();
         for (int i = 0; it != endIt; ++i, ++it) {
-            xPos_[i] = std::tr1::get<0>(*it);
-            yPos_[i] = std::tr1::get<1>(*it);
+            xPos_[i] = std::get<0>(*it);
+            yPos_[i] = std::get<1>(*it);
         }
 
         // make a natural spline
diff --git a/dumux/linear/foreignoverlapfrombcrsmatrix.hh b/dumux/linear/foreignoverlapfrombcrsmatrix.hh
index 4ba0988fa2e32d9c27993030a4ee24fd492bc8c6..ad7c47536e47d18a84320fbc01f9a292827f1170 100644
--- a/dumux/linear/foreignoverlapfrombcrsmatrix.hh
+++ b/dumux/linear/foreignoverlapfrombcrsmatrix.hh
@@ -41,6 +41,7 @@
 #include <list>
 #include <set>
 #include <map>
+#include <tr1/tuple>
 
 #if HAVE_MPI
 #include <mpi.h>
diff --git a/dumux/linear/overlappingbcrsmatrix.hh b/dumux/linear/overlappingbcrsmatrix.hh
index 08d9186e4ac9ae47f80438bfa0f964ebef8dfd03..2e4662ba641a02d25415a199528e050a55bf33c4 100644
--- a/dumux/linear/overlappingbcrsmatrix.hh
+++ b/dumux/linear/overlappingbcrsmatrix.hh
@@ -346,7 +346,7 @@ private:
         typename ForeignOverlapWithPeer::const_iterator endIt = peerOverlap.end();
         int i = 0;
         for (; it != endIt; ++it, ++i) {
-            int rowIdx = std::get<0>(*it);
+            int rowIdx = std::tr1::get<0>(*it);
             assert(overlap_->isDomesticIndexFor(peerRank, rowIdx));
 
             typedef typename BCRSMatrix::ConstColIterator ColIt;
@@ -374,7 +374,7 @@ private:
         i = 0;
         it = peerOverlap.begin();
         for (; it != endIt; ++it) {
-            int rowIdx = std::get<0>(*it);
+            int rowIdx = std::tr1::get<0>(*it);
             assert(overlap_->isDomesticIndexFor(peerRank, rowIdx));
 
             typedef typename BCRSMatrix::ConstColIterator ColIt;
diff --git a/dumux/linear/overlappingblockvector.hh b/dumux/linear/overlappingblockvector.hh
index 850bdf810014e10d6ae9276c6c56fe05eb6b3c03..6d4e848550fe8616e044abf9d4eee1efb7fe11ab 100644
--- a/dumux/linear/overlappingblockvector.hh
+++ b/dumux/linear/overlappingblockvector.hh
@@ -282,7 +282,7 @@ private:
 #if HAVE_MPI
         // create array for the front indices
         int numDomestic = overlap_->numDomestic();
-        frontMaster_ = std::shared_ptr<std::vector<ProcessRank> >(new std::vector<ProcessRank>(numDomestic, -1));
+        frontMaster_ = std::tr1::shared_ptr<std::vector<ProcessRank> >(new std::vector<ProcessRank>(numDomestic, -1));
 
         typename PeerSet::const_iterator peerIt;
         typename PeerSet::const_iterator peerEndIt = overlap_->peerSet().end();
@@ -294,9 +294,9 @@ private:
 
             const DomesticOverlapWithPeer &domesticOverlap = overlap_->domesticOverlapWithPeer(peerRank);
             int numEntries = domesticOverlap.size();
-            numIndicesSendBuff_[peerRank] = std::shared_ptr<MpiBuffer<int> >(new MpiBuffer<int>(1));
-            indicesSendBuff_[peerRank] = std::shared_ptr<MpiBuffer<RowIndex> >(new MpiBuffer<RowIndex>(numEntries));
-            valuesSendBuff_[peerRank] = std::shared_ptr<MpiBuffer<FieldVector> >(new MpiBuffer<FieldVector>(numEntries));
+            numIndicesSendBuff_[peerRank] = std::tr1::shared_ptr<MpiBuffer<int> >(new MpiBuffer<int>(1));
+            indicesSendBuff_[peerRank] = std::tr1::shared_ptr<MpiBuffer<RowIndex> >(new MpiBuffer<RowIndex>(numEntries));
+            valuesSendBuff_[peerRank] = std::tr1::shared_ptr<MpiBuffer<FieldVector> >(new MpiBuffer<FieldVector>(numEntries));
 
             // fill the indices buffer with global indices
             MpiBuffer<RowIndex> &indicesSendBuff = *indicesSendBuff_[peerRank];
@@ -327,8 +327,8 @@ private:
             numRows = numRowsRecvBuff[0];
 
             // then, create the MPI buffers
-            indicesRecvBuff_[peerRank] = std::shared_ptr<MpiBuffer<RowIndex> >(new MpiBuffer<RowIndex>(numRows));
-            valuesRecvBuff_[peerRank] = std::shared_ptr<MpiBuffer<FieldVector> >(new MpiBuffer<FieldVector>(numRows));
+            indicesRecvBuff_[peerRank] = std::tr1::shared_ptr<MpiBuffer<RowIndex> >(new MpiBuffer<RowIndex>(numRows));
+            valuesRecvBuff_[peerRank] = std::tr1::shared_ptr<MpiBuffer<FieldVector> >(new MpiBuffer<FieldVector>(numRows));
             MpiBuffer<RowIndex> &indicesRecvBuff = *indicesRecvBuff_[peerRank];
 
             // next, receive the actual indices