diff --git a/PredictionIOSDK/PredictionIOSDK.swift b/PredictionIOSDK/PredictionIOSDK.swift
index ab65720..c5305c1 100644
--- a/PredictionIOSDK/PredictionIOSDK.swift
+++ b/PredictionIOSDK/PredictionIOSDK.swift
@@ -159,11 +159,15 @@
     /// The access key for your application
     let accessKey: String
     
-    private var _fullURLForCreatingEvent: String {
+    private var URLForCreatingEvent: String {
         return "\(baseURL)/events.json?accessKey=\(accessKey)"
     }
     
-    private func _fullURLForGettingEvent(eventID: String) -> String {
+    private var URLForCreatingBatchEvents: String {
+        return "\(baseURL)/batch/events.json?accessKey=\(accessKey)"
+    }
+    
+    private func URLForGettingEvent(eventID: String) -> String {
         return "\(baseURL)/events/\(eventID).json?accessKey=\(accessKey)"
     }
     
@@ -190,7 +194,26 @@
     public func createEvent(event: Event, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
         assert((event.event == Event.UnsetEvent && event.properties?.isEmpty == true) == false, "Properties cannot be empty for $unset event")
         
-        networkManager.request(.POST, _fullURLForCreatingEvent, parameters: event.toDictionary(), encoding: .JSON)
+        networkManager.request(.POST, URLForCreatingEvent, parameters: event.toDictionary(), encoding: .JSON)
+            .responseJSON { (request, response, JSON, error) -> Void in
+                completionHandler(request, response, JSON, error)
+            }
+    }
+    
+    /**
+        Create events with a batch request.
+    
+    
+    */
+    public func createBatchEvents(events: [Event], completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
+        let eventDicts = events.map { event in event.toDictionary() }
+        var error: NSError?
+        let request = NSMutableURLRequest(URL: NSURL(string: URLForCreatingBatchEvents)!)
+        request.HTTPMethod = Method.POST.rawValue
+        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
+        request.HTTPBody = NSJSONSerialization.dataWithJSONObject(eventDicts, options: NSJSONWritingOptions.allZeros, error: &error)
+
+        networkManager.request(request)
             .responseJSON { (request, response, JSON, error) -> Void in
                 completionHandler(request, response, JSON, error)
             }
@@ -206,7 +229,7 @@
     */
     public func getEvent(eventID: String, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
         if let escapedEventID = eventID.stringByReplacingPercentEscapesUsingEncoding(NSUTF8StringEncoding) {
-            networkManager.request(.GET, _fullURLForGettingEvent(escapedEventID))
+            networkManager.request(.GET, URLForGettingEvent(escapedEventID))
                 .responseJSON { (request, response, JSON, error) -> Void in
                     completionHandler(request, response, JSON, error)
                 }
@@ -221,7 +244,7 @@
     */
     public func deleteEvent(eventID: String, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
         if let escapedEventID = eventID.stringByReplacingPercentEscapesUsingEncoding(NSUTF8StringEncoding) {
-            networkManager.request(.DELETE, _fullURLForGettingEvent(escapedEventID))
+            networkManager.request(.DELETE, URLForGettingEvent(escapedEventID))
                 .responseJSON { (request, response, JSON, error) -> Void in
                     completionHandler(request, response, JSON, error)
             }
@@ -410,7 +433,7 @@
 */
 public class EngineClient : BaseClient {
     
-    private var _fullURL: String {
+    private var URLForQuerying: String {
         return "\(baseURL)/queries.json"
     }
     
@@ -433,7 +456,7 @@
         :param: completionHandler The callback to be executed when the request has finished.
     */
     public func sendQuery(query: [String: AnyObject], completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) {
-        networkManager.request(.POST, _fullURL, parameters: query, encoding: .JSON)
+        networkManager.request(.POST, URLForQuerying, parameters: query, encoding: .JSON)
             .responseJSON { (request, response, JSON, error) -> Void in
                 completionHandler(request, response, JSON, error)
             }
