diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.cpp b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.cpp
index 257da1a21965fe0a8aa787de750a3ce6e201464c..88c370bef1ccb440f7cbce410e9a7989a39440f1 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.cpp
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.cpp
@@ -19,6 +19,13 @@
 // #include <AlosSarMapProjectionData.h>//
 #include <AlosSarFacilityData.h>
 
+#include <ossim/base/ossimTrace.h>
+#include <ossim/base/ossimKeywordlist.h>
+#include <ossim/base/ossimKeywordNames.h>
+
+// Static trace for debugging
+static ossimTrace traceDebug("ossimAlosSarLeader:debug");
+
 namespace ossimplugins
 {
 
@@ -118,17 +125,154 @@ void AlosSarLeader::ClearRecords()
   _records.clear();
 }
 
+bool AlosSarLeader::saveState(ossimKeywordlist& kwl,
+                             const char* prefix) const
+{
+
+  static const char MODULE[] = "AlosSarLeader::saveState";
+
+  if (traceDebug())
+  {
+    ossimNotify(ossimNotifyLevel_DEBUG)<< MODULE << " entered...\n";
+  }
+
+  bool result = true;
+
+  char name[64];
+
+  kwl.add(prefix, ossimKeywordNames::TYPE_KW, "ossimAlosSarModel", true);
+  /*
+   * Adding metadata necessary to the sensor model in the keywordlist
+   */
+  AlosSarFileDescriptor *leaderfiledesc = get_AlosSarFileDescriptor();
+  if (leaderfiledesc != NULL)
+  {
+    kwl.add(prefix, "filename",leaderfiledesc->get_file_name().c_str(),true);
+  }
+  else
+  {
+    result = false;
+  }
+
+  /*
+   * Adding metadata necessary to the sensor model in the keywordlist
+   */
+  AlosSarDataSetSummary *datasetSummary = get_AlosSarDataSetSummary();
+  if ( (datasetSummary != NULL) && (result == true) )
+  {
+    kwl.add(prefix, "inp_sctim",(datasetSummary->get_inp_sctim()).c_str(),true);
+    kwl.add(prefix, "ellip_maj", datasetSummary->get_ellip_maj(),true);
+    kwl.add(prefix, "ellip_min", datasetSummary->get_ellip_min(),true);
+    kwl.add(prefix, "sc_lin", datasetSummary->get_sc_lin(),true);
+    kwl.add(prefix, "sc_pix", datasetSummary->get_sc_pix(),true);
+    kwl.add(prefix, "wave_length", datasetSummary->get_wave_length(),true);
+    kwl.add(prefix, "fr", datasetSummary->get_fr(),true);
+    kwl.add(prefix, "fa", datasetSummary->get_fa(),true);
+    kwl.add(prefix, "time_dir_pix", (datasetSummary->get_time_dir_pix()).c_str(),true);
+    kwl.add(prefix, "time_dir_lin", (datasetSummary->get_time_dir_lin()).c_str(),true);
+    kwl.add(prefix, "line_spacing", datasetSummary->get_line_spacing(),true);
+    kwl.add(prefix, "pix_spacing", datasetSummary->get_pix_spacing(),true);
+    kwl.add(prefix, "nlooks_az", datasetSummary->get_n_azilok(),true);
+    kwl.add(prefix, "n_rnglok", datasetSummary->get_n_rnglok(),true);
+    kwl.add(prefix, "zero_dop_range_time_f_pixel", datasetSummary->get_zero_dop_range_time_f_pixel(),true);
+    kwl.add(prefix, "zero_dop_range_time_c_pixel", datasetSummary->get_zero_dop_range_time_c_pixel(),true);
+    kwl.add(prefix, "zero_dop_range_time_l_pixel", datasetSummary->get_zero_dop_range_time_l_pixel(),true);
+  }
+  else
+  {
+    result = false;
+  }
 
+  AlosSarMapProjectionData *mapprojectiondata = get_AlosSarMapProjectionData();
+  if ( (mapprojectiondata != NULL) && (result == true) )
+  {
+    kwl.add(prefix, "map_proj_des",(mapprojectiondata->get_map_proj_des()).c_str(),true);
+    kwl.add(prefix, "num_lines",(double) mapprojectiondata->get_num_lines(),true);
+    kwl.add(prefix, "num_pix",(double) mapprojectiondata->get_num_pix_in_line(),true);
+    kwl.add(prefix, "first_line_first_pixel_lat",mapprojectiondata->get_first_line_first_pixel_lat(), true);
+    kwl.add(prefix, "first_line_first_pixel_lon",mapprojectiondata->get_first_line_first_pixel_lon(), true);
+    kwl.add(prefix, "first_line_last_pixel_lat",mapprojectiondata->get_first_line_last_pixel_lat(), true);
+    kwl.add(prefix, "first_line_last_pixel_lon",mapprojectiondata->get_first_line_last_pixel_lon(), true);
+    kwl.add(prefix, "last_line_first_pixel_lat",mapprojectiondata->get_last_line_first_pixel_lat(), true);
+    kwl.add(prefix, "last_line_first_pixel_lon",mapprojectiondata->get_last_line_first_pixel_lon(), true);
+    kwl.add(prefix, "last_line_last_pixel_lat",mapprojectiondata->get_last_line_last_pixel_lat(), true);
+    kwl.add(prefix, "last_line_last_pixel_lon",mapprojectiondata->get_last_line_last_pixel_lon(), true);
+  }
+  else
+  {
+    result = false;
+  }
+
+  AlosSarPlatformPositionData *platformposition = get_AlosSarPlatformPositionData();
+  if ( (mapprojectiondata != NULL) && (result == true) )
+  {
+    kwl.add(prefix, "neph", platformposition->get_ndata(),true);
+    kwl.add(prefix, "eph_year", platformposition->get_year(),true);
+    kwl.add(prefix, "eph_month", platformposition->get_month(),true);
+    kwl.add(prefix, "eph_day", platformposition->get_day(),true);
+    kwl.add(prefix, "eph_gmt_day", platformposition->get_gmt_day(),true);
+    kwl.add(prefix, "eph_sec", platformposition->get_gmt_sec(),true);
+    kwl.add(prefix, "eph_hr_angle", platformposition->get_hr_angle(),true);
+    kwl.add(prefix, "eph_int", platformposition->get_data_int(),true);
+
+    for (int i=0;i<platformposition->get_ndata();i++)
+    {
+      sprintf(name,"eph%i_posX",i);
+      kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_pos()[0],true);
+      sprintf(name,"eph%i_posY",i);
+      kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_pos()[1],true);
+      sprintf(name,"eph%i_posZ",i);
+      kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_pos()[2],true);
+
+      sprintf(name,"eph%i_velX",i);
+      kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_vel()[0],true);
+      sprintf(name,"eph%i_velY",i);
+      kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_vel()[1],true);
+      sprintf(name,"eph%i_velZ",i);
+      kwl.add(prefix, name,(platformposition->get_pos_vect()[i]).get_vel()[2],true);
+    }
+  }
+  else
+  {
+    result = false;
+  }
+  /*
+   * Adding metadata necessary to the sensor model in the keywordlist
+   */
+  AlosSarFacilityData *facilitydata = get_AlosSarFacilityData();
+  if ( (facilitydata != NULL) && (result == true) )
+  {
+    kwl.add(prefix, "coef_ground_range_1",facilitydata->get_coef_ground_range_1(),true);
+    kwl.add(prefix, "coef_ground_range_2",facilitydata->get_coef_ground_range_2(),true);
+    kwl.add(prefix, "coef_ground_range_3",facilitydata->get_coef_ground_range_3(),true);
+    kwl.add(prefix, "coef_ground_range_4",facilitydata->get_coef_ground_range_4(),true);
+  }
+  else
+  {
+    result = false;
+  }
+
+
+  if (traceDebug())
+  {
+    ossimNotify(ossimNotifyLevel_DEBUG)
+       << MODULE << " exit status = " << (result?"true":"false\n")
+       << std::endl;
+  }
+
+
+  return result;
+}
 
-AlosSarFacilityData * AlosSarLeader::get_AlosSarFacilityData()
+AlosSarFacilityData * AlosSarLeader::get_AlosSarFacilityData() const
 {
   return (AlosSarFacilityData*)_records[AlosSarFacilityDataID];
 }
-AlosSarPlatformPositionData * AlosSarLeader::get_AlosSarPlatformPositionData()
+AlosSarPlatformPositionData * AlosSarLeader::get_AlosSarPlatformPositionData() const
 {
   return (AlosSarPlatformPositionData*)_records[AlosSarPlatformPositionDataID];
 }
-/* AlosSarMapProjectionData * AlosSarLeader::get_AlosSarMapProjectionData()
+/* AlosSarMapProjectionData * AlosSarLeader::get_AlosSarMapProjectionData() const
 {
   return (AlosSarMapProjectionData*)_records[AlosSarMapProjectionDataID];
 }
@@ -137,12 +281,12 @@ AlosSarPlatformPositionData * AlosSarLeader::get_AlosSarPlatformPositionData()
 
 //no map projection data
 
-AlosSarDataSetSummary * AlosSarLeader::get_AlosSarDataSetSummary()
+AlosSarDataSetSummary * AlosSarLeader::get_AlosSarDataSetSummary() const
 {
   return (AlosSarDataSetSummary*)_records[AlosSarDataSetSummaryID];
 }
 
-AlosSarFileDescriptor * AlosSarLeader::get_AlosSarFileDescriptor()
+AlosSarFileDescriptor * AlosSarLeader::get_AlosSarFileDescriptor() const
 {
   return (AlosSarFileDescriptor*)_records[AlosSarFileDescriptorID];
 }
diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.h b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.h
index 004f69820455569eb172e9ba2ed88f6c5ea66bc4..58d475bd694a03c01ba767ac4275e7bb9fe800e0 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.h
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarLeader.h
@@ -19,9 +19,10 @@
 #include "AlosSarMapProjectionData.h"
 #include "AlosSarPlatformPositionData.h"
 #include "AlosSarFacilityData.h"
-
 #include <map>
 
+class ossimKeywordlist;
+
 namespace ossimplugins
 {
 
@@ -72,11 +73,23 @@ public:
    * @brief Remove all the previous records from the AlosSarLeader
    */
   void ClearRecords();
-  AlosSarFacilityData * get_AlosSarFacilityData();
-  AlosSarPlatformPositionData * get_AlosSarPlatformPositionData();
-//  AlosSarMapProjectionData * get_AlosSarMapProjectionData();
-  AlosSarDataSetSummary * get_AlosSarDataSetSummary();
-  AlosSarFileDescriptor * get_AlosSarFileDescriptor();
+
+
+  /**
+   * @brief Method to save object state to a keyword list.
+   * @param kwl Keyword list to save to.
+   * @param prefix added to keys when saved.
+   * @return true on success, false on error.
+   */
+  virtual bool saveState(ossimKeywordlist& kwl,
+                         const char* prefix=0) const;
+
+
+  AlosSarFacilityData * get_AlosSarFacilityData() const;
+  AlosSarPlatformPositionData * get_AlosSarPlatformPositionData() const;
+//  AlosSarMapProjectionData * get_AlosSarMapProjectionData() const;
+  AlosSarDataSetSummary * get_AlosSarDataSetSummary() const;
+  AlosSarFileDescriptor * get_AlosSarFileDescriptor() const;
 
 protected:
   std::map<int, AlosSarRecord*> _records;