diff --git a/routes/_components/Avatar.html b/routes/_components/status/Avatar.html
similarity index 88%
rename from routes/_components/Avatar.html
rename to routes/_components/status/Avatar.html
index 14e9647..e88f8eb 100644
--- a/routes/_components/Avatar.html
+++ b/routes/_components/status/Avatar.html
@@ -18,7 +18,7 @@
   }
 </style>
 <script>
-  import { imgLoadError } from '../_utils/events'
+  import { imgLoadError } from '../../_utils/events'
 
   export default {
     events: {
diff --git a/routes/_components/Media.html b/routes/_components/status/Media.html
similarity index 96%
rename from routes/_components/Media.html
rename to routes/_components/status/Media.html
index f71ee35..80d308a 100644
--- a/routes/_components/Media.html
+++ b/routes/_components/status/Media.html
@@ -112,8 +112,8 @@
   const DEFAULT_MEDIA_WIDTH = 300
   const DEFAULT_MEDIA_HEIGHT = 200
 
-  import { imgLoad, imgLoadError } from '../_utils/events'
-  import { showVideoDialog } from '../_utils/showVideoDialog'
+  import { imgLoad, imgLoadError } from '../../_utils/events'
+  import { showVideoDialog } from '../../_utils/showVideoDialog'
 
   export default {
     helpers: {
diff --git a/routes/_components/Status.html b/routes/_components/status/Status.html
similarity index 98%
rename from routes/_components/Status.html
rename to routes/_components/status/Status.html
index 99a8f4a..8072336 100644
--- a/routes/_components/Status.html
+++ b/routes/_components/status/Status.html
@@ -288,10 +288,10 @@
   import Avatar from './Avatar.html'
   import Media from './Media.html'
   import Toolbar from './Toolbar.html'
-  import { mark, stop } from '../_utils/marks'
+  import { mark, stop } from '../../_utils/marks'
   import IntlRelativeFormat from 'intl-relativeformat'
-  import { replaceAll } from '../_utils/replaceAll'
-  import { store } from '../_utils/store'
+  import { replaceAll } from '../../_utils/replaceAll'
+  import { store } from '../../_utils/store'
 
   const relativeFormat = new IntlRelativeFormat('en-US');
 
diff --git a/routes/_components/Toolbar.html b/routes/_components/status/Toolbar.html
similarity index 100%
rename from routes/_components/Toolbar.html
rename to routes/_components/status/Toolbar.html
diff --git a/routes/_components/VideoDialog.html b/routes/_components/status/VideoDialog.html
similarity index 96%
rename from routes/_components/VideoDialog.html
rename to routes/_components/status/VideoDialog.html
index 0059603..907ab64 100644
--- a/routes/_components/VideoDialog.html
+++ b/routes/_components/status/VideoDialog.html
@@ -56,7 +56,7 @@
 </style>
 <script>
 
-  import { importDialogPolyfill } from '../_utils/asyncModules'
+  import { importDialogPolyfill } from '../../_utils/asyncModules'
 
   export default {
     oncreate() {
diff --git a/routes/_components/LazyTimeline.html b/routes/_components/timeline/LazyTimeline.html
similarity index 87%
rename from routes/_components/LazyTimeline.html
rename to routes/_components/timeline/LazyTimeline.html
index 2947130..b5bc725 100644
--- a/routes/_components/LazyTimeline.html
+++ b/routes/_components/timeline/LazyTimeline.html
@@ -31,10 +31,10 @@
   }
 </style>
 <script>
-  import { importTimeline } from '../_utils/asyncModules'
-  import LoadingSpinner from './LoadingSpinner.html'
+  import { importTimeline } from '../../_utils/asyncModules'
+  import LoadingSpinner from '../LoadingSpinner.html'
   import { fade } from 'svelte-transitions'
-  import { store } from '../_utils/store'
+  import { store } from '../../_utils/store'
 
   export default {
     oncreate() {
diff --git a/routes/_components/LoadingFooter.html b/routes/_components/timeline/LoadingFooter.html
similarity index 87%
rename from routes/_components/LoadingFooter.html
rename to routes/_components/timeline/LoadingFooter.html
index c9c3e39..c45d492 100644
--- a/routes/_components/LoadingFooter.html
+++ b/routes/_components/timeline/LoadingFooter.html
@@ -17,7 +17,7 @@
   }
 </style>
 <script>
-  import LoadingSpinner from './LoadingSpinner.html'
+  import LoadingSpinner from '../LoadingSpinner.html'
   export default {
     components: {
       LoadingSpinner
diff --git a/routes/_components/StatusListItem.html b/routes/_components/timeline/StatusListItem.html
similarity index 76%
rename from routes/_components/StatusListItem.html
rename to routes/_components/timeline/StatusListItem.html
index e62a49e..ad369ac 100644
--- a/routes/_components/StatusListItem.html
+++ b/routes/_components/timeline/StatusListItem.html
@@ -1,6 +1,6 @@
 <Status status="{{virtualProps}}" index="{{virtualIndex}}" length="{{virtualLength}}" on:recalculateHeight />
 <script>
-  import Status from './Status.html'
+  import Status from '../status/Status.html'
 
   export default {
     components: {
diff --git a/routes/_components/Timeline.html b/routes/_components/timeline/Timeline.html
similarity index 89%
rename from routes/_components/Timeline.html
rename to routes/_components/timeline/Timeline.html
index 3419a40..d3cfd1b 100644
--- a/routes/_components/Timeline.html
+++ b/routes/_components/timeline/Timeline.html
@@ -17,19 +17,19 @@
   }
 </style>
 <script>
-  import { store } from '../_utils/store'
-  import { getTimeline } from '../_utils/mastodon/timelines'
-  import { getInstanceInfo } from '../_utils/mastodon/instance'
+  import { store } from '../../_utils/store'
+  import { getTimeline } from '../../_utils/mastodon/timelines'
+  import { getInstanceInfo } from '../../_utils/mastodon/instance'
   import StatusListItem from './StatusListItem.html'
   import LoadingFooter from './LoadingFooter.html'
-  import VirtualList from './virtualList/VirtualList.html'
+  import VirtualList from '../virtualList/VirtualList.html'
   import { splice, push } from 'svelte-extras'
-  import { mergeStatuses } from '../_utils/statuses'
-  import { mark, stop } from '../_utils/marks'
-  import { timelines } from '../_static/timelines'
-  import { toast } from '../_utils/toast'
-  import { database } from '../_utils/database/database'
-  import { StatusStream } from '../_utils/mastodon/StatusStream'
+  import { mergeStatuses } from '../../_utils/statuses'
+  import { mark, stop } from '../../_utils/marks'
+  import { timelines } from '../../_static/timelines'
+  import { toast } from '../../_utils/toast'
+  import { database } from '../../_utils/database/database'
+  import { StatusStream } from '../../_utils/mastodon/StatusStream'
 
   const FETCH_LIMIT = 20
 
diff --git a/routes/_utils/asyncModules.js b/routes/_utils/asyncModules.js
index 25996ab..1e24275 100644
--- a/routes/_utils/asyncModules.js
+++ b/routes/_utils/asyncModules.js
@@ -12,7 +12,7 @@ export const importURLSearchParams = () => import(
 })
 
 export const importTimeline = () => import(
-  /* webpackChunkName: 'Timeline' */ '../_components/Timeline.html'
+  /* webpackChunkName: 'Timeline' */ '../_components/timeline/Timeline.html'
   ).then(mod => mod.default)
 
 export const importIntersectionObserver = () => import(
diff --git a/routes/_utils/showVideoDialog.js b/routes/_utils/showVideoDialog.js
index 55a4d98..e4d5ea5 100644
--- a/routes/_utils/showVideoDialog.js
+++ b/routes/_utils/showVideoDialog.js
@@ -1,4 +1,4 @@
-import VideoDialog from '../_components/VideoDialog.html'
+import VideoDialog from '../_components/status/VideoDialog.html'
 
 export function showVideoDialog(poster, src, width, height, description) {
   let dialog = document.createElement('dialog')
diff --git a/routes/accounts/[accountId].html b/routes/accounts/[accountId].html
index 052baf0..a99b4de 100644
--- a/routes/accounts/[accountId].html
+++ b/routes/accounts/[accountId].html
@@ -24,7 +24,7 @@
 </Layout>
 <script>
   import Layout from '../_components/Layout.html'
-  import LazyTimeline from '../_components/LazyTimeline.html'
+  import LazyTimeline from '../_components/timeline/LazyTimeline.html'
   import FreeTextLayout from '../_components/FreeTextLayout.html'
   import { store } from '../_utils/store.js'
   import HiddenFromSSR from '../_components/HiddenFromSSR'
diff --git a/routes/federated.html b/routes/federated.html
index 1637ecd..401b2ab 100644
--- a/routes/federated.html
+++ b/routes/federated.html
@@ -18,7 +18,7 @@
 
 <script>
   import Layout from './_components/Layout.html'
-  import LazyTimeline from './_components/LazyTimeline.html'
+  import LazyTimeline from './_components/timeline/LazyTimeline.html'
   import FreeTextLayout from './_components/FreeTextLayout.html'
   import { store } from './_utils/store.js'
   import HiddenFromSSR from './_components/HiddenFromSSR'
diff --git a/routes/index.html b/routes/index.html
index e621390..7635fef 100644
--- a/routes/index.html
+++ b/routes/index.html
@@ -14,7 +14,7 @@
 <script>
   import Layout from './_components/Layout.html'
   import NotLoggedInHome from './_components/NotLoggedInHome.html'
-  import LazyTimeline from './_components/LazyTimeline.html'
+  import LazyTimeline from './_components/timeline/LazyTimeline.html'
   import { store } from './_utils/store.js'
 
 	export default {
diff --git a/routes/local.html b/routes/local.html
index a9b6746..06f27de 100644
--- a/routes/local.html
+++ b/routes/local.html
@@ -18,7 +18,7 @@
 
 <script>
   import Layout from './_components/Layout.html'
-  import LazyTimeline from './_components/LazyTimeline.html'
+  import LazyTimeline from './_components/timeline/LazyTimeline.html'
   import FreeTextLayout from './_components/FreeTextLayout.html'
   import { store } from './_utils/store.js'
   import HiddenFromSSR from './_components/HiddenFromSSR'
diff --git a/routes/tags/[tagName].html b/routes/tags/[tagName].html
index ce88f26..1f416d3 100644
--- a/routes/tags/[tagName].html
+++ b/routes/tags/[tagName].html
@@ -24,7 +24,7 @@
 </Layout>
 <script>
   import Layout from '../_components/Layout.html'
-  import LazyTimeline from '../_components/LazyTimeline.html'
+  import LazyTimeline from '../_components/timeline/LazyTimeline.html'
   import FreeTextLayout from '../_components/FreeTextLayout.html'
   import { store } from '../_utils/store.js'
   import HiddenFromSSR from '../_components/HiddenFromSSR'