diff --git a/src/drivers/kinetis/tone_alarm/CMakeLists.txt b/src/drivers/kinetis/tone_alarm/CMakeLists.txt
index ae51757d6ac92a8896045a0c9e9e77142c7514d1..768934bf1bdf7c662346983a47e5a8749f45b468 100644
--- a/src/drivers/kinetis/tone_alarm/CMakeLists.txt
+++ b/src/drivers/kinetis/tone_alarm/CMakeLists.txt
@@ -37,5 +37,6 @@ px4_add_module(
 	SRCS
 		tone_alarm.cpp
 	DEPENDS
+		circuit_breaker
 		tunes
 	)
\ No newline at end of file
diff --git a/src/drivers/kinetis/tone_alarm/tone_alarm.cpp b/src/drivers/kinetis/tone_alarm/tone_alarm.cpp
index 4cbf7b04b03b59b86a22a2642f28f3e19c382a5c..7f25e34a26bd470466eea41094007bc87fc77e9f 100644
--- a/src/drivers/kinetis/tone_alarm/tone_alarm.cpp
+++ b/src/drivers/kinetis/tone_alarm/tone_alarm.cpp
@@ -113,7 +113,7 @@
 #include "kinetis_tpm.h"
 
 #include <systemlib/err.h>
-#include <systemlib/circuit_breaker.h>
+#include <circuit_breaker/circuit_breaker.h>
 
 #define CAT3_(A, B, C)    A##B##C
 #define CAT3(A, B, C)     CAT3_(A, B, C)
diff --git a/src/drivers/px4fmu/CMakeLists.txt b/src/drivers/px4fmu/CMakeLists.txt
index 6a10c9131a9c16a812781069e651f5dffc657eec..60867d269770efd659dce2617aa9e96510fca05f 100644
--- a/src/drivers/px4fmu/CMakeLists.txt
+++ b/src/drivers/px4fmu/CMakeLists.txt
@@ -38,5 +38,6 @@ px4_add_module(
 	SRCS
 		fmu.cpp
 	DEPENDS
+		circuit_breaker
 		rc
 	)
diff --git a/src/drivers/px4fmu/fmu.cpp b/src/drivers/px4fmu/fmu.cpp
index f7d2548317116aec3fc33863b9ec1c6776c55b4f..7a9e22cc7eeb9500e377d59093ac681da992d5e9 100644
--- a/src/drivers/px4fmu/fmu.cpp
+++ b/src/drivers/px4fmu/fmu.cpp
@@ -56,7 +56,7 @@
 #include <px4_getopt.h>
 #include <px4_log.h>
 #include <px4_module.h>
-#include <systemlib/circuit_breaker.h>
+#include <circuit_breaker/circuit_breaker.h>
 #include <lib/mixer/mixer.h>
 #include <parameters/param.h>
 #include <perf/perf_counter.h>
diff --git a/src/drivers/px4io/CMakeLists.txt b/src/drivers/px4io/CMakeLists.txt
index f48bd9ec6e4c9cbef7721c88ff55d18a800ae432..0d779b33340d7493a0ebe08eebd0930eb5a91211 100644
--- a/src/drivers/px4io/CMakeLists.txt
+++ b/src/drivers/px4io/CMakeLists.txt
@@ -42,6 +42,7 @@ px4_add_module(
 		px4io_serial_f4.cpp
 		px4io_serial_f7.cpp
 	DEPENDS
+		circuit_breaker
 	)
 
 # include the px4io binary in ROMFS
diff --git a/src/drivers/px4io/px4io.cpp b/src/drivers/px4io/px4io.cpp
index dc4a949864f8da680e7e4489641e501f473987a9..c75a7d995e2b9c202e3f30a3ab85936ef7b3258a 100644
--- a/src/drivers/px4io/px4io.cpp
+++ b/src/drivers/px4io/px4io.cpp
@@ -71,7 +71,7 @@
 #include <perf/perf_counter.h>
 #include <systemlib/err.h>
 #include <parameters/param.h>
-#include <systemlib/circuit_breaker.h>
+#include <circuit_breaker/circuit_breaker.h>
 #include <systemlib/mavlink_log.h>
 
 #include <uORB/topics/actuator_controls.h>
diff --git a/src/drivers/samv7/tone_alarm/CMakeLists.txt b/src/drivers/samv7/tone_alarm/CMakeLists.txt
index 815f4d5c691f2a9204f6b47051db4082741be3a6..c54cbdd3ec2406390014561bc129f1b14ae4408b 100644
--- a/src/drivers/samv7/tone_alarm/CMakeLists.txt
+++ b/src/drivers/samv7/tone_alarm/CMakeLists.txt
@@ -37,5 +37,6 @@ px4_add_module(
 	SRCS
 		tone_alarm.cpp
 	DEPENDS
+		circuit_breaker
 		tunes
 	)
\ No newline at end of file
diff --git a/src/drivers/samv7/tone_alarm/tone_alarm.cpp b/src/drivers/samv7/tone_alarm/tone_alarm.cpp
index afb470a5cd5d640a8f36e882b3c8373ed4dcca5f..672321331ac6f0c23f3e47a098a0d49c1214c3af 100644
--- a/src/drivers/samv7/tone_alarm/tone_alarm.cpp
+++ b/src/drivers/samv7/tone_alarm/tone_alarm.cpp
@@ -116,7 +116,7 @@
 #include <sam_tc.h>
 
 #include <systemlib/err.h>
-#include <systemlib/circuit_breaker.h>
+#include <circuit_breaker/circuit_breaker.h>
 
 /* Check that tone alarm and HRT timers are different */
 #if defined(TONE_ALARM_CHANNEL)  && defined(HRT_TIMER_CHANNEL)
diff --git a/src/drivers/stm32/tone_alarm/CMakeLists.txt b/src/drivers/stm32/tone_alarm/CMakeLists.txt
index 815f4d5c691f2a9204f6b47051db4082741be3a6..c54cbdd3ec2406390014561bc129f1b14ae4408b 100644
--- a/src/drivers/stm32/tone_alarm/CMakeLists.txt
+++ b/src/drivers/stm32/tone_alarm/CMakeLists.txt
@@ -37,5 +37,6 @@ px4_add_module(
 	SRCS
 		tone_alarm.cpp
 	DEPENDS
+		circuit_breaker
 		tunes
 	)
\ No newline at end of file
diff --git a/src/drivers/stm32/tone_alarm/tone_alarm.cpp b/src/drivers/stm32/tone_alarm/tone_alarm.cpp
index 4d8f95022123fa562fed4fe6694bc1fdc8754e46..ad1746d20b34db3e7b72589dc50f7f6102c397ca 100644
--- a/src/drivers/stm32/tone_alarm/tone_alarm.cpp
+++ b/src/drivers/stm32/tone_alarm/tone_alarm.cpp
@@ -109,7 +109,7 @@
 #include <drivers/drv_hrt.h>
 
 #include <systemlib/err.h>
-#include <systemlib/circuit_breaker.h>
+#include <circuit_breaker/circuit_breaker.h>
 
 #include <px4_workqueue.h>
 
diff --git a/src/examples/uuv_example_app/uuv_example_app.cpp b/src/examples/uuv_example_app/uuv_example_app.cpp
index 36f241c4aeb79138a0902f2a8d64d1a8de9a6bac..86739b1c0f95faaa9b7d65920f44c5a702938f0b 100644
--- a/src/examples/uuv_example_app/uuv_example_app.cpp
+++ b/src/examples/uuv_example_app/uuv_example_app.cpp
@@ -54,7 +54,7 @@
 #include <parameters/param.h>
 #include <systemlib/err.h>
 #include <perf/perf_counter.h>
-#include <systemlib/circuit_breaker.h>
+
 // internal libraries
 #include <lib/mathlib/mathlib.h>
 #include <matrix/math.hpp>
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index 93152ae53401211da19d8238cd74307e89d12b96..8aa234c76db8984bbfc7eac1e40ec3c3de4775b0 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -35,6 +35,7 @@ px4_add_git_submodule(TARGET git_ecl PATH "ecl")
 px4_add_git_submodule(TARGET git_matrix PATH "matrix")
 
 add_subdirectory(battery)
+add_subdirectory(circuit_breaker)
 add_subdirectory(controllib)
 add_subdirectory(conversion)
 add_subdirectory(drivers)
diff --git a/src/lib/circuit_breaker/CMakeLists.txt b/src/lib/circuit_breaker/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..54ee7cdbd010e9010cd3bc532bbb62454022f826
--- /dev/null
+++ b/src/lib/circuit_breaker/CMakeLists.txt
@@ -0,0 +1,34 @@
+############################################################################
+#
+#   Copyright (c) 2018 PX4 Development Team. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+# 3. Neither the name PX4 nor the names of its contributors may be
+#    used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+px4_add_library(circuit_breaker circuit_breaker.cpp)
diff --git a/src/modules/systemlib/circuit_breaker.cpp b/src/lib/circuit_breaker/circuit_breaker.cpp
similarity index 98%
rename from src/modules/systemlib/circuit_breaker.cpp
rename to src/lib/circuit_breaker/circuit_breaker.cpp
index 9a6fdd58340a9a6a146e28a91bb00542d6267184..099238d2fd25859c1393feb0cbd7cfebf67f83f2 100644
--- a/src/modules/systemlib/circuit_breaker.cpp
+++ b/src/lib/circuit_breaker/circuit_breaker.cpp
@@ -42,9 +42,10 @@
  * parameter needs to set to the key (magic).
  */
 
+#include "circuit_breaker.h"
+
 #include <stdint.h>
 #include <px4_defines.h>
-#include <systemlib/circuit_breaker.h>
 
 bool circuit_breaker_enabled(const char *breaker, int32_t magic)
 {
diff --git a/src/modules/systemlib/circuit_breaker.h b/src/lib/circuit_breaker/circuit_breaker.h
similarity index 99%
rename from src/modules/systemlib/circuit_breaker.h
rename to src/lib/circuit_breaker/circuit_breaker.h
index dc403ceb72eb88f3922ff44050dfc78a1a44a095..d3ac50ea6661d5456b4bea1d452713ecfc68c7a5 100644
--- a/src/modules/systemlib/circuit_breaker.h
+++ b/src/lib/circuit_breaker/circuit_breaker.h
@@ -59,7 +59,7 @@
 #define CBRK_USB_CHK_KEY	197848
 #define CBRK_VELPOSERR_KEY	201607
 
-#include <stdbool.h>
+#include <stdint.h>
 
 __BEGIN_DECLS
 
diff --git a/src/modules/systemlib/circuit_breaker_params.c b/src/lib/circuit_breaker/circuit_breaker_params.c
similarity index 100%
rename from src/modules/systemlib/circuit_breaker_params.c
rename to src/lib/circuit_breaker/circuit_breaker_params.c
diff --git a/src/modules/commander/CMakeLists.txt b/src/modules/commander/CMakeLists.txt
index 8c70eca7c05aa5dc3d96a3c912991a8e7340de60..b6796a2cc82376ff952fbc710e53d5adcf5e19dc 100644
--- a/src/modules/commander/CMakeLists.txt
+++ b/src/modules/commander/CMakeLists.txt
@@ -54,6 +54,7 @@ px4_add_module(
 		rc_check.cpp
 		state_machine_helper.cpp
 	DEPENDS
+		circuit_breaker
 		df_driver_framework
 		git_ecl
 		ecl_geo
diff --git a/src/modules/commander/commander.cpp b/src/modules/commander/commander.cpp
index fe4f47dd365c58226477b9be93e39219de1ac1fb..34dd9e65d5306353ed1e1edf295928c7de139493 100644
--- a/src/modules/commander/commander.cpp
+++ b/src/modules/commander/commander.cpp
@@ -73,7 +73,7 @@
 #include <px4_shutdown.h>
 #include <px4_tasks.h>
 #include <px4_time.h>
-#include <systemlib/circuit_breaker.h>
+#include <circuit_breaker/circuit_breaker.h>
 #include <systemlib/err.h>
 #include <systemlib/hysteresis/hysteresis.h>
 #include <systemlib/mavlink_log.h>
diff --git a/src/modules/mc_att_control/CMakeLists.txt b/src/modules/mc_att_control/CMakeLists.txt
index 32012dd6869c485ae4dc447ad6d4f330e237d44d..588e43f786d016dfdc8b01a410a1a719e3197295 100644
--- a/src/modules/mc_att_control/CMakeLists.txt
+++ b/src/modules/mc_att_control/CMakeLists.txt
@@ -40,6 +40,7 @@ px4_add_module(
 	SRCS
 		mc_att_control_main.cpp
 	DEPENDS
+		circuit_breaker
 		conversion
 		mathlib
 	)
diff --git a/src/modules/mc_att_control/mc_att_control_main.cpp b/src/modules/mc_att_control/mc_att_control_main.cpp
index d539b985ddb8e85e4e4592b14bc73f2479e66dfc..0960b49cfb347af98f9e9c20f89b96588734b080 100644
--- a/src/modules/mc_att_control/mc_att_control_main.cpp
+++ b/src/modules/mc_att_control/mc_att_control_main.cpp
@@ -48,7 +48,7 @@
 #include <conversion/rotation.h>
 #include <drivers/drv_hrt.h>
 #include <lib/ecl/geo/geo.h>
-#include <systemlib/circuit_breaker.h>
+#include <circuit_breaker/circuit_breaker.h>
 #include <mathlib/math/Limits.hpp>
 #include <mathlib/math/Functions.hpp>
 
diff --git a/src/modules/systemlib/CMakeLists.txt b/src/modules/systemlib/CMakeLists.txt
index 56bce98846d0dac0b5d90dabb53090a6282ac84c..16ec98603ca5ab3b99b56768c1c544db50c4579f 100644
--- a/src/modules/systemlib/CMakeLists.txt
+++ b/src/modules/systemlib/CMakeLists.txt
@@ -33,7 +33,6 @@
 
 set(SRCS
 	airspeed.cpp
-	circuit_breaker.cpp
 	conversions.c
 	cpuload.c
 	crc.c