diff --git a/CMakeLists.txt b/CMakeLists.txt
index b0f7a95c25fbefb753b04d80b9c8715032616d20..0212a3807db4be47758aea02a3a01b09013bca95 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -96,4 +96,4 @@ ELSE(UNIX)
     COMMENT "packaging only implemented in unix"
     TARGET  uninstall
   )
-ENDIF(UNIX)
+ENDIF(UNIX)
\ No newline at end of file
diff --git a/privileges.sh b/privileges.sh
deleted file mode 100755
index 0f97b5e2a940f211d62105f67a3202364c5b350f..0000000000000000000000000000000000000000
--- a/privileges.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-sudo chown root:audio bin/battery_monitor_test
-sudo chmod u+s bin/battery_monitor_test
diff --git a/scripts/set_example_privileges.sh b/scripts/set_example_privileges.sh
new file mode 100755
index 0000000000000000000000000000000000000000..9c65944f2c6ca30f5f07f55bcd2118f12787f3ec
--- /dev/null
+++ b/scripts/set_example_privileges.sh
@@ -0,0 +1,3 @@
+echo "battery_monitor_test: setting example privileges (needs sudo)"
+sudo chown root:audio bin/battery_monitor_test
+sudo chmod u+s bin/battery_monitor_test
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b25620b820467a4e0b02a0df853c4ce8961016df..b04f03f8b9d896d1f2f01a5653a067113e9a1688 100755
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -35,3 +35,28 @@ INSTALL(FILES  ../scripts/unbind_ftdi_udev.sh
                DESTINATION share/iri/${PROJECT_NAME}/scripts 
                PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ)
 ADD_SUBDIRECTORY(examples)
+
+find_package(Git QUIET)
+if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
+# Update submodules as needed
+    option(GIT_SUBMODULE "Check submodules during build" ON)
+    if(GIT_SUBMODULE)
+        message(STATUS "Submodule update")
+        execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive
+                        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                        RESULT_VARIABLE GIT_SUBMOD_RESULT)
+        if(NOT GIT_SUBMOD_RESULT EQUAL "0")
+            message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules")
+        endif()
+    endif()
+endif()
+
+SET(firmware_dir avr8_smbus_battery_monitor)
+
+if(NOT EXISTS "${PROJECT_SOURCE_DIR}/${firmware_dir}/Makefile")
+    message(FATAL_ERROR "The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules and try again.")
+endif()
+
+add_custom_target(firmware ALL COMMAND make
+                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../${firmware_dir}
+)
diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt
index 79cad01556ed4cdbbfd53625f73f4415cef22cb3..87b3022aab24aecef50b089f6eeec9f209d88964 100755
--- a/src/examples/CMakeLists.txt
+++ b/src/examples/CMakeLists.txt
@@ -4,6 +4,6 @@ ADD_EXECUTABLE(battery_monitor_test battery_monitor_test.cpp)
 TARGET_LINK_LIBRARIES(battery_monitor_test battery_monitor)
 
 add_custom_command(TARGET battery_monitor_test POST_BUILD 
-  COMMAND sh ./privileges.sh 
+  COMMAND sh ./scripts/set_example_privileges.sh 
   WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})