diff --git a/Code/Common/otbVectorDataExtractROI.txx b/Code/Common/otbVectorDataExtractROI.txx
index 70e0895e04a2cb02bd7610683e87b048f1d7404a..783a6589bbe2d1099b6da98cb09bb37fd6e79232 100644
--- a/Code/Common/otbVectorDataExtractROI.txx
+++ b/Code/Common/otbVectorDataExtractROI.txx
@@ -64,7 +64,10 @@ VectorDataExtractROI<TVectorData>
   typename VectorDataType::Pointer        output = this->GetOutput();
 
   /** put this here*/
-  output->SetProjectionRef(input->GetProjectionRef());
+  if(!input->GetProjectionRef().empty())
+    output->SetProjectionRef(input->GetProjectionRef());
+  else
+    
 
   if(!input)
     return;
@@ -93,7 +96,9 @@ VectorDataExtractROI<TVectorData>
   DataNodePointerType  newDataNodeFolder                      = DataNodeType::New();
   DataNodePointerType  newDataNodeMultiPolygon                = DataNodeType::New();
   DataNodePointerType  newDataNodeMultiLine                   = DataNodeType::New();
+  DataNodePointerType  newDataNodeMultiFeature                = DataNodeType::New();
 
+  
   /** Walking trough the input vector data */
   typedef itk::PreOrderTreeIterator<DataTreeType>                 TreeIteratorType;
   TreeIteratorType                                                it(input->GetDataTree());
@@ -144,6 +149,12 @@ VectorDataExtractROI<TVectorData>
 		    currentContainer = newDataNodeFolder;
 		    newFolder = false;
 		  }
+		if(newMultiFeature)
+		  {
+		    tree->Add(newDataNodeMultiFeature,currentContainer);
+		    currentContainer =  newDataNodeMultiFeature; 
+		    newMultiFeature = false;
+		  }
 		newDataNode->SetNodeType(dataNode->GetNodeType());
 		newDataNode->SetNodeId(dataNode->GetNodeId());
 		newDataNode->SetPoint(dataNode->GetPoint());
@@ -164,8 +175,8 @@ VectorDataExtractROI<TVectorData>
 		  }
 		if(newMultiFeature)
 		  {
-		    tree->Add(newDataNodeMultiLine,currentContainer);
-		    currentContainer =  newDataNodeMultiLine;
+		    tree->Add(newDataNodeMultiFeature ,currentContainer);
+		    currentContainer =  newDataNodeMultiFeature ;
 		    newMultiFeature = false;
 		  }
 		newDataNode->SetNodeType(dataNode->GetNodeType());
@@ -185,10 +196,11 @@ VectorDataExtractROI<TVectorData>
 		    currentContainer = newDataNodeFolder;
 		    newFolder = false;
 		  }
+		
 		if(newMultiFeature)
 		  {
-		    tree->Add(newDataNodeMultiPolygon,currentContainer);
-		    currentContainer = newDataNodeMultiPolygon; 
+		    tree->Add(newDataNodeMultiFeature,currentContainer);
+		    currentContainer =  newDataNodeMultiFeature ;
 		    newMultiFeature = false;
 		  }
 		
@@ -202,23 +214,24 @@ VectorDataExtractROI<TVectorData>
 	  }
 	case FEATURE_MULTIPOINT:
 	  {
-	    newDataNode->SetNodeType(dataNode->GetNodeType());
-	    newDataNode->SetNodeId(dataNode->GetNodeId());
-	    tree->Add(newDataNode,currentContainer);
-	    currentContainer = newDataNode;
+	    newDataNodeMultiFeature->SetNodeType(dataNode->GetNodeType());
+	    newDataNodeMultiFeature ->SetNodeId(dataNode->GetNodeId());
+	    newMultiFeature = true;
+	    
+
 	    break;
 	  }
 	case FEATURE_MULTILINE:
 	  {
-	    newDataNodeMultiLine->SetNodeType(dataNode->GetNodeType());
-	    newDataNodeMultiLine->SetNodeId(dataNode->GetNodeId());
+	    newDataNodeMultiFeature ->SetNodeType(dataNode->GetNodeType());
+	    newDataNodeMultiFeature ->SetNodeId(dataNode->GetNodeId());
 	    newMultiFeature = true;
 	    break;
 	  }
 	case FEATURE_MULTIPOLYGON:
 	  {
-	    newDataNodeMultiPolygon->SetNodeType(dataNode->GetNodeType());
-	    newDataNodeMultiPolygon->SetNodeId(dataNode->GetNodeId());
+	    newDataNodeMultiFeature  ->SetNodeType(dataNode->GetNodeType());
+	    newDataNodeMultiFeature->SetNodeId(dataNode->GetNodeId());
 	    newMultiFeature = true;
 	    break;
 	  }
@@ -316,6 +329,7 @@ VectorDataExtractROI<TVectorData>
   /** INVERSE : From long/lat to InputVectorData projection*/
   typedef otb::GenericMapProjection<otb::FORWARD>            InverseMapProjectionType;
   InverseMapProjectionType::Pointer mapInverseTransform =    InverseMapProjectionType::New();
+
   if(this->GetInput()->GetProjectionRef().empty())
     {
       std::string inputProjectionRef = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]";
diff --git a/Testing/Code/Common/CMakeLists.txt b/Testing/Code/Common/CMakeLists.txt
index 0cf97e9d779632035cd39f50e7cf81e2d4202c87..7170f7c439d2956f659d76a4d5828355f0292537 100644
--- a/Testing/Code/Common/CMakeLists.txt
+++ b/Testing/Code/Common/CMakeLists.txt
@@ -138,7 +138,8 @@ ADD_TEST(coTvVectorDataExtractROI ${COMMON_TESTS2}
 	 otbVectorDataExtractROI	
 	${INPUTDATA}/ToulousePoints-examples.shp   #${LARGEDATA}/TOULOUSE/QuickBird/GIS_FILES/000000128955_01_ORDER_SHAPE.shp
 	${TEMP}/coVectorDataExtractROIOutput.shp
-	1.588 48.2544 1.2222 1.33001 
+	 374369.48850211215904 4828951.58612491376698  # Origin of the CartoRegion 
+         1000.25 25000.2                               # Size of the Cartoregion
  )
 
 # -------            otb::MultiChannelExtractROI   ------------------------------