diff --git a/code/stream.lisp b/code/stream.lisp
index 46dca33c8bd4d6c2b91cfe83431fd10f3d38dae9..42effc0e5629385617e1e3cd1682f2ba29077c35 100644
--- a/code/stream.lisp
+++ b/code/stream.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/stream.lisp,v 1.69 2004/04/06 11:41:54 emarsden Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/stream.lisp,v 1.70 2004/04/06 17:30:12 emarsden Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -962,7 +962,7 @@ streams."
   (let ((streams (broadcast-stream-streams stream)))
     (case operation
       (:charpos
-       (dolist (stream streams)
+       (dolist (stream streams 0)
 	 (let ((charpos (charpos stream)))
 	   (if charpos (return charpos)))))
       (:line-length
@@ -971,9 +971,16 @@ streams."
 	   (let ((res (line-length stream)))
 	     (when res (setq min (if min (min res min) res)))))))
       (:element-type
+       #+nil ; old, arguably more logical, version
        (let (res)
 	 (dolist (stream streams (if (> (length res) 1) `(and ,@res) t))
-	   (pushnew (stream-element-type stream) res :test #'equal))))
+	   (pushnew (stream-element-type stream) res :test #'equal)))
+       ;; ANSI-specified version (under System Class BROADCAST-STREAM)
+       (let ((res t))
+	 (do ((streams streams (cdr streams)))
+	     ((null streams) res)
+	   (when (null (cdr streams))
+	     (setq res (stream-element-type (car streams)))))))
       (:close)
       (t
        (let ((res nil))
@@ -2524,6 +2531,9 @@ SEQ:	a proper SEQUENCE
 
 	       ((simple-array (signed-byte *) (*))
 		(write-vector-out seq stream start end))
+
+	       (bit-vector
+		(write-vector-out seq stream start end))
 	       )
 	     seq)))