diff --git a/Makefile b/Makefile
index fff78b50226c293bcdc90ec5cee1ca23411a87a5..3e072edc9296fb158a4ed6aa3dce234aa4207734 100644
--- a/Makefile
+++ b/Makefile
@@ -34,12 +34,15 @@ files.md5:
 wifimngr: $(OBJS)
 	$(CC) $(PROG_LDFLAGS) -o $@ $^ $(PROG_LIBS)
 
-
 test: CFLAGS += -fPIC
 test: ${OBJS}
 	${CC} ${LDFLAGS} -shared -o libwifimngr.so ${OBJS} ${LIBS}
-	make -C test WIFIMNGR_LIB_DIR=$(PWD)
-	make -C test test
+
+unit-test: coverage
+	make -C test unit-test WIFIMNGR_LIB_DIR=$(PWD)
+
+functional-test: coverage
+	make -C test functional-test WIFIMNGR_LIB_DIR=$(PWD)
 
 coverage: CFLAGS  += -g -O0 -fprofile-arcs -ftest-coverage
 coverage: LDFLAGS += --coverage
@@ -51,4 +54,4 @@ clean:
 	find -name '*.gcda' -exec rm {} -fv \;
 	find -name '*.gcno' -exec rm {} -fv \;
 	find -name '*.gcov' -exec rm {} -fv \;
-	make -C test clean
\ No newline at end of file
+	make -C test clean
diff --git a/test/Makefile b/test/Makefile
index 37645a1c87b0d3078e48ede665d8d14f680dc462..b1005c07d31776980de504be9a26cc09a23188eb 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -5,21 +5,26 @@ CMOCKA_LIB	= -l cmocka
 LIBS		= $(WIFIMNGR_LIB) $(CMOCKA_LIB) -lwifi-5 -pthread -luci -lubus -lubox -ljson-c -lblobmsg_json -lnl-genl-3 -lnl-3 -ljson-validator -ljson-schema-validator -ljson-editor
 CFLAGS		= -g -Wall -I..
 LDFLAGS		= $(LIBS) -Wl,-rpath=$(WIFIMNGR_LIB_DIR)
-TESTS		= api_test_wifi_setters
-
-api_test_wifi_%: api_test_wifi_%.o
-	$(CC) -o $@ $^ $(LDFLAGS)
-
-test: $(TESTS)
-	$(foreach testprog, $(TESTS), ./$(testprog);)
+UNIT_TESTS	= api_test_wifi_setters
+FUNCTIONAL_TESTS	= functional_test_wifi_event
+UTILS 		= test_utils.o
 
 VALGRIND	= valgrind --leak-check=full --show-reachable=no \
 	--show-leak-kinds=all --errors-for-leak-kinds=all \
 	--error-exitcode=1 --track-origins=yes
 
-valgrind_test: test
-	$(foreach testprog, $(TESTS), sudo $(VALGRIND) ./$(testprog);)
+api_test_wifi_%: $(UTILS) api_test_wifi_%.o
+	$(CC) -o $@ $^ $(LDFLAGS)
+
+functional_test_wifi_%: $(UTILS) functional_test_wifi_%.o
+	$(CC) -o $@ $^ $(LDFLAGS)
+
+unit-test: $(UNIT_TESTS)
+	$(foreach testprog, $(UNIT_TESTS), sudo $(VALGRIND) ./$(testprog);)
+
+functional-test: $(FUNCTIONAL_TESTS)
+	$(foreach testprog, $(FUNCTIONAL_TESTS), sudo $(VALGRIND) ./$(testprog);)
 
 .PHONY: clean
 clean:
-	rm $(TESTS) *.o -fv
+	rm $(UNIT_TESTS) $(FUNCTIONAL_TESTS) *.o -fv