diff --git a/src/uas/UASParameterDataModel.cc b/src/uas/UASParameterDataModel.cc
index 8effd14..8396594 100644
--- a/src/uas/UASParameterDataModel.cc
+++ b/src/uas/UASParameterDataModel.cc
@@ -7,20 +7,44 @@ UASParameterDataModel::UASParameterDataModel(QObject *parent) :
 {
 
 
+}
 
+void UASParameterDataModel::addPendingIfParameterChanged(int componentId, QString& key,  QVariant &value)
+{
+    addComponent(componentId);
+    QMap<QString, QVariant> *existParams = getOnbardParametersForComponent(componentId);
+    QMap<QString, QVariant> *pendParams = getPendingParametersForComponent(componentId);
+
+    QVariant existValue = existParams->value(key);
+    QVariant pendValue = pendParams->value(key);
+    if (!(existValue == pendValue)) {
+        setPendingParameter(componentId,key,value);
+    }
+}
 
 
+void UASParameterDataModel::setPendingParameter(int componentId, QString& key,  QVariant &value)
+{
+    //ensure we have a placeholder map for this component
+    addComponent(componentId);
+    QMap<QString, QVariant> *params = getPendingParametersForComponent(componentId);
+    params->insert(key,value);
 }
 
+void UASParameterDataModel::setOnboardParameter(int componentId, QString& key,  QVariant &value)
+{
+    //ensure we have a placeholder map for this component
+    addComponent(componentId);
+    QMap<QString, QVariant> *params = getOnbardParametersForComponent(componentId);
+    params->insert(key,value);
+}
 
-void UASParameterDataModel::setPendingParameter(int componentId, QString& key,  QVariant &value)
+void UASParameterDataModel::addComponent(int componentId)
 {
-    QMap<QString, QVariant> *compPendingParams = pendingParameters.value(componentId);
-    //TODO insert blank map if necessary
-    if (NULL == compPendingParams) {
-        pendingParameters.insert(componentId,new QMap<QString, QVariant>());
-        compPendingParams = pendingParameters.value(componentId);
+    if (!onboardParameters.contains(componentId)) {
+        onboardParameters.insert(componentId, new QMap<QString, QVariant>());
+    }
+    if (!pendingParameters.contains(componentId)) {
+        pendingParameters.insert(componentId, new QMap<QString, QVariant>());
     }
-
-    compPendingParams->insert(key,value);
 }
diff --git a/src/uas/UASParameterDataModel.h b/src/uas/UASParameterDataModel.h
index 60bfbbf..7122d52 100644
--- a/src/uas/UASParameterDataModel.h
+++ b/src/uas/UASParameterDataModel.h
@@ -12,8 +12,23 @@ public:
     explicit UASParameterDataModel(QObject *parent = 0);
     
 
+    virtual void addComponent(int componentId);
+
     /** @brief Write a new pending parameter value that may be eventually sent to the UAS */
     virtual void setPendingParameter(int componentId,  QString& paramKey,  QVariant& paramValue);
+    virtual void setOnboardParameter(int componentId, QString& key,  QVariant &value);
+
+    /** @brief add this parameter to pending list iff it has changed from onboard value */
+    virtual void addPendingIfParameterChanged(int componentId, QString& key,  QVariant &value);
+
+
+    QMap<QString , QVariant>* getPendingParametersForComponent(int componentId) {
+        return pendingParameters.value(componentId);
+    }
+
+    QMap<QString , QVariant>* getOnbardParametersForComponent(int componentId) {
+        return onboardParameters.value(componentId);
+    }
 
     QMap<int, QMap<QString, QVariant>* >  getPendingParameters() {
        return pendingParameters;