diff --git a/lib/srfi/132/sort.scm b/lib/srfi/132/sort.scm
index 25230620..7844eaa5 100644
--- a/lib/srfi/132/sort.scm
+++ b/lib/srfi/132/sort.scm
@@ -158,6 +158,14 @@
      ((odd? len) (vector-ref vec mid))
      (else (mean (vector-ref vec (- mid 1)) (vector-ref vec mid))))))
 
+(define (vector-max less vec lo hi largest)
+  (cond
+   ((>= lo hi) largest)
+   ((less largest (vector-ref vec lo))
+    (vector-max less vec (+ lo 1) hi (vector-ref vec lo)))
+   (else
+    (vector-max less vec (+ lo 1) hi largest))))
+
 (define (vector-find-median < vec knil . o)
   (let* ((vec (vector-copy vec))
          (len (vector-length vec))
@@ -166,7 +174,9 @@
     (cond
      ((zero? len) knil)
      (else
-      (vector-separate! < vec mid)
-      (cond
-       ((odd? len) (vector-ref vec mid))
-       (else (mean (vector-ref vec (- mid 1)) (vector-ref vec mid))))))))
+      (let ((mid-elt (vector-select! < vec mid)))
+        (cond
+         ((odd? len) mid-elt)
+         (else
+          (mean (vector-max < vec 0 (- mid 1) (vector-ref vec (- mid 1)))
+                mid-elt))))))))
diff --git a/lib/srfi/132/test.sld b/lib/srfi/132/test.sld
index b030d2a5..c3daedca 100644
--- a/lib/srfi/132/test.sld
+++ b/lib/srfi/132/test.sld
@@ -683,4 +683,6 @@
       (test 21
           (let ((v (vector 8 22 19 19 13 9 21 13 3 23)))
             (vector-select! < v 3 4 8)))
+      (test 17.0
+          (vector-find-median < '#(18. 11. 20. 15. 16. 9. 24. 15. 21. 20.) 0))
       (test-end))))