diff --git a/Code/UtilitiesAdapters/OssimAdapters/otbQuickBirdImageMetadataInterface.cxx b/Code/UtilitiesAdapters/OssimAdapters/otbQuickBirdImageMetadataInterface.cxx
index 7c4c54f86e3dcdd92c14d6e71aece9feb6c2f5fb..1701a8f8f8d747e2ac7173f57e74cc4de9f0e506 100644
--- a/Code/UtilitiesAdapters/OssimAdapters/otbQuickBirdImageMetadataInterface.cxx
+++ b/Code/UtilitiesAdapters/OssimAdapters/otbQuickBirdImageMetadataInterface.cxx
@@ -18,10 +18,10 @@
 
 #include "otbQuickBirdImageMetadataInterface.h"
 
+#include <boost/algorithm/string.hpp>
 #include "otbMacro.h"
 #include "itkMetaDataObject.h"
 #include "otbImageKeywordlist.h"
-#include "base/ossimKeywordlist.h"
 
 namespace otb
 {
@@ -56,17 +56,16 @@ QuickBirdImageMetadataInterface::GetSolarIrradiance() const
     }
 
   VariableLengthVectorType outputValuesVariableLengthVector;
-  ossimKeywordlist         kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
 
-  std::string keyBId = "support_data.band_id";
-  ossimString keywordStringBId = kwl.find(keyBId.c_str());
-  if (keywordStringBId == ossimString("P"))
+  std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id");
+  std::string panchro("P");
+  std::string multi("Multi");
+  if (keywordStringBId == panchro)
     {
     outputValuesVariableLengthVector.SetSize(1);
     outputValuesVariableLengthVector.Fill(1381.79);
     }
-  else if (keywordStringBId == ossimString("Multi"))
+  else if (keywordStringBId == multi)
     {
     outputValuesVariableLengthVector.SetSize(4);
     outputValuesVariableLengthVector[0] = 1924.59;
@@ -98,22 +97,21 @@ QuickBirdImageMetadataInterface::GetDay() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-
-  std::string key;
-  ossimString separatorList;
-  key = "support_data.tlc_date";
-  separatorList = "-T";
+  std::string key("support_data.tlc_date");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  ossimString              keywordString = kwl.find(key.c_str());
-  std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  std::vector<std::string> outputValues;
 
-  if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Day");
+  boost::split(outputValues, valueString, boost::is_any_of(" T:-"));
 
-  ossimString day = keywordStrings[2];
+  if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Day");
 
-  return day.toInt();
+  int value = atoi(outputValues[2].c_str());
+  return value;
 }
 
 int
@@ -132,22 +130,21 @@ QuickBirdImageMetadataInterface::GetMonth() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-
-  std::string key;
-  ossimString separatorList;
-  key = "support_data.tlc_date";
-  separatorList = "-T";
+  std::string key("support_data.tlc_date");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  ossimString              keywordString = kwl.find(key.c_str());
-  std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  std::vector<std::string> outputValues;
 
-  if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Month");
+  boost::split(outputValues, valueString, boost::is_any_of(" T:-"));
 
-  ossimString month = keywordStrings[1];
+  if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Month");
 
-  return month.toInt();
+  int value = atoi(outputValues[1].c_str());
+  return value;
 }
 
 int
@@ -166,22 +163,21 @@ QuickBirdImageMetadataInterface::GetYear() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-
-  std::string key;
-  ossimString separatorList;
-  key = "support_data.tlc_date";
-  separatorList = "-T";
+  std::string key("support_data.tlc_date");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  ossimString              keywordString = kwl.find(key.c_str());
-  std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  std::vector<std::string> outputValues;
 
-  if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Year");
+  boost::split(outputValues, valueString, boost::is_any_of(" T:-"));
 
-  ossimString year = keywordStrings[0];
+  if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Year");
 
-  return year.toInt();
+  int value = atoi(outputValues[0].c_str());
+  return value;
 }
 
 int
@@ -200,22 +196,21 @@ QuickBirdImageMetadataInterface::GetHour() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-
-  std::string key;
-  ossimString separatorList;
-  key = "support_data.tlc_date";
-  separatorList = "-T:";
+  std::string key("support_data.tlc_date");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  ossimString              keywordString = kwl.find(key.c_str());
-  std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  std::vector<std::string> outputValues;
 
-  if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Hour");
+  boost::split(outputValues, valueString, boost::is_any_of(" T:-"));
 
-  ossimString hour = keywordStrings[3];
+  if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Hour");
 
-  return hour.toInt();
+  int value = atoi(outputValues[3].c_str());
+  return value;
 }
 
 int
@@ -234,22 +229,21 @@ QuickBirdImageMetadataInterface::GetMinute() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-
-  std::string key;
-  ossimString separatorList;
-  key = "support_data.tlc_date";
-  separatorList = "-T:";
-  ossimString keywordString = kwl.find(key.c_str());
+  std::string key("support_data.tlc_date");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  std::vector<std::string> outputValues;
 
-  if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Minute");
+  boost::split(outputValues, valueString, boost::is_any_of(" T:-"));
 
-  ossimString minute = keywordStrings[4];
+  if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Minute");
 
-  return minute.toInt();
+  int value = atoi(outputValues[4].c_str());
+  return value;
 }
 
 int
@@ -268,22 +262,21 @@ QuickBirdImageMetadataInterface::GetProductionDay() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-
-  std::string key;
-  ossimString separatorList;
-  key = "support_data.generation_date";
-  separatorList = "-T";
+  std::string key("support_data.generation_date");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  ossimString              keywordString = kwl.find(key.c_str());
-  std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  std::vector<std::string> outputValues;
 
-  if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Day");
+  boost::split(outputValues, valueString, boost::is_any_of(" T:-"));
 
-  ossimString day = keywordStrings[2];
+  if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Day");
 
-  return day.toInt();
+  int value = atoi(outputValues[2].c_str());
+  return value;
 }
 
 int
@@ -302,22 +295,21 @@ QuickBirdImageMetadataInterface::GetProductionMonth() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-
-  std::string key;
-  ossimString separatorList;
-  key = "support_data.generation_date";
-  separatorList = "-T";
+  std::string key("support_data.generation_date");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  ossimString              keywordString = kwl.find(key.c_str());
-  std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  std::vector<std::string> outputValues;
 
-  if (keywordStrings.size() <= 2) itkExceptionMacro(<< "Invalid Month");
+  boost::split(outputValues, valueString, boost::is_any_of(" T:-"));
 
-  ossimString month = keywordStrings[1];
+  if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Month");
 
-  return month.toInt();
+  int value = atoi(outputValues[1].c_str());
+  return value;
 }
 
 int
@@ -336,22 +328,21 @@ QuickBirdImageMetadataInterface::GetProductionYear() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-
-  std::string key;
-  ossimString separatorList;
-  key = "support_data.generation_date";
-  separatorList = "-T";
+  std::string key("support_data.generation_date");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  ossimString              keywordString = kwl.find(key.c_str());
-  std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  std::vector<std::string> outputValues;
 
-  if (keywordStrings.size() <= 2) itkExceptionMacro("Invalid Year");
+  boost::split(outputValues, valueString, boost::is_any_of(" T:-"));
 
-  ossimString year = keywordStrings[0];
+  if (outputValues.size() <= 2) itkExceptionMacro(<< "Invalid Year");
 
-  return year.toInt();
+  int value = atoi(outputValues[0].c_str());
+  return value;
 }
 
 QuickBirdImageMetadataInterface::VariableLengthVectorType
@@ -364,24 +355,23 @@ QuickBirdImageMetadataInterface
     itkExceptionMacro(<< "Invalid Metadata, no QuickBird Image");
     }
 
-  ImageKeywordlistType ImageKeywordlist;
+  ImageKeywordlistType imageKeywordlist;
 
   if (dict.HasKey(MetaDataKey::OSSIMKeywordlistKey))
     {
-    itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, ImageKeywordlist);
+    itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
-  ossimKeywordlist kwl;
-  ImageKeywordlist.convertToOSSIMKeywordlist(kwl);
 
   VariableLengthVectorType outputValuesVariableLengthVector;
-  std::string              keyBId = "support_data.band_id";
-  ossimString              keywordStringBId = kwl.find(keyBId.c_str());
-  if (keywordStringBId == ossimString("P"))
+  std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id");
+  std::string panchro("P");
+  std::string multi("Multi");
+  if (keywordStringBId == panchro)
     {
     outputValuesVariableLengthVector.SetSize(1);
     outputValuesVariableLengthVector.Fill(0.0);
     }
-  else if (keywordStringBId == ossimString("Multi"))
+  else if (keywordStringBId == multi)
     {
     outputValuesVariableLengthVector.SetSize(4);
     outputValuesVariableLengthVector.Fill(0.0);
@@ -404,25 +394,12 @@ QuickBirdImageMetadataInterface
     itkExceptionMacro(<< "Invalid Metadata, no QuickBird Image");
     }
 
-  ImageKeywordlistType ImageKeywordlist;
+  ImageKeywordlistType imageKeywordlist;
 
   if (dict.HasKey(MetaDataKey::OSSIMKeywordlistKey))
     {
-    itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, ImageKeywordlist);
+    itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
-  ossimKeywordlist kwl;
-  ImageKeywordlist.convertToOSSIMKeywordlist(kwl);
-  //   std::string key= "support_data.generation_date";
-  //   ossimString keywordString = kwl.find(key.c_str());
-  //   std::string output(keywordString.chars());
-
-  //   //The Ikonos production date has the format MM/DD/YY
-  //   ossimString separatorList = "-";
-  //   std::vector<ossimString> keywordStrings = keywordString.split(separatorList);
-  //   if (keywordStrings.size() < 3)
-  //   {
-  //     itkGenericExceptionMacro(<<"Could not retrieve the production date for Ikonos");
-  //   }
 
   int  productionYear = this->GetProductionYear(); //keywordStrings[0].toInt();
   int  productionMonth = this->GetProductionMonth(); //keywordStrings[1].toInt();
@@ -441,30 +418,31 @@ QuickBirdImageMetadataInterface
 
   //Value computed from
   // Radiance Conversion of QuickBird Data - Technical Note.
-  ossimString keywordStringBitsPerPixel = kwl.find("support_data.bits_per_pixel");
-  int         bitsPerPixel = keywordStringBitsPerPixel.toInt();
+  std::string keywordStringBitsPerPixel = imageKeywordlist.GetMetadataByKey("support_data.bits_per_pixel");
+  int         bitsPerPixel = atoi(keywordStringBitsPerPixel.c_str());
   if (bitsPerPixel != 16 && bitsPerPixel != 8)
     {
     itkExceptionMacro(<< "Invalid bitsPerPixel " << bitsPerPixel);
     }
 
-  std::string keyBId = "support_data.band_id";
-  ossimString keywordStringBId = kwl.find(keyBId.c_str());
-  if (keywordStringBId != ossimString("P") && keywordStringBId != ossimString("Multi"))
+  std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id");
+  std::string panchro("P");
+  std::string multi("Multi");
+  if (keywordStringBId != panchro && keywordStringBId != multi)
     {
     itkExceptionMacro(<< "Invalid bandID " << keywordStringBId);
     }
 
-  ossimString keywordStringTDILevel = kwl.find("support_data.TDI_level");
-  int         TDILevel = keywordStringTDILevel.toInt();
-  if (keywordStringBId == ossimString("P") && TDILevel != 10 && TDILevel != 13 && TDILevel != 18 && TDILevel != 24 &&
+  std::string keywordStringTDILevel = imageKeywordlist.GetMetadataByKey("support_data.TDI_level");
+  int         TDILevel = atoi(keywordStringTDILevel.c_str());
+  if (keywordStringBId == panchro && TDILevel != 10 && TDILevel != 13 && TDILevel != 18 && TDILevel != 24 &&
       TDILevel != 32)
     {
     itkExceptionMacro(<< "Invalid TDILevel " << TDILevel);
     }
 
   VariableLengthVectorType outputValuesVariableLengthVector;
-  if (keywordStringBId == ossimString("P")) outputValuesVariableLengthVector.SetSize(1);
+  if (keywordStringBId == panchro) outputValuesVariableLengthVector.SetSize(1);
   else outputValuesVariableLengthVector.SetSize(4);
   outputValuesVariableLengthVector.Fill(1.);
 
@@ -472,7 +450,7 @@ QuickBirdImageMetadataInterface
     {
     if (bitsPerPixel == 16)
       {
-      if (keywordStringBId == ossimString("P"))
+      if (keywordStringBId == panchro)
         {
         if (TDILevel != 10) outputValuesVariableLengthVector[0] = 0.08381880;
         else if (TDILevel != 13) outputValuesVariableLengthVector[0] = 0.06447600;
@@ -491,7 +469,7 @@ QuickBirdImageMetadataInterface
       }
     else
       {
-      if (keywordStringBId == ossimString("P"))
+      if (keywordStringBId == panchro)
         {
         if (TDILevel != 10) outputValuesVariableLengthVector[0] = 1.02681367;
         else if (TDILevel != 13) outputValuesVariableLengthVector[0] = 1.02848939;
@@ -499,44 +477,56 @@ QuickBirdImageMetadataInterface
         else if (TDILevel != 24) outputValuesVariableLengthVector[0] = 1.02989685;
         else if (TDILevel != 32) outputValuesVariableLengthVector[0] = 1.02739898;
 
-        ossimString keywordStringAbsCalFactor = kwl.find("support_data.absCalFactor");
-        outputValuesVariableLengthVector[0] *= keywordStringAbsCalFactor.toDouble();
+        std::string keywordStringAbsCalFactor = imageKeywordlist.GetMetadataByKey("support_data.absCalFactor");
+        double absCalFactor = atof(keywordStringAbsCalFactor.c_str());
+        outputValuesVariableLengthVector[0] *= absCalFactor;
         }
       else
         {
-        ossimString keywordStringAcalFact = kwl.find("support_data.B_band_absCalFactor");
-        outputValuesVariableLengthVector[0] = 1.12097834 * keywordStringAcalFact.toDouble();
-        keywordStringAcalFact = kwl.find("support_data.G_band_absCalFactor");
-        outputValuesVariableLengthVector[1] = 1.37652632 * keywordStringAcalFact.toDouble();
-        keywordStringAcalFact = kwl.find("support_data.R_band_absCalFactor");
-        outputValuesVariableLengthVector[2] = 1.30954587 * keywordStringAcalFact.toDouble();
-        keywordStringAcalFact = kwl.find("support_data.N_band_absCalFactor");
-        outputValuesVariableLengthVector[3] = 0.98368622 * keywordStringAcalFact.toDouble();
+        std::string keywordStringBCalFactor = imageKeywordlist.GetMetadataByKey("support_data.B_band_absCalFactor");
+        double bCalFactor = atof(keywordStringBCalFactor.c_str());
+        std::string keywordStringGCalFactor = imageKeywordlist.GetMetadataByKey("support_data.G_band_absCalFactor");
+        double gCalFactor = atof(keywordStringGCalFactor.c_str());
+        std::string keywordStringRCalFactor = imageKeywordlist.GetMetadataByKey("support_data.R_band_absCalFactor");
+        double rCalFactor = atof(keywordStringRCalFactor.c_str());
+        std::string keywordStringNCalFactor = imageKeywordlist.GetMetadataByKey("support_data.N_band_absCalFactor");
+        double nCalFactor = atof(keywordStringNCalFactor.c_str());
+
+        outputValuesVariableLengthVector[0] = 1.12097834 * bCalFactor;
+        outputValuesVariableLengthVector[1] = 1.37652632 * gCalFactor;
+        outputValuesVariableLengthVector[2] = 1.30954587 * rCalFactor;
+        outputValuesVariableLengthVector[3] = 0.98368622 * nCalFactor;
         }
       }
 
     }
   else
     {
-    if (keywordStringBId == ossimString("P"))
+    if (keywordStringBId == panchro)
       {
-      ossimString keywordStringAbsCalFactor = kwl.find("support_data.absCalFactor");
-      outputValuesVariableLengthVector[0] = keywordStringAbsCalFactor.toDouble();
+      std::string keywordStringAbsCalFactor = imageKeywordlist.GetMetadataByKey("support_data.absCalFactor");
+      double absCalFactor = atof(keywordStringAbsCalFactor.c_str());
+      outputValuesVariableLengthVector[0] = absCalFactor;
       }
     else
       {
-      ossimString keywordStringAcalFact = kwl.find("support_data.B_band_absCalFactor");
-      outputValuesVariableLengthVector[0] = keywordStringAcalFact.toDouble();
-      keywordStringAcalFact = kwl.find("support_data.G_band_absCalFactor");
-      outputValuesVariableLengthVector[1] = keywordStringAcalFact.toDouble();
-      keywordStringAcalFact = kwl.find("support_data.R_band_absCalFactor");
-      outputValuesVariableLengthVector[2] = keywordStringAcalFact.toDouble();
-      keywordStringAcalFact = kwl.find("support_data.N_band_absCalFactor");
-      outputValuesVariableLengthVector[3] = keywordStringAcalFact.toDouble();
+      std::string keywordStringBCalFactor = imageKeywordlist.GetMetadataByKey("support_data.B_band_absCalFactor");
+      double bCalFactor = atof(keywordStringBCalFactor.c_str());
+      std::string keywordStringGCalFactor = imageKeywordlist.GetMetadataByKey("support_data.G_band_absCalFactor");
+      double gCalFactor = atof(keywordStringGCalFactor.c_str());
+      std::string keywordStringRCalFactor = imageKeywordlist.GetMetadataByKey("support_data.R_band_absCalFactor");
+      double rCalFactor = atof(keywordStringRCalFactor.c_str());
+      std::string keywordStringNCalFactor = imageKeywordlist.GetMetadataByKey("support_data.N_band_absCalFactor");
+      double nCalFactor = atof(keywordStringNCalFactor.c_str());
+
+      outputValuesVariableLengthVector[0] = bCalFactor;
+      outputValuesVariableLengthVector[1] = gCalFactor;
+      outputValuesVariableLengthVector[2] = rCalFactor;
+      outputValuesVariableLengthVector[3] = nCalFactor;
       }
     }
 
-  if (keywordStringBId == ossimString("P"))
+  if (keywordStringBId == panchro)
     {
     outputValuesVariableLengthVector[0] = 0.398 / outputValuesVariableLengthVector[0];
     }
@@ -566,13 +556,15 @@ QuickBirdImageMetadataInterface::GetSatElevation() const
     {
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
+  std::string key("support_data.sat_elevation_angle");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-  std::string key = "support_data.sat_elevation_angle";
-  ossimString keywordString = kwl.find(key.c_str());
-
-  return keywordString.toDouble();
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  double value = atof(valueString.c_str());
+  return value;
 }
 
 double
@@ -591,12 +583,15 @@ QuickBirdImageMetadataInterface::GetSatAzimuth() const
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-  std::string key = "support_data.sat_azimuth_angle";
-  ossimString keywordString = kwl.find(key.c_str());
+  std::string key("support_data.sat_azimuth_angle");
+  if (!imageKeywordlist.HasKey(key))
+    {
+    return -1;
+    }
 
-  return keywordString.toDouble();
+  std::string valueString = imageKeywordlist.GetMetadataByKey(key);
+  double value = atof(valueString.c_str());
+  return value;
 }
 
 QuickBirdImageMetadataInterface::VariableLengthVectorType
@@ -619,18 +614,16 @@ QuickBirdImageMetadataInterface
   VariableLengthVectorType wavel(1);
   wavel.Fill(0.);
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-  std::string key = "support_data.band_id";
-  ossimString keywordStringBId = kwl.find(key.c_str());
-
-  if (keywordStringBId != ossimString("P") && keywordStringBId != ossimString("Multi"))
+  std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id");
+  std::string panchro("P");
+  std::string multi("Multi");
+  if (keywordStringBId != panchro && keywordStringBId != multi)
     {
     itkExceptionMacro(<< "Invalid bandID " << keywordStringBId);
     }
 
   // Panchromatic case
-  if (keywordStringBId == ossimString("P"))
+  if (keywordStringBId == panchro)
     {
     wavel.SetSize(1);
     wavel.Fill(0.450);
@@ -667,18 +660,16 @@ QuickBirdImageMetadataInterface
   VariableLengthVectorType wavel(1);
   wavel.Fill(0.);
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-  std::string key = "support_data.band_id";
-  ossimString keywordStringBId = kwl.find(key.c_str());
-
-  if (keywordStringBId != ossimString("P") && keywordStringBId != ossimString("Multi"))
+  std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id");
+  std::string panchro("P");
+  std::string multi("Multi");
+  if (keywordStringBId != panchro && keywordStringBId != multi)
     {
     itkExceptionMacro(<< "Invalid bandID " << keywordStringBId);
     }
 
   // Panchromatic case
-  if (keywordStringBId == ossimString("P"))
+  if (keywordStringBId == panchro)
     {
     wavel.SetSize(1);
     wavel.Fill(0.900);
@@ -728,18 +719,17 @@ QuickBirdImageMetadataInterface
     itk::ExposeMetaData<ImageKeywordlistType>(dict, MetaDataKey::OSSIMKeywordlistKey, imageKeywordlist);
     }
 
-  ossimKeywordlist kwl;
-  imageKeywordlist.convertToOSSIMKeywordlist(kwl);
-  std::string key = "support_data.band_id";
-  ossimString keywordStringBId = kwl.find(key.c_str());
+  std::string keywordStringBId = imageKeywordlist.GetMetadataByKey("support_data.band_id");
+  std::string panchro("P");
+  std::string multi("Multi");
 
-  if (keywordStringBId != ossimString("P") && keywordStringBId != ossimString("Multi"))
+  if (keywordStringBId != panchro && keywordStringBId != multi)
     {
     itkExceptionMacro(<< "Invalid bandID " << keywordStringBId);
     }
 
   // Panchromatic case
-  if (keywordStringBId == ossimString("P"))
+  if (keywordStringBId == panchro)
     {
     const float b0[321] =
     {