diff --git a/toolbox/Android.mk b/toolbox/Android.mk
index 4698cd2..dc4252d 100644
--- a/toolbox/Android.mk
+++ b/toolbox/Android.mk
@@ -220,10 +220,12 @@
     # which takes up more space than is necessary so long as we are still
     # including busybox.
     LOCAL_SRC_FILES += \
-        ../../../$(TWRP_TOOLBOX_PATH)/dynarray.c \
         ../../../$(TWRP_TOOLBOX_PATH)/getprop.c \
         ../../../$(TWRP_TOOLBOX_PATH)/setprop.c
     OUR_TOOLS += getprop setprop
+    ifneq ($(TW_USE_TOOLBOX), true)
+        LOCAL_SRC_FILES += ls.c
+    endif
 endif
 
 LOCAL_MODULE := toolbox_recovery
diff --git a/toolbox/dynarray.c b/toolbox/dynarray.c
deleted file mode 100644
index 3c35aa9..0000000
--- a/toolbox/dynarray.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "dynarray.h"
-#include <stdlib.h>
-#include <limits.h>
-#include <string.h>
-
-void
-dynarray_init( dynarray_t *a )
-{
-    a->count = a->capacity = 0;
-    a->items = NULL;
-}
-
-
-static void
-dynarray_reserve_more( dynarray_t *a, int count )
-{
-    int old_cap = a->capacity;
-    int new_cap = old_cap;
-    const int max_cap = INT_MAX/sizeof(void*);
-    void** new_items;
-    int new_count = a->count + count;
-
-    if (count <= 0)
-        return;
-
-    if (count > max_cap - a->count)
-        abort();
-
-    new_count = a->count + count;
-
-    while (new_cap < new_count) {
-        old_cap = new_cap;
-        new_cap += (new_cap >> 2) + 4;
-        if (new_cap < old_cap || new_cap > max_cap) {
-            new_cap = max_cap;
-        }
-    }
-    new_items = realloc(a->items, new_cap*sizeof(void*));
-    if (new_items == NULL)
-        abort();
-
-    a->items = new_items;
-    a->capacity = new_cap;
-}
-
-void
-dynarray_append( dynarray_t *a, void* item )
-{
-    if (a->count >= a->capacity)
-        dynarray_reserve_more(a, 1);
-
-    a->items[a->count++] = item;
-}
-
-void
-dynarray_done( dynarray_t *a )
-{
-    free(a->items);
-    a->items = NULL;
-    a->count = a->capacity = 0;
-}
-
-// string arrays
-
-void strlist_init( strlist_t *list )
-{
-    dynarray_init(list);
-}
-
-void strlist_append_b( strlist_t *list, const void* str, size_t  slen )
-{
-    char *copy = malloc(slen+1);
-    memcpy(copy, str, slen);
-    copy[slen] = '\0';
-    dynarray_append(list, copy);
-}
-
-void strlist_append_dup( strlist_t *list, const char *str)
-{
-    strlist_append_b(list, str, strlen(str));
-}
-
-void strlist_done( strlist_t *list )
-{
-    STRLIST_FOREACH(list, string, free(string));
-    dynarray_done(list);
-}
-
-static int strlist_compare_strings(const void* a, const void* b)
-{
-    const char *sa = *(const char **)a;
-    const char *sb = *(const char **)b;
-    return strcmp(sa, sb);
-}
-
-void strlist_sort( strlist_t *list )
-{
-    if (list->count > 0) {
-        qsort(list->items,
-              (size_t)list->count,
-              sizeof(void*),
-              strlist_compare_strings);
-    }
-}
diff --git a/toolbox/dynarray.h b/toolbox/dynarray.h
index f73fb3b..0ca54fd 100644
--- a/toolbox/dynarray.h
+++ b/toolbox/dynarray.h
@@ -1,6 +1,8 @@
 #ifndef DYNARRAY_H
 #define DYNARRAY_H
 
+// These functions are now found in system/core/toolbox/ls.c
+
 #include <stddef.h>
 
 /* simple dynamic array of pointers */
@@ -77,4 +79,4 @@
 /* sort the strings in a given list (using strcmp) */
 void strlist_sort( strlist_t *list );
 
-#endif /* DYNARRAY_H */
\ No newline at end of file
+#endif /* DYNARRAY_H */
