                 noTagMatch(self, tagName: tagName);
             }
         }
+        // If it wasn't initialized, logs that the framework needs to be initialized
         else {
             cargo.logger.logUninitializedFramework(self);
         }
     }
 
+
+
+/* ************************************* SDK initialization ************************************* */
+
     /**
      * The method you have to call first, because it initializes
      * the AT Internet tracker with the parameters you give.
      *
      *  @param parameters   Dictionary of parameters
+     *                      * trackerName (String) : if you want to use a particular tracker
+     *                      * dictionary ([String: String]) : your setup for the tracker
+     *                      
+     *                                                  OR
+     *
+     *                      * siteId (String) : id you got when you register your app, 
+     *                                          used to report hits to your AT interface
      */
     func initialize(_ parameters: [AnyHashable: Any]) {
         var params = parameters;
 
-        // we check if the required name is set, and then initialize the tracker with required values
+        // check if a tracker name is set, then initialize the tracker with required values
         if let trackerName = params[TRACKER_NAME] {
             params.removeValue(forKey: TRACKER_NAME);
+            if params["siteId"] != nil {
+                // the handler is initialized once the siteId has been set
+                self.initialized = true;
+            }
             tracker = ATInternet.sharedInstance.tracker(trackerName as! String,
                                                         configuration:params as! [String : String]);
             cargo.logger.logParamSetWithSuccess(TRACKER_NAME, value: parameters);
         }
+        // if the id is present, set up the tracker (async) and logs through a callback method
         else if let siteId = params["siteId"] {
             tracker.setConfig(TrackerConfigurationKeys.Site, value: siteId as! String,
                               completionHandler: { (isSet) -> Void in
                                 self.cargo.logger.carLog(kTAGLoggerLogLevelInfo, handler: self,
                                                          message: "AT Internet siteId set to \(siteId)");
             });
+            // the handler is initialized once the siteId has been set
             self.initialized = true;
         }
         else {

    
/* *********************************** Utility methods ************************************* */

    private func setAdditionalScreenProperties(parameters: [AnyHashable: Any], screen: Screen) -> Screen {
        let screen = screen;


        }
    }



/* ****************************************** Tracking ****************************************** */

    /**
     * Method used to create and fire a screen view to AT Internet
     * The mandatory parameter is screenName
     *
     * @param parameters    the parameters given at the moment of the dataLayer.push(),
     *                      passed through the GTM container and the execute method.
     *                      * screenName (String) : the name of the screen that has been seen
     *                      * chapter1 (String) : a custom dimension to set some more context
     *                      * chapter2 (String) : a second custom dim to set some more context
     *                      * chapter3 (String) : a third custom dim to set some more context
     *                      * level2 (int) : to add a second level to the screen
     *                      * isBasketView (bool) : set to true if the screen view is a basket one
     *                      * action (ScreenAction) : defines the action type
     */
    func tagScreen(parameters: [AnyHashable: Any]) {

        // check for the mandatory parameter screenName
        if let screenName = parameters[SCREEN_NAME] {
            // create the screen object
            var screen = tracker.screens.add(screenName as! String);
            cargo.logger.logParamSetWithSuccess(SCREEN_NAME, value: screen.name);

            // check for optional parameters. returns object with these properties set if needed.
            screen = self.setAdditionalScreenProperties(parameters: parameters as [NSObject : AnyObject], screen: screen);

            // fire the hit
            screen.sendView();
        }
        else {
