[tor-commits] [tor/master] Fix every include path changed in the previous commit (automated)

nickm at torproject.org nickm at torproject.org
Thu Jul 5 22:13:18 UTC 2018


commit ef486e3c029efe8cb18886eea52f20af766f9daa
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Jul 5 16:34:59 2018 -0400

    Fix every include path changed in the previous commit (automated)
    
    I am very glad to have written this script.
---
 src/app/config/config.c                      |  90 +++++++++---------
 src/app/config/config.h                      |   2 +-
 src/app/config/confparse.c                   |   6 +-
 src/app/config/statefile.c                   |  26 ++---
 src/app/main/ntmain.c                        |   8 +-
 src/core/crypto/hs_ntor.c                    |   4 +-
 src/core/crypto/hs_ntor.h                    |   2 +-
 src/core/crypto/onion.c                      |  34 +++----
 src/core/crypto/onion_fast.c                 |   4 +-
 src/core/crypto/onion_ntor.c                 |   2 +-
 src/core/crypto/onion_tap.c                  |   8 +-
 src/core/crypto/relay_crypto.c               |  18 ++--
 src/core/mainloop/connection.c               |  90 +++++++++---------
 src/core/mainloop/cpuworker.c                |  24 ++---
 src/core/mainloop/main.c                     | 136 +++++++++++++--------------
 src/core/mainloop/main.h                     |   2 +-
 src/core/mainloop/periodic.c                 |   8 +-
 src/core/or/address_set.c                    |   2 +-
 src/core/or/channel.c                        |  44 ++++-----
 src/core/or/channel.h                        |   4 +-
 src/core/or/channelpadding.c                 |  28 +++---
 src/core/or/channeltls.c                     |  56 +++++------
 src/core/or/channeltls.h                     |   4 +-
 src/core/or/circuit_st.h                     |   4 +-
 src/core/or/circuitbuild.c                   |  92 +++++++++---------
 src/core/or/circuitlist.c                    |  76 +++++++--------
 src/core/or/circuitlist.h                    |   2 +-
 src/core/or/circuitmux.c                     |  18 ++--
 src/core/or/circuitmux.h                     |   2 +-
 src/core/or/circuitmux_ewma.c                |  10 +-
 src/core/or/circuitmux_ewma.h                |   4 +-
 src/core/or/circuitstats.c                   |  34 +++----
 src/core/or/circuituse.c                     |  72 +++++++-------
 src/core/or/command.c                        |  46 ++++-----
 src/core/or/command.h                        |   2 +-
 src/core/or/connection_edge.c                |  92 +++++++++---------
 src/core/or/connection_or.c                  |  78 +++++++--------
 src/core/or/crypt_path_st.h                  |   2 +-
 src/core/or/dos.c                            |  26 ++---
 src/core/or/edge_connection_st.h             |   4 +-
 src/core/or/entry_connection_st.h            |   2 +-
 src/core/or/entry_port_cfg_st.h              |   2 +-
 src/core/or/git_revision.c                   |   2 +-
 src/core/or/listener_connection_st.h         |   2 +-
 src/core/or/or.h                             |   2 +-
 src/core/or/or_circuit_st.h                  |   6 +-
 src/core/or/or_connection_st.h               |   2 +-
 src/core/or/origin_circuit_st.h              |   4 +-
 src/core/or/policies.c                       |  36 +++----
 src/core/or/port_cfg_st.h                    |   4 +-
 src/core/or/reasons.c                        |   8 +-
 src/core/or/relay.c                          |  84 ++++++++---------
 src/core/or/scheduler.c                      |  12 +--
 src/core/or/scheduler.h                      |   4 +-
 src/core/or/scheduler_kist.c                 |  16 ++--
 src/core/or/scheduler_vanilla.c              |   8 +-
 src/core/or/status.c                         |  38 ++++----
 src/core/proto/proto_cell.c                  |   8 +-
 src/core/proto/proto_control0.c              |   4 +-
 src/core/proto/proto_ext_or.c                |   6 +-
 src/core/proto/proto_http.c                  |   4 +-
 src/core/proto/proto_socks.c                 |  18 ++--
 src/core/proto/protover.c                    |   6 +-
 src/core/proto/protover_rust.c               |   4 +-
 src/feature/api/tor_api.c                    |   4 +-
 src/feature/client/addressmap.c              |  22 ++---
 src/feature/client/bridges.c                 |  36 +++----
 src/feature/client/circpathbias.c            |  34 +++----
 src/feature/client/dnsserv.c                 |  26 ++---
 src/feature/client/entrynodes.c              |  56 +++++------
 src/feature/client/transports.c              |  22 ++---
 src/feature/control/control.c                | 116 +++++++++++------------
 src/feature/control/control_connection_st.h  |   4 +-
 src/feature/dirauth/dircollate.c             |   8 +-
 src/feature/dirauth/dircollate.h             |   2 +-
 src/feature/dirauth/dirvote.c                |  76 +++++++--------
 src/feature/dirauth/keypin.c                 |   2 +-
 src/feature/dirauth/mode.h                   |   2 +-
 src/feature/dirauth/shared_random.c          |  34 +++----
 src/feature/dirauth/shared_random.h          |   2 +-
 src/feature/dirauth/shared_random_state.c    |  22 ++---
 src/feature/dirauth/shared_random_state.h    |   2 +-
 src/feature/dircache/conscache.c             |   6 +-
 src/feature/dircache/consdiffmgr.c           |  20 ++--
 src/feature/dircache/directory.c             |  92 +++++++++---------
 src/feature/dircache/directory.h             |   2 +-
 src/feature/dircache/dirserv.c               |  80 ++++++++--------
 src/feature/dirclient/dir_server_st.h        |   4 +-
 src/feature/dircommon/consdiff.c             |   6 +-
 src/feature/dircommon/consdiff.h             |   2 +-
 src/feature/dircommon/dir_connection_st.h    |   2 +-
 src/feature/dircommon/fp_pair.c              |   4 +-
 src/feature/dircommon/voting_schedule.c      |  10 +-
 src/feature/dircommon/voting_schedule.h      |   2 +-
 src/feature/hibernate/hibernate.c            |  28 +++---
 src/feature/hs/hs_cache.c                    |  20 ++--
 src/feature/hs/hs_cache.h                    |   8 +-
 src/feature/hs/hs_cell.c                     |  14 +--
 src/feature/hs/hs_cell.h                     |   4 +-
 src/feature/hs/hs_circuit.c                  |  46 ++++-----
 src/feature/hs/hs_circuit.h                  |   4 +-
 src/feature/hs/hs_circuitmap.c               |  12 +--
 src/feature/hs/hs_client.c                   |  60 ++++++------
 src/feature/hs/hs_client.h                   |   4 +-
 src/feature/hs/hs_common.c                   |  48 +++++-----
 src/feature/hs/hs_common.h                   |   2 +-
 src/feature/hs/hs_config.c                   |  10 +-
 src/feature/hs/hs_config.h                   |   2 +-
 src/feature/hs/hs_control.c                  |  20 ++--
 src/feature/hs/hs_control.h                  |   2 +-
 src/feature/hs/hs_descriptor.c               |  18 ++--
 src/feature/hs/hs_descriptor.h               |   4 +-
 src/feature/hs/hs_ident.c                    |   2 +-
 src/feature/hs/hs_ident.h                    |   2 +-
 src/feature/hs/hs_intropoint.c               |  24 ++---
 src/feature/hs/hs_intropoint.h               |   2 +-
 src/feature/hs/hs_service.c                  |  74 +++++++--------
 src/feature/hs/hs_service.h                  |  10 +-
 src/feature/hs/hs_stats.c                    |   6 +-
 src/feature/hs_common/replaycache.c          |   4 +-
 src/feature/hs_common/shared_random_client.c |  10 +-
 src/feature/hs_common/shared_random_client.h |   2 +-
 src/feature/nodelist/authority_cert_st.h     |   2 +-
 src/feature/nodelist/extrainfo_st.h          |   2 +-
 src/feature/nodelist/microdesc.c             |  36 +++----
 src/feature/nodelist/networkstatus.c         |  96 +++++++++----------
 src/feature/nodelist/networkstatus_st.h      |   2 +-
 src/feature/nodelist/node_st.h               |   2 +-
 src/feature/nodelist/nodelist.c              |  60 ++++++------
 src/feature/nodelist/parsecommon.c           |   2 +-
 src/feature/nodelist/routerinfo_st.h         |   2 +-
 src/feature/nodelist/routerlist.c            |  80 ++++++++--------
 src/feature/nodelist/routerlist_st.h         |   2 +-
 src/feature/nodelist/routerparse.c           |  80 ++++++++--------
 src/feature/nodelist/routerset.c             |  28 +++---
 src/feature/nodelist/routerstatus_st.h       |   2 +-
 src/feature/nodelist/signed_descriptor_st.h  |   2 +-
 src/feature/nodelist/torcert.c               |   8 +-
 src/feature/nodelist/vote_routerstatus_st.h  |   2 +-
 src/feature/relay/dns.c                      |  28 +++---
 src/feature/relay/dns.h                      |   2 +-
 src/feature/relay/ext_orport.c               |  18 ++--
 src/feature/relay/router.c                   |  82 ++++++++--------
 src/feature/relay/routerkeys.c               |  10 +-
 src/feature/rend/rendcache.c                 |  18 ++--
 src/feature/rend/rendcache.h                 |   4 +-
 src/feature/rend/rendclient.c                |  64 ++++++-------
 src/feature/rend/rendclient.h                |   2 +-
 src/feature/rend/rendcommon.c                |  58 ++++++------
 src/feature/rend/rendmid.c                   |  26 ++---
 src/feature/rend/rendservice.c               |  72 +++++++-------
 src/feature/rend/rendservice.h               |   4 +-
 src/feature/stats/geoip.c                    |  14 +--
 src/feature/stats/geoip.h                    |   2 +-
 src/feature/stats/rephist.c                  |  30 +++---
 src/test/bench.c                             |  18 ++--
 src/test/fuzz/fuzz_consensus.c               |   8 +-
 src/test/fuzz/fuzz_descriptor.c              |   8 +-
 src/test/fuzz/fuzz_diff.c                    |   4 +-
 src/test/fuzz/fuzz_diff_apply.c              |   4 +-
 src/test/fuzz/fuzz_extrainfo.c               |   8 +-
 src/test/fuzz/fuzz_hsdescv2.c                |   6 +-
 src/test/fuzz/fuzz_hsdescv3.c                |   6 +-
 src/test/fuzz/fuzz_http.c                    |  10 +-
 src/test/fuzz/fuzz_http_connect.c            |  14 +--
 src/test/fuzz/fuzz_iptsv2.c                  |   8 +-
 src/test/fuzz/fuzz_microdesc.c               |   6 +-
 src/test/fuzz/fuzz_vrs.c                     |  12 +--
 src/test/fuzz/fuzzing_common.c               |   4 +-
 src/test/hs_test_helpers.c                   |   6 +-
 src/test/hs_test_helpers.h                   |   2 +-
 src/test/log_test_helpers.h                  |   2 +-
 src/test/rend_test_helpers.c                 |  10 +-
 src/test/rend_test_helpers.h                 |   2 +-
 src/test/test.c                              |  44 ++++-----
 src/test/test_accounting.c                   |  10 +-
 src/test/test_addr.c                         |   4 +-
 src/test/test_address.c                      |   2 +-
 src/test/test_address_set.c                  |  24 ++---
 src/test/test_bridges.c                      |   8 +-
 src/test/test_bt_cl.c                        |   2 +-
 src/test/test_buffers.c                      |   6 +-
 src/test/test_bwmgt.c                        |   2 +-
 src/test/test_cell_formats.c                 |  28 +++---
 src/test/test_cell_queue.c                   |  14 +--
 src/test/test_channel.c                      |  30 +++---
 src/test/test_channelpadding.c               |  26 ++---
 src/test/test_channeltls.c                   |  16 ++--
 src/test/test_checkdir.c                     |   4 +-
 src/test/test_circuitbuild.c                 |  10 +-
 src/test/test_circuitlist.c                  |  16 ++--
 src/test/test_circuitmux.c                   |  14 +--
 src/test/test_circuitstats.c                 |  24 ++---
 src/test/test_circuituse.c                   |  18 ++--
 src/test/test_compat_libevent.c              |   2 +-
 src/test/test_config.c                       |  66 ++++++-------
 src/test/test_connection.c                   |  34 +++----
 src/test/test_conscache.c                    |   6 +-
 src/test/test_consdiff.c                     |   4 +-
 src/test/test_consdiffmgr.c                  |  18 ++--
 src/test/test_containers.c                   |   4 +-
 src/test/test_controller.c                   |  26 ++---
 src/test/test_controller_events.c            |  16 ++--
 src/test/test_crypto.c                       |   2 +-
 src/test/test_crypto_slow.c                  |   2 +-
 src/test/test_dir.c                          |  70 +++++++-------
 src/test/test_dir_common.c                   |  22 ++---
 src/test/test_dir_common.h                   |   6 +-
 src/test/test_dir_handle_get.c               |  52 +++++-----
 src/test/test_dns.c                          |  14 +--
 src/test/test_dos.c                          |  26 ++---
 src/test/test_entryconn.c                    |  22 ++---
 src/test/test_entrynodes.c                   |  52 +++++-----
 src/test/test_extorport.c                    |  16 ++--
 src/test/test_geoip.c                        |   6 +-
 src/test/test_guardfraction.c                |  20 ++--
 src/test/test_helpers.c                      |  28 +++---
 src/test/test_helpers.h                      |   2 +-
 src/test/test_hs.c                           |  28 +++---
 src/test/test_hs_cache.c                     |  16 ++--
 src/test/test_hs_cell.c                      |   6 +-
 src/test/test_hs_client.c                    |  52 +++++-----
 src/test/test_hs_common.c                    |  42 ++++-----
 src/test/test_hs_config.c                    |  10 +-
 src/test/test_hs_control.c                   |  18 ++--
 src/test/test_hs_descriptor.c                |   6 +-
 src/test/test_hs_intropoint.c                |  22 ++---
 src/test/test_hs_ntor.c                      |   2 +-
 src/test/test_hs_ntor_cl.c                   |   6 +-
 src/test/test_hs_service.c                   |  64 ++++++-------
 src/test/test_introduce.c                    |   4 +-
 src/test/test_keypin.c                       |   4 +-
 src/test/test_link_handshake.c               |  28 +++---
 src/test/test_logging.c                      |   4 +-
 src/test/test_mainloop.c                     |   4 +-
 src/test/test_microdesc.c                    |  26 ++---
 src/test/test_nodelist.c                     |  20 ++--
 src/test/test_ntor_cl.c                      |   4 +-
 src/test/test_oom.c                          |  18 ++--
 src/test/test_oos.c                          |  16 ++--
 src/test/test_options.c                      |  14 +--
 src/test/test_periodic_event.c               |  12 +--
 src/test/test_policy.c                       |  20 ++--
 src/test/test_procmon.c                      |   2 +-
 src/test/test_proto_http.c                   |   4 +-
 src/test/test_proto_misc.c                   |  14 +--
 src/test/test_protover.c                     |   6 +-
 src/test/test_pt.c                           |  16 ++--
 src/test/test_relay.c                        |  14 +--
 src/test/test_relaycell.c                    |  26 ++---
 src/test/test_relaycrypt.c                   |  16 ++--
 src/test/test_rendcache.c                    |  24 ++---
 src/test/test_replay.c                       |   4 +-
 src/test/test_router.c                       |  10 +-
 src/test/test_routerkeys.c                   |  10 +-
 src/test/test_routerlist.c                   |  50 +++++-----
 src/test/test_routerset.c                    |  24 ++---
 src/test/test_scheduler.c                    |  14 +--
 src/test/test_shared_random.c                |  32 +++----
 src/test/test_slow.c                         |   2 +-
 src/test/test_socks.c                        |  10 +-
 src/test/test_status.c                       |  28 +++---
 src/test/test_storagedir.c                   |   2 +-
 src/test/test_switch_id.c                    |   2 +-
 src/test/test_threads.c                      |   2 +-
 src/test/test_tortls.c                       |   6 +-
 src/test/test_util.c                         |   8 +-
 src/test/test_util_format.c                  |   2 +-
 src/test/test_util_process.c                 |   2 +-
 src/test/test_voting_schedule.c              |   4 +-
 src/test/test_workqueue.c                    |   4 +-
 src/test/testing_common.c                    |  12 +--
 src/test/testing_rsakeys.c                   |   2 +-
 src/tools/tor_runner.c                       |   4 +-
 274 files changed, 2595 insertions(+), 2595 deletions(-)

diff --git a/src/app/config/config.c b/src/app/config/config.c
index 9b2706982..28d2be5ec 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 6d2feb5f4..a169cfd45 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 87405c6e7..5b7f54bc6 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 e9db1ff06..8eeef4502 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 63d82f686..232529a80 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 b5007545d..d98d16f7f 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 67a957343..30738c4ae 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 80d8e1a8b..e71bfc1fd 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 6e834ccf9..292aeca40 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 59c923cb9..9e1e273ef 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 05bcce2e8..7ffe0ea5c 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 1fcfae0b3..b2388d2c4 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 6fd8fbf77..ed789d520 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 8b58e4c68..a372db3f1 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 2a57aa587..bad949097 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 90146f4bd..2b4459670 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 041b2d287..c17c0c56d 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 927a5597c..014e650d2 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 e6d717f11..476f31d5b 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 7f2505676..b3d97a9ad 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 504f6f8f8..b8cfd33d5 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 85dfe0c0f..87f5a02b7 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 1ab899af9..4a10d51d9 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 8453efa63..2e33b37b0 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 39ae7ebf4..e22ddabde 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 d9d12db9b..f39e05ecd 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 7c9bc0199..b069604a1 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 9e0126b8f..f55386df2 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 e94cc354c..31bf81463 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 d600602a7..deca81f0a 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 1214b0264..8e87830a8 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 d275399e9..63cd21540 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 a3a69dc35..a3b9eb171 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 c2d6e2bb2..461e49b62 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 864a5b2fd..83ffd8dcc 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 13d957a93..8e8a5e21c 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 71ab90594..159ee9626 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 0fde1fab0..138091336 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 d86ede02c..52879c34d 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 d58e1c2b8..f4388c10e 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 2f9676088..ebaee2f1a 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 9b07ccb06..492fafbd6 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 be6f67423..f34f922c8 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 7b5aafcb5..ec350c1b0 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 826e81e46..6edfd21df 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 158a5314e..b5e21d986 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 8c2c1f89c..020a717c1 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 b885725ed..e7b864e82 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 53e00e808..e01415f95 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 86a3b963b..19410871e 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 7d8dcf374..7a1e09e9f 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 e8e1762b4..32bb69d25 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 b8eaca3dc..e19059f0c 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 856923f9a..05a888365 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 5a45ccab8..449478df7 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 e05bebb37..db8374ead 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 2259b3aae..30a65b1d4 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 41554bd1b..49b07663d 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 34e7ddb8d..d26c69753 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 f30d87623..04bec4e6b 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 ecc669e3a..37298d128 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 f5e6ce581..691244147 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 f63c13456..3ae91688d 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 bd2f88b98..55b0ebedf 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 efedf2dc7..2a4458bf6 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 ba78a5f90..e62d82b7f 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 ca0a13f2a..4bffe1603 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 32b3212d3..1ee29c639 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 6e7525423..31cc3eff7 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 ba9c30f8b..664be8ce1 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 1d3cb7b95..85d4d2e08 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 aa43fccff..12f10926b 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 4f8ab25d9..ff6264a9a 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 246977dcc..ca8e5b787 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 aae782978..0e84c66e6 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 15f837874..282546567 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 a2f3654b8..44e19985f 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 17c35aff6..8bb961dff 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 d12269012..8ae267977 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 93bab99f7..68ece9aec 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 87ddcc073..55936a736 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 f99874872..83edfaf10 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 bc5928ff2..e9bf58a18 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 6d5183f93..304b64f3b 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 8f2bd8d3a..a72317618 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 992ff618f..54ea0c584 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 2980d63f0..0e1d0645e 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 fe1f5c3d5..0a6d8155a 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 88edda716..1823dc07f 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 1cae59a1a..a5e4ba5cb 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 1282f82d6..768f6ba81 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 1d7b751c2..054414528 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 6edde3f22..84c016c2b 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 0f27d36d5..0e0b0cc98 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 55de64c13..d37ba5b8b 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 3772e0c0e..58bb10b19 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 1e479700f..7cd4995d2 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 f8b76c513..c6ca6746b 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 4a522810c..7b9d7e579 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 5a2c7e4e4..cd312e98b 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 425070f4c..54f28a39a 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 c4bf9fab4..962a421a0 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 cc461e368..1f9218e15 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 808391074..6ee9f40c0 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 d91f45a63..723cfa6ea 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 24f5f3a20..888eb0a4e 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 cb55faa9d..2c25a168a 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 461d58d38..96eb19ee7 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 be456e8da..a21788ecd 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 040ce4a79..63e3fe13d 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 5fd8971dc..392800016 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 7a4010cd3..bfdf7559c 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 20539ca87..c6ef8c2ce 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 8c53b9dbe..92d15b052 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 259405867..42092e22b 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 5f8292099..562836fb0 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 6cb01b57c..8b4de2138 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 4676042b5..22bfcacc2 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 c8a99b19d..b109a37cc 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 b5cc6a282..1d3f20e81 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 42a5b42f6..329f053d3 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 079829496..497a015c1 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 19c3fda2d..c2846548c 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 f91bba7b6..f5d977e75 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 95c5e8b6f..4d6285d6c 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 f91e46cdd..366410d68 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 4a193ad14..46b0f53c0 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 d56ce2788..8d182050a 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 51fd0015d..e434dd2d1 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 4340f2822..4f1c3fd42 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 89a7702b3..ca8fd40e3 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 76a236ff2..0ff38f56e 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 0b94a4dfc..26cc66138 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 273666046..e1dfe972d 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 285ef9d82..cd4269774 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 3de4a40ae..714aa2743 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 90cd4a270..bffad6289 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 39c6605c6..172d4f9de 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 1b85737df..ad0d35b4e 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 4ac58552f..f4e39dfd3 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 12853205f..69c1764b7 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 7342a66e0..7de57ac65 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 44af1e310..c52ac1f9c 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 bb04a8b22..f12eb3d33 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 c18920154..7af5063ba 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 bb075409e..455e51645 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 d4262f2f3..9f62156eb 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 77395d6cb..e41faa493 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 928dda012..5bf947744 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 38c1c52e4..22cd6c343 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 8e094b593..da4a98b3d 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 35962df7f..709678962 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 3e6f20ea3..d891bd80e 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 fd19b7560..a2175c01e 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 6607c2596..6bb680c5d 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 ced04fffd..7919a4224 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 81a310154..b170fd33d 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 d28793fdf..5a56f4081 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 eb5fc27e0..1079856fd 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 76789fabc..165d0e612 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 274ecc786..6c88f8012 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 7fd86f40b..fd5da4163 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 de574ac26..4ec8db0a8 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 772f2099b..61dc2144b 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 bf0a9deba..184bb52ee 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 e4ec7fffc..a3082f4d0 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 a7fe1bb66..fa9676372 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 7d28ef1c7..8c96851b1 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 c947ebfce..0b3483bf6 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 cb7b1fe1b..afe3eafa2 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 5c0262207..b7c271476 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 7c3850452..fc9768c12 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 31af58c27..85a679a96 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 aca675b2a..103e143ec 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 d6be5ea2e..2addeec96 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 7b9511dc2..7721a9eb9 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 1069e25b4..9ab921c5b 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 52ca5137e..abe7c2c0a 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 ec4e6b7e8..f23174001 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 685027c0e..bdab14890 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 3f7b0a203..716cff36e 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 604f1422c..477066f69 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 4cfca6c77..7aa053f6c 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 da5e5defd..2753c4219 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 3369511af..d74bb9c62 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 53c133ecb..26af8de91 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 ff2ab8daa..5d696b8b8 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 ad2b443cf..787a30a85 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 a80c6ebd3..652e308ed 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 c09133c54..02eadecd9 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 4aa7c596e..8dd7f5f5a 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 c2fd1ae68..1d46f8de0 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 94ba6ed44..c3cfad88d 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 2524e43c6..720adeac8 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 1262a3140..3f505d013 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 c7623d0c8..f7d3a6fbb 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 674e2284e..c423c6573 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 3d3a50297..b5cbd7251 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 38947a225..b836befd2 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 959075903..6c0601b50 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 5c712a9b1..717eb0892 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 54c2e0a2e..2ded04619 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 33a45a99c..e935b7042 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 2e38dfc27..2124e2219 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 7c1dfa0a9..88b31ad9a 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 a86b2a9f6..bda56b3a8 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 a758421cd..e65e2b011 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 7d5f55afe..1e90228ed 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 90ca7d357..571b0386e 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 1407a5c47..8369f844f 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 4ba24292c..b411e7b38 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 b23f12087..bec70090e 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 9c35cdaaf..cafdeb686 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 4ddef4e43..ff987563c 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 9aa46786e..9df8ea798 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 3c293e378..f45a72329 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 6d410af52..c666bca59 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 c6339d97f..3196c93e6 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 b17e8cf21..135df8e9f 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 c22cc4638..c1a69af82 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 4bb3c3f77..b47929e8e 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 1458c358d..57da03ca2 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 4c39570e3..f17cc8aeb 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 33ad09313..498d2df19 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 6e5e78337..48402030b 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 a017facd2..9a7e66eae 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 2445a8fcf..7da376471 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 c52440900..eeb049165 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 8643897db..03e34968b 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 e81a5eff4..8074d260a 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 f62c7f880..cdfb70bdf 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 e7897a847..9af12ff54 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 515fdc50a..e0d12fb47 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 48cdf2e6b..2e3b8800a 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 469820b59..f85c224ae 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 2038f5498..ec4779ead 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 1dc8bc2d2..cdd5e95cf 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 5711a9116..744b42c9d 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 6c3ee1a27..313a6b311 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 f101390d6..5f9942d8a 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 f2aaf30c2..396965401 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 b353cf87a..03ba3df79 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 a6906af41..4b1adc91f 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 e2915d0fb..2c7918f58 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 57bfe2463..1cfa0a752 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 7f066e14a..1fcb76342 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 f17f68ced..a90ff5a08 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 189cb2584..dea3791da 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 fe5795d11..25084fab3 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 9f314b770..eb30cab0e 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 7f0ca0698..c3cfb7d10 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 3d606aac0..394e28d78 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 7f9c0b09e..bca3a6660 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 6e9424a3a..a398c7497 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 2a761ad6e..1a1bf63ba 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 b25a0be9a..89d1f4f90 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 ea8b43498..2017ef005 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 555a2a6bf..2d562299a 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 1b4fdc899..ccf051606 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 951851ec0..0b665363a 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 0a01bf643..e064cc8db 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 c92ba48e2..3cc23955a 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 efb6a0027..68cee418a 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 95801822f..d8a1d15e4 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 e698e4f61..f0a4dd205 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 9ae9d4dfb..2b40ed72d 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 60cd7ad66..99fee4c5a 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 ea42d8dd5..85d8a8e62 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 9dce520d0..44c4da916 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 b5df59643..c3a581cf2 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 2cb42734c..4550bad1f 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 b0514f85e..3880bca9c 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 087a14e64..a8c9ce4ce 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 8e74a06cd..dd90af3df 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





More information about the tor-commits mailing list