         return objects.first ?? nil
     }
     
+    /**
+        Finds the first record for given attribute and value.
+        
+        :param: attribute Attribute name.
+        :param: value Attribute value.
+        :param: sortDescriptors Sort descriptors.
+        :param: context If not specified, `defaultContext` will be used.
+        
+        :returns: Optional managed object.
+    */
     class func firstWithAttribute(attribute: String, value: AnyObject, sortDescriptors: [NSSortDescriptor]? = nil, context: NSManagedObjectContext = AERecord.defaultContext) -> NSManagedObject? {
         let predicate = NSPredicate(format: "%K = %@", argumentArray: [attribute, value])
         return firstWithPredicate(predicate, sortDescriptors: sortDescriptors, context: context)
     }
     
+    /**
+        Finds the first record for given attributes.
+        
+        :param: attributes Dictionary of attribute names and values.
+        :param: predicateType If not specified, `.AndPredicateType` will be used.
+        :param: sortDescriptors Sort descriptors.
+        :param: context If not specified, `defaultContext` will be used.
+        
+        :returns: Optional managed object.
+    */
+    class func firstWithAttributes(attributes: [NSObject : AnyObject], predicateType: NSCompoundPredicateType = defaultPredicateType, sortDescriptors: [NSSortDescriptor]? = nil, context: NSManagedObjectContext = AERecord.defaultContext) -> NSManagedObject? {
+        let predicate = createPredicateForAttributes(attributes, predicateType: predicateType)
+        return firstWithPredicate(predicate, sortDescriptors: sortDescriptors, context: context)
+    }
+
+    /**
+        Finds the first record ordered by given attribute.
+        
+        :param: name Attribute name.
+        :param: ascending A Boolean value.
+        :param: context If not specified, `defaultContext` will be used.
+        
+        :returns: Optional managed object.
+    */
     class func firstOrderedByAttribute(name: String, ascending: Bool = true, context: NSManagedObjectContext = AERecord.defaultContext) -> NSManagedObject? {
         let sortDescriptors = [NSSortDescriptor(key: name, ascending: ascending)]
         return first(sortDescriptors: sortDescriptors, context: context)
     }
     
-    class func firstWithAttributes(attributes: [NSObject : AnyObject], predicateType: NSCompoundPredicateType = defaultPredicateType, sortDescriptors: [NSSortDescriptor]? = nil, context: NSManagedObjectContext = AERecord.defaultContext) -> NSManagedObject? {
-        let predicate = createPredicateForAttributes(attributes, predicateType: predicateType)
-        return firstWithPredicate(predicate, sortDescriptors: sortDescriptors, context: context)
-    }
-    
     // MARK: Finding All
     
+    /**
+        Finds all records.
+    
+        :param: sortDescriptors Sort descriptors.
+        :param: context If not specified, `defaultContext` will be used.
+        
+        :returns: Optional managed object.
+    */
     class func all(sortDescriptors: [NSSortDescriptor]? = nil, context: NSManagedObjectContext = AERecord.defaultContext) -> [NSManagedObject]? {
         let request = createFetchRequest(sortDescriptors: sortDescriptors)
         let objects = AERecord.executeFetchRequest(request, context: context)
         return objects.count > 0 ? objects : nil
     }
     
+    /**
+        Finds all records for given predicate.
+        
+        :param: predicate Predicate.
+        :param: sortDescriptors Sort descriptors.
+        :param: context If not specified, `defaultContext` will be used.
+        
+        :returns: Optional managed object.
+    */
     class func allWithPredicate(predicate: NSPredicate, sortDescriptors: [NSSortDescriptor]? = nil, context: NSManagedObjectContext = AERecord.defaultContext) -> [NSManagedObject]? {
         let request = createFetchRequest(predicate: predicate, sortDescriptors: sortDescriptors)
         let objects = AERecord.executeFetchRequest(request, context: context)
         return objects.count > 0 ? objects : nil
     }
     
+    /**
+        Finds all records for given attribute and value.
+        
+        :param: attribute Attribute name.
+        :param: value Attribute value.
+        :param: sortDescriptors Sort descriptors.
+        :param: context If not specified, `defaultContext` will be used.
+        
+        :returns: Optional managed object.
+    */
     class func allWithAttribute(attribute: String, value: AnyObject, sortDescriptors: [NSSortDescriptor]? = nil, context: NSManagedObjectContext = AERecord.defaultContext) -> [NSManagedObject]? {
         let predicate = NSPredicate(format: "%K = %@", argumentArray: [attribute, value])
         return allWithPredicate(predicate, sortDescriptors: sortDescriptors, context: context)
     }
     
+    /**
+        Finds all records for given attributes.
+        
+        :param: attributes Dictionary of attribute names and values.
+        :param: predicateType If not specified, `.AndPredicateType` will be used.
+        :param: sortDescriptors Sort descriptors.
+        :param: context If not specified, `defaultContext` will be used.
+        
+        :returns: Optional managed object.
+    */
     class func allWithAttributes(attributes: [NSObject : AnyObject], predicateType: NSCompoundPredicateType = defaultPredicateType, sortDescriptors: [NSSortDescriptor]? = nil, context: NSManagedObjectContext = AERecord.defaultContext) -> [NSManagedObject]? {
         let predicate = createPredicateForAttributes(attributes, predicateType: predicateType)
         return allWithPredicate(predicate, sortDescriptors: sortDescriptors, context: context)

        return batchResult
    }
    
    class func objectsCountForBatchUpdate(predicate: NSPredicate? = nil, properties: [NSObject : AnyObject]? = nil, context: NSManagedObjectContext = AERecord.defaultContext) -> Int {
        if let result = batchUpdate(predicate: predicate, properties: properties, resultType: .UpdatedObjectsCountResultType, context: context) {
            if let count = result.result as? Int {

    }
    
    /**
        Finds the first record for given attributes or creates new if the it does not exist.
        
        :param: attributes Dictionary of attribute names and values.
        :param: predicateType If not specified, `.AndPredicateType` will be used.
        :param: context If not specified, `defaultContext` will be used.
        
