         clientPickerDelegate?.clientPickerViewController(self, didPickClients: clients)
     }
 }
+
+class ClientPickerTableViewHeaderCell: UITableViewCell {
+    static let CellIdentifier = "ClientPickerTableViewSectionHeader"
+    let nameLabel = UILabel()
+
+    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        addSubview(nameLabel)
+        nameLabel.font = ClientPickerViewControllerUX.TableHeaderTextFont
+        nameLabel.text = NSLocalizedString("Available devices:", tableName: "SendTo", comment: "Header for the list of devices table")
+        nameLabel.textColor = ClientPickerViewControllerUX.TableHeaderTextColor
+
+        nameLabel.snp_makeConstraints{ (make) -> Void in
+            make.left.equalTo(ClientPickerViewControllerUX.TableHeaderTextPaddingLeft)
+            make.centerY.equalTo(self)
+            make.right.equalTo(self)
+        }
+
+        preservesSuperviewLayoutMargins = false
+        layoutMargins = UIEdgeInsetsZero
+        separatorInset = UIEdgeInsetsZero
+    }
+
+    required init(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+}
+
+public enum ClientType: String {
+    case Mobile = "deviceTypeMobile"
+    case Desktop = "deviceTypeDesktop"
+}
+
+class ClientPickerTableViewCell: UITableViewCell {
+    static let CellIdentifier = "ClientPickerTableViewCell"
+
+    var nameLabel: UILabel
+    var checked: Bool = false {
+        didSet {
+            self.accessoryType = checked ? UITableViewCellAccessoryType.Checkmark : UITableViewCellAccessoryType.None
+        }
+    }
+
+    var clientType: ClientType = ClientType.Mobile {
+        didSet {
+            self.imageView?.image = UIImage(named: clientType.rawValue)
+        }
+    }
+
+    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
+        nameLabel = UILabel()
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        contentView.addSubview(nameLabel)
+        nameLabel.font = ClientPickerViewControllerUX.DeviceRowTextFont
+        nameLabel.numberOfLines = 2
+        nameLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
+        self.tintColor = ClientPickerViewControllerUX.DeviceRowTintColor
+        self.preservesSuperviewLayoutMargins = false
+        self.selectionStyle = UITableViewCellSelectionStyle.None
+    }
+
+    override func layoutSubviews() {
+        super.layoutSubviews()
+
+        nameLabel.snp_makeConstraints{ (make) -> Void in
+            make.left.equalTo(ClientPickerViewControllerUX.DeviceRowTextPaddingLeft)
+            make.centerY.equalTo(self.snp_centerY)
+            make.right.equalTo(self.snp_right).offset(-ClientPickerViewControllerUX.DeviceRowTextPaddingRight)
+        }
+    }
+
+    required init(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+}
+
+class ClientPickerNoClientsTableViewCell: UITableViewCell {
+    static let CellIdentifier = "ClientPickerNoClientsTableViewCell"
+
+    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
+        super.init(style: style, reuseIdentifier: reuseIdentifier)
+        setupHelpView(contentView,
+            introText: NSLocalizedString("You don't have any other devices connected to this Firefox Account available to sync.", tableName: "SendTo", comment: "Error message shown in the remote tabs panel"),
+            showMeText: "") // TODO We used to have a 'show me how to ...' text here. But, we cannot open web pages from the extension. So this is clear for now until we decide otherwise.
+        // Move the separator off screen
+        separatorInset = UIEdgeInsetsMake(0, 1000, 0, 0)
+    }
+    
+    required init(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+}

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import UIKit
import Storage

        refreshControl = UIRefreshControl()
        refreshControl?.addTarget(self, action: "refresh", forControlEvents: UIControlEvents.ValueChanged)
        navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Cancel, target: self, action: "cancel")
        tableView.registerClass(ClientPickerTableViewHeaderCell.self, forCellReuseIdentifier: ClientPickerTableViewHeaderCell.CellIdentifier)
        tableView.registerClass(ClientPickerTableViewCell.self, forCellReuseIdentifier: ClientPickerTableViewCell.CellIdentifier)
        tableView.registerClass(ClientPickerNoClientsTableViewCell.self, forCellReuseIdentifier: ClientPickerNoClientsTableViewCell.CellIdentifier)
        tableView.tableFooterView = UIView(frame: CGRectZero)
    }

