         let sessionID = UserDefaults.standard.getSessionID()
         let email = GSRUser.getUser()?.email
         if sessionID == nil && email == nil {
-            // TODO: Handle user that is not logged in
+            self.prepareLoginButton()
+            self.tableView.dataSource = self
             return
         }
-        self.showActivity()
-        GSRNetworkManager.instance.getReservations(sessionID: sessionID, email: email) { (reservations) in
-            DispatchQueue.main.async {
-                self.hideActivity()
-                if let reservations = reservations {
-                    self.reservations = reservations
-                    self.tableView.dataSource = self
-                    self.tableView.reloadData()
-                } else {
-                    // TODO: Handle failure to retrieve reservations.
-                }
-            }
+    }
+    
+    override func viewWillAppear(_ animated: Bool) {
+        super.viewWillAppear(animated)
+        self.fetchData { (success) in
+            // Handle if not successful
         }
     }
 }

class GSRReservationsController: UITableViewController, ShowsAlert, IndicatorEnabled {

    var reservations: [GSRReservation]!

    override func viewDidLoad() {
        super.viewDidLoad()

        }
    }
}

// MARK: Login Button
extension GSRReservationsController {
    func prepareLoginButton() {
        barButton = UIBarButtonItem(title: "Login", style: .done, target: self, action: #selector(handleBarButtonPressed(_:)))
        barButton.tintColor = UIColor.navigationBlue
        navigationItem.rightBarButtonItem = barButton
    }
    
    func handleBarButtonPressed(_ sender: Any) {
        let alertController = UIAlertController(title: "Select GSR System", message: "Choose the system to login for.", preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "Library", style: .default, handler: { (_) in
            DispatchQueue.main.async {
                self.presentLoginFlow(isWharton: false)
            }
        }))
        alertController.addAction(UIAlertAction(title: "Wharton", style: .default, handler: { (_) in
            DispatchQueue.main.async {
                self.presentLoginFlow(isWharton: true)
            }
        }))
        present(alertController, animated: true, completion: nil)
    }
    
    func presentLoginFlow(isWharton: Bool) {
        if isWharton {
            let wv = GSRWebviewLoginController()
            wv.completion = {
                let sessionID = UserDefaults.standard.getSessionID()
                if sessionID == nil {
                    self.showAlert(withMsg: "Uh oh!", title: "Login invalid. Please try again.", completion: nil)
                    return
                }
            }
            let nvc = UINavigationController(rootViewController: wv)
            present(nvc, animated: true, completion: nil)
        } else {
            let glc = GSRLoginController()
            let nvc = UINavigationController(rootViewController: glc)
            present(nvc, animated: true, completion: nil)
        }
    }
    
    func fetchData(_ completion: @escaping (_ success: Bool) -> Void) {
        let sessionID = UserDefaults.standard.getSessionID()
        let email = GSRUser.getUser()?.email
        if sessionID == nil && email == nil {
            completion(false)
            return
        }
        
        self.showActivity()
        GSRNetworkManager.instance.getReservations(sessionID: sessionID, email: email) { (reservations) in
            DispatchQueue.main.async {
                self.hideActivity()
                if let reservations = reservations {
                    self.reservations = reservations
                    self.tableView.dataSource = self
                    self.tableView.reloadData()
                    completion(true)
                } else {
                    completion(false)
                }
            }
        }
    }
}
