diff --git a/CMakeLists.txt b/CMakeLists.txt
index b63f7ec27cbca1d6fbbd9257669f4202972dcd1f..9f288057d50b65fd37ef1bb9db77172a8a9acf30 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,6 +16,11 @@ set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} CACHE STRING
 list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
 include(Headers)
 
+find_package(OpenCV 4 QUIET)
+if(NOT OpenCV_FOUND)
+    find_package(OpenCV 3 REQUIRED)
+endif()
+
 add_subdirectory(Src)
 
 export(
diff --git a/Src/CMakeLists.txt b/Src/CMakeLists.txt
index 53a76516fbeccc0991d7ccbde325481763b7587f..658077529cfcd78fe0e0ed75fe3af5ab69bb3326 100644
--- a/Src/CMakeLists.txt
+++ b/Src/CMakeLists.txt
@@ -26,7 +26,6 @@ target_include_directories(${target} PUBLIC
 find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets OpenGL)
 target_link_libraries(${target}  Qt5::Core Qt5::Gui Qt5::Widgets)
 
-find_package(OpenCV 3 REQUIRED)
 target_link_libraries(${target} ${OpenCV_LIBS})
 
 set_target_properties(${target} PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON)
diff --git a/Src/Interfaces/IBioTrackerPlugin.h b/Src/Interfaces/IBioTrackerPlugin.h
index e354c8343c9983ab3de706deb0d4c54ebde66af2..808a25847301e38f3e5266f23b7d3069e00dd8ce 100644
--- a/Src/Interfaces/IBioTrackerPlugin.h
+++ b/Src/Interfaces/IBioTrackerPlugin.h
@@ -44,14 +44,14 @@ private:
     virtual void connectInterfaces();
 
 Q_SIGNALS:
-    virtual void emitCvMat(std::shared_ptr<cv::Mat> mat, QString name) = 0;
-	/**
-	* Will be sent when tracking is doen to multiple components of the core app
-	* An example is the visualisation which is then updated
-	*/
-    virtual void emitTrackingDone(uint framenumber) = 0;
-	virtual void emitChangeDisplayImage(QString str) = 0;
-	virtual void emitCorePermission(std::pair<ENUMS::COREPERMISSIONS, bool>) = 0;
+    void emitCvMat(std::shared_ptr<cv::Mat> mat, QString name);
+    /**
+    * Will be sent when tracking is doen to multiple components of the core app
+    * An example is the visualisation which is then updated
+    */
+    void emitTrackingDone(uint framenumber);
+    void emitChangeDisplayImage(QString str);
+    void emitCorePermission(std::pair<ENUMS::COREPERMISSIONS, bool>);
 
 public Q_SLOTS:
     virtual void receiveCurrentFrameFromMainApp(std::shared_ptr<cv::Mat> mat, uint frameNumber) = 0;
diff --git a/Src/Interfaces/IModel/IModelAreaDescriptor.h b/Src/Interfaces/IModel/IModelAreaDescriptor.h
index 011668fd31afbbe43cfdde0bb69fcd11b52db4a5..5124f90f7e40cd1e98c35da557dcd8fb1b67243b 100644
--- a/Src/Interfaces/IModel/IModelAreaDescriptor.h
+++ b/Src/Interfaces/IModel/IModelAreaDescriptor.h
@@ -2,7 +2,7 @@
 
 #include "IModel.h"
 #include <string.h>
-#include <cv.h>
+#include <opencv2/opencv.hpp>
 
 class BT_INTERFACES_API IModelAreaDescriptor :public IModel
 {
diff --git a/cmake/biotracker-interfacesConfig.cmake.in b/cmake/biotracker-interfacesConfig.cmake.in
index d064abded591cfbdb88ae002d3a57a0abae21d1c..6e710da9680b4401e025ef1f5714eaedcaac6619 100644
--- a/cmake/biotracker-interfacesConfig.cmake.in
+++ b/cmake/biotracker-interfacesConfig.cmake.in
@@ -2,7 +2,7 @@
 
 find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets OpenGL)
 
-find_package(OpenCV 3 REQUIRED)
+find_package(OpenCV @OpenCV_VERSION_MAJOR@ REQUIRED)
 
 include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake)