             title: NSLocalizedString("Done", comment: "Settings"),
             style: UIBarButtonItemStyle.Done,
             target: navigationController, action: "SELdone")
+
+        // To allow re-ordering the list of search engines at all times.
+        tableView.editing = true
+        // So that we push the default search engine controller on selection.
+        tableView.allowsSelectionDuringEditing = true
     }
 
     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
         var cell: UITableViewCell
         var engine: OpenSearchEngine
 
-        engine = model.defaultEngine
-        cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil)
-        cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
+        if indexPath.section == SectionDefault {
+            engine = model.defaultEngine
+            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil)
+            cell.editingAccessoryType = UITableViewCellAccessoryType.DisclosureIndicator
+        } else {
+            engine = model.orderedEngines[indexPath.item]
+            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil)
+            cell.showsReorderControl = true
+        }
+
+        // So that the seperator line goes all the way to the left edge.
+        cell.separatorInset = UIEdgeInsetsZero
 
         cell.textLabel?.text = engine.shortName
         cell.imageView?.image = engine.image

            navigationController?.pushViewController(searchEnginePicker, animated: true)
        }
        return nil
    }

    func SELcancel() {

    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if section == SectionDefault {
            return 1
        } else {
            return model.orderedEngines.count
        }
    }

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if section == SectionDefault {
            return NSLocalizedString("Default", comment: "Search Settings")
        } else {
            return NSLocalizedString("Providers", comment: "Search Settings")
        }
    }

    override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
