             (car (bounds-of-thing-at-point 'ocaml-atom))
             (point))))
       (no-cache t)
-      (init merlin-mode)
+      (init (if merlin-mode (merlin-sync-to-point)))
       (doc-buffer
        (progn
          (let ((doc (merlin-completion-info arg)))


;; SPECIAL CASE OF COMMANDS

(defun merlin-rewind ()
  "Rewind the knowledge of merlin of the current buffer to zero."
  (interactive)
  (let* ((ext (if buffer-file-name
                  (file-name-extension buffer-file-name)
                "ml"))
         (ext (if (string-equal ext "mli") 'mli 'ml))

    (accept-process-output (merlin-process) 0.1 nil t))
  merlin-result)

(defun merlin-reset-user ()
  "Checks whether we need to change the current buffer viewed by merlin."
  (let ((name buffer-file-name))
    (with-current-buffer (merlin-process-buffer)
      (when (not (string-equal merlin-process-last-user name))
        (setq merlin-process-last-user name)
        (merlin-load-project-file name)))))

(defun merlin-send-command-async (command callback-if-success &optional callback-if-exn)
  "Send COMMAND (with arguments ARGS) to merlin asynchronously.
Give the result to callback-if-success.  If merlin reported an
