diff --git a/src/applications/project/controller/PhabricatorProjectColumnEditController.php b/src/applications/project/controller/PhabricatorProjectColumnEditController.php
--- a/src/applications/project/controller/PhabricatorProjectColumnEditController.php
+++ b/src/applications/project/controller/PhabricatorProjectColumnEditController.php
@@ -45,16 +45,32 @@
 
     $e_name = null;
     $e_limit = null;
+    $e_milestone_name = null;
 
     $v_limit = $column->getPointLimit();
     $v_name = $column->getName();
 
+    $proxy = $column->getProxy();
+
+    // Is this a normal Column? Example: when true, this is not a Milestone.
+    $is_column = !$proxy;
+
+    // Is this a Milestone? Example: when true, this is not a normal Column.
+    $is_milestone = $proxy && $proxy->isMilestone();
+
+    // Milestone name, eventually coming from the proxed object.
+    $v_milestone_name = null;
+    if ($is_milestone) {
+      $v_milestone_name = $proxy->getName();
+    }
+
     $validation_exception = null;
     $view_uri = $project->getWorkboardURI();
 
     if ($request->isFormPost()) {
       $v_name = $request->getStr('name');
       $v_limit = $request->getStr('limit');
+      $v_milestone_name = $request->getStr('milestone.name');
 
       if ($is_new) {
         $column->setProjectPHID($project->getPHID());
@@ -74,14 +90,22 @@
       }
 
       $xactions = array();
+      $xactions_milestone = array();
 
       $type_name = PhabricatorProjectColumnNameTransaction::TRANSACTIONTYPE;
       $type_limit = PhabricatorProjectColumnLimitTransaction::TRANSACTIONTYPE;
+      $type_project_name = PhabricatorProjectNameTransaction::TRANSACTIONTYPE;
 
-      if (!$column->getProxy()) {
+      if ($is_column) {
+        // Transaction for Column name.
         $xactions[] = id(new PhabricatorProjectColumnTransaction())
           ->setTransactionType($type_name)
           ->setNewValue($v_name);
+      } else if ($is_milestone) {
+        // Transaction for Milestone name (that internally is a Project Name).
+        $xactions_milestone[] = id(new PhabricatorProjectTransaction())
+          ->setTransactionType($type_project_name)
+          ->setNewValue($v_milestone_name);
       }
 
       $xactions[] = id(new PhabricatorProjectColumnTransaction())
@@ -94,24 +118,53 @@
           ->setContinueOnNoEffect(true)
           ->setContentSourceFromRequest($request)
           ->applyTransactions($column, $xactions);
-        return id(new AphrontRedirectResponse())->setURI($view_uri);
       } catch (PhabricatorApplicationTransactionValidationException $ex) {
+        // Error messages related to the Column (like invalid Name, etc.)
         $e_name = $ex->getShortMessage($type_name);
         $e_limit = $ex->getShortMessage($type_limit);
         $validation_exception = $ex;
       }
+
+      // Save Milestone-related stuff but only if there were no prior problems
+      // and only if we have changes.
+      if (!$validation_exception && $xactions_milestone) {
+        try {
+          $editor_milestone = id(new PhabricatorProjectTransactionEditor())
+            ->setActor($viewer)
+            ->setContinueOnNoEffect(true)
+            ->setContentSourceFromRequest($request)
+            ->applyTransactions($proxy, $xactions_milestone);
+        } catch (PhabricatorApplicationTransactionValidationException $ex) {
+          // Error messages related to the Milestone (like invalid Name, etc.)
+          $e_milestone_name = $ex->getShortMessage($type_project_name);
+          $validation_exception = $ex;
+        }
+      }
+
+      // Refresh the page only if there are no errors to show.
+      if (!$validation_exception) {
+        return id(new AphrontRedirectResponse())->setURI($view_uri);
+      }
     }
 
     $form = id(new AphrontFormView())
       ->setUser($request->getUser());
 
-    if (!$column->getProxy()) {
+    // Show the most appropriate input field for the name.
+    if ($is_column) {
       $form->appendChild(
         id(new AphrontFormTextControl())
           ->setValue($v_name)
           ->setLabel(pht('Name'))
           ->setName('name')
           ->setError($e_name));
+    } else if ($is_milestone) {
+      $form->appendChild(
+        id(new AphrontFormTextControl())
+          ->setValue($v_milestone_name)
+          ->setLabel(pht('Milestone Name'))
+          ->setName('milestone.name')
+          ->setError($e_milestone_name));
     }
 
     $form->appendChild(