diff --git a/Modules/Core/Streaming/include/otbStreamingManager.h b/Modules/Core/Streaming/include/otbStreamingManager.h
index e5a853309aec737f70898f384c56a7d69dc95c28..cd57e83f9e7ddeda81282d35af4d048a4d837faa 100644
--- a/Modules/Core/Streaming/include/otbStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbStreamingManager.h
@@ -88,6 +88,9 @@ public:
    * GetNumberOfSplits() returns. */
   virtual RegionType GetSplit(unsigned int i);
 
+  itkSetMacro(DefaultRAM, MemoryPrintType);
+  itkGetMacro(DefaultRAM, MemoryPrintType);
+
 protected:
   StreamingManager();
   ~StreamingManager() override;
@@ -111,11 +114,13 @@ private:
   StreamingManager(const StreamingManager &); //purposely not implemented
   void operator =(const StreamingManager&);   //purposely not implemented
 
-  /* Compute the available RAM from configuration settings if the input parameter is 0,
-   * otherwise, simply returns the input parameter */
+  /** Compute the available RAM in Bytes from an input value in MByte.
+   *  If the input value is 0, it uses the m_DefaultRAM value.
+   *  If m_DefaultRAM is also 0, it uses the configuration settings */
   MemoryPrintType GetActualAvailableRAMInBytes(MemoryPrintType availableRAMInMB);
 
-
+  /** Default available RAM in MB */
+  MemoryPrintType m_DefaultRAM;
 };
 
 } // End namespace otb
diff --git a/Modules/Core/Streaming/include/otbStreamingManager.txx b/Modules/Core/Streaming/include/otbStreamingManager.txx
index d30e3a2580195baf4dc0281fa7826af34e24e5cc..1d76ff1fe498007c5b9bb60fcc7fa80e040733b2 100644
--- a/Modules/Core/Streaming/include/otbStreamingManager.txx
+++ b/Modules/Core/Streaming/include/otbStreamingManager.txx
@@ -31,6 +31,7 @@ namespace otb
 template <class TImage>
 StreamingManager<TImage>::StreamingManager()
   : m_ComputedNumberOfSplits(0)
+  , m_DefaultRAM(0)
 {
 }
 
@@ -47,8 +48,15 @@ StreamingManager<TImage>::GetActualAvailableRAMInBytes(MemoryPrintType available
 
   if (availableRAMInBytes == 0)
     {
-    // Retrieve it from the configuration
-    availableRAMInBytes = 1024*1024*ConfigurationManager::GetMaxRAMHint();
+    if (m_DefaultRAM != 0)
+      {
+      availableRAMInBytes = 1024*1024*m_DefaultRAM;
+      }
+    else
+      {
+      // Retrieve it from the configuration
+      availableRAMInBytes = 1024*1024*ConfigurationManager::GetMaxRAMHint();
+      }
     }
   return availableRAMInBytes;
 }
diff --git a/Modules/IO/ImageIO/include/otbImageFileWriter.txx b/Modules/IO/ImageIO/include/otbImageFileWriter.txx
index 50384debf3d7f5ae339b15e53929f13521986597..677ea22b4bab59d04121735bd58990ca0b516ec4 100644
--- a/Modules/IO/ImageIO/include/otbImageFileWriter.txx
+++ b/Modules/IO/ImageIO/include/otbImageFileWriter.txx
@@ -294,11 +294,17 @@ ImageFileWriter<TInputImage>
       sizemode = m_FilenameHelper->GetStreamingSizeMode();
       }
 
-    double sizevalue = 0.;
+    unsigned int sizevalue = 0;
+    // Save the DefaultRAM value for later
+    unsigned int oldDefaultRAM = m_StreamingManager->GetDefaultRAM();
+    if (sizemode == "auto")
+      {
+      sizevalue = oldDefaultRAM;
+      }
 
     if(m_FilenameHelper->StreamingSizeValueIsSet())
       {
-      sizevalue = m_FilenameHelper->GetStreamingSizeValue();
+      sizevalue = static_cast<unsigned int>(m_FilenameHelper->GetStreamingSizeValue());
       }
 
     if(type == "auto")
@@ -307,7 +313,7 @@ ImageFileWriter<TInputImage>
         {
         otbLogMacro(Warning,<<"In auto streaming type, the sizemode option will be ignored.");
         }
-      if(sizevalue == 0.)
+      if(sizevalue == 0)
         {
         otbLogMacro(Warning,<<"sizemode is auto but sizevalue is 0. Value will be fetched from the OTB_MAX_RAM_HINT environment variable if set, or else use the default value");
         }
@@ -317,7 +323,7 @@ ImageFileWriter<TInputImage>
       {
       if(sizemode == "auto")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           otbLogMacro(Warning,<<"sizemode is auto but sizevalue is 0. Value will be fetched from the OTB_MAX_RAM_HINT environment variable if set, or else use the default value");
           }
@@ -325,27 +331,27 @@ ImageFileWriter<TInputImage>
         }
       else if(sizemode == "nbsplits")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           otbLogMacro(Warning,<<"Streaming sizemode is set to nbsplits but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
           }
-        this->SetNumberOfDivisionsTiledStreaming(static_cast<unsigned int>(sizevalue));
+        this->SetNumberOfDivisionsTiledStreaming(sizevalue);
         }
       else if(sizemode == "height")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           otbLogMacro(Warning,<<"Streaming sizemode is set to height but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
           }
 
-        this->SetTileDimensionTiledStreaming(static_cast<unsigned int>(sizevalue));
+        this->SetTileDimensionTiledStreaming(sizevalue);
         }
       }
     else if(type == "stripped")
       {
       if(sizemode == "auto")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           otbLogMacro(Warning,<<"sizemode is auto but sizevalue is 0. Value will be fetched from configuration file if any, or from cmake configuration otherwise.");
           }
@@ -354,30 +360,34 @@ ImageFileWriter<TInputImage>
         }
       else if(sizemode == "nbsplits")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           otbLogMacro(Warning,<<"Streaming sizemode is set to nbsplits but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
           }
-        this->SetNumberOfDivisionsStrippedStreaming(static_cast<unsigned int>(sizevalue));
+        this->SetNumberOfDivisionsStrippedStreaming(sizevalue);
         }
       else if(sizemode == "height")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           otbLogMacro(Warning,<<"Streaming sizemode is set to height but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
           }
-        this->SetNumberOfLinesStrippedStreaming(static_cast<unsigned int>(sizevalue));
+        this->SetNumberOfLinesStrippedStreaming(sizevalue);
         }
 
       }
     else if (type == "none")
       {
-      if(sizemode!="" || sizevalue!=0.)
+      if(sizemode!="" || sizevalue!=0)
         {
         otbLogMacro(Warning,<<"Streaming is explicitly disabled, sizemode and sizevalue will be ignored.");
         }
       this->SetNumberOfDivisionsTiledStreaming(0);
       }
+
+    // since we change the m_StreamingManager under the hood, we copy the DefaultRAM
+    // value to the new streamingManager.
+    m_StreamingManager->SetDefaultRAM(oldDefaultRAM);
     }
   else
     {
diff --git a/Modules/MPI/MPITiffWriter/include/otbSimpleParallelTiffWriter.txx b/Modules/MPI/MPITiffWriter/include/otbSimpleParallelTiffWriter.txx
index 336f399df82f4fb35c9e3c820d3e9a319fdb6ff3..9a3790c872e8f11dc6f0dc65ef0c565e26794cde 100644
--- a/Modules/MPI/MPITiffWriter/include/otbSimpleParallelTiffWriter.txx
+++ b/Modules/MPI/MPITiffWriter/include/otbSimpleParallelTiffWriter.txx
@@ -315,11 +315,16 @@ SimpleParallelTiffWriter<TInputImage>
       sizemode = m_FilenameHelper->GetStreamingSizeMode();
       }
 
-    double sizevalue = 0.;
-
+    unsigned int sizevalue = 0;
+    // Save the DefaultRAM value for later
+    unsigned int oldDefaultRAM = m_StreamingManager->GetDefaultRAM();
+    if (sizemode == "auto")
+      {
+      sizevalue = oldDefaultRAM;
+      }
     if(m_FilenameHelper->StreamingSizeValueIsSet())
       {
-      sizevalue = m_FilenameHelper->GetStreamingSizeValue();
+      sizevalue = static_cast<unsigned int>(m_FilenameHelper->GetStreamingSizeValue());
       }
 
     if(type == "auto")
@@ -328,7 +333,7 @@ SimpleParallelTiffWriter<TInputImage>
         {
         itkWarningMacro(<<"In auto streaming type, the sizemode option will be ignored.");
         }
-      if(sizevalue == 0.)
+      if(sizevalue == 0)
         {
         itkWarningMacro("sizemode is auto but sizevalue is 0. Value will be fetched from configuration file if any, or from cmake configuration otherwise.");
         }
@@ -338,7 +343,7 @@ SimpleParallelTiffWriter<TInputImage>
       {
       if(sizemode == "auto")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           itkWarningMacro("sizemode is auto but sizevalue is 0. Value will be fetched from configuration file if any, or from cmake configuration otherwise.");
           }
@@ -346,27 +351,27 @@ SimpleParallelTiffWriter<TInputImage>
         }
       else if(sizemode == "nbsplits")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           itkWarningMacro("Streaming sizemode is set to nbsplits but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
           }
-        this->SetNumberOfDivisionsTiledStreaming(static_cast<unsigned int>(sizevalue));
+        this->SetNumberOfDivisionsTiledStreaming(sizevalue);
         }
       else if(sizemode == "height")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           itkWarningMacro("Streaming sizemode is set to height but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
           }
 
-        this->SetTileDimensionTiledStreaming(static_cast<unsigned int>(sizevalue));
+        this->SetTileDimensionTiledStreaming(sizevalue);
         }
       }
     else if(type == "stripped")
       {
       if(sizemode == "auto")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           itkWarningMacro("sizemode is auto but sizevalue is 0. Value will be fetched from configuration file if any, or from cmake configuration otherwise.");
           }
@@ -375,30 +380,34 @@ SimpleParallelTiffWriter<TInputImage>
         }
       else if(sizemode == "nbsplits")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           itkWarningMacro("Streaming sizemode is set to nbsplits but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
           }
-        this->SetNumberOfDivisionsStrippedStreaming(static_cast<unsigned int>(sizevalue));
+        this->SetNumberOfDivisionsStrippedStreaming(sizevalue);
         }
       else if(sizemode == "height")
         {
-        if(sizevalue == 0.)
+        if(sizevalue == 0)
           {
           itkWarningMacro("Streaming sizemode is set to height but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
           }
-        this->SetNumberOfLinesStrippedStreaming(static_cast<unsigned int>(sizevalue));
+        this->SetNumberOfLinesStrippedStreaming(sizevalue);
         }
 
       }
     else if (type == "none")
       {
-      if(sizemode!="" || sizevalue!=0.)
+      if(sizemode!="" || sizevalue!=0)
         {
         itkWarningMacro("Streaming is explicitly disabled, sizemode and sizevalue will be ignored.");
         }
       this->SetNumberOfDivisionsTiledStreaming(0);
       }
+
+    // since we change the m_StreamingManager under the hood, we copy the DefaultRAM
+    // value to the new streamingManager.
+    m_StreamingManager->SetDefaultRAM(oldDefaultRAM);
     }
   else
     {
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx
index 32b0cfaa497bed989fedf6d01a20b1763dc0bf28..09396447765610f1b1f2dd903943b9a2cc116922 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx
@@ -207,6 +207,7 @@ ClampAndWriteVectorImage( itk::ImageBase<2> * in ,
       sptWriter->SetFileName(filename);
       sptWriter->SetInput(clampFilter->GetOutput());
       sptWriter->SetAutomaticAdaptativeStreaming(ramValue);
+      sptWriter->GetStreamingManager()->SetDefaultRAM(ramValue);
       sptWriter->Update();
       }
     
@@ -222,10 +223,9 @@ ClampAndWriteVectorImage( itk::ImageBase<2> * in ,
   
   if(useStandardWriter)
     {
-    
-    writer->SetFileName( filename );                                     
-    writer->SetInput(clampFilter->GetOutput());                                     
-    writer->SetAutomaticAdaptativeStreaming(ramValue);
+    writer->SetFileName( filename );
+    writer->SetInput(clampFilter->GetOutput());
+    writer->GetStreamingManager()->SetDefaultRAM(ramValue);
     writer->Update();
     }
 }
@@ -348,7 +348,7 @@ OutputImageParameter::SwitchRGBAImageWrite()
     {
     m_RGBAUInt8Writer->SetFileName( this->GetFileName() );
     m_RGBAUInt8Writer->SetInput(dynamic_cast<UInt8RGBAImageType*>(m_Image.GetPointer()) );
-    m_RGBAUInt8Writer->SetAutomaticAdaptativeStreaming(m_RAMValue);
+    m_RGBAUInt8Writer->GetStreamingManager()->SetDefaultRAM(m_RAMValue);
     m_RGBAUInt8Writer->Update();
     }
    else
@@ -363,7 +363,7 @@ OutputImageParameter::SwitchRGBImageWrite()
     {
     m_RGBUInt8Writer->SetFileName( this->GetFileName() );
     m_RGBUInt8Writer->SetInput(dynamic_cast<UInt8RGBImageType*>(m_Image.GetPointer()) );
-    m_RGBUInt8Writer->SetAutomaticAdaptativeStreaming(m_RAMValue);
+    m_RGBUInt8Writer->GetStreamingManager()->SetDefaultRAM(m_RAMValue);
     m_RGBUInt8Writer->Update();
     }
    else