diff --git a/CMakeLists.txt b/CMakeLists.txt
index f4bd51c83c2827f08067764cd70bf3703fc81c47..ded50c720774199394bd9683729599a22467f2e0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -843,28 +843,28 @@ if(HAVE_SOLVER)
   endif(ENABLE_TAUCS)
 
   if(ENABLE_MUMPS)
-    find_library(SMUMPS_LIB smumps PATH_SUFFIXES lib)
-    find_library(DMUMPS_LIB dmumps PATH_SUFFIXES lib)
-    find_library(CMUMPS_LIB cmumps PATH_SUFFIXES lib)
-    find_library(ZMUMPS_LIB zmumps PATH_SUFFIXES lib)
+    set(MUMPS_LIBS_REQUIRED mumps_common metis pord smumps dmumps cmumps zmumps)
+    if(NOT ENABLE_MPI)
+      list(APPEND MUMPS_LIBS_REQUIRED mpiseq)
+    endif(NOT ENABLE_MPI)
+    find_all_libraries(MUMPS_LIBRARIES MUMPS_LIBS_REQUIRED "" "lib")
     find_path(SMUMPS_INC "smumps_c.h" PATH_SUFFIXES src include)
     find_path(DMUMPS_INC "dmumps_c.h" PATH_SUFFIXES src include)
     find_path(CMUMPS_INC "cmumps_c.h" PATH_SUFFIXES src include)
     find_path(ZMUMPS_INC "zmumps_c.h" PATH_SUFFIXES src include)
-    if(SMUMPS_LIB AND SMUMPS_INC AND 
-       DMUMPS_LIB AND DMUMPS_INC AND
-       CMUMPS_LIB AND CMUMPS_INC AND
-       ZMUMPS_LIB AND ZMUMPS_INC)
-        set_config_option(HAVE_MUMPS "MUMPS")
-        add_definitions(-DGMM_USES_MUMPS)
-        list(APPEND EXTERNAL_LIBRARIES ${DMUMPS_LIB})
-        list(APPEND EXTERNAL_INCLUDES ${DMUMPS_INC})
-        list(APPEND EXTERNAL_LIBRARIES ${ZMUMPS_LIB})
-        list(APPEND EXTERNAL_INCLUDES ${ZMUMPS_INC})
-    endif(SMUMPS_LIB AND SMUMPS_INC AND 
-          DMUMPS_LIB AND DMUMPS_INC AND
-          CMUMPS_LIB AND CMUMPS_INC AND
-          ZMUMPS_LIB AND ZMUMPS_INC)
+    if(MUMPS_LIBRARIES AND SMUMPS_INC AND DMUMPS_INC AND CMUMPS_INC AND ZMUMPS_INC)
+      set_config_option(HAVE_MUMPS "MUMPS")
+      add_definitions(-DGMM_USES_MUMPS)
+      list(APPEND EXTERNAL_LIBRARIES ${MUMPS_LIBRARIES})
+      list(APPEND EXTERNAL_INCLUDES ${SMUMPS_INC})
+      list(APPEND EXTERNAL_INCLUDES ${DMUMPS_INC})
+      list(APPEND EXTERNAL_INCLUDES ${CMUMPS_INC})
+      list(APPEND EXTERNAL_INCLUDES ${ZMUMPS_INC})
+      find_library(GFORTRAN_LIB gfortran)
+      if(GFORTRAN_LIB)
+        list(APPEND EXTERNAL_LIBRARIES ${GFORTRAN_LIB})
+      endif(GFORTRAN_LIB)
+    endif(MUMPS_LIBRARIES AND SMUMPS_INC AND DMUMPS_INC AND CMUMPS_INC AND ZMUMPS_INC)
   endif(ENABLE_MUMPS)
 
   if(ENABLE_PETSC)