diff --git a/libc/private/bionic_time.h b/libc/private/bionic_time.h
index 464ab0f..ee82254 100644
--- a/libc/private/bionic_time.h
+++ b/libc/private/bionic_time.h
@@ -49,12 +49,7 @@
     const char *  date_fmt;
 };
 
-/*
- * Note: you should consider these extensions deprecated and use managed code or icu4c instead.
- */
-extern size_t strftime_tz(char* s, size_t max, const char* format, const struct tm* tm, const struct strftime_locale* lc);
-extern time_t mktime_tz(struct tm* const tmp, char const* tz);
-extern void localtime_tz(const time_t* const timep, struct tm* tmp, const char* tz);
+extern size_t      strftime_tz(char *s, size_t max, const char *format, const struct tm *tm, const struct strftime_locale*  lc);
 
 #endif /* _BIONIC_STRFTIME_TZ_DECLARED */
 
diff --git a/libc/tzcode/localtime.c b/libc/tzcode/localtime.c
index 6838180..e442a03 100644
--- a/libc/tzcode/localtime.c
+++ b/libc/tzcode/localtime.c
@@ -217,9 +217,9 @@
 static const char * getrule P((const char * strp, struct rule * rulep));
 static void     gmtload P((struct state * sp));
 static struct tm *  gmtsub P((const time_t * timep, long offset,
-                struct tm * tmp, const struct state * sp)); // android-changed: added sp.
+                struct tm * tmp));
 static struct tm *  localsub P((const time_t * timep, long offset,
-                struct tm * tmp, const struct state * sp)); // android-changed: added sp.
+                struct tm * tmp));
 static int      increment_overflow P((int * number, int delta));
 static int      leaps_thru_end_of P((int y));
 static int      long_increment_overflow P((long * number, int delta));
@@ -230,16 +230,16 @@
 static void     settzname P((void));
 static time_t       time1 P((struct tm * tmp,
                 struct tm * (*funcp) P((const time_t *,
-                long, struct tm *, const struct state *)), // android-changed: added state*.
-                long offset, const struct state * sp)); // android-changed: added sp.
+                long, struct tm *)),
+                long offset));
 static time_t       time2 P((struct tm *tmp,
                 struct tm * (*funcp) P((const time_t *,
-                long, struct tm*, const struct state *)), // android-changed: added state*.
-                long offset, int * okayp, const struct state * sp)); // android-changed: added sp.
+                long, struct tm*)),
+                long offset, int * okayp));
 static time_t       time2sub P((struct tm *tmp,
                 struct tm * (*funcp) P((const time_t *,
-                long, struct tm*, const struct state *)), // android-changed: added state*.
-                long offset, int * okayp, int do_norm_secs, const struct state * sp)); // android-change: added sp.
+                long, struct tm*)),
+                long offset, int * okayp, int do_norm_secs));
 static struct tm *  timesub P((const time_t * timep, long offset,
                 const struct state * sp, struct tm * tmp));
 static int      tmcomp P((const struct tm * atmp,
@@ -1331,25 +1331,21 @@
 
 /*ARGSUSED*/
 static struct tm *
-localsub(timep, offset, tmp, sp) // android-changed: added sp.
+localsub(timep, offset, tmp)
 const time_t * const    timep;
 const long      offset;
 struct tm * const   tmp;
-const struct state * sp; // android-added: added sp.
 {
+    register struct state *     sp;
     register const struct ttinfo *  ttisp;
     register int            i;
     register struct tm *        result;
     const time_t            t = *timep;
 
-    // BEGIN android-changed: support user-supplied sp.
-    if (sp == NULL) {
-        sp = lclptr;
-    }
-    // END android-changed
+    sp = lclptr;
 #ifdef ALL_STATE
     if (sp == NULL)
-        return gmtsub(timep, offset, tmp, sp); // android-changed: added sp.
+        return gmtsub(timep, offset, tmp);
 #endif /* defined ALL_STATE */
     if ((sp->goback && t < sp->ats[0]) ||
         (sp->goahead && t > sp->ats[sp->timecnt - 1])) {
@@ -1376,7 +1372,7 @@
             if (newt < sp->ats[0] ||
                 newt > sp->ats[sp->timecnt - 1])
                     return NULL;    /* "cannot happen" */
-            result = localsub(&newt, offset, tmp, sp); // android-changed: added sp.
+            result = localsub(&newt, offset, tmp);
             if (result == tmp) {
                 register time_t newy;
 
@@ -1446,7 +1442,7 @@
 
     _tzLock();
     tzset_locked();
-    result = localsub(timep, 0L, tmp, NULL); // android-changed: extra parameter.
+    result = localsub(timep, 0L, tmp);
     _tzUnlock();
 
     return result;
@@ -1457,16 +1453,13 @@
 */
 
 static struct tm *
-gmtsub(timep, offset, tmp, sp) // android-changed: added sp.
+gmtsub(timep, offset, tmp)
 const time_t * const    timep;
 const long      offset;
 struct tm * const   tmp;
-const struct state * sp; // android-changed: added sp.
 {
     register struct tm *    result;
 
-    (void) sp; // android-added: unused.
-
     if (!gmt_is_set) {
         gmt_is_set = TRUE;
 #ifdef ALL_STATE
@@ -1517,7 +1510,7 @@
     struct tm*  result;
 
     _tzLock();
-    result = gmtsub(timep, 0L, tmp, NULL); // android-changed: extra parameter.
+    result = gmtsub(timep, 0L, tmp);
     _tzUnlock();
 
     return result;
@@ -1530,7 +1523,7 @@
 const time_t * const    timep;
 const long      offset;
 {
-    return gmtsub(timep, offset, &tmGlobal, NULL); // android-changed: extra parameter.
+    return gmtsub(timep, offset, &tmGlobal);
 }
 #endif /* 0 */
 #endif /* defined STD_INSPIRED */
@@ -1803,14 +1796,14 @@
 }
 
 static time_t
-time2sub(tmp, funcp, offset, okayp, do_norm_secs, sp) // android-changed: added sp
+time2sub(tmp, funcp, offset, okayp, do_norm_secs)
 struct tm * const   tmp;
-struct tm * (* const    funcp) P((const time_t*, long, struct tm*, const struct state*)); // android-changed: added state*
+struct tm * (* const    funcp) P((const time_t*, long, struct tm*));
 const long      offset;
 int * const     okayp;
 const int       do_norm_secs;
-const struct state * sp; // android-changed: added sp
 {
+    register const struct state *   sp;
     register int            dir;
     register int            i, j;
     register int            saved_seconds;
@@ -1912,7 +1905,7 @@
             t = lo;
         else if (t > hi)
             t = hi;
-        if ((*funcp)(&t, offset, &mytm, sp) == NULL) { // android-changed: added sp.
+        if ((*funcp)(&t, offset, &mytm) == NULL) {
             /*
             ** Assume that t is too extreme to be represented in
             ** a struct tm; arrange things so that it is less
@@ -1950,13 +1943,9 @@
         /*
         ** The (void *) casts are the benefit of SunOS 3.3 on Sun 2's.
         */
-        // BEGIN android-changed: support user-supplied sp
-        if (sp == NULL) {
-            sp = (const struct state *)
-                (((void *) funcp == (void *) localsub) ?
-                lclptr : gmtptr);
-        }
-        // END android-changed
+        sp = (const struct state *)
+            (((void *) funcp == (void *) localsub) ?
+            lclptr : gmtptr);
 #ifdef ALL_STATE
         if (sp == NULL)
             return WRONG;
@@ -1969,7 +1958,7 @@
                     continue;
                 newt = t + sp->ttis[j].tt_gmtoff -
                     sp->ttis[i].tt_gmtoff;
-                if ((*funcp)(&newt, offset, &mytm, sp) == NULL) // android-changed: added sp.
+                if ((*funcp)(&newt, offset, &mytm) == NULL)
                     continue;
                 if (tmcomp(&mytm, &yourtm) != 0)
                     continue;
@@ -1989,19 +1978,17 @@
     if ((newt < t) != (saved_seconds < 0))
         return WRONG;
     t = newt;
-    if ((*funcp)(&t, offset, tmp, sp)) // android-changed: added sp.
+    if ((*funcp)(&t, offset, tmp))
         *okayp = TRUE;
     return t;
 }
 
-// BEGIN android-changed: added sp.
 static time_t
-time2(tmp, funcp, offset, okayp, sp)
+time2(tmp, funcp, offset, okayp)
 struct tm * const   tmp;
-struct tm * (* const    funcp) P((const time_t*, long, struct tm*, const struct state*));
+struct tm * (* const    funcp) P((const time_t*, long, struct tm*));
 const long      offset;
 int * const     okayp;
-const struct state * sp;
 {
     time_t  t;
 
@@ -2010,19 +1997,18 @@
     ** (in case tm_sec contains a value associated with a leap second).
     ** If that fails, try with normalization of seconds.
     */
-    t = time2sub(tmp, funcp, offset, okayp, FALSE, sp);
-    return *okayp ? t : time2sub(tmp, funcp, offset, okayp, TRUE, sp);
+    t = time2sub(tmp, funcp, offset, okayp, FALSE);
+    return *okayp ? t : time2sub(tmp, funcp, offset, okayp, TRUE);
 }
-// END android-changed
 
 static time_t
-time1(tmp, funcp, offset, sp) // android-changed: added sp.
+time1(tmp, funcp, offset)
 struct tm * const   tmp;
-struct tm * (* const    funcp) P((const time_t *, long, struct tm *, const struct state *));
+struct tm * (* const    funcp) P((const time_t *, long, struct tm *));
 const long      offset;
-const struct state * sp; // android-changed: added sp.
 {
     register time_t         t;
+    register const struct state *   sp;
     register int            samei, otheri;
     register int            sameind, otherind;
     register int            i;
@@ -2033,7 +2019,7 @@
 
     if (tmp->tm_isdst > 1)
         tmp->tm_isdst = 1;
-    t = time2(tmp, funcp, offset, &okay, sp); // android-changed: added sp.
+    t = time2(tmp, funcp, offset, &okay);
 #ifdef PCTS
     /*
     ** PCTS code courtesy Grant Sullivan.
@@ -2056,12 +2042,8 @@
     /*
     ** The (void *) casts are the benefit of SunOS 3.3 on Sun 2's.
     */
-    // BEGIN android-changed: support user-supplied sp.
-    if (sp == NULL) {
-        sp = (const struct state *) (((void *) funcp == (void *) localsub) ?
-            lclptr : gmtptr);
-    }
-    // BEGIN android-changed
+    sp = (const struct state *) (((void *) funcp == (void *) localsub) ?
+        lclptr : gmtptr);
 #ifdef ALL_STATE
     if (sp == NULL)
         return WRONG;
@@ -2085,7 +2067,7 @@
             tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -
                     sp->ttis[samei].tt_gmtoff;
             tmp->tm_isdst = !tmp->tm_isdst;
-            t = time2(tmp, funcp, offset, &okay, sp); // android-changed: added sp.
+            t = time2(tmp, funcp, offset, &okay);
             if (okay)
                 return t;
             tmp->tm_sec -= sp->ttis[otheri].tt_gmtoff -
@@ -2103,40 +2085,11 @@
     time_t  result;
     _tzLock();
     tzset_locked();
-    result = time1(tmp, localsub, 0L, NULL); // android-changed: extra parameter.
+    result = time1(tmp, localsub, 0L);
     _tzUnlock();
     return result;
 }
 
-// BEGIN android-added
-time_t
-mktime_tz(tmp, tz)
-struct tm * const tmp;
-char const * tz;
-{
-    struct state st;
-    if (tzload(tz, &st, TRUE) != 0) {
-        // TODO: not sure what's best here, but for now, we fall back to gmt.
-        gmtload(&st);
-    }
-    return time1(tmp, localsub, 0L, &st);
-}
-
-void
-localtime_tz(timep, tmp, tz)
-const time_t * const timep;
-struct tm * tmp;
-const char* tz;
-{
-    struct state st;
-    if (tzload(tz, &st, TRUE) != 0) {
-        // TODO: not sure what's best here, but for now, we fall back to gmt.
-        gmtload(&st);
-    }
-    localsub(timep, 0L, tmp, &st);
-}
-// END android-added
-
 #ifdef STD_INSPIRED
 
 time_t
@@ -2155,7 +2108,7 @@
 
     tmp->tm_isdst = 0;
     _tzLock();
-    result = time1(tmp, gmtsub, 0L, NULL); // android-changed: extra parameter.
+    result = time1(tmp, gmtsub, 0L);
     _tzUnlock();
 
     return result;
@@ -2171,7 +2124,7 @@
 
     tmp->tm_isdst = 0;
     _tzLock();
-    result = time1(tmp, gmtsub, offset, NULL); // android-changed: extra parameter.
+    result = time1(tmp, gmtsub, offset);
     _tzUnlock();
 
     return result;
