                 
                 let product : SKProduct = PatronManager.sharedManager.products[indexPath.row]
                 
+                // Step 1. Perform Purchase
                 PatronManager.sharedManager.purchaseProduct(product: product, withCompletionHandler: { (success, error) -> Void in
-                    print("Purchase complete. Success: \(success) Error: \(error)")
-                    self.tableView.reloadData()
-                    
+                    // Step 2. Fetch new expiration
                     PatronManager.sharedManager.fetchPatronageExpiration(withCompletionHandler: { (expiration : NSDate?) -> Void in
+                        // Step 3. Update patron count
                         PatronManager.sharedManager.fetchPatronCountSince(date: self.oneUnitBefore(NSDate(), withUnit: .Month), withCompletionHandler: { (count, error) -> Void in
-                            self.tableView.reloadData()
+                            // Step 4. Update UI
+                            dispatch_async(dispatch_get_main_queue(), { () -> Void in
+                                self.tableView.reloadSections(NSIndexSet(indexesInRange: NSMakeRange(0,2)), withRowAnimation: .Automatic)
+                                print("Purchase complete. Success: \(success) Error: \(error)")
+                            })
                         })
                     })
                 })

        else if section == 1 {
            // Become/Extend
            if let _ = PatronManager.sharedManager.expirationDate {
                
                title = NSLocalizedString("Extend Your Patronage", comment: "A title for the patronage list encouraging returning patrons to donate again.")
                
            }
            else
            {

            
            if count == 0 /* there are no products  */
            {
                cell.textLabel?.text = NSLocalizedString("Loading Patronage Options...", comment: "A title for a cell that is loading patronage information.")
                cell.detailTextLabel?.text = nil
            }
            else {
