public override void Close(IMvxViewModel toClose)
        {
            //We make an array of this to make a snapshot before modifying presentation hosts.
            var presentationHostsToDrop = (from host in presentationHosts
                                           where ((IMvxTouchView)host).ViewModel == toClose
                                           select host).ToArray();

            foreach (var host in presentationHostsToDrop)
            {
                presentationHosts.Remove(host);
            }
            var viewsPresentedByHosts         = removalAgentsByView.Keys;
            var relevantViewsPresentedByHosts = (from view in viewsPresentedByHosts
                                                 where view.ViewModel == toClose
                                                 select view).ToArray();

            if (relevantViewsPresentedByHosts.Count() > 0)
            {
                foreach (var view in relevantViewsPresentedByHosts)
                {
                    var removalAgent = removalAgentsByView [view];
                    removalAgent();
                    removalAgentsByView.Remove(view);
                }
            }
            else if (MasterNavigationController != null)
            {
                var           topView = MasterNavigationController.TopViewController as IMvxView;
                IMvxViewModel topViewModel;

                if (topView != null)
                {
                    topViewModel = topView.ReflectionGetViewModel();
                }
                else
                {
//					#if DEBUG
//					MvxTrace.Warning ("Don't know how to close this ViewModel; topmost is not a touchview");
//					#endif
                    return;
                }

                if (topViewModel == toClose)
                {
                    if (MasterNavigationController.ViewControllers.Length > 1)
                    {
                        MasterNavigationController.PopViewController(true);
                    }
                    else
                    {
                        MasterNavigationController.WillMoveToParentViewController(null);
                        MasterNavigationController.RemoveFromParentViewController();
                        MasterNavigationController.View.RemoveFromSuperview();
                        MasterNavigationController = null;
                    }
                }
                else
                {
//					#if DEBUG
//					MvxTrace.Warning ("Don't know how to close this ViewModel; topmost view does not present this viewmodel");
//					#endif
                    return;
                }
            }
            else
            {
//					#if DEBUG
//					MvxTrace.Warning("Don't know how to close this ViewModel; there are no views governed by the RichTouchPresenter or its MasterNavigationController");
//					#endif
            }
        }