diff --git a/Objects/stringlib/find.h b/Objects/stringlib/find.h
index 9f010c7..4cea2db 100644
--- a/Objects/stringlib/find.h
+++ b/Objects/stringlib/find.h
@@ -48,18 +48,49 @@
     return pos;
 }
 
-#ifdef STRINGLIB_STR
-
 Py_LOCAL_INLINE(Py_ssize_t)
-stringlib_find_obj(PyObject* str, PyObject* sub,
-                   Py_ssize_t start, Py_ssize_t end)
+stringlib_find_slice(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
+                     const STRINGLIB_CHAR* sub, Py_ssize_t sub_len,
+                     Py_ssize_t start, Py_ssize_t end)
 {
+    if (start < 0)
+        start += str_len;
+    if (start < 0)
+        start = 0;
+    if (end > str_len)
+        end = str_len;
+    if (end < 0)
+        end += str_len;
+    if (end < 0)
+        end = 0;
+
     return stringlib_find(
-        STRINGLIB_STR(str) + start, end - start,
-        STRINGLIB_STR(sub), STRINGLIB_LEN(sub), start
+        str + start, end - start,
+        sub, sub_len, start
         );
 }
 
+Py_LOCAL_INLINE(Py_ssize_t)
+stringlib_rfind_slice(const STRINGLIB_CHAR* str, Py_ssize_t str_len,
+                      const STRINGLIB_CHAR* sub, Py_ssize_t sub_len,
+                      Py_ssize_t start, Py_ssize_t end)
+{
+    if (start < 0)
+        start += str_len;
+    if (start < 0)
+        start = 0;
+    if (end > str_len)
+        end = str_len;
+    if (end < 0)
+        end += str_len;
+    if (end < 0)
+        end = 0;
+
+    return stringlib_rfind(str + start, end - start, sub, sub_len, start);
+}
+
+#ifdef STRINGLIB_STR
+
 Py_LOCAL_INLINE(int)
 stringlib_contains_obj(PyObject* str, PyObject* sub)
 {
@@ -69,19 +100,9 @@
         ) != -1;
 }
 
-Py_LOCAL_INLINE(Py_ssize_t)
-stringlib_rfind_obj(PyObject* str, PyObject* sub,
-                    Py_ssize_t start, Py_ssize_t end)
-{
-    return stringlib_rfind(
-        STRINGLIB_STR(str) + start, end - start,
-        STRINGLIB_STR(sub), STRINGLIB_LEN(sub), start
-        );
-}
+#endif /* STRINGLIB_STR */
 
-#endif
-
-#endif
+#endif /* STRINGLIB_FIND_H */
 
 /*
 Local variables:
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 3a855b6..f93cfa5 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -3936,12 +3936,18 @@
 	return -2;
     }
 
-    FIX_START_END((PyUnicodeObject*) str);
-
     if (direction > 0)
-        result = stringlib_find_obj(str, sub, start, end);
+        result = stringlib_find_slice(
+            PyUnicode_AS_UNICODE(str), PyUnicode_GET_SIZE(str),
+            PyUnicode_AS_UNICODE(sub), PyUnicode_GET_SIZE(sub),
+            start, end
+            );
     else
-        result = stringlib_rfind_obj(str, sub, start, end);
+        result = stringlib_rfind_slice(
+            PyUnicode_AS_UNICODE(str), PyUnicode_GET_SIZE(str),
+            PyUnicode_AS_UNICODE(sub), PyUnicode_GET_SIZE(sub),
+            start, end
+            );
 
     Py_DECREF(str);
     Py_DECREF(sub);
@@ -5284,14 +5290,15 @@
     if (!PyArg_ParseTuple(args, "O|O&O&:find", &substring,
 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
         return NULL;
-
     substring = PyUnicode_FromObject(substring);
     if (!substring)
 	return NULL;
 
-    FIX_START_END(self);
-
-    result = stringlib_find_obj((PyObject*) self, substring, start, end);
+    result = stringlib_find_slice(
+        PyUnicode_AS_UNICODE(self), PyUnicode_GET_SIZE(self),
+        PyUnicode_AS_UNICODE(substring), PyUnicode_GET_SIZE(substring),
+        start, end
+        );
 
     Py_DECREF(substring);
 
@@ -5352,14 +5359,15 @@
     if (!PyArg_ParseTuple(args, "O|O&O&:index", &substring,
 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
         return NULL;
-
     substring = PyUnicode_FromObject(substring);
     if (!substring)
 	return NULL;
 
-    FIX_START_END(self);
-
-    result = stringlib_find_obj((PyObject*) self, substring, start, end);
+    result = stringlib_find_slice(
+        PyUnicode_AS_UNICODE(self), PyUnicode_GET_SIZE(self),
+        PyUnicode_AS_UNICODE(substring), PyUnicode_GET_SIZE(substring),
+        start, end
+        );
 
     Py_DECREF(substring);
 
@@ -6027,9 +6035,11 @@
     if (!substring)
 	return NULL;
 
-    FIX_START_END(self);
-
-    result = stringlib_rfind_obj((PyObject*)self, substring, start, end);
+    result = stringlib_rfind_slice(
+        PyUnicode_AS_UNICODE(self), PyUnicode_GET_SIZE(self),
+        PyUnicode_AS_UNICODE(substring), PyUnicode_GET_SIZE(substring),
+        start, end
+        );
 
     Py_DECREF(substring);
 
@@ -6056,9 +6066,11 @@
     if (!substring)
 	return NULL;
 
-    FIX_START_END(self);
-
-    result = stringlib_rfind_obj((PyObject*)self, substring, start, end);
+    result = stringlib_rfind_slice(
+        PyUnicode_AS_UNICODE(self), PyUnicode_GET_SIZE(self),
+        PyUnicode_AS_UNICODE(substring), PyUnicode_GET_SIZE(substring),
+        start, end
+        );
 
     Py_DECREF(substring);
 
