diff --git a/.gitignore b/.gitignore
index b1de1d79d8d25ec0d0b073ea114476ffa70dd295..711974450443d28afab49d1a4eb0e8b69ab2f2e0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -132,19 +132,6 @@ uptime-*.json
 # /src/trace
 /src/trace/libor-trace.a
 
-# /src/common/
-/src/common/Makefile
-/src/common/Makefile.in
-/src/common/libor.a
-/src/common/libor-testing.a
-/src/common/libor.lib
-/src/common/libor-ctime.a
-/src/common/libor-ctime-testing.a
-/src/common/libor-ctime.lib
-/src/common/libor-event.a
-/src/common/libor-event-testing.a
-/src/common/libor-event.lib
-
 # /src/config/
 /src/config/Makefile
 /src/config/Makefile.in
@@ -173,6 +160,8 @@ uptime-*.json
 /src/lib/libtor-ctime-testing.a
 /src/lib/libtor-encoding.a
 /src/lib/libtor-encoding-testing.a
+/src/lib/libtor-evloop.a
+/src/lib/libtor-evloop-testing.a
 /src/lib/libtor-err.a
 /src/lib/libtor-err-testing.a
 /src/lib/libtor-fdio.a
diff --git a/Makefile.am b/Makefile.am
index fe2479a642578ba612cb568841dbaced1e71dd86..b2da55cdac594199ad06f3ddd5d00be984ca4ea6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -40,7 +40,6 @@ endif
 
 # "Common" libraries used to link tor's utility code.
 TOR_UTIL_LIBS = \
-	src/common/libor.a \
 	src/lib/libtor-process.a \
 	src/lib/libtor-time.a \
 	src/lib/libtor-fs.a \
@@ -68,7 +67,6 @@ TOR_UTIL_LIBS = \
 # Variants of the above for linking the testing variant of tor (for coverage
 # and tests)
 TOR_UTIL_TESTING_LIBS = \
-	src/common/libor-testing.a \
 	src/lib/libtor-process-testing.a \
 	src/lib/libtor-time-testing.a \
 	src/lib/libtor-fs-testing.a \
@@ -112,9 +110,9 @@ TOR_CRYPTO_TESTING_LIBS = \
 TOR_INTERNAL_LIBS = \
 	src/or/libtor-app.a \
 	src/lib/libtor-compress.a \
+	src/lib/libtor-evloop.a \
 	$(TOR_CRYPTO_LIBS) \
 	$(TOR_UTIL_LIBS) \
-	src/common/libor-event.a \
 	src/trunnel/libor-trunnel.a \
 	src/lib/libtor-trace.a
 
@@ -123,9 +121,9 @@ TOR_INTERNAL_LIBS = \
 TOR_INTERNAL_TESTING_LIBS = \
 	src/or/libtor-app-testing.a \
 	src/lib/libtor-compress-testing.a \
+	src/lib/libtor-evloop-testing.a \
 	$(TOR_CRYPTO_TESTING_LIBS) \
 	$(TOR_UTIL_TESTING_LIBS) \
-	src/common/libor-event-testing.a \
 	src/trunnel/libor-trunnel-testing.a \
 	src/lib/libtor-trace.a
 
diff --git a/scripts/codegen/fuzzing_include_am.py b/scripts/codegen/fuzzing_include_am.py
index fda57d2ae8d3d26661acdccb3935d6a3ecef672b..42a61876e860a6cebdff4897e3ee88f169636815 100755
--- a/scripts/codegen/fuzzing_include_am.py
+++ b/scripts/codegen/fuzzing_include_am.py
@@ -24,32 +24,17 @@ FUZZING_CFLAGS = \
 FUZZING_LDFLAG = \
 	@TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
 FUZZING_LIBS = \
-	src/or/libtor-testing.a \
-	src/common/libor-crypto-testing.a \
-	$(LIBKECCAK_TINY) \
-	$(LIBDONNA) \
-	src/common/libor-testing.a \
-	src/common/libor-ctime-testing.a \
-	src/common/libor-event-testing.a \
-	src/trunnel/libor-trunnel-testing.a \
+	$(TOR_INTERNAL_TESTING_LIBS) \
 	$(rust_ldadd) \
 	@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \
-	@TOR_LIBEVENT_LIBS@ \
-	@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ \
-	@CURVE25519_LIBS@ \
+	@TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
+	@TOR_LIB_WS32@ @TOR_LIB_IPHLPAPI@ @TOR_LIB_GDI@ @TOR_LIB_USERENV@ @CURVE25519_LIBS@ \
 	@TOR_SYSTEMD_LIBS@ \
 	@TOR_LZMA_LIBS@ \
 	@TOR_ZSTD_LIBS@
 
 oss-fuzz-prereqs: \
-	src/or/libtor-testing.a \
-	src/common/libor-crypto-testing.a \
-	$(LIBKECCAK_TINY) \
-	$(LIBDONNA) \
-	src/common/libor-testing.a \
-	src/common/libor-ctime-testing.a \
-	src/common/libor-event-testing.a \
-	src/trunnel/libor-trunnel-testing.a
+    $(TOR_INTERNAL_TESTING_LIBS)
 
 noinst_HEADERS += \
 	src/test/fuzz/fuzzing.h
diff --git a/src/common/Makefile.nmake b/src/common/Makefile.nmake
deleted file mode 100644
index a1c819fffa2181cedf4dc37ffa3824aa9dba9e57..0000000000000000000000000000000000000000
--- a/src/common/Makefile.nmake
+++ /dev/null
@@ -1,28 +0,0 @@
-all: libor.lib libor-crypto.lib libor-event.lib
-
-CFLAGS = /O2 /MT /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common \
-    /I ..\ext
-
-LIBOR_OBJECTS = address.obj backtrace.obj compat.obj container.obj di_ops.obj \
-	log.obj memarea.obj mempool.obj procmon.obj sandbox.obj util.obj \
-	util_codedigest.obj
-
-LIBOR_CRYPTO_OBJECTS = aes.obj crypto.obj crypto_format.obj compress.obj compress_zlib.obj \
-	tortls.obj crypto_curve25519.obj curve25519-donna.obj
-
-LIBOR_EVENT_OBJECTS = compat_libevent.obj
-
-curve25519-donna.obj: ..\ext\curve25519_donna\curve25519-donna.c
-	$(CC) $(CFLAGS) /D inline=_inline /c ..\ext\curve25519_donna\curve25519-donna.c
-
-libor.lib: $(LIBOR_OBJECTS)
-	lib $(LIBOR_OBJECTS) /out:libor.lib
-
-libor-crypto.lib: $(LIBOR_CRYPTO_OBJECTS)
-	lib $(LIBOR_CRYPTO_OBJECTS) /out:libor-crypto.lib
-
-libor-event.lib:  $(LIBOR_EVENT_OBJECTS)
-	lib $(LIBOR_EVENT_OBJECTS) /out:libor-event.lib
-
-clean:
-	del *.obj *.lib libor*.lib
diff --git a/src/common/include.am b/src/common/include.am
deleted file mode 100644
index 7427c694454ff19d05a83e58a10a85c9d66d40b5..0000000000000000000000000000000000000000
--- a/src/common/include.am
+++ /dev/null
@@ -1,62 +0,0 @@
-
-noinst_LIBRARIES += \
-	src/common/libor.a \
-	src/common/libor-event.a
-
-if UNITTESTS_ENABLED
-noinst_LIBRARIES += \
-	src/common/libor-testing.a \
-	src/common/libor-event-testing.a
-endif
-
-EXTRA_DIST += src/common/Makefile.nmake
-
-if USE_OPENBSD_MALLOC
-libor_extra_source=src/ext/OpenBSD_malloc_Linux.c
-else
-libor_extra_source=
-endif
-
-LIBOR_A_SRC = \
-  src/common/address_set.c				\
-  src/common/token_bucket.c				\
-  src/common/workqueue.c				\
-  $(libor_extra_source)
-
-src/common/src_common_libor_testing_a-log.$(OBJEXT) \
-  src/common/log.$(OBJEXT): micro-revision.i
-
-LIBOR_EVENT_A_SRC = \
-	src/common/compat_libevent.c \
-	src/common/procmon.c         \
-	src/common/timers.c          \
-	src/ext/timeouts/timeout.c
-
-src_common_libor_a_SOURCES = $(LIBOR_A_SRC)
-src_common_libor_event_a_SOURCES = $(LIBOR_EVENT_A_SRC)
-
-if UNITTESTS_ENABLED
-src_common_libor_testing_a_SOURCES = $(LIBOR_A_SRC)
-src_common_libor_event_testing_a_SOURCES = $(LIBOR_EVENT_A_SRC)
-else
-src_common_libor_testing_a_SOURCES =
-src_common_libor_event_testing_a_SOURCES =
-endif
-
-src_common_libor_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
-src_common_libor_event_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
-src_common_libor_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
-src_common_libor_event_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
-
-COMMONHEADERS = \
-  src/common/address_set.h			\
-  src/common/compat_libevent.h			\
-  src/common/handles.h				\
-  src/common/procmon.h				\
-  src/common/socks5_status.h                    \
-  src/common/timers.h				\
-  src/common/token_bucket.h			\
-  src/common/util.h				\
-  src/common/workqueue.h
-
-noinst_HEADERS+= $(COMMONHEADERS)
diff --git a/src/common/util.h b/src/common/util.h
deleted file mode 100644
index 55eec2b8c9772e037dc6ba602745b7a9a917f6f2..0000000000000000000000000000000000000000
--- a/src/common/util.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (c) 2003-2004, Roger Dingledine
- * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2018, The Tor Project, Inc. */
-/* See LICENSE for licensing information */
-
-/**
- * \file util.h
- * \brief Headers for util.c
- **/
-
-#ifndef TOR_UTIL_H
-#define TOR_UTIL_H
-
-#include "orconfig.h"
-#include "lib/arch/bytes.h"
-#include "lib/cc/compat_compiler.h"
-#include "lib/cc/torint.h"
-#include "lib/ctime/di_ops.h"
-#include "lib/encoding/cstring.h"
-#include "lib/encoding/time_fmt.h"
-#include "lib/err/torerr.h"
-#include "lib/fs/dir.h"
-#include "lib/fs/files.h"
-#include "lib/fs/mmap.h"
-#include "lib/fs/path.h"
-#include "lib/fs/userdb.h"
-#include "lib/intmath/addsub.h"
-#include "lib/intmath/bits.h"
-#include "lib/intmath/cmp.h"
-#include "lib/intmath/logic.h"
-#include "lib/intmath/muldiv.h"
-#include "lib/log/escape.h"
-#include "lib/log/ratelim.h"
-#include "lib/log/util_bug.h"
-#include "lib/malloc/util_malloc.h"
-#include "lib/net/ipv4.h"
-#include "lib/net/ipv6.h"
-#include "lib/net/resolve.h"
-#include "lib/net/socket.h"
-#include "lib/string/compat_ctype.h"
-#include "lib/string/compat_string.h"
-#include "lib/string/parse_int.h"
-#include "lib/string/printf.h"
-#include "lib/string/scanf.h"
-#include "lib/string/util_string.h"
-#include "lib/testsupport/testsupport.h"
-#include "lib/thread/threads.h"
-#include "lib/time/compat_time.h"
-#include "lib/wallclock/approx_time.h"
-#include "lib/wallclock/timeval.h"
-
-#endif /* !defined(TOR_UTIL_H) */
diff --git a/src/include.am b/src/include.am
index 1ed07425a6122ddd4c72849bdea3f4a3b00e9f05..950f9cc0fe7d62d172d68fcc80a622b7affc329f 100644
--- a/src/include.am
+++ b/src/include.am
@@ -8,6 +8,7 @@ include src/lib/container/include.am
 include src/lib/crypt_ops/include.am
 include src/lib/defs/include.am
 include src/lib/encoding/include.am
+include src/lib/evloop/include.am
 include src/lib/fdio/include.am
 include src/lib/fs/include.am
 include src/lib/include.libdonna.am
@@ -31,7 +32,6 @@ include src/lib/time/include.am
 include src/lib/tls/include.am
 include src/lib/trace/include.am
 include src/lib/wallclock/include.am
-include src/common/include.am
 include src/trunnel/include.am
 include src/or/include.am
 include src/rust/include.am
diff --git a/src/common/handles.h b/src/lib/container/handles.h
similarity index 100%
rename from src/common/handles.h
rename to src/lib/container/handles.h
diff --git a/src/lib/container/include.am b/src/lib/container/include.am
index e91ad7d1ca53449f530a84e59486a72a6214add7..e6492098b57f18054cb41ce34322ffbd8317e1d9 100644
--- a/src/lib/container/include.am
+++ b/src/lib/container/include.am
@@ -21,6 +21,7 @@ noinst_HEADERS +=					\
 	src/lib/container/bitarray.h			\
 	src/lib/container/bloomfilt.h			\
 	src/lib/container/buffers.h			\
+	src/lib/container/handles.h			\
 	src/lib/container/map.h				\
 	src/lib/container/order.h			\
 	src/lib/container/smartlist.h
diff --git a/src/lib/evloop/.may_include b/src/lib/evloop/.may_include
new file mode 100644
index 0000000000000000000000000000000000000000..205f41b38f2181323818f2ca9ac2eb906fa0917d
--- /dev/null
+++ b/src/lib/evloop/.may_include
@@ -0,0 +1,15 @@
+orconfig.h
+
+lib/cc/*.h
+lib/crypt_ops/*.h
+lib/evloop/*.h
+lib/intmath/*.h
+lib/log/*.h
+lib/malloc/*.h
+lib/net/*.h
+lib/string/*.h
+lib/testsupport/*.h
+lib/thread/*.h
+lib/time/*.h
+
+src/ext/timeouts/timeout.c
diff --git a/src/common/compat_libevent.c b/src/lib/evloop/compat_libevent.c
similarity index 99%
rename from src/common/compat_libevent.c
rename to src/lib/evloop/compat_libevent.c
index 9d21cf20bdeccc50e8e29c841b4b139c37f46c96..5e5faf163c718bb4664f9534a243b464ff7c2aee 100644
--- a/src/common/compat_libevent.c
+++ b/src/lib/evloop/compat_libevent.c
@@ -8,7 +8,7 @@
 
 #include "orconfig.h"
 #define COMPAT_LIBEVENT_PRIVATE
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/log/torlog.h"
diff --git a/src/common/compat_libevent.h b/src/lib/evloop/compat_libevent.h
similarity index 100%
rename from src/common/compat_libevent.h
rename to src/lib/evloop/compat_libevent.h
diff --git a/src/lib/evloop/include.am b/src/lib/evloop/include.am
new file mode 100644
index 0000000000000000000000000000000000000000..6b0076272a70180ff2c50508f3bc16e3cd1980b7
--- /dev/null
+++ b/src/lib/evloop/include.am
@@ -0,0 +1,26 @@
+
+noinst_LIBRARIES += src/lib/libtor-evloop.a
+
+if UNITTESTS_ENABLED
+noinst_LIBRARIES += src/lib/libtor-evloop-testing.a
+endif
+
+src_lib_libtor_evloop_a_SOURCES =			\
+	src/lib/evloop/compat_libevent.c		\
+	src/lib/evloop/procmon.c			\
+	src/lib/evloop/timers.c				\
+	src/lib/evloop/token_bucket.c			\
+	src/lib/evloop/workqueue.c
+
+
+src_lib_libtor_evloop_testing_a_SOURCES = \
+	$(src_lib_libtor_evloop_a_SOURCES)
+src_lib_libtor_evloop_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
+src_lib_libtor_evloop_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+
+noinst_HEADERS +=					\
+	src/lib/evloop/compat_libevent.h		\
+	src/lib/evloop/procmon.h			\
+	src/lib/evloop/timers.h				\
+	src/lib/evloop/token_bucket.h			\
+	src/lib/evloop/workqueue.h
diff --git a/src/common/procmon.c b/src/lib/evloop/procmon.c
similarity index 99%
rename from src/common/procmon.c
rename to src/lib/evloop/procmon.c
index 6c2b3e71e59a05a4e1c4ac302529c12b639e73b5..a923fbad7472a731001b4fb0b5db22dd243234b8 100644
--- a/src/common/procmon.c
+++ b/src/lib/evloop/procmon.c
@@ -6,7 +6,7 @@
  * \brief Process-termination monitor functions
  **/
 
-#include "common/procmon.h"
+#include "lib/evloop/procmon.h"
 
 #include "lib/log/torlog.h"
 #include "lib/log/util_bug.h"
diff --git a/src/common/procmon.h b/src/lib/evloop/procmon.h
similarity index 96%
rename from src/common/procmon.h
rename to src/lib/evloop/procmon.h
index b8daeed0db52dd8e2eabb0eed97bb9d91044c7b2..b596e5cc6de6afc1f3fb1688953634546bcdacea 100644
--- a/src/common/procmon.h
+++ b/src/lib/evloop/procmon.h
@@ -9,7 +9,7 @@
 #ifndef TOR_PROCMON_H
 #define TOR_PROCMON_H
 
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include "lib/log/torlog.h"
 
diff --git a/src/common/timers.c b/src/lib/evloop/timers.c
similarity index 99%
rename from src/common/timers.c
rename to src/lib/evloop/timers.c
index ff92a2e4475ee9e931cbe113c3b22f3a1c3e3b38..c07bd2e72681ca953ff57c6744980e5e280d4177 100644
--- a/src/common/timers.c
+++ b/src/lib/evloop/timers.c
@@ -31,8 +31,8 @@
 
 #define TOR_TIMERS_PRIVATE
 
-#include "common/compat_libevent.h"
-#include "common/timers.h"
+#include "lib/evloop/compat_libevent.h"
+#include "lib/evloop/timers.h"
 #include "lib/intmath/muldiv.h"
 #include "lib/log/torlog.h"
 #include "lib/log/util_bug.h"
diff --git a/src/common/timers.h b/src/lib/evloop/timers.h
similarity index 100%
rename from src/common/timers.h
rename to src/lib/evloop/timers.h
diff --git a/src/common/token_bucket.c b/src/lib/evloop/token_bucket.c
similarity index 99%
rename from src/common/token_bucket.c
rename to src/lib/evloop/token_bucket.c
index f7b092f612d6eac78b755e843ab01743ebe24d39..f7cd05c6c56db58811c0f231617dd387543f8ed8 100644
--- a/src/common/token_bucket.c
+++ b/src/lib/evloop/token_bucket.c
@@ -18,7 +18,7 @@
 
 #define TOKEN_BUCKET_PRIVATE
 
-#include "common/token_bucket.h"
+#include "lib/evloop/token_bucket.h"
 #include "lib/log/util_bug.h"
 #include "lib/intmath/cmp.h"
 #include "lib/time/compat_time.h"
diff --git a/src/common/token_bucket.h b/src/lib/evloop/token_bucket.h
similarity index 100%
rename from src/common/token_bucket.h
rename to src/lib/evloop/token_bucket.h
diff --git a/src/common/workqueue.c b/src/lib/evloop/workqueue.c
similarity index 99%
rename from src/common/workqueue.c
rename to src/lib/evloop/workqueue.c
index e5254396f912aa552538c629341a2b8b4548720c..4d36f352e3abf84d882ef3e0497c1a087ca8eae6 100644
--- a/src/common/workqueue.c
+++ b/src/lib/evloop/workqueue.c
@@ -24,8 +24,8 @@
  */
 
 #include "orconfig.h"
-#include "common/compat_libevent.h"
-#include "common/workqueue.h"
+#include "lib/evloop/compat_libevent.h"
+#include "lib/evloop/workqueue.h"
 
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/intmath/weakrng.h"
diff --git a/src/common/workqueue.h b/src/lib/evloop/workqueue.h
similarity index 100%
rename from src/common/workqueue.h
rename to src/lib/evloop/workqueue.h
diff --git a/src/lib/malloc/include.am b/src/lib/malloc/include.am
index b4c5cae54d517b70304c6ff02a3a139f4c6d2b55..50de9cb736bcca0126e54401c4a70198a7a4021e 100644
--- a/src/lib/malloc/include.am
+++ b/src/lib/malloc/include.am
@@ -8,6 +8,10 @@ endif
 src_lib_libtor_malloc_a_SOURCES =			\
 	src/lib/malloc/util_malloc.c
 
+if USE_OPENBSD_MALLOC
+src_lib_libtor_malloc_a_SOURCES += src/ext/OpenBSD_malloc_Linux.c
+endif
+
 src_lib_libtor_malloc_testing_a_SOURCES = \
 	$(src_lib_libtor_malloc_a_SOURCES)
 src_lib_libtor_malloc_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS)
diff --git a/src/lib/net/include.am b/src/lib/net/include.am
index a375ac8ad5d876223c8b112ca0bf1ffa4cd80d44..6fda1736147f7d3f5393b816323f538f41ff1bc0 100644
--- a/src/lib/net/include.am
+++ b/src/lib/net/include.am
@@ -29,4 +29,5 @@ noinst_HEADERS +=				\
 	src/lib/net/ipv6.h			\
 	src/lib/net/nettypes.h			\
 	src/lib/net/resolve.h			\
-	src/lib/net/socket.h
+	src/lib/net/socket.h			\
+	src/lib/net/socks5_status.h
diff --git a/src/common/socks5_status.h b/src/lib/net/socks5_status.h
similarity index 100%
rename from src/common/socks5_status.h
rename to src/lib/net/socks5_status.h
diff --git a/src/common/address_set.c b/src/or/address_set.c
similarity index 98%
rename from src/common/address_set.c
rename to src/or/address_set.c
index 1bd1462387ee32513443ae254c0dd8d7ce714b2d..927a5597c0aea5c90c03cbb9a596224838603e68 100644
--- a/src/common/address_set.c
+++ b/src/or/address_set.c
@@ -11,7 +11,7 @@
  **/
 
 #include "orconfig.h"
-#include "common/address_set.h"
+#include "or/address_set.h"
 #include "lib/net/address.h"
 #include "lib/container/bloomfilt.h"
 #include "lib/crypt_ops/crypto_rand.h"
diff --git a/src/common/address_set.h b/src/or/address_set.h
similarity index 100%
rename from src/common/address_set.h
rename to src/or/address_set.h
diff --git a/src/or/channel.c b/src/or/channel.c
index 2dbacbde982d4a05346f1fd86d5d4c584e33c88b..e6d717f111dfb9c8ffc5db10a7ec7766364d2475 100644
--- a/src/or/channel.c
+++ b/src/or/channel.c
@@ -79,7 +79,7 @@
 #include "lib/time/compat_time.h"
 #include "or/networkstatus.h"
 #include "or/rendservice.h"
-#include "common/timers.h"
+#include "lib/evloop/timers.h"
 
 #include "or/cell_queue_st.h"
 
diff --git a/src/or/channel.h b/src/or/channel.h
index 010a8aa5bc848306e52b8af773067494c4a40007..7f250567693198d55238c77cd3acba4ac677451d 100644
--- a/src/or/channel.h
+++ b/src/or/channel.h
@@ -11,7 +11,7 @@
 
 #include "or/or.h"
 #include "or/circuitmux.h"
-#include "common/handles.h"
+#include "lib/container/handles.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 
 #include "tor_queue.h"
diff --git a/src/or/channelpadding.c b/src/or/channelpadding.c
index 298fea79a998dfecba109f45f4e0fa65a1d177c4..504f6f8f8382d20ff3bf22bbfc366be7174598cf 100644
--- a/src/or/channelpadding.c
+++ b/src/or/channelpadding.c
@@ -22,7 +22,7 @@
 #include "or/router.h"
 #include "lib/time/compat_time.h"
 #include "or/rendservice.h"
-#include "common/timers.h"
+#include "lib/evloop/timers.h"
 
 #include "or/cell_st.h"
 #include "or/or_connection_st.h"
diff --git a/src/or/config.c b/src/or/config.c
index 13002dd9633f1fd93dc80667fe0ddbae20c8a125..9b2706982a8d880f37157cea02c62280ade1523d 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -99,7 +99,6 @@
 #include "or/rephist.h"
 #include "or/router.h"
 #include "lib/sandbox/sandbox.h"
-#include "common/util.h"
 #include "or/routerlist.h"
 #include "or/routerset.h"
 #include "or/scheduler.h"
@@ -132,7 +131,7 @@
 
 #include "lib/encoding/keyval.h"
 #include "lib/fs/conffile.h"
-#include "common/procmon.h"
+#include "lib/evloop/procmon.h"
 
 #include "or/dirauth/dirvote.h"
 #include "or/dirauth/mode.h"
diff --git a/src/or/connection.c b/src/or/connection.c
index 9680b08b56c5717bf7896ae8ae51befd0efb78d3..6fd8fbf771abbd866b5c2780bd144230ad93462e 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -105,7 +105,7 @@
 #include "lib/sandbox/sandbox.h"
 #include "lib/net/buffers_net.h"
 #include "lib/tls/tortls.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #include "lib/compress/compress.h"
 
 #ifdef HAVE_PWD_H
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index f3f77dbc913fcf2754612769bf4a54c6ce34339e..13d957a937a2a6c199ffe8d5581e382dd7d1ccee 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -106,7 +106,7 @@
 #include "or/or_circuit_st.h"
 #include "or/origin_circuit_st.h"
 #include "or/socks_request_st.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #ifdef HAVE_LINUX_TYPES_H
 #include <linux/types.h>
diff --git a/src/or/conscache.h b/src/or/conscache.h
index c46b8242358ef211b24e2eab84930d21526084e1..c274a60393bd6e9baaa6c8fd9b4fe343692822f1 100644
--- a/src/or/conscache.h
+++ b/src/or/conscache.h
@@ -4,7 +4,7 @@
 #ifndef TOR_CONSCACHE_H
 #define TOR_CONSCACHE_H
 
-#include "common/handles.h"
+#include "lib/container/handles.h"
 
 typedef struct consensus_cache_entry_t consensus_cache_entry_t;
 typedef struct consensus_cache_t consensus_cache_t;
diff --git a/src/or/consdiffmgr.c b/src/or/consdiffmgr.c
index c75b59c1f59fa876dfc21d676ab4fbbfd2ade3c4..6d5183f9349e93029c01430adc08a6cc33b91152 100644
--- a/src/or/consdiffmgr.c
+++ b/src/or/consdiffmgr.c
@@ -21,8 +21,8 @@
 #include "or/cpuworker.h"
 #include "or/networkstatus.h"
 #include "or/routerparse.h"
-#include "common/compat_libevent.h"
-#include "common/workqueue.h"
+#include "lib/evloop/compat_libevent.h"
+#include "lib/evloop/workqueue.h"
 #include "lib/compress/compress.h"
 #include "lib/encoding/confline.h"
 
diff --git a/src/or/control.c b/src/or/control.c
index ea124481267d6cc05766049e740741dd3eefc24b..aa43fccff00a4fb2975c146e8b5118bade190bfc 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -46,7 +46,7 @@
 #include "or/circuitstats.h"
 #include "or/circuituse.h"
 #include "or/command.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #include "or/config.h"
 #include "or/confparse.h"
 #include "or/connection.h"
@@ -113,8 +113,8 @@
 #endif
 
 #include "lib/crypt_ops/crypto_s2k.h"
-#include "common/procmon.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/procmon.h"
+#include "lib/evloop/compat_libevent.h"
 
 /** Yield true iff <b>s</b> is the state of a control_connection_t that has
  * finished authentication and is accepting commands. */
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index b37dfd168439882eefd0adc144247440b0dd2ee5..8b58e4c68c38daa26752dcdfc5ddd441db9d109f 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -30,7 +30,7 @@
 #include "or/onion.h"
 #include "or/rephist.h"
 #include "or/router.h"
-#include "common/workqueue.h"
+#include "lib/evloop/workqueue.h"
 
 #include "or/or_circuit_st.h"
 #include "lib/intmath/weakrng.h"
diff --git a/src/or/dirauth/shared_random.c b/src/or/dirauth/shared_random.c
index 8b53c1e7433ef243be907085eb67d96895f18a9c..d1226901296211b5ef3ec35f730329858a1eef33 100644
--- a/src/or/dirauth/shared_random.c
+++ b/src/or/dirauth/shared_random.c
@@ -99,7 +99,6 @@
 #include "or/routerlist.h"
 #include "or/shared_random_client.h"
 #include "or/dirauth/shared_random_state.h"
-#include "common/util.h"
 #include "or/voting_schedule.h"
 
 #include "or/dirauth/dirvote.h"
diff --git a/src/or/dns.c b/src/or/dns.c
index 45c4384eb1eef7cfd68a5830e3fe26e46b45bbb4..4ac58552f4242870f5e1909dd80273941068ceac 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -64,7 +64,7 @@
 #include "or/router.h"
 #include "ht.h"
 #include "lib/sandbox/sandbox.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include "or/edge_connection_st.h"
 #include "or/or_circuit_st.h"
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index d2ef4a496e2b4472d84fdb951ccb0f36fd44770a..6e752542391d14a7dc366f6af9d2ca9ffd309baf 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -34,7 +34,7 @@
 #include "or/entry_connection_st.h"
 #include "or/listener_connection_st.h"
 #include "or/socks_request_st.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include <event2/dns.h>
 #include <event2/dns_compat.h>
diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h
index 56b961e9a08c475d613d7085a80ff03bb8540e5f..5f9b5bdcba2fda7de665ec34f6827800bb431522 100644
--- a/src/or/entrynodes.h
+++ b/src/or/entrynodes.h
@@ -12,7 +12,7 @@
 #ifndef TOR_ENTRYNODES_H
 #define TOR_ENTRYNODES_H
 
-#include "common/handles.h"
+#include "lib/container/handles.h"
 
 /* Forward declare for guard_selection_t; entrynodes.c has the real struct */
 typedef struct guard_selection_s guard_selection_t;
diff --git a/src/or/ext_orport.c b/src/or/ext_orport.c
index 701dc45288f3d60134f37f359583fa403ced42b2..7342a66e06191a1066f8dc3a14d7d0455407aed3 100644
--- a/src/or/ext_orport.c
+++ b/src/or/ext_orport.c
@@ -27,7 +27,6 @@
 #include "or/ext_orport.h"
 #include "or/main.h"
 #include "or/proto_ext_or.h"
-#include "common/util.h"
 
 #include "or/or_connection_st.h"
 
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index 1024c03546837fb8db4367fe3aca399de5e210b5..55de64c13e2c2982a097b15717abaf852332b71e 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -41,7 +41,7 @@ hibernating, phase 2:
 #include "or/main.h"
 #include "or/router.h"
 #include "or/statefile.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include "or/or_connection_st.h"
 #include "or/or_state_st.h"
diff --git a/src/or/hs_cell.c b/src/or/hs_cell.c
index b50c87dfa39f9cb0309bec6f4dc872ee22ded19d..f8b76c513335e9bf3b90d3939022d584a3699e20 100644
--- a/src/or/hs_cell.c
+++ b/src/or/hs_cell.c
@@ -11,7 +11,6 @@
 #include "lib/crypt_ops/crypto_util.h"
 #include "or/rendservice.h"
 #include "or/replaycache.h"
-#include "common/util.h"
 
 #include "or/hs_cell.h"
 #include "or/hs_ntor.h"
diff --git a/src/or/include.am b/src/or/include.am
index 9b5f7c1f60d4bb1a47ec1b6c646cecbd7db1ee5f..ad7ee69bf581e4c70f463794ce3133812d344b9f 100644
--- a/src/or/include.am
+++ b/src/or/include.am
@@ -19,6 +19,7 @@ EXTRA_DIST+= src/or/ntmain.c src/or/Makefile.nmake
 
 LIBTOR_APP_A_SOURCES = \
 	src/or/addressmap.c				\
+	src/or/address_set.c				\
 	src/or/bridges.c				\
 	src/or/channel.c				\
 	src/or/channelpadding.c				\
@@ -180,6 +181,7 @@ endif
 
 ORHEADERS = \
 	src/or/addressmap.h				\
+	src/or/address_set.h				\
 	src/or/addr_policy_st.h				\
 	src/or/authority_cert_st.h			\
 	src/or/auth_dirs.inc				\
diff --git a/src/or/keypin.c b/src/or/keypin.c
index 34cf64f5c47d643c49e93db244984577d8e2ee9b..a2f3654b826175349868dfb69dbd769cbf3996f8 100644
--- a/src/or/keypin.c
+++ b/src/or/keypin.c
@@ -11,17 +11,28 @@
 #define KEYPIN_PRIVATE
 
 #include "orconfig.h"
+
+#include "lib/cc/torint.h"
 #include "lib/crypt_ops/crypto_digest.h"
 #include "lib/crypt_ops/crypto_format.h"
+#include "lib/crypt_ops/crypto_format.h"
+#include "lib/ctime/di_ops.h"
 #include "lib/ctime/di_ops.h"
+#include "lib/encoding/binascii.h"
+#include "lib/encoding/time_fmt.h"
+#include "lib/fdio/fdio.h"
+#include "lib/fs/files.h"
+#include "lib/fs/mmap.h"
+#include "lib/log/torlog.h"
+#include "lib/log/util_bug.h"
+#include "lib/string/compat_ctype.h"
+#include "lib/string/printf.h"
+#include "lib/wallclock/approx_time.h"
+
 #include "ht.h"
 #include "or/keypin.h"
+
 #include "siphash.h"
-#include "lib/cc/torint.h"
-#include "lib/log/torlog.h"
-#include "lib/fdio/fdio.h"
-#include "common/util.h"
-#include "lib/encoding/binascii.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -34,6 +45,10 @@
 #include <io.h>
 #endif
 
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+
 /**
  * @file keypin.c
  * @brief Key-pinning for RSA and Ed25519 identity keys at directory
diff --git a/src/or/main.c b/src/or/main.c
index 408d9cf77c8c2f99b297dcf409d4f4b315bfae59..7e3eb2b595bfc2f4e76d2acdb9ac420ef9651ea6 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -117,9 +117,9 @@
 #include "lib/fs/lockfile.h"
 #include "lib/net/buffers_net.h"
 #include "lib/tls/tortls.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #include "lib/encoding/confline.h"
-#include "common/timers.h"
+#include "lib/evloop/timers.h"
 
 #include <event2/event.h>
 
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index bc04ab9526f4419be5cc3b78ca69ec335ac4312e..51fd0015df7fd9ae5954e9ad2db5e331bb2c5623 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -42,7 +42,7 @@
 
 #include "or/or.h"
 #include "lib/net/address.h"
-#include "common/address_set.h"
+#include "or/address_set.h"
 #include "or/bridges.h"
 #include "or/config.h"
 #include "or/control.h"
diff --git a/src/or/ntmain.c b/src/or/ntmain.c
index 99e77a285eb7a6f075cf68bd891d64398a9a39b3..f6b57753d3bbe8e7d946e025e9e0cae3689eb727 100644
--- a/src/or/ntmain.c
+++ b/src/or/ntmain.c
@@ -25,7 +25,7 @@
 #include "or/ntmain.h"
 #include "lib/log/win32err.h"
 #include "lib/fs/winlib.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include <windows.h>
 #define GENSRV_SERVICENAME  "tor"
diff --git a/src/or/onion_ntor.c b/src/or/onion_ntor.c
index 34b1112020f54b6bfaac625e48e6d33fd0c1d892..59c923cb979c3a1b7489c147d96e8ce5403781cc 100644
--- a/src/or/onion_ntor.c
+++ b/src/or/onion_ntor.c
@@ -21,14 +21,17 @@
 #include "orconfig.h"
 
 #define ONION_NTOR_PRIVATE
+
 #include "lib/crypt_ops/crypto.h"
-#include "lib/crypt_ops/crypto_hkdf.h"
 #include "lib/crypt_ops/crypto_digest.h"
+#include "lib/crypt_ops/crypto_hkdf.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/onion_ntor.h"
-#include "lib/log/torlog.h"
 #include "lib/ctime/di_ops.h"
-#include "common/util.h"
+#include "lib/log/torlog.h"
+#include "lib/log/util_bug.h"
+#include "or/onion_ntor.h"
+
+#include <string.h>
 
 /** Free storage held in an ntor handshake state. */
 void
diff --git a/src/or/or.h b/src/or/or.h
index b0340ed1a0f4cf34a8d0e714320d5be50d8c2aae..826e81e468141519816d550f617c9be6cc5312e1 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -22,14 +22,48 @@
 #include <time.h>
 #endif
 
-#include "common/util.h"
-
+#include "lib/arch/bytes.h"
+#include "lib/cc/compat_compiler.h"
+#include "lib/cc/torint.h"
 #include "lib/container/map.h"
 #include "lib/container/smartlist.h"
 #include "lib/crypt_ops/crypto.h"
+#include "lib/ctime/di_ops.h"
 #include "lib/defs/dh_sizes.h"
 #include "lib/encoding/binascii.h"
+#include "lib/encoding/cstring.h"
+#include "lib/encoding/time_fmt.h"
+#include "lib/err/torerr.h"
+#include "lib/fs/dir.h"
+#include "lib/fs/files.h"
+#include "lib/fs/mmap.h"
+#include "lib/fs/path.h"
+#include "lib/fs/userdb.h"
+#include "lib/intmath/addsub.h"
+#include "lib/intmath/bits.h"
+#include "lib/intmath/cmp.h"
+#include "lib/intmath/logic.h"
+#include "lib/intmath/muldiv.h"
+#include "lib/log/escape.h"
+#include "lib/log/ratelim.h"
+#include "lib/log/util_bug.h"
+#include "lib/malloc/util_malloc.h"
 #include "lib/net/address.h"
+#include "lib/net/ipv4.h"
+#include "lib/net/ipv6.h"
+#include "lib/net/resolve.h"
+#include "lib/net/socket.h"
+#include "lib/string/compat_ctype.h"
+#include "lib/string/compat_string.h"
+#include "lib/string/parse_int.h"
+#include "lib/string/printf.h"
+#include "lib/string/scanf.h"
+#include "lib/string/util_string.h"
+#include "lib/testsupport/testsupport.h"
+#include "lib/thread/threads.h"
+#include "lib/time/compat_time.h"
+#include "lib/wallclock/approx_time.h"
+#include "lib/wallclock/timeval.h"
 
 #include "ht.h"
 
diff --git a/src/or/or_connection_st.h b/src/or/or_connection_st.h
index dbfe7528b0e8dbcbd459d6d34436a3b998491ccb..8c2c1f89c647bb9f9d8f9efbc68b2eb835ed5072 100644
--- a/src/or/or_connection_st.h
+++ b/src/or/or_connection_st.h
@@ -8,7 +8,7 @@
 #define OR_CONNECTION_ST_H
 
 #include "or/connection_st.h"
-#include "common/token_bucket.h"
+#include "lib/evloop/token_bucket.h"
 
 struct tor_tls_t;
 
diff --git a/src/or/periodic.c b/src/or/periodic.c
index 0cbf359b2e31adf76f8e3da9f0530faeb41be6aa..041b2d287b9114daeecce1e590d3df2ef6b573ad 100644
--- a/src/or/periodic.c
+++ b/src/or/periodic.c
@@ -12,11 +12,11 @@
  */
 
 #include "or/or.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #include "or/config.h"
 #include "or/main.h"
 #include "or/periodic.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 /** We disable any interval greater than this number of seconds, on the
  * grounds that it is probably an absolute time mistakenly passed in as a
diff --git a/src/or/reasons.h b/src/or/reasons.h
index b815463b74c2e3ab1f647b5652084f265ab01535..837b4a0f1a620283f3cb0885704c3aa842e16dc3 100644
--- a/src/or/reasons.h
+++ b/src/or/reasons.h
@@ -12,7 +12,7 @@
 #ifndef TOR_REASONS_H
 #define TOR_REASONS_H
 
-#include "common/socks5_status.h"
+#include "lib/net/socks5_status.h"
 enum bandwidth_weight_rule_t;
 
 const char *stream_end_reason_to_control_string(int reason);
diff --git a/src/or/scheduler.c b/src/or/scheduler.c
index 7c423064c7fae3a1be0fa8e0ccb536c8c3fe4cf1..b8eaca3dca8a6f728c4fb5e4cd45a44ea6fa24df 100644
--- a/src/or/scheduler.c
+++ b/src/or/scheduler.c
@@ -4,7 +4,7 @@
 #include "or/or.h"
 #include "or/config.h"
 
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #define SCHEDULER_PRIVATE_
 #define SCHEDULER_KIST_PRIVATE
 #include "or/scheduler.h"
@@ -12,7 +12,7 @@
 #include "lib/container/buffers.h"
 #define TOR_CHANNEL_INTERNAL_
 #include "or/channeltls.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include "or/or_connection_st.h"
 
diff --git a/src/or/shared_random_client.c b/src/or/shared_random_client.c
index 9a6c0f6644293ea762d351c73f419637beaec535..42a5b42f60510f4da6f66bf76fce2d84d14a8df1 100644
--- a/src/or/shared_random_client.c
+++ b/src/or/shared_random_client.c
@@ -14,7 +14,6 @@
 #include "or/config.h"
 #include "or/voting_schedule.h"
 #include "or/networkstatus.h"
-#include "common/util.h"
 #include "lib/encoding/binascii.h"
 
 #include "or/networkstatus_st.h"
diff --git a/src/or/torcert.c b/src/or/torcert.c
index 269fa66ceafbbbe9a4384763d4ab41831720e28f..39c6605c6521d125becdecbb682ed1866d1e8103 100644
--- a/src/or/torcert.c
+++ b/src/or/torcert.c
@@ -31,7 +31,6 @@
 #include "or/torcert.h"
 #include "trunnel/ed25519_cert.h"
 #include "lib/log/torlog.h"
-#include "common/util.h"
 #include "trunnel/link_handshake.h"
 #include "lib/tls/tortls.h"
 
diff --git a/src/or/transports.c b/src/or/transports.c
index ff51ff00ebaea87acc52864bf70e5877a59f526f..1d3cb7b951a25b4a9b4a124ba940f845963ab4d9 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -96,7 +96,6 @@
 #include "or/connection.h"
 #include "or/circuitbuild.h"
 #include "or/transports.h"
-#include "common/util.h"
 #include "or/router.h"
 #include "or/statefile.h"
 #include "or/connection_or.h"
diff --git a/src/test/fuzz/fuzz_hsdescv3.c b/src/test/fuzz/fuzz_hsdescv3.c
index ada9fa6c2d180e90760dadbb5058137f205694e2..de574ac26d40f5d0e0805df41f352a34e8288833 100644
--- a/src/test/fuzz/fuzz_hsdescv3.c
+++ b/src/test/fuzz/fuzz_hsdescv3.c
@@ -9,7 +9,6 @@
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "or/hs_descriptor.h"
 #include "or/routerparse.h"
-#include "common/util.h"
 
 #include "test/fuzz/fuzzing.h"
 
diff --git a/src/test/include.am b/src/test/include.am
index 827b780ce3e58aade5b686c44b9aea76dcb3e608..a749ff1436308c6376171f5a44495e5629eedb4e 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -271,7 +271,7 @@ src_test_test_workqueue_LDADD = \
 src_test_test_timers_CPPFLAGS = $(src_test_test_CPPFLAGS)
 src_test_test_timers_CFLAGS = $(src_test_test_CFLAGS)
 src_test_test_timers_LDADD = \
-	src/common/libor-event-testing.a \
+	src/lib/libtor-evloop-testing.a \
 	$(TOR_CRYPTO_TESTING_LIBS) \
 	$(TOR_UTIL_TESTING_LIBS) \
 	$(rust_ldadd) \
diff --git a/src/test/test-memwipe.c b/src/test/test-memwipe.c
index 552cbbc551fe4ca9522635a580243f93fd647847..8a4610e9047e4fce3835982fc869c7afee98dc57 100644
--- a/src/test/test-memwipe.c
+++ b/src/test/test-memwipe.c
@@ -2,14 +2,16 @@
 /* See LICENSE for licensing information */
 
 #include "orconfig.h"
+#include "lib/crypt_ops/crypto_util.h"
+
+#include "lib/intmath/cmp.h"
+#include "lib/malloc/util_malloc.h"
+
 #include <string.h>
 #include <stdio.h>
 #include <sys/types.h>
 #include <stdlib.h>
 
-#include "lib/crypt_ops/crypto_util.h"
-#include "common/util.h"
-
 static unsigned fill_a_buffer_memset(void) __attribute__((noinline));
 static unsigned fill_a_buffer_memwipe(void) __attribute__((noinline));
 static unsigned fill_a_buffer_nothing(void) __attribute__((noinline));
@@ -214,4 +216,3 @@ main(int argc, char **argv)
     return 0;
   }
 }
-
diff --git a/src/test/test-timers.c b/src/test/test-timers.c
index aed150bda6e54f8e37d1e676a71c08ed7c8e232c..f9276c25d6b8d76a1ef4eb16c7044e1e0f5c565b 100644
--- a/src/test/test-timers.c
+++ b/src/test/test-timers.c
@@ -7,10 +7,12 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
+#include "lib/evloop/timers.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "common/timers.h"
-#include "common/util.h"
+#include "lib/log/util_bug.h"
+#include "lib/time/compat_time.h"
+#include "lib/wallclock/timeval.h"
 
 #define N_TIMERS 1000
 #define MAX_DURATION 30
@@ -138,4 +140,3 @@ main(int argc, char **argv)
   timers_shutdown();
   return ret;
 }
-
diff --git a/src/test/test_address_set.c b/src/test/test_address_set.c
index 3699685848f96e97a7b6a8e7f731ccc9384b4f99..ec4e6b7e8736b3cfae7eb049d6ff31446b8b217e 100644
--- a/src/test/test_address_set.c
+++ b/src/test/test_address_set.c
@@ -3,7 +3,7 @@
 
 #include "or/or.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "common/address_set.h"
+#include "or/address_set.h"
 #include "or/microdesc.h"
 #include "or/networkstatus.h"
 #include "or/nodelist.h"
diff --git a/src/test/test_bridges.c b/src/test/test_bridges.c
index 98e85cd6d8a70ae459c07067a1aafb47a6ab0419..685027c0e04464a35d345e3e47c25215bf3d6f0d 100644
--- a/src/test/test_bridges.c
+++ b/src/test/test_bridges.c
@@ -16,7 +16,6 @@
 #include "or/bridges.h"
 #include "or/config.h"
 #include "or/transports.h"
-#include "common/util.h"
 
 /* Test suite stuff */
 #include "test/test.h"
diff --git a/src/test/test_bt_cl.c b/src/test/test_bt_cl.c
index 8a8221f190d725e8c797489a0dea028a2f07ceff..3f7b0a203ad144dbca13b7d88d918b304f9a3760 100644
--- a/src/test/test_bt_cl.c
+++ b/src/test/test_bt_cl.c
@@ -8,7 +8,6 @@
 /* To prevent 'assert' from going away. */
 #undef TOR_COVERAGE
 #include "or/or.h"
-#include "common/util.h"
 #include "lib/err/backtrace.h"
 #include "lib/log/torlog.h"
 
diff --git a/src/test/test_bwmgt.c b/src/test/test_bwmgt.c
index 604987e0704a763a217fca946c329cc2fdf7bd30..4cfca6c776c456fba2a1da17553a1d8fb8b44120 100644
--- a/src/test/test_bwmgt.c
+++ b/src/test/test_bwmgt.c
@@ -11,7 +11,7 @@
 #include "or/or.h"
 #include "test/test.h"
 
-#include "common/token_bucket.h"
+#include "lib/evloop/token_bucket.h"
 
 // an imaginary time, in timestamp units. Chosen so it will roll over.
 static const uint32_t START_TS = UINT32_MAX-10;
diff --git a/src/test/test_channelpadding.c b/src/test/test_channelpadding.c
index 7e0c33f63b661cd51cc080e95a1de41fc8b001d6..ff2ab8daab76892dfce9b8370ec8a06e49ce8256 100644
--- a/src/test/test_channelpadding.c
+++ b/src/test/test_channelpadding.c
@@ -13,14 +13,14 @@
 #include "or/channel.h"
 #include "or/channeltls.h"
 #include "or/channelpadding.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #include "or/config.h"
 #include "lib/time/compat_time.h"
 #include "or/main.h"
 #include "or/networkstatus.h"
 #include "test/log_test_helpers.h"
 #include "lib/tls/tortls.h"
-#include "common/timers.h"
+#include "lib/evloop/timers.h"
 #include "lib/container/buffers.h"
 
 #include "or/cell_st.h"
diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c
index 09688cf0a98a13dc6cbf0bc8ef610c51e4aa4c1d..a80c6ebd3af7140a08c31226e3efca14654f6b9f 100644
--- a/src/test/test_checkdir.c
+++ b/src/test/test_checkdir.c
@@ -12,7 +12,6 @@
 
 #include "or/config.h"
 #include "test/test.h"
-#include "common/util.h"
 
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
diff --git a/src/test/test_compat_libevent.c b/src/test/test_compat_libevent.c
index 8e591378563b8711c48f39961550bf8a8da61edd..1262a3140e9c67948b5ff747a73343b8e1a5e427 100644
--- a/src/test/test_compat_libevent.c
+++ b/src/test/test_compat_libevent.c
@@ -7,7 +7,7 @@
 
 #include "test/test.h"
 
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include <event2/event.h>
 
diff --git a/src/test/test_config.c b/src/test/test_config.c
index fb05645930dc76bdcd6b6a9f072ae3497404eb23..c7623d0c856b1d8837fed7eac417f66881c54804 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -19,7 +19,6 @@
 #include "or/connection.h"
 #include "or/connection_edge.h"
 #include "test/test.h"
-#include "common/util.h"
 #include "or/connection_or.h"
 #include "or/control.h"
 #include "or/cpuworker.h"
diff --git a/src/test/test_consdiffmgr.c b/src/test/test_consdiffmgr.c
index a0dfe95d354e4a3ed93785f7a01a9665026885b0..959075903f63b3c3e03a34d0e75327de2ee79b02 100644
--- a/src/test/test_consdiffmgr.c
+++ b/src/test/test_consdiffmgr.c
@@ -12,7 +12,7 @@
 #include "lib/crypt_ops/crypto_rand.h"
 #include "or/networkstatus.h"
 #include "or/routerparse.h"
-#include "common/workqueue.h"
+#include "lib/evloop/workqueue.h"
 #include "lib/compress/compress.h"
 #include "lib/encoding/confline.h"
 
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 341dbc9a4f1b6257d419701c1e56426c1abca61d..2e38dfc279820c2b267f3360726a87cfaaf26858 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -9,7 +9,6 @@
 #include "or/or.h"
 #include "test/test.h"
 #include "lib/crypt_ops/aes.h"
-#include "common/util.h"
 #include "siphash.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_dh.h"
diff --git a/src/test/test_crypto_openssl.c b/src/test/test_crypto_openssl.c
index d443ba6fd0a5fa4634917eef7454b484f1074eea..1d31ad027915caa5ea2dea35528eaa360101b75c 100644
--- a/src/test/test_crypto_openssl.c
+++ b/src/test/test_crypto_openssl.c
@@ -7,14 +7,14 @@
 
 #define CRYPTO_RAND_PRIVATE
 
+#include "lib/crypt_ops/compat_openssl.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "common/util.h"
 #include "lib/encoding/binascii.h"
 #include "test/test.h"
 
 #include <openssl/evp.h>
 #include <openssl/rand.h>
-#include "lib/crypt_ops/compat_openssl.h"
+#include <string.h>
 
 /* Test for rectifying openssl RAND engine. */
 static void
@@ -103,4 +103,3 @@ struct testcase_t crypto_openssl_tests[] = {
     TT_FORK, NULL, NULL },
   END_OF_TESTCASES
 };
-
diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c
index 262e2fa680581506d2e9f410aafb5535d9284e49..9c35cdaaf2f72332d23cb8a44247394a21a53be3 100644
--- a/src/test/test_entrynodes.c
+++ b/src/test/test_entrynodes.c
@@ -28,7 +28,6 @@
 #include "or/routerparse.h"
 #include "or/routerset.h"
 #include "or/statefile.h"
-#include "common/util.h"
 
 #include "or/cpath_build_state_st.h"
 #include "or/crypt_path_st.h"
diff --git a/src/test/test_guardfraction.c b/src/test/test_guardfraction.c
index b7737cafa8058794c2e53e3ac472e83a126c2761..3c293e378bad8228e367cdb752d46b045d62b11a 100644
--- a/src/test/test_guardfraction.c
+++ b/src/test/test_guardfraction.c
@@ -10,7 +10,6 @@
 #include "or/config.h"
 #include "or/dirserv.h"
 #include "or/entrynodes.h"
-#include "common/util.h"
 #include "or/routerparse.h"
 #include "or/networkstatus.h"
 
diff --git a/src/test/test_handles.c b/src/test/test_handles.c
index 153ac5787b492c1eec409c9b92353ec8c8d2ebc0..2910d7e18f384e9ba068ee8d19379cc165af3973 100644
--- a/src/test/test_handles.c
+++ b/src/test/test_handles.c
@@ -4,8 +4,10 @@
 #include "orconfig.h"
 #include "test/test.h"
 
-#include "common/util.h"
-#include "common/handles.h"
+#include "lib/container/handles.h"
+#include "lib/log/util_bug.h"
+
+#include <stdio.h>
 
 typedef struct demo_t {
   HANDLE_ENTRY(demo, demo_t);
@@ -94,4 +96,3 @@ struct testcase_t handle_tests[] = {
   HANDLE_TEST(basic, 0),
   END_OF_TESTCASES
 };
-
diff --git a/src/test/test_hs_common.c b/src/test/test_hs_common.c
index 28c6316bd0cbe028351f53d87de8a5ed6cf759be..4c39570e306171c6c34eaaa2b24a0e787bd00670 100644
--- a/src/test/test_hs_common.c
+++ b/src/test/test_hs_common.c
@@ -31,7 +31,6 @@
 #include "or/statefile.h"
 #include "or/circuitlist.h"
 #include "or/dirauth/shared_random.h"
-#include "common/util.h"
 #include "or/voting_schedule.h"
 
 #include "or/microdesc_st.h"
diff --git a/src/test/test_hs_ntor_cl.c b/src/test/test_hs_ntor_cl.c
index 6bf11560b47c3225c71106d8164bf94f006be234..8643897db5e12025712eee9e7d0f6ccb2255debb 100644
--- a/src/test/test_hs_ntor_cl.c
+++ b/src/test/test_hs_ntor_cl.c
@@ -14,7 +14,6 @@
 
 #define ONION_NTOR_PRIVATE
 #include "or/or.h"
-#include "common/util.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
diff --git a/src/test/test_keypin.c b/src/test/test_keypin.c
index e7e7e629630cd4443cef43debe864454b1dbfee5..e7897a8473586720edd01cd06adda211b1bd24e9 100644
--- a/src/test/test_keypin.c
+++ b/src/test/test_keypin.c
@@ -5,7 +5,6 @@
 #define KEYPIN_PRIVATE
 #include "or/or.h"
 #include "or/keypin.h"
-#include "common/util.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_ntor_cl.c b/src/test/test_ntor_cl.c
index 75d5ccc126e033d1f487082b41caf41b6470dd62..5711a9116a5f7c86bacd1da9bf50ce2763252b78 100644
--- a/src/test/test_ntor_cl.c
+++ b/src/test/test_ntor_cl.c
@@ -7,7 +7,6 @@
 
 #define ONION_NTOR_PRIVATE
 #include "or/or.h"
-#include "common/util.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "or/onion_ntor.h"
diff --git a/src/test/test_oom.c b/src/test/test_oom.c
index 2e5989c0d09a49668838d74c1063b7bb0f8ccc53..6c3ee1a27bf4768c20f911e448252430f322550b 100644
--- a/src/test/test_oom.c
+++ b/src/test/test_oom.c
@@ -10,7 +10,7 @@
 #include "or/or.h"
 #include "lib/container/buffers.h"
 #include "or/circuitlist.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #include "or/connection.h"
 #include "or/config.h"
 #include "lib/crypt_ops/crypto_rand.h"
diff --git a/src/test/test_procmon.c b/src/test/test_procmon.c
index ae30bd00b6f05f0551b42b438694471d5e8584e5..e2915d0fb4e7f282841d208de145bc66484e5dea 100644
--- a/src/test/test_procmon.c
+++ b/src/test/test_procmon.c
@@ -6,7 +6,7 @@
 #include "or/or.h"
 #include "test/test.h"
 
-#include "common/procmon.h"
+#include "lib/evloop/procmon.h"
 
 #include "test/log_test_helpers.h"
 
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
index e685ab50deedd9578243feb711a1fb99e23c4d7d..189cb2584642a0d6493a5b12aaafb7e198f66c2b 100644
--- a/src/test/test_pt.c
+++ b/src/test/test_pt.c
@@ -15,7 +15,6 @@
 #include "or/control.h"
 #include "or/transports.h"
 #include "or/circuitbuild.h"
-#include "common/util.h"
 #include "or/statefile.h"
 #include "test/test.h"
 #include "lib/process/subprocess.h"
diff --git a/src/test/test_routerkeys.c b/src/test/test_routerkeys.c
index 8c2be30a8f6016c1ba533731d576cc6523d8e36d..2a761ad6e161e63883889333e08453c728a702c5 100644
--- a/src/test/test_routerkeys.c
+++ b/src/test/test_routerkeys.c
@@ -9,7 +9,6 @@
 #include "or/config.h"
 #include "or/router.h"
 #include "or/routerkeys.h"
-#include "common/util.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "or/torcert.h"
diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c
index 1087befa683532fa315054cbdb988a5db4fc6f61..555a2a6bfd9ea7803ca0cd7e77d3859ffc71671a 100644
--- a/src/test/test_scheduler.c
+++ b/src/test/test_scheduler.c
@@ -10,7 +10,7 @@
 #define CHANNEL_PRIVATE_
 #include "or/or.h"
 #include "or/config.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #include "or/channel.h"
 #include "or/channeltls.h"
 #include "or/connection.h"
diff --git a/src/test/test_socks.c b/src/test/test_socks.c
index 046ed35978a1665bbebc442c0ca0053d02a17ac8..0a01bf64311b67737c67b5a070b78ba2c42398e2 100644
--- a/src/test/test_socks.c
+++ b/src/test/test_socks.c
@@ -11,7 +11,7 @@
 #include "test/test.h"
 #include "test/log_test_helpers.h"
 #include "or/socks_request_st.h"
-#include "common/socks5_status.h"
+#include "lib/net/socks5_status.h"
 
 typedef struct socks_test_data_t {
   socks_request_t *req;
diff --git a/src/test/test_util_slow.c b/src/test/test_util_slow.c
index aeb0d422c1df798ef08e78ad28eef06fbb6baa40..5021e89dff7e1f64afe13f9ac0d907db59fb037a 100644
--- a/src/test/test_util_slow.c
+++ b/src/test/test_util_slow.c
@@ -6,13 +6,17 @@
 #include "orconfig.h"
 #define UTIL_PRIVATE
 #define SUBPROCESS_PRIVATE
-#include "common/util.h"
-#include "lib/process/waitpid.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/log/torlog.h"
 #include "lib/process/subprocess.h"
+#include "lib/process/waitpid.h"
+#include "lib/string/printf.h"
+#include "lib/time/compat_time.h"
 #include "test/test.h"
 
+#include <errno.h>
+#include <string.h>
+
 #ifndef BUILDDIR
 #define BUILDDIR "."
 #endif
diff --git a/src/test/test_workqueue.c b/src/test/test_workqueue.c
index dda724b78b9232dac36b01968652c6442c87c8d6..2cb42734c482cc2dc9f978a1b2667083801c54a7 100644
--- a/src/test/test_workqueue.c
+++ b/src/test/test_workqueue.c
@@ -6,11 +6,11 @@
 #include "or/or.h"
 #include "lib/thread/threads.h"
 #include "or/onion.h"
-#include "common/workqueue.h"
+#include "lib/evloop/workqueue.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/net/alertsock.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 #include "lib/intmath/weakrng.h"
 
 #include <stdio.h>
diff --git a/src/test/testing_common.c b/src/test/testing_common.c
index ace564d0fec5aeb2c4b134bc2bd6a3bb082c1ecd..b0514f85ec243986a40e836f89127d6fbf52e7d3 100644
--- a/src/test/testing_common.c
+++ b/src/test/testing_common.c
@@ -22,7 +22,7 @@
 #include "or/channelpadding.h"
 #include "or/main.h"
 #include "lib/compress/compress.h"
-#include "common/compat_libevent.h"
+#include "lib/evloop/compat_libevent.h"
 
 #include <stdio.h>
 #ifdef HAVE_FCNTL_H
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index 303c7af3eed4701b9a7274bca5c885ab1c6cc1d8..1532d5f20109a1792d2bd3e801c63ec5c1c2bd1a 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -14,7 +14,7 @@
 #include "lib/sandbox/sandbox.h"
 #include "lib/string/util_string.h"
 
-#include "common/socks5_status.h"
+#include "lib/net/socks5_status.h"
 
 #include <stdio.h>
 #include <stdlib.h>