 
     /**
         Returns an `AMAudioDevice` by providing a valid audio device identifier.
-     */
-    public static func lookupByID(ID: AudioObjectID) -> AMAudioDevice {
+
+         - Note: If identifier is not valid, `nil` will be returned.
+     */
+    public static func lookupByID(ID: AudioObjectID) -> AMAudioDevice? {
         var instance = AMAudioObjectPool.instancePool.objectForKey(UInt(ID)) as? AMAudioDevice
 
         if instance == nil {
             instance = AMAudioDevice(deviceID: ID)
         }
 
-        return instance!
+        return instance
     }
 
     /**

     
        - Parameter deviceID: An audio device identifier that is valid and present in the system.
     */
    private init(deviceID: AudioObjectID) {
        super.init(objectID: deviceID)
        cachedDeviceName = getDeviceName()
        registerForNotifications()
        AMAudioObjectPool.instancePool.setObject(self, forKey: UInt(objectID))

        }

        if let preferredStereoChannels = preferredStereoChannelsForDirection(direction) {
            let muteCount = preferredStereoChannels.filter { channel -> Bool in
                canMuteForChannel(channel, andDirection: direction) == true
            }.count

            return muteCount == preferredStereoChannels.count
