diff --git a/CMakeLists.txt b/CMakeLists.txt
index ca66fd66ebac36395108e43bfcca96285c5cb808..0edcba3346eaa5ed160ff6c93335627c7569eddb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,10 +21,6 @@ else()
         message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
 endif()
 
-#set(GRM_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/)
-
-#include_directories(${GRM_INCLUDE_DIR})
-
 project(OTBGRM)
 
 set(OTBGRM_LIBRARIES OTBGRM)
diff --git a/app/GenericRegionMerging.cxx b/app/GenericRegionMerging.cxx
index 804968b2a31e4c4ba1d3aae1636bfdb72abf7559..f73cf0878b3b60c5059d2bdb3e48e50004376141 100644
--- a/app/GenericRegionMerging.cxx
+++ b/app/GenericRegionMerging.cxx
@@ -34,6 +34,7 @@ namespace otb
 		{
 		public:
 			typedef GenericRegionMerging Self;
+			typedef Application SuperClass;
 			typedef itk::SmartPointer<Self> Pointer;
 
 			typedef FloatVectorImageType ImageType;
@@ -83,15 +84,11 @@ namespace otb
 			void DoExecute()
 				{
 					
-					
 					// Mandatory parameters
 					// Input Image
 					ImageType::Pointer image = GetParameterImage("in");
 					image->Update();
 
-					// Output label file name.
-					const std::string labelImageFileName = GetParameterString("out");
-
 					// Criterion selected
 					const std::string selectedCriterion = GetParameterString("criterion");
 
@@ -101,8 +98,6 @@ namespace otb
 					const unsigned int niter = GetParameterInt("niter");
 					const int speed = GetParameterInt("speed");
 
-					typedef otb::ImageFileWriter<LabelImageType> LabelImageWriter;
-
 					if(selectedCriterion == "bs")
 					{
 						const float cw = GetParameterFloat("cw");
@@ -125,11 +120,7 @@ namespace otb
 
 						segmenter.Update();
 
-
-						LabelImageWriter::Pointer labelWriter = LabelImageWriter::New();
-						labelWriter->SetFileName(labelImageFileName);
-						labelWriter->SetInput(segmenter.GetLabeledClusteredOutput());
-						labelWriter->Update();
+						SetParameterOutputImage<LabelImageType>("out", segmenter.GetLabeledClusteredOutput());
 					}
 					else if(selectedCriterion == "ed")
 					{
@@ -144,10 +135,7 @@ namespace otb
 
 						segmenter.Update();
 
-						LabelImageWriter::Pointer labelWriter = LabelImageWriter::New();
-						labelWriter->SetFileName(labelImageFileName);
-						labelWriter->SetInput(segmenter.GetLabeledClusteredOutput());
-						labelWriter->Update();
+						SetParameterOutputImage<LabelImageType>("out", segmenter.GetLabeledClusteredOutput());
 					}
 					else if(selectedCriterion == "fls")
 					{
@@ -162,10 +150,7 @@ namespace otb
 
 						segmenter.Update();
 
-						LabelImageWriter::Pointer labelWriter = LabelImageWriter::New();
-						labelWriter->SetFileName(labelImageFileName);
-						labelWriter->SetInput(segmenter.GetLabeledClusteredOutput());
-						labelWriter->Update();
+						SetParameterOutputImage<LabelImageType>("out", segmenter.GetLabeledClusteredOutput());
 					}
 				}
 		};