diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4be8ab7a10fb0a09e98e4f246bfeff487c7e88a4..ae9096a24abce26812746277549f76bf9361a18f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -172,8 +172,16 @@ find_package(Armadillo)
 if(NOT ARMADILLO_FOUND AND ALLOW_DEPENDENCIES_DOWNLOAD)
     message("Armadillo will be downloaded and compiled locally in 'external_dependencies folder.")
     include(DownloadArmadillo)
-endif()
 
+    if(NOT LAPACK_FOUND AND NOT BLAS_FOUND)
+    target_link_libraries(
+        armadillo
+
+        PUBLIC
+        openblas
+    )
+    endif()
+endif()
 
 #---------------------------------------------------#
 # Add subdirectory with source codes to be compiled #
diff --git a/DownloadOpenBLAS.cmake b/DownloadOpenBLAS.cmake
index d93d00947cc48d0bd88c823746f9d98756dacc03..75e9bb62ee4fcfe4b7be7666fb6450895586ab27 100644
--- a/DownloadOpenBLAS.cmake
+++ b/DownloadOpenBLAS.cmake
@@ -20,34 +20,28 @@ FetchContent_Populate(OpenBLAS)
 ##################
 # Build OpenBLAS #
 ##################
-cexecute_process(
-    COMMAND cmake -j ${N_CORES} .
-    WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
-    RESULT_VARIABLE rv
-)
-if(NOT rv STREQUAL "0")
-    message("OpenBLAS build: cmake .: ${rv}")
-endif()
-
-set_target_properties(openblas PROPERTIES LINK_FLAGS -lpthread -lgfortran)
-
-# Build library
-execute_process(
-    COMMAND cmake --build . -j ${N_CORES} --config Release
-    WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
-    RESULT_VARIABLE rv
-)
-if(NOT rv STREQUAL "0")
-    message("OpenBLAS build: cmake --build . -j ${N_CORES}: ${rv}")
-endif()
-
-# Remove link flags
-set(CMAKE_EXE_LINKER_FLAGS ${OLD_CMAKE_EXE_LINKER_FLAGS})
+#execute_process(
+#    COMMAND cmake -j ${N_CORES} .
+#    WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
+#    RESULT_VARIABLE rv
+#)
+#if(NOT rv STREQUAL "0")
+#    message("OpenBLAS build: cmake .: ${rv}")
+#endif()
+#
+## Build library
+#execute_process(
+#    COMMAND cmake --build . -j ${N_CORES} --config Release
+#    WORKING_DIRECTORY ${OPENBLAS_LOCAL_PATH}
+#    RESULT_VARIABLE rv
+#)
+#if(NOT rv STREQUAL "0")
+#    message("OpenBLAS build: cmake --build . -j ${N_CORES}: ${rv}")
+#endif()
 
-set(OpenBLAS_DIR ${CMAKE_CURRENT_LIST_DIR}/external_dependencies/OpenBLAS)
 find_package(OpenBLAS)
-
-if(NOT OpenBLAS_FOUND)
-    message(FATAL_ERROR "OpenBLAS was not downloaded successfully!")
-endif()
+#
+#if(NOT OpenBLAS_FOUND)
+#    message(FATAL_ERROR "OpenBLAS was not downloaded successfully!")
+#endif()
 
diff --git a/FindArmadillo.cmake b/FindArmadillo.cmake
index 106ec09e5bdd1f8908526d15bb5c7d3ba1776ffd..02f48af0963b295d8381fcf19ffa8fdb74b2dbcf 100644
--- a/FindArmadillo.cmake
+++ b/FindArmadillo.cmake
@@ -51,14 +51,14 @@ else()
         ${LIBNAME}
 
         HINTS
-            external_dependencies/armadillo
+            ${ROOT_DIR}/external_dependencies/armadillo
 
         PATHS
             /usr
-            /usr/local
 
         PATH_SUFFIXES
             lib
+            local
     )
 
     # Set ARMADILLO_FOUND honoring the QUIET and REQUIRED arguments
diff --git a/FindOpenBLAS.cmake b/FindOpenBLAS.cmake
index b5699f46d52de18b6d5c034f342ac5bdf8c24b1f..7b698e5a80ff0387f69afbc8c9eefb14ae60f014 100644
--- a/FindOpenBLAS.cmake
+++ b/FindOpenBLAS.cmake
@@ -19,35 +19,55 @@ FIND_PATH(
         include/x86_64-linux-gnu
 )
 
-FIND_LIBRARY(
-    OpenBLAS_LIBRARIES
+#option(LOCAL OFF)
+IF(${OpenBLAS_INCLUDE_DIR} MATCHES "^.*external_dependencies.*$")
+    message("OpenBLAS is downloaded locally - the library will be built when needed.")
+    set(LOCAL ON)
+    set(TMP "")
+    string(REGEX REPLACE "/include" "" TMP ${OpenBLAS_INCLUDE_DIR})
+    add_subdirectory(${TMP} ${TMP})
+endif()
 
-    NAMES
-    ${LIB_PREFIX}openblas.${LIB_SUFFIX}
+if(LOCAL)
+    # If OpenBLAS is downloaded locally, the library will be compiled during build-time
+    INCLUDE(FindPackageHandleStandardArgs)
+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+            OpenBLAS
+            "OpenBLAS was NOT found!"
+            OpenBLAS_INCLUDE_DIR)
+else()
 
-    HINTS
-    ${OpenBLAS_LIBRARY_DIRECTORY}
-    $ENV{OpenBLAS_LIBRARY_DIRECTORY}
-    ${ROOT_DIR}/external_dependencies/OpenBLAS
-    /usr
-
-    PATH_SUFFIXES
-    lib
-    lib/x86_64-linux-gnu
-)
+    FIND_LIBRARY(
+        OpenBLAS_LIBRARIES
 
-# Set OpenBLAS_Found
-INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(
-        OpenBLAS
+        NAMES
+        ${LIB_PREFIX}openblas.${LIB_SUFFIX}
 
-        FAIL_MESSAGE
-            "OpenBLAS was NOT found!"
+        HINTS
+        ${OpenBLAS_LIBRARY_DIRECTORY}
+        $ENV{OpenBLAS_LIBRARY_DIRECTORY}
+        ${ROOT_DIR}/external_dependencies/OpenBLAS
+        /usr
 
-        REQUIRED_VARS
-            OpenBLAS_INCLUDE_DIR
-            OpenBLAS_LIBRARIES
-)
+        PATH_SUFFIXES
+        lib
+        lib/x86_64-linux-gnu
+        local
+    )
+
+    # Set OpenBLAS_Found
+    INCLUDE(FindPackageHandleStandardArgs)
+    FIND_PACKAGE_HANDLE_STANDARD_ARGS(
+            OpenBLAS
+
+            FAIL_MESSAGE
+                "OpenBLAS was NOT found!"
+
+            REQUIRED_VARS
+                OpenBLAS_INCLUDE_DIR
+                OpenBLAS_LIBRARIES
+    )
+endif()
 
 IF (OpenBLAS_FOUND)
    MESSAGE(STATUS "Found OpenBLAS libraries: ${OpenBLAS_LIBRARIES}")