   (interactive)
   (let* ((pos    (liquid-get-position))
 	 (ident  (liquid-ident-at-pos pos))
+	 (sorry  (format "No information for %s" ident))
          (annot  (liquid-annot-at-pos pos)))
     (if annot 
 	(liquid-tip-popup annot)
-        (liquid-tip-popup (format "No annotation for %s at %s" ident (position-string pos))))))
+        (liquid-tip-popup sorry))))
 
 
 ;;;###autoload
-(defun liquid-tip-init ()
+(defun liquid-tip-init (&optional mode)
   "Initialize liquid-tip by making all identifiers buttons"
   (interactive)
-  (progn (button-lock-mode 1)
+  (progn (if mode (setq liquid-tip-mode mode))
+	 (button-lock-mode 1)
 	 (button-lock-set-button liquid-id-regexp 'liquid-tip-show)
-	 ;; (button-lock-set-button "yoga" 'liquid-tip-show)
-	 ;; (button-lock-set-button "mydiv" 'liquid-tip-show)
+	 ;; DEBUG (button-lock-set-button "yoga" 'liquid-tip-show)
+	 ;; DEBUG (button-lock-set-button "mydiv" 'liquid-tip-show)
 	 ))
 
 ;;;###autoload
-(defun liquid-tip-update ()
+(defun liquid-tip-update (mode)
   "Update liquid-annot-table by reloading annot file for buffer"
   (interactive)
-  42)
-
+  (let* ((pos  (liquid-get-position))
+	 (file (position-file pos)))
+    (liquid-annot-set file mode)))
 
 ;; DEBUG (defface my-tooltip
 ;; DEBUG   '((t

	 (ro    (gethash-nil r tys)))
    (gethash-nil "ann" (gethash-nil c ro))))

;; -- Display --------------------------------------------------------------

;; If you want the separate balloon-popup
(defun liquid-tip-popup (text)
  "Display text in a window popup"
  (if (and (functionp 'ac-quick-help-use-pos-tip-p)
           (ac-quick-help-use-pos-tip-p))
      (pos-tip-show text 'popup-tip-face nil nil 300 popup-tip-max-width)
    (popup-tip text)))

;; If you just want the ascii-popup
;; (defun liquid-tip-popup (text)
;;  "Display text in ascii popup"
;;   (popup-tip text))


;; -- Compute range ---------------------------------------------------------



(defun get-json-from-file (filePath)
  "Return json object from filePath's content"
  (if (file-exists-p filePath)
      (let* ((json-key-type 'string)
	     (str (get-string-from-file filePath)))
	(json-read-from-string str))
      nil))

;; ------------------------------------------------------------------------
;; get/set annot information 
;; ------------------------------------------------------------------------

(defun gethash-nil (key table) 
  (if table 
      (gethash key table nil)
      nil))

(defun liquid-annot-filepath-prefix (mode)
  "Return prefix of annotation file using mode"
  (if (equal mode 'flycheck)
      "flycheck_"
      nil))

;; (liquid-annot 'flycheck "/path/to/file.hs") 
;;    ==> "/path/to/.liquid/flycheck_file.hs.json"
;;
;; (liquid-annot nil       "/path/to/file.hs") 
;;    ==> "/path/to/.liquid/file.hs.json"

(defun liquid-annot-filepath (mode file)
  "Return name of annotation file"
  (let* ((dir    (file-name-directory file))
	 (name   (file-name-nondirectory file))
	 (prefix (liquid-annot-filepath-prefix mode)))
    (concat dir ".liquid/" prefix name ".json")))

(defvar liquid-annot-table (make-hash-table :test 'equal))

;; API
(defun liquid-annot-set (file mode)
  "Load information for file into liquid-annot-table"
  (let* ((file-path        (liquid-annot-filepath mode file))
	 (json-object-type 'hash-table)
	 (file-info        (get-json-from-file file-path)))
    (if file-info (puthash file file-info liquid-annot-table))))

;; API
(defun liquid-annot-get (file row col)
  "Get annotation for identifier at row, col in file"
  (let* ((table (gethash-nil file liquid-annot-table))
