 ;; BUFFER SYNCHRONIZATION ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defun merlin-buffer-substring (start end)
+(defun merlin--buffer-substring (start end)
    "Return content of buffer between two points or empty string if points are not valid"
    (if (< start end) (buffer-substring-no-properties start end) ""))
 
-(defun merlin-tell-source (code)
+(defun merlin--tell-source (code)
   "Tell CODE to merlin and returns whether the position if marker is still active."
   (let ((result (merlin-send-cursor-command `(tell source ,code))))
      (when (cdr result) (car result))))
 
-(defun merlin-tell-rest ()
+(defun merlin--tell-rest ()
   "Put a marker and tell merlin until marker is satisfied."
   (let* ((marker (cdr (merlin-send-cursor-command '(tell marker))))
          (point (when marker (point))))
     (while (and point
 		(not (= point (point-max))))
       (forward-line 10)
-      (setq point (merlin-tell-source
-		   (merlin-buffer-substring point (point)))))
+      (setq point (merlin--tell-source
+		   (merlin--buffer-substring point (point)))))
     (when point
       (merlin-send-cursor-command '(tell eof)))))
 
-(defun merlin-tell-to-point (&optional point)
+(defun merlin--tell-to-point (&optional point)
   "Tell to merlin part of the buffer between START and END. START
 may be nil, in that case the current cursor of merlin is used."
-  (merlin-reset-user)
   (let* ((point (if point point (point)))
          (start (min point merlin-dirty-point))
          (start (car (merlin-send-cursor-command
                        `(tell start at ,(merlin-unmake-point start))))))
     (setq merlin-dirty-point point)
     (save-excursion
-      (merlin-tell-source (merlin-buffer-substring start point))
+      (merlin--tell-source (merlin--buffer-substring start point))
       (goto-char point)
-      (merlin-tell-rest))))
+      (merlin--tell-rest))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; POINT SYNCHRONIZATION ;;


(defun merlin-ac-fetch-type ()
  "Prints the type of the selected candidate"
  (let ((candidate (merlin-buffer-substring merlin-completion-point  (point))))
    (when merlin-completion-types
      (mapc (lambda (item)
              (when (string-equal candidate item)


;; 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))
