            (ac-start :force-init t)
            ;(ac-update)
            ;(setq ac-fsharp-status 'idle)
-           )))))
-
-(defun ac-fsharp-candidate2 ()
-  (list "lol" "biscuits" "trontastic" "trance" "biscuil"))
+           ))
+        (otherwise
+         message "filter output called and found <<EOF>> while not waiting")
+        )))
+
+(defun ac-fsharp-async-preemptive ()
+  (interactive)
+;  (self-insert-command 1)
+  (if (eq ac-fsharp-status 'idle)
+      (ac-start)
+    (setq ac-fsharp-status 'preempted)))
 
 (defvar ac-source-fsintellisense
-  '((candidates . ac-fsharp-candidate)))
+  '((candidates . ac-fsharp-candidate)
+    (cache)))
 
 (defun ac-fsharp-config ()
   (setq ac-sources '(ac-source-fsintellisense))
   (setq ac-use-fuzzy nil)
-  (setq ac-auto-start nil))
+  (setq ac-auto-start nil)
+  (local-set-key (kbd "C-c .") 'ac-fsharp-async-preemptive))
 
 (add-hook 'fsharp-mode-hook 'ac-fsharp-config)
-(add-hook 'fsharp-mode-hook
-          (lambda () (setq ac-auto-start nil)))
 ;(add-hook 'fsharp-mode-hook (lambda () (auto-complete-mode)))
 ;(setq fsharp-mode-hook '())
 
 (defun ac-complete-fsintellisense ()
   (interactive)
-  (auto-complete '(ac-source-fsintellisense)))
-
-(global-set-key (kbd "C-c .") 'ac-complete-fsintellisense)
+  ; Must have finished previous request
+  (if (eq ac-fsharp-status 'complete)
+      (progn
+        (setq ac-fsharp-status 'idle)
+        (ac-start))
+    (message "Attempted to autocomplete when not status!=complete, ignoring")))
+
+;(setq ac-fsharp-status 'complete)
+
+;(global-set-key (kbd "C-c .") 'ac-complete-fsintellisense)
 
 (defun attempt-completion ()
   (interactive)

  (interactive)
  (ac-fsharp-send-shutdown-command (get-process "fsharp-complete")))

(defun ac-fsharp-launch-completion-process ()
  (interactive)
  (message "Launching completion process")


    (acknowledged
     (message "ac-fsharp-candidate triggered - ack")
     (setq ac-fsharp-status 'complete)
     ac-fsharp-current-candidate)

    (preempted
     (message "fsharp-async is preempted by a critical request")
     nil)

    (otherwise
     (message "ac-fsharp-candidate triggered - otherwise")
     ac-fsharp-current-candidate)))


(defun ac-fsharp-stash-partial (str)
