     }
 
     func activateVisitable(visitable: TLVisitable) {
-        currentVisitable = visitable
-        activateWebViewForVisitable(visitable)
+        if visitable !== activatedVisitable {
+            if let activatedVisitable = self.activatedVisitable {
+                deactivateVisitable(activatedVisitable)
+            }
+
+            visitable.activateWebView(webView)
+            self.activatedVisitable = visitable
+        }
     }
 
     func deactivateVisitable(visitable: TLVisitable) {
-        deactivateWebViewForVisitable(visitable)
-    }
-
-    func activateWebViewForVisitable(visitable: TLVisitable) {
-        if !webView.isDescendantOfView(visitable.viewController.view) {
-            if currentVisitable != nil && currentVisitable !== visitable {
-                deactivateWebViewForVisitable(currentVisitable!)
-            }
-            visitable.activateWebView(webView)
-        }
-    }
-
-    func deactivateWebViewForVisitable(visitable: TLVisitable) {
-        visitable.deactivateWebView()
+        if visitable === activatedVisitable {
+            visitable.deactivateWebView()
+            self.activatedVisitable = nil
+        }
     }
 }

                visit = TLColdBootVisit(visitable: visitable, action: action, webView: webView)
            }

            lastIssuedVisit?.cancel()
            lastIssuedVisit = visit

            visit.delegate = self
            visit.start()

    }

    public func reload() {
        if let visitable = activatedVisitable {
            initialized = false
            visitVisitable(visitable, action: .Advance)
            activateVisitable(visitable)
