     //MARK: gc
     deinit
     {
+        clearUserAnnotation()
         mapView.removeAnnotations(mapView.annotations)
+        mapTap.removeObserver(self, forKeyPath: "state", context: &MAP_TAP_CONTEXT)
     }
 }
                }
                
                let placemark = list!.first!
                annotation.subtitle = (placemark.addressDictionary?["Name"] as! String)
            }
            else
            {
                let alert = UIAlertController(title: "Geocode: \(error!.code)", message: error?.description, preferredStyle: UIAlertControllerStyle.ActionSheet)
                alert.addAction(UIAlertAction(title: "", style: UIAlertActionStyle.Destructive, handler: nil))
                self.presentViewController(alert, animated: true, completion: nil)
            }
        }

            if anView.annotation is PinAnnotation
            {
                let annotation = anView.annotation as! PinAnnotation
                performSelector("showAnnotationCallout:", withObject: annotation, afterDelay: 0.5)
                
                anView.draggable = annotation.removable
                if annotation.removable
                {
                    annotation.addObserver(self, forKeyPath: "coordinate", options: NSKeyValueObservingOptions.New, context: &PIN_COORDINATE_CHANGE_CONTEXT
                    )
                }
            }
        }
    }
    
    func showAnnotationCallout(annotation:PinAnnotation)
    {
        mapView.selectAnnotation(annotation, animated: true)
        
