Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision 24c18ea22e5f52a4b5005d87964607d0a35a0cf0)
+++ src/libcfa/stdlib	(revision 06cf47f98c44efe16711356633dcb88ab7b8e699)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Mar  4 22:03:54 2017
-// Update Count     : 102
+// Last Modified On : Sat Apr  1 17:35:24 2017
+// Update Count     : 104
 //
 
@@ -84,4 +84,6 @@
 forall( otype T | { int ?<?( T, T ); } )
 T * bsearch( T key, const T * arr, size_t dimension );
+forall( otype T | { int ?<?( T, T ); } )
+unsigned int bsearch( T key, const T * arr, size_t dimension );
 
 forall( otype T | { int ?<?( T, T ); } )
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision 24c18ea22e5f52a4b5005d87964607d0a35a0cf0)
+++ src/libcfa/stdlib.c	(revision 06cf47f98c44efe16711356633dcb88ab7b8e699)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Mar  4 22:02:22 2017
-// Update Count     : 172
+// Last Modified On : Sat Apr  1 18:31:26 2017
+// Update Count     : 181
 //
 
@@ -228,4 +228,11 @@
 
 forall( otype T | { int ?<?( T, T ); } )
+unsigned int bsearch( T key, const T * arr, size_t dimension ) {
+	int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
+	T *result = (T *)bsearch( &key, arr, dimension, sizeof(T), comp );
+	return result ? result - arr : dimension;			// pointer subtraction includes sizeof(T)
+} // bsearch
+
+forall( otype T | { int ?<?( T, T ); } )
 void qsort( const T * arr, size_t dimension ) {
 	int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
Index: src/tests/.expect/searchsort.txt
===================================================================
--- src/tests/.expect/searchsort.txt	(revision 24c18ea22e5f52a4b5005d87964607d0a35a0cf0)
+++ src/tests/.expect/searchsort.txt	(revision 06cf47f98c44efe16711356633dcb88ab7b8e699)
@@ -2,6 +2,8 @@
 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 
+10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 
 
 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
+10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 
 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 
 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 
@@ -10,7 +12,9 @@
 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 
 10.5, 9.5, 8.5, 7.5, 6.5, 5.5, 4.5, 3.5, 2.5, 1.5, 
+10.5, 9.5, 8.5, 7.5, 6.5, 5.5, 4.5, 3.5, 2.5, 1.5, 
 
 10 11, 9 10, 8 9, 7 8, 6 7, 5 6, 4 5, 3 4, 2 3, 1 2, 
 1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 8, 8 9, 9 10, 10 11, 
 10 11, 9 10, 8 9, 7 8, 6 7, 5 6, 4 5, 3 4, 2 3, 1 2, 
+10 11, 9 10, 8 9, 7 8, 6 7, 5 6, 4 5, 3 4, 2 3, 1 2, 
 
Index: src/tests/searchsort.c
===================================================================
--- src/tests/searchsort.c	(revision 24c18ea22e5f52a4b5005d87964607d0a35a0cf0)
+++ src/tests/searchsort.c	(revision 06cf47f98c44efe16711356633dcb88ab7b8e699)
@@ -10,6 +10,6 @@
 // Created On       : Thu Feb  4 18:17:50 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul  5 18:06:07 2016
-// Update Count     : 56
+// Last Modified On : Sat Apr  1 19:10:12 2017
+// Update Count     : 62
 // 
 
@@ -35,4 +35,9 @@
 		sout | *v | ", ";
 	} // for
+	sout | endl;
+	for ( unsigned int i = 0; i < size; i += 1 ) {
+		unsigned int posn = bsearch( size - i, iarr, size );
+		sout | iarr[posn] | ", ";
+	} // for
 	sout | endl | endl;
 
@@ -54,4 +59,9 @@
 			sout | *v | ", ";
 		} // for
+		sout | endl;
+		for ( unsigned int i = 0; i < size; i += 1 ) {
+			unsigned int posn = bsearch( size - i, iarr, size );
+			sout | iarr[posn] | ", ";
+		} // for
 	}
 	sout | endl | endl;
@@ -71,4 +81,9 @@
 		double *v = bsearch( size - i + 0.5, darr, size );
 		sout | *v | ", ";
+	} // for
+	sout | endl;
+	for ( unsigned int i = 0; i < size; i += 1 ) {
+		unsigned int posn = bsearch( size - i + 0.5, darr, size );
+		sout | darr[posn] | ", ";
 	} // for
 	sout | endl | endl;
@@ -93,4 +108,10 @@
 		sout | *v | ", ";
 	} // for
+	sout | endl;
+	for ( unsigned int i = 0; i < size; i += 1 ) {
+		S temp = { size - i, size - i + 1 };
+		unsigned int posn = bsearch( temp, sarr, size );
+		sout | sarr[posn] | ", ";
+	} // for
 	sout | endl | endl;
 } // main
