parameter-framework: improvements and corrections

BZ: 6721

- Bug correction concerning selection criteria display (inclusive type)
- Adapted XML format to allow for only on parameter to be associated to
  a domain
- Removed unused files in parameter project

Change-Id: I9f42d08ff8cb60354714fe3d6b0f0b321ad0a7bf
Orig-Change-Id: I837e553070f5acf2d275082c986ba29433493e31
Signed-off-by: Patrick Benavoli <patrickx.benavoli@intel.com>
Reviewed-on: http://android.intel.com:8080/16878
Reviewed-by: Mahe, Erwan <erwan.mahe@intel.com>
Tested-by: Barthes, FabienX <fabienx.barthes@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
diff --git a/parameter-connector-test/main.cpp b/parameter-connector-test/main.cpp
index 2fb8218..ebd6986 100644
--- a/parameter-connector-test/main.cpp
+++ b/parameter-connector-test/main.cpp
@@ -36,7 +36,8 @@
 using namespace std;
 
 #ifdef SIMULATION
-const char* gpcParameterFrameworkConfigurationFolderPath = "/home/pat/projects/qt/parameter-framework/XML";
+//const char* gpcParameterFrameworkConfigurationFolderPath = "/home/pat/projects/qt/parameter-framework/XML";
+const char* gpcParameterFrameworkConfigurationFolderPath = "/home/pat/Documents/gingerbread/hardware/intel/PRIVATE/parameter-framework/XML";
 #else
 const char* gpcParameterFrameworkConfigurationFolderPath = "/etc/parameter-framework";
 #endif
diff --git a/parameter/Android.mk b/parameter/Android.mk
index 8db8179..3ed382f 100644
--- a/parameter/Android.mk
+++ b/parameter/Android.mk
@@ -45,8 +45,6 @@
         ArrayParameter.cpp \
         InstanceDefinition.cpp \
         ParameterMgrPlatformConnector.cpp \
-        ComputedSizeParameterType.cpp \
-        ComputedSizeParameter.cpp \
         FixedPointParameterType.cpp \
         ParameterAccessContext.cpp \
         XmlFileIncluderElement.cpp \
diff --git a/parameter/AreaConfiguration.cpp b/parameter/AreaConfiguration.cpp
index ecc84a7..d9d3fcf 100644
--- a/parameter/AreaConfiguration.cpp
+++ b/parameter/AreaConfiguration.cpp
@@ -91,7 +91,7 @@
 }
 
 // XML configuration settings parsing
-bool CAreaConfiguration::serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElement, CConfigurationAccessContext& configurationAccessContext)
+bool CAreaConfiguration::serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext)
 {
     // Assign blackboard to configuration context
     configurationAccessContext.setParameterBlackboard(&_blackboard);
@@ -99,12 +99,12 @@
     // Assign base offset to configuration context
     configurationAccessContext.setBaseOffset(_pConfigurableElement->getOffset());
 
-    // Parse configuration settings
-    if (_pConfigurableElement->serializeXmlSettings(xmlConfigurationSettingsElement, configurationAccessContext)) {
+    // Parse configuration settings (element contents)
+    if (_pConfigurableElement->serializeXmlSettings(xmlConfigurationSettingsElementContent, configurationAccessContext)) {
 
         if (!configurationAccessContext.serializeOut()) {
 
-            // Serialized in areas are valid
+            // Serialized-in areas are valid
             _bValid = true;
         }
         return true;
diff --git a/parameter/AreaConfiguration.h b/parameter/AreaConfiguration.h
index 4e7e2f0..541a07f 100644
--- a/parameter/AreaConfiguration.h
+++ b/parameter/AreaConfiguration.h
@@ -69,7 +69,7 @@
     void copyToInner(CAreaConfiguration* pToAreaConfiguration) const;
 
     // XML configuration settings parsing/composing
-    bool serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElement, CConfigurationAccessContext& configurationAccessContext);
+    bool serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext);
 
     // Serialization
     void serialize(CBinaryStream& binaryStream);
diff --git a/parameter/ArrayParameter.cpp b/parameter/ArrayParameter.cpp
index 2cdae2f..abb3f6d 100644
--- a/parameter/ArrayParameter.cpp
+++ b/parameter/ArrayParameter.cpp
@@ -48,16 +48,16 @@
 }
 
 // XML configuration settings parsing
-bool CArrayParameter::serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const
+bool CArrayParameter::serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const
 {
     // Check for value space
-    handleValueSpaceAttribute(xmlConfigurableElementSettingsElement, configurationAccessContext);
+    handleValueSpaceAttribute(xmlConfigurationSettingsElementContent, configurationAccessContext);
 
     // Handle access
     if (!configurationAccessContext.serializeOut()) {
 
         // Actually set values to blackboard
-        if (!setValues(0, configurationAccessContext.getBaseOffset(), xmlConfigurableElementSettingsElement.getTextContent(), configurationAccessContext)) {
+        if (!setValues(0, configurationAccessContext.getBaseOffset(), xmlConfigurationSettingsElementContent.getTextContent(), configurationAccessContext)) {
 
             return false;
         }
@@ -70,7 +70,7 @@
         getValues(configurationAccessContext.getBaseOffset(), strValue, configurationAccessContext);
 
         // Populate value into xml text node
-        xmlConfigurableElementSettingsElement.setTextContent(strValue);
+        xmlConfigurationSettingsElementContent.setTextContent(strValue);
     }
 
     // Done
@@ -220,7 +220,7 @@
 bool CArrayParameter::setValues(uint32_t uiStartIndex, uint32_t uiBaseOffset, const string& strValue, CParameterAccessContext& parameterContext) const
 {
     // Deal with value(s)
-    Tokenizer tok(strValue);
+    Tokenizer tok(strValue, DEFAULT_DELIMITER + ",");
 
     vector<string> astrValues = tok.split();
     uint32_t uiNbValues = astrValues.size();
@@ -261,12 +261,22 @@
     uint32_t uiSize = getSize();
     uint32_t uiOffset = getOffset() - uiBaseOffset;
 
+    bool bFirst = true;
+
     for (uiValueIndex = 0; uiValueIndex < _uiLength; uiValueIndex++) {
         string strReadValue;
 
         doGetValue(strReadValue, uiOffset, parameterContext);
 
-        strValues += strReadValue + " ";
+        if (!bFirst) {
+
+            strValues += " ";
+        } else {
+
+            bFirst = false;
+        }
+
+        strValues += strReadValue;
 
         uiOffset += uiSize;
     }
diff --git a/parameter/ArrayParameter.h b/parameter/ArrayParameter.h
index b102d06..bcedfad 100644
--- a/parameter/ArrayParameter.h
+++ b/parameter/ArrayParameter.h
@@ -41,7 +41,7 @@
     virtual uint32_t getFootPrint() const;
 
     // XML configuration settings parsing
-    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const;
+    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const;
 protected:
     // User set/get
     virtual bool setValue(CPathNavigator& pathNavigator, const string& strValue, CErrorContext& errorContext) const;
diff --git a/parameter/BitParameter.cpp b/parameter/BitParameter.cpp
index f687544..cb75477 100644
--- a/parameter/BitParameter.cpp
+++ b/parameter/BitParameter.cpp
@@ -54,13 +54,13 @@
 }
 
 // XML configuration settings parsing/composing
-bool CBitParameter::serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const
+bool CBitParameter::serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const
 {
     // Handle access
     if (!configurationAccessContext.serializeOut()) {
 
         // Write to blackboard
-        if (!doSetValue(xmlConfigurableElementSettingsElement.getTextContent(), getOffset() - configurationAccessContext.getBaseOffset(), configurationAccessContext)) {
+        if (!doSetValue(xmlConfigurationSettingsElementContent.getTextContent(), getOffset() - configurationAccessContext.getBaseOffset(), configurationAccessContext)) {
 
             // Append parameter path to error
             configurationAccessContext.appendToError(" " + getPath());
@@ -75,7 +75,7 @@
         doGetValue(strValue, getOffset() - configurationAccessContext.getBaseOffset(), configurationAccessContext);
 
         // Populate value into xml text node
-        xmlConfigurableElementSettingsElement.setTextContent(strValue);
+        xmlConfigurationSettingsElementContent.setTextContent(strValue);
     }
 
     // Done
@@ -175,6 +175,6 @@
     pBlackboard->read(&uiData, getSize(), uiOffset, parameterAccessContext.isBigEndianSubsystem());
 
     // Convert
-    static_cast<const CBitParameterType*>(getTypeElement())->asString(uiData, strValue);
+    static_cast<const CBitParameterType*>(getTypeElement())->asString(uiData, strValue, parameterAccessContext);
 }
 
diff --git a/parameter/BitParameter.h b/parameter/BitParameter.h
index 15be074..41f449e 100644
--- a/parameter/BitParameter.h
+++ b/parameter/BitParameter.h
@@ -49,7 +49,7 @@
     virtual Type getType() const;
 
     // XML configuration settings parsing/composing
-    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const;
+    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const;
 protected:
     // Parameter Access
     virtual bool setValue(CPathNavigator& pathNavigator, const string& strValue, CErrorContext& errorContext) const;
diff --git a/parameter/BitParameterType.cpp b/parameter/BitParameterType.cpp
index e12cd60..d9d1861 100644
--- a/parameter/BitParameterType.cpp
+++ b/parameter/BitParameterType.cpp
@@ -80,6 +80,10 @@
 // Conversion
 bool CBitParameterType::asInteger(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const
 {
+    // Hexa
+    bool bValueProvidedAsHexa = !strValue.compare(0, 2, "0x");
+
+    // Get value
     uint32_t uiConvertedValue = strtoul(strValue.c_str(), NULL, 0);
 
     if (uiConvertedValue > getMaxValue()) {
@@ -87,26 +91,41 @@
         // Range exceeded
         ostringstream strStream;
 
-        strStream << strValue << " value out of range [0, " << getMaxValue() << "] for " + getKind();
+        strStream << "Value " << strValue << " standing out of admitted range [";
+
+        if (bValueProvidedAsHexa) {
+
+            strStream << "0x0, " << "0x" << hex << uppercase;
+        } else {
+
+            strStream << "0, ";
+        }
+        strStream << getMaxValue() << "] for " + getKind();
 
         parameterAccessContext.setError(strStream.str());
 
         return false;
     }
 
-    // Do bitwise operation
+    // Do bitwise RMW operation
     uiValue = (uiValue & ~getMask()) | (uiConvertedValue << _uiBitPos);
 
     return true;
 }
 
-void CBitParameterType::asString(const uint32_t& uiValue, string& strValue) const
+void CBitParameterType::asString(const uint32_t& uiValue, string& strValue, CParameterAccessContext& parameterAccessContext) const
 {
     uint32_t uiConvertedValue = (uiValue & getMask()) >> _uiBitPos;
 
     // Format
     ostringstream strStream;
 
+    // Take care of format
+    if (parameterAccessContext.valueSpaceIsRaw() && parameterAccessContext.outputRawFormatIsHex()) {
+
+        strStream << "0x" << hex << uppercase;
+    }
+
     strStream << uiConvertedValue;
 
     strValue = strStream.str();
@@ -134,3 +153,17 @@
 {
     return getMaxValue() << _uiBitPos;
 }
+
+// Check data has no bit set outside available range
+bool CBitParameterType::isEncodable(uint32_t uiData) const
+{
+    uint32_t uiShift = 32 - _uiBitSize;
+
+    if (uiShift) {
+
+        // Check high bits are clean
+        return !(uiData >> uiShift);
+    }
+
+    return true;
+}
diff --git a/parameter/BitParameterType.h b/parameter/BitParameterType.h
index 2a94922..f3f18b8 100644
--- a/parameter/BitParameterType.h
+++ b/parameter/BitParameterType.h
@@ -46,7 +46,7 @@
 
     // Conversion
     bool asInteger(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const;
-    void asString(const uint32_t& uiValue, string& strValue) const;
+    void asString(const uint32_t& uiValue, string& strValue, CParameterAccessContext& parameterAccessContext) const;
 
     // Bit Size
     uint32_t getBitSize() const;
@@ -60,6 +60,8 @@
     uint32_t getMaxValue() const;
     // Biwise mask
     uint32_t getMask() const;
+    // Check data has no bit set outside available range
+    bool isEncodable(uint32_t uiData) const;
 
     // Pos in bits
     uint32_t _uiBitPos;
diff --git a/parameter/BooleanParameterType.cpp b/parameter/BooleanParameterType.cpp
index d84d683..425596d 100644
--- a/parameter/BooleanParameterType.cpp
+++ b/parameter/BooleanParameterType.cpp
@@ -49,15 +49,26 @@
 
 bool CBooleanParameterType::asInteger(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const
 {
-    if (strValue == "1") {
+    if (strValue == "1" || strValue == "0x1") {
 
         uiValue = true;
-    } else if (strValue == "0") {
+    } else if (strValue == "0" || strValue == "0x0") {
 
         uiValue = false;
     } else {
+        parameterAccessContext.setError(strValue + " value not part of numerical space {");
 
-        parameterAccessContext.setError(strValue + " value not part of numerical space {0, 1} for " + getKind());
+        // Hexa
+        bool bValueProvidedAsHexa = !strValue.compare(0, 2, "0x");
+
+        if (bValueProvidedAsHexa) {
+
+            parameterAccessContext.appendToError("0x0, 0x1");
+        } else {
+
+            parameterAccessContext.appendToError("0, 1");
+        }
+        parameterAccessContext.appendToError("} for " + getKind());
 
         return false;
     }
@@ -67,7 +78,10 @@
 
 void CBooleanParameterType::asString(const uint32_t& uiValue, string& strValue, CParameterAccessContext& parameterAccessContext) const
 {
-    (void)parameterAccessContext;
+    if (parameterAccessContext.valueSpaceIsRaw() && parameterAccessContext.outputRawFormatIsHex()) {
 
-    strValue = uiValue ? "1" : "0";
+        strValue = "0x";
+    }
+
+    strValue += uiValue ? "1" : "0";
 }
diff --git a/parameter/ComponentInstance.cpp b/parameter/ComponentInstance.cpp
index 12566d5..572de7a 100644
--- a/parameter/ComponentInstance.cpp
+++ b/parameter/ComponentInstance.cpp
@@ -50,10 +50,10 @@
     return true;
 }
 
-bool CComponentInstance::getMappingData(const string& strKey, string& strValue) const
+bool CComponentInstance::getMappingData(const string& strKey, const string*& pStrValue) const
 {
     // Try myself first then associated component type
-    return base::getMappingData(strKey, strValue) || (_pComponentType && _pComponentType->getMappingData(strKey, strValue));
+    return base::getMappingData(strKey, pStrValue) || (_pComponentType && _pComponentType->getMappingData(strKey, pStrValue));
 }
 
 bool CComponentInstance::hasMappingData() const
diff --git a/parameter/ComponentInstance.h b/parameter/ComponentInstance.h
index dffab7f..161d049 100644
--- a/parameter/ComponentInstance.h
+++ b/parameter/ComponentInstance.h
@@ -40,7 +40,7 @@
     CComponentInstance(const string& strName);
 
     // Mapping info
-    virtual bool getMappingData(const string& strKey, string& strValue) const;
+    virtual bool getMappingData(const string& strKey, const string*& pStrValue) const;
     virtual bool hasMappingData() const;
 
     // From IXmlSink
@@ -53,6 +53,7 @@
     virtual CInstanceConfigurableElement* doInstantiate() const;
     virtual void populate(CElement* pElement) const;
 
+    // Related component type
     const CComponentType* _pComponentType;
 };
 
diff --git a/parameter/ComponentType.cpp b/parameter/ComponentType.cpp
index ee83464..5a18803 100644
--- a/parameter/ComponentType.cpp
+++ b/parameter/ComponentType.cpp
@@ -50,10 +50,10 @@
     return true;
 }
 
-bool CComponentType::getMappingData(const string& strKey, string& strValue) const
+bool CComponentType::getMappingData(const string& strKey, const string*& pStrValue) const
 {
     // Try myself first then extended component type
-    return base::getMappingData(strKey, strValue) || (_pExtendsComponentType && _pExtendsComponentType->getMappingData(strKey, strValue));
+    return base::getMappingData(strKey, pStrValue) || (_pExtendsComponentType && _pExtendsComponentType->getMappingData(strKey, pStrValue));
 }
 
 bool CComponentType::hasMappingData() const
diff --git a/parameter/ComponentType.h b/parameter/ComponentType.h
index 0bd311b..a6e04cd 100644
--- a/parameter/ComponentType.h
+++ b/parameter/ComponentType.h
@@ -42,7 +42,7 @@
     void populate(CElement* pElement) const;
 
     // Mapping info
-    virtual bool getMappingData(const string& strKey, string& strValue) const;
+    virtual bool getMappingData(const string& strKey, const string*& pStrValue) const;
     virtual bool hasMappingData() const;
 
     // From IXmlSink
diff --git a/parameter/ComputedSizeParameter.cpp b/parameter/ComputedSizeParameter.cpp
deleted file mode 100644
index 4d263da..0000000
--- a/parameter/ComputedSizeParameter.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/* <auto_header>
- * <FILENAME>
- * 
- * INTEL CONFIDENTIAL
- * Copyright © 2011 Intel 
- * Corporation All Rights Reserved.
- * 
- * The source code contained or described herein and all documents related to
- * the source code ("Material") are owned by Intel Corporation or its suppliers
- * or licensors. Title to the Material remains with Intel Corporation or its
- * suppliers and licensors. The Material contains trade secrets and proprietary
- * and confidential information of Intel or its suppliers and licensors. The
- * Material is protected by worldwide copyright and trade secret laws and
- * treaty provisions. No part of the Material may be used, copied, reproduced,
- * modified, published, uploaded, posted, transmitted, distributed, or
- * disclosed in any way without Intel’s prior express written permission.
- * 
- * No license under any patent, copyright, trade secret or other intellectual
- * property right is granted to or conferred upon you by disclosure or delivery
- * of the Materials, either expressly, by implication, inducement, estoppel or
- * otherwise. Any license under such intellectual property rights must be
- * express and approved by Intel in writing.
- * 
- *  AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com)
- * CREATED: 2011-06-01
- * UPDATED: 2011-07-27
- * 
- * 
- * </auto_header>
- */
-#include "ComputedSizeParameter.h"
-#include "ConfigurableElement.h"
-#include "ParameterType.h"
-#include "InstanceConfigurableElement.h"
-#include "ComputedSizeParameterType.h"
-#include <assert.h>
-#include <sstream>
-#include "ParameterAccessContext.h"
-
-#define base CParameter
-
-CComputedSizeParameter::CComputedSizeParameter(const string& strName, const CTypeElement* pTypeElement) : base(strName, pTypeElement), _pReferredElement(NULL)
-{
-}
-
-uint32_t CComputedSizeParameter::getFootPrint() const
-{
-    // Virtual parameter
-    return 0;
-}
-
-bool CComputedSizeParameter::init(string& strError)
-{
-    // Seek referred parameter in parent hierarchy
-    const CElement* pParent = getParent();
-
-    assert(pParent);
-
-    _pReferredElement = static_cast<const CConfigurableElement*>(pParent->findChild(static_cast<const CComputedSizeParameterType*>(getTypeElement())->getReferredElementName()));
-
-    if (!_pReferredElement) {
-
-        strError = "Could not find referred Parameter " + getTypeElement()->getName() + " from " + getKind() + " " + getPath();
-
-        return false;
-    }
-
-    return true;
-}
-
-bool CComputedSizeParameter::doSetValue(const string& strValue, uint32_t uiOffset, CParameterAccessContext& parameterAccessContext)
-{
-    // Read only kind of parameter, can't be set!
-    (void)strValue;
-    (void)uiOffset;
-
-    parameterAccessContext.setError("Read only parameter");
-
-    return false;
-}
-
-void CComputedSizeParameter::doGetValue(string& strValue, uint32_t uiOffset, CParameterAccessContext& parameterAccessContext) const
-{
-    assert(_pReferredElement);
-    // Parameter can't be an array
-    assert(uiOffset == getOffset());
-
-    static_cast<const CParameterType*>(getTypeElement())->asString(_pReferredElement->getFootPrint(), strValue, parameterAccessContext);
-}
-
diff --git a/parameter/ComputedSizeParameterType.cpp b/parameter/ComputedSizeParameterType.cpp
deleted file mode 100644
index 02daf79..0000000
--- a/parameter/ComputedSizeParameterType.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* <auto_header>
- * <FILENAME>
- * 
- * INTEL CONFIDENTIAL
- * Copyright © 2011 Intel 
- * Corporation All Rights Reserved.
- * 
- * The source code contained or described herein and all documents related to
- * the source code ("Material") are owned by Intel Corporation or its suppliers
- * or licensors. Title to the Material remains with Intel Corporation or its
- * suppliers and licensors. The Material contains trade secrets and proprietary
- * and confidential information of Intel or its suppliers and licensors. The
- * Material is protected by worldwide copyright and trade secret laws and
- * treaty provisions. No part of the Material may be used, copied, reproduced,
- * modified, published, uploaded, posted, transmitted, distributed, or
- * disclosed in any way without Intel’s prior express written permission.
- * 
- * No license under any patent, copyright, trade secret or other intellectual
- * property right is granted to or conferred upon you by disclosure or delivery
- * of the Materials, either expressly, by implication, inducement, estoppel or
- * otherwise. Any license under such intellectual property rights must be
- * express and approved by Intel in writing.
- * 
- *  AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com)
- * CREATED: 2011-06-01
- * UPDATED: 2011-07-27
- * 
- * 
- * </auto_header>
- */
-#include "ComputedSizeParameterType.h"
-#include "ComputedSizeParameter.h"
-#include <sstream>
-#include <stdlib.h>
-
-#define base CParameterType
-
-CComputedSizeParameterType::CComputedSizeParameterType(const string& strName) : base(strName)
-{
-}
-
-string CComputedSizeParameterType::getKind() const
-{
-    return "ComputedSizeParameter";
-}
-
-bool CComputedSizeParameterType::fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext)
-{
-    // Size
-    setSize(xmlElement.getAttributeInteger("Size") / 8);
-
-    _strReferredElementName = xmlElement.getAttributeString("Parameter");
-
-    return base::fromXml(xmlElement, serializingContext);
-}
-
-bool CComputedSizeParameterType::asInteger(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const
-{
-    (void)parameterAccessContext;
-
-    uiValue = strtoul(strValue.c_str(), NULL, 0);
-
-    return true;
-}
-
-void CComputedSizeParameterType::asString(const uint32_t& uiValue, string& strValue, CParameterAccessContext& parameterAccessContext) const
-{
-    (void)parameterAccessContext;
-
-    // Format
-    ostringstream strStream;
-
-    strStream << uiValue;
-
-    strValue = strStream.str();
-}
-
-const string& CComputedSizeParameterType::getReferredElementName() const
-{
-    return _strReferredElementName;
-}
-
-CInstanceConfigurableElement* CComputedSizeParameterType::doInstantiate() const
-{
-    // Scalar parameter
-    return new CComputedSizeParameter(getName(), this);
-}
-
diff --git a/parameter/ComputedSizeParameterType.h b/parameter/ComputedSizeParameterType.h
deleted file mode 100644
index 63ae6b3..0000000
--- a/parameter/ComputedSizeParameterType.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* <auto_header>
- * <FILENAME>
- * 
- * INTEL CONFIDENTIAL
- * Copyright © 2011 Intel 
- * Corporation All Rights Reserved.
- * 
- * The source code contained or described herein and all documents related to
- * the source code ("Material") are owned by Intel Corporation or its suppliers
- * or licensors. Title to the Material remains with Intel Corporation or its
- * suppliers and licensors. The Material contains trade secrets and proprietary
- * and confidential information of Intel or its suppliers and licensors. The
- * Material is protected by worldwide copyright and trade secret laws and
- * treaty provisions. No part of the Material may be used, copied, reproduced,
- * modified, published, uploaded, posted, transmitted, distributed, or
- * disclosed in any way without Intel’s prior express written permission.
- * 
- * No license under any patent, copyright, trade secret or other intellectual
- * property right is granted to or conferred upon you by disclosure or delivery
- * of the Materials, either expressly, by implication, inducement, estoppel or
- * otherwise. Any license under such intellectual property rights must be
- * express and approved by Intel in writing.
- * 
- *  AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com)
- * CREATED: 2011-06-01
- * UPDATED: 2011-07-27
- * 
- * 
- * </auto_header>
- */
-#pragma once
-
-#include "ParameterType.h"
-
-class CComputedSizeParameterType : public CParameterType
-{
-public:
-    CComputedSizeParameterType(const string& strName);
-
-    // From IXmlSink
-    virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
-
-    virtual bool asInteger(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const;
-    virtual void asString(const uint32_t& uiValue, string& strValue, CParameterAccessContext& parameterAccessContext) const;
-    virtual string getKind() const;
-
-    const string& getReferredElementName() const;
-
-private:
-    virtual CInstanceConfigurableElement* doInstantiate() const;
-
-    string _strReferredElementName;
-};
-
diff --git a/parameter/ConfigurableDomain.cpp b/parameter/ConfigurableDomain.cpp
index 807171f..912fa5e 100644
--- a/parameter/ConfigurableDomain.cpp
+++ b/parameter/ConfigurableDomain.cpp
@@ -277,7 +277,38 @@
     // Actual XML context
     CXmlDomainSerializingContext& xmlDomainSerializingContext = static_cast<CXmlDomainSerializingContext&>(serializingContext);
 
-    // Change context type for parameter settings access
+    // Element content
+    CXmlElement xmlConfigurationSettingsElementContent;
+
+    // Deal with element itself
+    if (!bSerializeOut) {
+
+        // Check structure
+        if (xmlConfigurationSettingsElement.getNbChildElements() != 1) {
+
+            // Structure error
+            serializingContext.setError("Struture error encountered while parsing settinsg of " + pConfigurableElement->getKind() + " " + pConfigurableElement->getName() + " in Configuration " + pDomainConfiguration->getName() + " in Domain " + getName());
+
+            return false;
+        }
+
+        // Check name and kind
+        if (!xmlConfigurationSettingsElement.getChildElement(pConfigurableElement->getKind(), pConfigurableElement->getName(), xmlConfigurationSettingsElementContent)) {
+
+            serializingContext.setError("Couldn't find settings for " + pConfigurableElement->getKind() + " " + pConfigurableElement->getName() + " for Configuration " + pDomainConfiguration->getName() + " in Domain " + getName());
+
+            return false;
+        }
+    } else {
+
+        // Create child XML element
+        xmlConfigurationSettingsElement.createChild(xmlConfigurationSettingsElementContent, pConfigurableElement->getKind());
+
+        // Set Name
+        xmlConfigurationSettingsElementContent.setNameAttribute(pConfigurableElement->getName());
+    }
+
+    // Change context type to parameter settings access
     string strError;
 
     // Create configuration access context
@@ -286,6 +317,9 @@
     // Provide current value space
     configurationAccessContext.setValueSpaceRaw(xmlDomainSerializingContext.valueSpaceIsRaw());
 
+    // Provide current output raw format
+    configurationAccessContext.setOutputRawFormat(xmlDomainSerializingContext.outputRawFormatIsHex());
+
     // Get subsystem
     const CSubsystem* pSubsystem = pConfigurableElement->getBelongingSubsystem();
 
@@ -298,7 +332,7 @@
     }
 
     // Have domain configuration parse settings for configurable element
-    if (!pDomainConfiguration->serializeXmlSettings(pConfigurableElement, xmlConfigurationSettingsElement, configurationAccessContext)) {
+    if (!pDomainConfiguration->serializeXmlSettings(pConfigurableElement, xmlConfigurationSettingsElementContent, configurationAccessContext)) {
 
         // Forward error
         xmlDomainSerializingContext.setError(strError);
@@ -735,32 +769,7 @@
     }
     return false;
 }
-#if 0
-void CConfigurableDomain::autoValidateConfiguration(CDomainConfiguration* pDomainConfiguration)
-{
-    // Validate
-    ConfigurableElementListIterator it;
 
-    // Browse all configurable elements for configuration validation
-    for (it = _configurableElementList.begin(); it != _configurableElementList.end(); ++it) {
-
-        const CConfigurableElement* pConfigurableElement = *it;
-
-        // Find first valid configuration for given configurable element
-        const CDomainConfiguration* pValidDomainConfiguration = findValidDomainConfiguration(pConfigurableElement);
-
-        // Check valid configuration exists for that configurable element
-        if (pValidDomainConfiguration) {
-
-            // Called on purpose
-            assert(pValidDomainConfiguration != pDomainConfiguration);
-
-            // Validate
-            pDomainConfiguration->validateAgainst(pValidDomainConfiguration, pConfigurableElement);
-        }
-    }
-}
-#endif
 // Search for a valid configuration for given configurable element
 const CDomainConfiguration* CConfigurableDomain::findValidDomainConfiguration(const CConfigurableElement* pConfigurableElement) const
 {
diff --git a/parameter/ConfigurableDomains.cpp b/parameter/ConfigurableDomains.cpp
index 1961b2f..fa794b3 100644
--- a/parameter/ConfigurableDomains.cpp
+++ b/parameter/ConfigurableDomains.cpp
@@ -32,6 +32,7 @@
 #include "ConfigurableDomain.h"
 #include "ConfigurableElement.h"
 #include "BinaryStream.h"
+#include "AutoLog.h"
 
 #define base CBinarySerializableElement
 
@@ -67,7 +68,7 @@
 // Configuration application if required
 bool CConfigurableDomains::apply(CParameterBlackboard* pParameterBlackboard, bool bForce, string& strError)
 {
-    log("Applying configurations");
+   CAutoLog autoLog(this, "Applying configurations");
 
     // Syncer set
     CSyncerSet syncerSet;
@@ -359,8 +360,6 @@
 // Last applied configurations
 void CConfigurableDomains::listLastAppliedConfigurations(string& strResult) const
 {
-    strResult = "\n";
-
     // Browse domains
     uint32_t uiChild;
     uint32_t uiNbConfigurableDomains = getNbChildren();
diff --git a/parameter/ConfigurableElement.cpp b/parameter/ConfigurableElement.cpp
index 9707fb2..2fcde7a 100644
--- a/parameter/ConfigurableElement.cpp
+++ b/parameter/ConfigurableElement.cpp
@@ -34,6 +34,7 @@
 #include "ConfigurableDomain.h"
 #include "ConfigurationAccessContext.h"
 #include "ConfigurableElementAggregator.h"
+#include <sstream>
 #include <assert.h>
 
 #define base CElement
@@ -47,14 +48,14 @@
 }
 
 // XML configuration settings parsing
-bool CConfigurableElement::serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const
+bool CConfigurableElement::serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const
 {
     uint32_t uiIndex;
     uint32_t uiNbChildren = getNbChildren();
 
     if (!configurationAccessContext.serializeOut()) {
         // Just do basic checks and propagate to children
-        CXmlElement::CChildIterator it(xmlConfigurableElementSettingsElement);
+        CXmlElement::CChildIterator it(xmlConfigurationSettingsElementContent);
 
         CXmlElement xmlChildConfigurableElementSettingsElement;
 
@@ -113,7 +114,7 @@
             // Create corresponding child element
             CXmlElement xmlChildConfigurableElementSettingsElement;
 
-            xmlConfigurableElementSettingsElement.createChild(xmlChildConfigurableElementSettingsElement, pChildConfigurableElement->getKind());
+            xmlConfigurationSettingsElementContent.createChild(xmlChildConfigurableElementSettingsElement, pChildConfigurableElement->getKind());
 
             // Handle element name attribute
             xmlChildConfigurableElementSettingsElement.setNameAttribute(pChildConfigurableElement->getName());
@@ -126,67 +127,6 @@
     return true;
 }
 
-#if 0
-bool CConfigurableElement::serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const
-{
-    if (!configurationAccessContext.serializeOut()) {
-        // Just do basic checks and propagate to children
-        CXmlElement::CChildIterator it(xmlConfigurableElementSettingsElement);
-
-        CXmlElement xmlChildConfigurableElementSettingsElement;
-
-        while (it.next(xmlChildConfigurableElementSettingsElement)) {
-
-            // Find child configurable element
-            const CConfigurableElement* pChildConfigurableElement = static_cast<const CConfigurableElement*>(findChild(xmlChildConfigurableElementSettingsElement.getNameAttribute()));
-
-            if (!pChildConfigurableElement) {
-
-                configurationAccessContext.setError("Configuration settings parsing: Unable to find configurable element " + xmlChildConfigurableElementSettingsElement.getNameAttribute() +  " under configurable element " + getName());
-
-                return false;
-            }
-
-            // Check element type matches
-            if (xmlChildConfigurableElementSettingsElement.getType() != pChildConfigurableElement->getKind()) {
-
-                configurationAccessContext.setError("Settings for configurable element " + pChildConfigurableElement->getName() + " does not match expected type: " + xmlChildConfigurableElementSettingsElement.getType() + " instead of " + pChildConfigurableElement->getKind());
-
-                return false;
-            }
-
-            // Parse child configurable element's settings
-            if (!pChildConfigurableElement->serializeXmlSettings(xmlChildConfigurableElementSettingsElement, configurationAccessContext)) {
-
-                return false;
-            }
-        }
-    } else {
-        // Propagate to children
-        uint32_t uiIndex;
-        uint32_t uiNbChildren = getNbChildren();
-
-        for (uiIndex = 0; uiIndex < uiNbChildren; uiIndex++) {
-
-            const CConfigurableElement* pChildConfigurableElement = static_cast<const CConfigurableElement*>(getChild(uiIndex));
-
-            // Create corresponding child element
-            CXmlElement xmlChildConfigurableElementSettingsElement;
-
-            xmlConfigurableElementSettingsElement.createChild(xmlChildConfigurableElementSettingsElement, pChildConfigurableElement->getKind());
-
-            // Handle element name attribute
-            xmlChildConfigurableElementSettingsElement.setNameAttribute(pChildConfigurableElement->getName());
-
-            // Propagate
-            pChildConfigurableElement->serializeXmlSettings(xmlChildConfigurableElementSettingsElement, configurationAccessContext);
-        }
-    }
-    // Done
-    return true;
-}
-#endif
-
 // Parameter access
 bool CConfigurableElement::setValue(CPathNavigator& pathNavigator, const string& strValue, CErrorContext& errorContext) const
 {
@@ -406,6 +346,17 @@
     }
 }
 
+// Footprint as string
+string CConfigurableElement::getFootprintAsString() const
+{
+    // Get size as string
+    ostringstream str;
+
+    str << getFootPrint() << " bytes";
+
+    return str.str();
+}
+
 // Matching check for no domain association
 bool CConfigurableElement::hasNoDomainAssociated() const
 {
diff --git a/parameter/ConfigurableElement.h b/parameter/ConfigurableElement.h
index 5b61d3b..34ade12 100644
--- a/parameter/ConfigurableElement.h
+++ b/parameter/ConfigurableElement.h
@@ -78,6 +78,9 @@
     // Elements with no domains
     void listRogueElements(string& strResult) const;
 
+    // Footprint as string
+    string getFootprintAsString() const;
+
     // Parameter access
     virtual bool setValue(CPathNavigator& pathNavigator, const string& strValue, CErrorContext& errorContext) const;
     virtual bool getValue(CPathNavigator& pathNavigator, string& strValue, CErrorContext& errorContext) const;
@@ -85,7 +88,7 @@
     virtual void setDefaultValues(CParameterAccessContext& parameterAccessContext) const;
 
     // XML configuration settings parsing
-    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const;
+    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const;
 protected:
     // Syncer (me or ascendant)
     virtual ISyncer* getSyncer() const;
diff --git a/parameter/DomainConfiguration.cpp b/parameter/DomainConfiguration.cpp
index 4ab5f1d..8d5ebfb 100644
--- a/parameter/DomainConfiguration.cpp
+++ b/parameter/DomainConfiguration.cpp
@@ -63,7 +63,7 @@
 }
 
 // XML configuration settings parsing
-bool CDomainConfiguration::serializeXmlSettings(const CConfigurableElement* pConfigurableElement, CXmlElement& xmlConfigurationSettingsElement, CConfigurationAccessContext& configurationAccessContext)
+bool CDomainConfiguration::serializeXmlSettings(const CConfigurableElement* pConfigurableElement, CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext)
 {
     // Find related AreaConfiguration
     CAreaConfiguration* pAreaConfiguration = getAreaConfiguration(pConfigurableElement);
@@ -71,7 +71,7 @@
     assert(pAreaConfiguration);
 
     // Delegate to corresponding area configuration
-    return pAreaConfiguration->serializeXmlSettings(xmlConfigurationSettingsElement, configurationAccessContext);
+    return pAreaConfiguration->serializeXmlSettings(xmlConfigurationSettingsElementContent, configurationAccessContext);
 }
 
 // Configurable Elements association
diff --git a/parameter/DomainConfiguration.h b/parameter/DomainConfiguration.h
index 27779ec..26b0c41 100644
--- a/parameter/DomainConfiguration.h
+++ b/parameter/DomainConfiguration.h
@@ -75,7 +75,7 @@
     void split(CConfigurableElement* pFromConfigurableElement);
 
     // XML configuration settings parsing/composing
-    bool serializeXmlSettings(const CConfigurableElement* pConfigurableElement, CXmlElement& xmlConfigurationSettingsElement, CConfigurationAccessContext& configurationAccessContext);
+    bool serializeXmlSettings(const CConfigurableElement* pConfigurableElement, CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext);
 
     // Presence of application condition
     bool hasRule() const;
diff --git a/parameter/Element.cpp b/parameter/Element.cpp
index 8cc6783..7b892b0 100644
--- a/parameter/Element.cpp
+++ b/parameter/Element.cpp
@@ -300,6 +300,7 @@
     }
 }
 
+// Hierarchy
 void CElement::addChild(CElement* pChild)
 {
     _childArray.push_back(pChild);
@@ -366,11 +367,17 @@
 
 string CElement::listQualifiedPaths(bool bDive, uint32_t uiLevel) const
 {
-    string strResult = getQualifiedPath() + "\n";
+    uint32_t uiNbChildren = getNbChildren();
+    string strResult;
+
+    // Dive Will cause only leaf nodes to be printed
+    if (!bDive || !uiNbChildren) {
+
+        strResult = getQualifiedPath() + "\n";
+    }
 
     if (bDive || !uiLevel) {
         // Get list of children paths
-        uint32_t uiNbChildren = getNbChildren();
         uint32_t uiChild;
 
         for (uiChild = 0; uiChild < uiNbChildren; uiChild++) {
@@ -385,8 +392,6 @@
 
 void CElement::listChildrenPaths(string& strChildList) const
 {
-    strChildList = "\n";
-
     // Get list of children paths
     uint32_t uiNbChildren = getNbChildren();
     uint32_t uiChild;
@@ -647,3 +652,16 @@
     return uiChecksum;
 }
 
+// Utility to underline
+void CElement::appendTitle(string& strTo, const string& strTitle)
+{
+    strTo += "\n" + strTitle + "\n";
+
+    uint32_t uiLength = strTitle.size();
+
+    while (uiLength--) {
+
+        strTo += "─";
+    }
+    strTo += "\n";
+}
diff --git a/parameter/Element.h b/parameter/Element.h
index b3c3060..e31d772 100644
--- a/parameter/Element.h
+++ b/parameter/Element.h
@@ -106,6 +106,8 @@
     virtual void logValue(string& strValue, CErrorContext& errorContext) const;
     // Name setting
     void setName(const string& strName);
+    // Utility to underline
+    static void appendTitle(string& strTo, const string& strTitle);
 
     // Hierarchy
     CElement* getLastChild();
diff --git a/parameter/ElementBuilderTemplate.h b/parameter/ElementBuilderTemplate.h
index 3a1c968..0a10e1a 100644
--- a/parameter/ElementBuilderTemplate.h
+++ b/parameter/ElementBuilderTemplate.h
@@ -33,10 +33,10 @@
 #include "ElementBuilder.h"
 
 template <class ElementType>
-class CElementBuilderTemplate : public CElementBuilder
+class TElementBuilderTemplate : public CElementBuilder
 {
 public:
-    CElementBuilderTemplate(const string& strType) : CElementBuilder(strType) {}
+    TElementBuilderTemplate(const string& strType) : CElementBuilder(strType) {}
 
     virtual CElement* createElement(const CXmlElement& xmlElement) const
     {
diff --git a/parameter/FixedPointParameterType.cpp b/parameter/FixedPointParameterType.cpp
index 86c9053..a3c9bc5 100644
--- a/parameter/FixedPointParameterType.cpp
+++ b/parameter/FixedPointParameterType.cpp
@@ -31,6 +31,8 @@
 #include "FixedPointParameterType.h"
 #include <stdlib.h>
 #include <sstream>
+#include <iomanip>
+#include <assert.h>
 #include "Parameter.h"
 #include "ParameterAccessContext.h"
 #include "ConfigurationAccessContext.h"
@@ -82,7 +84,7 @@
     // Size vs. Q notation integrity check
     if (uiSizeInBits < getUtilSizeInBits()) {
 
-        serializingContext.setError("Inconsistent Size vs. Q notation for " + getKind() + " " + xmlElement.getPath() + ": Summing (Integral + _uiFractional + 1) should be less than given Size (" + xmlElement.getAttributeString("Size") + ")");
+        serializingContext.setError("Inconsistent Size vs. Q notation for " + getKind() + " " + xmlElement.getPath() + ": Summing (Integral + _uiFractional + 1) should not exceed given Size (" + xmlElement.getAttributeString("Size") + ")");
 
         return false;
     }
@@ -95,40 +97,50 @@
 
 bool CFixedPointParameterType::asInteger(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const
 {
+    // Hexa
+    bool bValueProvidedAsHexa = !strValue.compare(0, 2, "0x");
+
+    // Check data integrity
+    if (bValueProvidedAsHexa && !parameterAccessContext.valueSpaceIsRaw()) {
+
+        parameterAccessContext.setError("Hexadecimal values are not supported for " + getKind() + " when selected value space is real:");
+
+        return false;
+    }
+
     int32_t iData;
 
     if (parameterAccessContext.valueSpaceIsRaw()) {
 
+        // Get data in integer form
         iData = strtol(strValue.c_str(), NULL, 0);
 
+        if (bValueProvidedAsHexa) {
+
+            if (!isEncodable(iData)) {
+
+                // Illegal value provided
+                parameterAccessContext.setError(getOutOfRangeError(strValue, parameterAccessContext.valueSpaceIsRaw(), true));
+
+                return false;
+            } else {
+
+                // Sign extend
+                signExtend(iData);
+            }
+        }
+
     } else {
         double dData = strtod(strValue.c_str(), NULL);
 
         // Do the conversion
         iData = (int32_t)(dData * (1UL << _uiFractional) + 0.5F - (double)(dData < 0));
     }
+    // Check integrity
+    if (!isConsistent(iData, true)) {
 
-    // Check for admitted range: [-2^m, 2^m - 2^n]
-    uint32_t uiSizeInBits = getUtilSizeInBits();
-
-    int32_t iMin = ((int32_t)1 << 31) >> (32 - uiSizeInBits);
-    int32_t iMax = -iMin - 1;
-
-    if (iData < iMin || iData > iMax) {
-        ostringstream strStream;
-
-        strStream << "Value " << strValue << " standing out of admitted ";
-
-        if (!parameterAccessContext.valueSpaceIsRaw()) {
-
-            strStream << "real range [" << (double)iMin / (1UL << _uiFractional) << ", "<< (double)iMax / (1UL << _uiFractional) << "]";
-        } else {
-
-            strStream << "raw range ["  << iMin << ", " << iMax << "]";
-        }
-        strStream <<  " for " << getKind();
-
-        parameterAccessContext.setError(strStream.str());
+        // Illegal value provided
+        parameterAccessContext.setError(getOutOfRangeError(strValue, parameterAccessContext.valueSpaceIsRaw(), bValueProvidedAsHexa));
 
         return false;
     }
@@ -140,22 +152,28 @@
 
 void CFixedPointParameterType::asString(const uint32_t& uiValue, string& strValue, CParameterAccessContext& parameterAccessContext) const
 {
-    int32_t iData = (int32_t)uiValue;
+    int32_t iData = uiValue;
+
+    // Check consistency
+    assert(isEncodable(iData));
 
     // Sign extend
-    uint32_t uiShift = 32 - getUtilSizeInBits();
-
-    if (uiShift) {
-
-        iData = (iData << uiShift) >> uiShift;
-    }
+    signExtend(iData);
 
     // Format
     ostringstream strStream;
 
+    // Raw formatting?
     if (parameterAccessContext.valueSpaceIsRaw()) {
 
-        strStream << iData;
+        // Hexa formatting?
+        if (parameterAccessContext.outputRawFormatIsHex()) {
+
+            strStream << "0x" << hex << uppercase << setw(getSize()*2) << setfill('0') << uiValue;
+        } else {
+
+            strStream << iData;
+        }
     } else {
 
         double dData = (double)iData / (1UL << _uiFractional);
@@ -171,3 +189,38 @@
 {
     return _uiIntegral + _uiFractional + 1;
 }
+
+// Out of range error
+string CFixedPointParameterType::getOutOfRangeError(const string& strValue, bool bRawValueSpace, bool bHexaValue) const
+{
+    // Min/Max computation
+    int32_t iMin = ((int32_t)1 << 31) >> (32 - getUtilSizeInBits());
+    int32_t iMax = -iMin - 1;
+
+    ostringstream strStream;
+
+    strStream << "Value " << strValue << " standing out of admitted ";
+
+    if (!bRawValueSpace) {
+
+        strStream << "real range [" << (double)iMin / (1UL << _uiFractional) << ", "<< (double)iMax / (1UL << _uiFractional) << "]";
+    } else {
+
+        strStream << "raw range [";
+
+        if (bHexaValue) {
+
+            strStream << "0x" << hex << uppercase << setw(getSize()*2) << setfill('0') << makeEncodable(iMin);
+            strStream << ", 0x" << hex << uppercase << setw(getSize()*2) << setfill('0') << makeEncodable(iMax);
+
+        } else {
+
+            strStream << iMin << ", " << iMax;
+        }
+
+        strStream << "]";
+    }
+    strStream <<  " for " << getKind();
+
+    return strStream.str();
+}
diff --git a/parameter/FixedPointParameterType.h b/parameter/FixedPointParameterType.h
index 4aaf5a0..c0ffef3 100644
--- a/parameter/FixedPointParameterType.h
+++ b/parameter/FixedPointParameterType.h
@@ -53,6 +53,8 @@
 private:
     // Util size
     uint32_t getUtilSizeInBits() const;
+    // Out of range error
+    string getOutOfRangeError(const string& strValue, bool bRawValueSpace, bool bHexaValue) const;
 
     // Integral part in Q notation
     uint32_t _uiIntegral;
diff --git a/parameter/FrameworkConfigurationLocation.cpp b/parameter/FrameworkConfigurationLocation.cpp
index 77c8d71..22f1c7f 100644
--- a/parameter/FrameworkConfigurationLocation.cpp
+++ b/parameter/FrameworkConfigurationLocation.cpp
@@ -51,6 +51,7 @@
     return true;
 }
 
+// File path
 string CFrameworkConfigurationLocation::getFilePath(const string& strBaseFolder) const
 {
     if (isPathRelative()) {
@@ -60,11 +61,7 @@
     return _strPath;
 }
 
-bool CFrameworkConfigurationLocation::isPathRelative() const
-{
-    return _strPath[0] != '/';
-}
-
+// Folder path
 string CFrameworkConfigurationLocation::getFolderPath(const string& strBaseFolder) const
 {
     uint32_t uiSlashPos = _strPath.rfind('/', -1);
@@ -93,17 +90,8 @@
     }
 }
 
-#if 0
-string CFrameworkConfigurationLocation::getFileName() const
+// Detect relative path
+bool CFrameworkConfigurationLocation::isPathRelative() const
 {
-    uint32_t uiSlashPos = _strPath.rfind('/', -1);
-
-    if (uiSlashPos != (uint32_t)-1) {
-
-        return _strPath.substr(uiSlashPos + 1, _strPath.size() - uiSlashPos - 1);
-    } else {
-
-        return _strPath;
-    }
+    return _strPath[0] != '/';
 }
-#endif
diff --git a/parameter/FrameworkConfigurationLocation.h b/parameter/FrameworkConfigurationLocation.h
index 2b3bd9a..6becfe5 100644
--- a/parameter/FrameworkConfigurationLocation.h
+++ b/parameter/FrameworkConfigurationLocation.h
@@ -37,13 +37,18 @@
 public:
     CFrameworkConfigurationLocation(const string& strName, const string& strKind);
 
+    // File path
     string getFilePath(const string& strBaseFolder) const;
+
+    // Folder path
     string getFolderPath(const string& strBaseFolder) const;
 
     // From IXmlSink
     virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
 private:
+    // Detect relative path
     bool isPathRelative() const;
 
+    // Path
     string _strPath;
 };
diff --git a/parameter/InstanceConfigurableElement.cpp b/parameter/InstanceConfigurableElement.cpp
index 9dcc2ef..fdce2b7 100644
--- a/parameter/InstanceConfigurableElement.cpp
+++ b/parameter/InstanceConfigurableElement.cpp
@@ -55,10 +55,10 @@
 }
 
 // Mapping
-bool CInstanceConfigurableElement::getMappingData(const string& strKey, string& strValue) const
+bool CInstanceConfigurableElement::getMappingData(const string& strKey, const string*& pStrValue) const
 {
     // Delegate
-    return getTypeElement()->getMappingData(strKey, strValue);
+    return getTypeElement()->getMappingData(strKey, pStrValue);
 }
 
 bool CInstanceConfigurableElement::map(IMapper& mapper, string& strError)
@@ -139,7 +139,7 @@
 
     if (!pSyncer) {
 
-        parameterAccessContext.setError("Unable to synchronize modification. No Syncer object assiciated to configurable element " + getPath());
+        parameterAccessContext.setError("Unable to synchronize modification. No Syncer object associated to configurable element " + getPath());
 
         return false;
     }
diff --git a/parameter/InstanceConfigurableElement.h b/parameter/InstanceConfigurableElement.h
index 517646c..4a032d4 100644
--- a/parameter/InstanceConfigurableElement.h
+++ b/parameter/InstanceConfigurableElement.h
@@ -54,7 +54,7 @@
     const CTypeElement* getTypeElement() const;
 
     // Mapping info
-    bool getMappingData(const string& strKey, string& strValue) const;
+    bool getMappingData(const string& strKey, const string*& pStrValue) const;
 
     // From CElement
     virtual string getKind() const;
diff --git a/parameter/IntegerParameterType.cpp b/parameter/IntegerParameterType.cpp
index 14093ff..72491a2 100644
--- a/parameter/IntegerParameterType.cpp
+++ b/parameter/IntegerParameterType.cpp
@@ -31,6 +31,7 @@
 #include "IntegerParameterType.h"
 #include <stdlib.h>
 #include <sstream>
+#include <iomanip>
 #include "ParameterAccessContext.h"
 
 #define base CParameterType
@@ -91,48 +92,72 @@
 
 bool CIntegerParameterType::asInteger(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const
 {
-    uiValue = strtoul(strValue.c_str(), NULL, 0);
+    // Hexa
+    bool bValueProvidedAsHexa = !strValue.compare(0, 2, "0x");
 
+    // Get value
+    int32_t iData;
+
+    if (_bSigned) {
+
+        iData = strtoul(strValue.c_str(), NULL, 0);
+    } else {
+
+        iData = strtol(strValue.c_str(), NULL, 0);
+    }
+
+    if (bValueProvidedAsHexa) {
+
+        if (isEncodable(iData)) {
+
+            // Sign extend
+            signExtend(iData);
+        }
+    }
     // Check against Min / Max
     if (_bSigned) {
 
-        if (!checkValueAgainstRange<int32_t>(uiValue, parameterAccessContext)) {
+        if (!checkValueAgainstRange<int32_t>(strValue, iData, parameterAccessContext, bValueProvidedAsHexa)) {
 
             return false;
         }
     } else {
 
-        if (!checkValueAgainstRange<uint32_t>(uiValue, parameterAccessContext)) {
+        if (!checkValueAgainstRange<uint32_t>(strValue, iData, parameterAccessContext, bValueProvidedAsHexa)) {
 
             return false;
         }
     }
 
+    uiValue = iData;
+
     return true;
 }
 
 void CIntegerParameterType::asString(const uint32_t& uiValue, string& strValue, CParameterAccessContext& parameterAccessContext) const
 {
-    (void)parameterAccessContext;
-
     // Format
     ostringstream strStream;
 
-    if (_bSigned) {
-        // Sign extend
-        uint32_t uiShift = (4 - getSize()) << 3;
+    // Take care of format
+    if (parameterAccessContext.valueSpaceIsRaw() && parameterAccessContext.outputRawFormatIsHex()) {
 
-        int32_t iValue = (int32_t)uiValue;
-
-        if (uiShift) {
-
-            iValue = (iValue << uiShift) >> uiShift;
-        }
-
-        strStream << iValue;
+        // Hexa display with unecessary bits cleared out
+        strStream << "0x" << hex << uppercase << setw(getSize()*2) << setfill('0') << makeEncodable(uiValue);
     } else {
 
-        strStream << uiValue;
+        if (_bSigned) {
+
+            int32_t iValue = uiValue;
+
+            // Sign extend
+            signExtend(iValue);
+
+            strStream << iValue;
+        } else {
+
+            strStream << uiValue;
+        }
     }
 
     strValue = strStream.str();
@@ -145,12 +170,27 @@
 }
 
 // Range checking
-template <class type> bool CIntegerParameterType::checkValueAgainstRange(type value, CParameterAccessContext& parameterAccessContext) const
+template <typename type> bool CIntegerParameterType::checkValueAgainstRange(const string& strValue, type value, CParameterAccessContext& parameterAccessContext, bool bHexaValue) const
 {
     if ((type)value < (type)_uiMin || (type)value > (type)_uiMax) {
+
         ostringstream strStream;
 
-        strStream << "Value " << value << " standing out of admitted range: [" << (type)_uiMin << ", " <<  (type)_uiMax << "] for " << getKind();
+        strStream << "Value " << strValue << " standing out of admitted range [";
+
+        if (bHexaValue) {
+
+            // Format Min
+            strStream << "0x" << hex << uppercase << setw(getSize()*2) << setfill('0') << makeEncodable(_uiMin);
+            // Format Max
+            strStream << ", 0x" << hex << uppercase << setw(getSize()*2) << setfill('0') << makeEncodable(_uiMax);
+
+        } else {
+
+            strStream << (type)_uiMin << ", " <<  (type)_uiMax;
+        }
+
+        strStream << "] for " << getKind();
 
         parameterAccessContext.setError(strStream.str());
 
diff --git a/parameter/IntegerParameterType.h b/parameter/IntegerParameterType.h
index f1b3e64..db4be41 100644
--- a/parameter/IntegerParameterType.h
+++ b/parameter/IntegerParameterType.h
@@ -51,7 +51,7 @@
     virtual string getKind() const;
 private:
     // Range checking
-    template <class type> bool checkValueAgainstRange(type value, CParameterAccessContext& parameterAccessContext) const;
+    template <typename type> bool checkValueAgainstRange(const string& strValue, type value, CParameterAccessContext& parameterAccessContext, bool bHexaValue) const;
 
     // Signing
     bool _bSigned;
diff --git a/parameter/KindElementBuilderTemplate.h b/parameter/KindElementBuilderTemplate.h
index 3f6677b..f75882a 100644
--- a/parameter/KindElementBuilderTemplate.h
+++ b/parameter/KindElementBuilderTemplate.h
@@ -33,10 +33,10 @@
 #include "ElementBuilder.h"
 
 template <class ElementType>
-class CKindElementBuilderTemplate : public CElementBuilder
+class TKindElementBuilderTemplate : public CElementBuilder
 {
 public:
-    CKindElementBuilderTemplate(const string& strType) : CElementBuilder(strType) {}
+    TKindElementBuilderTemplate(const string& strType) : CElementBuilder(strType) {}
 
     virtual CElement* createElement(const CXmlElement& xmlElement) const
     {
diff --git a/parameter/MappingContext.cpp b/parameter/MappingContext.cpp
index 2f36c97..c460ab8 100644
--- a/parameter/MappingContext.cpp
+++ b/parameter/MappingContext.cpp
@@ -32,10 +32,10 @@
 #include <string.h>
 #include <stdlib.h>
 
-CMappingContext::CMappingContext(uint32_t uiNbItems) : _pstItemArray(new CMappingContext::SItem[uiNbItems]), _uiNbItems(uiNbItems)
+CMappingContext::CMappingContext(uint32_t uiNbItemTypes) : _pstItemArray(new CMappingContext::SItem[uiNbItemTypes]), _uiNbItemTypes(uiNbItemTypes)
 {
     // Clear items
-    memset(_pstItemArray, 0, sizeof(*_pstItemArray) * uiNbItems);
+    memset(_pstItemArray, 0, sizeof(*_pstItemArray) * uiNbItemTypes);
 }
 
 CMappingContext::~CMappingContext()
@@ -44,10 +44,10 @@
 }
 
 // Copy constructor
-CMappingContext::CMappingContext(const CMappingContext& from) : _pstItemArray(new CMappingContext::SItem[from._uiNbItems]), _uiNbItems(from._uiNbItems)
+CMappingContext::CMappingContext(const CMappingContext& from) : _pstItemArray(new CMappingContext::SItem[from._uiNbItemTypes]), _uiNbItemTypes(from._uiNbItemTypes)
 {
     // Copy content items
-    memcpy(_pstItemArray, from._pstItemArray, sizeof(*_pstItemArray) * _uiNbItems);
+    memcpy(_pstItemArray, from._pstItemArray, sizeof(*_pstItemArray) * _uiNbItemTypes);
 }
 
 // Affectation
@@ -56,23 +56,23 @@
     if (&right != this) {
 
         // Size
-        _uiNbItems = right._uiNbItems;
+        _uiNbItemTypes = right._uiNbItemTypes;
 
         // Content
         // Delete previous array
         delete [] _pstItemArray;
 
         // Reallocate it
-        _pstItemArray = new CMappingContext::SItem[_uiNbItems];
+        _pstItemArray = new CMappingContext::SItem[_uiNbItemTypes];
 
         // Copy content items
-        memcpy(_pstItemArray, right._pstItemArray, sizeof(*_pstItemArray) * _uiNbItems);
+        memcpy(_pstItemArray, right._pstItemArray, sizeof(*_pstItemArray) * _uiNbItemTypes);
     }
     return *this;
 }
 
 // Item access
-bool CMappingContext::setItem(uint32_t uiItemType, const string& strItem)
+bool CMappingContext::setItem(uint32_t uiItemType, const string* pStrItem)
 {
     // Do some checks
     if (_pstItemArray[uiItemType].bSet) {
@@ -81,7 +81,7 @@
         return false;
     }
     // Get item value
-    _pstItemArray[uiItemType].uiItem = strtoul(strItem.c_str(), NULL, 0);
+    _pstItemArray[uiItemType].strItem = pStrItem;
 
     // Now is set
     _pstItemArray[uiItemType].bSet = true;
@@ -89,9 +89,19 @@
     return true;
 }
 
-uint32_t CMappingContext::getItem(uint32_t uiItemType) const
+const string&  CMappingContext::getItem(uint32_t uiItemType) const
 {
-    return _pstItemArray[uiItemType].uiItem;
+    return *_pstItemArray[uiItemType].strItem;
+}
+
+uint32_t CMappingContext::getItemAsInteger(uint32_t uiItemType) const
+{
+    if (!_pstItemArray[uiItemType].strItem) {
+
+        return 0;
+    }
+
+    return strtoul(_pstItemArray[uiItemType].strItem->c_str(), NULL, 0);
 }
 
 bool CMappingContext::iSet(uint32_t uiItemType) const
diff --git a/parameter/MappingContext.h b/parameter/MappingContext.h
index aca9349..40f8438 100644
--- a/parameter/MappingContext.h
+++ b/parameter/MappingContext.h
@@ -39,13 +39,13 @@
 {
     // Item structure
     struct SItem {
-        uint32_t uiItem;
+        const string* strItem;
         bool bSet;
     };
 
 public:
     // Regular Constructor
-    CMappingContext(uint32_t uiNbItems);
+    CMappingContext(uint32_t uiNbItemTypes);
     ~CMappingContext();
 
     // Copy constructor
@@ -55,13 +55,14 @@
     const CMappingContext& operator=(const CMappingContext& right);
 
     // Item access
-    bool setItem(uint32_t uiItemType, const string& strItem);
-    uint32_t getItem(uint32_t uiItemType) const;
+    bool setItem(uint32_t uiItemType, const string* pStrItem);
+    const string& getItem(uint32_t uiItemType) const;
+    uint32_t getItemAsInteger(uint32_t uiItemType) const;
     bool iSet(uint32_t uiItemType) const;
 private:
     // Item array
     SItem* _pstItemArray;
     // Items array size
-    uint32_t _uiNbItems;
+    uint32_t _uiNbItemTypes;
 };
 
diff --git a/parameter/MappingData.cpp b/parameter/MappingData.cpp
index 7975eb8..145d522 100644
--- a/parameter/MappingData.cpp
+++ b/parameter/MappingData.cpp
@@ -42,7 +42,7 @@
 
     string strMapping = xmlElement.getAttributeString("Mapping");
 
-    Tokenizer mappingTok(strMapping, ", ");
+    Tokenizer mappingTok(strMapping, ",");
 
     string strMappingElement;
 
@@ -63,13 +63,13 @@
     return true;
 }
 
-bool CMappingData::getValue(const string& strkey, string& strValue) const
+bool CMappingData::getValue(const string& strkey, const string*& pStrValue) const
 {
     KeyToValueMapConstIterator it = _keyToValueMap.find(strkey);
 
     if (it != _keyToValueMap.end()) {
 
-        strValue = it->second;
+        pStrValue = &it->second;
 
         return true;
     }
diff --git a/parameter/MappingData.h b/parameter/MappingData.h
index 99be431..df140da 100644
--- a/parameter/MappingData.h
+++ b/parameter/MappingData.h
@@ -46,7 +46,7 @@
     virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
 
     // Query
-    bool getValue(const string& strkey, string& strValue) const;
+    bool getValue(const string& strkey, const string*& pStrValue) const;
 
 private:
     bool addValue(const string& strkey, const string& strValue);
diff --git a/parameter/NamedElementBuilderTemplate.h b/parameter/NamedElementBuilderTemplate.h
index 82bf2e1..793c3ac 100644
--- a/parameter/NamedElementBuilderTemplate.h
+++ b/parameter/NamedElementBuilderTemplate.h
@@ -33,10 +33,10 @@
 #include "ElementBuilder.h"
 
 template <class ElementType>
-class CNamedElementBuilderTemplate : public CElementBuilder
+class TNamedElementBuilderTemplate : public CElementBuilder
 {
 public:
-    CNamedElementBuilderTemplate(const string& strType) : CElementBuilder(strType) {}
+    TNamedElementBuilderTemplate(const string& strType) : CElementBuilder(strType) {}
 
     virtual CElement* createElement(const CXmlElement& xmlElement) const
     {
diff --git a/parameter/Parameter.cpp b/parameter/Parameter.cpp
index 5f1f389..57a78b1 100644
--- a/parameter/Parameter.cpp
+++ b/parameter/Parameter.cpp
@@ -50,16 +50,16 @@
 }
 
 // XML configuration settings parsing/composing
-bool CParameter::serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const
+bool CParameter::serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const
 {
     // Check for value space
-    handleValueSpaceAttribute(xmlConfigurableElementSettingsElement, configurationAccessContext);
+    handleValueSpaceAttribute(xmlConfigurationSettingsElementContent, configurationAccessContext);
 
     // Handle access
     if (!configurationAccessContext.serializeOut()) {
 
         // Write to blackboard
-        if (!doSetValue(xmlConfigurableElementSettingsElement.getTextContent(), getOffset() - configurationAccessContext.getBaseOffset(), configurationAccessContext)) {
+        if (!doSetValue(xmlConfigurationSettingsElementContent.getTextContent(), getOffset() - configurationAccessContext.getBaseOffset(), configurationAccessContext)) {
 
             // Append parameter path to error
             configurationAccessContext.appendToError(" " + getPath());
@@ -74,7 +74,7 @@
         doGetValue(strValue, getOffset() - configurationAccessContext.getBaseOffset(), configurationAccessContext);
 
         // Populate value into xml text node
-        xmlConfigurableElementSettingsElement.setTextContent(strValue);
+        xmlConfigurationSettingsElementContent.setTextContent(strValue);
     }
 
     // Done
diff --git a/parameter/Parameter.h b/parameter/Parameter.h
index dcb535f..c62f151 100644
--- a/parameter/Parameter.h
+++ b/parameter/Parameter.h
@@ -50,7 +50,7 @@
     virtual Type getType() const;
 
     // XML configuration settings parsing/composing
-    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const;
+    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const;
 protected:
     // Parameter Access
     virtual bool setValue(CPathNavigator& pathNavigator, const string& strValue, CErrorContext& errorContext) const;
@@ -59,9 +59,9 @@
     // Used for simulation only
     virtual void setDefaultValues(CParameterAccessContext& parameterAccessContext) const;
 
-    // To be implemented by derived
-    virtual bool doSetValue(const string& strValue, uint32_t uiOffset, CParameterAccessContext& parameterAccessContext) const;
-    virtual void doGetValue(string& strValue, uint32_t uiOffset, CParameterAccessContext& parameterAccessContext) const;
+    // Actual value access
+    bool doSetValue(const string& strValue, uint32_t uiOffset, CParameterAccessContext& parameterAccessContext) const;
+    void doGetValue(string& strValue, uint32_t uiOffset, CParameterAccessContext& parameterAccessContext) const;
 
     // Value space handling for configuration import
     void handleValueSpaceAttribute(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const;
diff --git a/parameter/ParameterAccessContext.cpp b/parameter/ParameterAccessContext.cpp
index 1508d73..e296d23 100644
--- a/parameter/ParameterAccessContext.cpp
+++ b/parameter/ParameterAccessContext.cpp
@@ -32,13 +32,16 @@
 
 #define base CErrorContext
 
-CParameterAccessContext::CParameterAccessContext(string& strError, CParameterBlackboard* pParameterBlackboard, bool bValueSpaceIsRaw) :
-    base(strError), _pParameterBlackboard(pParameterBlackboard), _bValueSpaceIsRaw(bValueSpaceIsRaw), _bBigEndianSubsystem(false), _bAutoSync(true)
+CParameterAccessContext::CParameterAccessContext(string& strError, CParameterBlackboard* pParameterBlackboard, bool bValueSpaceIsRaw, bool bOutputRawFormatIsHex) :
+    base(strError), _pParameterBlackboard(pParameterBlackboard),
+    _bValueSpaceIsRaw(bValueSpaceIsRaw), _bOutputRawFormatIsHex(bOutputRawFormatIsHex),
+    _bBigEndianSubsystem(false), _bAutoSync(true)
 {
 }
 
 CParameterAccessContext::CParameterAccessContext(string& strError) :
-    base(strError), _pParameterBlackboard(NULL), _bValueSpaceIsRaw(false), _bBigEndianSubsystem(false), _bAutoSync(true)
+    base(strError), _pParameterBlackboard(NULL), _bValueSpaceIsRaw(false),
+    _bOutputRawFormatIsHex(false), _bBigEndianSubsystem(false), _bAutoSync(true)
 {
 }
 
@@ -64,6 +67,17 @@
     return _bValueSpaceIsRaw;
 }
 
+// Output Raw Format for user get value interpretation
+void CParameterAccessContext::setOutputRawFormat(bool bIsHex)
+{
+    _bOutputRawFormatIsHex = bIsHex;
+}
+
+bool CParameterAccessContext::outputRawFormatIsHex()
+{
+    return _bOutputRawFormatIsHex;
+}
+
 // Endianness
 void CParameterAccessContext::setBigEndianSubsystem(bool bBigEndian)
 {
diff --git a/parameter/ParameterAccessContext.h b/parameter/ParameterAccessContext.h
index dbeb730..cfdca7f 100644
--- a/parameter/ParameterAccessContext.h
+++ b/parameter/ParameterAccessContext.h
@@ -37,17 +37,21 @@
 class CParameterAccessContext : public CErrorContext
 {
 public:
-    CParameterAccessContext(string& strError, CParameterBlackboard* pParameterBlackboard, bool bValueSpaceIsRaw);
+    CParameterAccessContext(string& strError, CParameterBlackboard* pParameterBlackboard, bool bValueSpaceIsRaw, bool bOutputRawFormatIsHex);
     CParameterAccessContext(string& strError);
 
     // ParameterBlackboard
     CParameterBlackboard* getParameterBlackboard();
     void setParameterBlackboard(CParameterBlackboard* pBlackboard);
 
-    // Value interpretation as Real or Raw (usefull for Fixed point parameters)
+    // Value interpretation as Real or Raw
     void setValueSpaceRaw(bool bIsRaw);
     bool valueSpaceIsRaw() const;
 
+    // Output Raw Format for user get value interpretation
+    void setOutputRawFormat(bool bIsHex);
+    bool outputRawFormatIsHex();
+
     // Endianness
     void setBigEndianSubsystem(bool bBigEndian);
     bool isBigEndianSubsystem() const;
@@ -61,6 +65,8 @@
     CParameterBlackboard* _pParameterBlackboard;
     // Value space
     bool _bValueSpaceIsRaw;
+    // Output Raw Format
+    bool _bOutputRawFormatIsHex;
     // Subsystem Endianness
     bool _bBigEndianSubsystem;
     // Automatic synchronization to HW
diff --git a/parameter/ParameterBlackboard.cpp b/parameter/ParameterBlackboard.cpp
index ecf4476..242c6a8 100644
--- a/parameter/ParameterBlackboard.cpp
+++ b/parameter/ParameterBlackboard.cpp
@@ -32,26 +32,26 @@
 #include <string.h>
 #include <assert.h>
 
-CParameterBlackboard::CParameterBlackboard() : _puiData(NULL), _uiSize(0)
+CParameterBlackboard::CParameterBlackboard() : _pucData(NULL), _uiSize(0)
 {
 }
 
 CParameterBlackboard::~CParameterBlackboard()
 {
-    delete [] _puiData;
+    delete [] _pucData;
 }
 
 // Size
 void CParameterBlackboard::setSize(uint32_t uiSize)
 {
-    if (_puiData) {
+    if (_pucData) {
 
-        delete [] _puiData;
+        delete [] _pucData;
     }
 
-    _puiData = new uint8_t[uiSize];
+    _pucData = new uint8_t[uiSize];
 
-    memset(_puiData, 0, uiSize);
+    memset(_pucData, 0, uiSize);
 
     _uiSize = uiSize;
 }
@@ -68,7 +68,7 @@
 
     if (!bBigEndian) {
 
-        memcpy(_puiData + uiOffset, pvSrcData, uiSize);
+        memcpy(_pucData + uiOffset, pvSrcData, uiSize);
     } else {
 
         uint32_t uiIndex;
@@ -76,7 +76,7 @@
 
         for (uiIndex = 0; uiIndex < uiSize; uiIndex++) {
 
-            _puiData[uiIndex + uiOffset] = puiSrcData[uiSize - uiIndex - 1];
+            _pucData[uiIndex + uiOffset] = puiSrcData[uiSize - uiIndex - 1];
         }
     }
 }
@@ -87,7 +87,7 @@
 
     if (!bBigEndian) {
 
-        memcpy(pvDstData, _puiData + uiOffset, uiSize);
+        memcpy(pvDstData, _pucData + uiOffset, uiSize);
     } else {
 
         uint32_t uiIndex;
@@ -95,35 +95,26 @@
 
         for (uiIndex = 0; uiIndex < uiSize; uiIndex++) {
 
-            puiDstData[uiSize - uiIndex - 1] = _puiData[uiIndex + uiOffset];
+            puiDstData[uiSize - uiIndex - 1] = _pucData[uiIndex + uiOffset];
         }
     }
 }
 
 // Access from/to subsystems
-void CParameterBlackboard::rawRead(void* pvDstData, uint32_t uiSize, uint32_t uiOffset) const
+uint8_t* CParameterBlackboard::getLocation(uint32_t uiOffset)
 {
-    assert(uiSize + uiOffset <= _uiSize);
-
-    memcpy(pvDstData, _puiData + uiOffset, uiSize);
-}
-
-void CParameterBlackboard::rawWrite(const void* pvDstData, uint32_t uiSize, uint32_t uiOffset)
-{
-    assert(uiSize + uiOffset <= _uiSize);
-
-    memcpy(_puiData + uiOffset, pvDstData, uiSize);
+    return _pucData + uiOffset;
 }
 
 // Configuration handling
 void CParameterBlackboard::restoreFrom(const CParameterBlackboard* pFromBlackboard, uint32_t uiOffset)
 {
-    memcpy(_puiData + uiOffset, pFromBlackboard->_puiData, pFromBlackboard->_uiSize);
+    memcpy(_pucData + uiOffset, pFromBlackboard->_pucData, pFromBlackboard->_uiSize);
 }
 
 void CParameterBlackboard::saveTo(CParameterBlackboard* pToBlackboard, uint32_t uiOffset) const
 {
-    memcpy(pToBlackboard->_puiData, _puiData + uiOffset, pToBlackboard->_uiSize);
+    memcpy(pToBlackboard->_pucData, _pucData + uiOffset, pToBlackboard->_uiSize);
 }
 
 // Serialization
@@ -131,9 +122,9 @@
 {
     if (binaryStream.isOut()) {
 
-        binaryStream.write(_puiData, _uiSize);
+        binaryStream.write(_pucData, _uiSize);
     } else {
 
-        binaryStream.read(_puiData, _uiSize);
+        binaryStream.read(_pucData, _uiSize);
     }
 }
diff --git a/parameter/ParameterBlackboard.h b/parameter/ParameterBlackboard.h
index 5812d0b..da4fc7b 100644
--- a/parameter/ParameterBlackboard.h
+++ b/parameter/ParameterBlackboard.h
@@ -50,8 +50,7 @@
     void read(void* pvDstData, uint32_t uiSize, uint32_t uiOffset, bool bBigEndian) const;
 
     // Access from/to subsystems
-    void rawRead(void* pvDstData, uint32_t uiSize, uint32_t uiOffset) const;
-    void rawWrite(const void* pvDstData, uint32_t uiSize, uint32_t uiOffset);
+    uint8_t* getLocation(uint32_t uiOffset);
 
     // Configuration handling
     void restoreFrom(const CParameterBlackboard* pFromBlackboard, uint32_t uiOffset);
@@ -60,7 +59,7 @@
     // Serialization
     void serialize(CBinaryStream& binaryStream);
 private:
-    uint8_t* _puiData;
+    uint8_t* _pucData;
     uint32_t _uiSize;
 };
 
diff --git a/parameter/ParameterMgr.cpp b/parameter/ParameterMgr.cpp
index b9e9f30..3ff76a5 100644
--- a/parameter/ParameterMgr.cpp
+++ b/parameter/ParameterMgr.cpp
@@ -50,7 +50,6 @@
 #include "FixedPointParameterType.h"
 #include "ParameterBlackboard.h"
 #include "Parameter.h"
-#include "ComputedSizeParameterType.h"
 #include "ParameterBlackboard.h"
 #include "ParameterAccessContext.h"
 #include "XmlFileIncluderElement.h"
@@ -75,7 +74,6 @@
 #include <strings.h>
 #include <dlfcn.h>
 #include <assert.h>
-#include <sstream>
 
 #define base CElement
 
@@ -112,12 +110,17 @@
     { "setTuningMode", &CParameterMgr::setTuningModeCommmandProcess, 1, "on|off*", "Turn on or off Tuning Mode" },
     { "getTuningMode", &CParameterMgr::getTuningModeCommmandProcess, 0, "", "Show Tuning Mode" },
     /// Value Space
-    { "setValueSpace", &CParameterMgr::setValueSpaceCommmandProcess, 1, "raw|real*", "Assigns Value Space used for fixed point integer value interpretation" },
+    { "setValueSpace", &CParameterMgr::setValueSpaceCommmandProcess, 1, "raw|real*", "Assigns Value Space used for parameter value interpretation" },
     { "getValueSpace", &CParameterMgr::getValueSpaceCommmandProcess, 0, "", "Show Value Space" },
+    /// Output Raw Format
+    { "setOutputRawFormat", &CParameterMgr::setOutputRawFormatCommmandProcess, 1, "dec*|hex", "Assigns format used to output parameter values when in raw Value Space" },
+    { "getOutputRawFormat", &CParameterMgr::getOutputRawFormatCommmandProcess, 0, "", "Show Output Raw Format" },
     /// Sync
     { "setAutoSync", &CParameterMgr::setAutoSyncCommmandProcess, 1, "on*|off", "Turn on or off automatic synchronization to hardware while in Tuning Mode" },
     { "getAutoSync", &CParameterMgr::getAutoSyncCommmandProcess, 0, "", "Show Auto Sync state" },
     { "sync", &CParameterMgr::syncCommmandProcess, 0, "", "Synchronize current settings to hardware while in Tuning Mode and Auto Sync off" },
+    /// Criteria
+    { "listCriteria", &CParameterMgr::listCriteriaCommmandProcess, 0, "", "List available selection criteria" },
     /// Domains
     { "listDomains", &CParameterMgr::listDomainsCommmandProcess, 0, "", "List configurable domains" },
     { "createDomain", &CParameterMgr::createDomainCommmandProcess, 1, "<domain>", "Create new configurable domain" },
@@ -136,7 +139,7 @@
     { "restoreConfiguration", &CParameterMgr::restoreConfigurationCommmandProcess, 2, "<domain> <configuration>", "Restore current settings from configuration" },
     /// Elements/Parameters
     { "listElements", &CParameterMgr::listElementsCommmandProcess, 1, "<elem path>|/", "List elements under element at given path or root" },
-    { "listElementsRecursive", &CParameterMgr::listElementsRecursiveCommmandProcess, 1, "<elem path>|/", "Recursively list elements under element at given path or root" },
+    { "listParameters", &CParameterMgr::listParametersCommmandProcess, 1, "<elem path>|/", "Recursively list elements under element at given path or root" },
     { "dumpElement", &CParameterMgr::dumpElementCommmandProcess, 1, "<elem path>", "Dump structure and content of element at given path" },
     { "getElementSize", &CParameterMgr::getElementSizeCommmandProcess, 1, "<elem path>", "Show size of element at given path" },
     { "getParameter", &CParameterMgr::getParameterCommmandProcess, 1, "<elem ath>", "Get value for parameter at given path" },
@@ -161,6 +164,7 @@
 CParameterMgr::CParameterMgr(const string& strParameterFrameworkConfigurationFolderPath, const string& strSystemClassName) :
     _bTuningModeIsOn(false),
     _bValueSpaceIsRaw(false),
+    _bOutputRawFormatIsHex(false),
     _bAutoSyncOn(true),
     _pMainParameterBlackboard(new CParameterBlackboard),
     _pElementLibrarySet(new CElementLibrarySet),
@@ -370,6 +374,8 @@
     // Parse Structure XML file
     CXmlParameterSerializingContext parameterBuildContext(strError);
 
+    log("Importing system structure from file %s", strXmlStructureFilePath.c_str());
+
     if (!xmlParse(parameterBuildContext, pSystemClass, strXmlStructureFilePath, strXmlStructureFolder, EParameterCreationLibrary)) {
 
         return false;
@@ -432,6 +438,8 @@
     // Selection criteria definition for rule creation
     xmlDomainSerializingContext.setSelectionCriteriaDefinition(getConstSelectionCriteria()->getSelectionCriteriaDefinition());
 
+    log("Importing configurable domains from file %s %s settings", strXmlConfigurationDomainsFilePath.c_str(), pBinarySettingsFileLocation ? "without" : "with");
+
     // Do parse
     if (!xmlParse(xmlDomainSerializingContext, pConfigurableDomains, strXmlConfigurationDomainsFilePath, strXmlConfigurationDomainsFolder, EParameterConfigurationLibrary, "SystemClassName")) {
 
@@ -544,7 +552,7 @@
 // Selection criteria changed event
 void CParameterMgr::selectionCriterionChanged(const CSelectionCriterion* pSelectionCriterion)
 {
-    CAutoLog autoLog(this, pSelectionCriterion->getName() + " selection criterion changed event");
+    CAutoLog autoLog(this, "Selection criterion changed event: " + pSelectionCriterion->getFormattedDescription(false));
 
     // Lock state
     pthread_mutex_lock(&_tuningModeMutex);
@@ -665,41 +673,52 @@
     // System class
     const CSystemClass* pSystemClass = getSystemClass();
 
-    strResult = "\n";
-
     // Show status
-    /// System class
+    /// General section
+    appendTitle(strResult, "General:");
+    // System class
     strResult += "System Class: ";
     strResult += pSystemClass->getName();
     strResult += "\n";
 
-    /// Tuning mode
+    // Tuning mode
     strResult += "Tuning Mode: ";
     strResult += tuningModeOn() ? "on" : "off";
     strResult += "\n";
 
-    /// Value space
+    // Value space
     strResult += "Value Space: ";
     strResult += valueSpaceIsRaw() ? "raw" : "real";
     strResult += "\n";
 
-    /// Value space
+    // Output raw format
+    strResult += "Output Raw Format: ";
+    strResult += outputRawFormatIsHex() ? "hex" : "dec";
+    strResult += "\n";
+
+    // Auto Sync
     strResult += "Auto Sync: ";
     strResult += autoSyncOn() ? "on" : "off";
     strResult += "\n";
 
     /// Subsystem list
-    strResult += "\nSubsystems:";
+    appendTitle(strResult, "Subsystems:");
     string strSubsystemList;
     pSystemClass->listChildrenPaths(strSubsystemList);
     strResult += strSubsystemList;
 
     /// Last applied configurations
-    strResult += "\nLast applied configurations:";
+    appendTitle(strResult, "Last applied configurations:");
     string strLastAppliedConfigurations;
     getConfigurableDomains()->listLastAppliedConfigurations(strLastAppliedConfigurations);
     strResult += strLastAppliedConfigurations;
 
+    /// Criteria states
+    appendTitle(strResult, "Selection criteria:");
+    string strSelectionCriteria;
+    getSelectionCriteria()->listSelectionCriteria(strSelectionCriteria, false);
+    strResult += strSelectionCriteria;
+
     return ESucceeded;
 }
 
@@ -767,6 +786,39 @@
     return ESucceeded;
 }
 
+/// Output Raw Format
+CParameterMgr::CommandStatus CParameterMgr::setOutputRawFormatCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
+{
+    (void)strResult;
+
+    if (remoteCommand.getArgument(0) == "hex") {
+
+        setOutputRawFormat(true);
+
+        return EDone;
+
+    } else if (remoteCommand.getArgument(0) == "dec") {
+
+        setOutputRawFormat(false);
+
+        return EDone;
+
+    } else {
+        // Show usage
+        return EShowUsgae;
+    }
+    return EFailed;
+}
+
+CParameterMgr::CommandStatus CParameterMgr::getOutputRawFormatCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
+{
+    (void)remoteCommand;
+
+    strResult = outputRawFormatIsHex() ? "hex" : "dec";
+
+    return ESucceeded;
+}
+
 /// Sync
 CParameterMgr::CommandStatus CParameterMgr::setAutoSyncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
 {
@@ -805,6 +857,15 @@
     return sync(strResult) ? EDone : EFailed;
 }
 
+/// Criteria
+CParameterMgr::CommandStatus CParameterMgr::listCriteriaCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
+{
+    (void)remoteCommand;
+
+    getSelectionCriteria()->listSelectionCriteria(strResult, true);
+
+    return ESucceeded;
+}
 
 /// Domains
 CParameterMgr::CommandStatus CParameterMgr::listDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
@@ -911,7 +972,7 @@
 }
 
 /// Elements/Parameters
-CParameterMgr::CommandStatus CParameterMgr::listElementsRecursiveCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
+CParameterMgr::CommandStatus CParameterMgr::listParametersCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
 {
     CElementLocator elementLocator(getSystemClass(), false);
 
@@ -951,7 +1012,7 @@
 
     string strError;
 
-    CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw);
+    CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw, _bOutputRawFormatIsHex);
 
     // Dump elements
     pLocatedElement->dumpContent(strResult, parameterAccessContext);
@@ -974,11 +1035,7 @@
     const CConfigurableElement* pConfigurableElement = static_cast<const CConfigurableElement*>(pLocatedElement);
 
     // Get size as string
-    ostringstream str;
-
-    str << endl << pConfigurableElement->getFootPrint() << " bytes" << endl;
-
-    strResult = str.str();
+    strResult = pConfigurableElement->getFootprintAsString();
 
     return ESucceeded;
 }
@@ -999,7 +1056,7 @@
 
 CParameterMgr::CommandStatus CParameterMgr::setParameterCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
 {
-    return setValue(remoteCommand.getArgument(0), remoteCommand.getArgument(1), strResult) ? EDone : EFailed;
+    return setValue(remoteCommand.getArgument(0), remoteCommand.packArguments(1, remoteCommand.getArgumentCount() - 1), strResult) ? EDone : EFailed;
 }
 
 CParameterMgr::CommandStatus CParameterMgr::listBelongingDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
@@ -1135,7 +1192,7 @@
     }
 
     // Define context
-    CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw);
+    CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw, _bOutputRawFormatIsHex);
 
     // Set auto sync
     parameterAccessContext.setAutoSync(_bAutoSyncOn);
@@ -1172,7 +1229,7 @@
     }
 
     // Define context
-    CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw);
+    CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw, _bOutputRawFormatIsHex);
 
     // Do the get
     return getConstSystemClass()->getValue(pathNavigator, strValue, parameterAccessContext);
@@ -1229,6 +1286,17 @@
     return _bValueSpaceIsRaw;
 }
 
+// Current Output Raw Format for user get value interpretation
+void CParameterMgr::setOutputRawFormat(bool bIsHex)
+{
+    _bOutputRawFormatIsHex = bIsHex;
+}
+
+bool CParameterMgr::outputRawFormatIsHex()
+{
+    return _bOutputRawFormatIsHex;
+}
+
 /// Sync
 // Automatic hardware synchronization control (during tuning session)
 bool CParameterMgr::setAutoSync(bool bAutoSyncOn, string& strError)
@@ -1289,7 +1357,7 @@
 {
     string strError;
 
-    CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw);
+    CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw, _bOutputRawFormatIsHex);
 
     dumpContent(strContent, parameterAccessContext);
 }
@@ -1499,6 +1567,9 @@
     // Value space
     xmlDomainSerializingContext.setValueSpaceRaw(_bValueSpaceIsRaw);
 
+    // Output raw format
+    xmlDomainSerializingContext.setOutputRawFormat(_bOutputRawFormatIsHex);
+
     // Instantiate composer
     CXmlComposer xmlComposer(strFileName, strXmlSchemaFilePath, pConfigurableDomains->getKind(), xmlDomainSerializingContext);
 
@@ -1582,15 +1653,15 @@
     // Global Configuration handling
     CElementLibrary* pFrameworkConfigurationLibrary = new CElementLibrary;
 
-    pFrameworkConfigurationLibrary->addElementBuilder(new CElementBuilderTemplate<CParameterFrameworkConfiguration>("ParameterFrameworkConfiguration"));
-    pFrameworkConfigurationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CFrameworkConfigurationGroup>("SubsystemPluginFolders"));
-    pFrameworkConfigurationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CFrameworkConfigurationLocation>("PluginFolderLocation"));
-    pFrameworkConfigurationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CFrameworkConfigurationGroup>("ParameterConfiguration"));
-    pFrameworkConfigurationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CSystemClassConfiguration>("SystemClassConfiguration"));
-    pFrameworkConfigurationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CFrameworkConfigurationLocation>("StructureDescriptionFileLocation"));
-    pFrameworkConfigurationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CFrameworkConfigurationGroup>("SettingsConfiguration"));
-    pFrameworkConfigurationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CFrameworkConfigurationLocation>("ConfigurableDomainsFileLocation"));
-    pFrameworkConfigurationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CFrameworkConfigurationLocation>("BinarySettingsFileLocation"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TElementBuilderTemplate<CParameterFrameworkConfiguration>("ParameterFrameworkConfiguration"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationGroup>("SubsystemPluginFolders"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>("PluginFolderLocation"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationGroup>("ParameterConfiguration"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CSystemClassConfiguration>("SystemClassConfiguration"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>("StructureDescriptionFileLocation"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationGroup>("SettingsConfiguration"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>("ConfigurableDomainsFileLocation"));
+    pFrameworkConfigurationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CFrameworkConfigurationLocation>("BinarySettingsFileLocation"));
 
     _pElementLibrarySet->addElementLibrary(pFrameworkConfigurationLibrary);
 
@@ -1598,26 +1669,25 @@
     CElementLibrary* pParameterCreationLibrary = new CElementLibrary;
 
     pParameterCreationLibrary->addElementBuilder(new CSubsystemElementBuilder(getSystemClass()->getSubsystemLibrary()));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CComponentType>("ComponentType"));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CComponentInstance>("Component"));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CBitParameterType>("BitParameter"));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CBitParameterBlockType>("BitParameterBlock"));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CParameterBlockType>("ParameterBlock"));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CBooleanParameterType>("BooleanParameter"));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CIntegerParameterType>("IntegerParameter"));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CFixedPointParameterType>("FixedPointParameter"));
-    pParameterCreationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CComputedSizeParameterType>("ComputedSizeParameter"));
-    pParameterCreationLibrary->addElementBuilder(new CKindElementBuilderTemplate<CXmlFileIncluderElement>("SubsystemInclude"));
+    pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CComponentType>("ComponentType"));
+    pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CComponentInstance>("Component"));
+    pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CBitParameterType>("BitParameter"));
+    pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CBitParameterBlockType>("BitParameterBlock"));
+    pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CParameterBlockType>("ParameterBlock"));
+    pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CBooleanParameterType>("BooleanParameter"));
+    pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CIntegerParameterType>("IntegerParameter"));
+    pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CFixedPointParameterType>("FixedPointParameter"));
+    pParameterCreationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CXmlFileIncluderElement>("SubsystemInclude"));
 
     _pElementLibrarySet->addElementLibrary(pParameterCreationLibrary);
 
     // Parameter Configuration Domains creation
     CElementLibrary* pParameterConfigurationLibrary = new CElementLibrary;
 
-    pParameterConfigurationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CConfigurableDomain>("ConfigurableDomain"));
-    pParameterConfigurationLibrary->addElementBuilder(new CNamedElementBuilderTemplate<CDomainConfiguration>("Configuration"));
-    pParameterConfigurationLibrary->addElementBuilder(new CElementBuilderTemplate<CCompoundRule>("CompoundRule"));
-    pParameterConfigurationLibrary->addElementBuilder(new CElementBuilderTemplate<CSelectionCriterionRule>("SelectionCriterionRule"));
+    pParameterConfigurationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CConfigurableDomain>("ConfigurableDomain"));
+    pParameterConfigurationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CDomainConfiguration>("Configuration"));
+    pParameterConfigurationLibrary->addElementBuilder(new TElementBuilderTemplate<CCompoundRule>("CompoundRule"));
+    pParameterConfigurationLibrary->addElementBuilder(new TElementBuilderTemplate<CSelectionCriterionRule>("SelectionCriterionRule"));
 
     _pElementLibrarySet->addElementLibrary(pParameterConfigurationLibrary);
 }
diff --git a/parameter/ParameterMgr.h b/parameter/ParameterMgr.h
index a4ef01a..e1843d9 100644
--- a/parameter/ParameterMgr.h
+++ b/parameter/ParameterMgr.h
@@ -122,6 +122,10 @@
     void setValueSpace(bool bIsRaw);
     bool valueSpaceIsRaw();
 
+    // Current Output Raw Format for user get value interpretation
+    void setOutputRawFormat(bool bIsHex);
+    bool outputRawFormatIsHex();
+
     // Automatic hardware synchronization control (during tuning session)
     bool setAutoSync(bool bAutoSyncOn, string& strError);
     bool autoSyncOn() const;
@@ -183,10 +187,15 @@
     /// Value Space
     CommandStatus setValueSpaceCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     CommandStatus getValueSpaceCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
+    /// Output Raw Format
+    CommandStatus setOutputRawFormatCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
+    CommandStatus getOutputRawFormatCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     /// Sync
     CommandStatus setAutoSyncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     CommandStatus getAutoSyncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     CommandStatus syncCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
+    /// Criteria
+    CommandStatus listCriteriaCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     /// Domains
     CommandStatus listDomainsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     CommandStatus createDomainCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
@@ -205,7 +214,7 @@
     CommandStatus restoreConfigurationCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     /// Elements/Parameters
     CommandStatus listElementsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
-    CommandStatus listElementsRecursiveCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
+    CommandStatus listParametersCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     CommandStatus dumpElementCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     CommandStatus getElementSizeCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
     CommandStatus getParameterCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
@@ -274,6 +283,9 @@
     // Value Space
     bool _bValueSpaceIsRaw;
 
+    // Output Raw Format
+    bool _bOutputRawFormatIsHex;
+
     // Automatic synchronization to HW during Tuning session
     bool _bAutoSyncOn;
 
diff --git a/parameter/ParameterType.cpp b/parameter/ParameterType.cpp
index 9a23c40..054c5e8 100644
--- a/parameter/ParameterType.cpp
+++ b/parameter/ParameterType.cpp
@@ -95,3 +95,58 @@
     }
 }
 
+// Sign extension
+void CParameterType::signExtend(int32_t& iData) const
+{
+    uint32_t uiSizeInBits = _uiSize << 3;
+    uint32_t uiShift = 32 - uiSizeInBits;
+
+    if (uiShift) {
+
+        iData = (iData << uiShift) >> uiShift;
+    }
+}
+
+// Check data has no bit set outside available range
+bool CParameterType::isEncodable(uint32_t uiData) const
+{
+    uint32_t uiSizeInBits = _uiSize << 3;
+    uint32_t uiShift = 32 - uiSizeInBits;
+
+    if (uiShift) {
+
+        // Check high bits are clean
+        return !(uiData >> uiShift);
+    }
+
+    return true;
+}
+
+// Remove all bits set outside available range
+uint32_t CParameterType::makeEncodable(uint32_t uiData) const
+{
+    uint32_t uiSizeInBits = _uiSize << 3;
+
+    uint32_t uiMask = (1 << uiSizeInBits) - 1;
+
+    return uiData & uiMask;
+}
+
+// Check data is consistent with available range, with respect to its sign
+bool CParameterType::isConsistent(uint32_t uiData, bool bSigned) const
+{
+    uint32_t uiSizeInBits = _uiSize << 3;
+    uint32_t uiShift = 32 - uiSizeInBits;
+
+    if (uiShift) {
+
+        // Negative value?
+        bool bIsValueExpectedNegative = bSigned && (uiData & (1 << (uiShift - 1))) != 0;
+
+        // Check high bits are clean
+        return bIsValueExpectedNegative ? !(~uiData >> uiShift) : !(uiData >> uiShift);
+    }
+
+    return true;
+}
+
diff --git a/parameter/ParameterType.h b/parameter/ParameterType.h
index 9f136a9..0c7e0ff 100644
--- a/parameter/ParameterType.h
+++ b/parameter/ParameterType.h
@@ -65,8 +65,17 @@
 protected:
     // Size
     void setSize(uint32_t uiSize);
+    // Sign extension
+    void signExtend(int32_t& iData) const;
+    // Check data has no bit set outside available range
+    bool isEncodable(uint32_t uiData) const;
+    // Remove all bits set outside available range
+    uint32_t makeEncodable(uint32_t uiData) const;
+    // Check data is consistent with available range, with respect to its sign
+    bool isConsistent(uint32_t uiData, bool bSigned) const;
 
 private:
+    // Instantiation
     virtual CInstanceConfigurableElement* doInstantiate() const;
 
     // Size in bytes
diff --git a/parameter/SelectionCriteria.cpp b/parameter/SelectionCriteria.cpp
index f92807c..9377e31 100644
--- a/parameter/SelectionCriteria.cpp
+++ b/parameter/SelectionCriteria.cpp
@@ -63,6 +63,12 @@
     getSelectionCriteriaDefinition()->setObserver(pSelectionCriterionObserver);
 }
 
+// List available criteria
+void CSelectionCriteria::listSelectionCriteria(string& strResult, bool bWithTypeInfo) const
+{
+    getSelectionCriteriaDefinition()->listSelectionCriteria(strResult, bWithTypeInfo);
+}
+
 // Children access
 CSelectionCriterionLibrary* CSelectionCriteria::getSelectionCriterionLibrary()
 {
diff --git a/parameter/SelectionCriteria.h b/parameter/SelectionCriteria.h
index 70528a9..4751d59 100644
--- a/parameter/SelectionCriteria.h
+++ b/parameter/SelectionCriteria.h
@@ -57,6 +57,9 @@
     // Subscription
     void setObserver(ISelectionCriterionObserver* pSelectionCriterionObserver);
 
+    // List available criteria
+    void listSelectionCriteria(string& strResult, bool bWithTypeInfo) const;
+
     // Base
     virtual string getKind() const;
 private:
diff --git a/parameter/SelectionCriteriaDefinition.cpp b/parameter/SelectionCriteriaDefinition.cpp
index eae8944..e23f326 100644
--- a/parameter/SelectionCriteriaDefinition.cpp
+++ b/parameter/SelectionCriteriaDefinition.cpp
@@ -70,3 +70,19 @@
         pSelectionCriterion->setObserver(pSelectionCriterionObserver);
     }
 }
+
+// List available criteria
+void CSelectionCriteriaDefinition::listSelectionCriteria(string& strResult, bool bWithTypeInfo) const
+{
+    // Propagate
+    uint32_t uiNbChildren = getNbChildren();
+    uint32_t uiChild;
+
+    for (uiChild = 0; uiChild < uiNbChildren; uiChild++) {
+
+        const CSelectionCriterion* pSelectionCriterion = static_cast<const CSelectionCriterion*>(getChild(uiChild));
+
+        strResult += pSelectionCriterion->getFormattedDescription(bWithTypeInfo) + "\n";
+    }
+}
+
diff --git a/parameter/SelectionCriteriaDefinition.h b/parameter/SelectionCriteriaDefinition.h
index 2e1a2d6..e8487b5 100644
--- a/parameter/SelectionCriteriaDefinition.h
+++ b/parameter/SelectionCriteriaDefinition.h
@@ -49,6 +49,9 @@
     // Subscription
     void setObserver(ISelectionCriterionObserver* pSelectionCriterionObserver);
 
+    // List available criteria
+    void listSelectionCriteria(string& strResult, bool bWithTypeInfo) const;
+
     // Base
     virtual string getKind() const;
 };
diff --git a/parameter/SelectionCriterion.cpp b/parameter/SelectionCriterion.cpp
index 4c032bb..9640b3b 100644
--- a/parameter/SelectionCriterion.cpp
+++ b/parameter/SelectionCriterion.cpp
@@ -82,12 +82,56 @@
 }
 
 /// Match methods
-bool CSelectionCriterion::equals(int iState) const
+bool CSelectionCriterion::is(int iState) const
 {
     return _iState == iState;
 }
 
-bool CSelectionCriterion::contains(int iState) const
+bool CSelectionCriterion::isNot(int iState) const
+{
+    return _iState != iState;
+}
+
+bool CSelectionCriterion::includes(int iState) const
 {
     return (_iState & iState) != 0;
 }
+
+bool CSelectionCriterion::excludes(int iState) const
+{
+    return (_iState & iState) == 0;
+}
+
+/// User request
+string CSelectionCriterion::getFormattedDescription(bool bWithTypeInfo) const
+{
+    string strFormattedDescription;
+
+    if (bWithTypeInfo) {
+
+        // Display type info
+        appendTitle(strFormattedDescription, getName() + ":");
+
+        // States
+        strFormattedDescription += "Possible states ";
+
+        // Type Kind
+        strFormattedDescription += "(";
+        strFormattedDescription += _pType->isTypeInclusive() ? "Inclusive" : "Exclusive";
+        strFormattedDescription += "): ";
+
+        // States
+        strFormattedDescription += _pType->listPossibleValues() + "\n";
+
+        // Current State
+        strFormattedDescription += "Current state";
+    } else {
+        // Name only
+        strFormattedDescription = getName();
+    }
+
+    // Current State
+    strFormattedDescription += " = " + _pType->getFormattedState(_iState);
+
+    return strFormattedDescription;
+}
diff --git a/parameter/SelectionCriterion.h b/parameter/SelectionCriterion.h
index 8bdca68..e7b44fe 100644
--- a/parameter/SelectionCriterion.h
+++ b/parameter/SelectionCriterion.h
@@ -57,8 +57,13 @@
     void setObserver(ISelectionCriterionObserver* pSelectionCriterionObserver);
 
     /// Match methods
-    bool equals(int iState) const;
-    bool contains(int iState) const;
+    bool is(int iState) const;
+    bool isNot(int iState) const;
+    bool includes(int iState) const;
+    bool excludes(int iState) const;
+
+    /// User request
+    string getFormattedDescription(bool bWithTypeInfo) const;
 
     /// From CElement
     virtual string getKind() const;
diff --git a/parameter/SelectionCriterionRule.cpp b/parameter/SelectionCriterionRule.cpp
index 4b5956c..e43c9e8 100644
--- a/parameter/SelectionCriterionRule.cpp
+++ b/parameter/SelectionCriterionRule.cpp
@@ -32,13 +32,16 @@
 #include "SelectionCriterion.h"
 #include "XmlDomainSerializingContext.h"
 #include "SelectionCriteriaDefinition.h"
+#include "SelectionCriterionTypeInterface.h"
 #include <assert.h>
 
 #define base CRule
 
-const char* CSelectionCriterionRule::_apcMatchesWhen[CSelectionCriterionRule::ENbMatchesWhen] = {
-    "Is",
-    "Contains"
+CSelectionCriterionRule::SMatchingRuleDescription CSelectionCriterionRule::_astMatchesWhen[CSelectionCriterionRule::ENbMatchesWhen] = {
+    { "Is", false },
+    { "IsNot", false },
+    { "Includes", true },
+    { "Excludes", true }
 };
 
 CSelectionCriterionRule::CSelectionCriterionRule() : _pSelectionCriterion(NULL), _eMatchesWhen(CSelectionCriterionRule::EIs), _iMatchValue(0)
@@ -58,9 +61,13 @@
 
     switch(_eMatchesWhen) {
     case EIs:
-        return _pSelectionCriterion->equals(_iMatchValue);
-    case EContains:
-        return _pSelectionCriterion->contains(_iMatchValue);
+        return _pSelectionCriterion->is(_iMatchValue);
+    case EIsNot:
+        return _pSelectionCriterion->isNot(_iMatchValue);
+    case EIncludes:
+        return _pSelectionCriterion->includes(_iMatchValue);
+    case EExcludes:
+        return _pSelectionCriterion->excludes(_iMatchValue);
     default:
         assert(0);
         return false;
@@ -88,10 +95,11 @@
 
     // Get MatchesWhen
     string strMatchesWhen = xmlElement.getAttributeString("MatchesWhen");
+    string strError;
 
-    if (!setMatchesWhen(strMatchesWhen)) {
+    if (!setMatchesWhen(strMatchesWhen, strError)) {
 
-        xmlDomainSerializingContext.setError("Wrong MatchesWhen attribute " + strMatchesWhen + " in " + getKind() + " " + xmlElement.getPath());
+        xmlDomainSerializingContext.setError("Wrong MatchesWhen attribute " + strMatchesWhen + " in " + getKind() + " " + xmlElement.getPath() + ": " + strError);
 
         return false;
     }
@@ -121,7 +129,7 @@
     xmlElement.setAttributeString("SelectionCriterion", _pSelectionCriterion->getName());
 
     // Set MatchesWhen
-    xmlElement.setAttributeString("MatchesWhen", _apcMatchesWhen[_eMatchesWhen]);
+    xmlElement.setAttributeString("MatchesWhen", _astMatchesWhen[_eMatchesWhen].pcMatchesWhen);
 
     // Set Value
     string strValue;
@@ -132,19 +140,37 @@
 }
 
 // XML MatchesWhen attribute parsing
-bool CSelectionCriterionRule::setMatchesWhen(const string& strMatchesWhen)
+bool CSelectionCriterionRule::setMatchesWhen(const string& strMatchesWhen, string& strError)
 {
     uint32_t uiMatchesWhen;
 
     for (uiMatchesWhen = 0; uiMatchesWhen < ENbMatchesWhen; uiMatchesWhen++) {
 
-        if (strMatchesWhen == _apcMatchesWhen[uiMatchesWhen]) {
+        const SMatchingRuleDescription* pstMatchingRuleDescription = &_astMatchesWhen[uiMatchesWhen];
+
+        if (strMatchesWhen == pstMatchingRuleDescription->pcMatchesWhen) {
 
             // Found it!
+
+            // Get Type
+            const ISelectionCriterionTypeInterface* pSelectionCriterionType = _pSelectionCriterion->getCriterionType();
+
+            // Check compatibility if relevant
+            if (pSelectionCriterionType->isTypeInclusive() && !pstMatchingRuleDescription->bInclusiveTypeCompatible) {
+
+                strError = "Value incompatible with inclusive kind of type";
+
+                return false;
+            }
+
+            // Store
             _eMatchesWhen = (MatchesWhen)uiMatchesWhen;
 
             return true;
         }
     }
+
+    strError = "Value not found";
+
     return false;
 }
diff --git a/parameter/SelectionCriterionRule.h b/parameter/SelectionCriterionRule.h
index ebd7611..528e584 100644
--- a/parameter/SelectionCriterionRule.h
+++ b/parameter/SelectionCriterionRule.h
@@ -36,12 +36,21 @@
 
 class CSelectionCriterionRule : public CRule
 {
+    // Matching rules
     enum MatchesWhen {
         EIs,
-        EContains,
+        EIsNot,
+        EIncludes,
+        EExcludes,
 
         ENbMatchesWhen
     };
+    // Matching rule description
+    struct SMatchingRuleDescription
+    {
+        const char* pcMatchesWhen;
+        bool bInclusiveTypeCompatible;
+    };
 
 public:
     CSelectionCriterionRule();
@@ -58,12 +67,12 @@
     // Class kind
     virtual string getKind() const;
 private:
+    // XML MatchesWhen attribute parsing
+    bool setMatchesWhen(const string& strMatchesWhen, string& strError);
+
     // Selection criterion
     const CSelectionCriterion* _pSelectionCriterion;
 
-    // XML MatchesWhen attribute parsing
-    bool setMatchesWhen(const string& strMatchesWhen);
-
     // MatchesWhen
     MatchesWhen _eMatchesWhen;
 
@@ -71,6 +80,6 @@
     int32_t _iMatchValue;
 
     // Used for XML MatchesWhen attribute parsing
-    static const char* _apcMatchesWhen[ENbMatchesWhen];
+    static SMatchingRuleDescription _astMatchesWhen[ENbMatchesWhen];
 };
 
diff --git a/parameter/SelectionCriterionType.cpp b/parameter/SelectionCriterionType.cpp
index 2e562da..478fb43 100644
--- a/parameter/SelectionCriterionType.cpp
+++ b/parameter/SelectionCriterionType.cpp
@@ -42,15 +42,21 @@
 }
 
 // From ISelectionCriterionTypeInterface
-std::string CSelectionCriterionType::getCriterionTypeName()
-{
-    return getName();
-}
-
 bool CSelectionCriterionType::addValuePair(int iValue, const string& strValue)
 {
+    // Check 1 bit set only for inclusive types
+    if (_bInclusive && (!iValue || (iValue & (iValue - 1)))) {
+
+        log("Rejecting value pair association: 0x%X - %s for Selection Criterion Type %s", iValue, strValue.c_str(), getName().c_str());
+
+        return false;
+    }
+
+    // Check already inserted
     if (_numToLitMap.find(strValue) != _numToLitMap.end()) {
 
+        log("Rejecting value pair association (literal already present): 0x%X - %s for Selection Criterion Type %s", iValue, strValue.c_str(), getName().c_str());
+
         return false;
     }
     _numToLitMap[strValue] = iValue;
@@ -91,3 +97,78 @@
 {
     return _bInclusive;
 }
+
+// Value list
+string CSelectionCriterionType::listPossibleValues() const
+{
+    string strValueList = "{";
+
+    // Get comma seprated list of values
+    NumToLitMapConstIt it;
+    bool bFirst = true;
+
+    for (it = _numToLitMap.begin(); it != _numToLitMap.end(); ++it) {
+
+        if (bFirst) {
+
+            bFirst = false;
+        } else {
+            strValueList += ", ";
+        }
+        strValueList += it->first;
+    }
+
+    strValueList += "}";
+
+    return strValueList;
+}
+
+// Formatted state
+string CSelectionCriterionType::getFormattedState(int iValue) const
+{
+    string strFormattedState;
+
+    if (_bInclusive) {
+
+        // Need to go through all set bit
+        uint32_t uiBit;
+        bool bFirst = true;
+
+        for (uiBit = 0; uiBit < sizeof(iValue) << 3; uiBit++) {
+
+            int iSingleBitValue = iValue & (1 << uiBit);
+
+            // Check if current bit is set
+            if (!iSingleBitValue) {
+
+                continue;
+            }
+
+            // Simple translation
+            string strSingleValue;
+
+            getLiteralValue(iSingleBitValue, strSingleValue);
+
+            if (bFirst) {
+
+                bFirst = false;
+            } else {
+                strFormattedState += "|";
+            }
+
+            strFormattedState += strSingleValue;
+        }
+
+    } else {
+        // Simple translation
+        getLiteralValue(iValue, strFormattedState);
+    }
+
+    // Sometimes nothing is set
+    if (strFormattedState.empty()) {
+
+        strFormattedState = "<none>";
+    }
+
+    return strFormattedState;
+}
diff --git a/parameter/SelectionCriterionType.h b/parameter/SelectionCriterionType.h
index ca0571f..d534b8f 100644
--- a/parameter/SelectionCriterionType.h
+++ b/parameter/SelectionCriterionType.h
@@ -43,12 +43,17 @@
     CSelectionCriterionType(bool bIsInclusive);
 
     // From ISelectionCriterionTypeInterface
-    virtual std::string getCriterionTypeName();
     virtual bool addValuePair(int iValue, const string& strValue);
     virtual bool getNumericalValue(const string& strValue, int& iValue) const;
     virtual bool getLiteralValue(int iValue, string& strValue) const;
     virtual bool isTypeInclusive() const;
 
+    // Value list
+    string listPossibleValues() const;
+
+    // Formatted state
+    string getFormattedState(int iValue) const;
+
     // From CElement
     virtual string getKind() const;
 private:
diff --git a/parameter/Subsystem.cpp b/parameter/Subsystem.cpp
index a501f91..25da60a 100644
--- a/parameter/Subsystem.cpp
+++ b/parameter/Subsystem.cpp
@@ -125,12 +125,12 @@
 }
 
 // XML configuration settings parsing
-bool CSubsystem::serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const
+bool CSubsystem::serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const
 {
     // Fix Endianness
     configurationAccessContext.setBigEndianSubsystem(_bBigEndian);
 
-    return base::serializeXmlSettings(xmlConfigurableElementSettingsElement, configurationAccessContext);
+    return base::serializeXmlSettings(xmlConfigurationSettingsElementContent, configurationAccessContext);
 }
 
 
@@ -208,7 +208,7 @@
 }
 
 // Subsystem object creator publication (strong reference)
-void CSubsystem::addSubsystemObjectCreator(CSubsystemObjectCreator* pSubsystemObjectCreator)
+void CSubsystem::addSubsystemObjectFactory(CSubsystemObjectCreator* pSubsystemObjectCreator)
 {
     _subsystemObjectCreatorArray.push_back(pSubsystemObjectCreator);
 }
@@ -222,11 +222,11 @@
     for (uiItem = 0; uiItem < _contextMappingKeyArray.size(); uiItem++) {
 
         string strKey = _contextMappingKeyArray[uiItem];
-        string strValue;
+        const string* pStrValue;
 
-        if (pInstanceConfigurableElement->getMappingData(strKey, strValue)) {
+        if (pInstanceConfigurableElement->getMappingData(strKey, pStrValue)) {
             // Assign item to context
-            if (!context.setItem(uiItem, strValue)) {
+            if (!context.setItem(uiItem, pStrValue)) {
 
                 getMappingError(strError, strKey, "Already set", pInstanceConfigurableElement);
 
@@ -249,39 +249,41 @@
         // Mapping key
         string strKey = pSubsystemObjectCreator->getMappingKey();
         // Object id
-        string strId;
+        const string* pStrValue;
 
-        if (pInstanceConfigurableElement->getMappingData(strKey, strId)) {
+        if (pInstanceConfigurableElement->getMappingData(strKey, pStrValue)) {
 
-            // First check context consisteny
+            // First check context consistensy (required ancestors must have been set prior to object creation)
             uint32_t uiAncestorKey;
             uint32_t uiAncestorMask = pSubsystemObjectCreator->getAncestorMask();
 
-            for (uiAncestorKey = 0; uiAncestorKey & uiAncestorMask; uiAncestorKey++) {
+            for (uiAncestorKey = 0; uiAncestorKey < _contextMappingKeyArray.size(); uiAncestorKey++) {
 
-                string strAncestorKey = _subsystemObjectCreatorArray[uiAncestorKey]->getMappingKey();
-
+                if (!((1 << uiAncestorKey) & uiAncestorMask)) {
+                    // Ancestor not required
+                    continue;
+                }
+                // Check ancestor was provided
                 if (!context.iSet(uiAncestorKey)) {
 
-                    getMappingError(strError, strKey, strAncestorKey + " not set", pInstanceConfigurableElement);
+                    getMappingError(strError, strKey, _contextMappingKeyArray[uiAncestorKey] + " not set", pInstanceConfigurableElement);
 
                     return false;
                 }
             }
 
-            // Do create object
-            string strCreationError;
+            // Then check configurable element size is correct
+            if (pInstanceConfigurableElement->getFootPrint() > pSubsystemObjectCreator->getMaxConfigurableElementSize()) {
 
-            CSubsystemObject* pSubsystemObject = pSubsystemObjectCreator->objectCreate(strId, pInstanceConfigurableElement, context, strCreationError);
+                string strSizeError = "Size should not exceed " + pInstanceConfigurableElement->getFootprintAsString();
 
-            if (!pSubsystemObject) {
-
-                getMappingError(strError, strKey, strCreationError, pInstanceConfigurableElement);
+                getMappingError(strError, strKey, strSizeError, pInstanceConfigurableElement);
 
                 return false;
             }
-            // Keep track of created object
-            _subsystemObjectList.push_back(pSubsystemObject);
+
+            // Do create object and keep its track
+            _subsystemObjectList.push_back(pSubsystemObjectCreator->objectCreate(*pStrValue, pInstanceConfigurableElement, context));
 
             // Done
             return true;
diff --git a/parameter/Subsystem.h b/parameter/Subsystem.h
index af98608..14dcdb4 100644
--- a/parameter/Subsystem.h
+++ b/parameter/Subsystem.h
@@ -56,7 +56,7 @@
     bool isBigEndian() const;
 
     // XML configuration settings parsing
-    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const;
+    virtual bool serializeXmlSettings(CXmlElement& xmlConfigurationSettingsElementContent, CConfigurationAccessContext& configurationAccessContext) const;
 
     // from CElement
     virtual string getKind() const;
@@ -72,7 +72,7 @@
     // Subsystem context mapping keys publication
     void addContextMappingKey(const string& strMappingKey);
     // Subsystem object creator publication (strong reference)
-    void addSubsystemObjectCreator(CSubsystemObjectCreator* pSubsystemObjectCreator);
+    void addSubsystemObjectFactory(CSubsystemObjectCreator* pSubsystemObjectCreator);
 private:
     // Belonging subsystem
     virtual const CSubsystem* getBelongingSubsystem() const;
diff --git a/parameter/SubsystemObject.cpp b/parameter/SubsystemObject.cpp
index fb53520..f0f1985 100644
--- a/parameter/SubsystemObject.cpp
+++ b/parameter/SubsystemObject.cpp
@@ -32,9 +32,15 @@
 #include "InstanceConfigurableElement.h"
 #include "ParameterBlackboard.h"
 #include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sstream>
 
 CSubsystemObject::CSubsystemObject(CInstanceConfigurableElement* pInstanceConfigurableElement)
-    : _pInstanceConfigurableElement(pInstanceConfigurableElement), _uiDataSize(pInstanceConfigurableElement->getFootPrint()), _pvSynchronizedLocation(NULL)
+    : _pInstanceConfigurableElement(pInstanceConfigurableElement),
+      _uiDataSize(pInstanceConfigurableElement->getFootPrint()),
+      _pucBlackboardLocation(NULL),
+      _uiAccessedIndex(0)
 {
     // Syncer
     _pInstanceConfigurableElement->setSyncer(this);
@@ -45,10 +51,10 @@
     _pInstanceConfigurableElement->unsetSyncer();
 }
 
-// Synchronized location
-void CSubsystemObject::setSynchronizedLocation(void* pvSynchronizedLocation)
+// Blackboard data location
+uint8_t* CSubsystemObject::getBlackboardLocation() const
 {
-    _pvSynchronizedLocation = pvSynchronizedLocation;
+    return _pucBlackboardLocation;
 }
 
 // Size
@@ -57,10 +63,28 @@
     return _uiDataSize;
 }
 
+// Conversion utility
+uint32_t CSubsystemObject::asInteger(const string& strValue)
+{
+    return strtoul(strValue.c_str(), NULL, 0);
+}
+
+string CSubsystemObject::asString(uint32_t uiValue)
+{
+    ostringstream ostr;
+
+    ostr << uiValue;
+
+    return ostr.str();
+}
+
 // Synchronization
 bool CSubsystemObject::sync(CParameterBlackboard& parameterBlackboard, bool bBack, string& strError)
 {
-    assert(_pvSynchronizedLocation);
+    // Get blackboard location
+    _pucBlackboardLocation = parameterBlackboard.getLocation(_pInstanceConfigurableElement->getOffset());
+    // Access index init
+    _uiAccessedIndex = 0;
 
 #ifdef SIMULATION
     return true;
@@ -70,28 +94,69 @@
     if (bBack) {
 
         // Read from HW
-        if (!receiveFromHW()) {
+        if (!accessHW(true, strError)) {
 
-            strError = "Unable to back synchronize configurable element " + _pInstanceConfigurableElement->getPath();
+            strError = "Unable to back synchronize configurable element " + _pInstanceConfigurableElement->getPath() + ": " + strError;
 
             return false;
         }
 
-        // Write parameter block data
-        parameterBlackboard.rawWrite(_pvSynchronizedLocation, _uiDataSize, _pInstanceConfigurableElement->getOffset());
-
     } else {
 
-        // Read parameter block data
-        parameterBlackboard.rawRead(_pvSynchronizedLocation, _uiDataSize, _pInstanceConfigurableElement->getOffset());
-
         // Send to HW
-        if (!sendToHW()) {
+        if (!accessHW(false, strError)) {
 
-            strError = "Unable to synchronize configurable element " + _pInstanceConfigurableElement->getPath();
+            strError = "Unable to synchronize configurable element " + _pInstanceConfigurableElement->getPath() + ": " + strError;
 
             return false;
         }
     }
     return true;
 }
+
+// Sync to/from HW
+bool CSubsystemObject::sendToHW(string& strError)
+{
+    strError = "Send to HW interface not implemented at subsystsem level!";
+
+    return false;
+}
+
+bool CSubsystemObject::receiveFromHW(string& strError)
+{
+    strError = "Receive from HW interface not implemented at subsystsem level!";
+
+    return false;
+}
+
+// Fall back HW access
+bool CSubsystemObject::accessHW(bool bReceive, string& strError)
+{
+    // Default access falls back
+    if (bReceive) {
+
+        return receiveFromHW(strError);
+    } else {
+
+        return sendToHW(strError);
+    }
+}
+
+// Blackboard access from subsystems
+void CSubsystemObject::blackboardRead(void* pvData, uint32_t uiSize)
+{
+    assert(_uiAccessedIndex + uiSize <= _uiDataSize);
+
+    memcpy(pvData, _pucBlackboardLocation + _uiAccessedIndex, uiSize);
+
+    _uiAccessedIndex += uiSize;
+}
+
+void CSubsystemObject::blackboardWrite(const void* pvData, uint32_t uiSize)
+{
+    assert(_uiAccessedIndex + uiSize <= _uiDataSize);
+
+    memcpy(_pucBlackboardLocation + _uiAccessedIndex, pvData, uiSize);
+
+    _uiAccessedIndex += uiSize;
+}
diff --git a/parameter/SubsystemObject.h b/parameter/SubsystemObject.h
index c4e88fb..e702c87 100644
--- a/parameter/SubsystemObject.h
+++ b/parameter/SubsystemObject.h
@@ -45,20 +45,30 @@
     virtual bool sync(CParameterBlackboard& parameterBlackboard, bool bBack, string& strError);
 
 protected:
-    // Synchronized location
-    void setSynchronizedLocation(void* pvSynchronizedLocation);
+    // Blackboard data location
+    uint8_t* getBlackboardLocation() const;
     // Size
     uint32_t getSize() const;
+    // Conversion utility
+    static uint32_t asInteger(const string& strValue);
+    static string asString(uint32_t uiValue);
 
     // Sync to/from HW
-    virtual bool sendToHW() = 0;
-    virtual bool receiveFromHW() = 0;
+    virtual bool sendToHW(string& strError);
+    virtual bool receiveFromHW(string& strError);
+    // Fall back HW access
+    virtual bool accessHW(bool bReceive, string& strError);
+    // Blackboard access from subsystems
+    void blackboardRead(void* pvData, uint32_t uiSize);
+    void blackboardWrite(const void* pvData, uint32_t uiSize);
 private:
     // Instance element to sync from/to
     CInstanceConfigurableElement* _pInstanceConfigurableElement;
     // Data size
     uint32_t _uiDataSize;
-    // Synchronized location
-    void* _pvSynchronizedLocation;
+    // Blackboard data location
+    uint8_t* _pucBlackboardLocation;
+    // Accessed index for Subsystem read/write from/to blackboard
+    uint32_t _uiAccessedIndex;
 };
 
diff --git a/parameter/SubsystemObjectCreator.cpp b/parameter/SubsystemObjectCreator.cpp
index b0f0dde..3a719bc 100644
--- a/parameter/SubsystemObjectCreator.cpp
+++ b/parameter/SubsystemObjectCreator.cpp
@@ -30,8 +30,8 @@
  */
 #include "SubsystemObjectCreator.h"
 
-CSubsystemObjectCreator::CSubsystemObjectCreator(const string& strMappingKey, uint32_t uiAncestorIdMask)
-    : _strMappingKey(strMappingKey), _uiAncestorIdMask(uiAncestorIdMask)
+CSubsystemObjectCreator::CSubsystemObjectCreator(const string& strMappingKey, uint32_t uiAncestorIdMask, uint32_t uiMaxConfigurableElementSize)
+    : _strMappingKey(strMappingKey), _uiAncestorIdMask(uiAncestorIdMask), _uiMaxConfigurableElementSize(uiMaxConfigurableElementSize)
 {
 }
 
@@ -45,3 +45,8 @@
 {
     return _uiAncestorIdMask;
 }
+
+uint32_t CSubsystemObjectCreator::getMaxConfigurableElementSize() const
+{
+    return _uiMaxConfigurableElementSize;
+}
diff --git a/parameter/SubsystemObjectCreator.h b/parameter/SubsystemObjectCreator.h
index 91ad5be..aad7528 100644
--- a/parameter/SubsystemObjectCreator.h
+++ b/parameter/SubsystemObjectCreator.h
@@ -39,19 +39,22 @@
 class CSubsystemObjectCreator
 {
 public:
-    CSubsystemObjectCreator(const string& strMappingKey, uint32_t uiAncestorIdMask);
+    CSubsystemObjectCreator(const string& strMappingKey, uint32_t uiAncestorIdMask, uint32_t uiMaxConfigurableElementSize);
 
     // Accessors
     const string& getMappingKey() const;
     uint32_t getAncestorMask() const;
+    uint32_t getMaxConfigurableElementSize() const;
 
     // Object creation
-    virtual CSubsystemObject* objectCreate(const string& strId, CInstanceConfigurableElement* pInstanceConfigurableElement, CMappingContext& context, string& strError) const = 0;
+    virtual CSubsystemObject* objectCreate(const string& strMappingValue, CInstanceConfigurableElement* pInstanceConfigurableElement, const CMappingContext& context) const = 0;
 
 private:
     // Mapping key
     string _strMappingKey;
     // Mask of must-be-specified ancestors
     uint32_t _uiAncestorIdMask;
+    // Masximum expected size for configurable elment (-1 means none)
+    uint32_t _uiMaxConfigurableElementSize;
 };
 
diff --git a/parameter/ComputedSizeParameter.h b/parameter/SubsystemObjectFactory.h
similarity index 64%
rename from parameter/ComputedSizeParameter.h
rename to parameter/SubsystemObjectFactory.h
index 99c1ad2..b8016c4 100644
--- a/parameter/ComputedSizeParameter.h
+++ b/parameter/SubsystemObjectFactory.h
@@ -1,10 +1,10 @@
 /* <auto_header>
  * <FILENAME>
- * 
+ *
  * INTEL CONFIDENTIAL
- * Copyright © 2011 Intel 
+ * Copyright © 2011 Intel
  * Corporation All Rights Reserved.
- * 
+ *
  * The source code contained or described herein and all documents related to
  * the source code ("Material") are owned by Intel Corporation or its suppliers
  * or licensors. Title to the Material remains with Intel Corporation or its
@@ -14,38 +14,33 @@
  * treaty provisions. No part of the Material may be used, copied, reproduced,
  * modified, published, uploaded, posted, transmitted, distributed, or
  * disclosed in any way without Intel’s prior express written permission.
- * 
+ *
  * No license under any patent, copyright, trade secret or other intellectual
  * property right is granted to or conferred upon you by disclosure or delivery
  * of the Materials, either expressly, by implication, inducement, estoppel or
  * otherwise. Any license under such intellectual property rights must be
  * express and approved by Intel in writing.
- * 
+ *
  *  AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com)
  * CREATED: 2011-06-01
  * UPDATED: 2011-07-27
- * 
- * 
+ *
+ *
  * </auto_header>
  */
 #pragma once
 
-#include "Parameter.h"
+#include "SubsystemObjectCreator.h"
 
-class CConfigurableElement;
-
-class CComputedSizeParameter : public CParameter
+template <class SubsystemObjectType>
+class TSubsystemObjectFactory : public CSubsystemObjectCreator
 {
 public:
-    CComputedSizeParameter(const string& strName, const CTypeElement* pTypeElement);
+    TSubsystemObjectFactory(const string& strMappingKey, uint32_t uiAncestorIdMask, uint32_t uiMaxConfigurableElementSize = -1) : CSubsystemObjectCreator(strMappingKey, uiAncestorIdMask, uiMaxConfigurableElementSize) {}
 
-    virtual bool init(string& strError);
-
-    virtual uint32_t getFootPrint() const;
-protected:
-    virtual bool doSetValue(const string& strValue, uint32_t uiOffset, CParameterAccessContext& parameterAccessContext);
-    virtual void doGetValue(string& strValue, uint32_t uiOffset, CParameterAccessContext& parameterAccessContext) const;
-private:
-    const CConfigurableElement* _pReferredElement;
+    // Object creation
+    virtual CSubsystemObject* objectCreate(const string& strMappingValue, CInstanceConfigurableElement* pInstanceConfigurableElement, const CMappingContext& context) const
+    {
+        return new SubsystemObjectType(strMappingValue, pInstanceConfigurableElement, context);
+    }
 };
-
diff --git a/parameter/TypeElement.cpp b/parameter/TypeElement.cpp
index 2b9c663..34b3ce0 100644
--- a/parameter/TypeElement.cpp
+++ b/parameter/TypeElement.cpp
@@ -55,11 +55,11 @@
     return _uiArrayLength;
 }
 
-bool CTypeElement::getMappingData(const string& strKey, string& strValue) const
+bool CTypeElement::getMappingData(const string& strKey, const string*& pStrValue) const
 {
     if (_pMappingData) {
 
-        return _pMappingData->getValue(strKey, strValue);
+        return _pMappingData->getValue(strKey, pStrValue);
     }
     return false;
 }
diff --git a/parameter/TypeElement.h b/parameter/TypeElement.h
index 9391729..3468c35 100644
--- a/parameter/TypeElement.h
+++ b/parameter/TypeElement.h
@@ -45,7 +45,7 @@
     CInstanceConfigurableElement* instantiate() const;
 
     // Mapping info
-    virtual bool getMappingData(const string& strKey, string& strValue) const;
+    virtual bool getMappingData(const string& strKey, const string*& pStrValue) const;
     virtual bool hasMappingData() const;
 
     // From IXmlSink
diff --git a/parameter/XmlDomainSerializingContext.cpp b/parameter/XmlDomainSerializingContext.cpp
index 34a465c..cb5a20d 100644
--- a/parameter/XmlDomainSerializingContext.cpp
+++ b/parameter/XmlDomainSerializingContext.cpp
@@ -33,7 +33,7 @@
 #define base CXmlElementSerializingContext
 
 CXmlDomainSerializingContext::CXmlDomainSerializingContext(string& strError, bool bWithSettings)
-    : base(strError), _bWithSettings(bWithSettings), _bValueSpaceIsRaw(false), _pSelectionCriteriaDefinition(NULL)
+    : base(strError), _bWithSettings(bWithSettings), _bValueSpaceIsRaw(false), _bOutputRawFormatIsHex(false), _pSelectionCriteriaDefinition(NULL)
 {
 }
 
@@ -54,6 +54,17 @@
     return _bValueSpaceIsRaw;
 }
 
+// Output Raw Format for user get value interpretation
+void CXmlDomainSerializingContext::setOutputRawFormat(bool bIsHex)
+{
+    _bOutputRawFormatIsHex = bIsHex;
+}
+
+bool CXmlDomainSerializingContext::outputRawFormatIsHex()
+{
+    return _bOutputRawFormatIsHex;
+}
+
 // Criteria defintion
 void CXmlDomainSerializingContext::setSelectionCriteriaDefinition(const CSelectionCriteriaDefinition* pSelectionCriteriaDefinition)
 {
diff --git a/parameter/XmlDomainSerializingContext.h b/parameter/XmlDomainSerializingContext.h
index 770f14b..c63552c 100644
--- a/parameter/XmlDomainSerializingContext.h
+++ b/parameter/XmlDomainSerializingContext.h
@@ -43,10 +43,14 @@
     // Settings to be serialized or not
     bool withSettings() const;
 
-    // Value interpretation as Real or Raw (usefull for Fixed point parameters)
+    // Value interpretation as Real or Raw
     void setValueSpaceRaw(bool bIsRaw);
     bool valueSpaceIsRaw() const;
 
+    // Output Raw Format for user get value interpretation
+    void setOutputRawFormat(bool bIsHex);
+    bool outputRawFormatIsHex();
+
     // ParameterBlackboard
     const CParameterBlackboard* getParameterBlackboard() const;
 
@@ -59,6 +63,8 @@
     bool _bWithSettings;
     // Value Space
     bool _bValueSpaceIsRaw;
+    // Output Raw Format
+    bool _bOutputRawFormatIsHex;
     // Criteria defintion
     const CSelectionCriteriaDefinition* _pSelectionCriteriaDefinition;
 };
diff --git a/parameter/parameter b/parameter/parameter
index 837edd0..6d8ad82 100755
--- a/parameter/parameter
+++ b/parameter/parameter
@@ -1,2 +1,2 @@
-#! /bin/sh
+#!/bin/sh
 ./remote-process localhost 5000 $*
diff --git a/remote-processor/RemoteCommand.h b/remote-processor/RemoteCommand.h
index 8409468..e55d3cb 100644
--- a/remote-processor/RemoteCommand.h
+++ b/remote-processor/RemoteCommand.h
@@ -43,4 +43,5 @@
     virtual void addArgument(const std::string& strArgument) = 0;
     virtual uint32_t getArgumentCount() const = 0;
     virtual const std::string& getArgument(uint32_t uiArgument) const = 0;
+    virtual const std::string packArguments(uint32_t uiStartArgument, uint32_t uiNbArguments) const = 0;
 };
diff --git a/remote-processor/RequestMessage.cpp b/remote-processor/RequestMessage.cpp
index 6f71b8a..8c6c2a3 100644
--- a/remote-processor/RequestMessage.cpp
+++ b/remote-processor/RequestMessage.cpp
@@ -73,6 +73,33 @@
     return _argumentVector[uiArgument];
 }
 
+const string CRequestMessage::packArguments(uint32_t uiStartArgument, uint32_t uiNbArguments) const
+{
+    string strPackedArguments;
+
+    assert(uiStartArgument + uiNbArguments <= _argumentVector.size());
+
+    // Pack arguments, separating them with a space
+    uint32_t uiArgument;
+
+    bool bFirst = true;
+
+    for (uiArgument = uiStartArgument; uiArgument < uiStartArgument + uiNbArguments; uiArgument++) {
+
+        if (!bFirst) {
+
+            strPackedArguments += " ";
+        } else {
+
+            bFirst = false;
+        }
+
+        strPackedArguments += _argumentVector[uiArgument];
+    }
+
+    return strPackedArguments;
+}
+
 // Fill data to send
 void CRequestMessage::fillDataToSend()
 {
diff --git a/remote-processor/RequestMessage.h b/remote-processor/RequestMessage.h
index c0b2183..8428aad 100644
--- a/remote-processor/RequestMessage.h
+++ b/remote-processor/RequestMessage.h
@@ -47,6 +47,7 @@
     virtual void addArgument(const string& strArgument);
     virtual uint32_t getArgumentCount() const;
     virtual const string& getArgument(uint32_t uiArgument) const;
+    virtual const string packArguments(uint32_t uiStartArgument, uint32_t uiNbArguments) const;
 
 private:
     // Fill data to send
diff --git a/xmlserializer/XmlElement.cpp b/xmlserializer/XmlElement.cpp
index cea7a1d..11b9a94 100644
--- a/xmlserializer/XmlElement.cpp
+++ b/xmlserializer/XmlElement.cpp
@@ -166,6 +166,20 @@
     return false;
 }
 
+uint32_t CXmlElement::getNbChildElements() const
+{
+    CXmlElement childElement;
+    uint32_t uiNbChildren = 0;
+
+    CChildIterator childIterator(*this);
+
+    while (childIterator.next(childElement)) {
+
+        uiNbChildren++;
+    }
+    return uiNbChildren;
+}
+
 bool CXmlElement::getParentElement(CXmlElement& parentElement) const
 {
     _xmlNode* pXmlNode = _pXmlElement->parent;
diff --git a/xmlserializer/XmlElement.h b/xmlserializer/XmlElement.h
index 797179f..1028d60 100644
--- a/xmlserializer/XmlElement.h
+++ b/xmlserializer/XmlElement.h
@@ -64,6 +64,7 @@
     // Navigation
     bool getChildElement(const string& strType, CXmlElement& childElement) const;
     bool getChildElement(const string& strType, const string& strNameAttribute, CXmlElement& childElement) const;
+    uint32_t getNbChildElements() const;
     bool getParentElement(CXmlElement& parentElement) const;
 
     // Setters