diff --git a/.appveyor.yml b/.appveyor.yml
index 9ceadd9f253cb63aab144968be62019ca002f7f6..a41c8541fd84258dff8655f00e20151ad2f5d91e 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -22,12 +22,14 @@ before_build:
   - cd build
 
 build_script:
-  - cmake -G "Visual Studio 15 2017 Win64" -DUSGSCSM_BUILD_TESTS=OFF ..
+  - cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON -DUSGSCSM_BUILD_TESTS=OFF ..
   - cmake --build . --target ALL_BUILD --config Release
 
 artifacts:
   - path: build\Release\usgscsm.dll
     name: usgscsm.dll
+  - path: build\Release\ale.dll
+    name: ale.dll
 
 on_success:
 - cd ../
diff --git a/.gitmodules b/.gitmodules
index 23bb6eaeffbe8b11bb0e442d6f4459f5f1f96979..a31704792b0d3a53821bfc5cd043c651ca908e91 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,9 @@
 [submodule "csm"]
 	path = csm
 	url = https://github.com/USGS-Astrogeology/csm
+[submodule "ale"]
+	path = ale
+	url = https://github.com/USGS-Astrogeology/ale.git
+[submodule "json"]
+	path = json
+	url = https://github.com/nlohmann/json.git
diff --git a/.travis.yml b/.travis.yml
index be180a247de330c700c2a910ac2534acabd9aa8e..258784ec9aad43aae67a29d978a1b1c3f4b22d05 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -39,14 +39,13 @@ install:
     fi
   - bash miniconda.sh -b -p $HOME/miniconda
   - source $HOME/miniconda/etc/profile.d/conda.sh
-  - conda install -y -c conda-forge cmake ale nlohmann_json
+  - conda env create -n usgscsm -f environment.yml
 
 script:
-  - conda activate
-  - ls $CONDA_PREFIX/include/ale
+  - conda activate usgscsm
   - mkdir build
   - cd build
-  - cmake -DCOVERAGE=ON ..
+  - cmake -DUSGSCSM_EXTERNAL_DEPS=ON -DCOVERAGE=ON ..
   - cmake --build .
   - ctest -VV
   - cd ..
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cbc90926884968e6b169b4f6635a52316ba1ed8a..492a290624293fefc60a8b051f37197b7863d737 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,24 +13,43 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
       STRING "Choose the type of build." FORCE)
 endif()
 
-# Optional build or link against CSM
-option (BUILD_CSM "Build the CSM library" ON)
-if(BUILD_CSM)
+# Use external or embedded dependencies
+option(USGSCSM_EXTERNAL_DEPS "If the library should be built with external or embedded dependencies" OFF)
+
+if(USGSCSM_EXTERNAL_DEPS)
+  # CSM API library
+  find_path(CSM_INCLUDE_DIR NAMES "csm.h"
+                            PATH_SUFFIXES "csm"
+                            PATHS $ENV{CONDA_PREFIX}/include/)
+  find_library(CSM_LIBRARY csmapi PATHS $ENV{CONDA_PREFIX}/lib)
+  message("--Found external CSM Library: ${CSM_LIBRARY}")
+  message("--Found external CSM Include Directory: ${CSM_INCLUDE_DIR}")
+
+  # Nlohmann JSON
+  find_package(nlohmann_json REQUIRED)
+
+  # ALE
+  find_package(ale REQUIRED)
+  set(ALE_TARGET ale::ale)
+else()
+  # CSM API library
   add_subdirectory(csm)
   set(CSM_INCLUDE_DIR /csm)
   set(CSM_LIBRARY csmapi)
-else()
-  find_path(CSM_INCLUDE_DIR NAMES "csm.h"
-			    PATH_SUFFIXES "csm"
-			    PATHS $ENV{CONDA_PREFIX}/include/)
-  find_library(CSM_LIBRARY csmapi PATHS $ENV{CONDA_PREFIX}/lib)
 
-  message("--Found CSM Library: ${CSM_LIBRARY}")
-  message("--Found CSM Include Directory: ${CSM_INCLUDE_DIR}")
-endif(BUILD_CSM)
+  # Nlohmann JSON
+  set(JSON_BuildTests OFF CACHE INTERNAL "")
+  add_subdirectory(json)
+
+  # ALE
+  set(ALE_USE_EXTERNAL_EIGEN OFF)
+  set(ALE_USE_EXTERNAL_JSON ON)
+  set(ALE_BUILD_LOAD OFF)
+  set(ALE_BUILD_TESTS OFF)
+  add_subdirectory(ale)
+  set(ALE_TARGET ale)
+endif(USGSCSM_EXTERNAL_DEPS)
 
-find_package(nlohmann_json REQUIRED)
-find_package(ale REQUIRED)
 
 add_library(usgscsm SHARED
             src/UsgsAstroPlugin.cpp
@@ -38,7 +57,7 @@ add_library(usgscsm SHARED
             src/UsgsAstroLsSensorModel.cpp
             src/UsgsAstroSarSensorModel.cpp
             src/Distortion.cpp
-	    src/Utilities.cpp)
+            src/Utilities.cpp)
 
 set_target_properties(usgscsm PROPERTIES
     VERSION ${PROJECT_VERSION}
@@ -56,18 +75,15 @@ target_include_directories(usgscsm
 
 target_link_libraries(usgscsm
                       ${CSM_LIBRARY}
-                      ale::ale
+                      ${ALE_TARGET}
                       nlohmann_json::nlohmann_json)
 
-if(WIN32)
-  install(TARGETS usgscsm RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR})
-else()
-  install(TARGETS usgscsm LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
-endif()
+
+install(TARGETS usgscsm LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 install(DIRECTORY ${USGSCSM_INCLUDE_DIRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 
-# Optional build or link against CSM
+# Optional build tests
 option (USGSCSM_BUILD_TESTS "Build tests" ON)
 if(USGSCSM_BUILD_TESTS)
 
diff --git a/ale b/ale
new file mode 160000
index 0000000000000000000000000000000000000000..37bb560ac6a5327063f6c36d8259b3dbb6880bab
--- /dev/null
+++ b/ale
@@ -0,0 +1 @@
+Subproject commit 37bb560ac6a5327063f6c36d8259b3dbb6880bab
diff --git a/environment.yml b/environment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6709a92d577fb2bfb6de6b9f53232e3cdac42a49
--- /dev/null
+++ b/environment.yml
@@ -0,0 +1,10 @@
+name: usgscsm
+channels:
+  - conda-forge
+  - default
+
+dependencies:
+  - cmake>=3.12
+  - ale
+  - csm
+  - nlohmann_json
diff --git a/json b/json
new file mode 160000
index 0000000000000000000000000000000000000000..1a521cbd3657eea6ba90cded2aecca93e3cd78d4
--- /dev/null
+++ b/json
@@ -0,0 +1 @@
+Subproject commit 1a521cbd3657eea6ba90cded2aecca93e3cd78d4
diff --git a/recipe/bld.bat b/recipe/bld.bat
index 04c8729b6e49648eaa3e7bface6018dd7d495dd3..f2eae36366103a50c8958e1241d4d046baeda9fd 100644
--- a/recipe/bld.bat
+++ b/recipe/bld.bat
@@ -1,7 +1,7 @@
 mkdir build
 cd build
-cmake -G "Visual Studio 15 2017 Win64" -DBUILD_TESTS=OFF ..
+cmake -G "Visual Studio 15 2017 Win64" -DUSGSCSM_EXTERNAL_DEPS=ON -DBUILD_TESTS=OFF ..
 cmake --build . --target ALL_BUILD --config Release
 copy Release\usgscsm.dll %LIBRARY_BIN%
 
-if errorlevel 1 exit 1 
+if errorlevel 1 exit 1
diff --git a/recipe/build.sh b/recipe/build.sh
index 257773c8ffd5c4e663c6a0e257b8be08771ea4e1..76ac5000305b8c01a2985113555f8f6884092c9d 100644
--- a/recipe/build.sh
+++ b/recipe/build.sh
@@ -1,4 +1,4 @@
 #!/bin/sh
 mkdir build && cd build
-cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX -DBUILD_CSM=OFF -DBUILD_TESTS=OFF ..
+cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX -DUSGSCSM_EXTERNAL_DEPS=ON -DBUILD_TESTS=OFF ..
 make install