diff --git a/Code/IO/otbImageFileWriter.txx b/Code/IO/otbImageFileWriter.txx
index d04d4ae503820935e8906f7406d7bc9b5e2106ed..827a223150ba07abdf5e9bad496679701067eb73 100644
--- a/Code/IO/otbImageFileWriter.txx
+++ b/Code/IO/otbImageFileWriter.txx
@@ -24,6 +24,16 @@
 #include "itkObjectFactoryBase.h"
 #include "vnl/vnl_vector.h"
 
+#include "imaging/ossimImageHandlerRegistry.h"
+#include "ossim/imaging/ossimImageHandlerSarFactory.h"
+#include "imaging/ossimImageHandler.h"
+#include "init/ossimInit.h"
+#include "base/ossimKeywordlist.h"
+
+#include "itkMetaDataObject.h"
+#include "otbImageKeywordlist.h"
+#include "otbMetaDataKey.h"
+
 #include "otbMacro.h"
 
 namespace otb
@@ -76,6 +86,30 @@ ImageFileWriter<TInputImage>
   //TODO: Force ImageIO desctructor. Should be fixed once GDALImageIO
   //will be refactored.
   this->SetImageIO(NULL);
+
+
+  // Write the image keyword list if any
+  ossimKeywordlist geom_kwl;
+  ImageKeywordlist otb_kwl;
+
+  itk::MetaDataDictionary dict = this->GetInput()->GetMetaDataDictionary();
+  itk::ExposeMetaData<ImageKeywordlist>(dict, MetaDataKey::OSSIMKeywordlistKey, otb_kwl);
+  otb_kwl.convertToOSSIMKeywordlist(geom_kwl);
+
+  if(geom_kwl.getSize()>0)
+    {
+    otbMsgDevMacro(<<"Exporting keywordlist ...");
+    ossimImageHandlerRegistry::instance()->addFactory(ossimImageHandlerSarFactory::instance());
+    ossimImageHandler* handler = ossimImageHandlerRegistry::instance()->open(ossimFilename(this->GetFileName()));
+  
+  if(!handler)
+    {
+    otbMsgDevMacro(<<"OSSIM Open Image FAILED !");
+    }
+    handler->setImageGeometry(geom_kwl);
+    handler->saveImageGeometry();
+    handler->close();
+    }
 }
 
 /**
diff --git a/Code/IO/otbStreamingImageFileWriter.txx b/Code/IO/otbStreamingImageFileWriter.txx
index 495720c9e3497f9ecdd8e5fdad231ceba0054b9e..e63fb4a9c1449a504d7f3813894b674b85638436 100644
--- a/Code/IO/otbStreamingImageFileWriter.txx
+++ b/Code/IO/otbStreamingImageFileWriter.txx
@@ -26,6 +26,16 @@
 #include "itkImageRegionMultidimensionalSplitter.h"
 #include "otbImageIOFactory.h"
 
+#include "imaging/ossimImageHandlerRegistry.h"
+#include "ossim/imaging/ossimImageHandlerSarFactory.h"
+#include "imaging/ossimImageHandler.h"
+#include "init/ossimInit.h"
+#include "base/ossimKeywordlist.h"
+
+#include "itkMetaDataObject.h"
+#include "otbImageKeywordlist.h"
+#include "otbMetaDataKey.h"
+
 #include "otbConfigure.h"
 
 namespace otb
@@ -521,6 +531,29 @@ StreamingImageFileWriter<TInputImage>
       this->GetOutput(idx)->DataHasBeenGenerated();
     }
   }
+  
+  // Write the image keyword list if any
+  ossimKeywordlist geom_kwl;
+  ImageKeywordlist otb_kwl;
+  
+  itk::MetaDataDictionary dict = this->GetInput()->GetMetaDataDictionary();
+  itk::ExposeMetaData<ImageKeywordlist>(dict, MetaDataKey::OSSIMKeywordlistKey, otb_kwl);
+  otb_kwl.convertToOSSIMKeywordlist(geom_kwl);
+
+  if(geom_kwl.getSize()>0)
+    {
+    otbMsgDevMacro(<<"Exporting keywordlist ...");
+    ossimImageHandlerRegistry::instance()->addFactory(ossimImageHandlerSarFactory::instance());
+    ossimImageHandler* handler = ossimImageHandlerRegistry::instance()->open(ossimFilename(this->GetFileName()));
+  
+  if(!handler)
+    {
+    otbMsgDevMacro(<<"OSSIM Open Image FAILED !");
+    }
+    handler->setImageGeometry(geom_kwl);
+    handler->saveImageGeometry();
+    handler->close();
+    }
 
   /**
    * Release any inputs if marked for release