     var group: ALAssetsGroup!
 }
 
+// Asset Model
+class DKAsset: NSObject {
+    var thumbnailImage: UIImage?
+    var originalImage: UIImage?
+    var url: NSURL?
+    
+    override func isEqual(object: AnyObject?) -> Bool {
+        let other = object as DKAsset!
+        return self.url!.isEqual(other.url!)
+    }
+}
+
 protocol DKImagePickerControllerDelegate : NSObjectProtocol {
+    func imagePickerControllerDidSelectedAssets(images: NSArray!)
     func imagePickerControllerCancelled()
 }
 

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "selectedImage:", name: DKImageSelectedNotification, object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "unselectedImage:", name: DKImageUnselectedNotification, object: nil)
    }
    
    // MARK: - Notifications
    func selectedImage(noti: NSNotification) {
        if let image = noti.object as? UIImage {
            (selectedImages as NSMutableArray).addObject(image)
            imagesPreviewView.insertImage(image)
            imagesPreviewView.hidden = false
            
            for vc: UIViewController in self.viewControllers as [UIViewController]! {
                vc.view.frame.size.height -= previewHeight
            }
        }
    }
    
    func unselectedImage(noti: NSNotification) {
        if let image = noti.object as? UIImage {
            (selectedImages as NSMutableArray).removeObject(image)
            imagesPreviewView.removeImage(image)
            
            if selectedImages.count <= 0 {
                imagesPreviewView.hidden = true
                
                for vc: UIViewController in self.viewControllers as [UIViewController]! {
                    vc.view.frame.size.height += previewHeight
                }
            }
        }
    }
}

}

class DKImagePickerController: UINavigationController {
    
    let previewHeight: CGFloat = 80
    
    class DKPreviewView: UIScrollView {
        let interval: CGFloat = 5
