 (require 'cl)
 
 ;; main function
-(defun boomison (source view)
-  "Create a VIEW of SOURCE"
-  (interactive "FSource: \nFView: ")
+(defun boomison (source view lens)
+  "Create a VIEW of SOURCE using LENS"
+  (interactive "FSource: \nFView: \nsLens: ")
   (lexical-let* 
       (;; synchronization archive
        (archive (make-temp-name source))
+       ;; setup boomerang command-line invocation
+       (boomcmd (concat 
+                 "boomerang" " " "sync" " " lens " " 
+                 archive " " source " " view
+                 " " "-debug sync -no-assert -no-check -no-type-check"))
        ;; setup boomerang output buffer 
        (boombuf (get-buffer-create "*boomerang output*"))
        ;; run boomerang once, save exit code
-       (boomexit (boom-run boombuf))
+       (boomexit (boom-run boombuf boomcmd))
        ;; setup source and view buffers
        (sourcebuf (find-file-noselect source t nil nil))
        (viewbuf (find-file-noselect view t nil nil))

                  (progn
                    (boom-save-buffer sourcebuf)
                    (boom-save-buffer viewbuf)
                    (boom-refresh boombuf sourcebuf viewbuf)))))
    ;; main body
    (if (eq boomexit 0) 
      (progn

    (insert-file-contents (buffer-file-name))
    (set-buffer-modified-p nil)))

(defun boom-run (boombuf boomcmd)
  (call-process
   shell-file-name nil
   (list boombuf t) nil
   shell-command-switch boomcmd))

(defun boom-refresh (boombuf boomcmd sourcebuf viewbuf)
    ;; clear boomerang buffer
    (save-window-excursion 
      (switch-to-buffer boombuf)
      (erase-buffer))
    ;; run boomerang
    (let ((boomexit (boom-run boombuf boomcmd)))
      (if (eq boomexit 0)
          ;; if no errors, refresh buffer
          (let ((old-pnt (point)))            
