diff --git a/Objects/stringlib/count.h b/Objects/stringlib/count.h
new file mode 100644
index 0000000..0036f63
--- /dev/null
+++ b/Objects/stringlib/count.h
@@ -0,0 +1,34 @@
+/* stringlib: count implementation */
+
+#ifndef STRINGLIB_COUNT_H
+#define STRINGLIB_COUNT_H
+
+#ifndef STRINGLIB_FASTSEARCH_H
+#error must include "stringlib/fastsearch.h" before including this module
+#endif
+
+Py_LOCAL(Py_ssize_t)
+stringlib_count(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
+                const STRINGLIB_CHAR* sub, Py_ssize_t sub_len)
+{
+    Py_ssize_t count;
+
+    if (sub_len == 0)
+        return str_len + 1;
+
+    count = fastsearch(str, str_len, sub, sub_len, FAST_COUNT);
+
+    if (count < 0)
+        count = 0; /* no match */
+
+    return count;
+}
+
+#endif
+
+/*
+Local variables:
+c-basic-offset: 4
+indent-tabs-mode: nil
+End:
+*/
diff --git a/Objects/stringlib/find.h b/Objects/stringlib/find.h
new file mode 100644
index 0000000..c2399ad
--- /dev/null
+++ b/Objects/stringlib/find.h
@@ -0,0 +1,49 @@
+/* stringlib: find/index implementation */
+
+#ifndef STRINGLIB_FIND_H
+#define STRINGLIB_FIND_H
+
+#ifndef STRINGLIB_FASTSEARCH_H
+#error must include "stringlib/fastsearch.h" before including this module
+#endif
+
+Py_LOCAL(Py_ssize_t)
+stringlib_find(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
+               const STRINGLIB_CHAR* sub, Py_ssize_t sub_len)
+{
+    if (sub_len == 0)
+        return 0;
+
+    return fastsearch(str, str_len, sub, sub_len, FAST_SEARCH);
+}
+
+Py_LOCAL(Py_ssize_t)
+stringlib_rfind(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
+                const STRINGLIB_CHAR* sub, Py_ssize_t sub_len)
+{
+    Py_ssize_t pos;
+
+    /* XXX - create reversefastsearch helper! */
+    if (sub_len == 0)
+	pos = str_len;
+    else {
+	Py_ssize_t j;
+        pos = -1;
+	for (j = str_len - sub_len; j >= 0; --j)
+            if (STRINGLIB_CMP(str+j, sub, sub_len) == 0) {
+                pos = j;
+                break;
+            }
+    }
+
+    return pos;
+}
+
+#endif
+
+/*
+Local variables:
+c-basic-offset: 4
+indent-tabs-mode: nil
+End:
+*/
diff --git a/Objects/stringlib/partition.h b/Objects/stringlib/partition.h
index 71e80a9..8cc7abe 100644
--- a/Objects/stringlib/partition.h
+++ b/Objects/stringlib/partition.h
@@ -3,9 +3,15 @@
 #ifndef STRINGLIB_PARTITION_H
 #define STRINGLIB_PARTITION_H
 
+#ifndef STRINGLIB_FASTSEARCH_H
+#error must include "stringlib/fastsearch.h" before including this module
+#endif
+
 Py_LOCAL(PyObject*)
-partition(PyObject* str_obj, const STRINGLIB_CHAR* str, Py_ssize_t str_len,
-          PyObject* sep_obj, const STRINGLIB_CHAR* sep, Py_ssize_t sep_len)
+stringlib_partition(
+    PyObject* str_obj, const STRINGLIB_CHAR* str, Py_ssize_t str_len,
+    PyObject* sep_obj, const STRINGLIB_CHAR* sep, Py_ssize_t sep_len
+    )
 {
     PyObject* out;
     Py_ssize_t pos;
@@ -46,8 +52,10 @@
 }
 
 Py_LOCAL(PyObject*)
-rpartition(PyObject* str_obj, const STRINGLIB_CHAR* str, Py_ssize_t str_len,
-	   PyObject* sep_obj, const STRINGLIB_CHAR* sep, Py_ssize_t sep_len)
+stringlib_rpartition(
+    PyObject* str_obj, const STRINGLIB_CHAR* str, Py_ssize_t str_len,
+    PyObject* sep_obj, const STRINGLIB_CHAR* sep, Py_ssize_t sep_len
+    )
 {
     PyObject* out;
     Py_ssize_t pos;
