 extension ViewController : CBPeripheralDelegate {
     func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?) {
         browser.reloadColumn(1)
+        if browser.selectionIndexPath.length == 2 {
+            browserAction(browser)
+        } else if let services = peripheral.services {
+            for service in services {
+                if service.UUID == selectedService?.UUID {
+                    selectedService = service
+                    peripheral.discoverCharacteristics(nil, forService: service)
+                }
+            }
+        }
     }
     
     func peripheral(peripheral: CBPeripheral, didDiscoverCharacteristicsForService service: CBService, error: NSError?) {
         browser.reloadColumn(2)
+        if browser.selectionIndexPath.length == 3 {
+            browserAction(browser)
+        } else if let characteristics = service.characteristics {
+            for characteristic in characteristics {
+                if characteristic.UUID == selectedCharacteristic?.UUID {
+                    selectedCharacteristic = characteristic
+                    if characteristic.properties.contains(.Read) {
+                        readCharacteristic()
+                        
+                    }
+                    refreshCharacteristicDetail()
+                }
+            }
+        }
     }
     
     func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {

            }
        }
        setupCharacteristicControls()
    }
    
    func setupCharacteristicControls() {

        let indexPath = browser.selectionIndexPath
        let column = indexPath.length
        browser.setTitle(self.browser(browser,titleOfColumn:column)!, ofColumn: column)
        // Automatically reconnect if a service or characteristic is selected.
        if [2,3].contains(indexPath.length) {
            reconnectPeripheral()
        }
        if indexPath.length == 1 {
            let peripheral = scanner.devices[indexPath.indexAtPosition(0)]
            if peripheral != connectedPeripheral {
