diff --git a/src/algorithms/LBP_MRF/MEDefs.cpp b/src/algorithms/LBP_MRF/MEDefs.cpp
index 726221fe68e96b81cdcd0c8562b8064e10f39295..817d7d15f261258da15251b70d9dd70129790680 100644
--- a/src/algorithms/LBP_MRF/MEDefs.cpp
+++ b/src/algorithms/LBP_MRF/MEDefs.cpp
@@ -2,6 +2,8 @@
 
 #include "MEDefs.hpp"
 
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 //using namespace bgslibrary::algorithms::lbp_mrf;
 
 namespace bgslibrary
@@ -27,3 +29,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/LBP_MRF/MEDefs.hpp b/src/algorithms/LBP_MRF/MEDefs.hpp
index 5092f87f0a07e2c9180fb8c718e9d55aa52974cc..386dc9610c203f5add6462bfd42b5024c2cf2760 100644
--- a/src/algorithms/LBP_MRF/MEDefs.hpp
+++ b/src/algorithms/LBP_MRF/MEDefs.hpp
@@ -1,5 +1,8 @@
 #pragma once
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 namespace bgslibrary
 {
   namespace algorithms
@@ -58,3 +61,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/LBP_MRF/MEHistogram.cpp b/src/algorithms/LBP_MRF/MEHistogram.cpp
index 8e5cde351ec3141f412527575dc73a605020059b..78875ddb87ec4c7a9925e5aba891fe92fc8ef2d4 100644
--- a/src/algorithms/LBP_MRF/MEHistogram.cpp
+++ b/src/algorithms/LBP_MRF/MEHistogram.cpp
@@ -8,6 +8,8 @@
 #include "MEDefs.hpp"
 #include "MEImage.hpp"
 
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 using namespace bgslibrary::algorithms::lbp_mrf;
 
 MEHistogram::MEHistogram() {
@@ -459,3 +461,5 @@ void MEHistogramTransform::SetStretchProcessingMode(ProcessingType new_channel_m
     break;
   }
 }
+
+#endif
diff --git a/src/algorithms/LBP_MRF/MEHistogram.hpp b/src/algorithms/LBP_MRF/MEHistogram.hpp
index 9ae3a022bf743db172845dde550cb06baa663d39..fe0868c94f1e3309b680d3b93ea53fa6424aae8c 100644
--- a/src/algorithms/LBP_MRF/MEHistogram.hpp
+++ b/src/algorithms/LBP_MRF/MEHistogram.hpp
@@ -1,5 +1,8 @@
 #pragma once
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 namespace bgslibrary
 {
   namespace algorithms
@@ -324,3 +327,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/LBP_MRF/MEImage.cpp b/src/algorithms/LBP_MRF/MEImage.cpp
index 0928871d3d4bb6be0bd4a2df26ca9c42949f447c..7899b5220cff399ea07dc345c11d560a613f6142 100644
--- a/src/algorithms/LBP_MRF/MEImage.cpp
+++ b/src/algorithms/LBP_MRF/MEImage.cpp
@@ -6,6 +6,8 @@
 #include "MEImage.hpp"
 #include "MEDefs.hpp"
 
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 //using namespace bgslibrary::algorithms::lbp_mrf;
 
 #define ME_CAST_TO_IPLIMAGE(image_ptr) ((IplImage*)image_ptr)
@@ -1401,3 +1403,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/LBP_MRF/MEImage.hpp b/src/algorithms/LBP_MRF/MEImage.hpp
index b9ba1fccf8b855629d4098ddb6f7ccdc9f4e410b..9bc9e72729127a0413ad4c3fae13a530d8527ff5 100644
--- a/src/algorithms/LBP_MRF/MEImage.hpp
+++ b/src/algorithms/LBP_MRF/MEImage.hpp
@@ -1,5 +1,8 @@
 #pragma once
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 namespace bgslibrary
 {
   namespace algorithms
@@ -975,3 +978,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/BGS.h b/src/algorithms/MultiLayer/BGS.h
index 97eeaf4cc71e2195d835fd9dec1ae2be8fa3b0a7..d2754cf25316d43bbc1e8d905dc5079d967ec21d 100644
--- a/src/algorithms/MultiLayer/BGS.h
+++ b/src/algorithms/MultiLayer/BGS.h
@@ -1,5 +1,8 @@
 #pragma once
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 // opencv legacy includes
 #include "OpenCvLegacyIncludes.h"
 
@@ -168,3 +171,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/BackgroundSubtractionAPI.h b/src/algorithms/MultiLayer/BackgroundSubtractionAPI.h
index b44cdd7ec583b6f6b9a7dee99929bcede1df049d..13f02084158d4f589bc13ed17d179764611ecf83 100644
--- a/src/algorithms/MultiLayer/BackgroundSubtractionAPI.h
+++ b/src/algorithms/MultiLayer/BackgroundSubtractionAPI.h
@@ -1,5 +1,8 @@
 #pragma once
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 // opencv legacy includes
 #include "OpenCvLegacyIncludes.h"
 
@@ -99,3 +102,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/BlobExtraction.cpp b/src/algorithms/MultiLayer/BlobExtraction.cpp
index ad6b05319a3f0923081291242f9c708322efd624..6f67a349afae929652f411e1f1f12069ff795663 100644
--- a/src/algorithms/MultiLayer/BlobExtraction.cpp
+++ b/src/algorithms/MultiLayer/BlobExtraction.cpp
@@ -1,3 +1,6 @@
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 #include "BlobResult.h"
 #include "BlobExtraction.h"
 #include "OpenCvLegacyIncludes.h"
@@ -1447,3 +1450,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/BlobExtraction.h b/src/algorithms/MultiLayer/BlobExtraction.h
index dcd0dfe552d7e7aa4245323f39277149d928f2fa..71e1f405768e11fc6be393846e88eb6f60e1ab01 100644
--- a/src/algorithms/MultiLayer/BlobExtraction.h
+++ b/src/algorithms/MultiLayer/BlobExtraction.h
@@ -1,5 +1,8 @@
 #pragma once
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 namespace bgslibrary
 {
   namespace algorithms
@@ -24,3 +27,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/BlobResult.cpp b/src/algorithms/MultiLayer/BlobResult.cpp
index 10aafbfcb293c6fd6fb0dfd3071aafa213420a74..b1a1bf6e005b048cd3ed793ca2f689de2dd98672 100644
--- a/src/algorithms/MultiLayer/BlobResult.cpp
+++ b/src/algorithms/MultiLayer/BlobResult.cpp
@@ -3,6 +3,9 @@
 #include <functional>
 #include <algorithm>
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 #include "BlobResult.h"
 #include "BlobExtraction.h"
 
@@ -798,3 +801,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/BlobResult.h b/src/algorithms/MultiLayer/BlobResult.h
index 96d92648ef881d0a44a4c5a6f5af84d7d90c3f6c..2213231fa8dcd48e5b6abdc828b2516310ad8837 100644
--- a/src/algorithms/MultiLayer/BlobResult.h
+++ b/src/algorithms/MultiLayer/BlobResult.h
@@ -4,6 +4,9 @@
 #include <vector>
 #include <functional>
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 #include "BlobLibraryConfiguration.h"
 // opencv legacy includes
 #include "OpenCvLegacyIncludes.h"
@@ -143,3 +146,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/CMultiLayerBGS.cpp b/src/algorithms/MultiLayer/CMultiLayerBGS.cpp
index 48e2b42473224ca2a1c8d4ed39bd17a67e6ef7c5..481f41662fbbc02a8b63ac82ca57b62a0dadd91e 100644
--- a/src/algorithms/MultiLayer/CMultiLayerBGS.cpp
+++ b/src/algorithms/MultiLayer/CMultiLayerBGS.cpp
@@ -6,6 +6,9 @@
 #include <cmath>
 #include <iostream>
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 #include "CMultiLayerBGS.h"
 #include "OpenCvLegacyIncludes.h"
 
@@ -2099,3 +2102,5 @@ int CMultiLayerBGS::SetForegroundProbImage(IplImage* fg_prob_img) {
 void CMultiLayerBGS::SetCurrentFrameNumber(unsigned long cur_frame_no) {
   m_nCurImgFrameIdx = cur_frame_no;
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/CMultiLayerBGS.h b/src/algorithms/MultiLayer/CMultiLayerBGS.h
index 302a19a56a9b690f7026bbe8b850765feaf1612b..5ff976c59dfc79888ce537c529c11f8765f805a8 100644
--- a/src/algorithms/MultiLayer/CMultiLayerBGS.h
+++ b/src/algorithms/MultiLayer/CMultiLayerBGS.h
@@ -20,6 +20,9 @@ step. If you compile it under Linux, please uncomment it.
 
 #include <opencv2/imgproc.hpp>
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 #include "LocalBinaryPattern.h"
 #include "BlobResult.h"
 #include "OpenCvDataConversion.h"
@@ -269,3 +272,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/LocalBinaryPattern.cpp b/src/algorithms/MultiLayer/LocalBinaryPattern.cpp
index 7ff5f17a520e4b02b28d61e76b420377deff4074..89e53381c45815197e395aa992f37446c1d70258 100644
--- a/src/algorithms/MultiLayer/LocalBinaryPattern.cpp
+++ b/src/algorithms/MultiLayer/LocalBinaryPattern.cpp
@@ -1,5 +1,8 @@
 #include "LocalBinaryPattern.h"
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 using namespace bgslibrary::algorithms::multilayer;
 
 CLocalBinaryPattern::CLocalBinaryPattern() {
@@ -251,3 +254,4 @@ void CLocalBinaryPattern::CalImageDifferenceMap(IplImage *cent_img, IplImage *ne
 
 }
 
+#endif
diff --git a/src/algorithms/MultiLayer/LocalBinaryPattern.h b/src/algorithms/MultiLayer/LocalBinaryPattern.h
index 30e17e98d53e22362d28f2fdaddb45224b1fd093..69a119e21da3598244afce1585474fea93e6535a 100644
--- a/src/algorithms/MultiLayer/LocalBinaryPattern.h
+++ b/src/algorithms/MultiLayer/LocalBinaryPattern.h
@@ -2,6 +2,9 @@
 
 #include <cstdio>
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 #include "BGS.h"
 #include "OpenCvDataConversion.h"
 
@@ -57,3 +60,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/OpenCvDataConversion.h b/src/algorithms/MultiLayer/OpenCvDataConversion.h
index 4da11a5597f01cb9292ce828640d05871db4d2ef..9e78c6afc7ec311cad9a802ccea24e99a7c9bad4 100644
--- a/src/algorithms/MultiLayer/OpenCvDataConversion.h
+++ b/src/algorithms/MultiLayer/OpenCvDataConversion.h
@@ -1,6 +1,10 @@
 #pragma once
 
 #include <stdio.h>
+
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 // opencv legacy includes
 #include "OpenCvLegacyIncludes.h"
 
@@ -182,3 +186,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/OpenCvLegacyIncludes.h b/src/algorithms/MultiLayer/OpenCvLegacyIncludes.h
index f930b75dff378492abd7b8ffe5300e15bdb3dee4..a539092196f41dd3c4e08063a714e5a2e9abce6c 100644
--- a/src/algorithms/MultiLayer/OpenCvLegacyIncludes.h
+++ b/src/algorithms/MultiLayer/OpenCvLegacyIncludes.h
@@ -1,5 +1,11 @@
 #pragma once
+
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 // opencv legacy includes
 #include "opencv2/core/core_c.h"
 #include "opencv2/core/types_c.h"
 #include "opencv2/imgproc/imgproc_c.h"
+
+#endif
diff --git a/src/algorithms/MultiLayer/blob.cpp b/src/algorithms/MultiLayer/blob.cpp
index e44f98d126905ff06b6a6cb08e7b530f3862970d..64b4f642939938b53c0db301563148026e0e14c2 100644
--- a/src/algorithms/MultiLayer/blob.cpp
+++ b/src/algorithms/MultiLayer/blob.cpp
@@ -1,6 +1,9 @@
 #include <limits.h>
 #include "blob.h"
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 namespace bgslibrary
 {
   namespace algorithms
@@ -1092,3 +1095,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif
diff --git a/src/algorithms/MultiLayer/blob.h b/src/algorithms/MultiLayer/blob.h
index 6cce6c8ec3b8d9e539b7a27e7fde2e9cf535f333..b80c5730eb7cabd25b0bef0b8febc50192610399 100644
--- a/src/algorithms/MultiLayer/blob.h
+++ b/src/algorithms/MultiLayer/blob.h
@@ -4,6 +4,9 @@
 #include <vector>
 #include <algorithm>
 
+#include "opencv2/core/version.hpp"
+#if CV_MAJOR_VERSION >= 2 && CV_MAJOR_VERSION <= 3
+
 #include "BlobLibraryConfiguration.h"
 // opencv legacy includes
 #include "OpenCvLegacyIncludes.h"
@@ -790,3 +793,5 @@ namespace bgslibrary
     }
   }
 }
+
+#endif