diff --git a/src/client/app/common/scripts/compose-notification.ts b/src/client/app/common/scripts/compose-notification.ts
index 2e58649ac2..47499e5490 100644
--- a/src/client/app/common/scripts/compose-notification.ts
+++ b/src/client/app/common/scripts/compose-notification.ts
@@ -1,6 +1,6 @@
-import getNoteSummary from '../../../../renderers/get-note-summary';
-import getReactionEmoji from '../../../../renderers/get-reaction-emoji';
-import getUserName from '../../../../renderers/get-user-name';
+import getNoteSummary from '../../../../misc/get-note-summary';
+import getReactionEmoji from '../../../../misc/get-reaction-emoji';
+import getUserName from '../../../../misc/get-user-name';
 
 type Notification = {
 	title: string;
diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue
index 2ddec29984..6abfc92dca 100644
--- a/src/client/app/common/views/components/messaging.vue
+++ b/src/client/app/common/views/components/messaging.vue
@@ -51,7 +51,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../acct/render';
+import getAcct from '../../../../../misc/acct/render';
 
 export default Vue.extend({
 	props: {
diff --git a/src/client/app/common/views/components/misskey-flavored-markdown.ts b/src/client/app/common/views/components/misskey-flavored-markdown.ts
index c321c76104..c93e09fb5f 100644
--- a/src/client/app/common/views/components/misskey-flavored-markdown.ts
+++ b/src/client/app/common/views/components/misskey-flavored-markdown.ts
@@ -1,7 +1,7 @@
 import Vue from 'vue';
 import * as emojilib from 'emojilib';
 import parse from '../../../../../mfm/parse';
-import getAcct from '../../../../../acct/render';
+import getAcct from '../../../../../misc/acct/render';
 import { url } from '../../../config';
 import MkUrl from './url.vue';
 import MkGoogle from './google.vue';
diff --git a/src/client/app/common/views/filters/user.ts b/src/client/app/common/views/filters/user.ts
index c5bb39f674..ca0910fc53 100644
--- a/src/client/app/common/views/filters/user.ts
+++ b/src/client/app/common/views/filters/user.ts
@@ -1,6 +1,6 @@
 import Vue from 'vue';
-import getAcct from '../../../../../acct/render';
-import getUserName from '../../../../../renderers/get-user-name';
+import getAcct from '../../../../../misc/acct/render';
+import getUserName from '../../../../../misc/get-user-name';
 
 Vue.filter('acct', user => {
 	return getAcct(user);
diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index c8e838be85..4b8c2d3b7c 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -31,8 +31,8 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import parseAcct from '../../../../../acct/parse';
-import getUserName from '../../../../../renderers/get-user-name';
+import parseAcct from '../../../../../misc/acct/parse';
+import getUserName from '../../../../../misc/get-user-name';
 import Progress from '../../../common/scripts/loading';
 
 export default Vue.extend({
diff --git a/src/client/app/desktop/views/components/messaging-room-window.vue b/src/client/app/desktop/views/components/messaging-room-window.vue
index cbb58b5e99..41b421b0e7 100644
--- a/src/client/app/desktop/views/components/messaging-room-window.vue
+++ b/src/client/app/desktop/views/components/messaging-room-window.vue
@@ -8,7 +8,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import { url } from '../../../config';
-import getAcct from '../../../../../acct/render';
+import getAcct from '../../../../../misc/acct/render';
 
 export default Vue.extend({
 	props: ['user'],
diff --git a/src/client/app/desktop/views/components/notes.vue b/src/client/app/desktop/views/components/notes.vue
index 1206eb7136..c959508020 100644
--- a/src/client/app/desktop/views/components/notes.vue
+++ b/src/client/app/desktop/views/components/notes.vue
@@ -34,7 +34,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import { url } from '../../../config';
-import getNoteSummary from '../../../../../renderers/get-note-summary';
+import getNoteSummary from '../../../../../misc/get-note-summary';
 
 import XNote from './notes.note.vue';
 
diff --git a/src/client/app/desktop/views/components/notifications.vue b/src/client/app/desktop/views/components/notifications.vue
index 32b36994db..b291e1f54a 100644
--- a/src/client/app/desktop/views/components/notifications.vue
+++ b/src/client/app/desktop/views/components/notifications.vue
@@ -110,7 +110,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getNoteSummary from '../../../../../renderers/get-note-summary';
+import getNoteSummary from '../../../../../misc/get-note-summary';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/desktop/views/components/user-preview.vue b/src/client/app/desktop/views/components/user-preview.vue
index 788881ead5..933e701e58 100644
--- a/src/client/app/desktop/views/components/user-preview.vue
+++ b/src/client/app/desktop/views/components/user-preview.vue
@@ -27,7 +27,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import * as anime from 'animejs';
-import parseAcct from '../../../../../acct/parse';
+import parseAcct from '../../../../../misc/acct/parse';
 
 export default Vue.extend({
 	props: {
diff --git a/src/client/app/desktop/views/pages/deck/deck.notification.vue b/src/client/app/desktop/views/pages/deck/deck.notification.vue
index a379adc69e..d0093ff282 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notification.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notification.vue
@@ -81,7 +81,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getNoteSummary from '../../../../../../renderers/get-note-summary';
+import getNoteSummary from '../../../../../../misc/get-note-summary';
 import XNote from './deck.note.vue';
 
 export default Vue.extend({
diff --git a/src/client/app/desktop/views/pages/messaging-room.vue b/src/client/app/desktop/views/pages/messaging-room.vue
index 06c32776c9..1ebd53cef4 100644
--- a/src/client/app/desktop/views/pages/messaging-room.vue
+++ b/src/client/app/desktop/views/pages/messaging-room.vue
@@ -7,8 +7,8 @@
 <script lang="ts">
 import Vue from 'vue';
 import Progress from '../../../common/scripts/loading';
-import parseAcct from '../../../../../acct/parse';
-import getUserName from '../../../../../renderers/get-user-name';
+import parseAcct from '../../../../../misc/acct/parse';
+import getUserName from '../../../../../misc/get-user-name';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue
index fc5c900037..64a4eaa872 100644
--- a/src/client/app/desktop/views/pages/user/user.vue
+++ b/src/client/app/desktop/views/pages/user/user.vue
@@ -27,8 +27,8 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import parseAcct from '../../../../../../acct/parse';
-import getUserName from '../../../../../../renderers/get-user-name';
+import parseAcct from '../../../../../../misc/acct/parse';
+import getUserName from '../../../../../../misc/get-user-name';
 import Progress from '../../../../common/scripts/loading';
 import XHeader from './user.header.vue';
 import XTimeline from './user.timeline.vue';
diff --git a/src/client/app/mobile/views/components/note-card.vue b/src/client/app/mobile/views/components/note-card.vue
index 89700b5e82..6d94c852be 100644
--- a/src/client/app/mobile/views/components/note-card.vue
+++ b/src/client/app/mobile/views/components/note-card.vue
@@ -14,7 +14,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import summary from '../../../../../renderers/get-note-summary';
+import summary from '../../../../../misc/get-note-summary';
 
 export default Vue.extend({
 	props: ['note'],
diff --git a/src/client/app/mobile/views/components/notes.vue b/src/client/app/mobile/views/components/notes.vue
index 06d22c7258..01f3d76c74 100644
--- a/src/client/app/mobile/views/components/notes.vue
+++ b/src/client/app/mobile/views/components/notes.vue
@@ -37,7 +37,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getNoteSummary from '../../../../../renderers/get-note-summary';
+import getNoteSummary from '../../../../../misc/get-note-summary';
 
 const displayLimit = 30;
 
diff --git a/src/client/app/mobile/views/components/notification-preview.vue b/src/client/app/mobile/views/components/notification-preview.vue
index 5e2306932b..be2c7a60ed 100644
--- a/src/client/app/mobile/views/components/notification-preview.vue
+++ b/src/client/app/mobile/views/components/notification-preview.vue
@@ -66,7 +66,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getNoteSummary from '../../../../../renderers/get-note-summary';
+import getNoteSummary from '../../../../../misc/get-note-summary';
 
 export default Vue.extend({
 	props: ['notification'],
diff --git a/src/client/app/mobile/views/components/notification.vue b/src/client/app/mobile/views/components/notification.vue
index bbcae05f10..ee90c6b46b 100644
--- a/src/client/app/mobile/views/components/notification.vue
+++ b/src/client/app/mobile/views/components/notification.vue
@@ -81,7 +81,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getNoteSummary from '../../../../../renderers/get-note-summary';
+import getNoteSummary from '../../../../../misc/get-note-summary';
 
 export default Vue.extend({
 	props: ['notification'],
diff --git a/src/client/app/mobile/views/pages/followers.vue b/src/client/app/mobile/views/pages/followers.vue
index dfb9c62142..f53fadb589 100644
--- a/src/client/app/mobile/views/pages/followers.vue
+++ b/src/client/app/mobile/views/pages/followers.vue
@@ -19,8 +19,8 @@
 <script lang="ts">
 import Vue from 'vue';
 import Progress from '../../../common/scripts/loading';
-import parseAcct from '../../../../../acct/parse';
-import getUserName from '../../../../../renderers/get-user-name';
+import parseAcct from '../../../../../misc/acct/parse';
+import getUserName from '../../../../../misc/get-user-name';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/mobile/views/pages/following.vue b/src/client/app/mobile/views/pages/following.vue
index 35461ea2fc..b28d7dd7b9 100644
--- a/src/client/app/mobile/views/pages/following.vue
+++ b/src/client/app/mobile/views/pages/following.vue
@@ -19,7 +19,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import Progress from '../../../common/scripts/loading';
-import parseAcct from '../../../../../acct/parse';
+import parseAcct from '../../../../../misc/acct/parse';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/mobile/views/pages/messaging-room.vue b/src/client/app/mobile/views/pages/messaging-room.vue
index 8b82b03fb9..35ae506761 100644
--- a/src/client/app/mobile/views/pages/messaging-room.vue
+++ b/src/client/app/mobile/views/pages/messaging-room.vue
@@ -10,7 +10,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import parseAcct from '../../../../../acct/parse';
+import parseAcct from '../../../../../misc/acct/parse';
 
 export default Vue.extend({
 	data() {
diff --git a/src/client/app/mobile/views/pages/messaging.vue b/src/client/app/mobile/views/pages/messaging.vue
index 057470efd9..8dcbc5d6c5 100644
--- a/src/client/app/mobile/views/pages/messaging.vue
+++ b/src/client/app/mobile/views/pages/messaging.vue
@@ -7,7 +7,7 @@
 
 <script lang="ts">
 import Vue from 'vue';
-import getAcct from '../../../../../acct/render';
+import getAcct from '../../../../../misc/acct/render';
 
 export default Vue.extend({
 	mounted() {
diff --git a/src/client/app/mobile/views/pages/user.vue b/src/client/app/mobile/views/pages/user.vue
index ba9de9f8a6..0b51c8b4ce 100644
--- a/src/client/app/mobile/views/pages/user.vue
+++ b/src/client/app/mobile/views/pages/user.vue
@@ -64,7 +64,7 @@
 <script lang="ts">
 import Vue from 'vue';
 import * as age from 's-age';
-import parseAcct from '../../../../../acct/parse';
+import parseAcct from '../../../../../misc/acct/parse';
 import Progress from '../../../common/scripts/loading';
 import XHome from './user/home.vue';
 
diff --git a/src/index.ts b/src/index.ts
index 1a76044572..46bbb83b07 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -12,19 +12,17 @@ import chalk from 'chalk';
 import isRoot = require('is-root');
 import Xev from 'xev';
 
-import Logger from './utils/logger';
-import ProgressBar from './utils/cli/progressbar';
-import EnvironmentInfo from './utils/environmentInfo';
-import MachineInfo from './utils/machineInfo';
-import DependencyInfo from './utils/dependencyInfo';
+import Logger from './misc/logger';
+import ProgressBar from './misc/cli/progressbar';
+import EnvironmentInfo from './misc/environmentInfo';
+import MachineInfo from './misc/machineInfo';
+import DependencyInfo from './misc/dependencyInfo';
 import serverStats from './daemons/server-stats';
 import notesStats from './daemons/notes-stats';
 import db from './db/mongodb';
 import loadConfig from './config/load';
 import { Config } from './config/types';
 
-import parseOpt from './parse-opt';
-
 const clusterLog = debug('misskey:cluster');
 const ev = new Xev();
 
@@ -44,23 +42,21 @@ main();
  * Init process
  */
 function main() {
-	const opt = parseOpt(process.argv, 2);
-
 	if (cluster.isMaster) {
-		masterMain(opt);
+		masterMain();
 
 		ev.mount();
 		serverStats();
 		notesStats();
 	} else {
-		workerMain(opt);
+		workerMain();
 	}
 }
 
 /**
  * Init master process
  */
-async function masterMain(opt: any) {
+async function masterMain() {
 	let config: Config;
 
 	try {
@@ -75,32 +71,24 @@ async function masterMain(opt: any) {
 	Logger.info(chalk.green('Successfully initialized :)'));
 
 	spawnWorkers(() => {
-		if (!opt['only-processor']) {
-			Logger.info(chalk.bold.green(
-				`Now listening on port ${chalk.underline(config.port.toString())}`));
+		Logger.info(chalk.bold.green(
+			`Now listening on port ${chalk.underline(config.port.toString())}`));
 
-			Logger.info(chalk.bold.green(config.url));
-		}
+		Logger.info(chalk.bold.green(config.url));
 
-		if (!opt['only-server']) {
-			Logger.info(chalk.bold.green('Now processing jobs'));
-		}
+		Logger.info(chalk.bold.green('Now processing jobs'));
 	});
 }
 
 /**
  * Init worker process
  */
-async function workerMain(opt: any) {
-	if (!opt['only-processor']) {
-		// start server
-		await require('./server').default();
-	}
+async function workerMain() {
+	// start server
+	await require('./server').default();
 
-	if (!opt['only-server']) {
-		// start processor
-		require('./queue').default();
-	}
+	// start processor
+	require('./queue').default();
 
 	// Send a 'ready' message to parent process
 	process.send('ready');
diff --git a/src/mfm/parse/elements/mention.ts b/src/mfm/parse/elements/mention.ts
index eda60b530a..a95ec00384 100644
--- a/src/mfm/parse/elements/mention.ts
+++ b/src/mfm/parse/elements/mention.ts
@@ -1,7 +1,7 @@
 /**
  * Mention
  */
-import parseAcct from '../../../acct/parse';
+import parseAcct from '../../../misc/acct/parse';
 
 export type TextElementMention = {
 	type: 'mention'
diff --git a/src/acct/parse.ts b/src/misc/acct/parse.ts
similarity index 100%
rename from src/acct/parse.ts
rename to src/misc/acct/parse.ts
diff --git a/src/acct/render.ts b/src/misc/acct/render.ts
similarity index 72%
rename from src/acct/render.ts
rename to src/misc/acct/render.ts
index c29bfb4764..20031883d3 100644
--- a/src/acct/render.ts
+++ b/src/misc/acct/render.ts
@@ -1,4 +1,4 @@
-import { IUser } from '../models/user';
+import { IUser } from '../../models/user';
 
 export default (user: IUser) => {
 	return user.host === null ? user.username : `${user.username}@${user.host}`;
diff --git a/src/cafy-id.ts b/src/misc/cafy-id.ts
similarity index 100%
rename from src/cafy-id.ts
rename to src/misc/cafy-id.ts
diff --git a/src/utils/cli/indicator.ts b/src/misc/cli/indicator.ts
similarity index 100%
rename from src/utils/cli/indicator.ts
rename to src/misc/cli/indicator.ts
diff --git a/src/utils/cli/progressbar.ts b/src/misc/cli/progressbar.ts
similarity index 100%
rename from src/utils/cli/progressbar.ts
rename to src/misc/cli/progressbar.ts
diff --git a/src/utils/dependencyInfo.ts b/src/misc/dependencyInfo.ts
similarity index 100%
rename from src/utils/dependencyInfo.ts
rename to src/misc/dependencyInfo.ts
diff --git a/src/utils/environmentInfo.ts b/src/misc/environmentInfo.ts
similarity index 100%
rename from src/utils/environmentInfo.ts
rename to src/misc/environmentInfo.ts
diff --git a/src/renderers/get-note-summary.ts b/src/misc/get-note-summary.ts
similarity index 100%
rename from src/renderers/get-note-summary.ts
rename to src/misc/get-note-summary.ts
diff --git a/src/renderers/get-notification-summary.ts b/src/misc/get-notification-summary.ts
similarity index 96%
rename from src/renderers/get-notification-summary.ts
rename to src/misc/get-notification-summary.ts
index 67c9654769..71d4973ce9 100644
--- a/src/renderers/get-notification-summary.ts
+++ b/src/misc/get-notification-summary.ts
@@ -1,4 +1,4 @@
-import getUserName from './get-user-name
+import getUserName from './get-user-name';
 import getNoteSummary from './get-note-summary';
 import getReactionEmoji from './get-reaction-emoji';
 
diff --git a/src/renderers/get-reaction-emoji.ts b/src/misc/get-reaction-emoji.ts
similarity index 100%
rename from src/renderers/get-reaction-emoji.ts
rename to src/misc/get-reaction-emoji.ts
diff --git a/src/renderers/get-user-name.ts b/src/misc/get-user-name.ts
similarity index 100%
rename from src/renderers/get-user-name.ts
rename to src/misc/get-user-name.ts
diff --git a/src/renderers/get-user-summary.ts b/src/misc/get-user-summary.ts
similarity index 93%
rename from src/renderers/get-user-summary.ts
rename to src/misc/get-user-summary.ts
index 1bd9a7fb47..625caf1f7e 100644
--- a/src/renderers/get-user-summary.ts
+++ b/src/misc/get-user-summary.ts
@@ -1,5 +1,5 @@
 import { IUser, isLocalUser } from '../models/user';
-import getAcct from '../acct/render';
+import getAcct from '../misc/acct/render';
 import getUserName from './get-user-name';
 
 /**
diff --git a/src/utils/logger.ts b/src/misc/logger.ts
similarity index 100%
rename from src/utils/logger.ts
rename to src/misc/logger.ts
diff --git a/src/utils/machineInfo.ts b/src/misc/machineInfo.ts
similarity index 100%
rename from src/utils/machineInfo.ts
rename to src/misc/machineInfo.ts
diff --git a/src/publishers/notify.ts b/src/notify.ts
similarity index 88%
rename from src/publishers/notify.ts
rename to src/notify.ts
index 760d467393..f55dea167c 100644
--- a/src/publishers/notify.ts
+++ b/src/notify.ts
@@ -1,10 +1,10 @@
 import * as mongo from 'mongodb';
-import Notification from '../models/notification';
-import Mute from '../models/mute';
-import { pack } from '../models/notification';
+import Notification from './models/notification';
+import Mute from './models/mute';
+import { pack } from './models/notification';
 import stream from './stream';
-import User from '../models/user';
-import pushSw from './push-sw
+import User from './models/user';
+import pushSw from './push-sw';
 
 export default (
 	notifiee: mongo.ObjectID,
diff --git a/src/parse-opt.ts b/src/parse-opt.ts
deleted file mode 100644
index 29e5959c3e..0000000000
--- a/src/parse-opt.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import * as nopt from 'nopt';
-
-export default (vector: any, index: any) => {
-	const parsed = nopt({
-		'only-processor': Boolean,
-		'only-server': Boolean
-	}, {
-		p: ['--only-processor'],
-		s: ['--only-server']
-	}, vector, index);
-
-	if (parsed['only-processor'] && parsed['only-server']) {
-		throw 'only-processor option and only-server option cannot be set at the same time';
-	}
-
-	return parsed;
-};
diff --git a/src/publishers/push-sw.ts b/src/push-sw.ts
similarity index 93%
rename from src/publishers/push-sw.ts
rename to src/push-sw.ts
index b0b4701155..cfed5f03cd 100644
--- a/src/publishers/push-sw.ts
+++ b/src/push-sw.ts
@@ -1,7 +1,7 @@
 const push = require('web-push');
 import * as mongo from 'mongodb';
-import Subscription from '../models/sw-subscription';
-import config from '../config';
+import Subscription from './models/sw-subscription';
+import config from './config';
 
 if (config.sw) {
 	// アプリケーションの連絡先と、サーバーサイドの鍵ペアの情報を登録
diff --git a/src/queue/processors/http/process-inbox.ts b/src/queue/processors/http/process-inbox.ts
index 0da442aefb..7b62f057bc 100644
--- a/src/queue/processors/http/process-inbox.ts
+++ b/src/queue/processors/http/process-inbox.ts
@@ -2,7 +2,7 @@ import * as kue from 'kue';
 import * as debug from 'debug';
 
 const httpSignature = require('http-signature');
-import parseAcct from '../../../acct/parse';
+import parseAcct from '../../../misc/acct/parse';
 import User, { IRemoteUser } from '../../../models/user';
 import perform from '../../../remote/activitypub/perform';
 import { resolvePerson } from '../../../remote/activitypub/models/person';
diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts
index f8a01a6ffe..0448ae61b8 100644
--- a/src/server/activitypub.ts
+++ b/src/server/activitypub.ts
@@ -11,7 +11,6 @@ import renderNote from '../remote/activitypub/renderer/note';
 import renderKey from '../remote/activitypub/renderer/key';
 import renderPerson from '../remote/activitypub/renderer/person';
 import renderOrderedCollection from '../remote/activitypub/renderer/ordered-collection';
-import parseAcct from '../acct/parse';
 import config from '../config';
 
 // Init router
diff --git a/src/server/api/common/read-messaging-message.ts b/src/server/api/common/read-messaging-message.ts
index fd5e9f242c..bd5a04f1b0 100644
--- a/src/server/api/common/read-messaging-message.ts
+++ b/src/server/api/common/read-messaging-message.ts
@@ -1,9 +1,9 @@
 import * as mongo from 'mongodb';
 import Message from '../../../models/messaging-message';
 import { IMessagingMessage as IMessage } from '../../../models/messaging-message';
-import publishUserStream from '../../../publishers/stream';
-import { publishMessagingStream } from '../../../publishers/stream';
-import { publishMessagingIndexStream } from '../../../publishers/stream';
+import publishUserStream from '../../../stream';
+import { publishMessagingStream } from '../../../stream';
+import { publishMessagingIndexStream } from '../../../stream';
 import User from '../../../models/user';
 
 /**
diff --git a/src/server/api/common/read-notification.ts b/src/server/api/common/read-notification.ts
index 6505c58c39..fcebad6baa 100644
--- a/src/server/api/common/read-notification.ts
+++ b/src/server/api/common/read-notification.ts
@@ -1,6 +1,6 @@
 import * as mongo from 'mongodb';
 import { default as Notification, INotification } from '../../../models/notification';
-import publishUserStream from '../../../publishers/stream';
+import publishUserStream from '../../../stream';
 import Mute from '../../../models/mute';
 import User from '../../../models/user';
 
diff --git a/src/server/api/endpoints/aggregation/users/activity.ts b/src/server/api/endpoints/aggregation/users/activity.ts
index 4afa6d1203..0ec3f0db76 100644
--- a/src/server/api/endpoints/aggregation/users/activity.ts
+++ b/src/server/api/endpoints/aggregation/users/activity.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import User from '../../../../../models/user';
 import Note from '../../../../../models/note';
 
diff --git a/src/server/api/endpoints/aggregation/users/followers.ts b/src/server/api/endpoints/aggregation/users/followers.ts
index 484c58ad3d..94eb83febc 100644
--- a/src/server/api/endpoints/aggregation/users/followers.ts
+++ b/src/server/api/endpoints/aggregation/users/followers.ts
@@ -1,7 +1,7 @@
 /**
  * Module dependencies
  */
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import User from '../../../../../models/user';
 import FollowedLog from '../../../../../models/followed-log';
 
diff --git a/src/server/api/endpoints/aggregation/users/following.ts b/src/server/api/endpoints/aggregation/users/following.ts
index 16812a9f09..d2e4d256fe 100644
--- a/src/server/api/endpoints/aggregation/users/following.ts
+++ b/src/server/api/endpoints/aggregation/users/following.ts
@@ -1,7 +1,7 @@
 /**
  * Module dependencies
  */
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import User from '../../../../../models/user';
 import FollowingLog from '../../../../../models/following-log';
 
diff --git a/src/server/api/endpoints/aggregation/users/post.ts b/src/server/api/endpoints/aggregation/users/post.ts
index 4965d3c7ac..090f6d2f09 100644
--- a/src/server/api/endpoints/aggregation/users/post.ts
+++ b/src/server/api/endpoints/aggregation/users/post.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import User from '../../../../../models/user';
 import Note from '../../../../../models/note';
 
diff --git a/src/server/api/endpoints/aggregation/users/reaction.ts b/src/server/api/endpoints/aggregation/users/reaction.ts
index 20b5e93d54..ce9e150966 100644
--- a/src/server/api/endpoints/aggregation/users/reaction.ts
+++ b/src/server/api/endpoints/aggregation/users/reaction.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import User from '../../../../../models/user';
 import Reaction from '../../../../../models/note-reaction';
 
diff --git a/src/server/api/endpoints/app/show.ts b/src/server/api/endpoints/app/show.ts
index 2b8a929543..2a8b4dc872 100644
--- a/src/server/api/endpoints/app/show.ts
+++ b/src/server/api/endpoints/app/show.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import App, { pack, IApp } from '../../../../models/app';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/drive/files.ts b/src/server/api/endpoints/drive/files.ts
index c0b6c3b069..000e4dcdd2 100644
--- a/src/server/api/endpoints/drive/files.ts
+++ b/src/server/api/endpoints/drive/files.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import DriveFile, { pack } from '../../../../models/drive-file';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/drive/files/create.ts b/src/server/api/endpoints/drive/files/create.ts
index 5a2bef38ce..401ec23d82 100644
--- a/src/server/api/endpoints/drive/files/create.ts
+++ b/src/server/api/endpoints/drive/files/create.ts
@@ -1,5 +1,5 @@
 import * as fs from 'fs';
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import { validateFileName, pack } from '../../../../../models/drive-file';
 import create from '../../../../../services/drive/add-file';
 import { ILocalUser } from '../../../../../models/user';
diff --git a/src/server/api/endpoints/drive/files/delete.ts b/src/server/api/endpoints/drive/files/delete.ts
index 992f0286f1..8a63be0e2f 100644
--- a/src/server/api/endpoints/drive/files/delete.ts
+++ b/src/server/api/endpoints/drive/files/delete.ts
@@ -1,7 +1,7 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import DriveFile from '../../../../../models/drive-file';
 import del from '../../../../../services/drive/delete-file';
-import { publishDriveStream } from '../../../../../publishers/stream';
+import { publishDriveStream } from '../../../../../stream';
 import { ILocalUser } from '../../../../../models/user';
 
 /**
diff --git a/src/server/api/endpoints/drive/files/find.ts b/src/server/api/endpoints/drive/files/find.ts
index ed76749739..8b166e2dbc 100644
--- a/src/server/api/endpoints/drive/files/find.ts
+++ b/src/server/api/endpoints/drive/files/find.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import DriveFile, { pack } from '../../../../../models/drive-file';
 import { ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/drive/files/show.ts b/src/server/api/endpoints/drive/files/show.ts
index 2e4ac06bf6..02faa6d5a7 100644
--- a/src/server/api/endpoints/drive/files/show.ts
+++ b/src/server/api/endpoints/drive/files/show.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import DriveFile, { pack } from '../../../../../models/drive-file';
 import { ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts
index 73a193a56b..95dd6c2acc 100644
--- a/src/server/api/endpoints/drive/files/update.ts
+++ b/src/server/api/endpoints/drive/files/update.ts
@@ -1,7 +1,7 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import DriveFolder from '../../../../../models/drive-folder';
 import DriveFile, { validateFileName, pack } from '../../../../../models/drive-file';
-import { publishDriveStream } from '../../../../../publishers/stream';
+import { publishDriveStream } from '../../../../../stream';
 import { ILocalUser } from '../../../../../models/user';
 
 /**
diff --git a/src/server/api/endpoints/drive/files/upload_from_url.ts b/src/server/api/endpoints/drive/files/upload_from_url.ts
index 7218b345b0..4af365c394 100644
--- a/src/server/api/endpoints/drive/files/upload_from_url.ts
+++ b/src/server/api/endpoints/drive/files/upload_from_url.ts
@@ -1,7 +1,7 @@
 /**
  * Module dependencies
  */
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import { pack } from '../../../../../models/drive-file';
 import uploadFromUrl from '../../../../../services/drive/upload-from-url';
 import { ILocalUser } from '../../../../../models/user';
diff --git a/src/server/api/endpoints/drive/folders.ts b/src/server/api/endpoints/drive/folders.ts
index 70f581f424..f1817ec42f 100644
--- a/src/server/api/endpoints/drive/folders.ts
+++ b/src/server/api/endpoints/drive/folders.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import DriveFolder, { pack } from '../../../../models/drive-folder';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/drive/folders/create.ts b/src/server/api/endpoints/drive/folders/create.ts
index 60c7383895..6205691e15 100644
--- a/src/server/api/endpoints/drive/folders/create.ts
+++ b/src/server/api/endpoints/drive/folders/create.ts
@@ -1,6 +1,6 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import DriveFolder, { isValidFolderName, pack } from '../../../../../models/drive-folder';
-import { publishDriveStream } from '../../../../../publishers/stream';
+import { publishDriveStream } from '../../../../../stream';
 import { ILocalUser } from '../../../../../models/user';
 
 /**
diff --git a/src/server/api/endpoints/drive/folders/find.ts b/src/server/api/endpoints/drive/folders/find.ts
index 2e4a09b80d..64065d9379 100644
--- a/src/server/api/endpoints/drive/folders/find.ts
+++ b/src/server/api/endpoints/drive/folders/find.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import DriveFolder, { pack } from '../../../../../models/drive-folder';
 import { ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/drive/folders/show.ts b/src/server/api/endpoints/drive/folders/show.ts
index edc8cb6f1c..5f56606215 100644
--- a/src/server/api/endpoints/drive/folders/show.ts
+++ b/src/server/api/endpoints/drive/folders/show.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import DriveFolder, { pack } from '../../../../../models/drive-folder';
 import { ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/drive/folders/update.ts b/src/server/api/endpoints/drive/folders/update.ts
index 744d8fcb12..b833655974 100644
--- a/src/server/api/endpoints/drive/folders/update.ts
+++ b/src/server/api/endpoints/drive/folders/update.ts
@@ -1,6 +1,6 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import DriveFolder, { isValidFolderName, pack } from '../../../../../models/drive-folder';
-import { publishDriveStream } from '../../../../../publishers/stream';
+import { publishDriveStream } from '../../../../../stream';
 import { ILocalUser } from '../../../../../models/user';
 
 /**
diff --git a/src/server/api/endpoints/drive/stream.ts b/src/server/api/endpoints/drive/stream.ts
index a7aef926f0..39c878a1f8 100644
--- a/src/server/api/endpoints/drive/stream.ts
+++ b/src/server/api/endpoints/drive/stream.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import DriveFile, { pack } from '../../../../models/drive-file';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/following/create.ts b/src/server/api/endpoints/following/create.ts
index ffd399d446..a902af023f 100644
--- a/src/server/api/endpoints/following/create.ts
+++ b/src/server/api/endpoints/following/create.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { pack, ILocalUser } from '../../../../models/user';
 import Following from '../../../../models/following';
 import create from '../../../../services/following/create';
diff --git a/src/server/api/endpoints/following/delete.ts b/src/server/api/endpoints/following/delete.ts
index 46fe13b2a9..f1d29e80b2 100644
--- a/src/server/api/endpoints/following/delete.ts
+++ b/src/server/api/endpoints/following/delete.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { pack, ILocalUser } from '../../../../models/user';
 import Following from '../../../../models/following';
 import deleteFollowing from '../../../../services/following/delete';
diff --git a/src/server/api/endpoints/following/requests/accept.ts b/src/server/api/endpoints/following/requests/accept.ts
index 722fdac607..49c29160b1 100644
--- a/src/server/api/endpoints/following/requests/accept.ts
+++ b/src/server/api/endpoints/following/requests/accept.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import acceptFollowRequest from '../../../../../services/following/requests/accept';
 import User, { ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/following/requests/cancel.ts b/src/server/api/endpoints/following/requests/cancel.ts
index 88c1b57f43..6c3539d757 100644
--- a/src/server/api/endpoints/following/requests/cancel.ts
+++ b/src/server/api/endpoints/following/requests/cancel.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import cancelFollowRequest from '../../../../../services/following/requests/cancel';
 import User, { pack, ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/following/requests/reject.ts b/src/server/api/endpoints/following/requests/reject.ts
index 7b7db2909d..f92ea52d46 100644
--- a/src/server/api/endpoints/following/requests/reject.ts
+++ b/src/server/api/endpoints/following/requests/reject.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import rejectFollowRequest from '../../../../../services/following/requests/reject';
 import User, { ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/following/stalk.ts b/src/server/api/endpoints/following/stalk.ts
index 19c71cfd5a..eb4afb3116 100644
--- a/src/server/api/endpoints/following/stalk.ts
+++ b/src/server/api/endpoints/following/stalk.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Following from '../../../../models/following';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/following/unstalk.ts b/src/server/api/endpoints/following/unstalk.ts
index 03ee107835..b44ef68b96 100644
--- a/src/server/api/endpoints/following/unstalk.ts
+++ b/src/server/api/endpoints/following/unstalk.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Following from '../../../../models/following';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/games/reversi/games.ts b/src/server/api/endpoints/games/reversi/games.ts
index 585e833ef1..50a8faa88c 100644
--- a/src/server/api/endpoints/games/reversi/games.ts
+++ b/src/server/api/endpoints/games/reversi/games.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import ReversiGame, { pack } from '../../../../../models/games/reversi/game';
 import { ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/games/reversi/games/show.ts b/src/server/api/endpoints/games/reversi/games/show.ts
index 62c37f8e0a..8d7cd987a0 100644
--- a/src/server/api/endpoints/games/reversi/games/show.ts
+++ b/src/server/api/endpoints/games/reversi/games/show.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../../misc/cafy-id';
 import ReversiGame, { pack } from '../../../../../../models/games/reversi/game';
 import Reversi from '../../../../../../games/reversi/core';
 import { ILocalUser } from '../../../../../../models/user';
diff --git a/src/server/api/endpoints/games/reversi/match.ts b/src/server/api/endpoints/games/reversi/match.ts
index 77c014143a..4364531516 100644
--- a/src/server/api/endpoints/games/reversi/match.ts
+++ b/src/server/api/endpoints/games/reversi/match.ts
@@ -1,8 +1,8 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Matching, { pack as packMatching } from '../../../../../models/games/reversi/matching';
 import ReversiGame, { pack as packGame } from '../../../../../models/games/reversi/game';
 import User, { ILocalUser } from '../../../../../models/user';
-import publishUserStream, { publishReversiStream } from '../../../../../publishers/stream';
+import publishUserStream, { publishReversiStream } from '../../../../../stream';
 import { eighteight } from '../../../../../games/reversi/maps';
 
 export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
diff --git a/src/server/api/endpoints/i/favorites.ts b/src/server/api/endpoints/i/favorites.ts
index 75b456ca58..d37632822a 100644
--- a/src/server/api/endpoints/i/favorites.ts
+++ b/src/server/api/endpoints/i/favorites.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Favorite, { pack } from '../../../../models/favorite';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/i/notifications.ts b/src/server/api/endpoints/i/notifications.ts
index 1073b0369f..6a1ba07a3a 100644
--- a/src/server/api/endpoints/i/notifications.ts
+++ b/src/server/api/endpoints/i/notifications.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Notification from '../../../../models/notification';
 import Mute from '../../../../models/mute';
 import { pack } from '../../../../models/notification';
diff --git a/src/server/api/endpoints/i/pin.ts b/src/server/api/endpoints/i/pin.ts
index 1edc571737..ae03a86336 100644
--- a/src/server/api/endpoints/i/pin.ts
+++ b/src/server/api/endpoints/i/pin.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { ILocalUser } from '../../../../models/user';
 import Note from '../../../../models/note';
 import { pack } from '../../../../models/user';
diff --git a/src/server/api/endpoints/i/regenerate_token.ts b/src/server/api/endpoints/i/regenerate_token.ts
index 1f68e3abd7..5c30c4f496 100644
--- a/src/server/api/endpoints/i/regenerate_token.ts
+++ b/src/server/api/endpoints/i/regenerate_token.ts
@@ -1,7 +1,7 @@
 import $ from 'cafy';
 import * as bcrypt from 'bcryptjs';
 import User, { ILocalUser } from '../../../../models/user';
-import event from '../../../../publishers/stream';
+import event from '../../../../stream';
 import generateUserToken from '../../common/generate-native-user-token';
 
 /**
diff --git a/src/server/api/endpoints/i/signin_history.ts b/src/server/api/endpoints/i/signin_history.ts
index 1315a2cfb6..a99a9e81ec 100644
--- a/src/server/api/endpoints/i/signin_history.ts
+++ b/src/server/api/endpoints/i/signin_history.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Signin, { pack } from '../../../../models/signin';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/i/update.ts b/src/server/api/endpoints/i/update.ts
index 08d17fa854..6d6cf3e4c5 100644
--- a/src/server/api/endpoints/i/update.ts
+++ b/src/server/api/endpoints/i/update.ts
@@ -1,6 +1,6 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { isValidName, isValidDescription, isValidLocation, isValidBirthday, pack, ILocalUser } from '../../../../models/user';
-import event from '../../../../publishers/stream';
+import event from '../../../../stream';
 import DriveFile from '../../../../models/drive-file';
 import acceptAllFollowRequests from '../../../../services/following/requests/accept-all';
 import { IApp } from '../../../../models/app';
diff --git a/src/server/api/endpoints/i/update_client_setting.ts b/src/server/api/endpoints/i/update_client_setting.ts
index edcd3e7423..affaee37ee 100644
--- a/src/server/api/endpoints/i/update_client_setting.ts
+++ b/src/server/api/endpoints/i/update_client_setting.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy';
 import User, { ILocalUser } from '../../../../models/user';
-import event from '../../../../publishers/stream';
+import event from '../../../../stream';
 
 /**
  * Update myself
diff --git a/src/server/api/endpoints/i/update_home.ts b/src/server/api/endpoints/i/update_home.ts
index 03795ae8d9..c41ae7b3e8 100644
--- a/src/server/api/endpoints/i/update_home.ts
+++ b/src/server/api/endpoints/i/update_home.ts
@@ -1,16 +1,15 @@
 import $ from 'cafy';
 import User, { ILocalUser } from '../../../../models/user';
-import event from '../../../../publishers/stream';
+import event from '../../../../stream';
 
 export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
 	// Get 'home' parameter
-	const [home, homeErr] = $.arr(
-		$.obj.strict()
-			.have('name', $.str)
-			.have('id', $.str)
-			.have('place', $.str)
-			.have('data', $.obj))
-		.get(params.home);
+	const [home, homeErr] = $.arr($.obj({
+		name: $.str,
+		id: $.str,
+		place: $.str,
+		data: $.obj()
+	}).strict()).get(params.home);
 	if (homeErr) return rej('invalid home param');
 
 	await User.update(user._id, {
diff --git a/src/server/api/endpoints/i/update_mobile_home.ts b/src/server/api/endpoints/i/update_mobile_home.ts
index a2e2a13465..ca61e52600 100644
--- a/src/server/api/endpoints/i/update_mobile_home.ts
+++ b/src/server/api/endpoints/i/update_mobile_home.ts
@@ -1,15 +1,14 @@
 import $ from 'cafy';
 import User, { ILocalUser } from '../../../../models/user';
-import event from '../../../../publishers/stream';
+import event from '../../../../stream';
 
 export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
 	// Get 'home' parameter
-	const [home, homeErr] = $.arr(
-		$.obj.strict()
-			.have('name', $.str)
-			.have('id', $.str)
-			.have('data', $.obj))
-		.get(params.home);
+	const [home, homeErr] = $.arr($.obj({
+		name: $.str,
+		id: $.str,
+		data: $.obj()
+	}).strict()).get(params.home);
 	if (homeErr) return rej('invalid home param');
 
 	await User.update(user._id, {
diff --git a/src/server/api/endpoints/i/update_widget.ts b/src/server/api/endpoints/i/update_widget.ts
index 006916c9fe..a413ca7e9b 100644
--- a/src/server/api/endpoints/i/update_widget.ts
+++ b/src/server/api/endpoints/i/update_widget.ts
@@ -1,6 +1,6 @@
 import $ from 'cafy';
 import User, { ILocalUser } from '../../../../models/user';
-import event from '../../../../publishers/stream';
+import event from '../../../../stream';
 
 export default async (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
 	// Get 'id' parameter
@@ -8,7 +8,7 @@ export default async (params: any, user: ILocalUser) => new Promise(async (res,
 	if (idErr) return rej('invalid id param');
 
 	// Get 'data' parameter
-	const [data, dataErr] = $.obj.get(params.data);
+	const [data, dataErr] = $.obj().get(params.data);
 	if (dataErr) return rej('invalid data param');
 
 	if (id == null && data == null) return rej('you need to set id and data params if home param unset');
diff --git a/src/server/api/endpoints/messaging/messages.ts b/src/server/api/endpoints/messaging/messages.ts
index 6ac1cc980a..083fcd83f5 100644
--- a/src/server/api/endpoints/messaging/messages.ts
+++ b/src/server/api/endpoints/messaging/messages.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Message from '../../../../models/messaging-message';
 import User, { ILocalUser } from '../../../../models/user';
 import { pack } from '../../../../models/messaging-message';
diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
index bcbbd9a1f4..c3d9824d69 100644
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ b/src/server/api/endpoints/messaging/messages/create.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Message from '../../../../../models/messaging-message';
 import { isValidText } from '../../../../../models/messaging-message';
 import History from '../../../../../models/messaging-history';
@@ -6,9 +6,9 @@ import User, { ILocalUser } from '../../../../../models/user';
 import Mute from '../../../../../models/mute';
 import DriveFile from '../../../../../models/drive-file';
 import { pack } from '../../../../../models/messaging-message';
-import publishUserStream from '../../../../../publishers/stream';
-import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../publishers/stream';
-import pushSw from '../../../../../publishers/push-sw';
+import publishUserStream from '../../../../../stream';
+import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../stream';
+import pushSw from '../../../../../push-sw';
 import config from '../../../../../config';
 
 /**
@@ -116,7 +116,7 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
 	}, 3000);
 
 	// Register to search database
-	if (message.text && config.elasticsearch.enable) {
+	if (message.text && config.elasticsearch) {
 		const es = require('../../../db/elasticsearch');
 
 		es.index({
diff --git a/src/server/api/endpoints/mute/create.ts b/src/server/api/endpoints/mute/create.ts
index 0f8d8fb09d..3e766bf170 100644
--- a/src/server/api/endpoints/mute/create.ts
+++ b/src/server/api/endpoints/mute/create.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { ILocalUser } from '../../../../models/user';
 import Mute from '../../../../models/mute';
 
diff --git a/src/server/api/endpoints/mute/delete.ts b/src/server/api/endpoints/mute/delete.ts
index bc3160c157..057baed2be 100644
--- a/src/server/api/endpoints/mute/delete.ts
+++ b/src/server/api/endpoints/mute/delete.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { ILocalUser } from '../../../../models/user';
 import Mute from '../../../../models/mute';
 
diff --git a/src/server/api/endpoints/mute/list.ts b/src/server/api/endpoints/mute/list.ts
index 89287c50a0..54ca84c61d 100644
--- a/src/server/api/endpoints/mute/list.ts
+++ b/src/server/api/endpoints/mute/list.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Mute from '../../../../models/mute';
 import { pack, ILocalUser } from '../../../../models/user';
 import { getFriendIds } from '../../common/get-friends';
diff --git a/src/server/api/endpoints/notes.ts b/src/server/api/endpoints/notes.ts
index dd8d09dcc4..029bc1a95e 100644
--- a/src/server/api/endpoints/notes.ts
+++ b/src/server/api/endpoints/notes.ts
@@ -1,7 +1,7 @@
 /**
  * Module dependencies
  */
-import $ from 'cafy'; import ID from '../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../misc/cafy-id';
 import Note, { pack } from '../../../models/note';
 
 /**
diff --git a/src/server/api/endpoints/notes/conversation.ts b/src/server/api/endpoints/notes/conversation.ts
index e47b977279..2782d14155 100644
--- a/src/server/api/endpoints/notes/conversation.ts
+++ b/src/server/api/endpoints/notes/conversation.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note, { pack, INote } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts
index c2f128527e..2d331642c9 100644
--- a/src/server/api/endpoints/notes/create.ts
+++ b/src/server/api/endpoints/notes/create.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note, { INote, isValidText, isValidCw, pack } from '../../../../models/note';
 import User, { ILocalUser, IUser } from '../../../../models/user';
 import DriveFile, { IDriveFile } from '../../../../models/drive-file';
diff --git a/src/server/api/endpoints/notes/delete.ts b/src/server/api/endpoints/notes/delete.ts
index 49907e4449..bebf7b2035 100644
--- a/src/server/api/endpoints/notes/delete.ts
+++ b/src/server/api/endpoints/notes/delete.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import deleteNote from '../../../../services/note/delete';
 import { ILocalUser } from '../../../../models/user';
diff --git a/src/server/api/endpoints/notes/favorites/create.ts b/src/server/api/endpoints/notes/favorites/create.ts
index 9ec75dbba6..280283d340 100644
--- a/src/server/api/endpoints/notes/favorites/create.ts
+++ b/src/server/api/endpoints/notes/favorites/create.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Favorite from '../../../../../models/favorite';
 import Note from '../../../../../models/note';
 import { ILocalUser } from '../../../../../models/user';
diff --git a/src/server/api/endpoints/notes/favorites/delete.ts b/src/server/api/endpoints/notes/favorites/delete.ts
index f9916905bf..2cd00f876b 100644
--- a/src/server/api/endpoints/notes/favorites/delete.ts
+++ b/src/server/api/endpoints/notes/favorites/delete.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Favorite from '../../../../../models/favorite';
 import Note from '../../../../../models/note';
 import { ILocalUser } from '../../../../../models/user';
diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts
index 6de83ddad0..b0068c8692 100644
--- a/src/server/api/endpoints/notes/global-timeline.ts
+++ b/src/server/api/endpoints/notes/global-timeline.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
 import { pack } from '../../../../models/note';
diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts
index 3e96877c74..bbcc6303ca 100644
--- a/src/server/api/endpoints/notes/local-timeline.ts
+++ b/src/server/api/endpoints/notes/local-timeline.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
 import { pack } from '../../../../models/note';
diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts
index 82e3371ffa..c4e420602f 100644
--- a/src/server/api/endpoints/notes/mentions.ts
+++ b/src/server/api/endpoints/notes/mentions.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import { getFriendIds } from '../../common/get-friends';
 import { pack } from '../../../../models/note';
diff --git a/src/server/api/endpoints/notes/polls/vote.ts b/src/server/api/endpoints/notes/polls/vote.ts
index b86d319b37..4eb4b70eb9 100644
--- a/src/server/api/endpoints/notes/polls/vote.ts
+++ b/src/server/api/endpoints/notes/polls/vote.ts
@@ -1,10 +1,10 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Vote from '../../../../../models/poll-vote';
 import Note from '../../../../../models/note';
 import Watching from '../../../../../models/note-watching';
 import watch from '../../../../../services/note/watch';
-import { publishNoteStream } from '../../../../../publishers/stream';
-import notify from '../../../../../publishers/notify';
+import { publishNoteStream } from '../../../../../stream';
+import notify from '../../../../..//notify';
 import { ILocalUser } from '../../../../../models/user';
 
 /**
diff --git a/src/server/api/endpoints/notes/reactions.ts b/src/server/api/endpoints/notes/reactions.ts
index 5e15ed3ec6..938ed6f514 100644
--- a/src/server/api/endpoints/notes/reactions.ts
+++ b/src/server/api/endpoints/notes/reactions.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Reaction, { pack } from '../../../../models/note-reaction';
 import { ILocalUser } from '../../../../models/user';
diff --git a/src/server/api/endpoints/notes/reactions/create.ts b/src/server/api/endpoints/notes/reactions/create.ts
index 8b22e53225..f290ab00b4 100644
--- a/src/server/api/endpoints/notes/reactions/create.ts
+++ b/src/server/api/endpoints/notes/reactions/create.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Note from '../../../../../models/note';
 import create from '../../../../../services/note/reaction/create';
 import { validateReaction } from '../../../../../models/note-reaction';
diff --git a/src/server/api/endpoints/notes/reactions/delete.ts b/src/server/api/endpoints/notes/reactions/delete.ts
index 81671751a0..6f662526d0 100644
--- a/src/server/api/endpoints/notes/reactions/delete.ts
+++ b/src/server/api/endpoints/notes/reactions/delete.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import Reaction from '../../../../../models/note-reaction';
 import Note from '../../../../../models/note';
 import { ILocalUser } from '../../../../../models/user';
diff --git a/src/server/api/endpoints/notes/replies.ts b/src/server/api/endpoints/notes/replies.ts
index baefde3159..44c80afc4a 100644
--- a/src/server/api/endpoints/notes/replies.ts
+++ b/src/server/api/endpoints/notes/replies.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note, { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/notes/reposts.ts b/src/server/api/endpoints/notes/reposts.ts
index 118e684a87..05e68302ba 100644
--- a/src/server/api/endpoints/notes/reposts.ts
+++ b/src/server/api/endpoints/notes/reposts.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note, { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/notes/search_by_tag.ts b/src/server/api/endpoints/notes/search_by_tag.ts
index a6fcae5932..e092275fe8 100644
--- a/src/server/api/endpoints/notes/search_by_tag.ts
+++ b/src/server/api/endpoints/notes/search_by_tag.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import User, { ILocalUser } from '../../../../models/user';
 import Mute from '../../../../models/mute';
diff --git a/src/server/api/endpoints/notes/show.ts b/src/server/api/endpoints/notes/show.ts
index 0a27494962..3f94eeede5 100644
--- a/src/server/api/endpoints/notes/show.ts
+++ b/src/server/api/endpoints/notes/show.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note, { pack } from '../../../../models/note';
 import { ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts
index 43194c78c0..70908ef99f 100644
--- a/src/server/api/endpoints/notes/timeline.ts
+++ b/src/server/api/endpoints/notes/timeline.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
 import { getFriends } from '../../common/get-friends';
diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts
index 8a59857392..ef08f69c10 100644
--- a/src/server/api/endpoints/notes/user-list-timeline.ts
+++ b/src/server/api/endpoints/notes/user-list-timeline.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import Mute from '../../../../models/mute';
 import { pack } from '../../../../models/note';
diff --git a/src/server/api/endpoints/notifications/mark_as_read_all.ts b/src/server/api/endpoints/notifications/mark_as_read_all.ts
index 6e2b13fa8c..5011c72d54 100644
--- a/src/server/api/endpoints/notifications/mark_as_read_all.ts
+++ b/src/server/api/endpoints/notifications/mark_as_read_all.ts
@@ -1,5 +1,5 @@
 import Notification from '../../../../models/notification';
-import event from '../../../../publishers/stream';
+import event from '../../../../stream';
 import User, { ILocalUser } from '../../../../models/user';
 
 /**
diff --git a/src/server/api/endpoints/users/followers.ts b/src/server/api/endpoints/users/followers.ts
index f726976774..9411873573 100644
--- a/src/server/api/endpoints/users/followers.ts
+++ b/src/server/api/endpoints/users/followers.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { ILocalUser } from '../../../../models/user';
 import Following from '../../../../models/following';
 import { pack } from '../../../../models/user';
diff --git a/src/server/api/endpoints/users/following.ts b/src/server/api/endpoints/users/following.ts
index 1b2eb9c878..7a64d15d7b 100644
--- a/src/server/api/endpoints/users/following.ts
+++ b/src/server/api/endpoints/users/following.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { ILocalUser } from '../../../../models/user';
 import Following from '../../../../models/following';
 import { pack } from '../../../../models/user';
diff --git a/src/server/api/endpoints/users/get_frequently_replied_users.ts b/src/server/api/endpoints/users/get_frequently_replied_users.ts
index 98d662d29c..42b6ce20d6 100644
--- a/src/server/api/endpoints/users/get_frequently_replied_users.ts
+++ b/src/server/api/endpoints/users/get_frequently_replied_users.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import Note from '../../../../models/note';
 import User, { pack, ILocalUser } from '../../../../models/user';
 
diff --git a/src/server/api/endpoints/users/lists/push.ts b/src/server/api/endpoints/users/lists/push.ts
index 0e7caea064..9e99d59fc1 100644
--- a/src/server/api/endpoints/users/lists/push.ts
+++ b/src/server/api/endpoints/users/lists/push.ts
@@ -1,7 +1,7 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import UserList from '../../../../../models/user-list';
 import User, { pack as packUser, isRemoteUser, getGhost, ILocalUser } from '../../../../../models/user';
-import { publishUserListStream } from '../../../../../publishers/stream';
+import { publishUserListStream } from '../../../../../stream';
 import ap from '../../../../../remote/activitypub/renderer';
 import renderFollow from '../../../../../remote/activitypub/renderer/follow';
 import { deliver } from '../../../../../queue';
diff --git a/src/server/api/endpoints/users/lists/show.ts b/src/server/api/endpoints/users/lists/show.ts
index 4716dd8211..f432cf44fb 100644
--- a/src/server/api/endpoints/users/lists/show.ts
+++ b/src/server/api/endpoints/users/lists/show.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../../misc/cafy-id';
 import UserList, { pack } from '../../../../../models/user-list';
 import { ILocalUser } from '../../../../../models/user';
 
diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts
index 6d8d85ff5c..c60050d3cd 100644
--- a/src/server/api/endpoints/users/notes.ts
+++ b/src/server/api/endpoints/users/notes.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import getHostLower from '../../common/get-host-lower';
 import Note, { pack } from '../../../../models/note';
 import User, { ILocalUser } from '../../../../models/user';
diff --git a/src/server/api/endpoints/users/show.ts b/src/server/api/endpoints/users/show.ts
index 276e7c325b..8ec0eb8dd9 100644
--- a/src/server/api/endpoints/users/show.ts
+++ b/src/server/api/endpoints/users/show.ts
@@ -1,4 +1,4 @@
-import $ from 'cafy'; import ID from '../../../../cafy-id';
+import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 import User, { pack, ILocalUser } from '../../../../models/user';
 import resolveRemoteUser from '../../../../remote/resolve-user';
 
diff --git a/src/server/api/limitter.ts b/src/server/api/limitter.ts
index b84e16ecde..55cb660700 100644
--- a/src/server/api/limitter.ts
+++ b/src/server/api/limitter.ts
@@ -2,7 +2,7 @@ import * as Limiter from 'ratelimiter';
 import * as debug from 'debug';
 import limiterDB from '../../db/redis';
 import { Endpoint } from './endpoints';
-import getAcct from '../../acct/render';
+import getAcct from '../../misc/acct/render';
 import { IUser } from '../../models/user';
 
 const log = debug('misskey:limitter');
diff --git a/src/server/api/private/signin.ts b/src/server/api/private/signin.ts
index 5450c7ad27..5abb96d029 100644
--- a/src/server/api/private/signin.ts
+++ b/src/server/api/private/signin.ts
@@ -3,7 +3,7 @@ import * as bcrypt from 'bcryptjs';
 import * as speakeasy from 'speakeasy';
 import User, { ILocalUser } from '../../../models/user';
 import Signin, { pack } from '../../../models/signin';
-import event from '../../../publishers/stream';
+import event from '../../../stream';
 import signin from '../common/signin';
 import config from '../../../config';
 
diff --git a/src/server/api/service/twitter.ts b/src/server/api/service/twitter.ts
index 8c35509cce..080f5879a3 100644
--- a/src/server/api/service/twitter.ts
+++ b/src/server/api/service/twitter.ts
@@ -4,7 +4,7 @@ import * as uuid from 'uuid';
 import autwh from 'autwh';
 import redis from '../../../db/redis';
 import User, { pack, ILocalUser } from '../../../models/user';
-import event from '../../../publishers/stream';
+import event from '../../../stream';
 import config from '../../../config';
 import signin from '../common/signin';
 
diff --git a/src/server/api/stream/reversi-game.ts b/src/server/api/stream/reversi-game.ts
index 7a09e55ecd..faa4e2f38a 100644
--- a/src/server/api/stream/reversi-game.ts
+++ b/src/server/api/stream/reversi-game.ts
@@ -2,7 +2,7 @@ import * as websocket from 'websocket';
 import * as redis from 'redis';
 import * as CRC32 from 'crc-32';
 import ReversiGame, { pack } from '../../../models/games/reversi/game';
-import { publishReversiGameStream } from '../../../publishers/stream';
+import { publishReversiGameStream } from '../../../stream';
 import Reversi from '../../../games/reversi/core';
 import * as maps from '../../../games/reversi/maps';
 import { ParsedUrlQuery } from 'querystring';
diff --git a/src/server/api/stream/reversi.ts b/src/server/api/stream/reversi.ts
index 4e450297ff..a76685d51f 100644
--- a/src/server/api/stream/reversi.ts
+++ b/src/server/api/stream/reversi.ts
@@ -2,7 +2,7 @@ import * as mongo from 'mongodb';
 import * as websocket from 'websocket';
 import * as redis from 'redis';
 import Matching, { pack } from '../../../models/games/reversi/matching';
-import publishUserStream from '../../../publishers/stream';
+import publishUserStream from '../../../stream';
 
 export default function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user: any): void {
 	// Subscribe reversi stream
diff --git a/src/server/web/index.ts b/src/server/web/index.ts
index 4400fc1024..f54575e7ef 100644
--- a/src/server/web/index.ts
+++ b/src/server/web/index.ts
@@ -11,11 +11,11 @@ import * as views from 'koa-views';
 
 import docs from './docs';
 import User from '../../models/user';
-import parseAcct from '../../acct/parse';
+import parseAcct from '../../misc/acct/parse';
 import { fa } from '../../build/fa';
 import config from '../../config';
 import Note, { pack as packNote } from '../../models/note';
-import getNoteSummary from '../../renderers/get-note-summary';
+import getNoteSummary from '../../misc/get-note-summary';
 const consts = require('../../const.json');
 
 const client = `${__dirname}/../../client/`;
diff --git a/src/server/webfinger.ts b/src/server/webfinger.ts
index ce0cb82fe2..6c2afae79c 100644
--- a/src/server/webfinger.ts
+++ b/src/server/webfinger.ts
@@ -2,7 +2,7 @@ import * as mongo from 'mongodb';
 import * as Router from 'koa-router';
 
 import config from '../config';
-import parseAcct from '../acct/parse';
+import parseAcct from '../misc/acct/parse';
 import User, { IUser } from '../models/user';
 
 // Init router
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index 4167df0662..57c6589176 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -12,7 +12,7 @@ const prominence = require('prominence');
 import DriveFile, { IMetadata, getDriveFileBucket, IDriveFile } from '../../models/drive-file';
 import DriveFolder from '../../models/drive-folder';
 import { pack } from '../../models/drive-file';
-import event, { publishDriveStream } from '../../publishers/stream';
+import event, { publishDriveStream } from '../../stream';
 import { isLocalUser, IUser, IRemoteUser } from '../../models/user';
 import { getDriveFileThumbnailBucket } from '../../models/drive-file-thumbnail';
 import genThumbnail from '../../drive/gen-thumbnail';
diff --git a/src/services/following/create.ts b/src/services/following/create.ts
index 03db72c332..aa25ed8f91 100644
--- a/src/services/following/create.ts
+++ b/src/services/following/create.ts
@@ -2,8 +2,8 @@ import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../
 import Following from '../../models/following';
 import FollowingLog from '../../models/following-log';
 import FollowedLog from '../../models/followed-log';
-import event from '../../publishers/stream';
-import notify from '../../publishers/notify';
+import event from '../../stream';
+import notify from '../..//notify';
 import pack from '../../remote/activitypub/renderer';
 import renderFollow from '../../remote/activitypub/renderer/follow';
 import renderAccept from '../../remote/activitypub/renderer/accept';
diff --git a/src/services/following/delete.ts b/src/services/following/delete.ts
index 4fc5d42476..75f2557519 100644
--- a/src/services/following/delete.ts
+++ b/src/services/following/delete.ts
@@ -2,7 +2,7 @@ import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../
 import Following from '../../models/following';
 import FollowingLog from '../../models/following-log';
 import FollowedLog from '../../models/followed-log';
-import event from '../../publishers/stream';
+import event from '../../stream';
 import pack from '../../remote/activitypub/renderer';
 import renderFollow from '../../remote/activitypub/renderer/follow';
 import renderUndo from '../../remote/activitypub/renderer/undo';
diff --git a/src/services/following/requests/accept.ts b/src/services/following/requests/accept.ts
index 2eaccbbd36..c874adc167 100644
--- a/src/services/following/requests/accept.ts
+++ b/src/services/following/requests/accept.ts
@@ -7,7 +7,7 @@ import { deliver } from '../../../queue';
 import Following from '../../../models/following';
 import FollowingLog from '../../../models/following-log';
 import FollowedLog from '../../../models/followed-log';
-import event from '../../../publishers/stream';
+import event from '../../../stream';
 
 export default async function(followee: IUser, follower: IUser) {
 	const following = await Following.insert({
diff --git a/src/services/following/requests/cancel.ts b/src/services/following/requests/cancel.ts
index 7e9dc5630f..1a4c0033dc 100644
--- a/src/services/following/requests/cancel.ts
+++ b/src/services/following/requests/cancel.ts
@@ -4,7 +4,7 @@ import pack from '../../../remote/activitypub/renderer';
 import renderFollow from '../../../remote/activitypub/renderer/follow';
 import renderUndo from '../../../remote/activitypub/renderer/undo';
 import { deliver } from '../../../queue';
-import event from '../../../publishers/stream';
+import event from '../../../stream';
 
 export default async function(followee: IUser, follower: IUser) {
 	if (isRemoteUser(followee)) {
diff --git a/src/services/following/requests/create.ts b/src/services/following/requests/create.ts
index fea82b57d8..a309229872 100644
--- a/src/services/following/requests/create.ts
+++ b/src/services/following/requests/create.ts
@@ -1,6 +1,6 @@
 import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../../models/user';
-import event from '../../../publishers/stream';
-import notify from '../../../publishers/notify';
+import event from '../../../stream';
+import notify from '../../..//notify';
 import pack from '../../../remote/activitypub/renderer';
 import renderFollow from '../../../remote/activitypub/renderer/follow';
 import { deliver } from '../../../queue';
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 89f9a91c9b..61260b8b96 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -1,7 +1,7 @@
 import es from '../../db/elasticsearch';
 import Note, { pack, INote } from '../../models/note';
 import User, { isLocalUser, IUser, isRemoteUser, IRemoteUser, ILocalUser } from '../../models/user';
-import stream, { publishLocalTimelineStream, publishGlobalTimelineStream, publishUserListStream } from '../../publishers/stream';
+import stream, { publishLocalTimelineStream, publishGlobalTimelineStream, publishUserListStream } from '../../stream';
 import Following from '../../models/following';
 import { deliver } from '../../queue';
 import renderNote from '../../remote/activitypub/renderer/note';
@@ -9,11 +9,11 @@ import renderCreate from '../../remote/activitypub/renderer/create';
 import renderAnnounce from '../../remote/activitypub/renderer/announce';
 import packAp from '../../remote/activitypub/renderer';
 import { IDriveFile } from '../../models/drive-file';
-import notify from '../../publishers/notify';
+import notify from '../..//notify';
 import NoteWatching from '../../models/note-watching';
 import watch from './watch';
 import Mute from '../../models/mute';
-import event from '../../publishers/stream';
+import event from '../../stream';
 import parse from '../../mfm/parse';
 import { IApp } from '../../models/app';
 import UserList from '../../models/user-list';
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index 3e928303d2..83f6cde88e 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -1,6 +1,6 @@
 import Note, { INote } from '../../models/note';
 import { IUser, isLocalUser } from '../../models/user';
-import { publishNoteStream } from '../../publishers/stream';
+import { publishNoteStream } from '../../stream';
 import renderDelete from '../../remote/activitypub/renderer/delete';
 import pack from '../../remote/activitypub/renderer';
 import { deliver } from '../../queue';
diff --git a/src/services/note/reaction/create.ts b/src/services/note/reaction/create.ts
index b3235e94dc..6d1f25470e 100644
--- a/src/services/note/reaction/create.ts
+++ b/src/services/note/reaction/create.ts
@@ -1,8 +1,8 @@
 import { IUser, isLocalUser, isRemoteUser } from '../../../models/user';
 import Note, { INote } from '../../../models/note';
 import NoteReaction from '../../../models/note-reaction';
-import { publishNoteStream } from '../../../publishers/stream';
-import notify from '../../../publishers/notify';
+import { publishNoteStream } from '../../../stream';
+import notify from '../../..//notify';
 import NoteWatching from '../../../models/note-watching';
 import watch from '../watch';
 import renderLike from '../../../remote/activitypub/renderer/like';
diff --git a/src/publishers/stream.ts b/src/stream.ts
similarity index 98%
rename from src/publishers/stream.ts
rename to src/stream.ts
index b573b65a65..da2f9aecd7 100644
--- a/src/publishers/stream.ts
+++ b/src/stream.ts
@@ -1,6 +1,6 @@
 import * as mongo from 'mongodb';
 import * as redis from 'redis';
-import config from '../config';
+import config from './config';
 
 type ID = string | mongo.ObjectID;