docs: public synchronized void addItem(final T item) {
          // Log.w(TAG,"public synchronized void addItem(T item) {... (START)");
          // if mapView is not inflated or if not in viewport, add to leftItems
          if (mapView.getWidth() == 0 || !isItemInViewport(item)) {
  //            Log.i(TAG,"public synchronized void addItem(T item) {... (1)");
              synchronized (leftItems) {
                  // Log.w(TAG,"public synchronized void addItem(T item) {... (2)");
                  if (clusterTask != null && clusterTask.isCancelled()) return;
                  leftItems.add(item);
              }
          } else if (maxClusteringZoom >= mapView.getModel().mapViewPosition
                  .getZoomLevel()) {
              // else add to a cluster;
              Point pos = mapView.getMapViewProjection().toPixels(item.getLatLong());
              // check existing cluster
  //            Log.i(TAG,"spublic synchronized void addItem(T item) {...... (3)");
              synchronized (clusters) {
                  // Log.w(TAG,"spublic synchronized void addItem(T item) {...... (4)");
                  for (Cluster<T> mCluster : clusters) {
  //                    Log.i(TAG,"public synchronized void addItem(T item) {... (5)");
                      if (clusterTask != null && clusterTask.isCancelled()) return;
                      if (mCluster.getItems().size() == 0)
                          throw new IllegalArgumentException("cluster.getItems().size() == 0");
                      // find a cluster which contains the marker.
                      // use 1st element to fix the location, hinder the cluster from
                      // running around and isClustering.
                      LatLong gpCenter = mCluster.getItems().get(0)
                              .getLatLong();
                      if (gpCenter == null)
                          throw new IllegalArgumentException();
                      Point ptCenter = mapView.getMapViewProjection().toPixels(gpCenter);
                      // find a cluster which contains the marker.
                      if (pos.distance(ptCenter) <= GRIDSIZE
                      /*
                       * pos.x >= ptCenter.x - GRIDSIZE && pos.x <= ptCenter.x +
                       * GRIDSIZE && pos.y >= ptCenter.y - GRIDSIZE && pos.y <=
                       * ptCenter.y + GRIDSIZE
                       */) {
                          mCluster.addItem(item);
                          return;
                      }
                  } // END: for (Cluster<T> cluster : clusters) {
                  // No cluster contain the marker, create a new cluster.
                  clusters.add(createCluster(item));
              } // END: synchronized (clusters) {
          } else {
              // No clustering allowed, create a new cluster with single item.
              synchronized (clusters) {
  //                Log.i(TAG,"public synchronized void addItem(T item) {... (6)");
                  clusters.add(createCluster(item));
              }
          }
  //        Log.i(TAG,"public synchronized void addItem(T item) {... (END)");
      }