diff --git a/.github/workflows/pip.yml b/.github/workflows/pip.yml
index 724bbc0a..782e4e80 100644
--- a/.github/workflows/pip.yml
+++ b/.github/workflows/pip.yml
@@ -13,7 +13,7 @@ jobs:
       fail-fast: false
       matrix:
         platform: [windows-latest, macos-13, ubuntu-latest]
-        python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
+        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
         # python versions: https://devguide.python.org/versions/
 
     runs-on: ${{ matrix.platform }}
diff --git a/CITATION.cff b/CITATION.cff
index 65f9cbd8..0c2c1a53 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -64,4 +64,4 @@ number: 10
 page: "E1743 - E1760"
 doi: "10.1175/BAMS-D-19-0331.1"
 url: "https://journals.ametsoc.org/view/journals/bams/101/10/bamsD190331.xml"
-version: 0.8.0
+version: 0.9.0
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a0fb629a..bb898bcf 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.21)
 
 # must be on the same line so that pyproject.toml can correctly identify the version
-project(musica-distribution VERSION 0.8.1)
+project(musica-distribution VERSION 0.9.0)
 
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake)
 set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_MODULE_PATH}/SetDefaults.cmake)
diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake
index a9f4d2ba..b6de32d6 100644
--- a/cmake/dependencies.cmake
+++ b/cmake/dependencies.cmake
@@ -62,7 +62,7 @@ endif()
 if (MUSICA_ENABLE_MICM AND MUSICA_BUILD_C_CXX_INTERFACE)
 
   set_git_default(MICM_GIT_REPOSITORY https://github.com/NCAR/micm.git)
-  set_git_default(MICM_GIT_TAG b3c462a)
+  set_git_default(MICM_GIT_TAG v.3.7.0)
 
   FetchContent_Declare(micm
       GIT_REPOSITORY ${MICM_GIT_REPOSITORY}
@@ -86,7 +86,7 @@ if (MUSICA_ENABLE_TUVX AND MUSICA_BUILD_C_CXX_INTERFACE)
   set(TUVX_INSTALL_INCLUDE_DIR ${MUSICA_INSTALL_INCLUDE_DIR} CACHE STRING "" FORCE)
 
   set_git_default(TUVX_GIT_REPOSITORY https://github.com/NCAR/tuv-x.git)
-  set_git_default(TUVX_GIT_TAG fbe0f8aa73f6630d230c6463b603d6ba64c65dcf)
+  set_git_default(TUVX_GIT_TAG v0.10.1)
 
   FetchContent_Declare(tuvx
     GIT_REPOSITORY ${TUVX_GIT_REPOSITORY}
diff --git a/src/micm/micm.cpp b/src/micm/micm.cpp
index d10656b6..d4bde009 100644
--- a/src/micm/micm.cpp
+++ b/src/micm/micm.cpp
@@ -359,15 +359,11 @@ namespace musica
       solver_parameters_ = std::make_unique<micm::SolverParameters>(solver_config.GetSolverParams());
 
       auto solver = std::make_unique<BackwardEuler>(
-          micm::SolverBuilder<
+          micm::CpuSolverBuilder<
               micm::BackwardEulerSolverParameters,
               micm::VectorMatrix<double, MICM_VECTOR_MATRIX_SIZE>,
               micm::SparseMatrix<double, micm::SparseMatrixVectorOrdering<MICM_VECTOR_MATRIX_SIZE>>,
-              micm::ProcessSet,
-              micm::LinearSolver<
-                  micm::SparseMatrix<double, micm::SparseMatrixVectorOrdering<MICM_VECTOR_MATRIX_SIZE>>,
-                  micm::LuDecomposition>,
-              VectorState>(micm::BackwardEulerSolverParameters())
+              micm::LuDecompositionDoolittle>(micm::BackwardEulerSolverParameters())
               .SetSystem(solver_parameters_->system_)
               .SetReactions(solver_parameters_->processes_)
               .SetNumberOfGridCells(num_grid_cells_)