diff --git a/Code/IO/otbMapProjectionWrapper.cxx b/Code/IO/otbMapProjectionWrapper.cxx
index d2675c160571d3798a996c166ae61afe2931c3c0..29e9a63fc38c0877ed8d94b342b46146bab4c5a5 100644
--- a/Code/IO/otbMapProjectionWrapper.cxx
+++ b/Code/IO/otbMapProjectionWrapper.cxx
@@ -17,10 +17,12 @@
 =========================================================================*/
 
 #include "otbMapProjectionWrapper.h"
+
+#include <cassert>
+
 #include "otbMacro.h"
 
 #include "projection/ossimMapProjection.h"
-
 #include "projection/ossimMapProjectionFactory.h"
 #include "projection/ossimMapProjection.h"
 #include "base/ossimGpt.h"
@@ -31,6 +33,8 @@
 #include "base/ossimString.h"
 #include "gdal/ossimOgcWktTranslator.h"
 
+#include "projection/ossimUtmProjection.h"
+
 namespace otb
 {
 
@@ -89,7 +93,14 @@ void MapProjectionWrapper::SetWkt(std::string projectionRefWkt)
 {
   this->m_ProjectionRefWkt = projectionRefWkt;
   reinstanciateProjection = true;
-  this->InstanciateProjection();
+//  this->InstanciateProjection(); Should not be needed...
+  this->Modified();
+}
+
+void MapProjectionWrapper::SetParameter(std::string key, std::string value)
+{
+  m_ParameterStore[key] = value;
+  reinstanciateProjection = true;
   this->Modified();
 }
 
@@ -143,6 +154,7 @@ bool MapProjectionWrapper::InstanciateProjection()
       }
 
     this->reinstanciateProjection = false;
+    this->ApplyParametersToProjection();
     return true;
     }
   return false;
@@ -195,8 +207,41 @@ void MapProjectionWrapper::ForwardTransform(double lon, double lat, double h,
   z = h;
 }
 
+void MapProjectionWrapper::ApplyParametersToProjection()
+{
+  // Start by identifying the projection, that will be necessary for
+  // the casting.
+  std::string projectionName = this->GetMapProjection()->getClassName();
+
+  StoreType::const_iterator it;
+
+  // Apply parameters to Utm
+  if (projectionName.compare("ossimUtmProjection") == 0)
+    {
+    ossimUtmProjection* projection = dynamic_cast<ossimUtmProjection*>(this->GetMapProjection());
+    it = m_ParameterStore.find("Zone");
+    if (it != m_ParameterStore.end())
+      {
+      int zone = atoi((*it).second.c_str());
+      projection->setZone(zone);
+      }
+    it = m_ParameterStore.find("Hemisphere");
+    if (it != m_ParameterStore.end())
+      {
+      projection->setHemisphere((*it).second[0]);
+      }
+    }
+}
+
 void MapProjectionWrapper::PrintMap() const
 {
   std::cout << m_MapProjection->print(std::cout);
+  std::cout << "Parameter store:\n";
+  for (StoreType::const_iterator it = m_ParameterStore.begin();
+       it != m_ParameterStore.end();
+       ++it)
+    {
+    std::cout << "  " << (*it).first << ": " << (*it).second << "\n";
+    }
 }
 } // namespace otb
diff --git a/Code/IO/otbMapProjectionWrapper.h b/Code/IO/otbMapProjectionWrapper.h
index c8afab5a83ea52e7fcd59a3fa3f541626c1e4638..a373de286fcc1cfe1d25fe7c069fe578312d6883 100644
--- a/Code/IO/otbMapProjectionWrapper.h
+++ b/Code/IO/otbMapProjectionWrapper.h
@@ -18,6 +18,9 @@
 #ifndef __otbMapProjectionWrapper_h
 #define __otbMapProjectionWrapper_h
 
+#include <string>
+#include <map>
+
 #include "itkObject.h"
 #include "itkObjectFactory.h"
 
@@ -61,6 +64,8 @@ public:
 
   std::string GetWkt();
   void SetWkt(std::string projectionRefWkt);
+  void SetParameter(std::string key, std::string value);
+
   bool InstanciateProjection();
 
   void InverseTransform(double x, double y, double z,
@@ -69,18 +74,25 @@ public:
                         double& x, double& y, double& z);
 
   void PrintMap() const;
+
 protected:
   MapProjectionWrapper();
   virtual ~MapProjectionWrapper();
 
 
+
 private:
   MapProjectionWrapper(const Self &); //purposely not implemented
   void operator =(const Self&); //purposely not implemented
 
+  void ApplyParametersToProjection();
+
   InternalMapProjectionPointer m_MapProjection;
   std::string                  m_ProjectionRefWkt;
 
+  typedef std::map<std::string, std::string> StoreType;
+  StoreType m_ParameterStore;
+
   bool reinstanciateProjection;
 };
 } // namespace otb
diff --git a/Testing/Code/IO/otbMapProjectionWrapperTest.cxx b/Testing/Code/IO/otbMapProjectionWrapperTest.cxx
index a548b97348cd82ab7844d7fdb557fb4cae00a75b..7b0f7e5f52a8528b48d0e8b973c6deb43f0bbd2e 100644
--- a/Testing/Code/IO/otbMapProjectionWrapperTest.cxx
+++ b/Testing/Code/IO/otbMapProjectionWrapperTest.cxx
@@ -177,6 +177,8 @@ int otbMapProjectionWrapperTest(int argc, char* argv[])
 
   otb::MapProjectionWrapper::Pointer genericMapProjection = otb::MapProjectionWrapper::New();
   genericMapProjection->SetWkt(projectionRefWkt);
+  genericMapProjection->SetParameter("Zone", "46");
+  genericMapProjection->SetParameter("Hemisphere", "S");
   file << "Instanciating from : " << projectionRefWkt << std::endl;
   file << genericMapProjection->GetWkt() << std::endl << std::endl;