diff --git a/Code/Learning/otbListSampleGenerator.h b/Code/Learning/otbListSampleGenerator.h
index 62a16aef81b1118ac9640407cb4a56057bc9da78..bebfea70ee4f1cab2166778727aa0644ca00b201 100644
--- a/Code/Learning/otbListSampleGenerator.h
+++ b/Code/Learning/otbListSampleGenerator.h
@@ -145,7 +145,9 @@ protected:
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
   /** Triggers the Computation of the sample list */
-  void GenerateData(void);
+  virtual void GenerateData(void);
+
+  virtual void GenerateInputRequestedRegion(void);
 
   /** Compute the calss statistics*/
   void GenerateClassStatistics();
diff --git a/Code/Learning/otbListSampleGenerator.txx b/Code/Learning/otbListSampleGenerator.txx
index 5351fe16f4a4e207e4e777dfafeffe7153d2d0cb..c1a7ea684dc5ba938b2d73ea77fd7b9a888c17ad 100644
--- a/Code/Learning/otbListSampleGenerator.txx
+++ b/Code/Learning/otbListSampleGenerator.txx
@@ -188,6 +188,27 @@ ListSampleGenerator<TImage, TVectorData>
   return dynamic_cast<ListLabelType*>(this->itk::ProcessObject::GetOutput(3));
 }
 
+template <class TImage, class TVectorData>
+void
+ListSampleGenerator<TImage, TVectorData>
+::GenerateInputRequestedRegion()
+{
+  ImagePointerType img = static_cast<ImageType *>(this->ProcessObject::GetInput(0));
+
+  if(img.IsNotNull())
+    {
+
+    // Requested regions will be generated during GenerateData
+    // call. For now request an empty region so as to avoid requesting
+    // the largest possible region (fixes bug #943 )
+    typename ImageType::RegionType dummyRegion;
+    typename ImageType::SizeType dummySize;
+    dummySize.Fill(0);
+    dummyRegion.SetSize(dummySize);
+    img->SetRequestedRegion(dummyRegion);
+    }
+}
+
 
 template <class TImage, class TVectorData>
 void