diff --git a/.gitignore b/.gitignore
index 028c6b7..7edc5e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,6 @@
-# http://www.gnu.org/software/automake
-Makefile.in
-
-# http://www.gnu.org/software/autoconf
-/autom4te.cache
-/aclocal.m4
-/compile
-/configure
-/depcomp
-/install-sh
-/missing
-
 # Dependency files
 .deps
 
 # Object files and libraries
 *.o
 *.a
-
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..a034a45
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,87 @@
+# btpd - BitTorrent Protocol Daemon
+# See LICENSE file for copyright and license details.
+
+BTPD_SRC    = ${wildcard btpd/*.c}
+BTPD_DEPS   = ${wildcard btpd/*.h}
+BTPD_OBJ    = ${BTPD_SRC:.c=.o}
+
+BTCLI_SRC   = ${wildcard cli/*.c}
+BTCLI_DEPS  = ${wildcard cli/*.h}
+BTCLI_OBJ   = ${BTCLI_SRC:.c=.o}
+
+BTINFO_SRC  = ${wildcard info/*.c}
+BTINFO_DEPS = ${wildcard info/*.h}
+BTINFO_OBJ  = ${BTINFO_SRC:.c=.o}
+
+MISC_SRC    = ${wildcard misc/*.c}
+MISC_DEPS   = ${wildcard misc/*.h}
+MISC_OBJ    = ${MISC_SRC:.c=.o}
+
+EVLOOP_SRC  = ${wildcard evloop/*.c}
+EVLOOP_DEPS = ${wildcard evloop/*.h}
+EVLOOP_OBJ  = ${EVLOOP_SRC:.c=.o}
+
+include config.mk
+
+all: options btpd btinfo btcli
+
+options:
+	@echo btpd build options:
+	@echo "CFLAGS   = ${CFLAGS}"
+	@echo "LDFLAGS  = ${LDFLAGS}"
+	@echo "CC       = ${CC}"
+
+.c.o:
+	${CC} -c ${DEFS} ${CPPFLAGS} ${CFLAGS} $< -o $@
+
+${%_OBJ}: ${%_DEPS}
+
+libmisc.a: ${MISC_OBJ}
+	ar rcs misc/$@ ${MISC_OBJ}
+
+libevloop.a: ${EVLOOP_OBJ}
+	ar rcs evloop/$@ ${EVLOOP_OBJ}
+
+btpd: ${BTPD_OBJ} libmisc.a libevloop.a
+	${CC} ${CFLAGS} -o btpd/$@ ${BTPD_OBJ}	 misc/libmisc.a evloop/libevloop.a ${LDFLAGS}
+
+btinfo: ${BTINFO_OBJ} libmisc.a
+	${CC} ${CFLAGS} -o info/$@ ${BTINFO_OBJ} misc/libmisc.a ${LDFLAGS}
+
+btcli: ${BTCLI_OBJ} libmisc.a
+	${CC} ${CFLAGS} -o cli/$@  ${BTCLI_OBJ}  misc/libmisc.a ${LDFLAGS}
+
+clean:
+	rm -f btpd/btpd cli/btcli info/btinfo\
+		**/*.o **/*.a\
+		btpd-${VERSION}.tar.gz
+
+dist: clean
+	mkdir -p btpd-${VERSION}
+	cp -R COPYRIGHT Makefile README CHANGES configure config.mk btpd cli doc evloop info misc\
+		btpd-${VERSION}
+	tar -cf btpd-${VERSION}.tar btpd-${VERSION}
+	gzip btpd-${VERSION}.tar
+	rm -rf btpd-${VERSION}
+
+install: all
+	mkdir -p ${DESTDIR}${PREFIX}/bin
+	cp -f btpd/btpd cli/btcli info/btinfo ${DESTDIR}${PREFIX}/bin
+	chmod 755 ${DESTDIR}${PREFIX}/bin/btpd
+	chmod 755 ${DESTDIR}${PREFIX}/bin/btcli
+	chmod 755 ${DESTDIR}${PREFIX}/bin/btinfo
+	mkdir -p ${DESTDIR}${MANPREFIX}/man1
+	cp -f doc/*.1 ${DESTDIR}${MANPREFIX}/man1
+	chmod 644 ${DESTDIR}${MANPREFIX}/man1/btpd.1
+	chmod 644 ${DESTDIR}${MANPREFIX}/man1/btcli.1
+	chmod 644 ${DESTDIR}${MANPREFIX}/man1/btinfo.1
+
+uninstall:
+	rm -f ${DESTDIR}${PREFIX}/bin/btpd\
+		${DESTDIR}${PREFIX}/bin/btcli\
+		${DESTDIR}${PREFIX}/bin/btinfo\
+		${DESTDIR}${MANPREFIX}/man1/btpd.1\
+		${DESTDIR}${MANPREFIX}/man1/btcli.1\
+		${DESTDIR}${MANPREFIX}/man1/btinfo.1
+
+.PHONY: all options clean dist install uninstall
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644
index b74a7e3..0000000
--- a/Makefile.am
+++ /dev/null
@@ -1,57 +0,0 @@
-AM_CFLAGS=-std=c99 -Wall @WARNNPS@
-AM_CPPFLAGS=-D_FILE_OFFSET_BITS=64 -D@EVLOOP_METHOD@ -I$(top_srcdir)/misc -I$(top_srcdir)/evloop @openssl_CPPFLAGS@
-AM_LDFLAGS=@openssl_LDFLAGS@
-
-bin_PROGRAMS=btpd/btpd cli/btcli cli/btinfo
-noinst_LIBRARIES=misc/libmisc.a evloop/libevloop.a
-dist_man1_MANS=doc/btcli.1 doc/btinfo.1 doc/btpd.1
-
-EXTRA_DIST=COPYRIGHT CHANGES
-
-# btpd
-btpd_btpd_SOURCES=\
-	btpd/active.c btpd/active.h btpd/addrinfo.c\
-	btpd/btpd.c btpd/btpd.h\
-	btpd/cli_if.c btpd/content.c btpd/content.h\
-	btpd/download.c btpd/download_subr.c btpd/download.h\
-	btpd/http_tr_if.c\
-	btpd/main.c\
-	btpd/nameconn.c btpd/net.c btpd/net.h btpd/net_types.h\
-	btpd/net_buf.c btpd/net_buf.h\
-	btpd/opts.c btpd/opts.h\
-	btpd/peer.c btpd/peer.h\
-	btpd/thread_cb.c btpd/tlib.c btpd/tlib.h btpd/torrent.c btpd/torrent.h\
-	btpd/tracker_req.c btpd/tracker_req.h\
-	btpd/upload.c btpd/upload.h\
-	btpd/util.c
-btpd_btpd_CFLAGS=@TD_CFLAGS@ $(AM_CFLAGS)
-btpd_btpd_LDADD=@TD_LIBS@ misc/libmisc.a evloop/libevloop.a -lcrypto -lm @CLOCKLIB@ @INETLIBS@
-
-# btinfo
-cli_btinfo_SOURCES=cli/btinfo.c
-cli_btinfo_LDADD=misc/libmisc.a -lcrypto -lm
-
-# btcli
-cli_btcli_SOURCES=cli/btcli.c cli/btcli.h cli/add.c cli/del.c cli/list.c cli/rate.c cli/kill.c cli/start.c cli/stop.c cli/stat.c
-cli_btcli_LDADD=misc/libmisc.a -lcrypto -lm @INETLIBS@
-
-# libmisc
-misc_libmisc_a_SOURCES=\
-	misc/benc.c misc/benc.h\
-	misc/btpd_if.c misc/btpd_if.h misc/ipcdefs.h\
-	misc/metainfo.c misc/metainfo.h\
-	misc/hashtable.c misc/hashtable.h\
-	misc/http_client.c misc/http_client.h\
-	misc/iobuf.c misc/iobuf.h\
-	misc/queue.h\
-	misc/stream.c misc/stream.h\
-	misc/subr.c misc/subr.h\
-	misc/utils.h
-
-# evloop
-EXTRA_evloop_libevloop_a_SOURCES=evloop/epoll.c evloop/kqueue.c evloop/poll.c
-evloop_libevloop_a_SOURCES=\
-	evloop/evloop.h\
-	evloop/timeheap.c evloop/timeheap.h evloop/timer.c
-evloop_libevloop_a_LIBADD=@EVLOOP_IMPL@
-evloop_libevloop_a_DEPENDENCIES=@EVLOOP_IMPL@
diff --git a/config.mk b/config.mk
new file mode 100644
index 0000000..3bb1968
--- /dev/null
+++ b/config.mk
@@ -0,0 +1,26 @@
+# btpd version
+NAME = btpd
+VERSION = 0.16
+
+# paths
+PREFIX = /usr
+MANPREFIX = ${PREFIX}/share/man
+
+MISC = ./misc
+EVLOOP = ./evloop
+
+# includes and libs
+INCS = -I${MISC} -I${EVLOOP}
+LIBS = -lcrypto -lm
+
+# flags
+CPPFLAGS = ${INCS} -DHAVE_CLOCK_MONOTONIC=1 -DEVLOOP_NONE
+CFLAGS = -march=native -pipe -O3 -fno-math-errno
+LDFLAGS = ${LIBS}
+DEFS = -DPACKAGE_NAME=\"${NAME}\" -DPACKAGE_VERSION=\"${VERSION}\"
+
+# compiler
+CC = gcc
+
+# excluded
+EVLOOP_SRC := ${filter-out evloop/poll.c evloop/epoll.c evloop/kqueue.c, ${EVLOOP_SRC}}
diff --git a/configure b/configure
new file mode 100755
index 0000000..aaba04d
--- /dev/null
+++ b/configure
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+evloop=POLL
+
+for arg in "$@"; do
+    case "$arg" in
+    --with-evloop-method=*)
+        evloop=`echo $arg | sed 's/--with-evloop-method=//'`
+        ;;
+
+    --help|-h|*)
+        echo 'usage: ./configure [options]'
+        echo 'options:'
+        echo '  --with-evloop-method=<option>: select evloop method (EPOLL,POLL,KQUEUE)'
+        echo '  --help: show this'
+        exit 0
+        ;;
+    esac
+done
+
+case "$evloop" in
+	POLL|EPOLL|KQUEUE)
+		sed -i "s/DEVLOOP_.*/DEVLOOP_$evloop/g" config.mk
+		case "$evloop" in
+			POLL)
+				sed -i "s|filter-out .*|filter-out evloop/epoll.c evloop/kqueue.c, \${EVLOOP_SRC}}|g" config.mk
+				;;
+
+			EPOLL)
+				sed -i "s|filter-out .*|filter-out evloop/poll.c evloop/kqueue.c, \${EVLOOP_SRC}}|g" config.mk
+				;;
+
+			KQUEUE)
+				sed -i "s|filter-out .*|filter-out evloop/poll.c evloop/epoll.c, \${EVLOOP_SRC}}|g" config.mk
+				;;
+		esac
+		;;
+
+	*)
+		sed -i "s/DEVLOOP_.*/DEVLOOP_NONE/g" config.mk
+		sed -i "s|filter-out .*|filter-out evloop/poll.c evloop/epoll.c evloop/kqueue.c, \${EVLOOP_SRC}}|g" config.mk
+		;;
+esac
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index 22cee34..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,153 +0,0 @@
-AC_PREREQ(2.61)
-AC_INIT(btpd, 0.16+, btpd-users@googlegroups.com)
-
-AM_INIT_AUTOMAKE([1.10 foreign subdir-objects])
-
-AC_CONFIG_FILES([Makefile])
-
-AC_PROG_CC
-AM_PROG_CC_C_O
-AC_PROG_RANLIB
-AC_USE_SYSTEM_EXTENSIONS
-
-AC_DEFUN([PROG_SILENT_IFELSE],
-ac_output=`$1 2>&1`
-if test x"$ac_output" != x; then
-echo $1 nonsilent >&AS_MESSAGE_LOG_FD
-echo $ac_output >&AS_MESSAGE_LOG_FD
-[$3]
-else
-[$2]
-fi)
-AC_DEFUN([CC_ARGS_OK_IFELSE],
-AC_LANG_PUSH(C)
-AC_LANG_CONFTEST([int foo(void) { return 12; }])
-AC_LANG_POP(C)
-PROG_SILENT_IFELSE([$CC $1 -c conftest.c],
-rm -f conftest.c conftest.$OBJEXT
-[$2],
-rm -f conftest.c conftest.$OBJEXT
-[$3]))
-
-AC_ARG_WITH(openssl,
-[  --with-openssl=dir      use openssl installed in dir],
-[
-    AC_SUBST(openssl_LDFLAGS,["-L${withval}/lib -Wl,-R,${withval}/lib"])
-    AC_SUBST(openssl_CPPFLAGS,"-I${withval}/include")
-])
-
-AC_ARG_WITH(evloop-method,
-[  --with-evloop-method    select evloop method (epoll,poll,kqueue)],
-    evloop_methods=$withval,
-    evloop_methods="epoll kqueue poll")
-
-old_LIBS=$LIBS
-LIBS=""
-AC_SEARCH_LIBS(inet_ntop, nsl,,AC_MSG_FAILURE(btpd needs inet_ntop))
-AC_SEARCH_LIBS(bind, socket,,AC_MSG_FAILURE(btpd needs bind))
-AC_SUBST(INETLIBS,$LIBS)
-LIBS=$old_LIBS
-AC_CHECK_FUNCS(asprintf)
-
-AC_MSG_CHECKING(for CLOCK_MONOTONIC)
-AC_COMPILE_IFELSE([
-    #include <sys/time.h>
-    #include <time.h>
-    int main(void) { return clock_gettime(CLOCK_MONOTONIC, (void *)0); }
-],  clock_gettime=yes, clock_gettime=no)
-AC_MSG_RESULT($clock_gettime)
-if test $clock_gettime = yes; then
-    old_LIBS=$LIBS
-    LIBS=""
-    AC_SEARCH_LIBS(clock_gettime,rt,clock_gettime=yes,clock_gettime=no)
-    AC_SUBST(CLOCKLIB,$LIBS)
-    LIBS=$old_LIBS
-    AC_DEFINE(HAVE_CLOCK_MONOTONIC)
-fi
-if test $clock_gettime = no; then
-    AC_CHECK_FUNCS(mach_absolute_time,,
-        AC_MSG_FAILURE(no supported time mechanism found))
-fi
-
-AC_MSG_CHECKING(whether compiler accepts -Wno-pointer-sign)
-CC_ARGS_OK_IFELSE(-Wno-pointer-sign,
-    AC_SUBST(WARNNPS,"-Wno-pointer-sign")
-    AC_MSG_RESULT(yes)
-,
-    AC_MSG_RESULT(no))
-
-old_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS $openssl_LDFLAGS"
-AC_CHECK_LIB(crypto, SHA1_Final,:,AC_MSG_FAILURE(btpd needs openssl's libraries and headers))
-LDFLAGS=$old_LDFLAGS
-
-for m in $evloop_methods; do
-    case $m in
-    epoll)
-        AC_CHECK_FUNC(epoll_wait,[
-            AC_SUBST(EVLOOP_IMPL,"evloop/epoll.${OBJEXT}")
-            AC_SUBST(EVLOOP_METHOD,EVLOOP_EPOLL)
-            break])
-        ;;
-    kqueue)
-        AC_CHECK_FUNC(kqueue,[
-            AC_SUBST(EVLOOP_IMPL,"evloop/kqueue.${OBJEXT}")
-            AC_SUBST(EVLOOP_METHOD,EVLOOP_KQUEUE)
-            break])
-        ;;
-    poll)
-        AC_CHECK_FUNC(poll,[
-            AC_SUBST(EVLOOP_IMPL,"evloop/poll.${OBJEXT}")
-            AC_SUBST(EVLOOP_METHOD,EVLOOP_POLL)
-            break])
-        break
-        ;;
-    *)
-        AC_MSG_ERROR($m is not a valid evloop method)
-        exit 1
-        ;;
-    esac
-done
-if test x"$EVLOOP_METHOD" = x; then
-    AC_MSG_FAILURE(no suitable evloop method found)
-    exit 1
-else
-    AC_MSG_NOTICE(selected evloop method $EVLOOP_METHOD)
-fi
-
-for i in 0 1 2 3 4 5 6 7; do
-    case $i in
-    0) if test x"$TD_CFLAGS$TD_LIBS" = x; then continue; fi;;
-    1) TD_CFLAGS=-pthread;;
-    2) TD_CFLAGS=-pthreads;;
-    3) TD_CFLAGS=-kthread;;
-    4) TD_CFLAGS=-mt;;
-    5) TD_LIBS=-lpthread;;
-    6) ;;
-    7) AC_MSG_FAILURE(how do you build with pthreads on this system?);;
-    esac
-    AC_MSG_CHECKING(whether pthreads compiles with flags \"$TD_CFLAGS $TD_LIBS\")
-    CC_ARGS_OK_IFELSE($TD_CFLAGS $CFLAGS $TD_LIBS $LIBS,,
-        AC_MSG_RESULT(no)
-        TD_CFLAGS=""; TD_LIBS=""
-        continue)
-
-    old_CFLAGS=$CFLAGS; old_LIBS=$LIBS
-    CFLAGS="$TD_CFLAGS $CFLAGS"; LIBS="$TD_LIBS $LIBS"
-    AC_LINK_IFELSE([
-        #include <pthread.h>
-        int main(void) { return pthread_create(0,0,0,0);}
-    ], [
-        AC_MSG_RESULT(yes)
-        CFLAGS=$old_CFLAGS; LIBS=$old_LIBS
-        break
-    ], [
-        AC_MSG_RESULT(no)
-        TD_CFLAGS=""; TD_LIBS=""
-        CFLAGS=$old_CFLAGS; LIBS=$old_LIBS
-    ])
-done
-AC_SUBST(TD_CFLAGS)
-AC_SUBST(TD_LIBS)
-
-AC_OUTPUT
diff --git a/cli/btinfo.c b/info/btinfo.c
similarity index 100%
rename from cli/btinfo.c
rename to info/btinfo.c