diff --git a/ViewerManager/Model/otbImageViewerManagerModel.cxx b/ViewerManager/Model/otbImageViewerManagerModel.cxx
index 00969a210ff89399d816ba752010336ca09910a3..49c4fb74cc90415329470740769a131b23a9f2fb 100644
--- a/ViewerManager/Model/otbImageViewerManagerModel.cxx
+++ b/ViewerManager/Model/otbImageViewerManagerModel.cxx
@@ -208,20 +208,23 @@ void
 ImageViewerManagerModel
 ::UpdateRGBChannelOrder(int redChoice , int greenChoice, int blueChoice, unsigned int selectedItem)
 {
-//   RenderingFunctionType::Pointer renderFunction = m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion;
-   //FIXME make sure this is called only when the renderingFunction is a StandardRenderingFunctionType
-//    StandardRenderingFunctionType::Pointer renderFunction = static_cast<StandardRenderingFunctionType*>(m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion.GetPointer());
+
+  StandardRenderingFunctionType::ChannelListType channels;
+  channels.resize(3);
+  channels[0]=redChoice;
+  channels[1]=greenChoice;
+  channels[2]=blueChoice;
+
    StandardRenderingFunctionType::Pointer renderFunction;
    renderFunction = StandardRenderingFunctionType::New();
 
-  renderFunction->GetPixelRepresentationFunction().SetChannelIndex(0,redChoice);
-  renderFunction->GetPixelRepresentationFunction().SetChannelIndex(1,greenChoice);
-  renderFunction->GetPixelRepresentationFunction().SetChannelIndex(2,blueChoice);
+   renderFunction->SetChannelList(channels);
+
 
   //Update the layer
   m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(renderFunction);
   m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion = renderFunction;
-  renderFunction->Initialize();//FIXME Initialize() should disappear from the renderinFunction
+  renderFunction->Initialize();//FIXME Initialize() should disappear from the renderingFunction
   m_ObjectTrackedList.at(selectedItem-1).pRendering->Update();
 
   //Notify
@@ -234,18 +237,19 @@ void
 ImageViewerManagerModel
 ::UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem)
 {
-//   RenderingFunctionType::Pointer renderFunction = m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion;
-   //FIXME make sure this is called only when the renderingFunction is a StandardRenderingFunctionType
-//    StandardRenderingFunctionType::Pointer renderFunction = static_cast<StandardRenderingFunctionType*>(m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion.GetPointer());
+  StandardRenderingFunctionType::ChannelListType channels;
+  channels.resize(3);
+  channels[0]=choice;
+
   StandardRenderingFunctionType::Pointer renderFunction;
   renderFunction = StandardRenderingFunctionType::New();
 
-  renderFunction->GetPixelRepresentationFunction().SetAllChannels(choice);
+  renderFunction->SetChannelList(channels);
 
   //Update the layer
   m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(renderFunction);
   m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion = renderFunction;
-  renderFunction->Initialize();//FIXME Initialize() should disappear from the renderinFunction
+  renderFunction->Initialize();//FIXME Initialize() should disappear from the renderingFunction
   m_ObjectTrackedList.at(selectedItem-1).pRendering->Update();
 
   //Notify
@@ -258,14 +262,14 @@ void
 ImageViewerManagerModel
 ::UpdateModulusChannelOrder(int realChoice , int imChoice, unsigned int selectedItem )
 {
-  ModulusRenderingFunction::Pointer modulusFunction;
-  modulusFunction = ModulusRenderingFunction::New();
-
-
   ModulusRenderingFunction::PixelRepresentationFunctionType::ChannelListType channels;
   channels.push_back(realChoice);
   channels.push_back(imChoice);
-  modulusFunction->GetPixelRepresentationFunction().SetChannelList(channels);
+
+   ModulusRenderingFunction::Pointer modulusFunction;
+  modulusFunction = ModulusRenderingFunction::New();
+
+  modulusFunction->SetChannelList(channels);
 
 
   //Update the layer
@@ -285,13 +289,16 @@ void
 ImageViewerManagerModel
 ::UpdatePhaseChannelOrder(int realChoice , int imChoice, unsigned int selectedItem )
 {
-  PhaseRenderingFunction::Pointer phaseFunction;
-  phaseFunction = PhaseRenderingFunction::New();
-
   PhaseRenderingFunction::PixelRepresentationFunctionType::ChannelListType channels;
   channels.push_back(realChoice);
   channels.push_back(imChoice);
-  phaseFunction->GetPixelRepresentationFunction().SetChannelList(channels);
+
+  PhaseRenderingFunction::Pointer phaseFunction;
+  phaseFunction = PhaseRenderingFunction::New();
+
+  phaseFunction->SetChannelList(channels);
+
+
 
   //Update the layer
   m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(phaseFunction);
diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx
index 274cf672a127f583fafc5efd38cc882693a300ff..66a5dcd2591dbd7c66279dc505c8d32f97a480c1 100644
--- a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx
+++ b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx
@@ -824,10 +824,6 @@ ImageViewerManagerViewGUI
    ImageViewerManagerModelType::ReaderPointerType reader = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader;
    unsigned int nbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel();
 
-   //FIXME make sure this is called only when the renderingFunction is a StandardRenderingFunctionType
-   assert(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion.GetPointer());
-   StandardRenderingFunctionType::Pointer renderingFunction = static_cast<StandardRenderingFunctionType*>(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion.GetPointer());
-
    guiViewerSetupColorMode->set();
    guiViewerSetupComplexMode->clear();
    guiViewerSetupGrayscaleMode->clear();
@@ -841,10 +837,22 @@ ImageViewerManagerViewGUI
    guiGreenChannelChoice->activate();
    guiBlueChannelChoice->activate();
 
-   assert(renderingFunction);
-   guiRedChannelChoice->value(std::min(renderingFunction->GetPixelRepresentationFunction().GetRedChannelIndex(),nbComponent-1));
-   guiGreenChannelChoice->value(std::min(renderingFunction->GetPixelRepresentationFunction().GetGreenChannelIndex(),nbComponent-1));
-   guiBlueChannelChoice->value(std::min(renderingFunction->GetPixelRepresentationFunction().GetBlueChannelIndex(),nbComponent-1));
+   assert(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion.GetPointer());
+
+   RenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
+
+   ChannelListType channels = renderingFunction->GetChannelList();
+   unsigned int i=0;
+   while (channels.size() < 3)
+   {
+     channels.push_back(i);
+     ++i;
+   }
+
+
+   guiRedChannelChoice->value(std::min(channels[0],nbComponent-1));
+   guiGreenChannelChoice->value(std::min(channels[1],nbComponent-1));
+   guiBlueChannelChoice->value(std::min(channels[2],nbComponent-1));
 
  }
 
@@ -864,10 +872,6 @@ ImageViewerManagerViewGUI
    ImageViewerManagerModelType::ReaderPointerType reader = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader;
    unsigned int nbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel();
 
-//    RenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
-   //FIXME make sure this is called only when the renderingFunction is a StandardRenderingFunctionType
-   StandardRenderingFunctionType::Pointer renderingFunction = static_cast<StandardRenderingFunctionType*>(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion.GetPointer());
-
    guiViewerSetupGrayscaleMode->set();
    guiViewerSetupComplexMode->clear();
    guiViewerSetupColorMode->clear();
@@ -881,7 +885,18 @@ ImageViewerManagerViewGUI
    guiBlueChannelChoice->deactivate();
 
    guiGrayscaleChannelChoice->activate();
-   guiGrayscaleChannelChoice->value(std::min(renderingFunction->GetPixelRepresentationFunction().GetRedChannelIndex(),nbComponent-1));
+
+   assert(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion.GetPointer());
+
+   RenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
+
+   ChannelListType channels = renderingFunction->GetChannelList();
+   if (channels.size() < 1)
+   {
+     channels.push_back(0);
+   }
+
+   guiGrayscaleChannelChoice->value(std::min(channels[0],nbComponent-1));
  }
 
 
@@ -898,10 +913,6 @@ ImageViewerManagerViewGUI
    ImageViewerManagerModelType::ReaderPointerType reader = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader;
    unsigned int nbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel();
 
-//    RenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
-    //FIXME make sure this is called only when the renderingFunction is a StandardRenderingFunctionType
-   StandardRenderingFunctionType::Pointer renderingFunction = static_cast<StandardRenderingFunctionType*>(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion.GetPointer()); //FIXME should be the Modulus/Phase rendering function
-
    guiViewerSetupComplexMode->set();
    guiViewerSetupColorMode->clear();
    guiViewerSetupGrayscaleMode->clear();
@@ -913,8 +924,21 @@ ImageViewerManagerViewGUI
    guiImaginaryChannelChoice->activate();
    bModulus->activate();
    bPhase->activate();
-   guiRealChannelChoice->value(std::min(renderingFunction->GetPixelRepresentationFunction().GetChannelIndex(0),nbComponent-1));
-   guiImaginaryChannelChoice->value(std::min(renderingFunction->GetPixelRepresentationFunction().GetChannelIndex(1),nbComponent-1));
+
+
+   assert(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion.GetPointer());
+   RenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
+
+   ChannelListType channels = renderingFunction->GetChannelList();
+   unsigned int i=0;
+   while (channels.size() < 2)
+   {
+     channels.push_back(i);
+     ++i;
+   }
+
+   guiRealChannelChoice->value(std::min(channels[0],nbComponent-1));
+   guiImaginaryChannelChoice->value(std::min(channels[1],nbComponent-1));
  }
 
 
diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.h b/ViewerManager/View/otbImageViewerManagerViewGUI.h
index 64e493e739d6cccacc6bf0a46c21a1ac1ecfb58d..03bcc5d6f3d155920a6ccdfa8a0bffb6cda5ef5b 100644
--- a/ViewerManager/View/otbImageViewerManagerViewGUI.h
+++ b/ViewerManager/View/otbImageViewerManagerViewGUI.h
@@ -83,7 +83,7 @@ public:
   typedef ImageViewerManagerModelType::OffsetType                 OffsetType;
   typedef ImageViewerManagerModelType::RenderingFunctionType      RenderingFunctionType;
   typedef ImageViewerManagerModelType::StandardRenderingFunctionType StandardRenderingFunctionType;
-
+  typedef StandardRenderingFunctionType::ChannelListType          ChannelListType;
   typedef ImageView<VisuModelType>                                VisuViewType;
   typedef VisuViewType::Pointer                                   VisuViewPointerType;