diff --git a/src/ui/QGCParamWidget.cc b/src/ui/QGCParamWidget.cc
index a81782238573ceaadd54ad9446c4c4c87ecedae6..f241196b6f36334ea2775400a514c5443aae4120 100644
--- a/src/ui/QGCParamWidget.cc
+++ b/src/ui/QGCParamWidget.cc
@@ -311,6 +311,39 @@ QTreeWidgetItem* QGCParamWidget::getParentWidgetItemForParam(int compId, const Q
     return parentItem;
 }
 
+void QGCParamWidget::insertParamAlphabetical(int indexLowerBound, int indexUpperBound, QTreeWidgetItem* parentItem, QTreeWidgetItem* paramItem)
+{
+    if (indexLowerBound >= indexUpperBound)
+    {
+        if (paramItem->text(0).compare(parentItem->child(indexLowerBound)->text(0)) < 0) {
+            parentItem->insertChild(indexLowerBound, paramItem);
+        }
+        else
+        {
+            if (indexLowerBound < parentItem->childCount() - 1) {
+                parentItem->insertChild(indexLowerBound + 1, paramItem);
+            }
+            else
+            {
+                parentItem->addChild(paramItem);
+            }
+        }
+    }
+    else
+    {
+        int midpoint = indexLowerBound + floor(indexUpperBound - indexLowerBound)/2;
+
+        if (paramItem->text(0).compare(parentItem->child(midpoint)->text(0)) < 0)
+        {
+            insertParamAlphabetical(indexLowerBound, midpoint - 1, parentItem, paramItem);
+        } else
+        {
+            insertParamAlphabetical(midpoint + 1, indexUpperBound, parentItem, paramItem);
+        }
+
+    }
+}
+
 QTreeWidgetItem* QGCParamWidget::updateParameterDisplay(int compId, QString parameterName, QVariant value)
 {
     //qDebug() << "QGCParamWidget::updateParameterDisplay" << parameterName;
@@ -343,8 +376,13 @@ QTreeWidgetItem* QGCParamWidget::updateParameterDisplay(int compId, QString para
             }
             paramItem->setFlags(paramItem->flags() | Qt::ItemIsEditable);
 
-            //TODO insert alphabetically
-            parentItem->addChild(paramItem);
+            //Insert alphabetically
+            if (parentItem->childCount() > 0) {
+                insertParamAlphabetical(0, parentItem->childCount() - 1, parentItem, paramItem);
+            } else
+            {
+                parentItem->addChild(paramItem);
+            }
 
             //only add the tooltip when the parameter item is first added
             QString paramDesc = paramMgr->dataModel()->getParamDescription(parameterName);
diff --git a/src/ui/QGCParamWidget.h b/src/ui/QGCParamWidget.h
index 83787de1d43193de0684c93972791865ed0c8216..98b5d044a2b98ad28c7c6204aab14f732cf24348 100644
--- a/src/ui/QGCParamWidget.h
+++ b/src/ui/QGCParamWidget.h
@@ -83,10 +83,12 @@ public slots:
     virtual void clearOnboardParamDisplay();
     virtual void clearPendingParamDisplay();
 
+    /** @brief Adds parameter at the correct location by a alphapetical comparison of the parameter names */
+    void insertParamAlphabetical(int indexLowerBound, int indexUpperBound, QTreeWidgetItem* parentItem, QTreeWidgetItem* paramItem);
+
     /** @brief Ensure that view of parameter matches data in the model */
     QTreeWidgetItem* updateParameterDisplay(int component, QString parameterName, QVariant value);
 
-
     /** @brief Update when user changes parameters */
     void parameterItemChanged(QTreeWidgetItem* prev, int column);