     }
     
     // MARK: Utilitiy Functions
+    
+    private func removeContact(index: NSIndexPath)
+    {
+        let dictionaryKey = filteredContacts[OrderedDictionaryIndex(index.section)].key
+        let arrayIndex = index.row
+        
+        // NOTE: Because arrays are value types, we need to make a new one and then re-assign, hopefully the compiler will recognize this and optimize...
+        // TODO: Test the performance of this...
+        
+        // Get the contact array
+        var potentialSectionContacts = filteredContacts[dictionaryKey]
+        // TODO: if the above is nil, something went wrong...
+        assert(potentialSectionContacts != nil)
+        
+        // Remove the contact
+        // TODO: also need to delete from contactsList...
+        potentialSectionContacts?.removeAtIndex(arrayIndex)
+        
+        // Either
+        if potentialSectionContacts?.count > 0 {
+            // Remove the row
+            tableView.deleteRowsAtIndexPaths([index], withRowAnimation: .Fade)
+        }
+        else {
+            // Remove the entire section
+            tableView.deleteSections(NSIndexSet(index: index.section), withRowAnimation: .Fade)
+        }
+    }
     
     private func contactSection(contact: Contact) -> String? {
         return sortOrderKey(primarySortOrder, forContact: contact)

        let contact = filteredContacts[OrderedDictionaryIndex(indexPath.section)].value[indexPath.row] // TODO: Create a func contactFor(indexPath: NSIndexPath)
        var actions = [UITableViewRowAction]()
        
        // Has at least 1 email
        if contact.contactMethods.any({$0.isEmail}) {
            let email = UITableViewRowAction(style: .Normal, title: "Email", handler: emailActionHandler)

        return true
    }
    
    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath index: NSIndexPath) {
        if editingStyle == .Delete {
            removeContact(index)
