/// <summary>
		/// Starts the monitoring region.
		/// </summary>
		/// <param name="UUID">UUI.</param>
		public void StartMonitoringRegion (string UUID)
		{
			UIApplication.SharedApplication.InvokeOnMainThread (delegate {
				// REQUIRED TO BE INVOKED ONN UI MAIN THREAD

				if (beaconManager == null) {

					beaconManager = new BeaconManager ();
					beaconManager.ReturnAllRangedBeaconsAtOnce = true;
					beaconManager.AuthorizationStatusChanged += (sender, e) => StartRangingBeacons (UUID);
					beaconManager.RangedBeacons += (sender, e) => 
					{
						SystemLogger.Log (SystemLogger.Module.PLATFORM, "Ranged Beacon [found]");
						Estimote.Beacon[] beacons = e.Beacons;
						//new UIAlertView("Beacons Found", "Just found: " + e.Beacons.Length + " beacons.", null, "OK").Show();

						foreach (Estimote.Beacon beacon in beacons) {
							var b = new Appverse.Core.iBeacon.Beacon ();
							b.Address = beacon.MacAddress;
							b.Major = beacon.Major;
							b.Minor = beacon.Minor;
							b.Name = beacon.Name;
							b.UUID = beacon.ProximityUUID.AsString();
							CLProximity proximity = beacon.Proximity;
							DistanceType proximityB;
							switch (proximity) {
							case CLProximity.Far:
								proximityB = DistanceType.FAR;
								break;
							case CLProximity.Immediate:
								proximityB = DistanceType.INMEDIATE;
								break;
							case CLProximity.Near:
								proximityB = DistanceType.FAR;
								break;
							default:
								proximityB = DistanceType.UNKNOWN;
								break;

							}
							b.setDistance (proximityB);
							b.Meters = (double)beacon.Distance;

							/*
					SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered UUID: " + b.UUID);
					SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Name: " + b.Name);
					SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Distance: " + b.Distance);			
					SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Meters: " + b.Meters);
					SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Major: " + b.Major);
					SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Minor: " + b.Minor);
					*/
							var key = UniqueKey(b);
							if (beaconDict.ContainsKey(key))
							{
								beaconDict[key] = b;
							}else{
								beaconDict.Add(key, b);
							}
							//beaconArray.Add (b);


						}

					
					};
				}

				StartRangingBeacons (UUID);
			});
		}
        private Beacon FromCLBeacon(CLBeacon device)
        {
            Beacon beacon = new Beacon();

            beacon.Minor = device.Minor.Int16Value;
            beacon.Major = device.Major.Int16Value;
            DistanceType d = DistanceType.UNKNOWN;
            switch (device.Proximity) {
            case CLProximity.Immediate:
                d = DistanceType.INMEDIATE;
                break;
            case CLProximity.Near:
                d = DistanceType.NEAR;
                break;
            case CLProximity.Far:
                d = DistanceType.FAR;
                break;
            case CLProximity.Unknown:

                break;
            }

            beacon.Distance = d;

            return beacon;
        }
        /// <summary>
        /// return a Beacon from the device.
        /// </summary>
        /// <returns>Beacon</returns>
        /// <param name="device">Device</param>
        private Beacon FromDevice(IDevice device)
        {
            Beacon beacon = new Beacon();

            beacon.UUID = device.ID.ToString();
            beacon.Name = device.Name;

            return beacon;
        }
 /// <summary>
 /// Uniques the identifier for beacon.
 /// </summary>
 /// <returns>The identifier for beacon.</returns>
 /// <param name="beacon">Beacon.</param>
 private static String uniqueIDForBeacon(Beacon beacon)
 {
     return (beacon.UUID + "#" + beacon.Major + "#" + beacon
         .Minor).ToUpper();
 }