diff --git a/Testing/Code/Projections/CMakeLists.txt b/Testing/Code/Projections/CMakeLists.txt
index 454408c1580927fde742a37974d604eab587cc72..b2b1b76f2da2188a4dbe416eb71e661b9bc8aa1d 100644
--- a/Testing/Code/Projections/CMakeLists.txt
+++ b/Testing/Code/Projections/CMakeLists.txt
@@ -932,15 +932,46 @@ ADD_TEST(prTvVectorDataProjectionFilterFromMapToImage ${PROJECTIONS_TESTS3}
         ${TEMP}/prTvVectorDataProjectionFilterFromMapToImage.kml
 )
 
-ADD_TEST(prTvVectorDataIntoImageProjectionFilter ${PROJECTIONS_TESTS3}
-        #--compare-ascii ${NOTOL}
-          #${BASELINE_FILES}/prTvVectorDataProjectionFilterFromMapToImage.kml
-          #${TEMP}/prTvVectorDataProjectionFilterFromMapToImage.kml
+# extract from image QB and MidiPyrenees vectordata
+ADD_TEST(prTvVectorData_ProjRef_ProjIntoImage_WithProjRef_Extract_Filter0 ${PROJECTIONS_TESTS3}
         otbVectorDataIntoImageProjectionFilterTest
-          ${INPUTDATA}/Classification/QB_1_ortho.tif
-          ${INPUTDATA}/Classification/VectorData_QB1.shp
+          ${INPUTDATA}/QB_extract_512x512.tif
+          ${LARGEINPUT}/VECTOR/MidiPyrenees/roads.shp
+          ${INPUTDATA}/DEM/srtm_directory
+          ${TEMP}/prTvVectorDataProjRefProjIntoImageWithProjRef10.shp
+          ${TEMP}/prTvVectorDataProjRefProjIntoImageWithProjRef10.txt
+          0
 )
 
+ADD_TEST(prTvVectorData_ProjRef_ProjIntoImage_WithProjRef_ExtractLeftUp_Filter0 ${PROJECTIONS_TESTS3}
+        otbVectorDataIntoImageProjectionFilterTest
+          ${INPUTDATA}/QB_extract_leftup_256x2048.tif
+          ${LARGEINPUT}/VECTOR/MidiPyrenees/roads.shp
+          ${INPUTDATA}/DEM/srtm_directory
+          ${TEMP}/prTvVectorDataProjRefProjIntoImageWithProjRef20.shp
+          ${TEMP}/prTvVectorDataProjRefProjIntoImageWithProjRef20.txt
+          0
+)
+
+ADD_TEST(prTvVectorData_ProjRef_ProjIntoImage_WithProjRef_Extract_Filter1 ${PROJECTIONS_TESTS3}
+        otbVectorDataIntoImageProjectionFilterTest
+          ${INPUTDATA}/QB_extract_512x512.tif
+          ${LARGEINPUT}/VECTOR/MidiPyrenees/roads.shp
+          ${INPUTDATA}/DEM/srtm_directory
+          ${TEMP}/prTvVectorDataProjRefProjIntoImageWithProjRef11.shp
+          ${TEMP}/prTvVectorDataProjRefProjIntoImageWithProjRef11.txt
+          1
+)
+
+ADD_TEST(prTvVectorData_ProjRef_ProjIntoImage_WithProjRef_ExtractLeftUp_Filter1 ${PROJECTIONS_TESTS3}
+        otbVectorDataIntoImageProjectionFilterTest
+          ${INPUTDATA}/QB_extract_leftup_256x2048.tif
+          ${LARGEINPUT}/VECTOR/MidiPyrenees/roads.shp
+          ${INPUTDATA}/DEM/srtm_directory
+          ${TEMP}/prTvVectorDataProjRefProjIntoImageWithProjRef21.shp
+          ${TEMP}/prTvVectorDataProjRefProjIntoImageWithProjRef21.txt
+          1
+)
 
 
 ADD_TEST(prTuGeocentricTransformNew ${PROJECTIONS_TESTS3}  otbGeocentricTransformNew )
diff --git a/Testing/Code/Projections/otbVectorDataIntoImageProjectionFilterTest.cxx b/Testing/Code/Projections/otbVectorDataIntoImageProjectionFilterTest.cxx
index 8e61787e8a306aa84518e057bb57b5ffe63441ce..90ece04590ffa1ee0b668e6031f85570c82b1d3a 100644
--- a/Testing/Code/Projections/otbVectorDataIntoImageProjectionFilterTest.cxx
+++ b/Testing/Code/Projections/otbVectorDataIntoImageProjectionFilterTest.cxx
@@ -15,6 +15,8 @@
   PURPOSE.  See the above copyright notices for more information.
 
 =========================================================================*/
+#include <fstream>
+
 #include "itkExceptionObject.h"
 #include "otbMacro.h"
 
@@ -23,61 +25,70 @@
 #include "otbImageFileReader.h"
 #include "otbVectorData.h"
 #include "otbVectorDataFileReader.h"
+#include "otbVectorDataFileWriter.h"
 
 #include "otbVectorDataIntoImageProjectionFilter.h"
 
 int otbVectorDataIntoImageProjectionFilterTest(int argc, char * argv[])
 {
   typedef float                                           PixelType;
-  typedef otb::VectorImage<PixelType, 2>                   VectorImageType;
-  typedef otb::Image<PixelType, 2>                         ImageType;
+  typedef otb::VectorImage<PixelType, 2>                  VectorImageType;
+  typedef otb::Image<PixelType, 2>                        ImageType;
   typedef otb::ImageFileReader<VectorImageType>           ReaderType;
 
   // Vector Data
   typedef otb::VectorData<>                               VectorDataType;
   typedef otb::VectorDataFileReader<VectorDataType>       VectorDataReaderType;
+  typedef otb::VectorDataFileWriter<VectorDataType>       VectorDataWriterType;
 
   //
-  typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, VectorImageType>
-                                                          VectorDataReProjFilter;
+  typedef otb::VectorDataIntoImageProjectionFilter
+                 <VectorDataType, VectorImageType>        VectorDataReProjFilter;
 
   typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> TreeIteratorType;
 
+  std::string imageInputFilename = argv[1];
+  std::string vectorDataInputFilename = argv[2];
+  std::string demDirectory = argv[3];
+  std::string vectorDataOutputFilename = argv[4];
+  std::string txtOutputFilename = argv[5];
+
+  std::cout << imageInputFilename << "\n"
+            << vectorDataInputFilename << "\n"
+            << demDirectory << "\n"
+            << vectorDataOutputFilename << "\n"
+            << txtOutputFilename << std::endl;
+
   // Read the image
   ReaderType::Pointer    reader  = ReaderType::New();
-  reader->SetFileName(argv[1]);
+  reader->SetFileName(imageInputFilename);
   reader->UpdateOutputInformation();
 
-  std::cout<<"Processing image: "<<reader->GetFileName()<<std::endl;
-
   // read the Vector Data
   VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New();
-  vdReader->SetFileName(argv[2]);
+  vdReader->SetFileName(vectorDataInputFilename);
   vdReader->Update();
 
-  std::cout<<"Processing vectorData: "<<vdReader->GetFileName()<<std::endl;
+  std::cout<<"Set input data to read data DONE"<<std::endl;
+
+  std::ofstream file;
+  file.open(txtOutputFilename.c_str());
+
+  file << "--- IMAGE INPUT ---" << std::endl;
+  file << "Spacing of the input image: "<< reader->GetOutput()->GetSpacing() << std::endl;
+  file << "Origin of the input image: "<< reader->GetOutput()->GetOrigin() << std::endl;
+  file << "Size of the input image: "<< reader->GetOutput()->GetLargestPossibleRegion() << std::endl;
+  file << "ProjRef of the input image: "<< reader->GetOutput()->GetProjectionRef() << std::endl;
+
 
   VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New();
 
   //----------
   // Display input
-  std::cout << "--- TEST INPUT ---" << std::endl;
-  TreeIteratorType itVectorInput(vdReader->GetOutput()->GetDataTree());
-  itVectorInput.GoToBegin();
-  while (!itVectorInput.IsAtEnd())
-    {
-    if (itVectorInput.Get()->IsPolygonFeature())
-      {
-      std::cout << "----------\n" <<itVectorInput.Get()->GetNodeTypeAsString() << std::endl;
-      std::cout << "List of vertices: " << ": " <<std::endl;
-      for (unsigned int itPoints = 0; itPoints < itVectorInput.Get()->GetPolygonExteriorRing()->GetVertexList()->Size(); itPoints++)
-        {
-        std::cout << "vertex[" << itPoints << "]: " << itVectorInput.Get()->GetPolygonExteriorRing()->GetVertexList()->GetElement(itPoints) <<std::endl;
-        }
-      std::cout << "Polygon region: " << itVectorInput.Get()->GetPolygonExteriorRing()->GetBoundingRegion() <<  std::endl;
-      }
-    ++itVectorInput;
-    }
+  file << "\n--- VECTOR DATA INPUT ---" << std::endl;
+  file << "ProjRef of the input vector data: "<< vdReader->GetOutput()->GetProjectionRef() << std::endl;
+  file << "Origin of the input vector data: "<< vdReader->GetOutput()->GetOrigin() << std::endl;
+  file << "Spacing of the input vector data: "<< vdReader->GetOutput()->GetSpacing() << std::endl;
 
   //----------
   // Set input of the filter
@@ -85,31 +96,44 @@ int otbVectorDataIntoImageProjectionFilterTest(int argc, char * argv[])
 
   vdReProjFilter->SetInputVectorData(vdReader->GetOutput());
 
-  vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true);
+  vdReProjFilter->SetDEMDirectory(demDirectory);
+
+  std::string stateOutput ="";
+  if (atoi(argv[6]) == 1)
+   {
+   stateOutput = "true";
+   vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true);
+   }
+  else
+   {
+   stateOutput = "false";
+   vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(false);
+   }
+
+  std::cout<<"Set input data for the filter DONE (" << stateOutput << ")" <<std::endl;
 
   //----------
-  // UPDATE
-  vdReProjFilter->Update();
+  // WRITE
+  //vdReProjFilter->Update();
+
+  VectorDataWriterType::Pointer vdwriter = VectorDataWriterType::New();
+  vdwriter->SetFileName(vectorDataOutputFilename);
+  vdwriter->SetInput(vdReProjFilter->GetOutput());
+  vdwriter->Update();
+
+  std::cout<<"Update"<<std::endl;
 
   //----------
   // check output
-  std::cout << "--- TEST OUTPUT ---" << std::endl;
-  TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (itVector.Get()->IsPolygonFeature())
-      {
-      std::cout << "----------\n" <<itVector.Get()->GetNodeTypeAsString() << std::endl;
-      std::cout << "List of vertices: " << ": " <<std::endl;
-      for (unsigned int itPoints = 0; itPoints < itVector.Get()->GetPolygonExteriorRing()->GetVertexList()->Size(); itPoints++)
-        {
-        std::cout << "vertex[" << itPoints << "]: " << itVector.Get()->GetPolygonExteriorRing()->GetVertexList()->GetElement(itPoints) <<std::endl;
-        }
-      std::cout << "Polygon region: " << itVector.Get()->GetPolygonExteriorRing()->GetBoundingRegion() <<  std::endl;
-      }
-    ++itVector;
-    }
+  file << "\n--- VECTRODATA OUTPUT ---" << std::endl;
+  file << "ProjRef of the output vector data: "<< vdReProjFilter->GetOutput()->GetProjectionRef() << std::endl;
+  file << "Origin of the output vector data: "<< vdReProjFilter->GetOutput()->GetOrigin() << std::endl;
+  file << "Spacing of the output vector data: "<< vdReProjFilter->GetOutput()->GetSpacing() << std::endl;
+
+  file.close();
+
+  std::cout<<"END"<<std::endl;
+
 
   return EXIT_SUCCESS;
 }