diff --git a/prebuilt/common/Android.mk b/prebuilt/common/Android.mk
new file mode 100644
index 0000000..f15b178
--- /dev/null
+++ b/prebuilt/common/Android.mk
@@ -0,0 +1,10 @@
+LOCAL_PATH := $(call my-dir)
+
+# a wrapper for curl which provides wget syntax, for compatibility
+include $(CLEAR_VARS)
+LOCAL_MODULE := wget
+LOCAL_SRC_FILES := bin/wget
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
+include $(BUILD_PREBUILT)
diff --git a/prebuilt/common/bin/wget b/prebuilt/common/bin/wget
new file mode 100755
index 0000000..1d04de5
--- /dev/null
+++ b/prebuilt/common/bin/wget
@@ -0,0 +1,184 @@
+#!/system/bin/sh
+# wget-curl, a curl wrapper acting as a wget drop-in replacement - version git-HEAD
+# Usage: wget [wget args] [i need to fill this in later] <url(s)>
+# Download all URLs given using curl, but using wget's options.
+#
+#
+# End of help.
+# Copyright (c) 2015 Kylie McClain <somasis@exherbo.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# End of copyright.
+#
+
+set -o pipefail
+shopt -u shift_verbose >/dev/null 2>&1
+
+help() {
+    sed -n '/^#/!d;s/^# //;s/^#//;3,${p;}' "$0" | \
+        while IFS= read help_line;do
+            if [[ "$help_line" == "End of help." ]];then
+                exit 0
+            else
+                printf "%s\n" "$help_line"
+            fi
+        done
+    exit 0
+}
+
+version() {
+    sed 's/^# //;s/, .* - version / /;2q;$!d' "$0"
+    copyright
+    exit 0
+}
+
+copyright() {
+    sed -n '/^#/!d;s/^# //;s/^#//;/End of help./,${p;}' "$0" | \
+        while IFS= read copyright_line;do
+            if [[ "$copyright_line" == "End of help." ]];then
+                true
+            elif [[ "$copyright_line" == "End of copyright." ]];then
+                break
+            else
+                printf '%s\n' "$copyright_line"
+            fi
+        done
+}
+
+stderr() {
+    printf "$@" >&2
+}
+
+error() {
+    stderr "$0: $1\n"
+    exit "$2"
+}
+
+invalid_arg() {
+    error "invalid option -- '$1'" 2
+}
+
+append_opt() {
+    for opt in $@;do
+        CURL_OPTS="${CURL_OPTS} ${opt}"
+    done
+}
+
+curl() {
+    eval "command curl $@ ${CURL_RAW}"
+}
+
+append_raw_arg() {
+    CURL_RAW="$CURL_RAW $@"
+}
+
+has_opt() { # exit 0 if CURL_OPTS has arg, non-zero if doesn't
+    if [[ "$CURL_OPTS" == *" $1"* ]];then
+        return 0
+    else
+        return 1
+    fi
+}
+
+reexec_without() { # download afterwards without $1 in OPTS
+    reexec_args_without="$reexec_args_without $@"
+    reexec=1
+}
+
+reexec_only() {
+    for arg in $@;do
+        CURL_OPTS_REEXEC_ONLY="${CURL_OPTS_REEXEC_ONLY} $arg"
+    done
+}
+
+print_url() {
+    has_opt -s || printf "%s\n" "$1"
+}
+
+# 46ABDFHIKLNOPQRSTUVXabcdhiklm nH nc nd np nv opqrtvwx
+while getopts ':46ABDFHIKLNO:PQRST:U:VXa:bcdhiklmopqrtvwx' argument "$@";do
+    case "$argument" in
+        # a lot of these are noop right now because they are wget mirror args
+        # which curl doesn't really do, and i am not sure if i should implement them
+        4)  append_opt -4       ;;
+        6)  append_opt -6       ;;
+        A)  true                ;; # probably can't implement this easily...
+        B)  true                ;;
+        D)  true                ;;
+        E)  true                ;;
+        F)  true                ;; # curl doesn't care what the input is
+        H)  true                ;;
+        I)  true                ;;
+        K)  true                ;;
+        L)  true                ;;
+        N)  true                ;;
+        O)  append_opt "-o $OPTARG"                 ;;
+        P)  true                ;;
+        Q)  true                ;;
+        R)  true                ;;
+        S)  append_opt -I;reexec_without -I -s  ;;
+        T)  append_opt "-m $OPTARG"                 ;;
+        U)  append_opt "--user-agent \"$OPTARG\""   ;;
+        V)  version; curl --version; exit 0         ;;
+        X)  true                                    ;;
+        a)  append_raw_arg "2>&1 | tee -a $OPTARG"  ;;
+        b)
+            wget_log="wget-log"
+            i=1
+            while [[ -f "${wget_log}" ]];do
+                # if that exists, increment until we find something that doesn't
+                i=$(($i+1))
+                wget_log="wget-log.${i}"
+            done
+            append_raw_arg ">\"$wget_log\" 2>&1 &"
+            printf "Continuing in background, pid %s.\nOutput will be written to '$wget_log'.\n" "$$"
+        ;;
+        c)  append_opt "-C -"                       ;;
+        d)  append_opt "-v"                         ;;
+        e)  true                                    ;;
+        h)  help                                    ;;
+        i)
+            [[ ! -f "$OPTARG" ]] && error "$OPTARG does not exist" 3
+            for url in $(<"$OPTARG");do
+                URLS=( ${URLS[@]} "$url" )
+            done
+        ;;
+        q)  append_opt "-s"                         ;;
+    esac
+    shift $(($OPTIND-1))
+done
+
+# set wget default equivilants
+append_opt -L # follow redirects
+append_opt -# # progress bar
+
+if [[ -z "${URLS[@]}" ]];then
+    URLS=( ${@} )
+fi
+
+for url in ${URLS[@]};do
+    url_file=${url##*/}
+    if [[ "$url" == "$url_file" ]];then
+        # has no remote file name and -o is not in CURL_OPTS... assume index.html
+        has_opt -o || append_opt "-o index.html"
+    fi
+
+    eval "print_url '$url';curl ${CURL_OPTS} -- $url"
+    if [[ "$reexec" ]];then
+        for reexec_arg in ${reexec_args_without};do
+            CURL_OPTS_REEXEC=$(echo "${CURL_OPTS_REEXEC:-$CURL_OPTS}" | sed "s# $reexec_arg##")
+        done
+        eval "print_url '$url';curl ${CURL_OPTS_REEXEC} ${CURL_OPTS_REEXEC_ONLY} -- $url"
+    fi
+done
