diff --git a/cmake/modules/FindSuperLU.cmake b/cmake/modules/FindSuperLU.cmake
index 340ffb46f64cd1a1870ecd4086eaf778ee898a0b..0c64d57c7b1971dc45bdc69448342f1685b8d815 100644
--- a/cmake/modules/FindSuperLU.cmake
+++ b/cmake/modules/FindSuperLU.cmake
@@ -38,7 +38,10 @@ find_path(SUPERLU_INCLUDE_DIR
 
 # look for library, only at positions given by the user
 find_library(SUPERLU_LIBRARY
-  NAMES "superlu_4.3" "superlu_4.2" "superlu_4.1" "superlu_4.0" "superlu_3.1" "superlu_3.0" "superlu"
+  NAMES "superlu"
+        "superlu_5.2.1" "superlu_5.2" "superlu_5.1.1" "superlu_5.1" "superlu_5.0"
+        "superlu_4.3" "superlu_4.2" "superlu_4.1" "superlu_4.0"
+        "superlu_3.1" "superlu_3.0"
   PATHS ${SUPERLU_PREFIX} ${SUPERLU_ROOT}
   PATH_SUFFIXES "lib" "lib32" "lib64"
   NO_DEFAULT_PATH
@@ -46,7 +49,10 @@ find_library(SUPERLU_LIBRARY
 
 # look for library files, including default paths
 find_library(SUPERLU_LIBRARY
-  NAMES "superlu_4.3" "superlu_4.2" "superlu_4.1" "superlu_4.0" "superlu_3.1" "superlu_3.0" "superlu"
+  NAMES "superlu"
+        "superlu_5.2.1" "superlu_5.2" "superlu_5.1.1" "superlu_5.1" "superlu_5.0"
+        "superlu_4.3" "superlu_4.2" "superlu_4.1" "superlu_4.0"
+        "superlu_3.1" "superlu_3.0"
   PATH_SUFFIXES "lib" "lib32" "lib64"
 )
 
diff --git a/dune/istl/superlu.hh b/dune/istl/superlu.hh
index 1c6b2de15b1c4838fe0b7a7d1b175e1a5c768f35..6f2a9d2affc9bbf3b55bd42710cc48d370c04877 100644
--- a/dune/istl/superlu.hh
+++ b/dune/istl/superlu.hh
@@ -126,9 +126,16 @@ namespace Dune
                       float *rpg, float *rcond, float *ferr, float *berr,
                       mem_usage_t *memusage, SuperLUStat_t *stat, int *info)
     {
+#if SUPERLU_MIN_VERSION_5
+      GlobalLU_t gLU;
+      sgssvx(options, mat, perm_c, perm_r, etree, equed, R, C,
+             L, U, work, lwork, B, X, rpg, rcond, ferr, berr,
+             &gLU, memusage, stat, info);
+#else
       sgssvx(options, mat, perm_c, perm_r, etree, equed, R, C,
              L, U, work, lwork, B, X, rpg, rcond, ferr, berr,
              memusage, stat, info);
+#endif
     }
   };
 
@@ -167,7 +174,7 @@ namespace Dune
                       double *rpg, double *rcond, double *ferr, double *berr,
                       mem_usage_t *memusage, SuperLUStat_t *stat, int *info)
     {
-#if SUPERLU_MIN_VER_5
+#if SUPERLU_MIN_VERSION_5
       GlobalLU_t gLU;
       dgssvx(options, mat, perm_c, perm_r, etree, equed, R, C,
              L, U, work, lwork, B, X, rpg, rcond, ferr, berr,
@@ -214,9 +221,16 @@ namespace Dune
                       double *rpg, double *rcond, double *ferr, double *berr,
                       mem_usage_t *memusage, SuperLUStat_t *stat, int *info)
     {
+#if SUPERLU_MIN_VERSION_5
+      GlobalLU_t gLU;
+      zgssvx(options, mat, perm_c, perm_r, etree, equed, R, C,
+             L, U, work, lwork, B, X, rpg, rcond, ferr, berr,
+             &gLU, memusage, stat, info);
+#else
       zgssvx(options, mat, perm_c, perm_r, etree, equed, R, C,
              L, U, work, lwork, B, X, rpg, rcond, ferr, berr,
              memusage, stat, info);
+#endif
     }
   };
 
@@ -254,9 +268,16 @@ namespace Dune
                       float *rpg, float *rcond, float *ferr, float *berr,
                       mem_usage_t *memusage, SuperLUStat_t *stat, int *info)
     {
+#if SUPERLU_MIN_VERSION_5
+      GlobalLU_t gLU;
+      cgssvx(options, mat, perm_c, perm_r, etree, equed, R, C,
+             L, U, work, lwork, B, X, rpg, rcond, ferr, berr,
+             &gLU, memusage, stat, info);
+#else
       cgssvx(options, mat, perm_c, perm_r, etree, equed, R, C,
              L, U, work, lwork, B, X, rpg, rcond, ferr, berr,
              memusage, stat, info);
+#endif
     }
   };