#305
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 27ead9e..5018909 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-cmake_minimum_required(VERSION 3.13)
+cmake_minimum_required(VERSION 3.14)
 include(src/cmake/projectVersionDetails.cmake)
 project(log4cxx VERSION ${log4cxx_VER} LANGUAGES CXX)
 include(CTest)
@@ -49,6 +49,30 @@
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
 endif()
 
+# If requested, build APR and Expat as part of this build
+option(BUILD_APR_EXPAT "Build APR and Expat as part of the Log4cxx build" OFF)
+if(BUILD_APR_EXPAT)
+    include(FetchContent)
+    FetchContent_Declare(EXPAT
+	GIT_REPOSITORY https://github.com/libexpat/libexpat.git
+	GIT_TAG R_2_5_0
+	SOURCE_SUBDIR expat
+	OVERRIDE_FIND_PACKAGE
+	)
+    FetchContent_Declare(APR
+	URL https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
+	URL_HASH SHA1=a4479912636820988278621f459cfdacdc76058d
+	OVERRIDE_FIND_PACKAGE
+	)
+    FetchContent_Declare(APR-Util
+	URL https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz
+	URL_HASH SHA1=b787bbace523a1595d66b4bd45c8946de634f268
+	CMAKE_ARGS -DAPR_INCLUDE_DIR=${APR_SOURCE_DIR}
+	OVERRIDE_FIND_PACKAGE
+	)
+    FetchContent_MakeAvailable(expat APR APR-Util)
+endif()
+
 # Find Apache Runtime
 option(APR_STATIC "Link to the APR static library" OFF)
 find_package(APR REQUIRED)
@@ -57,8 +81,6 @@
 option(APU_STATIC "Link to the APR-Util static library" OFF)
 find_package(APR-Util REQUIRED)
 
-find_package( Threads REQUIRED )
-
 # Find expat for XML parsing
 find_package(EXPAT REQUIRED)
 if(TARGET EXPAT::EXPAT)
@@ -67,6 +89,8 @@
   set(EXPAT_LIBRARIES expat::expat)
 endif()
 
+find_package( Threads REQUIRED )
+
 option(LOG4CXX_ENABLE_ODBC "Support logging via ODBC" OFF)
 if(LOG4CXX_ENABLE_ODBC)
   find_package(ODBC)
diff --git a/src/cmake/FindAPR-Util.cmake b/src/cmake/FindAPR-Util.cmake
index 47e5ed6..d25f6af 100644
--- a/src/cmake/FindAPR-Util.cmake
+++ b/src/cmake/FindAPR-Util.cmake
@@ -32,6 +32,16 @@
 pkg_check_modules(APR_UTIL apr-util-1)
 endif()
 
+if(BUILD_APR_EXPAT)
+  set(APR_UTIL_INCLUDE_DIRS ${apr-util_SOURCE_DIR})
+  set(APR_UTIL_FOUND 1)
+  find_path(APR_UTIL_INCLUDE_DIR
+            NAMES apu.h
+            HINTS ${APR_UTIL_INCLUDE_DIRS}
+            PATH_SUFFIXES apr-1)
+  return()
+endif()
+
 if(APR_UTIL_FOUND)
   find_path(APR_UTIL_INCLUDE_DIR
             NAMES apu.h
diff --git a/src/cmake/FindAPR.cmake b/src/cmake/FindAPR.cmake
index e3f4c98..eb46e16 100644
--- a/src/cmake/FindAPR.cmake
+++ b/src/cmake/FindAPR.cmake
@@ -30,6 +30,16 @@
 pkg_check_modules(APR apr-1)
 endif()
 
+if(BUILD_APR_EXPAT)
+  set(APR_INCLUDE_DIRS ${apr_SOURCE_DIR})
+  set(APR_FOUND 1)
+  find_path(APR_INCLUDE_DIR
+            NAMES apr.h
+            HINTS ${APR_INCLUDE_DIRS}
+            PATH_SUFFIXES apr-1)
+  return()
+endif()
+
 if(APR_FOUND)
   find_path(APR_INCLUDE_DIR
             NAMES apr.h