diff --git a/src/app/config/config.c b/src/app/config/config.c
index 9b2706982a8d880f37157cea02c62280ade1523d..28d2be5ec1581ad5928ac09b68ea19d3ac73cce0 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -60,52 +60,52 @@
  **/
 
 #define CONFIG_PRIVATE
-#include "or/or.h"
-#include "or/bridges.h"
-#include "or/addressmap.h"
-#include "or/channel.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuitmux.h"
-#include "or/circuitmux_ewma.h"
-#include "or/circuitstats.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
+#include "feature/client/addressmap.h"
+#include "core/or/channel.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitmux.h"
+#include "core/or/circuitmux_ewma.h"
+#include "core/or/circuitstats.h"
 #include "lib/compress/compress.h"
-#include "or/config.h"
+#include "app/config/config.h"
 #include "lib/encoding/confline.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/consdiffmgr.h"
-#include "or/control.h"
-#include "or/confparse.h"
-#include "or/cpuworker.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/dircache/consdiffmgr.h"
+#include "feature/control/control.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/cpuworker.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/dirserv.h"
-#include "or/dns.h"
-#include "or/dos.h"
-#include "or/entrynodes.h"
-#include "or/git_revision.h"
-#include "or/geoip.h"
-#include "or/hibernate.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/relay.h"
-#include "or/rendclient.h"
-#include "or/rendservice.h"
-#include "or/hs_config.h"
-#include "or/rephist.h"
-#include "or/router.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/relay/dns.h"
+#include "core/or/dos.h"
+#include "feature/client/entrynodes.h"
+#include "core/or/git_revision.h"
+#include "feature/stats/geoip.h"
+#include "feature/hibernate/hibernate.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendservice.h"
+#include "feature/hs/hs_config.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
 #include "lib/sandbox/sandbox.h"
-#include "or/routerlist.h"
-#include "or/routerset.h"
-#include "or/scheduler.h"
-#include "or/statefile.h"
-#include "or/transports.h"
-#include "or/ext_orport.h"
-#include "or/voting_schedule.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerset.h"
+#include "core/or/scheduler.h"
+#include "app/config/statefile.h"
+#include "feature/client/transports.h"
+#include "feature/relay/ext_orport.h"
+#include "feature/dircommon/voting_schedule.h"
 #ifdef _WIN32
 #include <shlobj.h>
 #endif
@@ -133,11 +133,11 @@
 #include "lib/fs/conffile.h"
 #include "lib/evloop/procmon.h"
 
-#include "or/dirauth/dirvote.h"
-#include "or/dirauth/mode.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/dirauth/mode.h"
 
-#include "or/connection_st.h"
-#include "or/port_cfg_st.h"
+#include "core/or/connection_st.h"
+#include "core/or/port_cfg_st.h"
 
 #ifdef HAVE_SYSTEMD
 #   if defined(__COVERITY__) && !defined(__INCLUDE_LEVEL__)
diff --git a/src/app/config/config.h b/src/app/config/config.h
index 6d2feb5f439ace1ed24d1e88045485fd416cb8b2..a169cfd4511e4f952110f96dcf08f4a58ef23a2c 100644
--- a/src/app/config/config.h
+++ b/src/app/config/config.h
@@ -12,7 +12,7 @@
 #ifndef TOR_CONFIG_H
 #define TOR_CONFIG_H
 
-#include "or/or_options_st.h"
+#include "app/config/or_options_st.h"
 #include "lib/testsupport/testsupport.h"
 
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(DARWIN)
diff --git a/src/app/config/confparse.c b/src/app/config/confparse.c
index 87405c6e7dcba27a140b1ba1797efe99b43c5cc7..5b7f54bc6507c14819f6df2ad2d18a3bba99e7c1 100644
--- a/src/app/config/confparse.c
+++ b/src/app/config/confparse.c
@@ -21,9 +21,9 @@
  * specified, and a linked list of key-value pairs.
  */
 
-#include "or/or.h"
-#include "or/confparse.h"
-#include "or/routerset.h"
+#include "core/or/or.h"
+#include "app/config/confparse.h"
+#include "feature/nodelist/routerset.h"
 
 #include "lib/container/bitarray.h"
 #include "lib/encoding/confline.h"
diff --git a/src/app/config/statefile.c b/src/app/config/statefile.c
index e9db1ff0695339bd26580cce5a870d0df971d53c..8eeef45026d43d47787c750ee829497b0c843f48 100644
--- a/src/app/config/statefile.c
+++ b/src/app/config/statefile.c
@@ -29,22 +29,22 @@
  */
 
 #define STATEFILE_PRIVATE
-#include "or/or.h"
-#include "or/circuitstats.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/connection.h"
-#include "or/control.h"
-#include "or/entrynodes.h"
-#include "or/hibernate.h"
-#include "or/main.h"
-#include "or/rephist.h"
-#include "or/router.h"
+#include "core/or/or.h"
+#include "core/or/circuitstats.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/connection.h"
+#include "feature/control/control.h"
+#include "feature/client/entrynodes.h"
+#include "feature/hibernate/hibernate.h"
+#include "core/mainloop/main.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
 #include "lib/sandbox/sandbox.h"
-#include "or/statefile.h"
+#include "app/config/statefile.h"
 #include "lib/encoding/confline.h"
 
-#include "or/or_state_st.h"
+#include "app/config/or_state_st.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
diff --git a/src/app/main/ntmain.c b/src/app/main/ntmain.c
index 63d82f686e3d082ae007747e10af8d9a83d55d48..232529a803a322c427461deae2c5ad63bcd422bc 100644
--- a/src/app/main/ntmain.c
+++ b/src/app/main/ntmain.c
@@ -19,10 +19,10 @@
 
 #ifdef _WIN32
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/main.h"
-#include "app/ntmain.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/mainloop/main.h"
+#include "app/main/ntmain.h"
 #include "lib/log/win32err.h"
 #include "lib/fs/winlib.h"
 #include "lib/evloop/compat_libevent.h"
diff --git a/src/core/crypto/hs_ntor.c b/src/core/crypto/hs_ntor.c
index b5007545dbd53664aa99c4d1696411c3d112eac4..d98d16f7f6dd3dad15dec0ba8e9497d88425f258 100644
--- a/src/core/crypto/hs_ntor.c
+++ b/src/core/crypto/hs_ntor.c
@@ -24,11 +24,11 @@
  *  rendezvous key expansion to setup end-to-end rend circuit keys.
  */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_util.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
-#include "or/hs_ntor.h"
+#include "core/crypto/hs_ntor.h"
 
 /* String constants used by the ntor HS protocol */
 #define PROTOID "tor-hs-ntor-curve25519-sha3-256-1"
diff --git a/src/core/crypto/hs_ntor.h b/src/core/crypto/hs_ntor.h
index 67a9573436a2eb913aff2bf118e7384a0321abec..30738c4ae0ff790a238b3f88e25c3c0ceadb8239 100644
--- a/src/core/crypto/hs_ntor.h
+++ b/src/core/crypto/hs_ntor.h
@@ -4,7 +4,7 @@
 #ifndef TOR_HS_NTOR_H
 #define TOR_HS_NTOR_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 struct ed25519_public_key_t;
 struct curve25519_public_key_t;
 struct curve25519_keypair_t;
diff --git a/src/core/crypto/onion.c b/src/core/crypto/onion.c
index 80d8e1a8b183023368151a26a8d5da7dd158c464..e71bfc1fd92a7153f8d31b7739fa607ed5bff334 100644
--- a/src/core/crypto/onion.c
+++ b/src/core/crypto/onion.c
@@ -62,25 +62,25 @@
  * onion_fast.c for more information.
  **/
 
-#include "or/or.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/config.h"
-#include "or/cpuworker.h"
+#include "core/or/or.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "app/config/config.h"
+#include "core/mainloop/cpuworker.h"
 #include "lib/crypt_ops/crypto_util.h"
 #include "lib/crypt_ops/crypto_dh.h"
-#include "or/networkstatus.h"
-#include "or/onion.h"
-#include "or/onion_fast.h"
-#include "or/onion_ntor.h"
-#include "or/onion_tap.h"
-#include "or/relay.h"
-#include "or/rephist.h"
-#include "or/router.h"
-
-#include "or/cell_st.h"
-#include "or/extend_info_st.h"
-#include "or/or_circuit_st.h"
+#include "feature/nodelist/networkstatus.h"
+#include "core/crypto/onion.h"
+#include "core/crypto/onion_fast.h"
+#include "core/crypto/onion_ntor.h"
+#include "core/crypto/onion_tap.h"
+#include "core/or/relay.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/or_circuit_st.h"
 
 // trunnel
 #include "trunnel/ed25519_cert.h"
diff --git a/src/core/crypto/onion_fast.c b/src/core/crypto/onion_fast.c
index 6e834ccf9569fbb72d63531edbc975675c4c2331..292aeca40279bcefb6122a4e55cdeb4de405228d 100644
--- a/src/core/crypto/onion_fast.c
+++ b/src/core/crypto/onion_fast.c
@@ -27,8 +27,8 @@
  * many RSA1024 keys.
  **/
 
-#include "or/or.h"
-#include "or/onion_fast.h"
+#include "core/or/or.h"
+#include "core/crypto/onion_fast.h"
 #include "lib/crypt_ops/crypto_hkdf.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
diff --git a/src/core/crypto/onion_ntor.c b/src/core/crypto/onion_ntor.c
index 59c923cb979c3a1b7489c147d96e8ce5403781cc..9e1e273ef63cd67bd4fecc032d1b5712783cb757 100644
--- a/src/core/crypto/onion_ntor.c
+++ b/src/core/crypto/onion_ntor.c
@@ -29,7 +29,7 @@
 #include "lib/ctime/di_ops.h"
 #include "lib/log/torlog.h"
 #include "lib/log/util_bug.h"
-#include "or/onion_ntor.h"
+#include "core/crypto/onion_ntor.h"
 
 #include <string.h>
 
diff --git a/src/core/crypto/onion_tap.c b/src/core/crypto/onion_tap.c
index 05bcce2e876ced6264577c777b8acd12a9b99e14..7ffe0ea5c5f71c7fb8c42df1c0e04d07126d469f 100644
--- a/src/core/crypto/onion_tap.c
+++ b/src/core/crypto/onion_tap.c
@@ -27,13 +27,13 @@
  * invoked from onion.c.
  **/
 
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_dh.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/onion_tap.h"
-#include "or/rephist.h"
+#include "core/crypto/onion_tap.h"
+#include "feature/stats/rephist.h"
 
 /*----------------------------------------------------------------------*/
 
diff --git a/src/core/crypto/relay_crypto.c b/src/core/crypto/relay_crypto.c
index 1fcfae0b3a3f7e5e8730ad1949193bd3e9201f0d..b2388d2c45ff8cc9569758d09a929f64ab6962dd 100644
--- a/src/core/crypto/relay_crypto.c
+++ b/src/core/crypto/relay_crypto.c
@@ -4,18 +4,18 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
-#include "or/circuitlist.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "core/or/circuitlist.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/hs_ntor.h" // for HS_NTOR_KEY_EXPANSION_KDF_OUT_LEN
-#include "or/relay.h"
-#include "or/relay_crypto.h"
+#include "core/crypto/hs_ntor.h" // for HS_NTOR_KEY_EXPANSION_KDF_OUT_LEN
+#include "core/or/relay.h"
+#include "core/crypto/relay_crypto.h"
 
-#include "or/cell_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 /** Update digest from the payload of cell. Assign integrity part to
  * cell.
diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c
index 6fd8fbf771abbd866b5c2780bd144230ad93462e..ed789d52085f20b84855b052b4d689c2a35da190 100644
--- a/src/core/mainloop/connection.c
+++ b/src/core/mainloop/connection.c
@@ -55,8 +55,8 @@
  **/
 
 #define CONNECTION_PRIVATE
-#include "or/or.h"
-#include "or/bridges.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
 #include "lib/container/buffers.h"
 #include "lib/tls/buffers_tls.h"
 /*
@@ -66,42 +66,42 @@
 #define TOR_CHANNEL_INTERNAL_
 #define CONNECTION_PRIVATE
 #include "lib/err/backtrace.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/control.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/dns.h"
-#include "or/dnsserv.h"
-#include "or/dos.h"
-#include "or/entrynodes.h"
-#include "or/ext_orport.h"
-#include "or/geoip.h"
-#include "or/main.h"
-#include "or/hibernate.h"
-#include "or/hs_common.h"
-#include "or/hs_ident.h"
-#include "or/nodelist.h"
-#include "or/proto_http.h"
-#include "or/proto_socks.h"
-#include "or/policies.h"
-#include "or/reasons.h"
-#include "or/relay.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/transports.h"
-#include "or/routerparse.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/relay/dns.h"
+#include "feature/client/dnsserv.h"
+#include "core/or/dos.h"
+#include "feature/client/entrynodes.h"
+#include "feature/relay/ext_orport.h"
+#include "feature/stats/geoip.h"
+#include "core/mainloop/main.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/proto/proto_http.h"
+#include "core/proto/proto_socks.h"
+#include "core/or/policies.h"
+#include "core/or/reasons.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/client/transports.h"
+#include "feature/nodelist/routerparse.h"
 #include "lib/sandbox/sandbox.h"
 #include "lib/net/buffers_net.h"
 #include "lib/tls/tortls.h"
@@ -124,14 +124,14 @@
 #include <sys/un.h>
 #endif
 
-#include "or/dir_connection_st.h"
-#include "or/control_connection_st.h"
-#include "or/entry_connection_st.h"
-#include "or/listener_connection_st.h"
-#include "or/or_connection_st.h"
-#include "or/port_cfg_st.h"
-#include "or/routerinfo_st.h"
-#include "or/socks_request_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/control/control_connection_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/listener_connection_st.h"
+#include "core/or/or_connection_st.h"
+#include "core/or/port_cfg_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "core/or/socks_request_st.h"
 
 static connection_t *connection_listener_new(
                                const struct sockaddr *listensockaddr,
diff --git a/src/core/mainloop/cpuworker.c b/src/core/mainloop/cpuworker.c
index 8b58e4c68c38daa26752dcdfc5ddd441db9d109f..a372db3f17552130f0962a8de9a7c4349bc20813 100644
--- a/src/core/mainloop/cpuworker.c
+++ b/src/core/mainloop/cpuworker.c
@@ -17,22 +17,22 @@
  *      <li>and for calculating diffs and compressing them in consdiffmgr.c.
  *  </ul>
  **/
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/connection_or.h"
-#include "or/config.h"
-#include "or/cpuworker.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/connection_or.h"
+#include "app/config/config.h"
+#include "core/mainloop/cpuworker.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/main.h"
-#include "or/onion.h"
-#include "or/rephist.h"
-#include "or/router.h"
+#include "core/mainloop/main.h"
+#include "core/crypto/onion.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
 #include "lib/evloop/workqueue.h"
 
-#include "or/or_circuit_st.h"
+#include "core/or/or_circuit_st.h"
 #include "lib/intmath/weakrng.h"
 
 static void queue_pending_tasks(void);
diff --git a/src/core/mainloop/main.c b/src/core/mainloop/main.c
index 2a57aa587ab9dab184109b86feea4d416f6899cc..bad949097109c4b8e852d8b0b330a85f3d7c3d64 100644
--- a/src/core/mainloop/main.c
+++ b/src/core/mainloop/main.c
@@ -47,69 +47,69 @@
  **/
 
 #define MAIN_PRIVATE
-#include "or/or.h"
-#include "or/addressmap.h"
+#include "core/or/or.h"
+#include "feature/client/addressmap.h"
 #include "lib/err/backtrace.h"
-#include "or/bridges.h"
+#include "feature/client/bridges.h"
 #include "lib/container/buffers.h"
 #include "lib/tls/buffers_tls.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/channelpadding.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/circuitmux_ewma.h"
-#include "or/command.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/channelpadding.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "core/or/circuitmux_ewma.h"
+#include "core/or/command.h"
 #include "lib/compress/compress.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/consdiffmgr.h"
-#include "or/control.h"
-#include "or/cpuworker.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/dircache/consdiffmgr.h"
+#include "feature/control/control.h"
+#include "core/mainloop/cpuworker.h"
 #include "lib/crypt_ops/crypto_s2k.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/dns.h"
-#include "or/dnsserv.h"
-#include "or/dos.h"
-#include "or/entrynodes.h"
-#include "or/geoip.h"
-#include "or/hibernate.h"
-#include "or/hs_cache.h"
-#include "or/hs_circuitmap.h"
-#include "or/hs_client.h"
-#include "or/keypin.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "app/ntmain.h"
-#include "or/onion.h"
-#include "or/periodic.h"
-#include "or/policies.h"
-#include "or/protover.h"
-#include "or/transports.h"
-#include "or/relay.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/scheduler.h"
-#include "or/statefile.h"
-#include "or/status.h"
-#include "or/tor_api.h"
-#include "or/tor_api_internal.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/relay/dns.h"
+#include "feature/client/dnsserv.h"
+#include "core/or/dos.h"
+#include "feature/client/entrynodes.h"
+#include "feature/stats/geoip.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_client.h"
+#include "feature/dirauth/keypin.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "app/main/ntmain.h"
+#include "core/crypto/onion.h"
+#include "core/mainloop/periodic.h"
+#include "core/or/policies.h"
+#include "core/proto/protover.h"
+#include "feature/client/transports.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "core/or/scheduler.h"
+#include "app/config/statefile.h"
+#include "core/or/status.h"
+#include "feature/api/tor_api.h"
+#include "feature/api/tor_api_internal.h"
 #include "lib/process/waitpid.h"
-#include "or/ext_orport.h"
+#include "feature/relay/ext_orport.h"
 #include "lib/memarea/memarea.h"
 #include "lib/meminfo/meminfo.h"
 #include "lib/osinfo/uname.h"
@@ -123,18 +123,18 @@
 
 #include <event2/event.h>
 
-#include "or/dirauth/dirvote.h"
-#include "or/dirauth/mode.h"
-#include "or/dirauth/shared_random.h"
-
-#include "or/cell_st.h"
-#include "or/entry_connection_st.h"
-#include "or/networkstatus_st.h"
-#include "or/or_connection_st.h"
-#include "or/or_state_st.h"
-#include "or/port_cfg_st.h"
-#include "or/routerinfo_st.h"
-#include "or/socks_request_st.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/dirauth/mode.h"
+#include "feature/dirauth/shared_random.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/entry_connection_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "core/or/or_connection_st.h"
+#include "app/config/or_state_st.h"
+#include "core/or/port_cfg_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "core/or/socks_request_st.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
diff --git a/src/core/mainloop/main.h b/src/core/mainloop/main.h
index 90146f4bd428378136c64a38a70f22160c9dbeb9..2b445967063697d8882784f39e934d6feb3d4660 100644
--- a/src/core/mainloop/main.h
+++ b/src/core/mainloop/main.h
@@ -114,7 +114,7 @@ STATIC int get_my_roles(const or_options_t *options);
 extern smartlist_t *connection_array;
 
 /* We need the periodic_event_item_t definition. */
-#include "or/periodic.h"
+#include "core/mainloop/periodic.h"
 extern periodic_event_item_t periodic_events[];
 #endif
 #endif /* defined(MAIN_PRIVATE) */
diff --git a/src/core/mainloop/periodic.c b/src/core/mainloop/periodic.c
index 041b2d287b9114daeecce1e590d3df2ef6b573ad..c17c0c56d2845566798fd428eda42001c371891e 100644
--- a/src/core/mainloop/periodic.c
+++ b/src/core/mainloop/periodic.c
@@ -11,11 +11,11 @@
  * that they fire.  See periodic_events[] in main.c for examples.
  */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/evloop/compat_libevent.h"
-#include "or/config.h"
-#include "or/main.h"
-#include "or/periodic.h"
+#include "app/config/config.h"
+#include "core/mainloop/main.h"
+#include "core/mainloop/periodic.h"
 #include "lib/evloop/compat_libevent.h"
 
 /** We disable any interval greater than this number of seconds, on the
diff --git a/src/core/or/address_set.c b/src/core/or/address_set.c
index 927a5597c0aea5c90c03cbb9a596224838603e68..014e650d2d8e6075dd024f2abf0304f546efe2d8 100644
--- a/src/core/or/address_set.c
+++ b/src/core/or/address_set.c
@@ -11,7 +11,7 @@
  **/
 
 #include "orconfig.h"
-#include "or/address_set.h"
+#include "core/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/core/or/channel.c b/src/core/or/channel.c
index e6d717f111dfb9c8ffc5db10a7ec7766364d2475..476f31d5b4707bbca0fdf259877ef383f4fdfe67 100644
--- a/src/core/or/channel.c
+++ b/src/core/or/channel.c
@@ -57,31 +57,31 @@
 /* This one's for stuff only channel.c and the test suite should see */
 #define CHANNEL_PRIVATE_
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/channelpadding.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuitstats.h"
-#include "or/config.h"
-#include "or/connection_or.h" /* For var_cell_free() */
-#include "or/circuitmux.h"
-#include "or/entrynodes.h"
-#include "or/geoip.h"
-#include "or/main.h"
-#include "or/nodelist.h"
-#include "or/relay.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/scheduler.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/channelpadding.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitstats.h"
+#include "app/config/config.h"
+#include "core/or/connection_or.h" /* For var_cell_free() */
+#include "core/or/circuitmux.h"
+#include "feature/client/entrynodes.h"
+#include "feature/stats/geoip.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/relay.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "core/or/scheduler.h"
 #include "lib/time/compat_time.h"
-#include "or/networkstatus.h"
-#include "or/rendservice.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/rend/rendservice.h"
 #include "lib/evloop/timers.h"
 
-#include "or/cell_queue_st.h"
+#include "core/or/cell_queue_st.h"
 
 /* Global lists of channels */
 
diff --git a/src/core/or/channel.h b/src/core/or/channel.h
index 7f250567693198d55238c77cd3acba4ac677451d..b3d97a9addac78aae9ffecf932e61199bb5f48c2 100644
--- a/src/core/or/channel.h
+++ b/src/core/or/channel.h
@@ -9,8 +9,8 @@
 #ifndef TOR_CHANNEL_H
 #define TOR_CHANNEL_H
 
-#include "or/or.h"
-#include "or/circuitmux.h"
+#include "core/or/or.h"
+#include "core/or/circuitmux.h"
 #include "lib/container/handles.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 
diff --git a/src/core/or/channelpadding.c b/src/core/or/channelpadding.c
index 504f6f8f8382d20ff3bf22bbfc366be7174598cf..b8cfd33d509533f640c8e5f0e27a64393e8ea831 100644
--- a/src/core/or/channelpadding.c
+++ b/src/core/or/channelpadding.c
@@ -8,24 +8,24 @@
  * channelpadding_channel_to_channelinfo() */
 #define TOR_CHANNEL_INTERNAL_
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/channelpadding.h"
-#include "or/channeltls.h"
-#include "or/config.h"
-#include "or/networkstatus.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/channelpadding.h"
+#include "core/or/channeltls.h"
+#include "app/config/config.h"
+#include "feature/nodelist/networkstatus.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/main.h"
-#include "or/rephist.h"
-#include "or/router.h"
+#include "core/mainloop/main.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
 #include "lib/time/compat_time.h"
-#include "or/rendservice.h"
+#include "feature/rend/rendservice.h"
 #include "lib/evloop/timers.h"
 
-#include "or/cell_st.h"
-#include "or/or_connection_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/or_connection_st.h"
 
 STATIC int32_t channelpadding_get_netflow_inactive_timeout_ms(
                                                            const channel_t *);
diff --git a/src/core/or/channeltls.c b/src/core/or/channeltls.c
index 85dfe0c0f1113544a5b3baa640ee3e34762d0204..87f5a02b750785432b38c9a3a9d79bf7339e07b7 100644
--- a/src/core/or/channeltls.c
+++ b/src/core/or/channeltls.c
@@ -38,36 +38,36 @@
 
 #define CHANNELTLS_PRIVATE
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/circuitmux.h"
-#include "or/circuitmux_ewma.h"
-#include "or/command.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/control.h"
-#include "or/entrynodes.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/circuitmux.h"
+#include "core/or/circuitmux_ewma.h"
+#include "core/or/command.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
+#include "feature/client/entrynodes.h"
 #include "trunnel/link_handshake.h"
-#include "or/relay.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/scheduler.h"
-#include "or/torcert.h"
-#include "or/networkstatus.h"
+#include "core/or/relay.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "core/or/scheduler.h"
+#include "feature/nodelist/torcert.h"
+#include "feature/nodelist/networkstatus.h"
 #include "trunnel/channelpadding_negotiation.h"
-#include "or/channelpadding.h"
-
-#include "or/cell_st.h"
-#include "or/cell_queue_st.h"
-#include "or/extend_info_st.h"
-#include "or/or_connection_st.h"
-#include "or/or_handshake_certs_st.h"
-#include "or/or_handshake_state_st.h"
-#include "or/routerinfo_st.h"
-#include "or/var_cell_st.h"
+#include "core/or/channelpadding.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/cell_queue_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/or_connection_st.h"
+#include "core/or/or_handshake_certs_st.h"
+#include "core/or/or_handshake_state_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "core/or/var_cell_st.h"
 
 #include "lib/tls/tortls.h"
 
diff --git a/src/core/or/channeltls.h b/src/core/or/channeltls.h
index 1ab899af969f72a1f91f6b1dfb51f0eb9cc41210..4a10d51d9fca2562eed386feb5a706fcc388fb6f 100644
--- a/src/core/or/channeltls.h
+++ b/src/core/or/channeltls.h
@@ -9,8 +9,8 @@
 #ifndef TOR_CHANNELTLS_H
 #define TOR_CHANNELTLS_H
 
-#include "or/or.h"
-#include "or/channel.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
 
 struct ed25519_public_key_t;
 struct curve25519_public_key_t;
diff --git a/src/core/or/circuit_st.h b/src/core/or/circuit_st.h
index 8453efa633e77d84ad2714e5986f9c7b98f10b59..2e33b37b015f20cfafa635dcf00c34fe1ee22a14 100644
--- a/src/core/or/circuit_st.h
+++ b/src/core/or/circuit_st.h
@@ -7,9 +7,9 @@
 #ifndef CIRCUIT_ST_H
 #define CIRCUIT_ST_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 
-#include "or/cell_queue_st.h"
+#include "core/or/cell_queue_st.h"
 
 struct hs_token_t;
 
diff --git a/src/core/or/circuitbuild.c b/src/core/or/circuitbuild.c
index 39ae7ebf480d18f8f284d02f02b3cabacfb30dc3..e22ddabde3f877a011a06e42162c7e2c6ce764a6 100644
--- a/src/core/or/circuitbuild.c
+++ b/src/core/or/circuitbuild.c
@@ -27,54 +27,54 @@
 
 #define CIRCUITBUILD_PRIVATE
 
-#include "or/or.h"
-#include "or/bridges.h"
-#include "or/channel.h"
-#include "or/circpathbias.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
+#include "core/or/channel.h"
+#include "feature/client/circpathbias.h"
 #define CIRCUITBUILD_PRIVATE
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuitstats.h"
-#include "or/circuituse.h"
-#include "or/command.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/control.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitstats.h"
+#include "core/or/circuituse.h"
+#include "core/or/command.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/directory.h"
-#include "or/entrynodes.h"
-#include "or/hs_ntor.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/onion.h"
-#include "or/onion_tap.h"
-#include "or/onion_fast.h"
-#include "or/policies.h"
-#include "or/relay.h"
-#include "or/relay_crypto.h"
-#include "or/rendcommon.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
-#include "or/transports.h"
-
-#include "or/cell_st.h"
-#include "or/cpath_build_state_st.h"
-#include "or/entry_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/node_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/microdesc_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/dircache/directory.h"
+#include "feature/client/entrynodes.h"
+#include "core/crypto/hs_ntor.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/crypto/onion.h"
+#include "core/crypto/onion_tap.h"
+#include "core/crypto/onion_fast.h"
+#include "core/or/policies.h"
+#include "core/or/relay.h"
+#include "core/crypto/relay_crypto.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/client/transports.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 static channel_t * channel_connect_for_circuit(const tor_addr_t *addr,
                                             uint16_t port,
diff --git a/src/core/or/circuitlist.c b/src/core/or/circuitlist.c
index d9d12db9b48802ebce43ad33880bcd6fcffd8925..f39e05ecd14a66bdb9f23d2f1d30c083e05f0dcc 100644
--- a/src/core/or/circuitlist.c
+++ b/src/core/or/circuitlist.c
@@ -53,40 +53,40 @@
 #define CIRCUITLIST_PRIVATE
 #include "lib/cc/torint.h"  /* TOR_PRIuSZ */
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/circuitstats.h"
-#include "or/connection.h"
-#include "or/config.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "core/or/circuitstats.h"
+#include "core/mainloop/connection.h"
+#include "app/config/config.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
 #include "lib/crypt_ops/crypto_dh.h"
-#include "or/directory.h"
-#include "or/entrynodes.h"
-#include "or/main.h"
-#include "or/hs_circuit.h"
-#include "or/hs_circuitmap.h"
-#include "or/hs_ident.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/onion.h"
-#include "or/onion_fast.h"
-#include "or/policies.h"
-#include "or/relay.h"
-#include "or/relay_crypto.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rephist.h"
-#include "or/routerlist.h"
-#include "or/routerset.h"
-#include "or/channelpadding.h"
+#include "feature/dircache/directory.h"
+#include "feature/client/entrynodes.h"
+#include "core/mainloop/main.h"
+#include "feature/hs/hs_circuit.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/crypto/onion.h"
+#include "core/crypto/onion_fast.h"
+#include "core/or/policies.h"
+#include "core/or/relay.h"
+#include "core/crypto/relay_crypto.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/stats/rephist.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerset.h"
+#include "core/or/channelpadding.h"
 #include "lib/compress/compress.h"
 #include "lib/compress/compress_lzma.h"
 #include "lib/compress/compress_zlib.h"
@@ -95,13 +95,13 @@
 
 #include "ht.h"
 
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_reference_st.h"
-#include "or/dir_connection_st.h"
-#include "or/edge_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_reference_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/edge_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 /********* START VARIABLES **********/
 
diff --git a/src/core/or/circuitlist.h b/src/core/or/circuitlist.h
index 7c9bc0199a301f464ac9a62b5b3474e1917d614e..b069604a1efbe7e4b6aaeeb6bfbb5b9a0646b973 100644
--- a/src/core/or/circuitlist.h
+++ b/src/core/or/circuitlist.h
@@ -13,7 +13,7 @@
 #define TOR_CIRCUITLIST_H
 
 #include "lib/testsupport/testsupport.h"
-#include "or/hs_ident.h"
+#include "feature/hs/hs_ident.h"
 
 /** Circuit state: I'm the origin, still haven't done all my handshakes. */
 #define CIRCUIT_STATE_BUILDING 0
diff --git a/src/core/or/circuitmux.c b/src/core/or/circuitmux.c
index 9e0126b8f143ab9f49343a649b76a558cf11dc56..f55386df23d27d35ef17cfd2112cd440083bd5db 100644
--- a/src/core/or/circuitmux.c
+++ b/src/core/or/circuitmux.c
@@ -69,15 +69,15 @@
  *     made to attach all existing circuits to the new policy.
  **/
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/circuitlist.h"
-#include "or/circuitmux.h"
-#include "or/relay.h"
-
-#include "or/cell_queue_st.h"
-#include "or/destroy_cell_queue_st.h"
-#include "or/or_circuit_st.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitmux.h"
+#include "core/or/relay.h"
+
+#include "core/or/cell_queue_st.h"
+#include "core/or/destroy_cell_queue_st.h"
+#include "core/or/or_circuit_st.h"
 
 /*
  * Private typedefs for circuitmux.c
diff --git a/src/core/or/circuitmux.h b/src/core/or/circuitmux.h
index e94cc354c77180f7085d565bf1eaf87a0a92e9b5..31bf81463be9b5265f55821033d1ef7563d85222 100644
--- a/src/core/or/circuitmux.h
+++ b/src/core/or/circuitmux.h
@@ -9,7 +9,7 @@
 #ifndef TOR_CIRCUITMUX_H
 #define TOR_CIRCUITMUX_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/testsupport/testsupport.h"
 
 typedef struct circuitmux_policy_s circuitmux_policy_t;
diff --git a/src/core/or/circuitmux_ewma.c b/src/core/or/circuitmux_ewma.c
index d600602a7ef4765c77752c7ee581ac54734039a6..deca81f0ac8113e720d987910552289ef9a5d1b0 100644
--- a/src/core/or/circuitmux_ewma.c
+++ b/src/core/or/circuitmux_ewma.c
@@ -34,12 +34,12 @@
 
 #include <math.h>
 
-#include "or/or.h"
-#include "or/circuitmux.h"
-#include "or/circuitmux_ewma.h"
+#include "core/or/or.h"
+#include "core/or/circuitmux.h"
+#include "core/or/circuitmux_ewma.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/networkstatus.h"
-#include "or/or_options_st.h"
+#include "feature/nodelist/networkstatus.h"
+#include "app/config/or_options_st.h"
 
 /*** EWMA parameter #defines ***/
 
diff --git a/src/core/or/circuitmux_ewma.h b/src/core/or/circuitmux_ewma.h
index 1214b0264b3471d70146dd680baa39ac4ba3f531..8e87830a80e5a4fdbb7d84c56001c2f7a0a850a7 100644
--- a/src/core/or/circuitmux_ewma.h
+++ b/src/core/or/circuitmux_ewma.h
@@ -9,8 +9,8 @@
 #ifndef TOR_CIRCUITMUX_EWMA_H
 #define TOR_CIRCUITMUX_EWMA_H
 
-#include "or/or.h"
-#include "or/circuitmux.h"
+#include "core/or/or.h"
+#include "core/or/circuitmux.h"
 
 /* The public EWMA policy callbacks object. */
 extern circuitmux_policy_t ewma_policy;
diff --git a/src/core/or/circuitstats.c b/src/core/or/circuitstats.c
index d275399e97475170058e4eedcfb680dc7cfb31ed..63cd21540d7160b65b7a7220089f953b9e01b011 100644
--- a/src/core/or/circuitstats.c
+++ b/src/core/or/circuitstats.c
@@ -25,28 +25,28 @@
 
 #define CIRCUITSTATS_PRIVATE
 
-#include "or/or.h"
-#include "or/circuitbuild.h"
-#include "or/circuitstats.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitstats.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/rendclient.h"
-#include "or/rendservice.h"
-#include "or/router.h"
-#include "or/statefile.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendservice.h"
+#include "feature/relay/router.h"
+#include "app/config/statefile.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
 #include "lib/math/fp.h"
 #include "lib/time/tvdiff.h"
 #include "lib/encoding/confline.h"
 
-#include "or/crypt_path_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/or_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "app/config/or_state_st.h"
 
 #undef log
 #include <math.h>
diff --git a/src/core/or/circuituse.c b/src/core/or/circuituse.c
index a3a69dc35409b4d7e0b7baf7e51777652393ccf7..a3b9eb17130eb1c98e5dac7c22c82d5c3223959d 100644
--- a/src/core/or/circuituse.c
+++ b/src/core/or/circuituse.c
@@ -27,45 +27,45 @@
  * logic in circuitstats.c.
  **/
 
-#include "or/or.h"
-#include "or/addressmap.h"
-#include "or/bridges.h"
-#include "or/channel.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuitstats.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/control.h"
-#include "or/directory.h"
-#include "or/entrynodes.h"
-#include "or/hs_common.h"
-#include "or/hs_client.h"
-#include "or/hs_circuit.h"
-#include "or/hs_ident.h"
-#include "or/hs_stats.h"
-#include "or/nodelist.h"
-#include "or/networkstatus.h"
-#include "or/policies.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
+#include "core/or/or.h"
+#include "feature/client/addressmap.h"
+#include "feature/client/bridges.h"
+#include "core/or/channel.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitstats.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/control/control.h"
+#include "feature/dircache/directory.h"
+#include "feature/client/entrynodes.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_circuit.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/hs/hs_stats.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/networkstatus.h"
+#include "core/or/policies.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
 #include "lib/math/fp.h"
 #include "lib/time/tvdiff.h"
 
-#include "or/cpath_build_state_st.h"
-#include "or/dir_connection_st.h"
-#include "or/entry_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/socks_request_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "core/or/socks_request_st.h"
 
 static void circuit_expire_old_circuits_clientside(void);
 static void circuit_increment_failure_count(void);
diff --git a/src/core/or/command.c b/src/core/or/command.c
index c2d6e2bb26f295342a7a89e0e73216a97ceaa64d..461e49b6294a2722bdecfa902123f838fc5d670a 100644
--- a/src/core/or/command.c
+++ b/src/core/or/command.c
@@ -36,30 +36,30 @@
  *   callbacks registered in command_setup_channel(),
  *   called when channels are created in circuitbuild.c
  */
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/command.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/config.h"
-#include "or/control.h"
-#include "or/cpuworker.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/command.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "app/config/config.h"
+#include "feature/control/control.h"
+#include "core/mainloop/cpuworker.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/dos.h"
-#include "or/hibernate.h"
-#include "or/nodelist.h"
-#include "or/onion.h"
-#include "or/rephist.h"
-#include "or/relay.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-
-#include "or/cell_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/var_cell_st.h"
+#include "core/or/dos.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/crypto/onion.h"
+#include "feature/stats/rephist.h"
+#include "core/or/relay.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "core/or/var_cell_st.h"
 
 /** How many CELL_CREATE cells have we received, ever? */
 uint64_t stats_n_create_cells_processed = 0;
diff --git a/src/core/or/command.h b/src/core/or/command.h
index 864a5b2fd00788c0c460c3d6a5aa3d2cfcf53369..83ffd8dccd3e0f9a24c2420eec3ca48527f90a52 100644
--- a/src/core/or/command.h
+++ b/src/core/or/command.h
@@ -12,7 +12,7 @@
 #ifndef TOR_COMMAND_H
 #define TOR_COMMAND_H
 
-#include "or/channel.h"
+#include "core/or/channel.h"
 
 void command_process_cell(channel_t *chan, cell_t *cell);
 void command_process_var_cell(channel_t *chan, var_cell_t *cell);
diff --git a/src/core/or/connection_edge.c b/src/core/or/connection_edge.c
index 13d957a937a2a6c199ffe8d5581e382dd7d1ccee..8e8a5e21ca0b3c09ea1facccb806c1b6a94a70c8 100644
--- a/src/core/or/connection_edge.c
+++ b/src/core/or/connection_edge.c
@@ -55,57 +55,57 @@
  **/
 #define CONNECTION_EDGE_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 #include "lib/err/backtrace.h"
 
-#include "or/addressmap.h"
+#include "feature/client/addressmap.h"
 #include "lib/container/buffers.h"
-#include "or/channel.h"
-#include "or/circpathbias.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/control.h"
+#include "core/or/channel.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/dns.h"
-#include "or/dnsserv.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/hibernate.h"
-#include "or/hs_common.h"
-#include "or/hs_cache.h"
-#include "or/hs_client.h"
-#include "or/hs_circuit.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/proto_http.h"
-#include "or/proto_socks.h"
-#include "or/reasons.h"
-#include "or/relay.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerset.h"
-#include "or/circuitbuild.h"
-
-#include "or/cell_st.h"
-#include "or/cpath_build_state_st.h"
-#include "or/dir_connection_st.h"
-#include "or/entry_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/node_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/socks_request_st.h"
+#include "feature/relay/dns.h"
+#include "feature/client/dnsserv.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_circuit.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/proto/proto_http.h"
+#include "core/proto/proto_socks.h"
+#include "core/or/reasons.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerset.h"
+#include "core/or/circuitbuild.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "core/or/socks_request_st.h"
 #include "lib/evloop/compat_libevent.h"
 
 #ifdef HAVE_LINUX_TYPES_H
diff --git a/src/core/or/connection_or.c b/src/core/or/connection_or.c
index 71ab905942ddc99ffaebac703256707265b8c1cb..159ee962666c4b2d9851c87668feb04530521ac2 100644
--- a/src/core/or/connection_or.c
+++ b/src/core/or/connection_or.c
@@ -20,8 +20,8 @@
  *
  * This module also implements the client side of the v3 Tor link handshake,
  **/
-#include "or/or.h"
-#include "or/bridges.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
 #include "lib/container/buffers.h"
 /*
  * Define this so we get channel internal functions, since we're implementing
@@ -29,46 +29,46 @@
  */
 #define TOR_CHANNEL_INTERNAL_
 #define CONNECTION_OR_PRIVATE
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuitstats.h"
-#include "or/command.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/control.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitstats.h"
+#include "core/or/command.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/dirserv.h"
-#include "or/entrynodes.h"
-#include "or/geoip.h"
-#include "or/main.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/client/entrynodes.h"
+#include "feature/stats/geoip.h"
+#include "core/mainloop/main.h"
 #include "trunnel/link_handshake.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/proto_cell.h"
-#include "or/reasons.h"
-#include "or/relay.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/ext_orport.h"
-#include "or/scheduler.h"
-#include "or/torcert.h"
-#include "or/channelpadding.h"
-
-#include "or/cell_st.h"
-#include "or/cell_queue_st.h"
-#include "or/or_connection_st.h"
-#include "or/or_handshake_certs_st.h"
-#include "or/or_handshake_state_st.h"
-#include "or/or_state_st.h"
-#include "or/routerinfo_st.h"
-#include "or/var_cell_st.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/proto/proto_cell.h"
+#include "core/or/reasons.h"
+#include "core/or/relay.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/relay/ext_orport.h"
+#include "core/or/scheduler.h"
+#include "feature/nodelist/torcert.h"
+#include "core/or/channelpadding.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/cell_queue_st.h"
+#include "core/or/or_connection_st.h"
+#include "core/or/or_handshake_certs_st.h"
+#include "core/or/or_handshake_state_st.h"
+#include "app/config/or_state_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "core/or/var_cell_st.h"
 #include "lib/crypt_ops/crypto_format.h"
 
 #include "lib/tls/tortls.h"
diff --git a/src/core/or/crypt_path_st.h b/src/core/or/crypt_path_st.h
index 0fde1fab0ef865c75e3f6a4e33327688eea0b40b..1380913360a621e170ed1e037527f3fe1cd8ea98 100644
--- a/src/core/or/crypt_path_st.h
+++ b/src/core/or/crypt_path_st.h
@@ -7,7 +7,7 @@
 #ifndef CRYPT_PATH_ST_H
 #define CRYPT_PATH_ST_H
 
-#include "or/relay_crypto_st.h"
+#include "core/or/relay_crypto_st.h"
 struct crypto_dh_t;
 
 #define CRYPT_PATH_MAGIC 0x70127012u
diff --git a/src/core/or/dos.c b/src/core/or/dos.c
index d86ede02cb81e8b823aa556f39aabd32c0103384..52879c34d73024a09d43cae4ffae284aac67ab87 100644
--- a/src/core/or/dos.c
+++ b/src/core/or/dos.c
@@ -8,22 +8,22 @@
 
 #define DOS_PRIVATE
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/geoip.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/relay.h"
-#include "or/router.h"
+#include "feature/stats/geoip.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/relay.h"
+#include "feature/relay/router.h"
 
-#include "or/dos.h"
+#include "core/or/dos.h"
 
-#include "or/or_connection_st.h"
+#include "core/or/or_connection_st.h"
 
 /*
  * Circuit creation denial of service mitigation.
diff --git a/src/core/or/edge_connection_st.h b/src/core/or/edge_connection_st.h
index d58e1c2b8ceb788f7b81f9ca5d5e7d6849aaae50..f4388c10e6d8a12d16826556e6c4bb2e23dd967d 100644
--- a/src/core/or/edge_connection_st.h
+++ b/src/core/or/edge_connection_st.h
@@ -7,9 +7,9 @@
 #ifndef EDGE_CONNECTION_ST_H
 #define EDGE_CONNECTION_ST_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 
-#include "or/connection_st.h"
+#include "core/or/connection_st.h"
 
 /** Subtype of connection_t for an "edge connection" -- that is, an entry (ap)
  * connection, or an exit. */
diff --git a/src/core/or/entry_connection_st.h b/src/core/or/entry_connection_st.h
index 2f9676088cebbc4155096b82c9838d990b239285..ebaee2f1a64435d70e75111be36d776acae59a10 100644
--- a/src/core/or/entry_connection_st.h
+++ b/src/core/or/entry_connection_st.h
@@ -7,7 +7,7 @@
 #ifndef ENTRY_CONNECTION_ST_H
 #define ENTRY_CONNECTION_ST_H
 
-#include "or/edge_connection_st.h"
+#include "core/or/edge_connection_st.h"
 
 /** Subtype of edge_connection_t for an "entry connection" -- that is, a SOCKS
  * connection, a DNS request, a TransPort connection or a NATD connection */
diff --git a/src/core/or/entry_port_cfg_st.h b/src/core/or/entry_port_cfg_st.h
index 9b07ccb067b569b84a1c2629ff7c78f35b037b14..492fafbd6d733b71d7f134288b71b9f1bed4621b 100644
--- a/src/core/or/entry_port_cfg_st.h
+++ b/src/core/or/entry_port_cfg_st.h
@@ -8,7 +8,7 @@
 #define ENTRY_PORT_CFG_ST_H
 
 #include "lib/cc/torint.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
 struct entry_port_cfg_t {
   /* Client port types (socks, dns, trans, natd) only: */
diff --git a/src/core/or/git_revision.c b/src/core/or/git_revision.c
index be6f67423c1f3203c5d39c7a983fb7e0248be519..f34f922c80e1305ef204a044eb377dd60c6c91fd 100644
--- a/src/core/or/git_revision.c
+++ b/src/core/or/git_revision.c
@@ -3,7 +3,7 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/git_revision.h"
+#include "core/or/git_revision.h"
 
 /** String describing which Tor Git repository version the source was
  * built from.  This string is generated by a bit of shell kludging in
diff --git a/src/core/or/listener_connection_st.h b/src/core/or/listener_connection_st.h
index 7b5aafcb58d89b23839cb9e85f27b49bde9725e2..ec350c1b0d92c92625837389b3311c7a1b3827cc 100644
--- a/src/core/or/listener_connection_st.h
+++ b/src/core/or/listener_connection_st.h
@@ -7,7 +7,7 @@
 #ifndef LISTENER_CONNECTION_ST_H
 #define LISTENER_CONNECTION_ST_H
 
-#include "or/connection_st.h"
+#include "core/or/connection_st.h"
 
 /** Subtype of connection_t; used for a listener socket. */
 struct listener_connection_t {
diff --git a/src/core/or/or.h b/src/core/or/or.h
index 826e81e468141519816d550f617c9be6cc5312e1..6edfd21dfb0322601e86054716cbd7680300ae72 100644
--- a/src/core/or/or.h
+++ b/src/core/or/or.h
@@ -69,7 +69,7 @@
 
 // These, more than other includes, are for keeping the other struct
 // definitions working. We should remove them when we minimize our includes.
-#include "or/entry_port_cfg_st.h"
+#include "core/or/entry_port_cfg_st.h"
 
 struct ed25519_public_key_t;
 struct curve25519_public_key_t;
diff --git a/src/core/or/or_circuit_st.h b/src/core/or/or_circuit_st.h
index 158a5314efded8db5a8e84a23e95425581b93f33..b5e21d9867a6ec9a7b9a00b5d25febc6e0d5be63 100644
--- a/src/core/or/or_circuit_st.h
+++ b/src/core/or/or_circuit_st.h
@@ -7,10 +7,10 @@
 #ifndef OR_CIRCUIT_ST_H
 #define OR_CIRCUIT_ST_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 
-#include "or/circuit_st.h"
-#include "or/crypt_path_st.h"
+#include "core/or/circuit_st.h"
+#include "core/or/crypt_path_st.h"
 
 struct onion_queue_t;
 
diff --git a/src/core/or/or_connection_st.h b/src/core/or/or_connection_st.h
index 8c2c1f89c647bb9f9d8f9efbc68b2eb835ed5072..020a717c11991203828b83bcce36f04e110c3610 100644
--- a/src/core/or/or_connection_st.h
+++ b/src/core/or/or_connection_st.h
@@ -7,7 +7,7 @@
 #ifndef OR_CONNECTION_ST_H
 #define OR_CONNECTION_ST_H
 
-#include "or/connection_st.h"
+#include "core/or/connection_st.h"
 #include "lib/evloop/token_bucket.h"
 
 struct tor_tls_t;
diff --git a/src/core/or/origin_circuit_st.h b/src/core/or/origin_circuit_st.h
index b885725edb51599d5c4cd5b8983e405ba78d7da0..e7b864e8257a76d98043ee806a8c1efe62b4061f 100644
--- a/src/core/or/origin_circuit_st.h
+++ b/src/core/or/origin_circuit_st.h
@@ -7,9 +7,9 @@
 #ifndef ORIGIN_CIRCUIT_ST_H
 #define ORIGIN_CIRCUIT_ST_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 
-#include "or/circuit_st.h"
+#include "core/or/circuit_st.h"
 
 struct onion_queue_t;
 
diff --git a/src/core/or/policies.c b/src/core/or/policies.c
index 53e00e8083e9c28c5dd9cdb37fee6277c70c12fa..e01415f95e1058c28a18809323a0df0857e5daaa 100644
--- a/src/core/or/policies.c
+++ b/src/core/or/policies.c
@@ -17,27 +17,27 @@
 
 #define POLICIES_PRIVATE
 
-#include "or/or.h"
-#include "or/bridges.h"
-#include "or/config.h"
-#include "or/dirserv.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/router.h"
-#include "or/routerparse.h"
-#include "or/geoip.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
+#include "app/config/config.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/stats/geoip.h"
 #include "ht.h"
 #include "lib/encoding/confline.h"
 
-#include "or/addr_policy_st.h"
-#include "or/dir_server_st.h"
-#include "or/microdesc_st.h"
-#include "or/node_st.h"
-#include "or/port_cfg_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/addr_policy_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/port_cfg_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /** Policy that addresses for incoming SOCKS connections must match. */
 static smartlist_t *socks_policy = NULL;
diff --git a/src/core/or/port_cfg_st.h b/src/core/or/port_cfg_st.h
index 86a3b963bc84c352ac15a348beb639616f073a96..19410871ed28a2463980c93eaa1320cf282f0816 100644
--- a/src/core/or/port_cfg_st.h
+++ b/src/core/or/port_cfg_st.h
@@ -7,8 +7,8 @@
 #ifndef PORT_CFG_ST_H
 #define PORT_CFG_ST_H
 
-#include "or/entry_port_cfg_st.h"
-#include "or/server_port_cfg_st.h"
+#include "core/or/entry_port_cfg_st.h"
+#include "core/or/server_port_cfg_st.h"
 
 /** Configuration for a single port that we're listening on. */
 struct port_cfg_t {
diff --git a/src/core/or/reasons.c b/src/core/or/reasons.c
index 7d8dcf374cf8c6571f7956ebd7f7a08609a15abd..7a1e09e9f8da6ba7bb4f6fae80a6ebbd765976df 100644
--- a/src/core/or/reasons.c
+++ b/src/core/or/reasons.c
@@ -14,10 +14,10 @@
  * to another.
  **/
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/reasons.h"
-#include "or/routerlist.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/or/reasons.h"
+#include "feature/nodelist/routerlist.h"
 #include "lib/tls/tortls.h"
 
 /***************************** Edge (stream) reasons **********************/
diff --git a/src/core/or/relay.c b/src/core/or/relay.c
index e8e1762b40038be4a7698bb8481ca0a2c19ced2f..32bb69d25f115a119ad7b6986590fdc59d8b873c 100644
--- a/src/core/or/relay.c
+++ b/src/core/or/relay.c
@@ -46,53 +46,53 @@
  **/
 
 #define RELAY_PRIVATE
-#include "or/or.h"
-#include "or/addressmap.h"
+#include "core/or/or.h"
+#include "feature/client/addressmap.h"
 #include "lib/err/backtrace.h"
 #include "lib/container/buffers.h"
-#include "or/channel.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
+#include "core/or/channel.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
 #include "lib/compress/compress.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/control.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/geoip.h"
-#include "or/hs_cache.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/onion.h"
-#include "or/policies.h"
-#include "or/reasons.h"
-#include "or/relay.h"
-#include "or/relay_crypto.h"
-#include "or/rendcache.h"
-#include "or/rendcommon.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/scheduler.h"
-#include "or/rephist.h"
-
-#include "or/cell_st.h"
-#include "or/cell_queue_st.h"
-#include "or/cpath_build_state_st.h"
-#include "or/dir_connection_st.h"
-#include "or/destroy_cell_queue_st.h"
-#include "or/entry_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/routerinfo_st.h"
-#include "or/socks_request_st.h"
+#include "feature/dircache/directory.h"
+#include "feature/stats/geoip.h"
+#include "feature/hs/hs_cache.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/crypto/onion.h"
+#include "core/or/policies.h"
+#include "core/or/reasons.h"
+#include "core/or/relay.h"
+#include "core/crypto/relay_crypto.h"
+#include "feature/rend/rendcache.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "core/or/scheduler.h"
+#include "feature/stats/rephist.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/cell_queue_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/destroy_cell_queue_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "core/or/socks_request_st.h"
 
 #include "lib/intmath/weakrng.h"
 
diff --git a/src/core/or/scheduler.c b/src/core/or/scheduler.c
index b8eaca3dca8a6f728c4fb5e4cd45a44ea6fa24df..e19059f0c5567d94ee416aa407d3da49728ab571 100644
--- a/src/core/or/scheduler.c
+++ b/src/core/or/scheduler.c
@@ -1,20 +1,20 @@
 /* Copyright (c) 2013-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 
 #include "lib/evloop/compat_libevent.h"
 #define SCHEDULER_PRIVATE_
 #define SCHEDULER_KIST_PRIVATE
-#include "or/scheduler.h"
-#include "or/main.h"
+#include "core/or/scheduler.h"
+#include "core/mainloop/main.h"
 #include "lib/container/buffers.h"
 #define TOR_CHANNEL_INTERNAL_
-#include "or/channeltls.h"
+#include "core/or/channeltls.h"
 #include "lib/evloop/compat_libevent.h"
 
-#include "or/or_connection_st.h"
+#include "core/or/or_connection_st.h"
 
 /**
  * \file scheduler.c
diff --git a/src/core/or/scheduler.h b/src/core/or/scheduler.h
index 856923f9a75646758c27eb582c798a477168bf5d..05a888365bd23a409368ba65d117c3ba721597b9 100644
--- a/src/core/or/scheduler.h
+++ b/src/core/or/scheduler.h
@@ -9,8 +9,8 @@
 #ifndef TOR_SCHEDULER_H
 #define TOR_SCHEDULER_H
 
-#include "or/or.h"
-#include "or/channel.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
 #include "lib/testsupport/testsupport.h"
 
 /** Scheduler type, we build an ordered list with those values from the
diff --git a/src/core/or/scheduler_kist.c b/src/core/or/scheduler_kist.c
index 5a45ccab88884c4b320d90db5e83d1cd6c21fdd1..449478df787f2bd38a1b2804ff275c21c752988b 100644
--- a/src/core/or/scheduler_kist.c
+++ b/src/core/or/scheduler_kist.c
@@ -3,19 +3,19 @@
 
 #define SCHEDULER_KIST_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/networkstatus.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "feature/nodelist/networkstatus.h"
 #define TOR_CHANNEL_INTERNAL_
-#include "or/channel.h"
-#include "or/channeltls.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
 #define SCHEDULER_PRIVATE_
-#include "or/scheduler.h"
+#include "core/or/scheduler.h"
 #include "lib/math/fp.h"
 
-#include "or/or_connection_st.h"
+#include "core/or/or_connection_st.h"
 
 #define TLS_PER_CELL_OVERHEAD 29
 
diff --git a/src/core/or/scheduler_vanilla.c b/src/core/or/scheduler_vanilla.c
index e05bebb37cca62121994aa081ef1e4b7effa04cb..db8374eadb02fda6bb80a75b681d760b87f95849 100644
--- a/src/core/or/scheduler_vanilla.c
+++ b/src/core/or/scheduler_vanilla.c
@@ -1,12 +1,12 @@
 /* Copyright (c) 2017-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 #define TOR_CHANNEL_INTERNAL_
-#include "or/channel.h"
+#include "core/or/channel.h"
 #define SCHEDULER_PRIVATE_
-#include "or/scheduler.h"
+#include "core/or/scheduler.h"
 
 /*****************************************************************************
  * Other internal data
diff --git a/src/core/or/status.c b/src/core/or/status.c
index 2259b3aae7111fa041c0962b8b21dc4ec7f099df..30a65b1d4c93f506143199fc79361815c34c9cc2 100644
--- a/src/core/or/status.c
+++ b/src/core/or/status.c
@@ -14,28 +14,28 @@
 
 #define STATUS_PRIVATE
 
-#include "or/or.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/status.h"
-#include "or/nodelist.h"
-#include "or/relay.h"
-#include "or/router.h"
-#include "or/circuitlist.h"
-#include "or/main.h"
-#include "or/rephist.h"
-#include "or/hibernate.h"
-#include "or/statefile.h"
-#include "or/hs_stats.h"
-#include "or/hs_service.h"
-#include "or/dos.h"
-
-#include "or/or_state_st.h"
-#include "or/routerinfo_st.h"
+#include "core/or/or.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/or/status.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/relay.h"
+#include "feature/relay/router.h"
+#include "core/or/circuitlist.h"
+#include "core/mainloop/main.h"
+#include "feature/stats/rephist.h"
+#include "feature/hibernate/hibernate.h"
+#include "app/config/statefile.h"
+#include "feature/hs/hs_stats.h"
+#include "feature/hs/hs_service.h"
+#include "core/or/dos.h"
+
+#include "app/config/or_state_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 #include "lib/tls/tortls.h"
 
 static void log_accounting(const time_t now, const or_options_t *options);
-#include "or/geoip.h"
+#include "feature/stats/geoip.h"
 
 /** Return the total number of circuits. */
 STATIC int
diff --git a/src/core/proto/proto_cell.c b/src/core/proto/proto_cell.c
index 41554bd1b0b65ab31dad94c0454b9c0fc0629160..49b07663d7bfd1b1a7247ffe814ae1f0aea00b73 100644
--- a/src/core/proto/proto_cell.c
+++ b/src/core/proto/proto_cell.c
@@ -4,13 +4,13 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/proto_cell.h"
+#include "core/proto/proto_cell.h"
 
-#include "or/connection_or.h"
+#include "core/or/connection_or.h"
 
-#include "or/var_cell_st.h"
+#include "core/or/var_cell_st.h"
 
 /** True iff the cell command <b>command</b> is one that implies a
  * variable-length cell in Tor link protocol <b>linkproto</b>. */
diff --git a/src/core/proto/proto_control0.c b/src/core/proto/proto_control0.c
index 34e7ddb8d990f242f0a7bcc48ff645d4b32b71d1..d26c69753a3e22c3f9935f7129b44996a7728751 100644
--- a/src/core/proto/proto_control0.c
+++ b/src/core/proto/proto_control0.c
@@ -4,9 +4,9 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/proto_control0.h"
+#include "core/proto/proto_control0.h"
 
 /** Return 1 iff buf looks more like it has an (obsolete) v0 controller
  * command on it than any valid v1 controller command. */
diff --git a/src/core/proto/proto_ext_or.c b/src/core/proto/proto_ext_or.c
index f30d876231fbbff06eb75d904fc37083c3f61bd7..04bec4e6b97486f6e10ef79c1d4430780154b278 100644
--- a/src/core/proto/proto_ext_or.c
+++ b/src/core/proto/proto_ext_or.c
@@ -4,10 +4,10 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/ext_orport.h"
-#include "or/proto_ext_or.h"
+#include "feature/relay/ext_orport.h"
+#include "core/proto/proto_ext_or.h"
 
 /** The size of the header of an Extended ORPort message: 2 bytes for
  *  COMMAND, 2 bytes for BODYLEN */
diff --git a/src/core/proto/proto_http.c b/src/core/proto/proto_http.c
index ecc669e3a41c82143c152735ea45e03e29a96cfa..37298d1284c6fe0ae98bd13c100ca1f03724335d 100644
--- a/src/core/proto/proto_http.c
+++ b/src/core/proto/proto_http.c
@@ -5,9 +5,9 @@
 /* See LICENSE for licensing information */
 
 #define PROTO_HTTP_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/proto_http.h"
+#include "core/proto/proto_http.h"
 
 /** Return true if <b>cmd</b> looks like a HTTP (proxy) request. */
 int
diff --git a/src/core/proto/proto_socks.c b/src/core/proto/proto_socks.c
index f5e6ce581bf8d14a216a0fc76edcd5d499e08f2b..6912441472faaf97d0072f00b128445a6244fce8 100644
--- a/src/core/proto/proto_socks.c
+++ b/src/core/proto/proto_socks.c
@@ -4,18 +4,18 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
-#include "or/addressmap.h"
+#include "core/or/or.h"
+#include "feature/client/addressmap.h"
 #include "lib/container/buffers.h"
-#include "or/connection.h"
-#include "or/control.h"
-#include "or/config.h"
+#include "core/mainloop/connection.h"
+#include "feature/control/control.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/ext_orport.h"
-#include "or/proto_socks.h"
-#include "or/reasons.h"
+#include "feature/relay/ext_orport.h"
+#include "core/proto/proto_socks.h"
+#include "core/or/reasons.h"
 
-#include "or/socks_request_st.h"
+#include "core/or/socks_request_st.h"
 
 static void socks_request_set_socks5_error(socks_request_t *req,
                               socks5_reply_status_t reason);
diff --git a/src/core/proto/protover.c b/src/core/proto/protover.c
index f63c134565a03741a2ca3d3d426952f49e2b430a..3ae91688d667522ec640bd221fc836898165b164 100644
--- a/src/core/proto/protover.c
+++ b/src/core/proto/protover.c
@@ -23,9 +23,9 @@
 
 #define PROTOVER_PRIVATE
 
-#include "or/or.h"
-#include "or/protover.h"
-#include "or/routerparse.h"
+#include "core/or/or.h"
+#include "core/proto/protover.h"
+#include "feature/nodelist/routerparse.h"
 
 #ifndef HAVE_RUST
 
diff --git a/src/core/proto/protover_rust.c b/src/core/proto/protover_rust.c
index bd2f88b98eebe63cd5a5168dd28d55658128fb51..55b0ebedf97c3dceb0404ea22180ba4563fa44dc 100644
--- a/src/core/proto/protover_rust.c
+++ b/src/core/proto/protover_rust.c
@@ -7,8 +7,8 @@
  * and safe translation/handling between the Rust/C boundary.
  */
 
-#include "or/or.h"
-#include "or/protover.h"
+#include "core/or/or.h"
+#include "core/proto/protover.h"
 
 #ifdef HAVE_RUST
 
diff --git a/src/feature/api/tor_api.c b/src/feature/api/tor_api.c
index efedf2dc785dd980d8e0519ab258f06b4a97193b..2a4458bf6938fb1917172cd7715db014c08e99d1 100644
--- a/src/feature/api/tor_api.c
+++ b/src/feature/api/tor_api.c
@@ -8,8 +8,8 @@
  * \file tor_api.c
  **/
 
-#include "or/tor_api.h"
-#include "or/tor_api_internal.h"
+#include "feature/api/tor_api.h"
+#include "feature/api/tor_api_internal.h"
 
 // Include this after the above headers, to insure that they don't
 // depend on anything else.
diff --git a/src/feature/client/addressmap.c b/src/feature/client/addressmap.c
index ba78a5f908f90bd7d26d1c8dbccff9c491b82932..e62d82b7f3c40a7a99816e57d488253ebb1c3a38 100644
--- a/src/feature/client/addressmap.c
+++ b/src/feature/client/addressmap.c
@@ -17,17 +17,17 @@
 
 #include "lib/crypt_ops/crypto_rand.h"
 
-#include "or/or.h"
-#include "or/addressmap.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection_edge.h"
-#include "or/control.h"
-#include "or/dns.h"
-#include "or/nodelist.h"
-#include "or/routerset.h"
-
-#include "or/entry_connection_st.h"
+#include "core/or/or.h"
+#include "feature/client/addressmap.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/or/connection_edge.h"
+#include "feature/control/control.h"
+#include "feature/relay/dns.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/routerset.h"
+
+#include "core/or/entry_connection_st.h"
 
 /** A client-side struct to remember requests to rewrite addresses
  * to new addresses. These structs are stored in the hash table
diff --git a/src/feature/client/bridges.c b/src/feature/client/bridges.c
index ca0a13f2a0aa94048c1d0d4c852ed3ef0eb59bf7..4bffe160361dff85b6ed7e91953222489451f7e3 100644
--- a/src/feature/client/bridges.c
+++ b/src/feature/client/bridges.c
@@ -13,24 +13,24 @@
 
 #define TOR_BRIDGES_PRIVATE
 
-#include "or/or.h"
-#include "or/bridges.h"
-#include "or/circuitbuild.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/directory.h"
-#include "or/entrynodes.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerset.h"
-#include "or/transports.h"
-
-#include "or/extend_info_st.h"
-#include "or/node_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
+#include "core/or/circuitbuild.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "feature/dircache/directory.h"
+#include "feature/client/entrynodes.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/client/transports.h"
+
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /** Information about a configured bridge. Currently this just matches the
  * ones in the torrc file, but one day we may be able to learn about new
diff --git a/src/feature/client/circpathbias.c b/src/feature/client/circpathbias.c
index 32b3212d3ff4e7505cc4f7f33f2bfb9130ce1ad8..1ee29c639d3f17a3bf69dda2905367a0c9c9b055 100644
--- a/src/feature/client/circpathbias.c
+++ b/src/feature/client/circpathbias.c
@@ -21,27 +21,27 @@
  * each guard, and stored persistently in the state file.
  */
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/circuitstats.h"
-#include "or/connection_edge.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "core/or/circuitstats.h"
+#include "core/or/connection_edge.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/entrynodes.h"
-#include "or/networkstatus.h"
-#include "or/relay.h"
+#include "feature/client/entrynodes.h"
+#include "feature/nodelist/networkstatus.h"
+#include "core/or/relay.h"
 #include "lib/math/fp.h"
 #include "lib/math/laplace.h"
 
-#include "or/cell_st.h"
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/extend_info_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/origin_circuit_st.h"
 
 static void pathbias_count_successful_close(origin_circuit_t *circ);
 static void pathbias_count_collapse(origin_circuit_t *circ);
diff --git a/src/feature/client/dnsserv.c b/src/feature/client/dnsserv.c
index 6e752542391d14a7dc366f6af9d2ca9ffd309baf..31cc3eff797b76812a73a05e89303782c82e6d6c 100644
--- a/src/feature/client/dnsserv.c
+++ b/src/feature/client/dnsserv.c
@@ -21,19 +21,19 @@
  * DNS client.
  **/
 
-#include "or/or.h"
-#include "or/dnsserv.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/control.h"
-#include "or/main.h"
-#include "or/policies.h"
-
-#include "or/control_connection_st.h"
-#include "or/entry_connection_st.h"
-#include "or/listener_connection_st.h"
-#include "or/socks_request_st.h"
+#include "core/or/or.h"
+#include "feature/client/dnsserv.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/control/control.h"
+#include "core/mainloop/main.h"
+#include "core/or/policies.h"
+
+#include "feature/control/control_connection_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/listener_connection_st.h"
+#include "core/or/socks_request_st.h"
 #include "lib/evloop/compat_libevent.h"
 
 #include <event2/dns.h>
diff --git a/src/feature/client/entrynodes.c b/src/feature/client/entrynodes.c
index ba9c30f8b3a036f247755e3789321bc260f989c2..664be8ce11e737e5e44d2a266c781fc11bf681a2 100644
--- a/src/feature/client/entrynodes.c
+++ b/src/feature/client/entrynodes.c
@@ -112,38 +112,38 @@
 
 #define ENTRYNODES_PRIVATE
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/bridges.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/circuitstats.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/connection.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "feature/client/bridges.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "core/or/circuitstats.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/connection.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/directory.h"
-#include "or/entrynodes.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
-#include "or/transports.h"
-#include "or/statefile.h"
+#include "feature/dircache/directory.h"
+#include "feature/client/entrynodes.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/client/transports.h"
+#include "app/config/statefile.h"
 #include "lib/math/fp.h"
 #include "lib/encoding/confline.h"
 
-#include "or/node_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/or_state_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "app/config/or_state_st.h"
 
 #include "lib/crypt_ops/digestset.h"
 
diff --git a/src/feature/client/transports.c b/src/feature/client/transports.c
index 1d3cb7b951a25b4a9b4a124ba940f845963ab4d9..85d4d2e080d9e1c2c8babcad487318eb58dbb983 100644
--- a/src/feature/client/transports.c
+++ b/src/feature/client/transports.c
@@ -90,17 +90,17 @@
  **/
 
 #define PT_PRIVATE
-#include "or/or.h"
-#include "or/bridges.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/circuitbuild.h"
-#include "or/transports.h"
-#include "or/router.h"
-#include "or/statefile.h"
-#include "or/connection_or.h"
-#include "or/ext_orport.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/circuitbuild.h"
+#include "feature/client/transports.h"
+#include "feature/relay/router.h"
+#include "app/config/statefile.h"
+#include "core/or/connection_or.h"
+#include "feature/relay/ext_orport.h"
+#include "feature/control/control.h"
 
 #include "lib/process/env.h"
 #include "lib/process/subprocess.h"
diff --git a/src/feature/control/control.c b/src/feature/control/control.c
index aa43fccff00a4fb2975c146e8b5118bade190bfc..12f10926b75654d838becfbdfe34377671556c52 100644
--- a/src/feature/control/control.c
+++ b/src/feature/control/control.c
@@ -35,70 +35,70 @@
 
 #define CONTROL_PRIVATE
 
-#include "or/or.h"
-#include "or/addressmap.h"
-#include "or/bridges.h"
+#include "core/or/or.h"
+#include "feature/client/addressmap.h"
+#include "feature/client/bridges.h"
 #include "lib/container/buffers.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuitstats.h"
-#include "or/circuituse.h"
-#include "or/command.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitstats.h"
+#include "core/or/circuituse.h"
+#include "core/or/command.h"
 #include "lib/evloop/compat_libevent.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/control.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/dnsserv.h"
-#include "or/entrynodes.h"
-#include "or/geoip.h"
-#include "or/hibernate.h"
-#include "or/hs_cache.h"
-#include "or/hs_common.h"
-#include "or/hs_control.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/proto_control0.h"
-#include "or/proto_http.h"
-#include "or/reasons.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/shared_random_client.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/client/dnsserv.h"
+#include "feature/client/entrynodes.h"
+#include "feature/stats/geoip.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_control.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/proto/proto_control0.h"
+#include "core/proto/proto_http.h"
+#include "core/or/reasons.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/hs_common/shared_random_client.h"
 #include "lib/encoding/confline.h"
 
-#include "or/cached_dir_st.h"
-#include "or/control_connection_st.h"
-#include "or/cpath_build_state_st.h"
-#include "or/entry_connection_st.h"
-#include "or/extrainfo_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/or_connection_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/microdesc_st.h"
-#include "or/rend_authorized_client_st.h"
-#include "or/rend_encoded_v2_service_descriptor_st.h"
-#include "or/rend_service_descriptor_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
-#include "or/socks_request_st.h"
+#include "feature/dircache/cached_dir_st.h"
+#include "feature/control/control_connection_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/entry_connection_st.h"
+#include "feature/nodelist/extrainfo_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/or_connection_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/rend/rend_authorized_client_st.h"
+#include "feature/rend/rend_encoded_v2_service_descriptor_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
+#include "core/or/socks_request_st.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
diff --git a/src/feature/control/control_connection_st.h b/src/feature/control/control_connection_st.h
index 4f8ab25d996fac4a528c821bdf26790e4b34a114..ff6264a9a5cfd72dee69131d5add78361d969d65 100644
--- a/src/feature/control/control_connection_st.h
+++ b/src/feature/control/control_connection_st.h
@@ -7,8 +7,8 @@
 #ifndef CONTROL_CONNECTION_ST_H
 #define CONTROL_CONNECTION_ST_H
 
-#include "or/or.h"
-#include "or/connection_st.h"
+#include "core/or/or.h"
+#include "core/or/connection_st.h"
 
 /** Subtype of connection_t for an connection to a controller. */
 struct control_connection_t {
diff --git a/src/feature/dirauth/dircollate.c b/src/feature/dirauth/dircollate.c
index 246977dcc8e646fc8a09bc2c7cd95f1d3f1bb2ef..ca8e5b7873b7b1d46ea671222ed57d57dfca13cf 100644
--- a/src/feature/dirauth/dircollate.c
+++ b/src/feature/dirauth/dircollate.c
@@ -22,11 +22,11 @@
  */
 
 #define DIRCOLLATE_PRIVATE
-#include "or/dirauth/dircollate.h"
-#include "or/dirauth/dirvote.h"
+#include "feature/dirauth/dircollate.h"
+#include "feature/dirauth/dirvote.h"
 
-#include "or/networkstatus_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 
 static void dircollator_collate_by_ed25519(dircollator_t *dc);
 
diff --git a/src/feature/dirauth/dircollate.h b/src/feature/dirauth/dircollate.h
index aae7829786e5b8d827ff265fab3fdca5cb5ec60a..0e84c66e6f88c0cfb8a6dd2cb1c273bd93dd96e8 100644
--- a/src/feature/dirauth/dircollate.h
+++ b/src/feature/dirauth/dircollate.h
@@ -13,7 +13,7 @@
 #define TOR_DIRCOLLATE_H
 
 #include "lib/testsupport/testsupport.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
 typedef struct dircollator_s dircollator_t;
 
diff --git a/src/feature/dirauth/dirvote.c b/src/feature/dirauth/dirvote.c
index 15f8378744d1084c7878bc8c38c16ee1b8c78b84..28254656771a3ec8bb25e3b922f0f13ecbf7d599 100644
--- a/src/feature/dirauth/dirvote.c
+++ b/src/feature/dirauth/dirvote.c
@@ -4,44 +4,44 @@
 /* See LICENSE for licensing information */
 
 #define DIRVOTE_PRIVATE
-#include "or/or.h"
-#include "or/config.h"
-#include "or/dirauth/dircollate.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/parsecommon.h"
-#include "or/policies.h"
-#include "or/protover.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/entrynodes.h" /* needed for guardfraction methods */
-#include "or/torcert.h"
-#include "or/voting_schedule.h"
-
-#include "or/dirauth/dirvote.h"
-#include "or/dirauth/mode.h"
-#include "or/dirauth/shared_random_state.h"
-
-#include "or/authority_cert_st.h"
-#include "or/cached_dir_st.h"
-#include "or/dir_server_st.h"
-#include "or/document_signature_st.h"
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/networkstatus_voter_info_st.h"
-#include "or/node_st.h"
-#include "or/ns_detached_signatures_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
-#include "or/vote_microdesc_hash_st.h"
-#include "or/vote_routerstatus_st.h"
-#include "or/vote_timing_st.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/dirauth/dircollate.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/parsecommon.h"
+#include "core/or/policies.h"
+#include "core/proto/protover.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/client/entrynodes.h" /* needed for guardfraction methods */
+#include "feature/nodelist/torcert.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "feature/dirauth/dirvote.h"
+#include "feature/dirauth/mode.h"
+#include "feature/dirauth/shared_random_state.h"
+
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/dircache/cached_dir_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "feature/nodelist/document_signature_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_voter_info_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/dirauth/ns_detached_signatures_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
+#include "feature/dirauth/vote_microdesc_hash_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
+#include "feature/dircommon/vote_timing_st.h"
 
 #include "lib/container/order.h"
 #include "lib/encoding/confline.h"
diff --git a/src/feature/dirauth/keypin.c b/src/feature/dirauth/keypin.c
index a2f3654b826175349868dfb69dbd769cbf3996f8..44e19985facf70f8795363d9c0b52630187f6712 100644
--- a/src/feature/dirauth/keypin.c
+++ b/src/feature/dirauth/keypin.c
@@ -30,7 +30,7 @@
 #include "lib/wallclock/approx_time.h"
 
 #include "ht.h"
-#include "or/keypin.h"
+#include "feature/dirauth/keypin.h"
 
 #include "siphash.h"
 
diff --git a/src/feature/dirauth/mode.h b/src/feature/dirauth/mode.h
index 17c35aff64cbfc0858bdf7a6e403e58fdc8244a7..8bb961dffb803305e934acff9f03af7b200d191c 100644
--- a/src/feature/dirauth/mode.h
+++ b/src/feature/dirauth/mode.h
@@ -11,7 +11,7 @@
 
 #ifdef HAVE_MODULE_DIRAUTH
 
-#include "or/router.h"
+#include "feature/relay/router.h"
 
 /* Return true iff we believe ourselves to be a v3 authoritative directory
  * server. */
diff --git a/src/feature/dirauth/shared_random.c b/src/feature/dirauth/shared_random.c
index d1226901296211b5ef3ec35f730329858a1eef33..8ae267977929fdd10a5b7853e8786952f5f91cf7 100644
--- a/src/feature/dirauth/shared_random.c
+++ b/src/feature/dirauth/shared_random.c
@@ -87,25 +87,25 @@
 
 #define SHARED_RANDOM_PRIVATE
 
-#include "or/or.h"
-#include "or/dirauth/shared_random.h"
-#include "or/config.h"
-#include "or/confparse.h"
+#include "core/or/or.h"
+#include "feature/dirauth/shared_random.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/networkstatus.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/shared_random_client.h"
-#include "or/dirauth/shared_random_state.h"
-#include "or/voting_schedule.h"
-
-#include "or/dirauth/dirvote.h"
-#include "or/dirauth/mode.h"
-
-#include "or/authority_cert_st.h"
-#include "or/networkstatus_st.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/hs_common/shared_random_client.h"
+#include "feature/dirauth/shared_random_state.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "feature/dirauth/dirvote.h"
+#include "feature/dirauth/mode.h"
+
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/nodelist/networkstatus_st.h"
 
 /* String prefix of shared random values in votes/consensuses. */
 static const char previous_srv_str[] = "shared-rand-previous-value";
diff --git a/src/feature/dirauth/shared_random.h b/src/feature/dirauth/shared_random.h
index 93bab99f714f6d886786b98708eb52207c1be90c..68ece9aec0f866ad512d5f18932e8c42bdb758f6 100644
--- a/src/feature/dirauth/shared_random.h
+++ b/src/feature/dirauth/shared_random.h
@@ -10,7 +10,7 @@
  * with "sr_" which stands for shared random.
  */
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 /* Protocol version */
 #define SR_PROTO_VERSION  1
diff --git a/src/feature/dirauth/shared_random_state.c b/src/feature/dirauth/shared_random_state.c
index 87ddcc073649b2608a151ffac3935a2d136ac477..55936a73673391acc60c53831be02d41ceb8c5f5 100644
--- a/src/feature/dirauth/shared_random_state.c
+++ b/src/feature/dirauth/shared_random_state.c
@@ -10,20 +10,20 @@
 
 #define SHARED_RANDOM_STATE_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/confparse.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/dirauth/dirvote.h"
-#include "or/networkstatus.h"
-#include "or/router.h"
-#include "or/dirauth/shared_random.h"
-#include "or/shared_random_client.h"
-#include "or/dirauth/shared_random_state.h"
-#include "or/voting_schedule.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/relay/router.h"
+#include "feature/dirauth/shared_random.h"
+#include "feature/hs_common/shared_random_client.h"
+#include "feature/dirauth/shared_random_state.h"
+#include "feature/dircommon/voting_schedule.h"
 #include "lib/encoding/confline.h"
 
-#include "or/or_state_st.h"
+#include "app/config/or_state_st.h"
 
 /* Default filename of the shared random state on disk. */
 static const char default_fname[] = "sr-state";
diff --git a/src/feature/dirauth/shared_random_state.h b/src/feature/dirauth/shared_random_state.h
index f99874872b466ca0c76fae448729a20d454bcad3..83edfaf1030443945d2529e723cdda315d6112a3 100644
--- a/src/feature/dirauth/shared_random_state.h
+++ b/src/feature/dirauth/shared_random_state.h
@@ -4,7 +4,7 @@
 #ifndef TOR_SHARED_RANDOM_STATE_H
 #define TOR_SHARED_RANDOM_STATE_H
 
-#include "or/dirauth/shared_random.h"
+#include "feature/dirauth/shared_random.h"
 
 /* Action that can be performed on the state for any objects. */
 typedef enum {
diff --git a/src/feature/dircache/conscache.c b/src/feature/dircache/conscache.c
index bc5928ff239a69cba2876aceb306e578c3c31ade..e9bf58a1803b71bb0448fb5ca5473a97f35e6460 100644
--- a/src/feature/dircache/conscache.c
+++ b/src/feature/dircache/conscache.c
@@ -1,10 +1,10 @@
 /* Copyright (c) 2017-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 
-#include "or/config.h"
-#include "or/conscache.h"
+#include "app/config/config.h"
+#include "feature/dircache/conscache.h"
 #include "lib/crypt_ops/crypto_util.h"
 #include "lib/fs/storagedir.h"
 #include "lib/encoding/confline.h"
diff --git a/src/feature/dircache/consdiffmgr.c b/src/feature/dircache/consdiffmgr.c
index 6d5183f9349e93029c01430adc08a6cc33b91152..304b64f3b602bd14606c98eae5d8d9c1287ddf5f 100644
--- a/src/feature/dircache/consdiffmgr.c
+++ b/src/feature/dircache/consdiffmgr.c
@@ -13,21 +13,21 @@
 
 #define CONSDIFFMGR_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/conscache.h"
-#include "or/consdiff.h"
-#include "or/consdiffmgr.h"
-#include "or/cpuworker.h"
-#include "or/networkstatus.h"
-#include "or/routerparse.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/dircache/conscache.h"
+#include "feature/dircommon/consdiff.h"
+#include "feature/dircache/consdiffmgr.h"
+#include "core/mainloop/cpuworker.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/routerparse.h"
 #include "lib/evloop/compat_libevent.h"
 #include "lib/evloop/workqueue.h"
 #include "lib/compress/compress.h"
 #include "lib/encoding/confline.h"
 
-#include "or/networkstatus_st.h"
-#include "or/networkstatus_voter_info_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_voter_info_st.h"
 
 /**
  * Labels to apply to items in the conscache object.
diff --git a/src/feature/dircache/directory.c b/src/feature/dircache/directory.c
index 8f2bd8d3a7fea70e7ff3ec667cfb21d7389afaf6..a72317618576ec18f2f2b9c39193336cbfffe3a1 100644
--- a/src/feature/dircache/directory.c
+++ b/src/feature/dircache/directory.c
@@ -5,44 +5,44 @@
 
 #define DIRECTORY_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/err/backtrace.h"
-#include "or/bridges.h"
+#include "feature/client/bridges.h"
 #include "lib/container/buffers.h"
-#include "or/circuitbuild.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/conscache.h"
-#include "or/consdiff.h"
-#include "or/consdiffmgr.h"
-#include "or/control.h"
+#include "core/or/circuitbuild.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/dircache/conscache.h"
+#include "feature/dircommon/consdiff.h"
+#include "feature/dircache/consdiffmgr.h"
+#include "feature/control/control.h"
 #include "lib/compress/compress.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/entrynodes.h"
-#include "or/fp_pair.h"
-#include "or/geoip.h"
-#include "or/hs_cache.h"
-#include "or/hs_common.h"
-#include "or/hs_control.h"
-#include "or/hs_client.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/relay.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/client/entrynodes.h"
+#include "feature/dircommon/fp_pair.h"
+#include "feature/stats/geoip.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_control.h"
+#include "feature/hs/hs_client.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
 #include "lib/encoding/confline.h"
 #include "lib/crypt_ops/crypto_format.h"
 
@@ -52,19 +52,19 @@
 #endif
 #endif
 
-#include "or/dirauth/dirvote.h"
-#include "or/dirauth/mode.h"
-#include "or/dirauth/shared_random.h"
-
-#include "or/authority_cert_st.h"
-#include "or/cached_dir_st.h"
-#include "or/dir_connection_st.h"
-#include "or/dir_server_st.h"
-#include "or/entry_connection_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/rend_service_descriptor_st.h"
-#include "or/routerinfo_st.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/dirauth/mode.h"
+#include "feature/dirauth/shared_random.h"
+
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/dircache/cached_dir_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "core/or/entry_connection_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 
 /**
  * \file directory.c
diff --git a/src/feature/dircache/directory.h b/src/feature/dircache/directory.h
index 992ff618fbfa72e5629e534f6a5743d05b8e11f7..54ea0c584d7fd6ed354903ba9b08094a1c2523d5 100644
--- a/src/feature/dircache/directory.h
+++ b/src/feature/dircache/directory.h
@@ -12,7 +12,7 @@
 #ifndef TOR_DIRECTORY_H
 #define TOR_DIRECTORY_H
 
-#include "or/hs_ident.h"
+#include "feature/hs/hs_ident.h"
 enum compress_method_t;
 
 dir_connection_t *TO_DIR_CONN(connection_t *c);
diff --git a/src/feature/dircache/dirserv.c b/src/feature/dircache/dirserv.c
index 2980d63f0a4666fe1ad7d81f0bb4e0a1a69ddf89..0e1d0645e3f08949790f3a8a09f909c9382f9e49 100644
--- a/src/feature/dircache/dirserv.c
+++ b/src/feature/dircache/dirserv.c
@@ -4,47 +4,47 @@
 /* See LICENSE for licensing information */
 
 #define DIRSERV_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/command.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/conscache.h"
-#include "or/consdiffmgr.h"
-#include "or/control.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/hibernate.h"
-#include "or/keypin.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/protover.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
-#include "or/torcert.h"
-#include "or/voting_schedule.h"
-
-#include "or/dirauth/dirvote.h"
-
-#include "or/cached_dir_st.h"
-#include "or/dir_connection_st.h"
-#include "or/extrainfo_st.h"
-#include "or/microdesc_st.h"
-#include "or/node_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
-#include "or/tor_version_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/command.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "feature/dircache/conscache.h"
+#include "feature/dircache/consdiffmgr.h"
+#include "feature/control/control.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/dirauth/keypin.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/proto/protover.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/nodelist/torcert.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "feature/dirauth/dirvote.h"
+
+#include "feature/dircache/cached_dir_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/nodelist/extrainfo_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
+#include "core/or/tor_version_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 
 #include "lib/compress/compress.h"
 #include "lib/container/order.h"
diff --git a/src/feature/dirclient/dir_server_st.h b/src/feature/dirclient/dir_server_st.h
index fe1f5c3d5f4e8bc7c232309691002bacc1d69ded..0a6d8155ae37d81bbc0cc49c2079172f3a57e2ab 100644
--- a/src/feature/dirclient/dir_server_st.h
+++ b/src/feature/dirclient/dir_server_st.h
@@ -8,8 +8,8 @@
 #define DIR_SERVER_ST_H
 
 #include "lib/cc/torint.h"
-#include "or/or.h"
-#include "or/routerstatus_st.h"
+#include "core/or/or.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /** Represents information about a single trusted or fallback directory
  * server. */
diff --git a/src/feature/dircommon/consdiff.c b/src/feature/dircommon/consdiff.c
index 88edda716e947d375039e8944417b214668a496e..1823dc07fbb9d1771950d208cbb609fce155b80d 100644
--- a/src/feature/dircommon/consdiff.c
+++ b/src/feature/dircommon/consdiff.c
@@ -38,10 +38,10 @@
 
 #define CONSDIFF_PRIVATE
 
-#include "or/or.h"
-#include "or/consdiff.h"
+#include "core/or/or.h"
+#include "feature/dircommon/consdiff.h"
 #include "lib/memarea/memarea.h"
-#include "or/routerparse.h"
+#include "feature/nodelist/routerparse.h"
 
 static const char* ns_diff_version = "network-status-diff-version 1";
 static const char* hash_token = "hash";
diff --git a/src/feature/dircommon/consdiff.h b/src/feature/dircommon/consdiff.h
index 1cae59a1a58752b8983c7fa2b18be31c0ceed759..a5e4ba5cbfd49be3c90e27e9077e7e53f193cb8a 100644
--- a/src/feature/dircommon/consdiff.h
+++ b/src/feature/dircommon/consdiff.h
@@ -5,7 +5,7 @@
 #ifndef TOR_CONSDIFF_H
 #define TOR_CONSDIFF_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 char *consensus_diff_generate(const char *cons1,
                               const char *cons2);
diff --git a/src/feature/dircommon/dir_connection_st.h b/src/feature/dircommon/dir_connection_st.h
index 1282f82d64aff24fe6bba460c1425a4ce89a2848..768f6ba81e7512d863f45276e269ece7f972971b 100644
--- a/src/feature/dircommon/dir_connection_st.h
+++ b/src/feature/dircommon/dir_connection_st.h
@@ -7,7 +7,7 @@
 #ifndef DIR_CONNECTION_ST_H
 #define DIR_CONNECTION_ST_H
 
-#include "or/connection_st.h"
+#include "core/or/connection_st.h"
 
 struct tor_compress_state_t;
 
diff --git a/src/feature/dircommon/fp_pair.c b/src/feature/dircommon/fp_pair.c
index 1d7b751c23703883908a811d5f42ff59065ab31a..054414528460d673556729fb13a6e43598a8949e 100644
--- a/src/feature/dircommon/fp_pair.c
+++ b/src/feature/dircommon/fp_pair.c
@@ -17,8 +17,8 @@
  * certificate for any (ID key, signing key) pair.
  **/
 
-#include "or/or.h"
-#include "or/fp_pair.h"
+#include "core/or/or.h"
+#include "feature/dircommon/fp_pair.h"
 
 /* Define fp_pair_map_t structures */
 
diff --git a/src/feature/dircommon/voting_schedule.c b/src/feature/dircommon/voting_schedule.c
index 6edde3f229e736a0752cdb653e0660a9dfbeabb6..84c016c2b988cf71575d28afb6f2da0547a31b7b 100644
--- a/src/feature/dircommon/voting_schedule.c
+++ b/src/feature/dircommon/voting_schedule.c
@@ -9,13 +9,13 @@
  **/
 
 #define VOTING_SCHEDULE_PRIVATE
-#include "or/voting_schedule.h"
+#include "feature/dircommon/voting_schedule.h"
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/networkstatus.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/nodelist/networkstatus.h"
 
-#include "or/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_st.h"
 
 /* =====
  * Vote scheduling
diff --git a/src/feature/dircommon/voting_schedule.h b/src/feature/dircommon/voting_schedule.h
index 0f27d36d5289f4bb331c1452f01a2673a1931997..0e0b0cc988b68fd613f352b49f199f0814f5fcc3 100644
--- a/src/feature/dircommon/voting_schedule.h
+++ b/src/feature/dircommon/voting_schedule.h
@@ -9,7 +9,7 @@
 #ifndef TOR_VOTING_SCHEDULE_H
 #define TOR_VOTING_SCHEDULE_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 /** Scheduling information for a voting interval. */
 typedef struct {
diff --git a/src/feature/hibernate/hibernate.c b/src/feature/hibernate/hibernate.c
index 55de64c13e2c2982a097b15717abaf852332b71e..d37ba5b8b16824210647924db929fa44432a43b5 100644
--- a/src/feature/hibernate/hibernate.c
+++ b/src/feature/hibernate/hibernate.c
@@ -28,23 +28,23 @@ hibernating, phase 2:
 */
 
 #define HIBERNATE_PRIVATE
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/hibernate.h"
-#include "or/main.h"
-#include "or/router.h"
-#include "or/statefile.h"
+#include "feature/hibernate/hibernate.h"
+#include "core/mainloop/main.h"
+#include "feature/relay/router.h"
+#include "app/config/statefile.h"
 #include "lib/evloop/compat_libevent.h"
 
-#include "or/or_connection_st.h"
-#include "or/or_state_st.h"
+#include "core/or/or_connection_st.h"
+#include "app/config/or_state_st.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
diff --git a/src/feature/hs/hs_cache.c b/src/feature/hs/hs_cache.c
index 3772e0c0ed3edb8e2361c13f766b4ea1d4715555..58bb10b194f53bb904821e3c003220c2c33e66c1 100644
--- a/src/feature/hs/hs_cache.c
+++ b/src/feature/hs/hs_cache.c
@@ -9,20 +9,20 @@
 /* For unit tests.*/
 #define HS_CACHE_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/hs_ident.h"
-#include "or/hs_common.h"
-#include "or/hs_client.h"
-#include "or/hs_descriptor.h"
-#include "or/networkstatus.h"
-#include "or/rendcache.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/rend/rendcache.h"
 
-#include "or/hs_cache.h"
+#include "feature/hs/hs_cache.h"
 
-#include "or/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_st.h"
 
 static int cached_client_descriptor_has_expired(time_t now,
            const hs_cache_client_descriptor_t *cached_desc);
diff --git a/src/feature/hs/hs_cache.h b/src/feature/hs/hs_cache.h
index 1e479700fa733055526a4378d9bab335972028d0..7cd4995d2c2790dd1b03a200052e705501dee256 100644
--- a/src/feature/hs/hs_cache.h
+++ b/src/feature/hs/hs_cache.h
@@ -11,10 +11,10 @@
 
 #include <stdint.h>
 
-#include "or/hs_common.h"
-#include "or/hs_descriptor.h"
-#include "or/rendcommon.h"
-#include "or/torcert.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/nodelist/torcert.h"
 
 struct ed25519_public_key_t;
 
diff --git a/src/feature/hs/hs_cell.c b/src/feature/hs/hs_cell.c
index f8b76c513335e9bf3b90d3939022d584a3699e20..c6ca6746bcac0d11b2cb794f2722f30f6c5ace77 100644
--- a/src/feature/hs/hs_cell.c
+++ b/src/feature/hs/hs_cell.c
@@ -6,16 +6,16 @@
  * \brief Hidden service API for cell creation and handling.
  **/
 
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/rendservice.h"
-#include "or/replaycache.h"
+#include "feature/rend/rendservice.h"
+#include "feature/hs_common/replaycache.h"
 
-#include "or/hs_cell.h"
-#include "or/hs_ntor.h"
+#include "feature/hs/hs_cell.h"
+#include "core/crypto/hs_ntor.h"
 
-#include "or/origin_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 /* Trunnel. */
 #include "trunnel/ed25519_cert.h"
diff --git a/src/feature/hs/hs_cell.h b/src/feature/hs/hs_cell.h
index 4a522810c65025bde40cea0b9a1734ed33ee9cd6..7b9d7e5792ac02aa1da6a631c429462e3df71180 100644
--- a/src/feature/hs/hs_cell.h
+++ b/src/feature/hs/hs_cell.h
@@ -9,8 +9,8 @@
 #ifndef TOR_HS_CELL_H
 #define TOR_HS_CELL_H
 
-#include "or/or.h"
-#include "or/hs_service.h"
+#include "core/or/or.h"
+#include "feature/hs/hs_service.h"
 
 /* An INTRODUCE1 cell requires at least this amount of bytes (see section
  * 3.2.2 of the specification). Below this value, the cell must be padded. */
diff --git a/src/feature/hs/hs_circuit.c b/src/feature/hs/hs_circuit.c
index 5a2c7e4e42c2691990610ab45731244d09b97211..cd312e98bec82a93dc654208722d1ad3d168a722 100644
--- a/src/feature/hs/hs_circuit.c
+++ b/src/feature/hs/hs_circuit.c
@@ -7,38 +7,38 @@
 
 #define HS_CIRCUIT_PRIVATE
 
-#include "or/or.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_dh.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/relay.h"
-#include "or/rendservice.h"
-#include "or/rephist.h"
-#include "or/router.h"
-
-#include "or/hs_cell.h"
-#include "or/hs_circuitmap.h"
-#include "or/hs_ident.h"
-#include "or/hs_ntor.h"
-#include "or/hs_service.h"
-#include "or/hs_circuit.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendservice.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+
+#include "feature/hs/hs_cell.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_ident.h"
+#include "core/crypto/hs_ntor.h"
+#include "feature/hs/hs_service.h"
+#include "feature/hs/hs_circuit.h"
 
 /* Trunnel. */
 #include "trunnel/ed25519_cert.h"
 #include "trunnel/hs/cell_common.h"
 #include "trunnel/hs/cell_establish_intro.h"
 
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/node_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/origin_circuit_st.h"
 
 /* A circuit is about to become an e2e rendezvous circuit. Check
  * <b>circ_purpose</b> and ensure that it's properly set. Return true iff
diff --git a/src/feature/hs/hs_circuit.h b/src/feature/hs/hs_circuit.h
index 425070f4caf5fe08d8437aecd2d8edac7d59d9d0..54f28a39abcb8c03b067a352392b500bfea2d1e5 100644
--- a/src/feature/hs/hs_circuit.h
+++ b/src/feature/hs/hs_circuit.h
@@ -9,10 +9,10 @@
 #ifndef TOR_HS_CIRCUIT_H
 #define TOR_HS_CIRCUIT_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 
-#include "or/hs_service.h"
+#include "feature/hs/hs_service.h"
 
 /* Cleanup function when the circuit is closed or/and freed. */
 void hs_circ_cleanup(circuit_t *circ);
diff --git a/src/feature/hs/hs_circuitmap.c b/src/feature/hs/hs_circuitmap.c
index c4bf9fab43fa06126a8dabda6006117d735673af..962a421a00f56e897b81a3cf9889ae70839d5a96 100644
--- a/src/feature/hs/hs_circuitmap.c
+++ b/src/feature/hs/hs_circuitmap.c
@@ -13,13 +13,13 @@
 
 #define HS_CIRCUITMAP_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/circuitlist.h"
-#include "or/hs_circuitmap.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/or/circuitlist.h"
+#include "feature/hs/hs_circuitmap.h"
 
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 /************************** HS circuitmap code *******************************/
 
diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c
index cc461e368deb61c0bac90e8029e32e4c2783622f..1f9218e15afed3944d537db8921ab1409ced1ade 100644
--- a/src/feature/hs/hs_client.c
+++ b/src/feature/hs/hs_client.c
@@ -8,39 +8,39 @@
 
 #define HS_CLIENT_PRIVATE
 
-#include "or/or.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
+#include "core/or/or.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/hs_cache.h"
-#include "or/hs_cell.h"
-#include "or/hs_circuit.h"
-#include "or/hs_circuitmap.h"
-#include "or/hs_client.h"
-#include "or/hs_control.h"
-#include "or/hs_descriptor.h"
-#include "or/hs_ident.h"
-#include "or/hs_ntor.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/reasons.h"
-#include "or/rendclient.h"
-#include "or/router.h"
-#include "or/routerset.h"
-
-#include "or/cpath_build_state_st.h"
-#include "or/dir_connection_st.h"
-#include "or/entry_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/origin_circuit_st.h"
+#include "feature/dircache/directory.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/hs/hs_cell.h"
+#include "feature/hs/hs_circuit.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_control.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/hs/hs_ident.h"
+#include "core/crypto/hs_ntor.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/reasons.h"
+#include "feature/rend/rendclient.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerset.h"
+
+#include "core/or/cpath_build_state_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/origin_circuit_st.h"
 
 /* Return a human-readable string for the client fetch status code. */
 static const char *
diff --git a/src/feature/hs/hs_client.h b/src/feature/hs/hs_client.h
index 8083910747287ae518447f99b5d227fa67440fa2..6ee9f40c0047aa22c262bc7358c4358a952213ff 100644
--- a/src/feature/hs/hs_client.h
+++ b/src/feature/hs/hs_client.h
@@ -10,8 +10,8 @@
 #define TOR_HS_CLIENT_H
 
 #include "lib/crypt_ops/crypto_ed25519.h"
-#include "or/hs_descriptor.h"
-#include "or/hs_ident.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/hs/hs_ident.h"
 
 /* Status code of a descriptor fetch request. */
 typedef enum {
diff --git a/src/feature/hs/hs_common.c b/src/feature/hs/hs_common.c
index d91f45a639581104b5061d86a21efacc358b9f2c..723cfa6ea8a32e43abd18ff4a7c5076e4f86789c 100644
--- a/src/feature/hs/hs_common.c
+++ b/src/feature/hs/hs_common.c
@@ -11,33 +11,33 @@
 
 #define HS_COMMON_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 
-#include "or/config.h"
-#include "or/circuitbuild.h"
+#include "app/config/config.h"
+#include "core/or/circuitbuild.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/hs_cache.h"
-#include "or/hs_common.h"
-#include "or/hs_client.h"
-#include "or/hs_ident.h"
-#include "or/hs_service.h"
-#include "or/hs_circuitmap.h"
-#include "or/policies.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/routerset.h"
-#include "or/router.h"
-#include "or/shared_random_client.h"
-#include "or/dirauth/shared_random_state.h"
-
-#include "or/edge_connection_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/hs/hs_service.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "core/or/policies.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/relay/router.h"
+#include "feature/hs_common/shared_random_client.h"
+#include "feature/dirauth/shared_random_state.h"
+
+#include "core/or/edge_connection_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /* Trunnel */
 #include "trunnel/ed25519_cert.h"
diff --git a/src/feature/hs/hs_common.h b/src/feature/hs/hs_common.h
index 24f5f3a20fee372e84c093817837e6fa7d05b2dc..888eb0a4ecadf83e9a17390c23632efb9396d0ac 100644
--- a/src/feature/hs/hs_common.h
+++ b/src/feature/hs/hs_common.h
@@ -9,7 +9,7 @@
 #ifndef TOR_HS_COMMON_H
 #define TOR_HS_COMMON_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/defs/x25519_sizes.h"
 
 struct curve25519_public_key_t;
diff --git a/src/feature/hs/hs_config.c b/src/feature/hs/hs_config.c
index cb55faa9d53fb50e3404c0e8573a6d064662d974..2c25a168a27853ac6b2e3de211046cab7d076945 100644
--- a/src/feature/hs/hs_config.c
+++ b/src/feature/hs/hs_config.c
@@ -25,12 +25,12 @@
 
 #define HS_CONFIG_PRIVATE
 
-#include "or/hs_common.h"
-#include "or/hs_config.h"
-#include "or/hs_service.h"
-#include "or/rendservice.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_config.h"
+#include "feature/hs/hs_service.h"
+#include "feature/rend/rendservice.h"
 #include "lib/encoding/confline.h"
-#include "or/or_options_st.h"
+#include "app/config/or_options_st.h"
 
 /* Using the given list of services, stage them into our global state. Every
  * service version are handled. This function can remove entries in the given
diff --git a/src/feature/hs/hs_config.h b/src/feature/hs/hs_config.h
index 461d58d384e7d3689cb205ab7a4f3385ea267973..96eb19ee70d3bd6d9c15d7ab66b9cffbdd6fb29f 100644
--- a/src/feature/hs/hs_config.h
+++ b/src/feature/hs/hs_config.h
@@ -9,7 +9,7 @@
 #ifndef TOR_HS_CONFIG_H
 #define TOR_HS_CONFIG_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 /* Max value for HiddenServiceMaxStreams */
 #define HS_CONFIG_MAX_STREAMS_PER_RDV_CIRCUIT 65535
diff --git a/src/feature/hs/hs_control.c b/src/feature/hs/hs_control.c
index be456e8da4f422d505d54380ac94df0f6f2a1fee..a21788ecd713d9a09c37225b460da37f6c17da74 100644
--- a/src/feature/hs/hs_control.c
+++ b/src/feature/hs/hs_control.c
@@ -6,18 +6,18 @@
  * \brief Contains control port event related code.
  **/
 
-#include "or/or.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/hs_common.h"
-#include "or/hs_control.h"
-#include "or/hs_descriptor.h"
-#include "or/hs_service.h"
-#include "or/nodelist.h"
-
-#include "or/node_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_control.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/hs/hs_service.h"
+#include "feature/nodelist/nodelist.h"
+
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /* Send on the control port the "HS_DESC REQUESTED [...]" event.
  *
diff --git a/src/feature/hs/hs_control.h b/src/feature/hs/hs_control.h
index 040ce4a793dc65fc51961b59094520bcc8d25765..63e3fe13d639194054a1b002716864be71ad232e 100644
--- a/src/feature/hs/hs_control.h
+++ b/src/feature/hs/hs_control.h
@@ -9,7 +9,7 @@
 #ifndef TOR_HS_CONTROL_H
 #define TOR_HS_CONTROL_H
 
-#include "or/hs_ident.h"
+#include "feature/hs/hs_ident.h"
 
 /* Event "HS_DESC REQUESTED [...]" */
 void hs_control_desc_event_requested(const ed25519_public_key_t *onion_pk,
diff --git a/src/feature/hs/hs_descriptor.c b/src/feature/hs/hs_descriptor.c
index 5fd8971dc0f29e3fbad124eccde4e18add119b36..3928000164194bebb3f6f7175721fc0d63999587 100644
--- a/src/feature/hs/hs_descriptor.c
+++ b/src/feature/hs/hs_descriptor.c
@@ -55,21 +55,21 @@
 /* For unit tests.*/
 #define HS_DESCRIPTOR_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "trunnel/ed25519_cert.h" /* Trunnel interface. */
-#include "or/hs_descriptor.h"
-#include "or/circuitbuild.h"
+#include "feature/hs/hs_descriptor.h"
+#include "core/or/circuitbuild.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/parsecommon.h"
-#include "or/rendcache.h"
-#include "or/hs_cache.h"
-#include "or/hs_config.h"
-#include "or/torcert.h" /* tor_cert_encode_ed22519() */
+#include "feature/nodelist/parsecommon.h"
+#include "feature/rend/rendcache.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/hs/hs_config.h"
+#include "feature/nodelist/torcert.h" /* tor_cert_encode_ed22519() */
 #include "lib/memarea/memarea.h"
 #include "lib/crypt_ops/crypto_format.h"
 
-#include "or/extend_info_st.h"
+#include "core/or/extend_info_st.h"
 
 /* Constant string value used for the descriptor format. */
 #define str_hs_desc "hs-descriptor"
diff --git a/src/feature/hs/hs_descriptor.h b/src/feature/hs/hs_descriptor.h
index 7a4010cd3b8b1111ac0659661d7768a95ba74b0d..bfdf7559c6ad131ef914b286629e7263d8aa09fb 100644
--- a/src/feature/hs/hs_descriptor.h
+++ b/src/feature/hs/hs_descriptor.h
@@ -11,9 +11,9 @@
 
 #include <stdint.h>
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "trunnel/ed25519_cert.h" /* needed for trunnel */
-#include "or/torcert.h"
+#include "feature/nodelist/torcert.h"
 
 /* Trunnel */
 struct link_specifier_t;
diff --git a/src/feature/hs/hs_ident.c b/src/feature/hs/hs_ident.c
index 20539ca87845ca31dafb14743b99d4569888cc6d..c6ef8c2ce35d84afc064273eaa46d62970804de1 100644
--- a/src/feature/hs/hs_ident.c
+++ b/src/feature/hs/hs_ident.c
@@ -8,7 +8,7 @@
  **/
 
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/hs_ident.h"
+#include "feature/hs/hs_ident.h"
 
 /* Return a newly allocated circuit identifier. The given public key is copied
  * identity_pk into the identifier. */
diff --git a/src/feature/hs/hs_ident.h b/src/feature/hs/hs_ident.h
index 8c53b9dbeb3f3d6c48a4894a0ca3a56f0fb1953e..92d15b052307ec6eccde049be8704339b95d8a95 100644
--- a/src/feature/hs/hs_ident.h
+++ b/src/feature/hs/hs_ident.h
@@ -23,7 +23,7 @@
 
 #include "lib/crypt_ops/crypto_ed25519.h"
 
-#include "or/hs_common.h"
+#include "feature/hs/hs_common.h"
 
 /* Length of the rendezvous cookie that is used to connect circuits at the
  * rendezvous point. */
diff --git a/src/feature/hs/hs_intropoint.c b/src/feature/hs/hs_intropoint.c
index 25940586791d2541c6c9dc97de9bbfea43a6113c..42092e22b1c3d3f1e0486f13c8953a2acb88036d 100644
--- a/src/feature/hs/hs_intropoint.c
+++ b/src/feature/hs/hs_intropoint.c
@@ -8,13 +8,13 @@
 
 #define HS_INTROPOINT_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/relay.h"
-#include "or/rendmid.h"
-#include "or/rephist.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendmid.h"
+#include "feature/stats/rephist.h"
 #include "lib/crypt_ops/crypto_format.h"
 
 /* Trunnel */
@@ -23,12 +23,12 @@
 #include "trunnel/hs/cell_establish_intro.h"
 #include "trunnel/hs/cell_introduce1.h"
 
-#include "or/hs_circuitmap.h"
-#include "or/hs_descriptor.h"
-#include "or/hs_intropoint.h"
-#include "or/hs_common.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/hs/hs_intropoint.h"
+#include "feature/hs/hs_common.h"
 
-#include "or/or_circuit_st.h"
+#include "core/or/or_circuit_st.h"
 
 /** Extract the authentication key from an ESTABLISH_INTRO or INTRODUCE1 using
  * the given <b>cell_type</b> from <b>cell</b> and place it in
diff --git a/src/feature/hs/hs_intropoint.h b/src/feature/hs/hs_intropoint.h
index 5f82920991d530ca274cced13a39e90e6876a1b5..562836fb07c41e9dc2b00f008975b92b8322c31a 100644
--- a/src/feature/hs/hs_intropoint.h
+++ b/src/feature/hs/hs_intropoint.h
@@ -10,7 +10,7 @@
 #define TOR_HS_INTRO_H
 
 #include "lib/crypt_ops/crypto_curve25519.h"
-#include "or/torcert.h"
+#include "feature/nodelist/torcert.h"
 
 /* Authentication key type in an ESTABLISH_INTRO cell. */
 typedef enum {
diff --git a/src/feature/hs/hs_service.c b/src/feature/hs/hs_service.c
index 6cb01b57c9bc8b59a37337be28deb254f4541fed..8b4de213874c3817f07b9d2d9470bb082724a47b 100644
--- a/src/feature/hs/hs_service.c
+++ b/src/feature/hs/hs_service.c
@@ -8,45 +8,45 @@
 
 #define HS_SERVICE_PRIVATE
 
-#include "or/or.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection.h"
+#include "core/or/or.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/relay.h"
-#include "or/rendservice.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/shared_random_client.h"
-#include "or/statefile.h"
-
-#include "or/hs_circuit.h"
-#include "or/hs_common.h"
-#include "or/hs_config.h"
-#include "or/hs_control.h"
-#include "or/hs_descriptor.h"
-#include "or/hs_ident.h"
-#include "or/hs_intropoint.h"
-#include "or/hs_service.h"
-#include "or/hs_stats.h"
-
-#include "or/dir_connection_st.h"
-#include "or/edge_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/or_state_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/dircache/directory.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendservice.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/hs_common/shared_random_client.h"
+#include "app/config/statefile.h"
+
+#include "feature/hs/hs_circuit.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_config.h"
+#include "feature/hs/hs_control.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/hs/hs_intropoint.h"
+#include "feature/hs/hs_service.h"
+#include "feature/hs/hs_stats.h"
+
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/edge_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "app/config/or_state_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #include "lib/encoding/confline.h"
 #include "lib/crypt_ops/crypto_format.h"
diff --git a/src/feature/hs/hs_service.h b/src/feature/hs/hs_service.h
index 4676042b5469d8bfe95e247999c7e2448b8a1b77..22bfcacc265aadb9a710025ea79b7cfcde530967 100644
--- a/src/feature/hs/hs_service.h
+++ b/src/feature/hs/hs_service.h
@@ -11,12 +11,12 @@
 
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
-#include "or/replaycache.h"
+#include "feature/hs_common/replaycache.h"
 
-#include "or/hs_common.h"
-#include "or/hs_descriptor.h"
-#include "or/hs_ident.h"
-#include "or/hs_intropoint.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/hs/hs_intropoint.h"
 
 /* Trunnel */
 #include "trunnel/hs/cell_establish_intro.h"
diff --git a/src/feature/hs/hs_stats.c b/src/feature/hs/hs_stats.c
index c8a99b19d441bebe46c3d43fd047a1802f4302f5..b109a37cc1a9b8b340532ae5f2939c33b38c41d9 100644
--- a/src/feature/hs/hs_stats.c
+++ b/src/feature/hs/hs_stats.c
@@ -6,9 +6,9 @@
  * \brief Keeps stats about the activity of our onion service(s).
  **/
 
-#include "or/or.h"
-#include "or/hs_stats.h"
-#include "or/hs_service.h"
+#include "core/or/or.h"
+#include "feature/hs/hs_stats.h"
+#include "feature/hs/hs_service.h"
 
 /** Number of v3 INTRODUCE2 cells received */
 static uint32_t n_introduce2_v3 = 0;
diff --git a/src/feature/hs_common/replaycache.c b/src/feature/hs_common/replaycache.c
index b5cc6a2823019269aaf8d3c97256904b4f5fc106..1d3f20e819f3261e4d6a9e7a669b1e32c7d53798 100644
--- a/src/feature/hs_common/replaycache.c
+++ b/src/feature/hs_common/replaycache.c
@@ -21,8 +21,8 @@
 
 #define REPLAYCACHE_PRIVATE
 
-#include "or/or.h"
-#include "or/replaycache.h"
+#include "core/or/or.h"
+#include "feature/hs_common/replaycache.h"
 
 /** Free the replaycache r and all of its entries.
  */
diff --git a/src/feature/hs_common/shared_random_client.c b/src/feature/hs_common/shared_random_client.c
index 42a5b42f60510f4da6f66bf76fce2d84d14a8df1..329f053d3bf11f47365cc987967b137feb3f3d2e 100644
--- a/src/feature/hs_common/shared_random_client.c
+++ b/src/feature/hs_common/shared_random_client.c
@@ -9,14 +9,14 @@
  **/
 
 #define SHARED_RANDOM_CLIENT_PRIVATE
-#include "or/shared_random_client.h"
+#include "feature/hs_common/shared_random_client.h"
 
-#include "or/config.h"
-#include "or/voting_schedule.h"
-#include "or/networkstatus.h"
+#include "app/config/config.h"
+#include "feature/dircommon/voting_schedule.h"
+#include "feature/nodelist/networkstatus.h"
 #include "lib/encoding/binascii.h"
 
-#include "or/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_st.h"
 
 /* Convert a given srv object to a string for the control port. This doesn't
  * fail and the srv object MUST be valid. */
diff --git a/src/feature/hs_common/shared_random_client.h b/src/feature/hs_common/shared_random_client.h
index 079829496c433d9ccf902cc9c77aca6ca58650a2..497a015c180e85b0cb4c25bc76eae9c241d0e008 100644
--- a/src/feature/hs_common/shared_random_client.h
+++ b/src/feature/hs_common/shared_random_client.h
@@ -10,7 +10,7 @@
 #define TOR_SHARED_RANDOM_CLIENT_H
 
 /* Dirauth module. */
-#include "or/dirauth/shared_random.h"
+#include "feature/dirauth/shared_random.h"
 
 /* Helper functions. */
 void sr_srv_encode(char *dst, size_t dst_len, const sr_srv_t *srv);
diff --git a/src/feature/nodelist/authority_cert_st.h b/src/feature/nodelist/authority_cert_st.h
index 19c3fda2deb5a4caabddba3d71fa68bdf97c9b53..c2846548c49c286926b143756aca2c38138eafe8 100644
--- a/src/feature/nodelist/authority_cert_st.h
+++ b/src/feature/nodelist/authority_cert_st.h
@@ -7,7 +7,7 @@
 #ifndef AUTHORITY_CERT_ST_H
 #define AUTHORITY_CERT_ST_H
 
-#include "or/signed_descriptor_st.h"
+#include "feature/nodelist/signed_descriptor_st.h"
 
 /** Certificate for v3 directory protocol: binds long-term authority identity
  * keys to medium-term authority signing keys. */
diff --git a/src/feature/nodelist/extrainfo_st.h b/src/feature/nodelist/extrainfo_st.h
index f91bba7b689cb4a33e3fbe4f329bb652ad451168..f5d977e7510d3d52c649a02a6e1e59f42ffcf3cb 100644
--- a/src/feature/nodelist/extrainfo_st.h
+++ b/src/feature/nodelist/extrainfo_st.h
@@ -7,7 +7,7 @@
 #ifndef EXTRAINFO_ST_H
 #define EXTRAINFO_ST_H
 
-#include "or/signed_descriptor_st.h"
+#include "feature/nodelist/signed_descriptor_st.h"
 
 /** Information needed to keep and cache a signed extra-info document. */
 struct extrainfo_t {
diff --git a/src/feature/nodelist/microdesc.c b/src/feature/nodelist/microdesc.c
index 95c5e8b6f71c082922f96214f561b6336fda2546..4d6285d6cfa3906f7367124f8b3beda900ca17f9 100644
--- a/src/feature/nodelist/microdesc.c
+++ b/src/feature/nodelist/microdesc.c
@@ -8,27 +8,27 @@
  *  less-frequently-changing router information.
  */
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 #include "lib/fdio/fdio.h"
 
-#include "or/circuitbuild.h"
-#include "or/config.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/entrynodes.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/circuitbuild.h"
+#include "app/config/config.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/client/entrynodes.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
diff --git a/src/feature/nodelist/networkstatus.c b/src/feature/nodelist/networkstatus.c
index f91e46cdd7cdeff0ba60f0418b0e5ecfa956c8d0..366410d68eeee7bd35e275d5565cdbf61f2bc184 100644
--- a/src/feature/nodelist/networkstatus.c
+++ b/src/feature/nodelist/networkstatus.c
@@ -37,56 +37,56 @@
  */
 
 #define NETWORKSTATUS_PRIVATE
-#include "or/or.h"
-#include "or/bridges.h"
-#include "or/channel.h"
-#include "or/circuitmux.h"
-#include "or/circuitmux_ewma.h"
-#include "or/circuitstats.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/consdiffmgr.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
+#include "core/or/channel.h"
+#include "core/or/circuitmux.h"
+#include "core/or/circuitmux_ewma.h"
+#include "core/or/circuitstats.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "feature/dircache/consdiffmgr.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/dos.h"
-#include "or/entrynodes.h"
-#include "or/hibernate.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/protover.h"
-#include "or/relay.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/scheduler.h"
-#include "or/transports.h"
-#include "or/torcert.h"
-#include "or/channelpadding.h"
-#include "or/voting_schedule.h"
-
-#include "or/dirauth/dirvote.h"
-#include "or/dirauth/mode.h"
-#include "or/dirauth/shared_random.h"
-
-#include "or/authority_cert_st.h"
-#include "or/dir_connection_st.h"
-#include "or/dir_server_st.h"
-#include "or/document_signature_st.h"
-#include "or/networkstatus_st.h"
-#include "or/networkstatus_voter_info_st.h"
-#include "or/ns_detached_signatures_st.h"
-#include "or/node_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
-#include "or/vote_microdesc_hash_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "core/or/dos.h"
+#include "feature/client/entrynodes.h"
+#include "feature/hibernate/hibernate.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/proto/protover.h"
+#include "core/or/relay.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "core/or/scheduler.h"
+#include "feature/client/transports.h"
+#include "feature/nodelist/torcert.h"
+#include "core/or/channelpadding.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "feature/dirauth/dirvote.h"
+#include "feature/dirauth/mode.h"
+#include "feature/dirauth/shared_random.h"
+
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "feature/nodelist/document_signature_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_voter_info_st.h"
+#include "feature/dirauth/ns_detached_signatures_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
+#include "feature/dirauth/vote_microdesc_hash_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
diff --git a/src/feature/nodelist/networkstatus_st.h b/src/feature/nodelist/networkstatus_st.h
index 4a193ad1491c7749ce45c6ca24cb44597785540b..46b0f53c0b9fff39606601624da6afcc21051079 100644
--- a/src/feature/nodelist/networkstatus_st.h
+++ b/src/feature/nodelist/networkstatus_st.h
@@ -7,7 +7,7 @@
 #ifndef NETWORKSTATUS_ST_H
 #define NETWORKSTATUS_ST_H
 
-#include "or/networkstatus_sr_info_st.h"
+#include "feature/nodelist/networkstatus_sr_info_st.h"
 
 /** Enumerates the possible seriousness values of a networkstatus document. */
 typedef enum networkstatus_type_t {
diff --git a/src/feature/nodelist/node_st.h b/src/feature/nodelist/node_st.h
index d56ce278841845c7547e762bfbd3eb7d712f702f..8d182050ac806ba346d26483e1a8f3e0fd7bb5df 100644
--- a/src/feature/nodelist/node_st.h
+++ b/src/feature/nodelist/node_st.h
@@ -7,7 +7,7 @@
 #ifndef NODE_ST_H
 #define NODE_ST_H
 
-#include "or/hsdir_index_st.h"
+#include "feature/hs/hsdir_index_st.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 
 /** A node_t represents a Tor router.
diff --git a/src/feature/nodelist/nodelist.c b/src/feature/nodelist/nodelist.c
index 51fd0015df7fd9ae5954e9ad2db5e331bb2c5623..e434dd2d18785a96fc1b257e6759dd52cfac847c 100644
--- a/src/feature/nodelist/nodelist.c
+++ b/src/feature/nodelist/nodelist.c
@@ -40,41 +40,41 @@
 
 #define NODELIST_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/net/address.h"
-#include "or/address_set.h"
-#include "or/bridges.h"
-#include "or/config.h"
-#include "or/control.h"
-#include "or/dirserv.h"
-#include "or/entrynodes.h"
-#include "or/geoip.h"
-#include "or/hs_common.h"
-#include "or/hs_client.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/protover.h"
-#include "or/rendservice.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
-#include "or/torcert.h"
+#include "core/or/address_set.h"
+#include "feature/client/bridges.h"
+#include "app/config/config.h"
+#include "feature/control/control.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/client/entrynodes.h"
+#include "feature/stats/geoip.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_client.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/proto/protover.h"
+#include "feature/rend/rendservice.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/nodelist/torcert.h"
 
 #include <string.h>
 
-#include "or/dirauth/mode.h"
+#include "feature/dirauth/mode.h"
 
-#include "or/dir_server_st.h"
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 static void nodelist_drop_node(node_t *node, int remove_from_ht);
 #define node_free(val) \
diff --git a/src/feature/nodelist/parsecommon.c b/src/feature/nodelist/parsecommon.c
index 4340f2822524881086077562e7116e318fad407d..4f1c3fd421d67fb6c72d270edccbd3b7f0d75d46 100644
--- a/src/feature/nodelist/parsecommon.c
+++ b/src/feature/nodelist/parsecommon.c
@@ -6,7 +6,7 @@
  * \brief Common code to parse and validate various type of descriptors.
  **/
 
-#include "or/parsecommon.h"
+#include "feature/nodelist/parsecommon.h"
 #include "lib/log/torlog.h"
 #include "lib/log/util_bug.h"
 #include "lib/encoding/binascii.h"
diff --git a/src/feature/nodelist/routerinfo_st.h b/src/feature/nodelist/routerinfo_st.h
index 89a7702b30eda4444bb5b5cb8992b7501610678c..ca8fd40e3bd2dbf5f25ace7dad1f10adf7e18fbc 100644
--- a/src/feature/nodelist/routerinfo_st.h
+++ b/src/feature/nodelist/routerinfo_st.h
@@ -7,7 +7,7 @@
 #ifndef ROUTERINFO_ST_H
 #define ROUTERINFO_ST_H
 
-#include "or/signed_descriptor_st.h"
+#include "feature/nodelist/signed_descriptor_st.h"
 
 struct curve25519_public_key_t;
 
diff --git a/src/feature/nodelist/routerlist.c b/src/feature/nodelist/routerlist.c
index 76a236ff204a6addc5f816264b03c911ab2903de..0ff38f56e64d41154e637acec508fa72e54e419f 100644
--- a/src/feature/nodelist/routerlist.c
+++ b/src/feature/nodelist/routerlist.c
@@ -91,53 +91,53 @@
  **/
 
 #define ROUTERLIST_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/err/backtrace.h"
-#include "or/bridges.h"
+#include "feature/client/bridges.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "lib/crypt_ops/crypto_format.h"
-#include "or/circuitstats.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/control.h"
+#include "core/or/circuitstats.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/entrynodes.h"
-#include "or/fp_pair.h"
-#include "or/geoip.h"
-#include "or/hibernate.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/reasons.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/client/entrynodes.h"
+#include "feature/dircommon/fp_pair.h"
+#include "feature/stats/geoip.h"
+#include "feature/hibernate/hibernate.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/or/reasons.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
 #include "lib/sandbox/sandbox.h"
-#include "or/torcert.h"
+#include "feature/nodelist/torcert.h"
 #include "lib/math/fp.h"
 
-#include "or/dirauth/dirvote.h"
-#include "or/dirauth/mode.h"
-
-#include "or/authority_cert_st.h"
-#include "or/dir_connection_st.h"
-#include "or/dir_server_st.h"
-#include "or/document_signature_st.h"
-#include "or/extrainfo_st.h"
-#include "or/networkstatus_st.h"
-#include "or/networkstatus_voter_info_st.h"
-#include "or/node_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/dirauth/mode.h"
+
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "feature/nodelist/document_signature_st.h"
+#include "feature/nodelist/extrainfo_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_voter_info_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 
 #include "lib/crypt_ops/digestset.h"
 
diff --git a/src/feature/nodelist/routerlist_st.h b/src/feature/nodelist/routerlist_st.h
index 0b94a4dfcdccc9f3ad3e1609394074276ac255e4..26cc66138c0954a15c6ce9f0cb19f54bf05f90ab 100644
--- a/src/feature/nodelist/routerlist_st.h
+++ b/src/feature/nodelist/routerlist_st.h
@@ -7,7 +7,7 @@
 #ifndef ROUTERLIST_ST_H
 #define ROUTERLIST_ST_H
 
-#include "or/desc_store_st.h"
+#include "feature/nodelist/desc_store_st.h"
 
 /** Contents of a directory of onion routers. */
 struct routerlist_t {
diff --git a/src/feature/nodelist/routerparse.c b/src/feature/nodelist/routerparse.c
index 273666046b832e618cc30f6c92252ef370723911..e1dfe972d3981827625f4bc83777d66473202cfb 100644
--- a/src/feature/nodelist/routerparse.c
+++ b/src/feature/nodelist/routerparse.c
@@ -55,50 +55,50 @@
 
 #define ROUTERPARSE_PRIVATE
 
-#include "or/or.h"
-#include "or/circuitstats.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "core/or/circuitstats.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/dirauth/shared_random.h"
-#include "or/dirserv.h"
-#include "or/entrynodes.h"
+#include "feature/dirauth/shared_random.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/client/entrynodes.h"
 #include "lib/memarea/memarea.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/parsecommon.h"
-#include "or/policies.h"
-#include "or/protover.h"
-#include "or/rendcommon.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/parsecommon.h"
+#include "core/or/policies.h"
+#include "core/proto/protover.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
 #include "lib/sandbox/sandbox.h"
-#include "or/shared_random_client.h"
-#include "or/torcert.h"
-#include "or/voting_schedule.h"
-
-#include "or/dirauth/dirvote.h"
-
-#include "or/addr_policy_st.h"
-#include "or/authority_cert_st.h"
-#include "or/document_signature_st.h"
-#include "or/extend_info_st.h"
-#include "or/extrainfo_st.h"
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/networkstatus_voter_info_st.h"
-#include "or/ns_detached_signatures_st.h"
-#include "or/rend_authorized_client_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/rend_service_descriptor_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
-#include "or/tor_version_st.h"
-#include "or/vote_microdesc_hash_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "feature/hs_common/shared_random_client.h"
+#include "feature/nodelist/torcert.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "feature/dirauth/dirvote.h"
+
+#include "core/or/addr_policy_st.h"
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/nodelist/document_signature_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/extrainfo_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_voter_info_st.h"
+#include "feature/dirauth/ns_detached_signatures_st.h"
+#include "feature/rend/rend_authorized_client_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
+#include "core/or/tor_version_st.h"
+#include "feature/dirauth/vote_microdesc_hash_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 
 #include "lib/container/bloomfilt.h"
 
diff --git a/src/feature/nodelist/routerset.c b/src/feature/nodelist/routerset.c
index 285ef9d821600f0f86795c6e1e657fe6ddcf6bfd..cd42697748a77955bfdabec5567aaafed4edb899 100644
--- a/src/feature/nodelist/routerset.c
+++ b/src/feature/nodelist/routerset.c
@@ -27,20 +27,20 @@ n * Copyright (c) 2001-2004, Roger Dingledine.
 
 #define ROUTERSET_PRIVATE
 
-#include "or/or.h"
-#include "or/bridges.h"
-#include "or/geoip.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/router.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
-
-#include "or/addr_policy_st.h"
-#include "or/extend_info_st.h"
-#include "or/node_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
+#include "feature/stats/geoip.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
+
+#include "core/or/addr_policy_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /** Return a new empty routerset. */
 routerset_t *
diff --git a/src/feature/nodelist/routerstatus_st.h b/src/feature/nodelist/routerstatus_st.h
index 3de4a40ae4bf76ff62b8451f18dd4c56a749a6df..714aa27435b1cd6138f058d52a92a0b52739e851 100644
--- a/src/feature/nodelist/routerstatus_st.h
+++ b/src/feature/nodelist/routerstatus_st.h
@@ -7,7 +7,7 @@
 #ifndef ROUTERSTATUS_ST_H
 #define ROUTERSTATUS_ST_H
 
-#include "or/download_status_st.h"
+#include "feature/dirclient/download_status_st.h"
 
 /** Contents of a single router entry in a network status object.
  */
diff --git a/src/feature/nodelist/signed_descriptor_st.h b/src/feature/nodelist/signed_descriptor_st.h
index 90cd4a2703e6753e0d7f8bb9fb7eab3e02a36caa..bffad62895772a4817312ae9f28f014621ae4e9a 100644
--- a/src/feature/nodelist/signed_descriptor_st.h
+++ b/src/feature/nodelist/signed_descriptor_st.h
@@ -7,7 +7,7 @@
 #ifndef SIGNED_DESCRIPTOR_ST_H
 #define SIGNED_DESCRIPTOR_ST_H
 
-#include "or/download_status_st.h"
+#include "feature/dirclient/download_status_st.h"
 
 /** Information need to cache an onion router's descriptor. */
 struct signed_descriptor_t {
diff --git a/src/feature/nodelist/torcert.c b/src/feature/nodelist/torcert.c
index 39c6605c6521d125becdecbb682ed1866d1e8103..172d4f9de381885536fb435903c21af5f3a75d98 100644
--- a/src/feature/nodelist/torcert.c
+++ b/src/feature/nodelist/torcert.c
@@ -25,16 +25,16 @@
  * that one is authority_cert_t, and it's mostly handled in routerlist.c.
  */
 
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/torcert.h"
+#include "feature/nodelist/torcert.h"
 #include "trunnel/ed25519_cert.h"
 #include "lib/log/torlog.h"
 #include "trunnel/link_handshake.h"
 #include "lib/tls/tortls.h"
 
-#include "or/or_handshake_certs_st.h"
+#include "core/or/or_handshake_certs_st.h"
 
 /** Helper for tor_cert_create(): signs any 32 bytes, not just an ed25519
  * key.
diff --git a/src/feature/nodelist/vote_routerstatus_st.h b/src/feature/nodelist/vote_routerstatus_st.h
index 1b85737df8abe6b50bda0b2b51a2ca68331f4003..ad0d35b4e6e9334b221c8d9b5b08774b5a889e46 100644
--- a/src/feature/nodelist/vote_routerstatus_st.h
+++ b/src/feature/nodelist/vote_routerstatus_st.h
@@ -7,7 +7,7 @@
 #ifndef VOTE_ROUTERSTATUS_ST_H
 #define VOTE_ROUTERSTATUS_ST_H
 
-#include "or/routerstatus_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 #include "lib/defs/x25519_sizes.h"
 
 /** The claim about a single router, made in a vote. */
diff --git a/src/feature/relay/dns.c b/src/feature/relay/dns.c
index 4ac58552f4242870f5e1909dd80273941068ceac..f4e39dfd3def1c76389d3f61640b6f9c18c27a92 100644
--- a/src/feature/relay/dns.c
+++ b/src/feature/relay/dns.c
@@ -49,25 +49,25 @@
 
 #define DNS_PRIVATE
 
-#include "or/or.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/dns.h"
-#include "or/main.h"
-#include "or/policies.h"
-#include "or/relay.h"
-#include "or/router.h"
+#include "feature/relay/dns.h"
+#include "core/mainloop/main.h"
+#include "core/or/policies.h"
+#include "core/or/relay.h"
+#include "feature/relay/router.h"
 #include "ht.h"
 #include "lib/sandbox/sandbox.h"
 #include "lib/evloop/compat_libevent.h"
 
-#include "or/edge_connection_st.h"
-#include "or/or_circuit_st.h"
+#include "core/or/edge_connection_st.h"
+#include "core/or/or_circuit_st.h"
 
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
diff --git a/src/feature/relay/dns.h b/src/feature/relay/dns.h
index 12853205ff1713603c8f9227992c096e89e7076e..69c1764b73947fc3bbfd438a0106ff48602ea6cf 100644
--- a/src/feature/relay/dns.h
+++ b/src/feature/relay/dns.h
@@ -41,7 +41,7 @@ void dns_reset_correctness_checks(void);
 void dump_dns_mem_usage(int severity);
 
 #ifdef DNS_PRIVATE
-#include "or/dns_structs.h"
+#include "feature/relay/dns_structs.h"
 
 MOCK_DECL(STATIC int,dns_resolve_impl,(edge_connection_t *exitconn,
 int is_resolve,or_circuit_t *oncirc, char **hostname_out,
diff --git a/src/feature/relay/ext_orport.c b/src/feature/relay/ext_orport.c
index 7342a66e06191a1066f8dc3a14d7d0455407aed3..7de57ac65d1e65d89d33a919757659bf727be3e2 100644
--- a/src/feature/relay/ext_orport.c
+++ b/src/feature/relay/ext_orport.c
@@ -17,18 +17,18 @@
  */
 
 #define EXT_ORPORT_PRIVATE
-#include "or/or.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/control.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/ext_orport.h"
-#include "or/main.h"
-#include "or/proto_ext_or.h"
+#include "feature/relay/ext_orport.h"
+#include "core/mainloop/main.h"
+#include "core/proto/proto_ext_or.h"
 
-#include "or/or_connection_st.h"
+#include "core/or/or_connection_st.h"
 
 /** Allocate and return a structure capable of holding an Extended
  *  ORPort message of body length <b>len</b>. */
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index 44af1e31088d96f3bac46878ca3a63c39934afdc..c52ac1f9c342c317d7592e47358274071b57f984 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -6,50 +6,50 @@
 
 #define ROUTER_PRIVATE
 
-#include "or/or.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/dns.h"
-#include "or/geoip.h"
-#include "or/hibernate.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/protover.h"
-#include "or/relay.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/statefile.h"
-#include "or/torcert.h"
-#include "or/transports.h"
-#include "or/routerset.h"
-
-#include "or/dirauth/mode.h"
-
-#include "or/authority_cert_st.h"
-#include "or/crypt_path_st.h"
-#include "or/dir_connection_st.h"
-#include "or/dir_server_st.h"
-#include "or/extend_info_st.h"
-#include "or/extrainfo_st.h"
-#include "or/node_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/or_state_st.h"
-#include "or/port_cfg_st.h"
-#include "or/routerinfo_st.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/relay/dns.h"
+#include "feature/stats/geoip.h"
+#include "feature/hibernate/hibernate.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "core/proto/protover.h"
+#include "core/or/relay.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "app/config/statefile.h"
+#include "feature/nodelist/torcert.h"
+#include "feature/client/transports.h"
+#include "feature/nodelist/routerset.h"
+
+#include "feature/dirauth/mode.h"
+
+#include "feature/nodelist/authority_cert_st.h"
+#include "core/or/crypt_path_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/extrainfo_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "app/config/or_state_st.h"
+#include "core/or/port_cfg_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 
 #include "lib/osinfo/uname.h"
 #include "lib/tls/tortls.h"
diff --git a/src/feature/relay/routerkeys.c b/src/feature/relay/routerkeys.c
index bb04a8b220959e0b2a86e2777f59387d505a1a32..f12eb3d332941e3e72393e36f526b63c0d02ded7 100644
--- a/src/feature/relay/routerkeys.c
+++ b/src/feature/relay/routerkeys.c
@@ -14,11 +14,11 @@
  * (TODO: The keys in router.c should go here too.)
  */
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/torcert.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/torcert.h"
 
 #include "lib/crypt_ops/crypto_pwbox.h"
 #include "lib/crypt_ops/crypto_util.h"
diff --git a/src/feature/rend/rendcache.c b/src/feature/rend/rendcache.c
index c18920154e0ed433c3f284cef3ebf9b58193139e..7af5063ba5e58d5574e20362604e0ee2a0167d86 100644
--- a/src/feature/rend/rendcache.c
+++ b/src/feature/rend/rendcache.c
@@ -7,17 +7,17 @@
  **/
 
 #define RENDCACHE_PRIVATE
-#include "or/rendcache.h"
+#include "feature/rend/rendcache.h"
 
-#include "or/config.h"
-#include "or/rephist.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/rendcommon.h"
+#include "app/config/config.h"
+#include "feature/stats/rephist.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/rend/rendcommon.h"
 
-#include "or/extend_info_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/rend_service_descriptor_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
 
 /** Map from service id (as generated by rend_get_service_id) to
  * rend_cache_entry_t. */
diff --git a/src/feature/rend/rendcache.h b/src/feature/rend/rendcache.h
index bb075409ec3bac1d1ee819379157a1244c80333e..455e51645cdecd2e9949991cbec03bed7b02f435 100644
--- a/src/feature/rend/rendcache.h
+++ b/src/feature/rend/rendcache.h
@@ -9,8 +9,8 @@
 #ifndef TOR_RENDCACHE_H
 #define TOR_RENDCACHE_H
 
-#include "or/or.h"
-#include "or/rendcommon.h"
+#include "core/or/or.h"
+#include "feature/rend/rendcommon.h"
 
 /** How old do we let hidden service descriptors get before discarding
  * them as too old? */
diff --git a/src/feature/rend/rendclient.c b/src/feature/rend/rendclient.c
index d4262f2f38c1fe49acad0f8ebd216891b079f6fb..9f62156eb9bd496c29bb5e4d884adf8119b12a55 100644
--- a/src/feature/rend/rendclient.c
+++ b/src/feature/rend/rendclient.c
@@ -7,43 +7,43 @@
  * \brief Client code to access location-hidden services.
  **/
 
-#include "or/or.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_dh.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/hs_circuit.h"
-#include "or/hs_client.h"
-#include "or/hs_common.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/relay.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerset.h"
+#include "feature/dircache/directory.h"
+#include "feature/hs/hs_circuit.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_common.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerset.h"
 #include "lib/encoding/confline.h"
 
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/dir_connection_st.h"
-#include "or/entry_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/rend_service_descriptor_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 static extend_info_t *rend_client_get_random_intro_impl(
                           const rend_cache_entry_t *rend_query,
diff --git a/src/feature/rend/rendclient.h b/src/feature/rend/rendclient.h
index 77395d6cb815dcf0e9c4b66d2dc66459f287f78e..e41faa4932b7a7357723bfe27d78c593d2db482a 100644
--- a/src/feature/rend/rendclient.h
+++ b/src/feature/rend/rendclient.h
@@ -12,7 +12,7 @@
 #ifndef TOR_RENDCLIENT_H
 #define TOR_RENDCLIENT_H
 
-#include "or/rendcache.h"
+#include "feature/rend/rendcache.h"
 
 void rend_client_purge_state(void);
 
diff --git a/src/feature/rend/rendcommon.c b/src/feature/rend/rendcommon.c
index 928dda012847194a170cd9cb09f2d2a18a0facfc..5bf947744644b113b750b9f466ee9f4734f85fd3 100644
--- a/src/feature/rend/rendcommon.c
+++ b/src/feature/rend/rendcommon.c
@@ -10,37 +10,37 @@
 
 #define RENDCOMMON_PRIVATE
 
-#include "or/or.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/hs_client.h"
-#include "or/hs_common.h"
-#include "or/hs_intropoint.h"
-#include "or/networkstatus.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rendmid.h"
-#include "or/rendservice.h"
-#include "or/rephist.h"
-#include "or/replaycache.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/extend_info_st.h"
-#include "or/networkstatus_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/rend_encoded_v2_service_descriptor_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/rend_service_descriptor_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_intropoint.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendmid.h"
+#include "feature/rend/rendservice.h"
+#include "feature/stats/rephist.h"
+#include "feature/hs_common/replaycache.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/rend/rend_encoded_v2_service_descriptor_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /** Return 0 if one and two are the same service ids, else -1 or 1 */
 int
diff --git a/src/feature/rend/rendmid.c b/src/feature/rend/rendmid.c
index 38c1c52e435e2d6e9b054079b84c2d0d4db9222c..22cd6c3435bbaa576f7717e258fee45f79e1dd36 100644
--- a/src/feature/rend/rendmid.c
+++ b/src/feature/rend/rendmid.c
@@ -7,20 +7,20 @@
  * \brief Implement introductions points and rendezvous points.
  **/
 
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto.h"
-#include "or/dos.h"
-#include "or/relay.h"
-#include "or/rendmid.h"
-#include "or/rephist.h"
-#include "or/hs_circuitmap.h"
-#include "or/hs_intropoint.h"
-
-#include "or/or_circuit_st.h"
+#include "core/or/dos.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendmid.h"
+#include "feature/stats/rephist.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_intropoint.h"
+
+#include "core/or/or_circuit_st.h"
 
 /** Respond to an ESTABLISH_INTRO cell by checking the signed data and
  * setting the circuit's purpose and service pk digest.
diff --git a/src/feature/rend/rendservice.c b/src/feature/rend/rendservice.c
index 8e094b593c5f48c1015df2e95a06368131da5b8f..da4a98b3d120cf6b59bf374d84098cf290e90bbd 100644
--- a/src/feature/rend/rendservice.c
+++ b/src/feature/rend/rendservice.c
@@ -9,47 +9,47 @@
 
 #define RENDSERVICE_PRIVATE
 
-#include "or/or.h"
-#include "or/circpathbias.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "feature/client/circpathbias.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_dh.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/crypt_ops/crypto_util.h"
-#include "or/directory.h"
-#include "or/hs_common.h"
-#include "or/hs_config.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/rendclient.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/router.h"
-#include "or/relay.h"
-#include "or/rephist.h"
-#include "or/replaycache.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
+#include "feature/dircache/directory.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_config.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/relay/router.h"
+#include "core/or/relay.h"
+#include "feature/stats/rephist.h"
+#include "feature/hs_common/replaycache.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
 #include "lib/encoding/confline.h"
 
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/crypt_path_reference_st.h"
-#include "or/edge_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/networkstatus_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/rend_authorized_client_st.h"
-#include "or/rend_encoded_v2_service_descriptor_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/rend_service_descriptor_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "core/or/crypt_path_reference_st.h"
+#include "core/or/edge_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/rend/rend_authorized_client_st.h"
+#include "feature/rend/rend_encoded_v2_service_descriptor_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
diff --git a/src/feature/rend/rendservice.h b/src/feature/rend/rendservice.h
index 35962df7f37e3073b3d356917ffd8fe07178f7c1..7096789629a52955e609c226861f8bea10d8b823 100644
--- a/src/feature/rend/rendservice.h
+++ b/src/feature/rend/rendservice.h
@@ -12,8 +12,8 @@
 #ifndef TOR_RENDSERVICE_H
 #define TOR_RENDSERVICE_H
 
-#include "or/or.h"
-#include "or/hs_service.h"
+#include "core/or/or.h"
+#include "feature/hs/hs_service.h"
 
 typedef struct rend_intro_cell_t rend_intro_cell_t;
 struct config_line_t;
diff --git a/src/feature/stats/geoip.c b/src/feature/stats/geoip.c
index 3e6f20ea3f2ed706c7287455612e2bed41d9bdde..d891bd80e253988facd12e10f3df6c33c00ae515 100644
--- a/src/feature/stats/geoip.c
+++ b/src/feature/stats/geoip.c
@@ -28,15 +28,15 @@
  */
 
 #define GEOIP_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "ht.h"
 #include "lib/container/buffers.h"
-#include "or/config.h"
-#include "or/control.h"
-#include "or/dnsserv.h"
-#include "or/dos.h"
-#include "or/geoip.h"
-#include "or/routerlist.h"
+#include "app/config/config.h"
+#include "feature/control/control.h"
+#include "feature/client/dnsserv.h"
+#include "core/or/dos.h"
+#include "feature/stats/geoip.h"
+#include "feature/nodelist/routerlist.h"
 
 #include "lib/container/order.h"
 #include "lib/time/tvdiff.h"
diff --git a/src/feature/stats/geoip.h b/src/feature/stats/geoip.h
index fd19b7560aab9047b02d7ce6d2e52399e0c645c8..a2175c01e5f4ca413d96c1fc49426c7f9a26cd31 100644
--- a/src/feature/stats/geoip.h
+++ b/src/feature/stats/geoip.h
@@ -13,7 +13,7 @@
 #define TOR_GEOIP_H
 
 #include "lib/testsupport/testsupport.h"
-#include "or/dos.h"
+#include "core/or/dos.h"
 
 /** Indicates an action that we might be noting geoip statistics on.
  * Note that if we're noticing CONNECT, we're a bridge, and if we're noticing
diff --git a/src/feature/stats/rephist.c b/src/feature/stats/rephist.c
index 6607c2596490506bf0fcfb51ebdc2346232dd5ea..6bb680c5dc8fd81bc066329bfa69ef5aeb53e358 100644
--- a/src/feature/stats/rephist.c
+++ b/src/feature/stats/rephist.c
@@ -74,24 +74,24 @@
  * (The "rephist" name originally stood for "reputation and history". )
  **/
 
-#include "or/or.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/rephist.h"
-#include "or/router.h"
-#include "or/routerlist.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/stats/rephist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
 #include "ht.h"
-#include "or/channelpadding.h"
-#include "or/connection_or.h"
-#include "or/statefile.h"
+#include "core/or/channelpadding.h"
+#include "core/or/connection_or.h"
+#include "app/config/statefile.h"
 
-#include "or/networkstatus_st.h"
-#include "or/or_circuit_st.h"
-#include "or/or_state_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "core/or/or_circuit_st.h"
+#include "app/config/or_state_st.h"
 
 #include "lib/container/bloomfilt.h"
 #include "lib/container/order.h"
diff --git a/src/test/bench.c b/src/test/bench.c
index ced04fffd7924c12b65eea061976b63c2efa4f96..7919a4224ff75b6e2cdfaeacac8d15deae8bb4e4 100644
--- a/src/test/bench.c
+++ b/src/test/bench.c
@@ -10,27 +10,27 @@
 
 #include "orconfig.h"
 
-#include "or/or.h"
-#include "or/onion_tap.h"
-#include "or/relay_crypto.h"
+#include "core/or/or.h"
+#include "core/crypto/onion_tap.h"
+#include "core/crypto/relay_crypto.h"
 #include <openssl/opensslv.h>
 #include <openssl/evp.h>
 #include <openssl/ec.h>
 #include <openssl/ecdh.h>
 #include <openssl/obj_mac.h>
 
-#include "or/circuitlist.h"
-#include "or/config.h"
+#include "core/or/circuitlist.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_dh.h"
-#include "or/onion_ntor.h"
+#include "core/crypto/onion_ntor.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/consdiff.h"
+#include "feature/dircommon/consdiff.h"
 #include "lib/compress/compress.h"
 
-#include "or/cell_st.h"
-#include "or/or_circuit_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/or_circuit_st.h"
 
 #include "lib/crypt_ops/digestset.h"
 
diff --git a/src/test/fuzz/fuzz_consensus.c b/src/test/fuzz/fuzz_consensus.c
index 81a31015452df4b1fbe2c816c8e248bd6ddff7bc..b170fd33d8c53895b7663f379866ca213e6bc097 100644
--- a/src/test/fuzz/fuzz_consensus.c
+++ b/src/test/fuzz/fuzz_consensus.c
@@ -1,11 +1,11 @@
 /* Copyright (c) 2016-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 #define ROUTERPARSE_PRIVATE
-#include "or/or.h"
-#include "or/routerparse.h"
-#include "or/networkstatus.h"
+#include "core/or/or.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/networkstatus.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
-#include "or/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_st.h"
 #include "test/fuzz/fuzzing.h"
 
 static void
diff --git a/src/test/fuzz/fuzz_descriptor.c b/src/test/fuzz/fuzz_descriptor.c
index d28793fdf3678f1f4279c334d0a12d02f84c7d80..5a56f4081a86cc8b327d8141de9b9314067a2265 100644
--- a/src/test/fuzz/fuzz_descriptor.c
+++ b/src/test/fuzz/fuzz_descriptor.c
@@ -1,10 +1,10 @@
 /* Copyright (c) 2016-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 #define ROUTERPARSE_PRIVATE
-#include "or/or.h"
-#include "or/routerparse.h"
-#include "or/routerlist.h"
-#include "or/routerkeys.h"
+#include "core/or/or.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/relay/routerkeys.h"
 #include "test/fuzz/fuzzing.h"
 
 static int
diff --git a/src/test/fuzz/fuzz_diff.c b/src/test/fuzz/fuzz_diff.c
index eb5fc27e086309feb773cae3893c630776d40fb7..1079856fdb2d9752e48d285f077de5965896e8e5 100644
--- a/src/test/fuzz/fuzz_diff.c
+++ b/src/test/fuzz/fuzz_diff.c
@@ -4,8 +4,8 @@
 #define CONSDIFF_PRIVATE
 
 #include "orconfig.h"
-#include "or/or.h"
-#include "or/consdiff.h"
+#include "core/or/or.h"
+#include "feature/dircommon/consdiff.h"
 
 #include "test/fuzz/fuzzing.h"
 
diff --git a/src/test/fuzz/fuzz_diff_apply.c b/src/test/fuzz/fuzz_diff_apply.c
index 76789fabcdc3586cd0415ce9d6ac7a0cfdca2731..165d0e6126dfa0fafa130cbbaf359a8a2d00e314 100644
--- a/src/test/fuzz/fuzz_diff_apply.c
+++ b/src/test/fuzz/fuzz_diff_apply.c
@@ -4,8 +4,8 @@
 #define CONSDIFF_PRIVATE
 
 #include "orconfig.h"
-#include "or/or.h"
-#include "or/consdiff.h"
+#include "core/or/or.h"
+#include "feature/dircommon/consdiff.h"
 
 #include "test/fuzz/fuzzing.h"
 
diff --git a/src/test/fuzz/fuzz_extrainfo.c b/src/test/fuzz/fuzz_extrainfo.c
index 274ecc7866595f2b7ef5ef0efef584135c862b83..6c88f801226a2f30318a88240cdb1a6d54618c24 100644
--- a/src/test/fuzz/fuzz_extrainfo.c
+++ b/src/test/fuzz/fuzz_extrainfo.c
@@ -1,10 +1,10 @@
 /* Copyright (c) 2016-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 #define ROUTERPARSE_PRIVATE
-#include "or/or.h"
-#include "or/routerparse.h"
-#include "or/routerlist.h"
-#include "or/routerkeys.h"
+#include "core/or/or.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/relay/routerkeys.h"
 #include "test/fuzz/fuzzing.h"
 
 static void
diff --git a/src/test/fuzz/fuzz_hsdescv2.c b/src/test/fuzz/fuzz_hsdescv2.c
index 7fd86f40b1ffa76cc1f2a5f2bd2039252ac0bcc2..fd5da416358bb58ea6340ee13515fa84fc8bb7d5 100644
--- a/src/test/fuzz/fuzz_hsdescv2.c
+++ b/src/test/fuzz/fuzz_hsdescv2.c
@@ -1,9 +1,9 @@
 /* Copyright (c) 2016-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 #define ROUTERPARSE_PRIVATE
-#include "or/or.h"
-#include "or/routerparse.h"
-#include "or/rendcommon.h"
+#include "core/or/or.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/rend/rendcommon.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "test/fuzz/fuzzing.h"
 
diff --git a/src/test/fuzz/fuzz_hsdescv3.c b/src/test/fuzz/fuzz_hsdescv3.c
index de574ac26d40f5d0e0805df41f352a34e8288833..4ec8db0a8776b250556c3529966048f01f21e2f0 100644
--- a/src/test/fuzz/fuzz_hsdescv3.c
+++ b/src/test/fuzz/fuzz_hsdescv3.c
@@ -4,11 +4,11 @@
 #define ROUTERPARSE_PRIVATE
 #define HS_DESCRIPTOR_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "trunnel/ed25519_cert.h" /* Trunnel interface. */
 #include "lib/crypt_ops/crypto_ed25519.h"
-#include "or/hs_descriptor.h"
-#include "or/routerparse.h"
+#include "feature/hs/hs_descriptor.h"
+#include "feature/nodelist/routerparse.h"
 
 #include "test/fuzz/fuzzing.h"
 
diff --git a/src/test/fuzz/fuzz_http.c b/src/test/fuzz/fuzz_http.c
index 772f2099b66b6ff3def66414daa830a71862a3d1..61dc2144b4899c37132a6259b525ead5d5e61f79 100644
--- a/src/test/fuzz/fuzz_http.c
+++ b/src/test/fuzz/fuzz_http.c
@@ -6,15 +6,15 @@
 #define BUFFERS_PRIVATE
 #define DIRECTORY_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/err/backtrace.h"
 #include "lib/container/buffers.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/directory.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "feature/dircache/directory.h"
 #include "lib/log/torlog.h"
 
-#include "or/dir_connection_st.h"
+#include "feature/dircommon/dir_connection_st.h"
 
 #include "test/fuzz/fuzzing.h"
 
diff --git a/src/test/fuzz/fuzz_http_connect.c b/src/test/fuzz/fuzz_http_connect.c
index bf0a9deba6cf10ab6d8effe1acd2503a65aa76f9..184bb52ee263cc040708f0c437aa21c5088fea94 100644
--- a/src/test/fuzz/fuzz_http_connect.c
+++ b/src/test/fuzz/fuzz_http_connect.c
@@ -6,17 +6,17 @@
 #define BUFFERS_PRIVATE
 #define CONNECTION_EDGE_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/err/backtrace.h"
 #include "lib/container/buffers.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/proto_socks.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "core/proto/proto_socks.h"
 #include "lib/log/torlog.h"
 
-#include "or/entry_connection_st.h"
-#include "or/socks_request_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/socks_request_st.h"
 
 #include "test/fuzz/fuzzing.h"
 
diff --git a/src/test/fuzz/fuzz_iptsv2.c b/src/test/fuzz/fuzz_iptsv2.c
index e4ec7fffced42015316a9ee520cea93164ba3c51..a3082f4d0e37947eb5f777835d496fc9d6d1ee27 100644
--- a/src/test/fuzz/fuzz_iptsv2.c
+++ b/src/test/fuzz/fuzz_iptsv2.c
@@ -1,12 +1,12 @@
 /* Copyright (c) 2016-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 #define ROUTERPARSE_PRIVATE
-#include "or/or.h"
-#include "or/routerparse.h"
-#include "or/rendcommon.h"
+#include "core/or/or.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/rend/rendcommon.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 
-#include "or/rend_service_descriptor_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
 
 #include "test/fuzz/fuzzing.h"
 
diff --git a/src/test/fuzz/fuzz_microdesc.c b/src/test/fuzz/fuzz_microdesc.c
index a7fe1bb66da80c3fef842d96d780661545246758..fa9676372de118be057733e45ba9a4dbbb21f864 100644
--- a/src/test/fuzz/fuzz_microdesc.c
+++ b/src/test/fuzz/fuzz_microdesc.c
@@ -1,9 +1,9 @@
 /* Copyright (c) 2016-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 #define ROUTERPARSE_PRIVATE
-#include "or/or.h"
-#include "or/routerparse.h"
-#include "or/microdesc.h"
+#include "core/or/or.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/microdesc.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 
 #include "test/fuzz/fuzzing.h"
diff --git a/src/test/fuzz/fuzz_vrs.c b/src/test/fuzz/fuzz_vrs.c
index 7d28ef1c7a71c61e847137ad16af742e0c58bd06..8c96851b1f7cff1f1ffc4764be1939f9e07b8743 100644
--- a/src/test/fuzz/fuzz_vrs.c
+++ b/src/test/fuzz/fuzz_vrs.c
@@ -2,14 +2,14 @@
 /* See LICENSE for licensing information */
 #define ROUTERPARSE_PRIVATE
 #define NETWORKSTATUS_PRIVATE
-#include "or/or.h"
-#include "or/routerparse.h"
+#include "core/or/or.h"
+#include "feature/nodelist/routerparse.h"
 #include "lib/memarea/memarea.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
 
-#include "or/networkstatus_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 
 #include "test/fuzz/fuzzing.h"
diff --git a/src/test/fuzz/fuzzing_common.c b/src/test/fuzz/fuzzing_common.c
index c947ebfcebbab30020d9b0017da062229364291f..0b3483bf6610b7ba348d86cd7b6d3bd59ad37431 100644
--- a/src/test/fuzz/fuzzing_common.c
+++ b/src/test/fuzz/fuzzing_common.c
@@ -2,9 +2,9 @@
 /* See LICENSE for licensing information */
 #define CRYPTO_ED25519_PRIVATE
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/err/backtrace.h"
-#include "or/config.h"
+#include "app/config/config.h"
 #include "test/fuzz/fuzzing.h"
 #include "lib/compress/compress.h"
 #include "lib/crypt_ops/crypto.h"
diff --git a/src/test/hs_test_helpers.c b/src/test/hs_test_helpers.c
index cb7b1fe1b7e30a6b0824e68fad7ba550aeb935a7..afe3eafa2f78e08cdd6667cce812c54528e8c927 100644
--- a/src/test/hs_test_helpers.c
+++ b/src/test/hs_test_helpers.c
@@ -1,12 +1,12 @@
 /* Copyright (c) 2017-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "test/test.h"
-#include "or/torcert.h"
+#include "feature/nodelist/torcert.h"
 
-#include "or/hs_common.h"
+#include "feature/hs/hs_common.h"
 #include "test/hs_test_helpers.h"
 
 hs_desc_intro_point_t *
diff --git a/src/test/hs_test_helpers.h b/src/test/hs_test_helpers.h
index 5c0262207aa7a9ca0e6a045008206ac4bb774424..b7c2714769a0e7807cdb48aa299055a54ef1e253 100644
--- a/src/test/hs_test_helpers.h
+++ b/src/test/hs_test_helpers.h
@@ -5,7 +5,7 @@
 #define TOR_HS_TEST_HELPERS_H
 
 #include "trunnel/ed25519_cert.h"
-#include "or/hs_descriptor.h"
+#include "feature/hs/hs_descriptor.h"
 
 /* Set of functions to help build and test descriptors. */
 hs_desc_intro_point_t *hs_helper_build_intro_point(
diff --git a/src/test/log_test_helpers.h b/src/test/log_test_helpers.h
index 7c38504527e181e9f1f0bb6229be3d8361236445..fc9768c125f948c266689ce7463a267735afe3da 100644
--- a/src/test/log_test_helpers.h
+++ b/src/test/log_test_helpers.h
@@ -1,7 +1,7 @@
 /* Copyright (c) 2014-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 #ifndef TOR_LOG_TEST_HELPERS_H
 #define TOR_LOG_TEST_HELPERS_H
diff --git a/src/test/rend_test_helpers.c b/src/test/rend_test_helpers.c
index 31af58c278c2a8b981921f19206994c4af8ef584..85a679a9679c4be3778170d09d06750ce9322c0b 100644
--- a/src/test/rend_test_helpers.c
+++ b/src/test/rend_test_helpers.c
@@ -1,15 +1,15 @@
 /* Copyright (c) 2014-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "test/test.h"
-#include "or/rendcommon.h"
+#include "feature/rend/rendcommon.h"
 #include "test/rend_test_helpers.h"
 
-#include "or/extend_info_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/rend_service_descriptor_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
 
 void
 generate_desc(int time_diff, rend_encoded_v2_service_descriptor_t **desc,
diff --git a/src/test/rend_test_helpers.h b/src/test/rend_test_helpers.h
index aca675b2a4f9e5f81a2f13452d496dd5eda8ee44..103e143ec6e6c3c50ad02e32213722da72505b08 100644
--- a/src/test/rend_test_helpers.h
+++ b/src/test/rend_test_helpers.h
@@ -1,7 +1,7 @@
 /* Copyright (c) 2014-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 #ifndef TOR_REND_TEST_HELPERS_H
 #define TOR_REND_TEST_HELPERS_H
diff --git a/src/test/test.c b/src/test/test.c
index d6be5ea2e737a296605d78a33c2e90cf520a7cb5..2addeec96884b44baf99438ea7aedace63780d63 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -12,7 +12,7 @@
 #include "lib/crypt_ops/crypto_dh.h"
 #include "lib/crypt_ops/crypto_rand.h"
 
-#include "or/or_state_st.h"
+#include "app/config/or_state_st.h"
 
 #include <stdio.h>
 #ifdef HAVE_FCNTL_H
@@ -42,34 +42,34 @@
 long int lround(double x);
 double fabs(double x);
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/err/backtrace.h"
 #include "lib/container/buffers.h"
-#include "or/circuitlist.h"
-#include "or/circuitstats.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitstats.h"
 #include "lib/compress/compress.h"
-#include "or/config.h"
-#include "or/connection_edge.h"
-#include "or/rendcommon.h"
-#include "or/rendcache.h"
+#include "app/config/config.h"
+#include "core/or/connection_edge.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendcache.h"
 #include "test/test.h"
-#include "or/main.h"
+#include "core/mainloop/main.h"
 #include "lib/memarea/memarea.h"
-#include "or/onion.h"
-#include "or/onion_ntor.h"
-#include "or/onion_fast.h"
-#include "or/onion_tap.h"
-#include "or/policies.h"
-#include "or/rephist.h"
-#include "or/routerparse.h"
-#include "or/statefile.h"
+#include "core/crypto/onion.h"
+#include "core/crypto/onion_ntor.h"
+#include "core/crypto/onion_fast.h"
+#include "core/crypto/onion_tap.h"
+#include "core/or/policies.h"
+#include "feature/stats/rephist.h"
+#include "feature/nodelist/routerparse.h"
+#include "app/config/statefile.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 
-#include "or/extend_info_st.h"
-#include "or/or_circuit_st.h"
-#include "or/rend_encoded_v2_service_descriptor_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/rend_service_descriptor_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/or_circuit_st.h"
+#include "feature/rend/rend_encoded_v2_service_descriptor_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
 
 /** Run unit tests for the onion handshake code. */
 static void
diff --git a/src/test/test_accounting.c b/src/test/test_accounting.c
index 7b9511dc202bc5903f743218b1ae07b01ea1e6c1..7721a9eb99ae70d3b421dddd2e8a83733c9e89ca 100644
--- a/src/test/test_accounting.c
+++ b/src/test/test_accounting.c
@@ -1,15 +1,15 @@
 /* Copyright (c) 2014-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #define HIBERNATE_PRIVATE
-#include "or/hibernate.h"
-#include "or/config.h"
+#include "feature/hibernate/hibernate.h"
+#include "app/config/config.h"
 #define STATEFILE_PRIVATE
-#include "or/statefile.h"
+#include "app/config/statefile.h"
 
-#include "or/or_state_st.h"
+#include "app/config/or_state_st.h"
 
 #define NS_MODULE accounting
 
diff --git a/src/test/test_addr.c b/src/test/test_addr.c
index 1069e25b43650536b4d691f0192bea5fae5af3df..9ab921c5b655fa757922376036e297f444bfa3a1 100644
--- a/src/test/test_addr.c
+++ b/src/test/test_addr.c
@@ -5,10 +5,10 @@
 
 #define ADDRESSMAP_PRIVATE
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "test/test.h"
-#include "or/addressmap.h"
+#include "feature/client/addressmap.h"
 #include "test/log_test_helpers.h"
 
 #ifdef HAVE_SYS_UN_H
diff --git a/src/test/test_address.c b/src/test/test_address.c
index 52ca5137e64cbe896b48bfd95a182edeaddfa278..abe7c2c0ade4975520a74422e3c512461b8ecb8a 100644
--- a/src/test/test_address.c
+++ b/src/test/test_address.c
@@ -23,7 +23,7 @@
 #include <net/if.h>
 #endif /* defined(HAVE_IFCONF_TO_SMARTLIST) */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/net/address.h"
 #include "test/test.h"
 #include "test/log_test_helpers.h"
diff --git a/src/test/test_address_set.c b/src/test/test_address_set.c
index ec4e6b7e8736b3cfae7eb049d6ff31446b8b217e..f231740011987e12bc2149f77da6253d63b52b16 100644
--- a/src/test/test_address_set.c
+++ b/src/test/test_address_set.c
@@ -1,19 +1,19 @@
 /* Copyright (c) 2017-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/address_set.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/routerlist.h"
-#include "or/torcert.h"
-
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/address_set.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/torcert.h"
+
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_bridges.c b/src/test/test_bridges.c
index 685027c0e04464a35d345e3e47c25215bf3d6f0d..bdab148901cc695cb00b1c0883119ae98563754c 100644
--- a/src/test/test_bridges.c
+++ b/src/test/test_bridges.c
@@ -11,11 +11,11 @@
 
 #include <stdbool.h>
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/net/address.h"
-#include "or/bridges.h"
-#include "or/config.h"
-#include "or/transports.h"
+#include "feature/client/bridges.h"
+#include "app/config/config.h"
+#include "feature/client/transports.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 3f7b0a203ad144dbca13b7d88d918b304f9a3760..716cff36e042d0636e67bd524a6b14fb4b51c88f 100644
--- a/src/test/test_bt_cl.c
+++ b/src/test/test_bt_cl.c
@@ -7,7 +7,7 @@
 
 /* To prevent 'assert' from going away. */
 #undef TOR_COVERAGE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/err/backtrace.h"
 #include "lib/log/torlog.h"
 
diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c
index 604f1422c11ce9d25c5b1411e665e7f987b277fc..477066f69976dceb1b7ee3dca7d3215c7b3ef8eb 100644
--- a/src/test/test_buffers.c
+++ b/src/test/test_buffers.c
@@ -5,14 +5,14 @@
 
 #define BUFFERS_PRIVATE
 #define PROTO_HTTP_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
 #include "lib/tls/buffers_tls.h"
 #include "lib/tls/tortls.h"
 #include "lib/compress/compress.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/proto_http.h"
-#include "or/proto_socks.h"
+#include "core/proto/proto_http.h"
+#include "core/proto/proto_socks.h"
 #include "test/test.h"
 
 /** Run unit tests for buffers.c */
diff --git a/src/test/test_bwmgt.c b/src/test/test_bwmgt.c
index 4cfca6c776c456fba2a1da17553a1d8fb8b44120..7aa053f6c3843426233ccd1ce3837aa03263d90b 100644
--- a/src/test/test_bwmgt.c
+++ b/src/test/test_bwmgt.c
@@ -8,7 +8,7 @@
 
 #define TOKEN_BUCKET_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
 #include "lib/evloop/token_bucket.h"
diff --git a/src/test/test_cell_formats.c b/src/test/test_cell_formats.c
index da5e5defd17856271064f2789228bd94a4916708..2753c42191d4466189f91da75c32bab75f2fb048 100644
--- a/src/test/test_cell_formats.c
+++ b/src/test/test_cell_formats.c
@@ -7,21 +7,21 @@
 
 #define CONNECTION_EDGE_PRIVATE
 #define RELAY_PRIVATE
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/connection_edge.h"
-#include "or/connection_or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/connection_edge.h"
+#include "core/or/connection_or.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/onion.h"
-#include "or/onion_tap.h"
-#include "or/onion_fast.h"
-#include "or/onion_ntor.h"
-#include "or/relay.h"
-
-#include "or/cell_st.h"
-#include "or/cell_queue_st.h"
-#include "or/var_cell_st.h"
+#include "core/crypto/onion.h"
+#include "core/crypto/onion_tap.h"
+#include "core/crypto/onion_fast.h"
+#include "core/crypto/onion_ntor.h"
+#include "core/or/relay.h"
+
+#include "core/or/cell_st.h"
+#include "core/or/cell_queue_st.h"
+#include "core/or/var_cell_st.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_cell_queue.c b/src/test/test_cell_queue.c
index 3369511afc6aa6e41f11fd817d23ec284708e2a0..d74bb9c622857bec51624915dbe2e8e25612cc70 100644
--- a/src/test/test_cell_queue.c
+++ b/src/test/test_cell_queue.c
@@ -3,15 +3,15 @@
 
 #define CIRCUITLIST_PRIVATE
 #define RELAY_PRIVATE
-#include "or/or.h"
-#include "or/circuitlist.h"
-#include "or/relay.h"
+#include "core/or/or.h"
+#include "core/or/circuitlist.h"
+#include "core/or/relay.h"
 #include "test/test.h"
 
-#include "or/cell_st.h"
-#include "or/cell_queue_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/cell_queue_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 static void
 test_cq_manip(void *arg)
diff --git a/src/test/test_channel.c b/src/test/test_channel.c
index 53c133ecb0fbb345326dc90b847068419b2357b3..26af8de91727af44f3152ee0cd2907e0f9f654ca 100644
--- a/src/test/test_channel.c
+++ b/src/test/test_channel.c
@@ -3,28 +3,28 @@
 
 #define TOR_CHANNEL_INTERNAL_
 #define CHANNEL_PRIVATE_
-#include "or/or.h"
-#include "or/channel.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
 /* For channel_note_destroy_not_pending */
 #define CIRCUITLIST_PRIVATE
-#include "or/circuitlist.h"
-#include "or/circuitmux.h"
-#include "or/circuitmux_ewma.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitmux.h"
+#include "core/or/circuitmux_ewma.h"
 /* For var_cell_free */
-#include "or/connection_or.h"
+#include "core/or/connection_or.h"
 #include "lib/crypt_ops/crypto_rand.h"
 /* For packed_cell stuff */
 #define RELAY_PRIVATE
-#include "or/relay.h"
+#include "core/or/relay.h"
 /* For init/free stuff */
-#include "or/scheduler.h"
-#include "or/networkstatus.h"
-
-#include "or/cell_st.h"
-#include "or/networkstatus_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/routerstatus_st.h"
-#include "or/var_cell_st.h"
+#include "core/or/scheduler.h"
+#include "feature/nodelist/networkstatus.h"
+
+#include "core/or/cell_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/nodelist/routerstatus_st.h"
+#include "core/or/var_cell_st.h"
 
 /* Test suite stuff */
 #include "test/log_test_helpers.h"
diff --git a/src/test/test_channelpadding.c b/src/test/test_channelpadding.c
index ff2ab8daab76892dfce9b8370ec8a06e49ce8256..5d696b8b807157904777721802281d3b167f3170 100644
--- a/src/test/test_channelpadding.c
+++ b/src/test/test_channelpadding.c
@@ -5,28 +5,28 @@
 #define MAIN_PRIVATE
 #define NETWORKSTATUS_PRIVATE
 #define TOR_TIMERS_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #include "lib/testsupport/testsupport.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/channelpadding.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/channelpadding.h"
 #include "lib/evloop/compat_libevent.h"
-#include "or/config.h"
+#include "app/config/config.h"
 #include "lib/time/compat_time.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
 #include "test/log_test_helpers.h"
 #include "lib/tls/tortls.h"
 #include "lib/evloop/timers.h"
 #include "lib/container/buffers.h"
 
-#include "or/cell_st.h"
-#include "or/networkstatus_st.h"
-#include "or/or_connection_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/cell_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "core/or/or_connection_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 int channelpadding_get_netflow_inactive_timeout_ms(channel_t *chan);
 int64_t channelpadding_compute_time_until_pad_for_netflow(channel_t *chan);
diff --git a/src/test/test_channeltls.c b/src/test/test_channeltls.c
index ad2b443cf29eb19f9b5e28beeee67d9cb783a31e..787a30a85d8c30f570e670a8ee40e80a2ab23997 100644
--- a/src/test/test_channeltls.c
+++ b/src/test/test_channeltls.c
@@ -6,19 +6,19 @@
 #include <math.h>
 
 #define TOR_CHANNEL_INTERNAL_
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/net/address.h"
 #include "lib/container/buffers.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/config.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "app/config/config.h"
 /* For init/free stuff */
-#include "or/scheduler.h"
+#include "core/or/scheduler.h"
 #include "lib/tls/tortls.h"
 
-#include "or/or_connection_st.h"
+#include "core/or/or_connection_st.h"
 
 /* Test suite stuff */
 #include "test/test.h"
diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c
index a80c6ebd3af7140a08c31226e3efca14654f6b9f..652e308ed8056c4484602ae679a736e7418f4cf4 100644
--- a/src/test/test_checkdir.c
+++ b/src/test/test_checkdir.c
@@ -2,7 +2,7 @@
 /* See LICENSE for licensing information */
 
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
 #ifdef _WIN32
 #include <direct.h>
@@ -10,7 +10,7 @@
 #include <dirent.h>
 #endif
 
-#include "or/config.h"
+#include "app/config/config.h"
 #include "test/test.h"
 
 #ifdef HAVE_SYS_STAT_H
diff --git a/src/test/test_circuitbuild.c b/src/test/test_circuitbuild.c
index c09133c5492f2130f1c54426c82b9804dae63a10..02eadecd985f396b485d1f469d73dfda440d1c9c 100644
--- a/src/test/test_circuitbuild.c
+++ b/src/test/test_circuitbuild.c
@@ -5,15 +5,15 @@
 
 #define CIRCUITBUILD_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #include "test/test_helpers.h"
 #include "test/log_test_helpers.h"
-#include "or/config.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
+#include "app/config/config.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
 
-#include "or/extend_info_st.h"
+#include "core/or/extend_info_st.h"
 
 /* Dummy nodes smartlist for testing */
 static smartlist_t dummy_nodes;
diff --git a/src/test/test_circuitlist.c b/src/test/test_circuitlist.c
index 4aa7c596ee4736973f012723f569f489d680c48f..8dd7f5f5a999377e77081785b6b0bbbac46b93ca 100644
--- a/src/test/test_circuitlist.c
+++ b/src/test/test_circuitlist.c
@@ -5,17 +5,17 @@
 #define CIRCUITBUILD_PRIVATE
 #define CIRCUITLIST_PRIVATE
 #define HS_CIRCUITMAP_PRIVATE
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuitmux_ewma.h"
-#include "or/hs_circuitmap.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitmux_ewma.h"
+#include "feature/hs/hs_circuitmap.h"
 #include "test/test.h"
 #include "test/log_test_helpers.h"
 
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 #include "lib/container/bitarray.h"
 
diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c
index c2fd1ae68aaf5a51c4b2e0aa45ba5a62f4c1639b..1d46f8de0d5c26f80dacaebd87dc71fbb3e628ed 100644
--- a/src/test/test_circuitmux.c
+++ b/src/test/test_circuitmux.c
@@ -5,15 +5,15 @@
 #define CIRCUITMUX_PRIVATE
 #define CIRCUITMUX_EWMA_PRIVATE
 #define RELAY_PRIVATE
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/circuitmux.h"
-#include "or/circuitmux_ewma.h"
-#include "or/relay.h"
-#include "or/scheduler.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/circuitmux.h"
+#include "core/or/circuitmux_ewma.h"
+#include "core/or/relay.h"
+#include "core/or/scheduler.h"
 #include "test/test.h"
 
-#include "or/destroy_cell_queue_st.h"
+#include "core/or/destroy_cell_queue_st.h"
 
 /* XXXX duplicated function from test_circuitlist.c */
 static channel_t *
diff --git a/src/test/test_circuitstats.c b/src/test/test_circuitstats.c
index 94ba6ed4485fd1b42f14b8866c0a22c3f09a43ce..c3cfad88da3f69ef7af804e2ee32323bd5d77142 100644
--- a/src/test/test_circuitstats.c
+++ b/src/test/test_circuitstats.c
@@ -6,21 +6,21 @@
 #define CIRCUITLIST_PRIVATE
 #define CHANNEL_PRIVATE_
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #include "test/test_helpers.h"
 #include "test/log_test_helpers.h"
-#include "or/config.h"
-#include "or/circuitlist.h"
-#include "or/circuitbuild.h"
-#include "or/circuitstats.h"
-#include "or/circuituse.h"
-#include "or/channel.h"
-
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/extend_info_st.h"
-#include "or/origin_circuit_st.h"
+#include "app/config/config.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitstats.h"
+#include "core/or/circuituse.h"
+#include "core/or/channel.h"
+
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "core/or/extend_info_st.h"
+#include "core/or/origin_circuit_st.h"
 
 void test_circuitstats_timeout(void *arg);
 void test_circuitstats_hoplen(void *arg);
diff --git a/src/test/test_circuituse.c b/src/test/test_circuituse.c
index 2524e43c680213248ed8e5e559f08be4c38579a2..720adeac84f91e26d20abef657f119dac78c4191 100644
--- a/src/test/test_circuituse.c
+++ b/src/test/test_circuituse.c
@@ -5,17 +5,17 @@
 
 #define CIRCUITLIST_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #include "test/test_helpers.h"
-#include "or/config.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
-#include "or/circuitbuild.h"
-#include "or/nodelist.h"
-
-#include "or/cpath_build_state_st.h"
-#include "or/origin_circuit_st.h"
+#include "app/config/config.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
+#include "core/or/circuitbuild.h"
+#include "feature/nodelist/nodelist.h"
+
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/origin_circuit_st.h"
 
 static void
 test_circuit_is_available_for_use_ret_false_when_marked_for_close(void *arg)
diff --git a/src/test/test_compat_libevent.c b/src/test/test_compat_libevent.c
index 1262a3140e9c67948b5ff747a73343b8e1a5e427..3f505d013b9d9e789d0604182cbdb63a8be88563 100644
--- a/src/test/test_compat_libevent.c
+++ b/src/test/test_compat_libevent.c
@@ -3,7 +3,7 @@
 
 #define COMPAT_LIBEVENT_PRIVATE
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_config.c b/src/test/test_config.c
index c7623d0c856b1d8837fed7eac417f66881c54804..f7d3a6fbb29a97692d099842d5a56d0e3bd21cb1 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -8,44 +8,44 @@
 #define CONFIG_PRIVATE
 #define PT_PRIVATE
 #define ROUTERSET_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/net/address.h"
-#include "or/addressmap.h"
-#include "or/bridges.h"
-#include "or/circuitmux_ewma.h"
-#include "or/circuitbuild.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
+#include "feature/client/addressmap.h"
+#include "feature/client/bridges.h"
+#include "core/or/circuitmux_ewma.h"
+#include "core/or/circuitbuild.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
 #include "test/test.h"
-#include "or/connection_or.h"
-#include "or/control.h"
-#include "or/cpuworker.h"
-#include "or/dirserv.h"
-#include "or/dirauth/dirvote.h"
-#include "or/dns.h"
-#include "or/entrynodes.h"
-#include "or/transports.h"
-#include "or/ext_orport.h"
-#include "or/geoip.h"
-#include "or/hibernate.h"
-#include "or/main.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/rendclient.h"
-#include "or/rendservice.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerset.h"
-#include "or/statefile.h"
+#include "core/or/connection_or.h"
+#include "feature/control/control.h"
+#include "core/mainloop/cpuworker.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/relay/dns.h"
+#include "feature/client/entrynodes.h"
+#include "feature/client/transports.h"
+#include "feature/relay/ext_orport.h"
+#include "feature/stats/geoip.h"
+#include "feature/hibernate/hibernate.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "feature/rend/rendclient.h"
+#include "feature/rend/rendservice.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerset.h"
+#include "app/config/statefile.h"
 
 #include "test/test_helpers.h"
 
-#include "or/dir_server_st.h"
-#include "or/port_cfg_st.h"
-#include "or/routerinfo_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "core/or/port_cfg_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 
 #include "lib/fs/conffile.h"
 #include "lib/meminfo/meminfo.h"
diff --git a/src/test/test_connection.c b/src/test/test_connection.c
index 674e2284e6f66dc05c527a95b713df1c2657c2ce..c423c6573f3188105f188f551c79a24a2bee78b8 100644
--- a/src/test/test_connection.c
+++ b/src/test/test_connection.c
@@ -7,29 +7,29 @@
 #define MAIN_PRIVATE
 #define CONNECTION_OR_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/hs_common.h"
-#include "or/main.h"
-#include "or/microdesc.h"
-#include "or/nodelist.h"
-#include "or/networkstatus.h"
-#include "or/rendcache.h"
-#include "or/directory.h"
-#include "or/connection_or.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/hs/hs_common.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/rend/rendcache.h"
+#include "feature/dircache/directory.h"
+#include "core/or/connection_or.h"
 
 #include "test/test_connection.h"
 #include "test/test_helpers.h"
 
-#include "or/dir_connection_st.h"
-#include "or/entry_connection_st.h"
-#include "or/node_st.h"
-#include "or/or_connection_st.h"
-#include "or/routerinfo_st.h"
-#include "or/socks_request_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/entry_connection_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/or_connection_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "core/or/socks_request_st.h"
 
 static void * test_conn_get_basic_setup(const struct testcase_t *tc);
 static int test_conn_get_basic_teardown(const struct testcase_t *tc,
diff --git a/src/test/test_conscache.c b/src/test/test_conscache.c
index 3d3a50297bb02175c2c476d06c4e99bd37735164..b5cbd72515cccc108c0353a8ace4bf1af05655e7 100644
--- a/src/test/test_conscache.c
+++ b/src/test/test_conscache.c
@@ -1,9 +1,9 @@
 /* Copyright (c) 2017-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/conscache.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/dircache/conscache.h"
 #include "lib/encoding/confline.h"
 #include "test/test.h"
 
diff --git a/src/test/test_consdiff.c b/src/test/test_consdiff.c
index 38947a225b7668e74d585d286c512b773943495d..b836befd228c07e633253615c5bbc9ba3a6b91da 100644
--- a/src/test/test_consdiff.c
+++ b/src/test/test_consdiff.c
@@ -4,10 +4,10 @@
 
 #define CONSDIFF_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
-#include "or/consdiff.h"
+#include "feature/dircommon/consdiff.h"
 #include "lib/memarea/memarea.h"
 #include "test/log_test_helpers.h"
 
diff --git a/src/test/test_consdiffmgr.c b/src/test/test_consdiffmgr.c
index 959075903f63b3c3e03a34d0e75327de2ee79b02..6c0601b504aeb84f324ca5e6262405321ca900dd 100644
--- a/src/test/test_consdiffmgr.c
+++ b/src/test/test_consdiffmgr.c
@@ -3,20 +3,20 @@
 
 #define CONSDIFFMGR_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/conscache.h"
-#include "or/consdiff.h"
-#include "or/consdiffmgr.h"
-#include "or/cpuworker.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/dircache/conscache.h"
+#include "feature/dircommon/consdiff.h"
+#include "feature/dircache/consdiffmgr.h"
+#include "core/mainloop/cpuworker.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/networkstatus.h"
-#include "or/routerparse.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/routerparse.h"
 #include "lib/evloop/workqueue.h"
 #include "lib/compress/compress.h"
 #include "lib/encoding/confline.h"
 
-#include "or/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_st.h"
 
 #include "test/test.h"
 #include "test/log_test_helpers.h"
diff --git a/src/test/test_containers.c b/src/test/test_containers.c
index 5c712a9b16905e539e38de1afe75611aeb105602..717eb0892a35b6fc903a2beabcf4c7d30b025fed 100644
--- a/src/test/test_containers.c
+++ b/src/test/test_containers.c
@@ -4,9 +4,9 @@
 /* See LICENSE for licensing information */
 
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/fp_pair.h"
+#include "feature/dircommon/fp_pair.h"
 #include "test/test.h"
 
 #include "lib/container/bitarray.h"
diff --git a/src/test/test_controller.c b/src/test/test_controller.c
index 54c2e0a2ec266c71acfa8408668e2742ce009ac5..2ded04619cbc9ec3e14fffab303862a11ed6d245 100644
--- a/src/test/test_controller.c
+++ b/src/test/test_controller.c
@@ -2,23 +2,23 @@
 /* See LICENSE for licensing information */
 
 #define CONTROL_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
-#include "or/bridges.h"
-#include "or/control.h"
-#include "or/entrynodes.h"
-#include "or/hs_common.h"
-#include "or/networkstatus.h"
-#include "or/rendservice.h"
-#include "or/routerlist.h"
-#include "or/nodelist.h"
+#include "feature/client/bridges.h"
+#include "feature/control/control.h"
+#include "feature/client/entrynodes.h"
+#include "feature/hs/hs_common.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/rend/rendservice.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/nodelist.h"
 #include "test/test.h"
 #include "test/test_helpers.h"
 
-#include "or/control_connection_st.h"
-#include "or/download_status_st.h"
-#include "or/microdesc_st.h"
-#include "or/node_st.h"
+#include "feature/control/control_connection_st.h"
+#include "feature/dirclient/download_status_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/node_st.h"
 
 static void
 test_add_onion_helper_keyarg_v3(void *arg)
diff --git a/src/test/test_controller_events.c b/src/test/test_controller_events.c
index 33a45a99ccb75f411262655a89bbb31a525b7b2e..e935b7042840a6ef8b0481f267b0418bf1843e22 100644
--- a/src/test/test_controller_events.c
+++ b/src/test/test_controller_events.c
@@ -4,16 +4,16 @@
 #define CONNECTION_PRIVATE
 #define TOR_CHANNEL_INTERNAL_
 #define CONTROL_PRIVATE
-#include "or/or.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/circuitlist.h"
-#include "or/connection.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/or/circuitlist.h"
+#include "core/mainloop/connection.h"
+#include "feature/control/control.h"
 #include "test/test.h"
 
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 static void
 add_testing_cell_stats_entry(circuit_t *circ, uint8_t command,
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 2e38dfc279820c2b267f3360726a87cfaaf26858..2124e2219678c183d2d00beecd5bbb79816e7518 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -6,7 +6,7 @@
 #include "orconfig.h"
 #define CRYPTO_CURVE25519_PRIVATE
 #define CRYPTO_RAND_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #include "lib/crypt_ops/aes.h"
 #include "siphash.h"
diff --git a/src/test/test_crypto_slow.c b/src/test/test_crypto_slow.c
index 7c1dfa0a9311e2f8cc02ce1a33ad542d19d99996..88b31ad9af2b4fcb7ad30097de61138d8c26fb3c 100644
--- a/src/test/test_crypto_slow.c
+++ b/src/test/test_crypto_slow.c
@@ -5,7 +5,7 @@
 
 #include "orconfig.h"
 #define CRYPTO_S2K_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index a86b2a9f6784579534f0d1f18f2d6db7a96b6767..bda56b3a8e326c6dd3d0edc3af2a379468ac1874 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -17,51 +17,51 @@
 #define NETWORKSTATUS_PRIVATE
 #define RELAY_PRIVATE
 
-#include "or/or.h"
-#include "or/bridges.h"
-#include "or/connection.h"
-#include "or/confparse.h"
-#include "or/config.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "feature/client/bridges.h"
+#include "core/mainloop/connection.h"
+#include "app/config/confparse.h"
+#include "app/config/config.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/directory.h"
-#include "or/dirserv.h"
-#include "or/dirauth/dirvote.h"
-#include "or/entrynodes.h"
-#include "or/fp_pair.h"
-#include "or/hibernate.h"
+#include "feature/dircache/directory.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/client/entrynodes.h"
+#include "feature/dircommon/fp_pair.h"
+#include "feature/hibernate/hibernate.h"
 #include "lib/memarea/memarea.h"
 #include "lib/osinfo/uname.h"
-#include "or/networkstatus.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
-#include "or/dirauth/shared_random_state.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/dirauth/shared_random_state.h"
 #include "test/test.h"
 #include "test/test_dir_common.h"
-#include "or/torcert.h"
-#include "or/relay.h"
+#include "feature/nodelist/torcert.h"
+#include "core/or/relay.h"
 #include "test/log_test_helpers.h"
-#include "or/voting_schedule.h"
+#include "feature/dircommon/voting_schedule.h"
 #include "lib/compress/compress.h"
 
-#include "or/addr_policy_st.h"
-#include "or/authority_cert_st.h"
-#include "or/document_signature_st.h"
-#include "or/extrainfo_st.h"
-#include "or/networkstatus_st.h"
-#include "or/networkstatus_voter_info_st.h"
-#include "or/ns_detached_signatures_st.h"
-#include "or/port_cfg_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
-#include "or/tor_version_st.h"
-#include "or/vote_microdesc_hash_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "core/or/addr_policy_st.h"
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/nodelist/document_signature_st.h"
+#include "feature/nodelist/extrainfo_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_voter_info_st.h"
+#include "feature/dirauth/ns_detached_signatures_st.h"
+#include "core/or/port_cfg_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
+#include "core/or/tor_version_st.h"
+#include "feature/dirauth/vote_microdesc_hash_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
diff --git a/src/test/test_dir_common.c b/src/test/test_dir_common.c
index a758421cde3ce191218095ebc8169a8ca681a2d4..e65e2b0111d1576125d05b7b2852fdd361c29650 100644
--- a/src/test/test_dir_common.c
+++ b/src/test/test_dir_common.c
@@ -6,19 +6,19 @@
 #include "orconfig.h"
 #define DIRVOTE_PRIVATE
 #include "test/test.h"
-#include "or/or.h"
-#include "or/dirauth/dirvote.h"
-#include "or/nodelist.h"
-#include "or/routerlist.h"
+#include "core/or/or.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/routerlist.h"
 #include "test/test_dir_common.h"
-#include "or/voting_schedule.h"
+#include "feature/dircommon/voting_schedule.h"
 
-#include "or/authority_cert_st.h"
-#include "or/networkstatus_st.h"
-#include "or/networkstatus_voter_info_st.h"
-#include "or/routerinfo_st.h"
-#include "or/vote_microdesc_hash_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/networkstatus_voter_info_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/dirauth/vote_microdesc_hash_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 
 void dir_common_setup_vote(networkstatus_t **vote, time_t now);
 networkstatus_t * dir_common_add_rs_and_parse(networkstatus_t *vote,
diff --git a/src/test/test_dir_common.h b/src/test/test_dir_common.h
index 7d5f55afe61e82fa44ffc0fa927c97ae19de1572..1e90228edb23f329f69f2c3bb808208061396b8b 100644
--- a/src/test/test_dir_common.h
+++ b/src/test/test_dir_common.h
@@ -3,9 +3,9 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
-#include "or/networkstatus.h"
-#include "or/routerparse.h"
+#include "core/or/or.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/routerparse.h"
 
 #define TEST_DIR_ROUTER_ID_1 3
 #define TEST_DIR_ROUTER_ID_2 5
diff --git a/src/test/test_dir_handle_get.c b/src/test/test_dir_handle_get.c
index 90ca7d357c5c377b44a6f186012262c180e6c2e7..571b0386e2eb381a3e076c36f3dbd3600a5f31ab 100644
--- a/src/test/test_dir_handle_get.c
+++ b/src/test/test_dir_handle_get.c
@@ -9,37 +9,37 @@
 #define CONFIG_PRIVATE
 #define RENDCACHE_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/consdiffmgr.h"
-#include "or/directory.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "feature/dircache/consdiffmgr.h"
+#include "feature/dircache/directory.h"
 #include "test/test.h"
 #include "lib/compress/compress.h"
-#include "or/rendcommon.h"
-#include "or/rendcache.h"
-#include "or/router.h"
-#include "or/routerlist.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendcache.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
 #include "test/rend_test_helpers.h"
-#include "or/microdesc.h"
+#include "feature/nodelist/microdesc.h"
 #include "test/test_helpers.h"
-#include "or/nodelist.h"
-#include "or/entrynodes.h"
-#include "or/routerparse.h"
-#include "or/networkstatus.h"
-#include "or/proto_http.h"
-#include "or/geoip.h"
-#include "or/dirserv.h"
-#include "or/dirauth/dirvote.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/client/entrynodes.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/networkstatus.h"
+#include "core/proto/proto_http.h"
+#include "feature/stats/geoip.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/dirauth/dirvote.h"
 #include "test/log_test_helpers.h"
-#include "or/voting_schedule.h"
-
-#include "or/dir_connection_st.h"
-#include "or/dir_server_st.h"
-#include "or/networkstatus_st.h"
-#include "or/rend_encoded_v2_service_descriptor_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerlist_st.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/dirclient/dir_server_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/rend/rend_encoded_v2_service_descriptor_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerlist_st.h"
 
 #ifdef _WIN32
 /* For mkdir() */
diff --git a/src/test/test_dns.c b/src/test/test_dns.c
index 1407a5c47e966c61944fe9d3d9d91dcb24102ab1..8369f844f66e1ebbda74241d29cc3153e71268dd 100644
--- a/src/test/test_dns.c
+++ b/src/test/test_dns.c
@@ -1,18 +1,18 @@
 /* Copyright (c) 2015-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
 #define DNS_PRIVATE
 
-#include "or/dns.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/router.h"
+#include "feature/relay/dns.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/relay/router.h"
 
-#include "or/edge_connection_st.h"
-#include "or/or_circuit_st.h"
+#include "core/or/edge_connection_st.h"
+#include "core/or/or_circuit_st.h"
 
 #define NS_MODULE dns
 
diff --git a/src/test/test_dos.c b/src/test/test_dos.c
index 4ba24292ca820d3e3e2a55e268b39178ee5122b7..b411e7b38a80a828015b185add5a86861b1520f9 100644
--- a/src/test/test_dos.c
+++ b/src/test/test_dos.c
@@ -5,20 +5,20 @@
 #define TOR_CHANNEL_INTERNAL_
 #define CIRCUITLIST_PRIVATE
 
-#include "or/or.h"
-#include "or/dos.h"
-#include "or/circuitlist.h"
+#include "core/or/or.h"
+#include "core/or/dos.h"
+#include "core/or/circuitlist.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/geoip.h"
-#include "or/channel.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/routerlist.h"
-
-#include "or/networkstatus_st.h"
-#include "or/or_connection_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/stats/geoip.h"
+#include "core/or/channel.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/routerlist.h"
+
+#include "feature/nodelist/networkstatus_st.h"
+#include "core/or/or_connection_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #include "test/test.h"
 #include "test/log_test_helpers.h"
diff --git a/src/test/test_entryconn.c b/src/test/test_entryconn.c
index b23f12087e569b7d2fdd20c188aee3f2bf59d215..bec70090e6ee656a1e89e577fcedb2cbcbe5d55c 100644
--- a/src/test/test_entryconn.c
+++ b/src/test/test_entryconn.c
@@ -6,21 +6,21 @@
 #define CONNECTION_PRIVATE
 #define CONNECTION_EDGE_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
-#include "or/addressmap.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/nodelist.h"
+#include "feature/client/addressmap.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/nodelist/nodelist.h"
 
-#include "or/hs_cache.h"
-#include "or/rendcache.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/rend/rendcache.h"
 
-#include "or/entry_connection_st.h"
-#include "or/socks_request_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/socks_request_st.h"
 
 #include "lib/encoding/confline.h"
 
diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c
index 9c35cdaaf2f72332d23cb8a44247394a21a53be3..cafdeb6863f01e72cc5a6360aab254c2696b677a 100644
--- a/src/test/test_entrynodes.c
+++ b/src/test/test_entrynodes.c
@@ -10,35 +10,35 @@
 #define ROUTERLIST_PRIVATE
 #define DIRECTORY_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
-#include "or/bridges.h"
-#include "or/circuitlist.h"
-#include "or/circuitbuild.h"
-#include "or/config.h"
-#include "or/confparse.h"
+#include "feature/client/bridges.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitbuild.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/directory.h"
-#include "or/entrynodes.h"
-#include "or/nodelist.h"
-#include "or/networkstatus.h"
-#include "or/policies.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/routerset.h"
-#include "or/statefile.h"
-
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/dir_connection_st.h"
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/or_state_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/dircache/directory.h"
+#include "feature/client/entrynodes.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/networkstatus.h"
+#include "core/or/policies.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/routerset.h"
+#include "app/config/statefile.h"
+
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "app/config/or_state_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #include "test/test_helpers.h"
 #include "test/log_test_helpers.h"
diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c
index 4ddef4e43b56c5299c00f8c13991737e5013f729..ff987563c61c0930552f1c9ef5cde308f87b2231 100644
--- a/src/test/test_extorport.c
+++ b/src/test/test_extorport.c
@@ -4,17 +4,17 @@
 #define CONNECTION_PRIVATE
 #define EXT_ORPORT_PRIVATE
 #define MAIN_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/config.h"
-#include "or/control.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "app/config/config.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/ext_orport.h"
-#include "or/main.h"
+#include "feature/relay/ext_orport.h"
+#include "core/mainloop/main.h"
 
-#include "or/or_connection_st.h"
+#include "core/or/or_connection_st.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_geoip.c b/src/test/test_geoip.c
index 9aa46786ed3a1829616b852b587fa0b8561a1bbf..9df8ea7988099bae7c7c8f0fe95f99f721dd42d8 100644
--- a/src/test/test_geoip.c
+++ b/src/test/test_geoip.c
@@ -8,9 +8,9 @@
 /* These macros pull in declarations for some functions and structures that
  * are typically file-private. */
 #define GEOIP_PRIVATE
-#include "or/or.h"
-#include "or/config.h"
-#include "or/geoip.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/stats/geoip.h"
 #include "test/test.h"
 
   /* Record odd numbered fake-IPs using ipv6, even numbered fake-IPs
diff --git a/src/test/test_guardfraction.c b/src/test/test_guardfraction.c
index 3c293e378bad8228e367cdb752d46b045d62b11a..f45a723295f66a711152a123e24b40adc72bb2e0 100644
--- a/src/test/test_guardfraction.c
+++ b/src/test/test_guardfraction.c
@@ -6,16 +6,16 @@
 #define NETWORKSTATUS_PRIVATE
 
 #include "orconfig.h"
-#include "or/or.h"
-#include "or/config.h"
-#include "or/dirserv.h"
-#include "or/entrynodes.h"
-#include "or/routerparse.h"
-#include "or/networkstatus.h"
-
-#include "or/networkstatus_st.h"
-#include "or/vote_microdesc_hash_st.h"
-#include "or/vote_routerstatus_st.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/dircache/dirserv.h"
+#include "feature/client/entrynodes.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/networkstatus.h"
+
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/dirauth/vote_microdesc_hash_st.h"
+#include "feature/nodelist/vote_routerstatus_st.h"
 
 #include "test/test.h"
 #include "test/test_helpers.h"
diff --git a/src/test/test_helpers.c b/src/test/test_helpers.c
index 6d410af5262e23640ade9fd39caecefc94f22d89..c666bca59aab90deaba00e1163c2fd0c41f5dede 100644
--- a/src/test/test_helpers.c
+++ b/src/test/test_helpers.c
@@ -12,24 +12,24 @@
 #define MAIN_PRIVATE
 
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
 #include "lib/container/buffers.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/connection.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "core/mainloop/connection.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/main.h"
-#include "or/nodelist.h"
-#include "or/relay.h"
-#include "or/routerlist.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/relay.h"
+#include "feature/nodelist/routerlist.h"
 #include "lib/encoding/confline.h"
 
-#include "or/cell_st.h"
-#include "or/connection_st.h"
-#include "or/node_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/routerlist_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/connection_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "feature/nodelist/routerlist_st.h"
 
 #include "test/test.h"
 #include "test/test_helpers.h"
@@ -41,7 +41,7 @@ DISABLE_GCC_WARNING(overlength-strings)
  * at large. */
 #endif
 #include "test_descriptors.inc"
-#include "or/circuitlist.h"
+#include "core/or/circuitlist.h"
 #ifdef HAVE_CFLAG_WOVERLENGTH_STRINGS
 ENABLE_GCC_WARNING(overlength-strings)
 #endif
diff --git a/src/test/test_helpers.h b/src/test/test_helpers.h
index c6339d97fa777101d955c8a999ee827302abc5f5..3196c93e6b1b48e97a2b21e2bb2e71c381ddadf2 100644
--- a/src/test/test_helpers.h
+++ b/src/test/test_helpers.h
@@ -4,7 +4,7 @@
 #ifndef TOR_TEST_HELPERS_H
 #define TOR_TEST_HELPERS_H
 
-#include "or/or.h"
+#include "core/or/or.h"
 
 const char *get_yesterday_date_str(void);
 
diff --git a/src/test/test_hs.c b/src/test/test_hs.c
index b17e8cf21f8083d49c6723260ec0f5729c5f64ea..135df8e9f303d0d44071659def0bb12264a54a74 100644
--- a/src/test/test_hs.c
+++ b/src/test/test_hs.c
@@ -12,21 +12,21 @@
 #define RENDSERVICE_PRIVATE
 #define HS_SERVICE_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
-#include "or/control.h"
-#include "or/config.h"
-#include "or/hs_common.h"
-#include "or/rendcommon.h"
-#include "or/rendservice.h"
-#include "or/routerlist.h"
-#include "or/routerset.h"
-#include "or/circuitbuild.h"
-
-#include "or/node_st.h"
-#include "or/rend_encoded_v2_service_descriptor_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/routerinfo_st.h"
+#include "feature/control/control.h"
+#include "app/config/config.h"
+#include "feature/hs/hs_common.h"
+#include "feature/rend/rendcommon.h"
+#include "feature/rend/rendservice.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerset.h"
+#include "core/or/circuitbuild.h"
+
+#include "feature/nodelist/node_st.h"
+#include "feature/rend/rend_encoded_v2_service_descriptor_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 
 #include "test/test_helpers.h"
 
diff --git a/src/test/test_hs_cache.c b/src/test/test_hs_cache.c
index c22cc46386c3c04e1d1423a1a7fe5921fac842e7..c1a69af829ea703a8fe6db0654f8a58f090a7a9c 100644
--- a/src/test/test_hs_cache.c
+++ b/src/test/test_hs_cache.c
@@ -11,16 +11,16 @@
 #define HS_CACHE_PRIVATE
 
 #include "trunnel/ed25519_cert.h"
-#include "or/hs_cache.h"
-#include "or/rendcache.h"
-#include "or/directory.h"
-#include "or/networkstatus.h"
-#include "or/connection.h"
-#include "or/proto_http.h"
+#include "feature/hs/hs_cache.h"
+#include "feature/rend/rendcache.h"
+#include "feature/dircache/directory.h"
+#include "feature/nodelist/networkstatus.h"
+#include "core/mainloop/connection.h"
+#include "core/proto/proto_http.h"
 #include "lib/crypt_ops/crypto_format.h"
 
-#include "or/dir_connection_st.h"
-#include "or/networkstatus_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/nodelist/networkstatus_st.h"
 
 #include "test/hs_test_helpers.h"
 #include "test/test_helpers.h"
diff --git a/src/test/test_hs_cell.c b/src/test/test_hs_cell.c
index 4bb3c3f77df6f2d0521ad4e96e0d3c8b8dbbf1cc..b47929e8ebffaebb5b6f9bac351a9ee2172ba542 100644
--- a/src/test/test_hs_cell.c
+++ b/src/test/test_hs_cell.c
@@ -15,9 +15,9 @@
 
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/hs_cell.h"
-#include "or/hs_intropoint.h"
-#include "or/hs_service.h"
+#include "feature/hs/hs_cell.h"
+#include "feature/hs/hs_intropoint.h"
+#include "feature/hs/hs_service.h"
 
 /* Trunnel. */
 #include "trunnel/hs/cell_establish_intro.h"
diff --git a/src/test/test_hs_client.c b/src/test/test_hs_client.c
index 1458c358d2acf5e574d88edb8037431e0dea3fe7..57da03ca287453a45db3d57df1ad4e8c65b66eda 100644
--- a/src/test/test_hs_client.c
+++ b/src/test/test_hs_client.c
@@ -20,34 +20,34 @@
 #include "test/rend_test_helpers.h"
 #include "test/hs_test_helpers.h"
 
-#include "or/config.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/crypt_ops/crypto_dh.h"
-#include "or/channeltls.h"
-#include "or/directory.h"
-#include "or/main.h"
-#include "or/nodelist.h"
-#include "or/routerset.h"
-
-#include "or/hs_circuit.h"
-#include "or/hs_circuitmap.h"
-#include "or/hs_client.h"
-#include "or/hs_ident.h"
-#include "or/hs_cache.h"
-#include "or/circuitlist.h"
-#include "or/circuitbuild.h"
-#include "or/connection.h"
-#include "or/connection_edge.h"
-#include "or/networkstatus.h"
-
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/dir_connection_st.h"
-#include "or/entry_connection_st.h"
-#include "or/extend_info_st.h"
-#include "or/networkstatus_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/socks_request_st.h"
+#include "core/or/channeltls.h"
+#include "feature/dircache/directory.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/routerset.h"
+
+#include "feature/hs/hs_circuit.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/hs/hs_cache.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuitbuild.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_edge.h"
+#include "feature/nodelist/networkstatus.h"
+
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "core/or/socks_request_st.h"
 
 static int
 mock_connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
diff --git a/src/test/test_hs_common.c b/src/test/test_hs_common.c
index 4c39570e306171c6c34eaaa2b24a0e787bd00670..f17cc8aeb38de87b806260acebdc3cf722335b90 100644
--- a/src/test/test_hs_common.c
+++ b/src/test/test_hs_common.c
@@ -16,29 +16,29 @@
 #include "test/log_test_helpers.h"
 #include "test/hs_test_helpers.h"
 
-#include "or/connection_edge.h"
+#include "core/or/connection_edge.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/hs_common.h"
-#include "or/hs_client.h"
-#include "or/hs_service.h"
-#include "or/config.h"
-#include "or/networkstatus.h"
-#include "or/directory.h"
-#include "or/dirauth/dirvote.h"
-#include "or/nodelist.h"
-#include "or/routerlist.h"
-#include "or/statefile.h"
-#include "or/circuitlist.h"
-#include "or/dirauth/shared_random.h"
-#include "or/voting_schedule.h"
-
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/or_state_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_client.h"
+#include "feature/hs/hs_service.h"
+#include "app/config/config.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/dircache/directory.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/routerlist.h"
+#include "app/config/statefile.h"
+#include "core/or/circuitlist.h"
+#include "feature/dirauth/shared_random.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "app/config/or_state_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /** Test the validation of HS v3 addresses */
 static void
diff --git a/src/test/test_hs_config.c b/src/test/test_hs_config.c
index 33ad09313c4f216c97090db56c54afc27d2aa174..498d2df197bdf86c0ca9c0c001e1aa1f42e45fce 100644
--- a/src/test/test_hs_config.c
+++ b/src/test/test_hs_config.c
@@ -13,11 +13,11 @@
 #include "test/test_helpers.h"
 #include "test/log_test_helpers.h"
 
-#include "or/config.h"
-#include "or/hs_common.h"
-#include "or/hs_config.h"
-#include "or/hs_service.h"
-#include "or/rendservice.h"
+#include "app/config/config.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_config.h"
+#include "feature/hs/hs_service.h"
+#include "feature/rend/rendservice.h"
 
 static int
 helper_config_service(const char *conf, int validate_only)
diff --git a/src/test/test_hs_control.c b/src/test/test_hs_control.c
index 6e5e783372534d349f78d12633f0c939e382c5cf..48402030bf91b6016f85caf12f4ade9e263cbe6d 100644
--- a/src/test/test_hs_control.c
+++ b/src/test/test_hs_control.c
@@ -8,16 +8,16 @@
 
 #define CONTROL_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
-#include "or/control.h"
-#include "or/config.h"
-#include "or/hs_common.h"
-#include "or/hs_control.h"
-#include "or/nodelist.h"
-
-#include "or/node_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/control/control.h"
+#include "app/config/config.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_control.h"
+#include "feature/nodelist/nodelist.h"
+
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 #include "lib/crypt_ops/crypto_format.h"
 
 #include "test/test_helpers.h"
diff --git a/src/test/test_hs_descriptor.c b/src/test/test_hs_descriptor.c
index a017facd2c5b907e3a6ce0abe83581edfe16d262..9a7e66eaead8fef5c459026d87b2fc49e988772c 100644
--- a/src/test/test_hs_descriptor.c
+++ b/src/test/test_hs_descriptor.c
@@ -13,10 +13,10 @@
 #include "lib/crypt_ops/crypto_digest.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "trunnel/ed25519_cert.h"
-#include "or/or.h"
-#include "or/hs_descriptor.h"
+#include "core/or/or.h"
+#include "feature/hs/hs_descriptor.h"
 #include "test/test.h"
-#include "or/torcert.h"
+#include "feature/nodelist/torcert.h"
 
 #include "test/hs_test_helpers.h"
 #include "test/test_helpers.h"
diff --git a/src/test/test_hs_intropoint.c b/src/test/test_hs_intropoint.c
index 2445a8fcf1d2eef01865b999e39f3af0b6c39db3..7da376471bc671d68f1121b71b9ec7ce48393e0b 100644
--- a/src/test/test_hs_intropoint.c
+++ b/src/test/test_hs_intropoint.c
@@ -15,20 +15,20 @@
 #include "test/log_test_helpers.h"
 #include "lib/crypt_ops/crypto_rand.h"
 
-#include "or/or.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
+#include "core/or/or.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
 #include "ht.h"
-#include "or/relay.h"
-#include "or/rendservice.h"
+#include "core/or/relay.h"
+#include "feature/rend/rendservice.h"
 
-#include "or/hs_cell.h"
-#include "or/hs_circuitmap.h"
-#include "or/hs_common.h"
-#include "or/hs_intropoint.h"
-#include "or/hs_service.h"
+#include "feature/hs/hs_cell.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_intropoint.h"
+#include "feature/hs/hs_service.h"
 
-#include "or/or_circuit_st.h"
+#include "core/or/or_circuit_st.h"
 
 /* Trunnel. */
 #include "trunnel/hs/cell_establish_intro.h"
diff --git a/src/test/test_hs_ntor.c b/src/test/test_hs_ntor.c
index c524409003230dc847778ab4b1d5e93e8466d3f2..eeb0491657d4cd64e26c163b4a15f664f692200c 100644
--- a/src/test/test_hs_ntor.c
+++ b/src/test/test_hs_ntor.c
@@ -12,7 +12,7 @@
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 
-#include "or/hs_ntor.h"
+#include "core/crypto/hs_ntor.h"
 
 /* Test the HS ntor handshake. Simulate the sending of an encrypted INTRODUCE1
  * cell, and verify the proper derivation of decryption keys on the other end.
diff --git a/src/test/test_hs_ntor_cl.c b/src/test/test_hs_ntor_cl.c
index 8643897db5e12025712eee9e7d0f6ccb2255debb..03e34968be77bc9e91a88bad461ce4547b9230b0 100644
--- a/src/test/test_hs_ntor_cl.c
+++ b/src/test/test_hs_ntor_cl.c
@@ -13,13 +13,13 @@
 #include <stdlib.h>
 
 #define ONION_NTOR_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "lib/crypt_ops/crypto_format.h"
-#include "or/hs_ntor.h"
-#include "or/onion_ntor.h"
+#include "core/crypto/hs_ntor.h"
+#include "core/crypto/onion_ntor.h"
 
 #define N_ARGS(n) STMT_BEGIN {                                  \
     if (argc < (n)) {                                           \
diff --git a/src/test/test_hs_service.c b/src/test/test_hs_service.c
index e81a5eff4fbe3adde2e4d40dd1b3d20b642b4550..8074d260a49b5b9fbea34687750da0141c5ff277 100644
--- a/src/test/test_hs_service.c
+++ b/src/test/test_hs_service.c
@@ -28,39 +28,39 @@
 #include "test/rend_test_helpers.h"
 #include "test/hs_test_helpers.h"
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/circuituse.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/circuituse.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/dirauth/dirvote.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/relay.h"
-#include "or/routerparse.h"
-#include "or/hs_common.h"
-#include "or/hs_config.h"
-#include "or/hs_ident.h"
-#include "or/hs_intropoint.h"
-#include "or/hs_ntor.h"
-#include "or/hs_circuit.h"
-#include "or/hs_circuitmap.h"
-#include "or/hs_service.h"
-#include "or/hs_client.h"
-#include "or/main.h"
-#include "or/rendservice.h"
-#include "or/statefile.h"
-#include "or/dirauth/shared_random_state.h"
-#include "or/voting_schedule.h"
-
-#include "or/cpath_build_state_st.h"
-#include "or/crypt_path_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/or_state_st.h"
-#include "or/routerinfo_st.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/relay.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/hs/hs_common.h"
+#include "feature/hs/hs_config.h"
+#include "feature/hs/hs_ident.h"
+#include "feature/hs/hs_intropoint.h"
+#include "core/crypto/hs_ntor.h"
+#include "feature/hs/hs_circuit.h"
+#include "feature/hs/hs_circuitmap.h"
+#include "feature/hs/hs_service.h"
+#include "feature/hs/hs_client.h"
+#include "core/mainloop/main.h"
+#include "feature/rend/rendservice.h"
+#include "app/config/statefile.h"
+#include "feature/dirauth/shared_random_state.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "core/or/cpath_build_state_st.h"
+#include "core/or/crypt_path_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "app/config/or_state_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 
 /* Trunnel */
 #include "trunnel/hs/cell_establish_intro.h"
diff --git a/src/test/test_introduce.c b/src/test/test_introduce.c
index f62c7f880833321291c15d2e1ca1f1da3eeb149a..cdfb70bdffcbc4fea8d4270bb265757eaacf531e 100644
--- a/src/test/test_introduce.c
+++ b/src/test/test_introduce.c
@@ -3,11 +3,11 @@
 
 #include "orconfig.h"
 #include "lib/crypt_ops/crypto.h"
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
 #define RENDSERVICE_PRIVATE
-#include "or/rendservice.h"
+#include "feature/rend/rendservice.h"
 
 static uint8_t v0_test_plaintext[] =
     /* 20 bytes of rendezvous point nickname */
diff --git a/src/test/test_keypin.c b/src/test/test_keypin.c
index e7897a8473586720edd01cd06adda211b1bd24e9..9af12ff548ab52c551daf4ecad8f26f423f62d05 100644
--- a/src/test/test_keypin.c
+++ b/src/test/test_keypin.c
@@ -3,8 +3,8 @@
 
 #include "orconfig.h"
 #define KEYPIN_PRIVATE
-#include "or/or.h"
-#include "or/keypin.h"
+#include "core/or/or.h"
+#include "feature/dirauth/keypin.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_link_handshake.c b/src/test/test_link_handshake.c
index 515fdc50a734d2bc9e41357f6280dd3a10a033a4..e0d12fb4728b2de0133fae3e43182734e45cf421 100644
--- a/src/test/test_link_handshake.c
+++ b/src/test/test_link_handshake.c
@@ -8,21 +8,21 @@
 #define TOR_CHANNEL_INTERNAL_
 #define TORTLS_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/channeltls.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "core/or/channeltls.h"
 #include "trunnel/link_handshake.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/scheduler.h"
-#include "or/torcert.h"
-
-#include "or/or_connection_st.h"
-#include "or/or_handshake_certs_st.h"
-#include "or/or_handshake_state_st.h"
-#include "or/var_cell_st.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "core/or/scheduler.h"
+#include "feature/nodelist/torcert.h"
+
+#include "core/or/or_connection_st.h"
+#include "core/or/or_handshake_certs_st.h"
+#include "core/or/or_handshake_state_st.h"
+#include "core/or/var_cell_st.h"
 
 #include "lib/tls/tortls.h"
 
diff --git a/src/test/test_logging.c b/src/test/test_logging.c
index 48cdf2e6bce1fecd1d9110cd5b39d7c51940b2f2..2e3b8800ac9d24e37918da219741b64b5b867dfb 100644
--- a/src/test/test_logging.c
+++ b/src/test/test_logging.c
@@ -4,8 +4,8 @@
 #define CONFIG_PRIVATE
 
 #include "orconfig.h"
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 #include "lib/err/torerr.h"
 #include "lib/log/torlog.h"
 #include "test/test.h"
diff --git a/src/test/test_mainloop.c b/src/test/test_mainloop.c
index 469820b59114e531471b0d2dfdc186a0cdd448c0..f85c224ae9a88bac37c7aa3cc5579b78523edf12 100644
--- a/src/test/test_mainloop.c
+++ b/src/test/test_mainloop.c
@@ -9,8 +9,8 @@
 #include "test/test.h"
 #include "test/log_test_helpers.h"
 
-#include "or/or.h"
-#include "or/main.h"
+#include "core/or/or.h"
+#include "core/mainloop/main.h"
 
 static const uint64_t BILLION = 1000000000;
 
diff --git a/src/test/test_microdesc.c b/src/test/test_microdesc.c
index 2038f549845c15d9db3fa95407a6a7c1e042c3fb..ec4779ead1e2db488e808be590c5f5056fa348bc 100644
--- a/src/test/test_microdesc.c
+++ b/src/test/test_microdesc.c
@@ -2,21 +2,21 @@
 /* See LICENSE for licensing information */
 
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
-#include "or/config.h"
+#include "app/config/config.h"
 #define DIRVOTE_PRIVATE
-#include "or/dirauth/dirvote.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/torcert.h"
-
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/nodelist/torcert.h"
+
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_nodelist.c b/src/test/test_nodelist.c
index 1dc8bc2d24ad404649dad46e0e957e46108b80bf..cdd5e95cf09051730907f48a06f57871ad7affa1 100644
--- a/src/test/test_nodelist.c
+++ b/src/test/test_nodelist.c
@@ -6,17 +6,17 @@
  * \brief Unit tests for nodelist related functions.
  **/
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/torcert.h"
-
-#include "or/microdesc_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "feature/nodelist/torcert.h"
+
+#include "feature/nodelist/microdesc_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_ntor_cl.c b/src/test/test_ntor_cl.c
index 5711a9116a5f7c86bacd1da9bf50ce2763252b78..744b42c9d926593fc7038505049f178975199d5e 100644
--- a/src/test/test_ntor_cl.c
+++ b/src/test/test_ntor_cl.c
@@ -6,10 +6,10 @@
 #include <stdlib.h>
 
 #define ONION_NTOR_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
-#include "or/onion_ntor.h"
+#include "core/crypto/onion_ntor.h"
 
 #define N_ARGS(n) STMT_BEGIN {                                  \
     if (argc < (n)) {                                           \
diff --git a/src/test/test_oom.c b/src/test/test_oom.c
index 6c3ee1a27bf4768c20f911e448252430f322550b..313a6b3114aea6776bc9a2b5742e9aa69f48d5b2 100644
--- a/src/test/test_oom.c
+++ b/src/test/test_oom.c
@@ -7,21 +7,21 @@
 #define BUFFERS_PRIVATE
 #define CIRCUITLIST_PRIVATE
 #define CONNECTION_PRIVATE
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/circuitlist.h"
+#include "core/or/circuitlist.h"
 #include "lib/evloop/compat_libevent.h"
-#include "or/connection.h"
-#include "or/config.h"
+#include "core/mainloop/connection.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/relay.h"
+#include "core/or/relay.h"
 #include "test/test.h"
 #include "test/test_helpers.h"
 
-#include "or/cell_st.h"
-#include "or/entry_connection_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 /* small replacement mock for circuit_mark_for_close_ to avoid doing all
  * the other bookkeeping that comes with marking circuits. */
diff --git a/src/test/test_oos.c b/src/test/test_oos.c
index f101390d6769ed8a57f9ee0e49672df37b770c22..5f9942d8ae0e2f0ff66d372eeceb78fe02a4200c 100644
--- a/src/test/test_oos.c
+++ b/src/test/test_oos.c
@@ -5,16 +5,16 @@
 
 #define CONNECTION_PRIVATE
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/connection_or.h"
-#include "or/directory.h"
-#include "or/main.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/or/connection_or.h"
+#include "feature/dircache/directory.h"
+#include "core/mainloop/main.h"
 #include "test/test.h"
 
-#include "or/dir_connection_st.h"
-#include "or/or_connection_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "core/or/or_connection_st.h"
 
 static or_options_t mock_options;
 
diff --git a/src/test/test_options.c b/src/test/test_options.c
index f2aaf30c23ffe1c819456272447ded3dac3634a6..396965401eb6ed8a9678776cc475bcc583ae09b4 100644
--- a/src/test/test_options.c
+++ b/src/test/test_options.c
@@ -4,22 +4,22 @@
 /* See LICENSE for licensing information */
 
 #define CONFIG_PRIVATE
-#include "or/or.h"
-#include "or/confparse.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/confparse.h"
+#include "app/config/config.h"
 #include "test/test.h"
-#include "or/geoip.h"
+#include "feature/stats/geoip.h"
 
 #define ROUTERSET_PRIVATE
-#include "or/routerset.h"
-#include "or/main.h"
+#include "feature/nodelist/routerset.h"
+#include "core/mainloop/main.h"
 #include "test/log_test_helpers.h"
 
 #include "lib/sandbox/sandbox.h"
 #include "lib/memarea/memarea.h"
 #include "lib/osinfo/uname.h"
 #include "lib/encoding/confline.h"
-#include "or/policies.h"
+#include "core/or/policies.h"
 #include "test/test_helpers.h"
 
 #define NS_MODULE test_options
diff --git a/src/test/test_periodic_event.c b/src/test/test_periodic_event.c
index b353cf87a3409f9f259967a91727c0b36d63b9c0..03ba3df7937306ff0b982cdcbbaf896cc620abb9 100644
--- a/src/test/test_periodic_event.c
+++ b/src/test/test_periodic_event.c
@@ -14,12 +14,12 @@
 #include "test/test.h"
 #include "test/test_helpers.h"
 
-#include "or/or.h"
-#include "or/config.h"
-#include "or/hibernate.h"
-#include "or/hs_service.h"
-#include "or/main.h"
-#include "or/periodic.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/hs/hs_service.h"
+#include "core/mainloop/main.h"
+#include "core/mainloop/periodic.h"
 
 /** Helper function: This is replaced in some tests for the event callbacks so
  * we don't actually go into the code path of those callbacks. */
diff --git a/src/test/test_policy.c b/src/test/test_policy.c
index a6906af41f7de8d558e8bf99d0a6e95ec86c50a8..4b1adc91f09475b25ba11ff5758900a42d1b26dc 100644
--- a/src/test/test_policy.c
+++ b/src/test/test_policy.c
@@ -1,21 +1,21 @@
 /* Copyright (c) 2013-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #define CONFIG_PRIVATE
-#include "or/config.h"
-#include "or/router.h"
-#include "or/routerparse.h"
+#include "app/config/config.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerparse.h"
 #define POLICIES_PRIVATE
-#include "or/policies.h"
+#include "core/or/policies.h"
 #include "lib/encoding/confline.h"
 #include "test/test.h"
 
-#include "or/addr_policy_st.h"
-#include "or/node_st.h"
-#include "or/port_cfg_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/addr_policy_st.h"
+#include "feature/nodelist/node_st.h"
+#include "core/or/port_cfg_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 /* Helper: assert that short_policy parses and writes back out as itself,
    or as <b>expected</b> if that's provided. */
diff --git a/src/test/test_procmon.c b/src/test/test_procmon.c
index e2915d0fb4e7f282841d208de145bc66484e5dea..2c7918f580e2276bd7ccb769e01eb748c25e8231 100644
--- a/src/test/test_procmon.c
+++ b/src/test/test_procmon.c
@@ -3,7 +3,7 @@
 
 #define PROCMON_PRIVATE
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
 #include "lib/evloop/procmon.h"
diff --git a/src/test/test_proto_http.c b/src/test/test_proto_http.c
index 57bfe246332fcf926d1e6b3d6cfb2fa805f49610..1cfa0a752c9817b4334d6631424aaec54f5bcf53 100644
--- a/src/test/test_proto_http.c
+++ b/src/test/test_proto_http.c
@@ -6,10 +6,10 @@
  * \brief Tests for our HTTP protocol parser code
  */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #include "lib/container/buffers.h"
-#include "or/proto_http.h"
+#include "core/proto/proto_http.h"
 #include "test/log_test_helpers.h"
 
 #define S(str) str, sizeof(str)-1
diff --git a/src/test/test_proto_misc.c b/src/test/test_proto_misc.c
index 7f066e14adec3f75b06a76e2d14f6dc1cf1f6a09..1fcb76342124e4b818419cf50884419455d22e08 100644
--- a/src/test/test_proto_misc.c
+++ b/src/test/test_proto_misc.c
@@ -6,16 +6,16 @@
  * \brief Test our smaller buffer-based protocol functions
  */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 #include "lib/container/buffers.h"
-#include "or/connection_or.h"
-#include "or/ext_orport.h"
-#include "or/proto_cell.h"
-#include "or/proto_control0.h"
-#include "or/proto_ext_or.h"
+#include "core/or/connection_or.h"
+#include "feature/relay/ext_orport.h"
+#include "core/proto/proto_cell.h"
+#include "core/proto/proto_control0.h"
+#include "core/proto/proto_ext_or.h"
 
-#include "or/var_cell_st.h"
+#include "core/or/var_cell_st.h"
 
 static void
 test_proto_var_cell(void *arg)
diff --git a/src/test/test_protover.c b/src/test/test_protover.c
index f17f68ced28e3a84f5fa3ed7cbfdf82a099af743..a90ff5a08c5cd61ac86b0d078bbc2e14fdb889a5 100644
--- a/src/test/test_protover.c
+++ b/src/test/test_protover.c
@@ -6,10 +6,10 @@
 #include "orconfig.h"
 #include "test/test.h"
 
-#include "or/protover.h"
+#include "core/proto/protover.h"
 
-#include "or/or.h"
-#include "or/connection_or.h"
+#include "core/or/or.h"
+#include "core/or/connection_or.h"
 
 static void
 test_protover_parse(void *arg)
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
index 189cb2584642a0d6493a5b12aaafb7e198f66c2b..dea3791da2a073eddf69eb59c77e31c4731fbf44 100644
--- a/src/test/test_pt.c
+++ b/src/test/test_pt.c
@@ -9,18 +9,18 @@
 #define STATEFILE_PRIVATE
 #define CONTROL_PRIVATE
 #define SUBPROCESS_PRIVATE
-#include "or/or.h"
-#include "or/config.h"
-#include "or/confparse.h"
-#include "or/control.h"
-#include "or/transports.h"
-#include "or/circuitbuild.h"
-#include "or/statefile.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "app/config/confparse.h"
+#include "feature/control/control.h"
+#include "feature/client/transports.h"
+#include "core/or/circuitbuild.h"
+#include "app/config/statefile.h"
 #include "test/test.h"
 #include "lib/process/subprocess.h"
 #include "lib/encoding/confline.h"
 
-#include "or/or_state_st.h"
+#include "app/config/or_state_st.h"
 
 static void
 reset_mp(managed_proxy_t *mp)
diff --git a/src/test/test_relay.c b/src/test/test_relay.c
index fe5795d11da96767c2206cb56e79a39683d47414..25084fab3775147273e1a5ec67e9a48c28a70c9c 100644
--- a/src/test/test_relay.c
+++ b/src/test/test_relay.c
@@ -1,17 +1,17 @@
 /* Copyright (c) 2014-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #define CIRCUITBUILD_PRIVATE
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
 #define RELAY_PRIVATE
-#include "or/relay.h"
+#include "core/or/relay.h"
 /* For init/free stuff */
-#include "or/scheduler.h"
+#include "core/or/scheduler.h"
 
-#include "or/cell_st.h"
-#include "or/or_circuit_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/or_circuit_st.h"
 
 /* Test suite stuff */
 #include "test/test.h"
diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c
index 9f314b7704682effccf9b1228cb78460e7a4e8c5..eb30cab0ecffc02aa8593d7e02118146c9315bd2 100644
--- a/src/test/test_relaycell.c
+++ b/src/test/test_relaycell.c
@@ -5,22 +5,22 @@
 
 #define RELAY_PRIVATE
 #define CIRCUITLIST_PRIVATE
-#include "or/or.h"
-#include "or/main.h"
-#include "or/config.h"
-#include "or/connection.h"
+#include "core/or/or.h"
+#include "core/mainloop/main.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
 #include "lib/crypt_ops/crypto.h"
-#include "or/circuitbuild.h"
-#include "or/circuitlist.h"
-#include "or/connection_edge.h"
-#include "or/relay.h"
+#include "core/or/circuitbuild.h"
+#include "core/or/circuitlist.h"
+#include "core/or/connection_edge.h"
+#include "core/or/relay.h"
 #include "test/test.h"
 
-#include "or/cell_st.h"
-#include "or/crypt_path_st.h"
-#include "or/entry_connection_st.h"
-#include "or/origin_circuit_st.h"
-#include "or/socks_request_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/crypt_path_st.h"
+#include "core/or/entry_connection_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "core/or/socks_request_st.h"
 
 static int srm_ncalls;
 static entry_connection_t *srm_conn;
diff --git a/src/test/test_relaycrypt.c b/src/test/test_relaycrypt.c
index 7f0ca06983c5de49d3b05a76ab569ad4c12359b4..c3cfb7d10b84c0456028c3d112813d78f154db67 100644
--- a/src/test/test_relaycrypt.c
+++ b/src/test/test_relaycrypt.c
@@ -3,17 +3,17 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
-#include "or/circuitbuild.h"
+#include "core/or/or.h"
+#include "core/or/circuitbuild.h"
 #define CIRCUITLIST_PRIVATE
-#include "or/circuitlist.h"
+#include "core/or/circuitlist.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/relay.h"
-#include "or/relay_crypto.h"
+#include "core/or/relay.h"
+#include "core/crypto/relay_crypto.h"
 
-#include "or/cell_st.h"
-#include "or/or_circuit_st.h"
-#include "or/origin_circuit_st.h"
+#include "core/or/cell_st.h"
+#include "core/or/or_circuit_st.h"
+#include "core/or/origin_circuit_st.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_rendcache.c b/src/test/test_rendcache.c
index 3d606aac0d836bbf79d32dd02053cb69d083c28d..394e28d78572ce3b0dd27936726d7241ac75bb5a 100644
--- a/src/test/test_rendcache.c
+++ b/src/test/test_rendcache.c
@@ -2,21 +2,21 @@
 /* See LICENSE for licensing information */
 
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
 #include "test/test.h"
 #define RENDCACHE_PRIVATE
-#include "or/rendcache.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/config.h"
-#include "or/hs_common.h"
-
-#include "or/extend_info_st.h"
-#include "or/rend_encoded_v2_service_descriptor_st.h"
-#include "or/rend_intro_point_st.h"
-#include "or/rend_service_descriptor_st.h"
-#include "or/routerinfo_st.h"
+#include "feature/rend/rendcache.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "app/config/config.h"
+#include "feature/hs/hs_common.h"
+
+#include "core/or/extend_info_st.h"
+#include "feature/rend/rend_encoded_v2_service_descriptor_st.h"
+#include "feature/rend/rend_intro_point_st.h"
+#include "feature/rend/rend_service_descriptor_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 
 #include "test/rend_test_helpers.h"
 #include "test/log_test_helpers.h"
diff --git a/src/test/test_replay.c b/src/test/test_replay.c
index 7f9c0b09e4a8d029e63d8000ab12f08e2c3f1d2f..bca3a6660aec44bc8d592f5caca4e2e63c9880db 100644
--- a/src/test/test_replay.c
+++ b/src/test/test_replay.c
@@ -4,8 +4,8 @@
 #define REPLAYCACHE_PRIVATE
 
 #include "orconfig.h"
-#include "or/or.h"
-#include "or/replaycache.h"
+#include "core/or/or.h"
+#include "feature/hs_common/replaycache.h"
 #include "test/test.h"
 
 static const char *test_buffer =
diff --git a/src/test/test_router.c b/src/test/test_router.c
index 6e9424a3ad599839d8dbe09e204cdc7f55773e2c..a398c7497b99fee53f07ef5043f33e71b5b131b0 100644
--- a/src/test/test_router.c
+++ b/src/test/test_router.c
@@ -7,14 +7,14 @@
  * \brief Unittests for code in src/or/router.c
  **/
 
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
-#include "or/router.h"
-#include "or/routerlist.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
 
-#include "or/routerinfo_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 
 /* Test suite stuff */
 #include "test/test.h"
diff --git a/src/test/test_routerkeys.c b/src/test/test_routerkeys.c
index 2a761ad6e161e63883889333e08453c728a702c5..1a1bf63ba094bd639a5444cc2acb1ee472c8cacc 100644
--- a/src/test/test_routerkeys.c
+++ b/src/test/test_routerkeys.c
@@ -5,13 +5,13 @@
 
 #include "orconfig.h"
 #define ROUTER_PRIVATE
-#include "or/or.h"
-#include "or/config.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
 #include "lib/crypt_ops/crypto.h"
 #include "lib/crypt_ops/crypto_format.h"
-#include "or/torcert.h"
+#include "feature/nodelist/torcert.h"
 #include "test/test.h"
 
 #ifdef _WIN32
diff --git a/src/test/test_routerlist.c b/src/test/test_routerlist.c
index b25a0be9a4556e080ae6e90b231e2bbc7fae70a5..89d1f4f90f8275e3f248b70a8ff7f7e497c8b0e3 100644
--- a/src/test/test_routerlist.c
+++ b/src/test/test_routerlist.c
@@ -13,32 +13,32 @@
 #define NETWORKSTATUS_PRIVATE
 #define ROUTERLIST_PRIVATE
 #define TOR_UNIT_TESTING
-#include "or/or.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/control.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "feature/control/control.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/directory.h"
-#include "or/dirauth/dirvote.h"
-#include "or/entrynodes.h"
-#include "or/hibernate.h"
-#include "or/microdesc.h"
-#include "or/networkstatus.h"
-#include "or/nodelist.h"
-#include "or/policies.h"
-#include "or/router.h"
-#include "or/routerlist.h"
-#include "or/routerset.h"
-#include "or/routerparse.h"
-#include "or/dirauth/shared_random.h"
-#include "or/statefile.h"
-
-#include "or/authority_cert_st.h"
-#include "or/dir_connection_st.h"
-#include "or/networkstatus_st.h"
-#include "or/node_st.h"
-#include "or/or_state_st.h"
-#include "or/routerstatus_st.h"
+#include "feature/dircache/directory.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/client/entrynodes.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/nodelist/microdesc.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/nodelist/nodelist.h"
+#include "core/or/policies.h"
+#include "feature/relay/router.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/dirauth/shared_random.h"
+#include "app/config/statefile.h"
+
+#include "feature/nodelist/authority_cert_st.h"
+#include "feature/dircommon/dir_connection_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "feature/nodelist/node_st.h"
+#include "app/config/or_state_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #include "lib/encoding/confline.h"
 #include "lib/container/buffers.h"
diff --git a/src/test/test_routerset.c b/src/test/test_routerset.c
index ea8b43498ec32692a1d67bc2574203811f2ce245..2017ef00508388dc57ecfc4edc47ea120e21c0a1 100644
--- a/src/test/test_routerset.c
+++ b/src/test/test_routerset.c
@@ -3,18 +3,18 @@
 
 #define ROUTERSET_PRIVATE
 
-#include "or/or.h"
-#include "or/geoip.h"
-#include "or/routerset.h"
-#include "or/routerparse.h"
-#include "or/policies.h"
-#include "or/nodelist.h"
-
-#include "or/addr_policy_st.h"
-#include "or/extend_info_st.h"
-#include "or/node_st.h"
-#include "or/routerinfo_st.h"
-#include "or/routerstatus_st.h"
+#include "core/or/or.h"
+#include "feature/stats/geoip.h"
+#include "feature/nodelist/routerset.h"
+#include "feature/nodelist/routerparse.h"
+#include "core/or/policies.h"
+#include "feature/nodelist/nodelist.h"
+
+#include "core/or/addr_policy_st.h"
+#include "core/or/extend_info_st.h"
+#include "feature/nodelist/node_st.h"
+#include "feature/nodelist/routerinfo_st.h"
+#include "feature/nodelist/routerstatus_st.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c
index 555a2a6bfd9ea7803ca0cd7e77d3859ffc71671a..2d562299ab70fee02bb5d7aba861f1dafcf60d94 100644
--- a/src/test/test_scheduler.c
+++ b/src/test/test_scheduler.c
@@ -8,15 +8,15 @@
 #define SCHEDULER_KIST_PRIVATE
 #define TOR_CHANNEL_INTERNAL_
 #define CHANNEL_PRIVATE_
-#include "or/or.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "app/config/config.h"
 #include "lib/evloop/compat_libevent.h"
-#include "or/channel.h"
-#include "or/channeltls.h"
-#include "or/connection.h"
-#include "or/networkstatus.h"
+#include "core/or/channel.h"
+#include "core/or/channeltls.h"
+#include "core/mainloop/connection.h"
+#include "feature/nodelist/networkstatus.h"
 #define SCHEDULER_PRIVATE_
-#include "or/scheduler.h"
+#include "core/or/scheduler.h"
 
 /* Test suite stuff */
 #include "test/test.h"
diff --git a/src/test/test_shared_random.c b/src/test/test_shared_random.c
index 1b4fdc899240493386d947a537e1778faed9d77f..ccf051606f26faf305572fc1309d34f66cf4ff86 100644
--- a/src/test/test_shared_random.c
+++ b/src/test/test_shared_random.c
@@ -6,25 +6,25 @@
 #define CONFIG_PRIVATE
 #define DIRVOTE_PRIVATE
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
-#include "or/config.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/dirauth/dirvote.h"
-#include "or/dirauth/shared_random.h"
-#include "or/dirauth/shared_random_state.h"
+#include "feature/dirauth/dirvote.h"
+#include "feature/dirauth/shared_random.h"
+#include "feature/dirauth/shared_random_state.h"
 #include "test/log_test_helpers.h"
-#include "or/networkstatus.h"
-#include "or/router.h"
-#include "or/routerkeys.h"
-#include "or/routerlist.h"
-#include "or/routerparse.h"
-#include "or/shared_random_client.h"
-#include "or/voting_schedule.h"
-
-#include "or/dir_server_st.h"
-#include "or/networkstatus_st.h"
-#include "or/or_state_st.h"
+#include "feature/nodelist/networkstatus.h"
+#include "feature/relay/router.h"
+#include "feature/relay/routerkeys.h"
+#include "feature/nodelist/routerlist.h"
+#include "feature/nodelist/routerparse.h"
+#include "feature/hs_common/shared_random_client.h"
+#include "feature/dircommon/voting_schedule.h"
+
+#include "feature/dirclient/dir_server_st.h"
+#include "feature/nodelist/networkstatus_st.h"
+#include "app/config/or_state_st.h"
 
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
diff --git a/src/test/test_slow.c b/src/test/test_slow.c
index 951851ec07080f3107b50162209f76bf57f85dcf..0b665363abfc75762daf56762bd33ab8b9b2953b 100644
--- a/src/test/test_slow.c
+++ b/src/test/test_slow.c
@@ -15,7 +15,7 @@
 #include <fcntl.h>
 #endif
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
 struct testgroup_t testgroups[] = {
diff --git a/src/test/test_socks.c b/src/test/test_socks.c
index 0a01bf64311b67737c67b5a070b78ba2c42398e2..e064cc8db17824da8f54a08680d1bd64c7ab2cef 100644
--- a/src/test/test_socks.c
+++ b/src/test/test_socks.c
@@ -3,14 +3,14 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/config.h"
-#include "or/connection.h"
-#include "or/proto_socks.h"
+#include "app/config/config.h"
+#include "core/mainloop/connection.h"
+#include "core/proto/proto_socks.h"
 #include "test/test.h"
 #include "test/log_test_helpers.h"
-#include "or/socks_request_st.h"
+#include "core/or/socks_request_st.h"
 #include "lib/net/socks5_status.h"
 
 typedef struct socks_test_data_t {
diff --git a/src/test/test_status.c b/src/test/test_status.c
index c92ba48e2f9fc048ba83c0577bb6f3782f769499..3cc23955ad7c234e0e5355d142ab6aed7e4b7028 100644
--- a/src/test/test_status.c
+++ b/src/test/test_status.c
@@ -11,24 +11,24 @@
 #include <float.h>
 #include <math.h>
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/log/torlog.h"
 #include "tor_queue.h"
-#include "or/status.h"
-#include "or/circuitlist.h"
-#include "or/config.h"
-#include "or/hibernate.h"
-#include "or/rephist.h"
-#include "or/relay.h"
-#include "or/router.h"
-#include "or/main.h"
-#include "or/nodelist.h"
-#include "or/statefile.h"
+#include "core/or/status.h"
+#include "core/or/circuitlist.h"
+#include "app/config/config.h"
+#include "feature/hibernate/hibernate.h"
+#include "feature/stats/rephist.h"
+#include "core/or/relay.h"
+#include "feature/relay/router.h"
+#include "core/mainloop/main.h"
+#include "feature/nodelist/nodelist.h"
+#include "app/config/statefile.h"
 #include "lib/tls/tortls.h"
 
-#include "or/origin_circuit_st.h"
-#include "or/or_state_st.h"
-#include "or/routerinfo_st.h"
+#include "core/or/origin_circuit_st.h"
+#include "app/config/or_state_st.h"
+#include "feature/nodelist/routerinfo_st.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_storagedir.c b/src/test/test_storagedir.c
index efb6a0027ad7907668f5fa6ab3b00325cf9b6675..68cee418ad4829dca560a97e996cb1c939184f0c 100644
--- a/src/test/test_storagedir.c
+++ b/src/test/test_storagedir.c
@@ -1,7 +1,7 @@
 /* Copyright (c) 2017-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "lib/fs/storagedir.h"
 #include "lib/encoding/confline.h"
diff --git a/src/test/test_switch_id.c b/src/test/test_switch_id.c
index 95801822f9af78eaca7f5aea3bc0af1c551c7eb3..d8a1d15e4e60e4b407fb749ff8d03d758e5d508e 100644
--- a/src/test/test_switch_id.c
+++ b/src/test/test_switch_id.c
@@ -1,7 +1,7 @@
 /* Copyright (c) 2015-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/process/setuid.h"
 
 #ifdef HAVE_SYS_CAPABILITY_H
diff --git a/src/test/test_threads.c b/src/test/test_threads.c
index e698e4f61830441f09e6d2a4f20ab161ff471db2..f0a4dd2057e4a681382415b15340b8ab496989d0 100644
--- a/src/test/test_threads.c
+++ b/src/test/test_threads.c
@@ -4,7 +4,7 @@
 /* See LICENSE for licensing information */
 
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/thread/threads.h"
 #include "test/test.h"
 
diff --git a/src/test/test_tortls.c b/src/test/test_tortls.c
index 9ae9d4dfbdd632f6d78c62f532825897f9f104b2..2b40ed72d9adbad66247442e19f269285063acce 100644
--- a/src/test/test_tortls.c
+++ b/src/test/test_tortls.c
@@ -30,11 +30,11 @@ DISABLE_GCC_WARNING(redundant-decls)
 
 ENABLE_GCC_WARNING(redundant-decls)
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/log/torlog.h"
-#include "or/config.h"
+#include "app/config/config.h"
 #include "lib/tls/tortls.h"
-#include "or/or_state_st.h"
+#include "app/config/or_state_st.h"
 
 #include "test/test.h"
 #include "test/log_test_helpers.h"
diff --git a/src/test/test_util.c b/src/test/test_util.c
index 60cd7ad66aaab2487600257fa6227963ff0077f5..99fee4c5a504b05a85e6a9edb29526effcbab847 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -12,11 +12,11 @@
 #define SOCKET_PRIVATE
 #define SUBPROCESS_PRIVATE
 #include "lib/testsupport/testsupport.h"
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/container/buffers.h"
-#include "or/config.h"
-#include "or/control.h"
-#include "or/transports.h"
+#include "app/config/config.h"
+#include "feature/control/control.h"
+#include "feature/client/transports.h"
 #include "lib/crypt_ops/crypto_format.h"
 #include "lib/crypt_ops/crypto_rand.h"
 #include "test/test.h"
diff --git a/src/test/test_util_format.c b/src/test/test_util_format.c
index ea42d8dd5a34780039fe63976565ba35c4013bdb..85d8a8e62e9f1fc8ec889061012903fe069c2d72 100644
--- a/src/test/test_util_format.c
+++ b/src/test/test_util_format.c
@@ -2,7 +2,7 @@
 /* See LICENSE for licensing information */
 
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_util_process.c b/src/test/test_util_process.c
index 9dce520d04d598f700145f6f603904503f816909..44c4da91696cebbbfaf411a508c7cc2cbe433a16 100644
--- a/src/test/test_util_process.c
+++ b/src/test/test_util_process.c
@@ -3,7 +3,7 @@
 
 #define UTIL_PROCESS_PRIVATE
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_voting_schedule.c b/src/test/test_voting_schedule.c
index b5df5964368008195576afe2e53f88324a7ad09f..c3a581cf2174656af03f12abc5eeab6cb8c104c3 100644
--- a/src/test/test_voting_schedule.c
+++ b/src/test/test_voting_schedule.c
@@ -3,8 +3,8 @@
 
 #include "orconfig.h"
 
-#include "or/or.h"
-#include "or/voting_schedule.h"
+#include "core/or/or.h"
+#include "feature/dircommon/voting_schedule.h"
 
 #include "test/test.h"
 
diff --git a/src/test/test_workqueue.c b/src/test/test_workqueue.c
index 2cb42734c482cc2dc9f978a1b2667083801c54a7..4550bad1f0b0a6608ad9ba3140f2a4e4f5f11b29 100644
--- a/src/test/test_workqueue.c
+++ b/src/test/test_workqueue.c
@@ -3,9 +3,9 @@
  * Copyright (c) 2007-2018, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-#include "or/or.h"
+#include "core/or/or.h"
 #include "lib/thread/threads.h"
-#include "or/onion.h"
+#include "core/crypto/onion.h"
 #include "lib/evloop/workqueue.h"
 #include "lib/crypt_ops/crypto_curve25519.h"
 #include "lib/crypt_ops/crypto_rand.h"
diff --git a/src/test/testing_common.c b/src/test/testing_common.c
index b0514f85ec243986a40e836f89127d6fbf52e7d3..3880bca9c519c62345589494eea3d8ef013beb08 100644
--- a/src/test/testing_common.c
+++ b/src/test/testing_common.c
@@ -10,17 +10,17 @@
 
 #define MAIN_PRIVATE
 #include "orconfig.h"
-#include "or/or.h"
-#include "or/control.h"
-#include "or/config.h"
+#include "core/or/or.h"
+#include "feature/control/control.h"
+#include "app/config/config.h"
 #include "lib/crypt_ops/crypto_dh.h"
 #include "lib/crypt_ops/crypto_ed25519.h"
 #include "lib/crypt_ops/crypto_rand.h"
-#include "or/rephist.h"
+#include "feature/stats/rephist.h"
 #include "lib/err/backtrace.h"
 #include "test/test.h"
-#include "or/channelpadding.h"
-#include "or/main.h"
+#include "core/or/channelpadding.h"
+#include "core/mainloop/main.h"
 #include "lib/compress/compress.h"
 #include "lib/evloop/compat_libevent.h"
 
diff --git a/src/test/testing_rsakeys.c b/src/test/testing_rsakeys.c
index 087a14e64901b07e49cf894b658e8e8001680f97..a8c9ce4ce8750e8b92c5779836f5f39418c243e7 100644
--- a/src/test/testing_rsakeys.c
+++ b/src/test/testing_rsakeys.c
@@ -5,7 +5,7 @@
 
 #include "lib/crypt_ops/crypto_rand.h"
 #include "orconfig.h"
-#include "or/or.h"
+#include "core/or/or.h"
 #include "test/test.h"
 
 /** Define this if unit tests spend too much time generating public keys.
diff --git a/src/tools/tor_runner.c b/src/tools/tor_runner.c
index 8e74a06cd9adc0fb905a1e44448fa38f75af81b2..dd90af3df5dbda9bda32caad6ccfbefe8f990f2a 100644
--- a/src/tools/tor_runner.c
+++ b/src/tools/tor_runner.c
@@ -23,8 +23,8 @@
  * functions.  Don't add more dependencies!
  */
 
-#include "or/tor_api.h"
-#include "or/tor_api_internal.h"
+#include "feature/api/tor_api.h"
+#include "feature/api/tor_api_internal.h"
 
 #include "orconfig.h"
 #ifdef HAVE_UNISTD_H