diff --git a/app/otbExtractGeom.cxx b/app/otbExtractGeom.cxx
index 6b9056c7da3baebd1bfd58bcfdb68ec0797fcade..4abbbc90a96a561e2fa19bc9c92a173d2560aeed 100644
--- a/app/otbExtractGeom.cxx
+++ b/app/otbExtractGeom.cxx
@@ -24,9 +24,11 @@
 #include "otbVectorDataToLabelImageCustomFilter.h"
 #include "itkMaskImageFilter.h"
 #include "otbVectorDataIntoImageProjectionFilter.h"
-#include "otbVectorDataProperties.h"
 #include "otbRegionComparator.h"
 
+// ogr
+#include "otbOGR.h"
+
 using namespace std;
 
 namespace otb
@@ -63,7 +65,6 @@ public:
       FloatVectorImageType> VectorDataReprojFilterType;
   typedef otb::VectorDataToLabelImageCustomFilter<VectorDataType,
       MaskImageType> RasteriseFilterType;
-  typedef otb::VectorDataProperties<VectorDataType> VectorDataPropertiesType;
 
   void DoInit()
   {
@@ -119,15 +120,55 @@ public:
     vdReproj->Update();
 
     /* Get VectorData bounding box */
-    vdProperties = VectorDataPropertiesType::New();
-    vdProperties->SetVectorDataObject(vdReproj->GetOutput());
-    vdProperties->ComputeBoundingRegion();
+    OGREnvelope env;
+    otb::ogr::DataSource::Pointer ogrDS;
+    ogrDS = otb::ogr::DataSource::New(GetParameterString("shp") ,
+        otb::ogr::DataSource::Modes::Read);
+    double ulx, uly, lrx, lry;
+    bool extentAvailable = true;
+    std::string inputProjectionRef = "";
+    // First try to get the extent in the metadata
+    try
+    {
+      inputProjectionRef = ogrDS->GetGlobalExtent(ulx,uly,lrx,lry);
+    }
+    catch(const itk::ExceptionObject&)
+    {
+      extentAvailable = false;
+    }
+    // If no extent available force the computation of the extent
+    if (!extentAvailable)
+      {
+      try
+      {
+        inputProjectionRef = ogrDS->GetGlobalExtent(ulx,uly,lrx,lry,true);
+        extentAvailable = true;
+      }
+      catch(itk::ExceptionObject & err)
+      {
+        extentAvailable = false;
+
+        otbAppLogFATAL(<<"Failed to retrieve the spatial extent of the dataset "
+            "in force mode. The spatial extent is mandatory when "
+            "orx, ory, spx and spy parameters are not set, consider "
+            "setting them. Error from library: "<<err.GetDescription());
+      }
+      }
+    otb::RegionComparator<FloatVectorImageType, FloatVectorImageType>::RSRegion::PointType rsRoiOrigin;
+    rsRoiOrigin[0] = ulx;
+    rsRoiOrigin[1] = uly;
+    otb::RegionComparator<FloatVectorImageType, FloatVectorImageType>::RSRegion::SizeType rsRoiSize;
+    rsRoiSize[0] = lrx - ulx;
+    rsRoiSize[1] = lry - uly;
+    otb::RegionComparator<FloatVectorImageType, FloatVectorImageType>::RSRegion rsRoi;
+    rsRoi.SetOrigin(rsRoiOrigin);
+    rsRoi.SetSize(rsRoiSize);
 
     /* Compute intersecting region */
     otb::RegionComparator<FloatVectorImageType, FloatVectorImageType> comparator;
     comparator.SetImage1(xs);
     FloatVectorImageType::RegionType roi =
-        comparator.RSRegionToImageRegion(vdProperties->GetBoundingRegion());
+        comparator.RSRegionToImageRegion(rsRoi /*vdProperties->GetBoundingRegion()*/);
     roi.PadByRadius(1); // avoid extrapolation
     if (!roi.Crop(xs->GetLargestPossibleRegion()))
       {
@@ -165,7 +206,6 @@ public:
   ExtractFilterType::Pointer m_Filter;
   VectorDataReprojFilterType::Pointer vdReproj;
   RasteriseFilterType::Pointer rasterizer;
-  VectorDataPropertiesType::Pointer vdProperties;
   MaskFilterType::Pointer maskFilter;
 
 };