 ;;;###autoload
 (defun make-divider (&optional end-col)
   "Insert a comment divider line: the comment start, filler, and end.
-END-COL is the last column of the divider line."
-  (interactive)
+The width is `fill-column', by default.  With a numeric prefix arg,
+use that as the width, except use at least 4 columns."
+  (interactive "P")
+  (setq end-col  (if end-col (prefix-numeric-value end-col) fill-column))
   (insert comment-start)
   (when (= 1 (length comment-start)) (insert comment-start))
-  (insert (make-string (max 2 (- (or end-col (- fill-column 2))
-                                 (length comment-end) 2 (current-column)))
-                       (aref comment-start
-                             (if (= 1 (length comment-start)) 0 1))))
-  (insert (concat comment-end "\n")))
+  (insert (make-string (max 2 (- end-col (length comment-end) (current-column)))
+                       (aref comment-start (if (= 1 (length comment-start)) 0 1)))
+          comment-end
+          "\n"))
 
 ;;;###autoload
 (defun make-box-comment (&optional end-col)
   "Insert an empty (mode dependent) box comment.
-END-COL is the last column of the divider line."
-  (interactive)
+The maxium width is `fill-column', by default.  With a numeric prefix
+arg, use that as the maximum width, except use at least 2 + the length
+returned by function `header-prefix-string'."
+  (interactive "P")
+  (setq end-col  (if end-col (prefix-numeric-value end-col) fill-column))
   (unless (= 0 (current-column)) (forward-line 1))
   (insert comment-start)
   (when (= 1 (length comment-start)) (insert comment-start))
-  (unless (char-equal (preceding-char) ? ) (insert ? ))
-  (insert (make-string (max 2 (- (or end-col fill-column ) (length comment-end)
-                                 2 (current-column)))
-                       (aref comment-start
-                             (if (= 1 (length comment-start)) 0 1))))
-  (insert "\n" (header-prefix-string) )
+  (unless (char-equal (preceding-char) ?\  ) (insert ?\  ))
+  (insert (make-string (max 2 (- end-col (length comment-end) (current-column)))
+                       (aref comment-start (if (= 1 (length comment-start)) 0 1)))
+          "\n"
+          (header-prefix-string))
   (save-excursion
-    (insert "\n" (header-prefix-string)
-            (make-string (max 2 (- (or end-col fill-column)
-                                   (length comment-end) 2 (current-column)))
-                         (aref comment-start
-                               (if (= 1 (length comment-start)) 0 1)))
-            comment-end "\n")))
+    (insert "\n"
+            (header-prefix-string)
+            (make-string (max 2 (- end-col (length comment-end) (current-column)))
+                         (aref comment-start (if (= 1 (length comment-start)) 0 1)))
+            comment-end
+            "\n")))
+
+(defun make-box-comment-region (&optional end-col start end)
+  "Wrap active region in a box comment, or make an empty box comment.
+The maxium width is `fill-column', by default.  With a numeric prefix
+arg, use that as the maximum width, except use at least 2 + the length
+returned by function `header-prefix-string'.
+Respects `make-box-comment-region-remove-comments'."
+  (interactive "P\nr")
+  (setq end-col  (if end-col (prefix-numeric-value end-col) fill-column))
+  (if (not (and mark-active  (mark)  (> (region-end) (region-beginning))))
+      (make-box-comment end-col)
+    (let ((selection    (buffer-substring start end)))
+      (kill-region start end)
+      (make-box-comment end-col)
+      (insert
+       (replace-regexp-in-string "\n"
+                                 (concat "\n" (header-prefix-string))
+                                 (if make-box-comment-region-replace-prefix-flag
+                                     (replace-regexp-in-string
+                                      (concat "^[ \t]*[" (nonempty-comment-start) "]*")
+                                      ""
+                                      selection)
+                                   selection))))))
+
 
 
 ;; Automatic Header update code

;; Quiet byte-compiler.
(defvar c-style)
(defvar explicit-shell-file-name)
 
;; User Options (Variables) --------------------------------

(defgroup Automatic-File-Header nil


(defun header-prefix-string ()
  "Return a mode-specific prefix string for use in headers.
It is sensitive to language-dependent comment conventions."
  (cond
    ;; E.g. Lisp.
    ((and comment-start (= 1 (length comment-start)))
