diff --git a/build/Makefile.am b/build/Makefile.am
index ad10a23f023a953bacb813d5a45a8a7743a7f99d..70a7bffc16617b0b0c1b5177acc9a57f684f6173 100644
--- a/build/Makefile.am
+++ b/build/Makefile.am
@@ -1,5 +1,5 @@
 AUTOMAKE_OPTIONS=subdir-objects
-LDADD=libnptm/libnptm.la -L/usr/lib64 ${HDF5_LDFLAGS} ${LAPACK_LDFLAGS}
+LDADD=libnptm/libnptm.la -L/usr/lib64 ${HDF5_LDFLAGS} ${LAPACKLDFLAGS} ${MAGMALDFLAGS}
 lib_LTLIBRARIES=libnptm/libnptm.la
 libnptm_libnptm_la_SOURCES=../src/libnptm/algebraic.cpp ../src/libnptm/clu_subs.cpp ../src/libnptm/Commons.cpp ../src/libnptm/Configuration.cpp ../src/libnptm/file_io.cpp ../src/libnptm/lapack_calls.cpp ../src/libnptm/logging.cpp ../src/libnptm/magma_calls.cpp ../src/libnptm/Parsers.cpp ../src/libnptm/sph_subs.cpp ../src/libnptm/tfrfme.cpp ../src/libnptm/TransitionMatrix.cpp ../src/libnptm/tra_subs.cpp ../src/libnptm/types.cpp
 bin_PROGRAMS=cluster/edfb_clu cluster/clu cluster/np_cluster sphere/edfb_sph sphere/sph sphere/np_sphere trapping/frfme trapping/lffft trapping/np_trapping
diff --git a/build/configure.ac b/build/configure.ac
index 17cf170639b14b446f9f5c2a967047ef0fbd75c6..89f91def69f74fda56467036a704db93dc71b15d 100644
--- a/build/configure.ac
+++ b/build/configure.ac
@@ -22,15 +22,52 @@ EOF
 m4_define(
   [M4_DETECT_LAPACK],
   [
-    LAPACK_ROOT=$MKLROOT
-    if test "x$LAPACK_ROOT" != "x"; then
-      export LAPACK_INCLUDE=$(MKLROOT)/include
-      export LAPACK_LIB=$(MKLROOT)/lib
-      export LAPACK_LIBRARY="-Wl,--no-as-needed -lmkl_intel_ilp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl"
+    export -p | grep MKL
+    MKL_DEF=$?
+    if test "x$MKL_DEF" = "x0"; then
+      export LAPACKFLAGS="-DUSE_LAPACK -DLAPACK_ILP64 -DUSE_ILP64 -I{MKLROOT}/include"
+      export LAPACKLDFLAGS="-L${MKLROOT}/lib -Wl,--no-as-needed -lmkl_intel_ilp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl"
     else
-      export LAPACK_INCLUDE=/usr/include
-      export LAPACK_LIB=/lib/x86_64-linux-gnu
-      export LAPACK_LIBRARY="-llapacke64"
+      if test -f /usr/include/lapacke.h; then
+        export LAPACKFLAGS="-DUSE_LAPACK -DLAPACK_ILP64 -DUSE_ILP64"
+	export LAPACKLDFLAGS="-llapacke64"
+      fi
+    fi
+  ]
+)
+
+m4_define(
+  [M4_DETECT_MAGMA],
+  [
+    if test "x$CUDA_LIB" = "x"; then
+      export -p | grep CUDA
+      CUDA_DEF=$?
+      if test "x$CUDA_DEF" = "x0"; then
+        CUDA_LIB=${CUDA_HOME}/targets/x86_64-linux/lib
+      else
+        CUDA_LIB=/usr/local/cuda/targets/x86_64-linux/lib
+      fi
+    fi
+    export -p | grep MAGMA
+    MAGMA_DEF=$?
+    if test "x$MAGMA_DEF" = "x0"; then
+      export MAGMAFLAGS="-DUSE_MAGMA -DMAGMA_ILP64 -I${MAGMA_INCLUDE}"
+      export MAGMALDFLAGS="-L${CUDA_LIB} -lcudart -L${MAGMA_LIB} -lmagma"
+    else
+      if test "x$MAGMA_INCLUDE" != "x"; then
+        export MAGMAFLAGS="-DUSE_MAGMA -DMAGMA_ILP64 -I${MAGMA_INCLUDE}"
+      else
+        if test -f /usr/include/magma_v2.h; then
+          export MAGMAFLAGS="-DUSE_MAGMA -DMAGMA_ILP64"
+	fi
+      fi
+      if test "x$MAGMA_LIB" != "x"; then
+        export MAGMALDFLAGS="-L${CUDA_LIB} -lcudart -L${MAGMA_LIB} -lmagma"
+      else
+        if test -f /usr/include/magma_v2.h; then
+          export MAGMALDFLAGS="-L${CUDA_LIB} -lcudart -lmagma"
+	fi
+      fi
     fi
   ]
 )
@@ -184,9 +221,16 @@ AS_IF(
 # Configure the optional features
 M4_DETECT_LAPACK
 AS_IF(
-  [test "x$LAPACK_LIBRARY" != "x"],
-  [AC_MSG_NOTICE([LAPACK detected])],
-  [AC_MSG_NOTICE([No LAPACK found])]
+  [test "x$LAPACKLDFLAGS" != "x"],
+  [AC_MSG_NOTICE([LAPACK detected. Activating by default (use --without-lapack to disable).])],
+  [AC_MSG_NOTICE([No LAPACK found.])]
+)
+
+M4_DETECT_MAGMA
+AS_IF(
+  [test "x$MAGMALDFLAGS" != "x"],
+  [AC_MSG_NOTICE([MAGMA detected. Activating by default (use --without-magma to disable).])],
+  [AC_MSG_NOTICE([MAGMA not found.])]
 )
 
 AC_ARG_ENABLE(
@@ -207,34 +251,39 @@ AC_ARG_WITH(
   [AS_HELP_STRING([--with-lapack], [use LAPACK @<:@default=check@:>@])],
   [
     if test "x$withval" = "xno"; then
-      AC_SUBST([LAPACK_FLAGS], [""])
-      AC_SUBST([LAPACK_LDFLAGS], [""])
+      AC_SUBST([LAPACKFLAGS], [""])
+      AC_SUBST([LAPACKLDFLAGS], [""])
+    else
+      AC_SUBST([LAPACKFLAGS], [${LAPACKFLAGS}])
+      AC_SUBST([LAPACKLDFLAGS], [${LAPACKLDFLAGS}])
     fi
   ],
   [
-    if test "x$LAPACK_INCLUDE" != "x"; then
-      AC_SUBST([LAPACK_FLAGS], ["-DUSE_LAPACK -DLAPACK_ILP64 -DUSE_ILP64 -I${LAPACK_INCLUDE}"])
-      AC_SUBST([LAPACK_LDFLAGS], ["-L${LAPACK_LIB} ${LAPACK_LIBRARY}"])
-    fi
+    AC_SUBST([LAPACKFLAGS], [${LAPACKFLAGS}])
+    AC_SUBST([LAPACKLDFLAGS], [${LAPACKLDFLAGS}])
   ]
 )
 
 AC_ARG_WITH(
   [magma],
   [AS_HELP_STRING([--with-magma], [use MAGMA @<:@default=check@:>@])],
-  [],
-  []
-)
-
-AC_ARG_ENABLE(
-  [ilp64],
-  [AS_HELP_STRING([--enable-ilp64], [use MAGMA @<:@default=check@:>@])],
-  [],
-  []
+  [
+    if test "x$withval" = "xno"; then
+      AC_SUBST([MAGMAFLAGS], [""])
+      AC_SUBST([MAGMALDFLAGS], [""])
+    else
+      AC_SUBST([MAGMAFLAGS], [${MAGMAFLAGS}])
+      AC_SUBST([MAGMALDFLAGS], [${MAGMALDFLAGS}])
+    fi
+  ],
+  [
+    AC_SUBST([MAGMAFLAGS], [${MAGMAFLAGS}])
+    AC_SUBST([MAGMALDFLAGS], [${MAGMALDFLAGS}])
+  ]
 )
 
 FFLAGS="-std=legacy -O3"
-CXXFLAGS="-O3 -ggdb -Wno-format-contains-nul -I$HDF5_INCLUDE $OMPFLAGS $LAPACK_FLAGS"
+CXXFLAGS="-O3 -ggdb -Wno-format-contains-nul -I$HDF5_INCLUDE $OMPFLAGS $LAPACKFLAGS $MAGMAFLAGS"
 SUBDIRS="cluster libnptm sphere testing trapping"
 
 # Send output to Makefiles