diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.cpp b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.cpp
index 6ef51ec92d802cd615635fc9a8dd261066a563f2..63f122b307e09142e21ba36291adf03206b731d8 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.cpp
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.cpp
@@ -137,9 +137,9 @@ bool AlosSarData::saveState(ossimKeywordlist& kwl,
    * Adding metadata necessary to the sensor model in the keywordlist
    */
   const AlosSarDataFileDescriptor *datafiledesc = get_AlosSarDataFileDescriptor();
-  if (leaderfiledesc != NULL)
+  if (datafiledesc != NULL)
   {
-    kwl.add(prefix, "num_lines",datafiledesc->get_num_lines(),true);
+    kwl.add(prefix, "num_lines", datafiledesc->get_num_lines(),true);
     kwl.add(prefix, "num_pix_in_line", datafiledesc->get_num_pix_in_line(),true);
   }
   else
@@ -151,9 +151,9 @@ bool AlosSarData::saveState(ossimKeywordlist& kwl,
 }
 
 
-const AlosSarFileDescriptor * AlosSarData::get_AlosSarDataFileDescriptor() const
+const AlosSarDataFileDescriptor * AlosSarData::get_AlosSarDataFileDescriptor() const
 {
-  return dynamic_cast<const AlosSarFileDescriptor*>(_records.find(AlosSarDataFileDescriptorID)->second);
+  return dynamic_cast<const AlosSarDataFileDescriptor*>(_records.find(AlosSarDataFileDescriptorID)->second);
 }
 
 }
diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.h b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.h
index 51ce72179f35d0c719f7b6721eac1bb2eb11038c..ac045c740c6775767afb477fd90802a4775dfd9f 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.h
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarData.h
@@ -14,11 +14,7 @@
 #define AlosSarData_h
 
 #include <iostream>
-#include "AlosSarFileDescriptor.h"
-#include "AlosSarDataSetSummary.h"
-#include "AlosSarMapProjectionData.h"
-#include "AlosSarPlatformPositionData.h"
-#include "AlosSarFacilityData.h"
+#include "AlosSarDataFileDescriptor.h"
 #include <map>
 
 class ossimKeywordlist;
@@ -85,7 +81,7 @@ public:
                          const char* prefix=0) const;
 
 
-  const AlosSarFileDescriptor * get_AlosSarDataFileDescriptor() const;
+  const AlosSarDataFileDescriptor * get_AlosSarDataFileDescriptor() const;
 
 protected:
   typedef std::map<int, AlosSarRecord*> RecordType;
diff --git a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarDataFileDescriptor.h b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarDataFileDescriptor.h
index 84254d7dce8a4f4bdd0066a38ad8269226458ebc..34f7804f58ef511fe8416ca4584cc1f03d79b1c6 100644
--- a/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarDataFileDescriptor.h
+++ b/Utilities/otbossimplugins/ossim/AlosPalsar/AlosSarDataFileDescriptor.h
@@ -91,12 +91,12 @@ public:
   };
 
 
-  int get_num_pix_in_line()
+  int get_num_pix_in_line() const
   {
     return _num_pix_in_line;
   };
 
-  int get_num_lines()
+  int get_num_lines() const
   {
     return _num_lines;
   };
diff --git a/Utilities/otbossimplugins/ossim/ossimAlosPalsarModel.cpp b/Utilities/otbossimplugins/ossim/ossimAlosPalsarModel.cpp
index 4583ce93918b57727088d786427086799489a0d2..9fa65b89737378e5a98718bd08469ad122268570 100644
--- a/Utilities/otbossimplugins/ossim/ossimAlosPalsarModel.cpp
+++ b/Utilities/otbossimplugins/ossim/ossimAlosPalsarModel.cpp
@@ -147,6 +147,7 @@ bool ossimAlosPalsarModel::open(const ossimFilename& file)
 
   bool result = false;
   ossimFilename leaFilename = file;
+  ossimFilename datFilename;
 
  /*
   * Creation of the class allowing to store Leader file metadata
@@ -158,6 +159,7 @@ bool ossimAlosPalsarModel::open(const ossimFilename& file)
   }
 
   theAlosSarLeader = new AlosSarLeader();
+  theAlosSarData = new AlosSarData();
 
   if ( leaFilename.exists() )
   {
@@ -190,6 +192,31 @@ bool ossimAlosPalsarModel::open(const ossimFilename& file)
         << "End reading Leader file" << std::endl;
       }
 
+      datFilename = findAlosPalsarData(leaFilename);
+      result = isAlosPalsarData(datFilename);
+      if (result == true)
+      {
+        if (traceDebug())
+        {
+          ossimNotify(ossimNotifyLevel_DEBUG)
+            << datFilename << " is AlosPalsar data file..."
+            << std::endl
+            << "Begin reading Data file header" << std::endl;
+        }
+        /*
+         * Read header of data file for image size info
+         */
+        std::ifstream dataFile(datFilename, ios::in|ios::binary);
+        dataFile>>*theAlosSarData;
+        dataFile.close();
+
+        if (traceDebug())
+        {
+          ossimNotify(ossimNotifyLevel_DEBUG)
+          << "End reading Data file header" << std::endl;
+        }
+      } // matches: if ( result=isAlosPalsarData(datFilename) == true )
+
       //To initialize the whole state, reusing saveState/loadState
       //FIXME: This could be at the superclass level instead
       ossimKeywordlist kwl;
@@ -209,8 +236,6 @@ bool ossimAlosPalsarModel::open(const ossimFilename& file)
        << std::endl;
   }
 
-
-
   return result;
 
 }
@@ -240,6 +265,16 @@ bool ossimAlosPalsarModel::saveState(ossimKeywordlist& kwl,
 
   result = theAlosSarLeader->saveState(kwl);
 
+  if (result == true)
+  {
+    if (theAlosSarData == NULL)
+    {
+      std::cout << "Error: AlosSarData is NULL" << std::endl;
+      return false;
+    }
+    result = theAlosSarData->saveState(kwl);
+  }
+
   if (traceDebug())
   {
     ossimNotify(ossimNotifyLevel_DEBUG)
@@ -628,7 +663,6 @@ bool ossimAlosPalsarModel::InitSRGR(const ossimKeywordlist &kwl, const char *pre
   return true;
 }
 
-//TODO adapt the identification of the AlosPalsarLeader
 bool ossimAlosPalsarModel::isAlosPalsarLeader(const ossimFilename& file) const
 {
     std::ifstream candidate(file, ios::in | ios::binary);
@@ -663,7 +697,6 @@ bool ossimAlosPalsarModel::isAlosPalsarLeader(const ossimFilename& file) const
 
 }
 
-//TODO adapt the search of the AlosPalsarLeader
 ossimFilename ossimAlosPalsarModel::findAlosPalsarLeader(const ossimFilename& file) const
 {
   ossimFilename leaFile = file;
@@ -695,12 +728,65 @@ ossimFilename ossimAlosPalsarModel::findAlosPalsarLeader(const ossimFilename& fi
 
 bool ossimAlosPalsarModel::isAlosPalsarData(const ossimFilename& file) const
 {
-  //FIXME
+  std::ifstream candidate(file, ios::in | ios::binary);
+  char alosFileName[16];
+
+  candidate.seekg(48);
+  if ( candidate.bad() or candidate.eof() )
+  {
+    return false;
+  }
+  candidate.read(alosFileName, 16);
+  if ( candidate.bad() or candidate.eof() )
+  {
+    return false;
+  }
+  candidate.close();
+
+  ossimString ersString(alosFileName);
+
+  if ( ( ersString.find("AL1 ") == 0 ) &&
+       ( ersString.find("PSR") == 4 )  &&
+       ( ersString.find("IMOP") == 8 )    )
+    {
+    return true;
+  }
+  else
+  {
+    return false;
+  }
+
+ return true;
 }
 
 ossimFilename ossimAlosPalsarModel::findAlosPalsarData(const ossimFilename& file) const
 {
   //FIXME
+  ossimFilename dataFile = file;
+  ossimString imgPrefix("IMG-HH"); // Assume the ALOS data always has at least the HH
+  ossimString trlPrefix("TRL");
+  ossimString volPrefix("VOL");
+  ossimString leaPrefix("LED");
+
+  ossimString filename = file.fileNoExtension();
+  ossimString prefix = filename.substr(0,3);
+  if ( (prefix == leaPrefix) ||
+       (prefix == trlPrefix) ||
+       (prefix == volPrefix)    )
+  {
+    // Find the 2nd dash from the end of the string
+    // since ALOS files are of the form
+    // <prefix>-ALPSRP<identifier>-H<n.n>__A
+    int dash2_pos = filename.rfind('-', filename.rfind('-')-1);
+    filename.replace(0, dash2_pos, imgPrefix);
+
+    dataFile.setFile(filename);
+    if (dataFile.exists())
+    {
+      return dataFile;
+    }
+  }
+  return file;
 }
 
 } // namespace ossimplugins