diff --git a/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h b/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h
index a7be55846dcd7d74afdd9e3909c8dd08fb1718b2..2f7a6ebdecfdff2e4a1c593b604c016f4ef9ffe0 100644
--- a/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h
+++ b/Utilities/otbossim/include/ossim/projection/ossimQuickbirdRpcModel.h
@@ -61,7 +61,6 @@ protected:
 */
    ossimQuickbirdMetaData* theSupportData;
 
-
 TYPE_DATA
 };
 
diff --git a/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h b/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h
index b79c705c8f6fa0d677d23f8ead05b7ff19a38dcf..98dbe0aecb3fb122dcdab4f1baef2aaa4d7f2527 100755
--- a/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h
+++ b/Utilities/otbossim/include/ossim/support_data/ossimQuickbirdMetaData.h
@@ -114,6 +114,7 @@ private:
    ossimString   theTLCDate;
    ossim_float64 theSunAzimuth;
    ossim_float64 theSunElevation;
+   std::vector<ossim_float64> theAbsCalFactors;
    /*ossim_uint32  theNumBands;*/
    /*ossimString   theBandName;*/
   /*ossim_uint32  theNumBands;*/
diff --git a/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp b/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp
index 5fecfd9394f5ff5132cc995a5c3f11e32ee55cf7..d816078fc39075d64e9c7057015830cbffa29f85 100755
--- a/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp
+++ b/Utilities/otbossim/src/ossim/support_data/ossimQuickbirdMetaData.cpp
@@ -37,6 +37,7 @@ ossimQuickbirdMetaData::ossimQuickbirdMetaData()
   theSunAzimuth(0.0),
   theSunElevation(0.0)
 {
+  theAbsCalFactors.clear();
 }
 
 ossimQuickbirdMetaData::~ossimQuickbirdMetaData()
@@ -75,8 +76,9 @@ void ossimQuickbirdMetaData::clearFields()
   theBandId = "Unknown";
   theSatID = "Unknown";
   theTLCDate = "Unknown",
-    theSunAzimuth = 0.0;
+  theSunAzimuth = 0.0;
   theSunElevation = 0.0;
+  theAbsCalFactors.clear();
 }
 
 std::ostream& ossimQuickbirdMetaData::print(std::ostream& out) const
@@ -90,7 +92,13 @@ std::ostream& ossimQuickbirdMetaData::print(std::ostream& out) const
       << "\n  TLC date:   " << theTLCDate
       << "\n  Sun Azimuth:    " << theSunAzimuth
       << "\n  Sun Elevation:   " << theSunElevation
-      << "\n"
+      << "\n  abs Calibration Factors:   " 
+      << std::endl;
+      for(unsigned int i=0; i<theAbsCalFactors.size(); i++)
+      {
+      	out<<theAbsCalFactors[i] << "   ";
+      }
+      out<< "\n"
       << "\n---------------------------------------------------------"
       << "\n  " << std::endl;
   return out;
@@ -135,7 +143,12 @@ bool ossimQuickbirdMetaData::saveState(ossimKeywordlist& kwl,
           ossimKeywordNames::ELEVATION_ANGLE_KW,
           theSunElevation,
           true);
-
+//******************************************************
+//  kwl.add(prefix,
+//          "absCalFactors",
+//          theAbsCalFactors,
+//          true);
+//******************************************************
 
   return true;
 }
@@ -246,6 +259,7 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file)
   //---
   // Generation time:
   //---
+  
   if(getEndOfLine( strptr, ossimString("\ngenerationTime ="), "%17c %s", temp))
     theGenerationDate = ossimString(temp).before(";");
   else
@@ -281,7 +295,67 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file)
 	}
     }
 
-
+  //---
+  // absCalFactors:
+  //---
+  //--- Multispectral
+  std::cout<<theBandId<<std::endl;
+  if(theBandId=="Multi")
+    {
+      std::vector<ossimString> bandList(4, "B");
+      bandList[1] = "G";
+      bandList[2] = "R";
+      bandList[3] = "N";
+      for(unsigned int j=0; j<bandList.size(); j++)
+      {
+      	ossimString begin_group = "\nBEGIN_GROUP = BAND_" + bandList[j];
+  	  	if(getEndOfLine( strptr, ossimString(begin_group), "%20c %s", temp))
+      		{
+      		    ossimString bandCur = ossimString(temp).before("\n");
+      			std::cout<<bandCur<<bandList[j]<<"--"<<std::endl;
+
+      			bool fine=false;
+      	  		if(bandList[j] == bandCur)
+	  			{
+	  				std::cout<<bandCur<<"--"<<bandList[j]<<"--"<<std::endl;
+	  		    	if(getEndOfLine( strptr, ossimString("\n\tabsCalFactor = "), "%17c %s", temp))
+      				{
+      					//std::cout<<strptr<<std::endl;
+      					//std::cout<<"==================================="<<std::endl;
+      					std::cout<<ossimString(temp).before(";").toFloat64()<<std::endl;
+      					fine = true;
+      				}
+	  			}
+	  		    if(fine==false && traceDebug())
+	    		{	  				
+	    			std::cout<<"exceptionnnnnn"<<std::endl;
+		  			ossimNotify(ossimNotifyLevel_FATAL)
+	    	 				<< "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): "
+	    	 				<< "\n\tAborting construction. Error encountered parsing "
+	    	 				<< "presumed meta-data file." << std::endl;
+		  		  	delete [] filebuf;
+  		  			return false;
+     			}
+ 	      }
+  	  	else
+      	{
+        	if(traceDebug())
+	    	{
+		  		ossimNotify(ossimNotifyLevel_FATAL)
+	    	  		<< "FATAL ossimQuickbirdRpcModel::parseMetaData(data_file): "
+	    	  		<< "\n\tAborting construction. Error encountered parsing "
+	    	  		<< "presumed meta-data file." << std::endl;
+
+	  		  	delete [] filebuf;
+	  		  	return false;
+	     	}
+     	}
+     }
+     }
+  //--- Panchromatic
+  else
+    {
+    }
   //---
   // SatID:
   //---
@@ -320,7 +394,7 @@ bool ossimQuickbirdMetaData::parseMetaData(const ossimFilename& data_file)
 	  return false;
 	}
     }
-
+//std::cout<<strptr<<std::endl;
 
   //***
   // Sun Azimuth:
@@ -424,17 +498,27 @@ bool ossimQuickbirdMetaData::parseATTData(const ossimFilename& data_file)
 //*****************************************************************************
 bool ossimQuickbirdMetaData::getEndOfLine( char * fileBuf, ossimString lineBeginning, char * format, ossimString & name)
   {
-     char * res = strstr(fileBuf, lineBeginning.c_str());
-     if (!res)
-     {
-       return false;
-      }
-    // if the lineBeginning is found, update the start pointer adress
-    fileBuf = res;
-
+     //char * res = strstr(fileBuf, lineBeginning.c_str());
+     //if (!res)
+     //{
+     //  return false;
+     // }
+    //// if the lineBeginning is found, update the start pointer adress
+    //fileBuf = res;
+        
+    //char dummy[80], nameChar[80];
+    //sscanf(res, format, dummy, nameChar);    
+    //name = ossimString(nameChar);
+    
+    char * res = strstr(fileBuf, lineBeginning.c_str());
+    if(!res)
+    {
+    	return false;
+    }
+    fileBuf = strstr(fileBuf, lineBeginning.c_str());
     char dummy[80], nameChar[80];
-    sscanf(res, format, dummy, nameChar);
+    sscanf(fileBuf, format, dummy, nameChar);  
     name = ossimString(nameChar);
-
+    
     return true;
   }