diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.cpp b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.cpp
index 662844be30f4f6a15de611fa6abbf65714728601..58ad3a6544b9aa377f12528c163bc0c37c6def94 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.cpp
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.cpp
@@ -14,6 +14,7 @@
 #include <AlosSarRecordHeader.h>
 
 #include <AlosSarDataFileDescriptor.h>
+#include <AlosSarSignalData.h>
 
 #include <ossim/base/ossimTrace.h>
 #include <ossim/base/ossimKeywordlist.h>
@@ -26,6 +27,7 @@ namespace ossimplugins
 {
 
 const int AlosSarData::AlosSarDataFileDescriptorID = 1;
+const int AlosSarData::AlosSarSignalDataID = 2;
 
 AlosSarData::AlosSarData()
 {
@@ -70,6 +72,24 @@ std::istream& operator>>(std::istream& is, AlosSarData& data)
     is.read(buff, header.get_length()-12);
     delete buff;
   }
+
+  std::streampos filePosition;
+
+  filePosition = is.tellg();
+  is>>header;
+
+  record = new AlosSarSignalData;
+
+  if (record != NULL)
+  {
+    record->Read(is);
+    data._records[header.get_rec_seq()] = record;
+    std::cout << "Record sequence number = " << header.get_rec_seq() << std::endl;
+  }
+  is.seekg(filePosition); // Rewind file pointer to start of record
+  // Then, advance pointer to next record
+  is.seekg(static_cast<std::streamoff>(header.get_length()), std::ios::cur);
+
   return is;
 }
 
@@ -140,6 +160,21 @@ bool AlosSarData::saveState(ossimKeywordlist& kwl,
     result = false;
   }
 
+  const AlosSarSignalData *signalData = get_AlosSarSignalData();
+  if (datafiledesc != NULL)
+  {
+    kwl.add(prefix, "pulse_repetition_frequency", signalData->get_pulse_repetition_frequency(),true);
+    kwl.add(prefix, "slant_range_to_1st_data_sample", signalData->get_slant_range_to_1st_data_sample(),true);
+    // FIXME debug
+    std::cout << std::endl << "pulse_repetition_frequency = " << signalData->get_pulse_repetition_frequency() << std::endl;
+    std::cout << std::endl << "slant_range_to_1st_data_sample = " << signalData->get_slant_range_to_1st_data_sample() << std::endl;
+  }
+  else
+  {
+    result = false;
+  }
+
+
   return result;
 }
 
@@ -149,4 +184,9 @@ const AlosSarDataFileDescriptor * AlosSarData::get_AlosSarDataFileDescriptor() c
   return dynamic_cast<const AlosSarDataFileDescriptor*>(_records.find(AlosSarDataFileDescriptorID)->second);
 }
 
+const AlosSarSignalData * AlosSarData::get_AlosSarSignalData() const
+{
+  return dynamic_cast<const AlosSarSignalData*>(_records.find(AlosSarSignalDataID)->second);
+}
+
 }
diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.h b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.h
index ac045c740c6775767afb477fd90802a4775dfd9f..5ae319c6140ad0858e50fae61f36077d8a2f3227 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.h
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.h
@@ -15,6 +15,7 @@
 
 #include <iostream>
 #include "AlosSarDataFileDescriptor.h"
+#include "AlosSarSignalData.h"
 #include <map>
 
 class ossimKeywordlist;
@@ -82,6 +83,7 @@ public:
 
 
   const AlosSarDataFileDescriptor * get_AlosSarDataFileDescriptor() const;
+  const AlosSarSignalData * get_AlosSarSignalData() const;
 
 protected:
   typedef std::map<int, AlosSarRecord*> RecordType;
@@ -89,6 +91,7 @@ protected:
 
 
   static const int AlosSarDataFileDescriptorID;
+  static const int AlosSarSignalDataID;
 private:
 
 };
diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarRecordHeader.cpp b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarRecordHeader.cpp
index c71a8c6c6b230bee2f330d2dee5105a35ed25254..74113366bf9e7758101accdd4d2af05acff17ff1 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarRecordHeader.cpp
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarRecordHeader.cpp
@@ -37,7 +37,7 @@ std::ostream& operator<<(std::ostream& os, const AlosSarRecordHeader& data)
 
 std::istream& operator>>(std::istream& is, AlosSarRecordHeader& data)
 {
-  is.read((char*)&(data._rec_seq),4);
+  is.read((char*)&(data._rec_seq),4); // TODO Change dangerous C-style cast to static cast.
   data.SwitchEndian(data._rec_seq);
   is.read((char*)&(data._rec_sub1),1);
   is.read((char*)&(data._rec_type),1);
diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarSignalData.cpp b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarSignalData.cpp
index ac0cc6a86ec037f61d05d25dd9ae25a856b5d707..2b7b5666025be30cd9fd2850b166e837a3b36693 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarSignalData.cpp
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarSignalData.cpp
@@ -11,6 +11,8 @@
 // $Id$
 
 #include <AlosSarSignalData.h>
+#include <ossim/base/ossimConstants.h>
+#include <ossim/base/ossimEndian.h>
 
 
 namespace ossimplugins
@@ -34,64 +36,106 @@ std::ostream& operator<<(std::ostream& os, const AlosSarSignalData& data)
 
 std::istream& operator>>(std::istream& is, AlosSarSignalData& data)
 {
-  int tmpint;
+  ossim_uint16 tmpuint16;
+  ossim_uint32 tmpuint32;
+  ossimEndian oe;
 
-  char buf4[5];
-  buf4[4] = '\0';
+  std::cout << std::endl << "File pointer location = " << is.tellg() << std::endl;
+  std::cout << std::endl;
 
-  is.read(buf4,4);
-  tmpint = buf4;
-  std::cout << 'Line number = ' << tmpint;
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Data line number = " << tmpuint32 << std::endl;
 
-  is.read(buf4,4);
-  tmpint = buf4;
-  std::cout << 'SAR image data record index = ' << tmpint;
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Data record index = " << tmpuint32 << std::endl;
 
-// TODO Complete modification below
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Actual count of left-fill pixels = " << tmpuint32 << std::endl;
 
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Actual count of data pixels = " << tmpuint32 << std::endl;
 
-  char buf6[7];
-  buf6[6] = '\0';
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Actual count of right-fill pixels = " << tmpuint32 << std::endl;
 
-  char buf168[169];
-  buf168[168] = '\0';
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Sensor parameters update flag = " << tmpuint32 << std::endl;
 
-  char buf94[95];
-  buf94[94] = '\0';
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Scene start year = " << tmpuint32 << std::endl;
 
-  char buf8[9];
-  buf8[8] = '\0';
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Scene start day of year = " << tmpuint32 << std::endl;
 
-  is.read(buf168,168);
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Sensor acquisition milliseconds of day = " << tmpuint32 << std::endl;
 
-  is.read(buf6,6);
-  data._num_lines = atoi(buf6);
+  is.read(reinterpret_cast<char*>(&tmpuint16), 2);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint16);}
+  std::cout << "SAR channel indicator = " << tmpuint16 << std::endl;
 
-  is.read(buf94,94);
+  is.read(reinterpret_cast<char*>(&tmpuint16), 2);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint16);}
+  std::cout << "SAR channel code = " << tmpuint16 << std::endl;
 
-  int tmpval;
-  is.read(buf8,8);
-  tmpval = atoi(buf8);
-  data._num_pix_in_line = tmpval/8; // Assume data always in 8-byte complex format
+  is.read(reinterpret_cast<char*>(&tmpuint16), 2);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint16);}
+  std::cout << "Transmitted polarization = " << tmpuint16 << std::endl;
 
-  char buf432[433];
-  buf432[432] = '\0';
+  is.read(reinterpret_cast<char*>(&tmpuint16), 2);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint16);}
+  std::cout << "Received polarization = " << tmpuint16 << std::endl;
+
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "PRF (mHz) = " << tmpuint32 << std::endl;
+  data._pulse_repetition_frequency = static_cast<int>(tmpuint32);
+
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Scan ID for SCAN SAR mode = " << tmpuint32 << std::endl;
+
+  is.read(reinterpret_cast<char*>(&tmpuint16), 2);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint16);}
+  std::cout << "Onboard range compressed flag = " << tmpuint16 << std::endl;
+
+  is.seekg(50, std::ios_base::cur);
+
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Slant range to 1st data sample (m) = " << tmpuint32 << std::endl;
+  data._slant_range_to_1st_data_sample = static_cast<int>(tmpuint32);
+
+  is.read(reinterpret_cast<char*>(&tmpuint32), 4);
+  if (oe.getSystemEndianType() == OSSIM_LITTLE_ENDIAN)  {oe.swap(tmpuint32);}
+  std::cout << "Data record window position = " << tmpuint32 << std::endl;
+
+  std::cout << std::endl << "File pointer location = " << is.tellg() << std::endl;
+  std::cout << std::endl;
 
-  is.read(buf432,432);
   return is;
 }
 
 AlosSarSignalData::AlosSarSignalData(const AlosSarSignalData& rhs):
   AlosSarRecord(rhs),
-  _num_lines(rhs._num_lines),
-  _num_pix_in_line(rhs._num_pix_in_line)
+  _pulse_repetition_frequency(rhs._pulse_repetition_frequency),
+  _slant_range_to_1st_data_sample(rhs._slant_range_to_1st_data_sample)
 {
 }
 
 AlosSarSignalData& AlosSarSignalData::operator=(const AlosSarSignalData& rhs)
 {
-  _num_lines = rhs._num_lines;
-  _num_pix_in_line = rhs._num_pix_in_line;
+  _pulse_repetition_frequency = rhs._pulse_repetition_frequency;
+  _slant_range_to_1st_data_sample = rhs._slant_range_to_1st_data_sample;
   return *this;
 }
 }
diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarSignalData.h b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarSignalData.h
index 7650429be704449390fb5e16ad1c108c12269d34..e9aeeffa6ebd834120d3ff9fef7d6d419e8b7b4c 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarSignalData.h
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarSignalData.h
@@ -91,17 +91,28 @@ public:
   };
 
 
-  int slant_range_to_1st_data_sample() const
+  int get_pulse_repetition_frequency() const
+  {
+    return _pulse_repetition_frequency;
+  };
+
+  int get_slant_range_to_1st_data_sample() const
   {
     return _slant_range_to_1st_data_sample;
   };
 
 
 protected:
+
+  /**
+  * @brief pulse_repetition_frequency
+  */
+  int _pulse_repetition_frequency;
+
   /**
   * @brief slant_range_to_1st_data_sample
   */
-  int   _slant_range_to_1st_data_sample;
+  int _slant_range_to_1st_data_sample;
 
 private:
 };