diff --git a/Demo.cpp b/Demo.cpp
index f1022a50c5b140a0a94bfa3e07cc4cf8ff0c0186..b23bbb1248d4645ded1e1b4f9ef4d4fb4ee8d2e4 100644
--- a/Demo.cpp
+++ b/Demo.cpp
@@ -16,8 +16,11 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include <iostream>
 #include <opencv2/opencv.hpp>
+using namespace cv;
 
-#include "package_bgs/bgslibrary.h"
+//#include "package_bgs/bgslibrary.h"
+#include "package_bgs/IBGS.h"
+using namespace ibgs;
 
 int main(int argc, char **argv)
 {
@@ -42,7 +45,8 @@ int main(int argc, char **argv)
   /* Background Subtraction Methods */
   IBGS *bgs;
 
-  bgs = new FrameDifference;
+  //bgs = new FrameDifference;
+  bgs=IBGS::create(std::string("FrameDifference"));
   //bgs = new StaticFrameDifference;
   //bgs = new WeightedMovingMean;
   //bgs = new WeightedMovingVariance;
diff --git a/PreProcessor.h b/PreProcessor.h
index 2e6e61c75ddd3d8e21362a83e800fe7ab846db48..176dbca102e053261faefabe0c7a39319c906893 100644
--- a/PreProcessor.h
+++ b/PreProcessor.h
@@ -18,6 +18,13 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <iostream>
 #include <opencv2/opencv.hpp>
+#include <opencv2/core/core.hpp>
+#include <opencv2/highgui/highgui.hpp>
+#include <opencv2/imgproc/imgproc.hpp>
+#include <opencv2/features2d/features2d.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
 
 namespace bgslibrary
 {
diff --git a/VideoAnalysis.cpp b/VideoAnalysis.cpp
index 9c8020a8c2aef4a16c0bdc36c491d7d7030ba09a..03e47b3bef3af8f0628d205231ffef1ffd6f8554 100644
--- a/VideoAnalysis.cpp
+++ b/VideoAnalysis.cpp
@@ -45,7 +45,7 @@ namespace bgslibrary
       "{st|stopAt|0|Frame number to stop}"
       "{im|imgref||Specify image file}"
       ;
-#elif CV_MAJOR_VERSION == 3
+#elif CV_MAJOR_VERSION >= 3
     const std::string keys =
       "{h help ?     |     | Print this message   }"
       "{uf use_file  |false| Use a video file     }"
@@ -68,7 +68,7 @@ namespace bgslibrary
       cmd.printParams();
       return false;
     }
-#elif CV_MAJOR_VERSION == 3
+#elif CV_MAJOR_VERSION >= 3
     if (argc <= 1 || cmd.has("help"))
     {
       std::cout << "Usage: " << argv[0] << " [options]" << std::endl;
diff --git a/package_analysis/ForegroundMaskAnalysis.h b/package_analysis/ForegroundMaskAnalysis.h
index a0797d76b8fc4a6fe915fa9457f57ab1e97f880c..0a64ab29242058d464304492c3f7dc1dcd1c1357 100644
--- a/package_analysis/ForegroundMaskAnalysis.h
+++ b/package_analysis/ForegroundMaskAnalysis.h
@@ -19,7 +19,13 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #include <iostream>
 #include <string>
 #include <opencv2/opencv.hpp>
-
+#include <opencv2/core/core.hpp>
+#include <opencv2/highgui/highgui.hpp>
+#include <opencv2/imgproc/imgproc.hpp>
+#include <opencv2/features2d/features2d.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
 
 namespace bgslibrary
 {
diff --git a/package_analysis/PixelUtils.h b/package_analysis/PixelUtils.h
index 0e35c4055421c76d5bdb0af91fee4c6008b98253..0ae6f73c5091f3553c346339aba4a0f18004fc2c 100644
--- a/package_analysis/PixelUtils.h
+++ b/package_analysis/PixelUtils.h
@@ -18,6 +18,9 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdio.h>
 #include <opencv2/opencv.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
 
 class PixelUtils
 {
diff --git a/package_bgs/IBGS.h b/package_bgs/IBGS.h
index 718bf51ed20d35865d420c46aaa867cd446dcb2d..bfedeffeecb1d013c57feb3c10518ac409bdf130 100644
--- a/package_bgs/IBGS.h
+++ b/package_bgs/IBGS.h
@@ -18,7 +18,16 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <iostream>
 #include <fstream>
+#include <list>
 #include <opencv2/opencv.hpp>
+#include <cv.h>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
+
+#define  CV_RGB(r, g, b)   cv::Scalar((b), (g), (r), 0)
+
+
 
 namespace bgslibrary
 {
@@ -35,7 +44,7 @@ namespace bgslibrary
 				cv::Mat _img_foreground;
 				cv::Mat _img_background;
 				process(img_input, _img_foreground, _img_background);
-        _img_background.copyTo(img_background);
+                _img_background.copyTo(img_background);
 				return _img_foreground;
 			}
 			cv::Mat getBackgroundModel() {
@@ -43,7 +52,9 @@ namespace bgslibrary
 			}
 			virtual void process(const cv::Mat &img_input, cv::Mat &img_foreground, cv::Mat &img_background) = 0;
 			virtual ~IBGS() {}
-
+            // create by name
+            static  IBGS*                    create(const std::string alg_name);
+            static  std::list<std::string>   get_algs_name();
 		protected:
 			bool firstTime = true;
 			bool showOutput = true;
@@ -65,10 +76,14 @@ namespace bgslibrary
 				img_outfg = cv::Mat::zeros(img_input.size(), CV_8UC1);
 				img_outbg = cv::Mat::zeros(img_input.size(), CV_8UC3);
 			}
-
+                
 		private:
 			virtual void saveConfig() = 0;
 			virtual void loadConfig() = 0;
 		};
 	}
 }
+
+namespace ibgs = bgslibrary::algorithms;
+
+
diff --git a/package_bgs/IMBS/IMBS.hpp b/package_bgs/IMBS/IMBS.hpp
index 7b9683b70011666d7a2a40d0d144c0f82ac6c8b6..e7043a0c9628bcdd8fd5adf986dbc3a78b028a85 100644
--- a/package_bgs/IMBS/IMBS.hpp
+++ b/package_bgs/IMBS/IMBS.hpp
@@ -41,6 +41,9 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #include <opencv2/highgui/highgui.hpp>
 #include <opencv2/imgproc/imgproc.hpp>
 #include <opencv2/features2d/features2d.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
+#include <opencv2/highgui/highgui_c.h>
 //C++
 #include <iostream>
 #include <vector>
diff --git a/package_bgs/KNN.cpp b/package_bgs/KNN.cpp
index d2e14127ee2efcde134226b10871716994bc1f5e..e0877b5ba6f07df633eb61332d20eadde87c5846 100644
--- a/package_bgs/KNN.cpp
+++ b/package_bgs/KNN.cpp
@@ -16,7 +16,7 @@
  */
 #include "KNN.h"
 
-#if CV_MAJOR_VERSION == 3
+#if CV_MAJOR_VERSION >= 3
 
 using namespace bgslibrary::algorithms;
 
diff --git a/package_bgs/KNN.h b/package_bgs/KNN.h
index 87f20b249444b5ad2da2864e6b30eb0b9b36e78b..9e79d934224591afd85278dd7806fbd2f35d361c 100644
--- a/package_bgs/KNN.h
+++ b/package_bgs/KNN.h
@@ -17,7 +17,7 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #pragma once
 
 #include "opencv2/core/version.hpp"
-#if CV_MAJOR_VERSION == 3
+#if CV_MAJOR_VERSION >= 3
 
 #include <iostream>
 #include <opencv2/opencv.hpp>
diff --git a/package_bgs/LBP_MRF/MEHistogram.cpp b/package_bgs/LBP_MRF/MEHistogram.cpp
index 17c77fdb9079f40391229f37401e64dd5b0e2b1e..5b4e56fba7e9d1285237e19842d5a2be0e21c58b 100644
--- a/package_bgs/LBP_MRF/MEHistogram.cpp
+++ b/package_bgs/LBP_MRF/MEHistogram.cpp
@@ -44,7 +44,9 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #include "MEHistogram.hpp"
 
 #include <opencv2/opencv.hpp>
-
+#include <opencv2/core/core_c.h>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
 #include "MEDefs.hpp"
 #include "MEImage.hpp"
 
diff --git a/package_bgs/LBP_MRF/MEImage.cpp b/package_bgs/LBP_MRF/MEImage.cpp
index b01d494e1091985dc04d312aa99712d440fea80e..a917bc8c89d688ee0aa8ebf26e7ac5e4ab4454ce 100644
--- a/package_bgs/LBP_MRF/MEImage.cpp
+++ b/package_bgs/LBP_MRF/MEImage.cpp
@@ -38,6 +38,8 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #include "MEImage.hpp"
 
 #include <opencv2/opencv.hpp>
+#include <opencv2/imgproc/types_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
 
 #include "MEDefs.hpp"
 
diff --git a/package_bgs/LBP_MRF/MotionDetection.cpp b/package_bgs/LBP_MRF/MotionDetection.cpp
index e591faa92cacdf776db0198f309f76a89f955aa9..bb61cf797056e63ca02b738c0e9539b35d4b954a 100644
--- a/package_bgs/LBP_MRF/MotionDetection.cpp
+++ b/package_bgs/LBP_MRF/MotionDetection.cpp
@@ -48,6 +48,8 @@ using namespace ck;
 #include <opencv/cvaux.h>
 #endif
 
+#include <opencv2/imgproc.hpp>
+
 #include "MEHistogram.hpp"
 #include "MEImage.hpp"
 
diff --git a/package_bgs/LOBSTER.h b/package_bgs/LOBSTER.h
index 41ba8828664215cf1b9201a1c9f64b748e43ff34..4b96ec97ba59df72ada70abb2879ff6a3b8336fb 100644
--- a/package_bgs/LOBSTER.h
+++ b/package_bgs/LOBSTER.h
@@ -40,7 +40,6 @@ namespace bgslibrary
       ~LOBSTER();
 
       void process(const cv::Mat &img_input, cv::Mat &img_output, cv::Mat &img_bgmodel);
-
     private:
       void saveConfig();
       void loadConfig();
diff --git a/package_bgs/MultiLayer/CMultiLayerBGS.h b/package_bgs/MultiLayer/CMultiLayerBGS.h
index 78a0527ddb75bcce0f324ec0ecd52d017bc0c529..d9c2fb732822061cd995e6b741000602041699db 100644
--- a/package_bgs/MultiLayer/CMultiLayerBGS.h
+++ b/package_bgs/MultiLayer/CMultiLayerBGS.h
@@ -51,7 +51,7 @@ we don't use the bilateral filter to remove the noise in the foreground detectio
 step. If you compile it under Linux, please uncomment it.
 */
 //#define LINUX_BILATERAL_FILTER
-
+#include <opencv2/imgproc.hpp>
 #include "LocalBinaryPattern.h"
 #include "BGS.h"
 #include <stdio.h>
diff --git a/package_bgs/VuMeter/TBackground.cpp b/package_bgs/VuMeter/TBackground.cpp
index 4e93729fa376894c1406a94314e74e5b8a15cec1..76d18c75021cd6710c79b69383dd29ca5ff321d9 100644
--- a/package_bgs/VuMeter/TBackground.cpp
+++ b/package_bgs/VuMeter/TBackground.cpp
@@ -24,6 +24,7 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "TBackground.h"
 
+
 TBackground::TBackground(void)
 {
   std::cout << "TBackground()" << std::endl;
diff --git a/package_bgs/VuMeter/TBackground.h b/package_bgs/VuMeter/TBackground.h
index dbaaa6c3e672f7b3360bd7229a047e4e9351bab1..61925a2358490ba96824fa7675012d9c2985e408 100644
--- a/package_bgs/VuMeter/TBackground.h
+++ b/package_bgs/VuMeter/TBackground.h
@@ -25,6 +25,8 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <iostream>
 #include <opencv2/opencv.hpp>
+#include <opencv2/core/core_c.h>
+#include <opencv2/imgproc/imgproc_c.h>
 
 class TBackground
 {
diff --git a/package_bgs/dp/Image.h b/package_bgs/dp/Image.h
index 6c0b5b3257486489597f8c9dae47dc6cec304d8b..fac11c8cf310fc58fd35c1439797bf023025a0d6 100644
--- a/package_bgs/dp/Image.h
+++ b/package_bgs/dp/Image.h
@@ -29,8 +29,7 @@ along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
 #pragma once
 
 #include <opencv2/opencv.hpp>
-//#include <cxcore.h>
-
+#include <cv.h>
 // --- Image Iterator ---------------------------------------------------------
 
 template <class T>
diff --git a/package_bgs/lb/Types.h b/package_bgs/lb/Types.h
index bd59c41eaba01dc5f8642a7bf40c365f5c61758f..fd9e65bc3a62750aca2d5efe56afe31aaba639b3 100644
--- a/package_bgs/lb/Types.h
+++ b/package_bgs/lb/Types.h
@@ -36,6 +36,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #pragma once
 
 #include <opencv2/opencv.hpp>
+#include <opencv2/core/core_c.h>
 
 namespace lb_library
 {