diff --git a/dune/common/shared_ptr.hh b/dune/common/shared_ptr.hh
index cde45e10d3d173158aeb0688fb49c146ba25dc3b..446da04f01dcc203160912919b2703114400b44c 100644
--- a/dune/common/shared_ptr.hh
+++ b/dune/common/shared_ptr.hh
@@ -305,7 +305,7 @@ namespace Dune
   // C++0x and Boost have a make_shared implementation, TR1 does not.
   // Unfortunately, TR1 gets picked over Boost if present.
   // Moreover, boost::make_shared() only exists for (remotely) recent versions of Boost.
-#if HAVE_MEMORY || (HAVE_BOOST_SHARED_PTR_HPP && HAVE_BOOST_MAKE_SHARED_HPP && !HAVE_TR1_MEMORY)
+#if HAVE_MAKE_SHARED
   using SHARED_PTR_NAMESPACE :: make_shared;
 #else
 
diff --git a/m4/dune_common.m4 b/m4/dune_common.m4
index 179cc01610fd0cb62faec69028e6b7614be14a78..c7ed80237f59e10192e7fadf7afebd180c3701a3 100644
--- a/m4/dune_common.m4
+++ b/m4/dune_common.m4
@@ -22,7 +22,7 @@ AC_DEFUN([DUNE_COMMON_CHECKS],
   AC_REQUIRE([STATIC_ASSERT_CHECK])
   AC_REQUIRE([NULLPTR_CHECK])
   AC_REQUIRE([SHARED_PTR])
-  AC_REQUIRE([BOOST_MAKE_SHARED_HPP])
+  AC_REQUIRE([MAKE_SHARED])
   AC_REQUIRE([DUNE_LINKCXX])
   AC_REQUIRE([DUNE_CHECKDEPRECATED])
   AC_REQUIRE([DUNE_SET_MINIMAL_DEBUG_LEVEL])
diff --git a/m4/make_shared.m4 b/m4/make_shared.m4
index 2afa3903c8fd65d0ec4a2152685c477b6dd1b374..ee46424b9e091fe05bcdac462608a26a917d4f7d 100644
--- a/m4/make_shared.m4
+++ b/m4/make_shared.m4
@@ -1,8 +1,34 @@
-AC_DEFUN([BOOST_MAKE_SHARED_HPP],[
-  AC_REQUIRE([AC_PROG_CXX])
+AC_DEFUN([MAKE_SHARED],[
+  AC_REQUIRE([SHARED_PTR])
+  AS_IF([test "$SHARED_PTR_NAMESPACE" = "boost"],[
+    AC_CHECK_HEADER([boost/make_shared.hpp],
+                  [AC_DEFINE([HAVE_BOOST_MAKE_SHARED_HPP], [1],
+                        [Define to 1 if you have <boost/make_shared.hpp>.])])])
+  AC_MSG_CHECKING([whether SHARED_PTR_NAMESPACE ($SHARED_PTR_NAMESPACE) provides make_shared])
   AC_LANG_PUSH([C++])
-     AC_CHECK_HEADER([boost/make_shared.hpp],
-                     [AC_DEFINE([HAVE_BOOST_MAKE_SHARED_HPP], [1],
-                        [Define to 1 if you have <boost/make_shared.hpp>.])])
+    AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM([[
+#if defined(HAVE_MEMORY)
+# include <memory>
+#endif
+#if defined(HAVE_TR1_MEMORY)
+# include <tr1/memory>
+#endif
+#if defined(HAVE_BOOST_SHARED_PTR_HPP) && defined(HAVE_BOOST_MAKE_SHARED_HPP)
+# include <boost/shared_ptr.hpp>
+# include <boost/make_shared.hpp>
+#endif
+#include <string>
+            ]],[[
+$SHARED_PTR_NAMESPACE::make_shared<int>(3);
+            ]])],
+            [ AC_MSG_RESULT(yes)
+              have_make_shared=yes
+            ],[AC_MSG_RESULT(no)
+              have_make_shared=no
+            ])
+  AS_IF([test "$have_make_shared" = "yes"],[
+    AC_DEFINE([HAVE_MAKE_SHARED], [1],
+                        [Define to 1 if SHARED_PTR_NAMESPACE::make_shared is usable.])])
   AC_LANG_POP
 ])
diff --git a/m4/shared_ptr.m4 b/m4/shared_ptr.m4
index 562bfeaede517374e59acefccfa1006ce9704f7e..2cca28414ef42d373a8bbd0c0e2ead55a7e9beb4 100644
--- a/m4/shared_ptr.m4
+++ b/m4/shared_ptr.m4
@@ -54,6 +54,7 @@ shared_ptr<string> test_ptr(new string("test string"));
   ])
   AS_IF([ test "x$ac_cv_shared_ptr_namespace" = xmissing ],
     [], [
+      SHARED_PTR_NAMESPACE=${ac_cv_shared_ptr_namespace}
       AC_DEFINE_UNQUOTED([SHARED_PTR_NAMESPACE],
                          ${ac_cv_shared_ptr_namespace},
                          [The namespace in which SHARED_PTR can be found])