diff --git a/.gitignore b/.gitignore
index dc065f449fd0e09dcc348a59a1cfd7ef092701a8..a323c58cc3b5b7d71a112c5af30a7fb8f2d6be69 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,7 +44,6 @@ src/modules/uORB/topics/*
 src/platforms/nuttx/px4_messages/*
 src/platforms/ros/px4_messages/*
 Firmware.zip
-unittests/build
 *.generated.h
 .vagrant
 *.pretty
diff --git a/.gitmodules b/.gitmodules
index 97df0ea259cc4e7e808da93fb0b7dd70a36cd42f..26451efda8d6b4497801091608f924e5b50f8131 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -22,10 +22,6 @@
 [submodule "Tools/sitl_gazebo"]
 	path = Tools/sitl_gazebo
 	url = https://github.com/PX4/sitl_gazebo.git
-[submodule "unittests/googletest"]
-	path = unittests/googletest
-	url = https://github.com/google/googletest.git
-	ignore = untracked
 [submodule "src/lib/matrix"]
 	path = src/lib/matrix
 	url = https://github.com/PX4/Matrix.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d4dd98d95986d6e867e396223ad2332f24483053..5583a21709cf5c8b2a94467acfc53c1fdf6e3c33 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -198,7 +198,6 @@ px4_add_git_submodule(TARGET git_gazebo PATH "Tools/sitl_gazebo")
 px4_add_git_submodule(TARGET git_gencpp PATH "Tools/gencpp")
 px4_add_git_submodule(TARGET git_genmsg PATH "Tools/genmsg")
 px4_add_git_submodule(TARGET git_gps_devices PATH "src/drivers/gps/devices")
-px4_add_git_submodule(TARGET git_gtest PATH "unittests/gtest")
 px4_add_git_submodule(TARGET git_jmavsim PATH "Tools/jMAVSim")
 px4_add_git_submodule(TARGET git_matrix PATH "src/lib/matrix")
 px4_add_git_submodule(TARGET git_mavlink PATH "mavlink/include/mavlink/v1.0")
diff --git a/Makefile b/Makefile
index 8258c5e3349c280a3baf7f6fe42f4cce021c151c..1a827258b7acb7df1a4241ca85c1de95ed517271 100644
--- a/Makefile
+++ b/Makefile
@@ -305,26 +305,22 @@ format:
 
 # Testing
 # --------------------------------------------------------------------
-.PHONY: unittest run_tests_posix tests tests_coverage
-
-unittest:
-	echo "UNIT TEST DISABLED"
+.PHONY: run_tests_posix tests tests_coverage
 
 run_tests_posix:
 	$(MAKE) --no-print-directory posix_sitl_default test_results
 
-tests: unittest run_tests_posix
+tests: run_tests_posix
 
 tests_coverage:
 	@$(MAKE) --no-print-directory posix_sitl_default test_coverage_genhtml PX4_CMAKE_BUILD_TYPE=Coverage
 
 coveralls_upload:
 	@cpp-coveralls --include src/ \
-		--exclude src/lib/DriverFramework \
-		--exclude src/lib/ecl \
-		--exclude src/lib/Matrix \
+		--exclude=src/lib/DriverFramework \
+		--exclude=src/lib/ecl \
+		--exclude=src/lib/Matrix \
 		--exclude=src/modules/uavcan/libuavcan \
-		--exclude-pattern ".*/unittests/googletest/.*" \
 		--root . --build-root build_posix_sitl_default/ --follow-symlinks
 
 codecov_upload:
diff --git a/Tools/fix_headers.sh b/Tools/fix_headers.sh
index 390153ef653c00d128e71be77fe620d7de1b72d4..fa43bd3938cb54898db22a8b814658a69a4fc84a 100755
--- a/Tools/fix_headers.sh
+++ b/Tools/fix_headers.sh
@@ -101,7 +101,7 @@ echo "TMPDIR=\"$TMPDIR\""
 
 # Make a list of all source and header files that we need to fix.
 # List of directories that we don't want to touch.
-EXCLUDE_FOLDERS=".git unittests Tools"
+EXCLUDE_FOLDERS=".git Tools"
 EXCLUDE_PATTERNS="examples matlab/scripts tests test unit_test *_test *_tests test_* apps/test_* UnitTests"
 # A regular expression for the exclude patterns.
 EXCLUDE_PATTERNS_RE="($(echo $EXCLUDE_PATTERNS | sed -e 's/\*/[^\/]*/g;s/ /|/g'))"
diff --git a/src/drivers/device/vdev.cpp b/src/drivers/device/vdev.cpp
index ca473226a7a7d4f075d90890db51fc3e018d5451..42fa16e1f6475310902ae40df2b50b644243418f 100644
--- a/src/drivers/device/vdev.cpp
+++ b/src/drivers/device/vdev.cpp
@@ -569,7 +569,6 @@ void VDev::showDevices()
 
 	pthread_mutex_unlock(&devmutex);
 
-#ifndef __PX4_UNIT_TESTS
 	PX4_INFO("DF Devices:");
 	const char *dev_path;
 	unsigned int index = 0;
@@ -583,8 +582,6 @@ void VDev::showDevices()
 			PX4_INFO("   %s", dev_path);
 		}
 	} while (i == 0);
-
-#endif
 }
 
 void VDev::showTopics()
diff --git a/src/firmware/posix/sitl_tests.cmake b/src/firmware/posix/sitl_tests.cmake
index 06baea528ecda05b196db8dce14a974fe7391f77..b67d2f3daeaf186042d22964157e1ebee527c902 100644
--- a/src/firmware/posix/sitl_tests.cmake
+++ b/src/firmware/posix/sitl_tests.cmake
@@ -22,6 +22,7 @@ set(tests
 	mc_pos_control
 	mixer
 	param
+	parameters
 	perf
 	rc
 	servo
diff --git a/src/modules/systemlib/param/param.c b/src/modules/systemlib/param/param.c
index ec075aa71b5dc207e9e6ec0098a3b786d72d141f..e3c23a69f45c104476a3dc031c79b35e2c26872c 100644
--- a/src/modules/systemlib/param/param.c
+++ b/src/modules/systemlib/param/param.c
@@ -84,7 +84,6 @@
 static const char *param_default_file = PX4_ROOTFSDIR"/eeprom/parameters";
 static char *param_user_file = NULL;
 
-
 #if 0
 # define debug(fmt, args...)		do { warnx(fmt, ##args); } while(0)
 #else
@@ -111,15 +110,8 @@ static bool autosave_disabled = false;
 /**
  * Array of static parameter info.
  */
-#ifdef _UNIT_TEST
-extern struct param_info_s	param_array[];
-extern struct param_info_s	*param_info_base;
-extern struct param_info_s	*param_info_limit;
-#define param_info_count	(param_info_limit - param_info_base)
-#else
 static const struct param_info_s *param_info_base = (const struct param_info_s *) &px4_parameters;
-#define	param_info_count		px4_parameters.param_count
-#endif /* _UNIT_TEST */
+#define	param_info_count px4_parameters.param_count
 
 /**
  * Storage for modified parameters.
diff --git a/src/modules/systemlib/param/param_shmem.c b/src/modules/systemlib/param/param_shmem.c
index 5a3d0fb308dc4078223ef89bbc9c021bf04c9011..4dc17a20326bddfee76726d494949d0e5a0a05ff 100644
--- a/src/modules/systemlib/param/param_shmem.c
+++ b/src/modules/systemlib/param/param_shmem.c
@@ -96,15 +96,8 @@ static bool autosave_disabled = false;
 /**
  * Array of static parameter info.
  */
-#ifdef _UNIT_TEST
-extern struct param_info_s	param_array[];
-extern struct param_info_s	*param_info_base;
-extern struct param_info_s	*param_info_limit;
-#define param_info_count	(param_info_limit - param_info_base)
-#else
 static struct param_info_s *param_info_base = (struct param_info_s *) &px4_parameters;
 #define	param_info_count		px4_parameters.param_count
-#endif /* _UNIT_TEST */
 
 /**
  * Storage for modified parameters.
diff --git a/src/platforms/px4_config.h b/src/platforms/px4_config.h
index c84d5d74c6b338a1a34b0392f8fbc3e639eb9ce6..2493cf9218b2f42602866366727a9a9fde7af6fd 100644
--- a/src/platforms/px4_config.h
+++ b/src/platforms/px4_config.h
@@ -47,7 +47,5 @@
 #include <board_config.h>
 
 #elif defined (__PX4_POSIX)
-#  if !defined(__PX4_UNIT_TESTS)
-#    include <board_config.h>
-#  endif
+# include <board_config.h>
 #endif
diff --git a/src/systemcmds/tests/CMakeLists.txt b/src/systemcmds/tests/CMakeLists.txt
index 7d40cc3c7c493349e8516812139c989a52e23d99..9c2be6f4c5b5016320a5acb9cd23ddebc9ee716f 100644
--- a/src/systemcmds/tests/CMakeLists.txt
+++ b/src/systemcmds/tests/CMakeLists.txt
@@ -34,16 +34,16 @@
 set(srcs
 	test_adc.c
 	test_autodeclination.cpp
-	test_dataman.c
-	test_hysteresis.cpp
 	test_bson.c
 	test_conv.cpp
+	test_dataman.c
 	test_file.c
 	test_file2.c
 	test_float.cpp
 	test_gpio.c
 	test_hott_telemetry.c
 	test_hrt.c
+	test_hysteresis.cpp
 	test_int.cpp
 	test_jig_voltages.c
 	test_led.c
@@ -52,6 +52,7 @@ set(srcs
 	test_mixer.cpp
 	test_mount.c
 	test_param.c
+	test_parameters.cpp
 	test_perf.c
 	test_ppm_loopback.c
 	test_rc.c
diff --git a/src/systemcmds/tests/params.c b/src/systemcmds/tests/params.c
new file mode 100644
index 0000000000000000000000000000000000000000..6aef4948610eca515c2aa1acf24a0e2643237a78
--- /dev/null
+++ b/src/systemcmds/tests/params.c
@@ -0,0 +1,24 @@
+/**
+ * @group Testing
+ */
+PARAM_DEFINE_INT32(TEST_1, 2);
+
+/**
+ * @group Testing
+ */
+PARAM_DEFINE_INT32(TEST_2, 4);
+
+/**
+ * @group Testing
+ */
+PARAM_DEFINE_INT32(TEST_RC_X, 8);
+
+/**
+ * @group Testing
+ */
+PARAM_DEFINE_INT32(TEST_RC2_X, 16);
+
+/**
+ * @group Testing
+ */
+PARAM_DEFINE_INT32(TEST_PARAMS, 12345678);
diff --git a/src/systemcmds/tests/test_param.c b/src/systemcmds/tests/test_param.c
index 8439bf998a5e8dd9914935550a36f5553eaec0bb..72c054edf8f52a2961d2db062fea8a0b2b61cd5e 100644
--- a/src/systemcmds/tests/test_param.c
+++ b/src/systemcmds/tests/test_param.c
@@ -46,11 +46,6 @@
 #define PARAM_MAGIC1 12345678
 #define PARAM_MAGIC2 0xa5a5a5a5
 
-/**
- * @group Testing
- */
-PARAM_DEFINE_INT32(TEST_PARAMS, 12345678);
-
 int
 test_param(int argc, char *argv[])
 {
diff --git a/src/systemcmds/tests/test_parameters.cpp b/src/systemcmds/tests/test_parameters.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4e9dc2bf87cde81937c5e72852243e3a142b713b
--- /dev/null
+++ b/src/systemcmds/tests/test_parameters.cpp
@@ -0,0 +1,172 @@
+#include <unit_test/unit_test.h>
+
+class ParameterTest : public UnitTest
+{
+public:
+	virtual bool run_tests();
+
+	ParameterTest()
+	{
+		p0 = param_find("TEST_RC_X");
+		p1 = param_find("TEST_RC2_X");
+		p2 = param_find("TEST_1");
+		p3 = param_find("TEST_2");
+	}
+
+private:
+
+	param_t p0{PARAM_INVALID};
+	param_t p1{PARAM_INVALID};
+	param_t p2{PARAM_INVALID};
+	param_t p3{PARAM_INVALID};
+
+	bool _assert_parameter_int_value(param_t param, int32_t expected);
+	bool _set_all_int_parameters_to(int32_t value);
+
+	bool SimpleFind();
+	bool ResetAll();
+	bool ResetAllExcludesOne();
+	bool ResetAllExcludesTwo();
+	bool ResetAllExcludesBoundaryCheck();
+	bool ResetAllExcludesWildcard();
+};
+
+bool ParameterTest::_assert_parameter_int_value(param_t param, int32_t expected)
+{
+	int32_t value;
+	int result = param_get(param, &value);
+	ut_compare("param_get did not return parameter", 0, result);
+	ut_compare("value for param doesn't match default value", expected, value);
+
+	return true;
+}
+
+bool ParameterTest::_set_all_int_parameters_to(int32_t value)
+{
+	param_set(p0, &value);
+	param_set(p1, &value);
+	param_set(p2, &value);
+	param_set(p3, &value);
+
+	bool ret = false;
+
+	ret = ret || _assert_parameter_int_value(p0, value);
+	ret = ret || _assert_parameter_int_value(p1, value);
+	ret = ret || _assert_parameter_int_value(p2, value);
+	ret = ret || _assert_parameter_int_value(p3, value);
+
+	return ret;
+}
+
+bool ParameterTest::SimpleFind()
+{
+	param_t param = param_find("TEST_2");
+
+	ut_assert_true(PARAM_INVALID != param);
+
+	int32_t value;
+	int result = param_get(param, &value);
+
+	ut_compare("param_get did not return parameter", 0, result);
+	ut_compare("value of returned parameter does not match", 4, value);
+
+	return true;
+}
+
+bool ParameterTest::ResetAll()
+{
+	_set_all_int_parameters_to(50);
+
+	param_reset_all();
+
+	bool ret = false;
+
+	ret = ret || _assert_parameter_int_value(p0, 8);
+	ret = ret || _assert_parameter_int_value(p1, 16);
+	ret = ret || _assert_parameter_int_value(p2, 2);
+	ret = ret || _assert_parameter_int_value(p3, 4);
+
+	return ret;
+}
+
+bool ParameterTest::ResetAllExcludesOne()
+{
+	_set_all_int_parameters_to(50);
+
+	const char *excludes[] = {"TEST_RC_X"};
+	param_reset_excludes(excludes, 1);
+
+	bool ret = false;
+
+	ret = ret || _assert_parameter_int_value(p0, 50);
+	ret = ret || _assert_parameter_int_value(p1, 16);
+	ret = ret || _assert_parameter_int_value(p2, 2);
+	ret = ret || _assert_parameter_int_value(p3, 4);
+
+	return ret;
+}
+
+bool ParameterTest::ResetAllExcludesTwo()
+{
+	_set_all_int_parameters_to(50);
+
+	const char *excludes[] = {"TEST_RC_X", "TEST_1"};
+	param_reset_excludes(excludes, 2);
+
+	bool ret = false;
+
+	ret = ret || _assert_parameter_int_value(p0, 50);
+	ret = ret || _assert_parameter_int_value(p1, 16);
+	ret = ret || _assert_parameter_int_value(p2, 50);
+	ret = ret || _assert_parameter_int_value(p3, 4);
+
+	return ret;
+}
+
+bool ParameterTest::ResetAllExcludesBoundaryCheck()
+{
+	_set_all_int_parameters_to(50);
+
+	const char *excludes[] = {"TEST_RC_X", "TEST_1"};
+	param_reset_excludes(excludes, 1);
+
+	bool ret = false;
+
+	ret = ret || _assert_parameter_int_value(p0, 50);
+	ret = ret || _assert_parameter_int_value(p1, 16);
+	ret = ret || _assert_parameter_int_value(p2, 2);
+	ret = ret || _assert_parameter_int_value(p3, 4);
+
+	return ret;
+}
+
+bool ParameterTest::ResetAllExcludesWildcard()
+{
+	_set_all_int_parameters_to(50);
+
+	const char *excludes[] = {"TEST_RC*"};
+	param_reset_excludes(excludes, 1);
+
+	bool ret = false;
+
+	ret = ret || _assert_parameter_int_value(p0, 50);
+	ret = ret || _assert_parameter_int_value(p1, 50);
+	ret = ret || _assert_parameter_int_value(p2, 2);
+	ret = ret || _assert_parameter_int_value(p3, 4);
+
+	return ret;
+}
+
+bool ParameterTest::run_tests()
+{
+	ut_run_test(SimpleFind);
+	ut_run_test(ResetAll);
+	ut_run_test(ResetAllExcludesOne);
+	ut_run_test(ResetAllExcludesTwo);
+	ut_run_test(ResetAllExcludesBoundaryCheck);
+	ut_run_test(ResetAllExcludesWildcard);
+
+	return (_tests_failed == 0);
+}
+
+ut_declare_test_c(test_parameters, ParameterTest)
diff --git a/src/systemcmds/tests/tests_main.c b/src/systemcmds/tests/tests_main.c
index ff0c261f2ee01afbb09d146fc22932d1f5e00782..f3769e77de94db898fb3cdc4209e9611809eba74 100644
--- a/src/systemcmds/tests/tests_main.c
+++ b/src/systemcmds/tests/tests_main.c
@@ -116,6 +116,7 @@ const struct {
 	{"matrix",		test_matrix,	0},
 	{"mount",		test_mount,	OPT_NOJIGTEST | OPT_NOALLTEST},
 	{"param",		test_param,	0},
+	{"parameters",	test_parameters,	0},
 	{"perf",		test_perf,	OPT_NOJIGTEST},
 	{"ppm",			test_ppm,	OPT_NOJIGTEST | OPT_NOALLTEST},
 	{"ppm_loopback",	test_ppm_loopback,	OPT_NOALLTEST},
diff --git a/src/systemcmds/tests/tests_main.h b/src/systemcmds/tests/tests_main.h
index 10f73bdb7bd2cc4a44cf387a46b83200b8ed3f05..cf2aecefb0997f60cd094f0af139241c9919453f 100644
--- a/src/systemcmds/tests/tests_main.h
+++ b/src/systemcmds/tests/tests_main.h
@@ -86,6 +86,7 @@ extern int	test_uart_break(int argc, char *argv[]);
 extern int	test_uart_console(int argc, char *argv[]);
 extern int	test_uart_loopback(int argc, char *argv[]);
 extern int	test_uart_send(int argc, char *argv[]);
+extern int	test_parameters(int argc, char *argv[]);
 
 /* external */
 extern int commander_tests_main(int argc, char *argv[]);
diff --git a/unittests/.gitignore b/unittests/.gitignore
deleted file mode 100644
index 4f34a742f7f16ea9fe327c70ec9cd9c5f685539d..0000000000000000000000000000000000000000
--- a/unittests/.gitignore
+++ /dev/null
@@ -1,22 +0,0 @@
-./obj/*
-gtest_main.a
-dsm_test
-mixer_test
-sf0x_test
-sbus2_test
-autodeclination_test
-rc_input_test
-conversion_test
-param_test
-*.a
-sample_unittest
-CMakeCache.txt
-CMakeFiles
-CTestTestfile.cmake
-cmake_install.cmake
-Makefile
-.ninja_deps
-.ninja_log
-build.ninja
-rules.ninja
-
diff --git a/unittests/CMakeLists.txt b/unittests/CMakeLists.txt
deleted file mode 100644
index f83f2f82343782768f1958d0ff61caf8cb35c4be..0000000000000000000000000000000000000000
--- a/unittests/CMakeLists.txt
+++ /dev/null
@@ -1,118 +0,0 @@
-cmake_minimum_required(VERSION 3.1)
-
-if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
-	add_compile_options(-Qunused-arguments )
-endif()
-if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
-	add_compile_options(-Qunused-arguments)
-endif()
-
-project(px4_unittests)
-enable_testing()
-
-message(STATUS ${CONFIG})
-
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -std=gnu99 -g")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -std=gnu++0x -g -fno-exceptions -fno-rtti -fno-threadsafe-statics -DCONFIG_WCHAR_BUILTIN -D__CUSTOM_FILE_IO__")
-
-# code coverage
-if ($ENV{PX4_CODE_COVERAGE} MATCHES "1")
-	message(STATUS "Code coverage build flags enabled")
-	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g3 -fprofile-arcs -ftest-coverage --coverage")
-	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -g3 -fprofile-arcs -ftest-coverage --coverage")
-endif()
-
-if (NOT PX4_SOURCE_DIR)
-	set(PX4_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
-endif()
-
-set(GTEST_DIR ${PX4_SOURCE_DIR}/unittests/googletest)
-add_subdirectory(${GTEST_DIR})
-include_directories(${GTEST_DIR}/include)
-
-set(PX4_SRC ${PX4_SOURCE_DIR}/src)
-set(PX4_SITL_BUILD ${PX4_SRC}/../build_posix_sitl_default)
-
-include_directories(${PX4_SOURCE_DIR})
-include_directories(${PX4_SITL_BUILD}/src)
-include_directories(${PX4_SITL_BUILD}/src/modules)
-include_directories(${PX4_SITL_BUILD}/src/modules/param)
-include_directories(${PX4_SITL_BUILD}/src/modules/uORB)
-include_directories(${PX4_SRC})
-include_directories(${PX4_SRC}/drivers)
-include_directories(${PX4_SRC}/drivers/device)
-include_directories(${PX4_SRC}/lib)
-include_directories(${PX4_SRC}/lib/DriverFramework/framework/include)
-include_directories(${PX4_SRC}/modules)
-include_directories(${PX4_SRC}/include)
-include_directories(${PX4_SRC}/modules/uORB)
-include_directories(${PX4_SRC}/platforms)
-include_directories(${PX4_SRC}/platforms/posix/include)
-include_directories(${PX4_SRC}/platforms/posix/px4_layer)
-include_directories(${PX4_SRC}/platforms/posix/work_queue)
-
-add_definitions(-D__CUSTOM_FILE_IO__)
-add_definitions(-D__EXPORT=)
-add_definitions(-D__PX4_POSIX)
-add_definitions(-D__PX4_TESTS)
-add_definitions(-D__PX4_UNIT_TESTS)
-add_definitions(-D_UNIT_TEST=)
-add_definitions(-DPARAM_NO_AUTOSAVE)
-add_definitions(-DERROR=-1)
-add_definitions(-Dmain_t=int)
-add_definitions(-Dnoreturn_function=)
-add_definitions(-DOK=0)
-
-if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-	add_definitions(-D__PX4_DARWIN)
-else()
-	add_definitions(-D__PX4_LINUX)
-endif()
-
-# the following flags only apply to the PX4 source
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include visibility.h")
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include visibility.h")
-
-set(PX4_PLATFORM
-	${PX4_SITL_BUILD}/libmsg_gen.a
-	${PX4_SITL_BUILD}/src/drivers/boards/sitl/libdrivers__boards__sitl.a
-	${PX4_SITL_BUILD}/src/drivers/device/libdrivers__device.a
-	${PX4_SITL_BUILD}/src/lib/DriverFramework/framework/liblib__DriverFramework__framework.a
-	${PX4_SITL_BUILD}/src/lib/DriverFramework/framework/src/libdf_driver_framework.a
-	${PX4_SITL_BUILD}/src/platforms/common/libplatforms__common.a
-	${PX4_SITL_BUILD}/src/platforms/posix/px4_layer/libplatforms__posix__px4_layer.a
-	${PX4_SITL_BUILD}/src/platforms/posix/work_queue/libplatforms__posix__work_queue.a
-	)
-
-# check
-add_custom_target(check
-		COMMAND ${CMAKE_CTEST_COMMAND} -j2 --output-on-failure
-		WORKING_DIR ${PX4_BINARY_DIR}
-		USES_TERMINAL)
-
-# add_gtest
-function(add_gtest)
-	foreach(test_name ${ARGN})
-		if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
-			target_link_libraries(${test_name} gtest_main pthread ${PX4_PLATFORM})
-		else()
-			target_link_libraries(${test_name} gtest_main pthread rt ${PX4_PLATFORM})
-		endif()
-		add_test(NAME ${test_name} COMMAND ${test_name} --gtest_output=xml WORKING_DIRECTORY ${PX4_BINARY_DIR})
-		add_dependencies(check ${test_name})
-	endforeach()
-endfunction()
-
-
-#######################################################################
-# TESTS
-#######################################################################
-#    add_executable(example_test example_test.cpp)
-#    add_gtest(example_test)
-
-# param_test
-add_executable(param_test setup.cpp param_test.cpp uorb_stub.cpp
-						${PX4_SRC}/modules/systemlib/bson/tinybson.c
-						${PX4_SRC}/modules/systemlib/param/param.c)
-target_link_libraries(param_test ${PX4_PLATFORM})
-add_gtest(param_test)
diff --git a/unittests/googletest b/unittests/googletest
deleted file mode 160000
index c99458533a9b4c743ed51537e25989ea55944908..0000000000000000000000000000000000000000
--- a/unittests/googletest
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit c99458533a9b4c743ed51537e25989ea55944908
diff --git a/unittests/param_test.cpp b/unittests/param_test.cpp
deleted file mode 100644
index 0352328c966d5758d9c4e338f148e107bae6e200..0000000000000000000000000000000000000000
--- a/unittests/param_test.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-#include <systemlib/param/param.h>
-
-#include "gtest/gtest.h"
-
-/*
- * These will be used in param.c if compiling for unit tests
- */
-struct param_info_s	param_array[256];
-struct param_info_s	*param_info_base;
-struct param_info_s	*param_info_limit;
-
-/*
- * Adds test parameters
- */
-void _add_parameters()
-{
-	struct param_info_s test_1 = {
-		"TEST_1",
-		PARAM_TYPE_INT32
-	};
-	test_1.val.i = 2;
-
-	struct param_info_s test_2 = {
-		"TEST_2",
-		PARAM_TYPE_INT32
-	};
-	test_2.val.i = 4;
-
-	struct param_info_s rc_x = {
-		"RC_X",
-		PARAM_TYPE_INT32
-	};
-	rc_x.val.i = 8;
-
-	struct param_info_s rc2_x = {
-		"RC2_X",
-		PARAM_TYPE_INT32
-	};
-	rc2_x.val.i = 16;
-
-	param_array[0] = rc_x;
-	param_array[1] = rc2_x;
-	param_array[2] = test_1;
-	param_array[3] = test_2;
-	param_info_base = (struct param_info_s *) &param_array[0];
-	// needs to point at the end of the data,
-	//  therefore number of params + 1
-	param_info_limit = (struct param_info_s *) &param_array[4];
-
-}
-
-void _assert_parameter_int_value(param_t param, int32_t expected)
-{
-	int32_t value;
-	int result = param_get(param, &value);
-	ASSERT_EQ(0, result) << printf("param_get (%i) did not return parameter\n", (int)param);
-	ASSERT_EQ(expected, value) << printf("value for param (%i) doesn't match default value\n", (int)param);
-}
-
-void _set_all_int_parameters_to(int32_t value)
-{
-	param_set((param_t)0, &value);
-	param_set((param_t)1, &value);
-	param_set((param_t)2, &value);
-	param_set((param_t)3, &value);
-
-	_assert_parameter_int_value((param_t)0, value);
-	_assert_parameter_int_value((param_t)1, value);
-	_assert_parameter_int_value((param_t)2, value);
-	_assert_parameter_int_value((param_t)3, value);
-}
-
-TEST(ParamTest, SimpleFind)
-{
-	_add_parameters();
-
-	param_t param = param_find("TEST_2");
-	ASSERT_NE(PARAM_INVALID, param) << "param_find did not find parameter";
-
-	int32_t value;
-	int result = param_get(param, &value);
-	ASSERT_EQ(0, result) << "param_get did not return parameter";
-	ASSERT_EQ(4, value) << "value of returned parameter does not match";
-}
-
-TEST(ParamTest, ResetAll)
-{
-	_add_parameters();
-	_set_all_int_parameters_to(50);
-
-	param_reset_all();
-
-	_assert_parameter_int_value((param_t)0, 8);
-	_assert_parameter_int_value((param_t)1, 16);
-	_assert_parameter_int_value((param_t)2, 2);
-	_assert_parameter_int_value((param_t)3, 4);
-}
-
-TEST(ParamTest, ResetAllExcludesOne)
-{
-	_add_parameters();
-	_set_all_int_parameters_to(50);
-
-	const char *excludes[] = {"RC_X"};
-	param_reset_excludes(excludes, 1);
-
-	_assert_parameter_int_value((param_t)0, 50);
-	_assert_parameter_int_value((param_t)1, 16);
-	_assert_parameter_int_value((param_t)2, 2);
-	_assert_parameter_int_value((param_t)3, 4);
-}
-
-TEST(ParamTest, ResetAllExcludesTwo)
-{
-	_add_parameters();
-	_set_all_int_parameters_to(50);
-
-	const char *excludes[] = {"RC_X", "TEST_1"};
-	param_reset_excludes(excludes, 2);
-
-	_assert_parameter_int_value((param_t)0, 50);
-	_assert_parameter_int_value((param_t)1, 16);
-	_assert_parameter_int_value((param_t)2, 50);
-	_assert_parameter_int_value((param_t)3, 4);
-}
-
-TEST(ParamTest, ResetAllExcludesBoundaryCheck)
-{
-	_add_parameters();
-	_set_all_int_parameters_to(50);
-
-	const char *excludes[] = {"RC_X", "TEST_1"};
-	param_reset_excludes(excludes, 1);
-
-	_assert_parameter_int_value((param_t)0, 50);
-	_assert_parameter_int_value((param_t)1, 16);
-	_assert_parameter_int_value((param_t)2, 2);
-	_assert_parameter_int_value((param_t)3, 4);
-}
-
-TEST(ParamTest, ResetAllExcludesWildcard)
-{
-	_add_parameters();
-	_set_all_int_parameters_to(50);
-
-	const char *excludes[] = {"RC*"};
-	param_reset_excludes(excludes, 1);
-
-	_assert_parameter_int_value((param_t)0, 50);
-	_assert_parameter_int_value((param_t)1, 50);
-	_assert_parameter_int_value((param_t)2, 2);
-	_assert_parameter_int_value((param_t)3, 4);
-}
diff --git a/unittests/setup.cpp b/unittests/setup.cpp
deleted file mode 100644
index 34038ffc41589ebf7c66011a71390d1948d0f3c9..0000000000000000000000000000000000000000
--- a/unittests/setup.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <systemlib/param/param.h>
-
-#include "gtest/gtest.h"
-
-
-class TestEnvironment: public ::testing::Environment {
-public:
-	/**
-	 * Testing setup: this is called before the actual tests are executed.
-	 */
-	virtual void SetUp()
-	{
-		param_init();
-	}
-};
-
-int main(int argc, char* argv[])
-{
-	::testing::InitGoogleTest(&argc, argv);
-	// gtest takes ownership of the TestEnvironment ptr - we don't delete it.
-	::testing::AddGlobalTestEnvironment(new TestEnvironment);
-	return RUN_ALL_TESTS();
-}
diff --git a/unittests/uorb_stub.cpp b/unittests/uorb_stub.cpp
deleted file mode 100644
index 6c07461c2ba78f3f193ff24b7beabe245f26a4ee..0000000000000000000000000000000000000000
--- a/unittests/uorb_stub.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <stdint.h>
-#include <sys/types.h>
-//#include "gmock/gmock.h"
-
-#include "uORB/uORB.h"
-
-/******************************************
- * uORB stubs (incomplete)
- *
- * TODO: use googlemock
-******************************************/
-
-orb_advert_t orb_advertise(const struct orb_metadata *meta, const void *data)
-{
-	return (orb_advert_t)0;
-}
-
-orb_advert_t orb_advertise_queue(const struct orb_metadata *meta, const void *data, unsigned int queue_size)
-{
-	return (orb_advert_t)0;
-}
-
-int	orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data)
-{
-	return 0;
-}