diff --git a/CMake/Definitions.cmake b/CMake/Definitions.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..0ccc28c8bd38ac6c8e4f49695f6e1cbc2a9f4c98
--- /dev/null
+++ b/CMake/Definitions.cmake
@@ -0,0 +1,33 @@
+
+# ensure WIN32 definition
+IF(WIN32)
+  ADD_DEFINITIONS(-DWIN32)
+ENDIF(WIN32)
+
+
+# On Visual Studio 8 MS deprecated C. This removes all 1.276E1265 security
+# warnings
+IF(WIN32)
+    IF(NOT CYGWIN)
+      IF(NOT MINGW)
+          ADD_DEFINITIONS(
+            -D_CRT_FAR_MAPPINGS_NO_DEPRECATE
+            -D_CRT_IS_WCTYPE_NO_DEPRECATE
+            -D_CRT_MANAGED_FP_NO_DEPRECATE
+            -D_CRT_NONSTDC_NO_DEPRECATE
+            -D_CRT_SECURE_NO_DEPRECATE
+            -D_CRT_SECURE_NO_DEPRECATE_GLOBALS
+            -D_CRT_SETERRORMODE_BEEP_SLEEP_NO_DEPRECATE
+            -D_CRT_TIME_FUNCTIONS_NO_DEPRECATE
+            -D_CRT_VCCLRIT_NO_DEPRECATE
+            -D_SCL_SECURE_NO_DEPRECATE
+            )
+
+        IF (MSVC)
+          ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
+          ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_WARNING)
+        ENDIF(MSVC)
+
+      ENDIF(NOT MINGW)
+    ENDIF(NOT CYGWIN)
+ENDIF(WIN32)
\ No newline at end of file
diff --git a/CMake/ParseArguments.cmake b/CMake/ParseArguments.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..da5000e58e2294c1dff5660ef348a839b0a93906
--- /dev/null
+++ b/CMake/ParseArguments.cmake
@@ -0,0 +1,32 @@
+# Source : http://www.itk.org/Wiki/CMakeMacroParseArguments
+
+MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
+  SET(DEFAULT_ARGS)
+  FOREACH(arg_name ${arg_names})
+    SET(${prefix}_${arg_name})
+  ENDFOREACH(arg_name)
+  FOREACH(option ${option_names})
+    SET(${prefix}_${option} FALSE)
+  ENDFOREACH(option)
+
+  SET(current_arg_name DEFAULT_ARGS)
+  SET(current_arg_list)
+  FOREACH(arg ${ARGN})
+    SET(larg_names ${arg_names})
+    LIST(FIND larg_names "${arg}" is_arg_name)
+    IF (is_arg_name GREATER -1)
+      SET(${prefix}_${current_arg_name} ${current_arg_list})
+      SET(current_arg_name ${arg})
+      SET(current_arg_list)
+    ELSE (is_arg_name GREATER -1)
+      SET(loption_names ${option_names})
+      LIST(FIND loption_names "${arg}" is_option)
+      IF (is_option GREATER -1)
+         SET(${prefix}_${arg} TRUE)
+      ELSE (is_option GREATER -1)
+         SET(current_arg_list ${current_arg_list} ${arg})
+      ENDIF (is_option GREATER -1)
+    ENDIF (is_arg_name GREATER -1)
+  ENDFOREACH(arg)
+  SET(${prefix}_${current_arg_name} ${current_arg_list})
+ENDMACRO(PARSE_ARGUMENTS)
\ No newline at end of file
diff --git a/CMake/WrapperMacros.cmake b/CMake/WrapperMacros.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..4ea434d38c4af015594775fffddd8e262416b5f9
--- /dev/null
+++ b/CMake/WrapperMacros.cmake
@@ -0,0 +1,17 @@
+include(ParseArguments)
+
+macro(OTB_CREATE_APPLICATION)
+  PARSE_ARGUMENTS(
+      APPLICATION
+      "NAME;SOURCES;INCLUDE_DIRS;LINK_LIBRARIES"
+      ""
+      ${ARGN})
+
+   set( APPLICATION_TARGET_NAME otbapp_${APPLICATION_NAME} )
+
+   include_directories(${CMAKE_SOURCE_DIR}/Code/Core)
+   include_directories(${APPLICATION_INCLUDE_DIRS})
+   add_library(${APPLICATION_TARGET_NAME} MODULE ${APPLICATION_SOURCES})
+   target_link_libraries(${APPLICATION_TARGET_NAME} OTBWrapperCore ${APPLICATION_LINK_LIBRARIES})
+   set_target_properties(${APPLICATION_TARGET_NAME} PROPERTIES PREFIX "")
+endmacro(OTB_CREATE_APPLICATION)
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 306b78796d4bce1db70eed50e55f42329081f256..43286e412c22e54f424af5ac7c575aa333ee8836 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,42 +6,12 @@ IF(COMMAND CMAKE_POLICY)
   CMAKE_POLICY(SET CMP0003 NEW)
 ENDIF(COMMAND CMAKE_POLICY)
 
-# ensure WIN32 definition
-IF(WIN32)
-  ADD_DEFINITIONS(-DWIN32)
-ENDIF(WIN32)
-
 # Path to additional CMake modules
 SET(CMAKE_MODULE_PATH
     ${CMAKE_SOURCE_DIR}/CMake
     ${CMAKE_MODULE_PATH})
 
-# On Visual Studio 8 MS deprecated C. This removes all 1.276E1265 security
-# warnings
-IF(WIN32)
-    IF(NOT CYGWIN)
-      IF(NOT MINGW)
-          ADD_DEFINITIONS(
-            -D_CRT_FAR_MAPPINGS_NO_DEPRECATE
-            -D_CRT_IS_WCTYPE_NO_DEPRECATE
-            -D_CRT_MANAGED_FP_NO_DEPRECATE
-            -D_CRT_NONSTDC_NO_DEPRECATE
-            -D_CRT_SECURE_NO_DEPRECATE
-            -D_CRT_SECURE_NO_DEPRECATE_GLOBALS
-            -D_CRT_SETERRORMODE_BEEP_SLEEP_NO_DEPRECATE
-            -D_CRT_TIME_FUNCTIONS_NO_DEPRECATE
-            -D_CRT_VCCLRIT_NO_DEPRECATE
-            -D_SCL_SECURE_NO_DEPRECATE
-            )
-
-        IF (MSVC)
-          ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
-          ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_WARNING)
-        ENDIF(MSVC)
-
-      ENDIF(NOT MINGW)
-    ENDIF(NOT CYGWIN)
-ENDIF(WIN32)
+include(Definitions)
 
 # Link to the Orfeo ToolBox
 FIND_PACKAGE(OTB REQUIRED PATHS /usr/lib/otb )
@@ -53,7 +23,6 @@ IF(OTB_USE_QT)
   FIND_PACKAGE(Qt4 REQUIRED)
   SET(QT_USE_QTXML 1)
   INCLUDE(${QT_USE_FILE})
-  INCLUDE_DIRECTORIES(${QT_INCLUDE_DIRS})
 ENDIF(OTB_USE_QT)
 
 OPTION(OTB_USE_SWIG "Generate Qt wrappers for Applications" ON)
@@ -63,22 +32,8 @@ INCLUDE(${SWIG_USE_FILE})
 FIND_PACKAGE(PythonLibs REQUIRED)
 FIND_PACKAGE(PythonInterp REQUIRED)
 
-#-----------------------------------------------------------------------------
-#Build shared libraries for monteverdi
-#By default, import the option from the OTB configuration
 SET(BUILD_SHARED_LIBS ${OTB_BUILD_SHARED_LIBS})
 
-INCLUDE_DIRECTORIES(
-    ${CMAKE_CURRENT_SOURCE_DIR}/Code
-    ${CMAKE_CURRENT_SOURCE_DIR}/Code/Core
-    ${CMAKE_CURRENT_SOURCE_DIR}/Code/Wrappers
-    ${CMAKE_CURRENT_SOURCE_DIR}/Code/Wrappers/QtWidget
-    ${CMAKE_CURRENT_BINARY_DIR}
-    ${CMAKE_CURRENT_BINARY_DIR}/Code
-    ${CMAKE_CURRENT_BINARY_DIR}/Code/Wrappers
-    ${CMAKE_CURRENT_BINARY_DIR}/Code/Wrappers/QtWidget
-)
-
 ADD_SUBDIRECTORY(Code)
 ADD_SUBDIRECTORY(Example)
 
diff --git a/Code/Wrappers/ApplicationLauncherQt/CMakeLists.txt b/Code/Wrappers/ApplicationLauncherQt/CMakeLists.txt
index 8943b137bbb6cf8666452a9c039e258c20900d1b..ba822eeaa3c470c8c641b540816b17b26ad19b93 100644
--- a/Code/Wrappers/ApplicationLauncherQt/CMakeLists.txt
+++ b/Code/Wrappers/ApplicationLauncherQt/CMakeLists.txt
@@ -1,3 +1,5 @@
+INCLUDE_DIRECTORIES(${QT_INCLUDE_DIRS})
+INCLUDE_DIRECTORIES(../QtWidget)
 
 SET( SRCS
      otbApplicationLauncherQt.cxx )
diff --git a/Code/Wrappers/CMakeLists.txt b/Code/Wrappers/CMakeLists.txt
index f247fc17355c8611cb6e309c9a0a05a95f6af255..f3b5897812cf18d9929a9ff1767cda6cd791b734 100644
--- a/Code/Wrappers/CMakeLists.txt
+++ b/Code/Wrappers/CMakeLists.txt
@@ -1,3 +1,5 @@
+INCLUDE_DIRECTORIES(../Core)
+
 ADD_SUBDIRECTORY(ApplicationLauncherQt)
 ADD_SUBDIRECTORY(QtWidget)
 ADD_SUBDIRECTORY(SWIG)
diff --git a/Code/Wrappers/QtWidget/CMakeLists.txt b/Code/Wrappers/QtWidget/CMakeLists.txt
index 11ff545652f8ae684ca6334e150fc74e0beea9ae..f7ebaddfb3fb17c13c74f29abeaea8ec401a9eee 100644
--- a/Code/Wrappers/QtWidget/CMakeLists.txt
+++ b/Code/Wrappers/QtWidget/CMakeLists.txt
@@ -1,4 +1,4 @@
-
+INCLUDE_DIRECTORIES(${QT_INCLUDE_DIRS})
 FILE(GLOB srcs "*.cxx")
 
 SET( WrappersQtWidget_MOC_HDR
diff --git a/Example/Addition/CMakeLists.txt b/Example/Addition/CMakeLists.txt
deleted file mode 100644
index 947c7083fefa7893cf7cdcba314ed3ab1e9d3f99..0000000000000000000000000000000000000000
--- a/Example/Addition/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-SET( SRCS
-     otbAddition.cxx )
-
-ADD_LIBRARY(OTBWrapperAddition otbAddition.cxx)
-TARGET_LINK_LIBRARIES(OTBWrapperAddition OTBWrapperCore)
diff --git a/Example/CMakeLists.txt b/Example/CMakeLists.txt
index ec66495bcfd2a7c171da19007679ce40e95423ac..04e9d75bd3adeff1b372e410a14b0c646db67f5f 100644
--- a/Example/CMakeLists.txt
+++ b/Example/CMakeLists.txt
@@ -1,2 +1,4 @@
-add_subdirectory(Addition)
-add_subdirectory(Smoothing)
\ No newline at end of file
+include(WrapperMacros)
+
+OTB_CREATE_APPLICATION(NAME Addition  SOURCES otbAddition.cxx)
+OTB_CREATE_APPLICATION(NAME Smoothing SOURCES otbSmoothing.cxx)
\ No newline at end of file
diff --git a/Example/Smoothing/CMakeLists.txt b/Example/Smoothing/CMakeLists.txt
deleted file mode 100644
index adc89f52a75de947ed72a2f2079acce074ce0d33..0000000000000000000000000000000000000000
--- a/Example/Smoothing/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-SET( SRCS
-     otbSmoothing.cxx )
-
-ADD_LIBRARY(OTBWrapperSmoothing otbSmoothing.cxx)
-TARGET_LINK_LIBRARIES(OTBWrapperSmoothing OTBWrapperCore)
diff --git a/Example/Addition/otbAddition.cxx b/Example/otbAddition.cxx
similarity index 100%
rename from Example/Addition/otbAddition.cxx
rename to Example/otbAddition.cxx
diff --git a/Example/Smoothing/otbSmoothing.cxx b/Example/otbSmoothing.cxx
similarity index 100%
rename from Example/Smoothing/otbSmoothing.cxx
rename to Example/otbSmoothing.cxx
diff --git a/Testing/Core/CMakeLists.txt b/Testing/Core/CMakeLists.txt
index 5ad0ed919163b6505c556da50117ff464106d813..323639eab89508e5afaa9ac510ccf512bb80b008 100644
--- a/Testing/Core/CMakeLists.txt
+++ b/Testing/Core/CMakeLists.txt
@@ -76,5 +76,6 @@ otbWrapperParameterTest.cxx
 otbWrapperApplicationRegistryTest.cxx
 )
 
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/Code/Core)
 ADD_EXECUTABLE(otbWrapperTests ${Wrapper_SRCS})
 TARGET_LINK_LIBRARIES(otbWrapperTests OTBIO OTBCommon ITKIO ITKCommon OTBTesting OTBWrapperCore)
diff --git a/Testing/QtWidget/CMakeLists.txt b/Testing/QtWidget/CMakeLists.txt
index 5cb6767c3d62042cb4d6c1c8b4b921753fc621a4..526b98e4095f00b0bcabb9ce5599d5109b8971ab 100644
--- a/Testing/QtWidget/CMakeLists.txt
+++ b/Testing/QtWidget/CMakeLists.txt
@@ -8,6 +8,10 @@ SET(WrapperQtWidget_SRCS
     otbWrapperQtWidgetTests.cxx
     otbWrapperQtWidgetParameterFactory.cxx)
 
+INCLUDE_DIRECTORIES(${QT_INCLUDE_DIRS})
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/Code/Core)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/Code/Wrappers/QtWidget)
+
 ADD_EXECUTABLE(otbWrapperQtWidgetTests ${WrapperQtWidget_SRCS})
 TARGET_LINK_LIBRARIES(otbWrapperQtWidgetTests
                         OTBIO