 
 
 // Make the Event work with the pool
-extension EventsTracker.Event : PoolableObject {
+extension EventsTracker.ShippableEvent : PoolableObject {
     
     var poolId:String {
         return self.uuid

        self.trackId = trackId
    }
    
    public func trackEvent(_ type:String) {
        trackEvent(type, properties: nil)
    }
    public func trackEvent(_ type:String, properties:[String:AnyObject]?) {
        track(event: Event(type:type, trackId:trackId, properties:properties, personId:personId, viewContext:_currentViewContext, campaignContext:_currentCampaignContext))
    }
    func track(event:EventsTracker.Event) {
        // make sure that all events are initially triggered on the main thread, to guarantee order. 
        DispatchQueue.main.async {
            EventsTracker.pool.push(object: event)

    
    /// This is a concrete implementation of an Event.
    // It defines everything that an event, as seen by the server
    internal class ShippableEvent {
        
        let version:String = "1.0.0"
        
