     override func viewWillAppear(_ animated: Bool) {
         super.viewWillAppear(animated)
 
+		if !disposables.isDisposed {
+			disposables.dispose()
+		}
+		disposables = CompositeDisposable()
+
 		disposables += viewModel.BrowsableMaps.signal.observeResult({[unowned self] _ in
 			DispatchQueue.main.async {
 				self.reloadData()


    @IBAction func mapSwitchChanged(_ segmentedControl: UISegmentedControl) {
		let maps = viewModel.BrowsableMaps.value
        if segmentedControl.selectedSegmentIndex == segmentedControl.numberOfSegments - 1 {
            present(RoutingAppChooser.sharedInstance.getAlertForAddress("Estrel Hotel Berlin", house: "225", street: "Sonnenallee", zip: "12057", city: "Berlin", country: "Germany", lat: 52.473336, lon: 13.458729), animated: true, completion:nil)
			if let map = map, let currentMapIndex = maps.index(of: map) {

			}
		}

		if let nearestMapEntry = nearestMapEntry, nearestMapEntry.Links.count > 0 {
			if let link = nearestMapEntry.Links.first, nearestMapEntry.Links.count == 1 {
				performLinkFragmentAction(for: link)
			} else {
				showMapEntryActionSheet(for: nearestMapEntry.Links)
			}
		}
    }

	func performLinkFragmentAction(for linkFragment: LinkFragment) {
		switch linkFragment.FragmentType {
		case .DealerDetail:
			if let dealer: Dealer = linkFragment.getTarget() {
				self.performSegue(withIdentifier: "MapToDealerDetailViewSegue", sender: dealer)
			}
		case .MapExternal:
			break
		case .MapInternal:
			if let linkMapEntry: MapEntry = linkFragment.getTarget() {
				currentMapEntryRadiusMultiplier = 10.0
				self.show(mapEntry: linkMapEntry)
			}
		case .WebExternal:
			if let url: URL = linkFragment.getTarget() {
				UIApplication.shared.openURL(url)
			}
		}
	}

	func showMapEntryActionSheet(for mapEntryLinks: [LinkFragment]) {
		guard mapEntryLinks.count > 0 else { return }

		let optionMenu = UIAlertController(title: nil, message: "Select a map entry", preferredStyle: .actionSheet)

		for link in mapEntryLinks {
			// TODO: Prepend FontAwesome icon depending on LinkFragment.Type
			var actionTitle = link.Name
			switch link.FragmentType {
			case .DealerDetail:
				if let _: Dealer = link.getTarget() {
					actionTitle = "Dealer: \(actionTitle)"
				} else {
					continue
				}
			case .MapExternal:
				// TODO: How can the target string be parsed to a location?
				continue
			case .MapInternal:
				if let _: MapEntry = link.getTarget() {
					actionTitle = "Map: \(actionTitle)"
				} else {
					continue
				}
			case .WebExternal:
				if let _: URL = link.getTarget() {
					actionTitle = "Web: \(actionTitle)"
				} else {
					continue
				}
			}

			let linkAction = UIAlertAction(title: actionTitle, style: .default, handler: {
				(_: UIAlertAction!) -> Void in
				DispatchQueue.main.async {
					self.performLinkFragmentAction(for: link)
				}
			})
			optionMenu.addAction(linkAction)
		}

		let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: {
			(_: UIAlertAction!) -> Void in
		})
		optionMenu.addAction(cancelAction)

		self.present(optionMenu, animated: true, completion: nil)
	}

	func viewForZooming(in scrollView: UIScrollView) -> UIView? {
		return scrollView.subviews.first
