diff --git a/src/ui/QGCPendingParamWidget.cc b/src/ui/QGCPendingParamWidget.cc
index 384547f..35402d9 100644
--- a/src/ui/QGCPendingParamWidget.cc
+++ b/src/ui/QGCPendingParamWidget.cc
@@ -75,13 +75,39 @@ void QGCPendingParamWidget::handlePendingParamUpdate(int compId, const QString&
     }
     else {
         //we don't display non-pending items
-        QTreeWidgetItem* parentItem = paramItem->parent();
+        QTreeWidgetItem* groupItem = paramItem->parent();
+        if (NULL != groupItem) {
+            tree->setUpdatesEnabled(false);
+            QTreeWidgetItem* componentItem = NULL;
+            if (1 == groupItem->childCount()) {
+                componentItem = groupItem->parent();
+            }
+
+            //always remove the actual paramItem from its parent
+            groupItem->removeChild(paramItem);
+
+            //now we may need to remove the groupItem if it has no more children
+            if (NULL != componentItem) {
+                //remove the group from our internal data structures
+                QMap<QString, QTreeWidgetItem*>* compParamGroups = paramGroups.value(compId);
+                QString groupStr = paramName.section("_", 0, 0, QString::SectionSkipEmpty);
+                compParamGroups->remove(groupStr);
+                //remove the group item from componentItems
+                componentItems->value(compId)->removeChild(groupItem);
+                // remove the group item from the tree widget itself
+                componentItem->removeChild(groupItem);
+
+                if (0 == componentItem->childCount()) {
+                    //the component itself no longer has any pending changes: remove it
+                    paramGroups.remove(compId);
+                    componentItems->remove(compId);
+                    QTreeWidgetItem* compTop = tree->takeTopLevelItem(tree->indexOfTopLevelItem(componentItem));
+                    delete compTop; //we own it after take
+                }
+            }
+            tree->setUpdatesEnabled(true);
+            tree->update();
 
-        if (NULL != parentItem && 1 == parentItem->childCount()) {
-            parentItem->parent()->removeChild(parentItem);
-        }
-        else {
-            paramItem->parent()->removeChild(paramItem);
         }
     }