     (insert-file-contents (buffer-file-name))
     (set-buffer-modified-p nil)))
 
-(defun boom-run (boombuf)
-  (progn
-    (call-process "boom-write")
-    (call-process
-     shell-file-name nil
-     (list boombuf t) nil
-     shell-command-switch "boom-read")))
+(defun boom-run (boombuf boomcmd)
+  (call-process
+   shell-file-name nil
+   (list boombuf t) nil
+   shell-command-switch boomcmd))
 
-(defun boom-refresh (boombuf sourcebuf viewbuf)
+(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)))
+    (let ((boomexit (boom-run boombuf boomcmd)))
       (if (eq boomexit 0)
           ;; if no errors, refresh buffer
           (let ((old-pnt (point)))            

(require 'cl)

;; main function
(defun boomison (source view)
  "Create a VIEW of SOURCE"
  (interactive "FSource: \nFView: ")
  (lexical-let* 
      (;; synchronization archive
       (archive (make-temp-name source))
       ;; setup boomerang output buffer 
       (boombuf (get-buffer-create "*boomerang output*"))
       ;; run boomerang once, save exit code
       (boomexit (boom-run boombuf))
       ;; 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 boomcmd sourcebuf viewbuf)))))
    ;; main body
    (if (eq boomexit 0) 
      (progn
