diff --git a/src/client/app/desktop/views/components/ui.header.nav.vue b/src/client/app/desktop/views/components/ui.header.nav.vue
index 8e792b3df5..fe2637cec3 100644
--- a/src/client/app/desktop/views/components/ui.header.nav.vue
+++ b/src/client/app/desktop/views/components/ui.header.nav.vue
@@ -11,7 +11,7 @@
 			<li class="deck" :class="{ active: $route.name == 'deck' }">
 				<router-link to="/deck">
 					%fa:columns%
-					<p>%i18n:@deck%</p>
+					<p>%i18n:@deck% <small>(beta)</small></p>
 				</router-link>
 			</li>
 			<li class="messaging">
diff --git a/src/client/app/desktop/views/pages/deck/deck.column.vue b/src/client/app/desktop/views/pages/deck/deck.column.vue
index e0fc394f33..8d0b3c0fdb 100644
--- a/src/client/app/desktop/views/pages/deck/deck.column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.column.vue
@@ -1,10 +1,10 @@
 <template>
 <div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs">
 	<header>
-		<slot name="header">Timeline</slot>
+		<slot name="header"></slot>
 	</header>
 	<div ref="body">
-		<x-tl ref="tl"/>
+		<slot></slot>
 	</div>
 </div>
 </template>
@@ -17,9 +17,23 @@ export default Vue.extend({
 	components: {
 		XTl
 	},
+	provide() {
+		return {
+			getColumn() {
+				return this;
+			},
+			getScrollContainer() {
+				return this.$refs.body;
+			}
+		};
+	},
 	mounted() {
 		this.$nextTick(() => {
-			this.$refs.tl.mount(this.$refs.body);
+			this.$emit('mounted');
+
+			setInterval(() => {
+				this.$emit('mounted');
+			}, 100);
 		});
 	}
 });
@@ -31,6 +45,7 @@ export default Vue.extend({
 root(isDark)
 	flex 1
 	min-width 330px
+	max-width 330px
 	height 100%
 	margin-right 16px
 	background isDark ? #282C37 : #fff
@@ -40,14 +55,14 @@ root(isDark)
 
 	> header
 		z-index 1
-		line-height 48px
+		line-height 42px
 		padding 0 16px
 		color isDark ? #e3e5e8 : #888
 		background isDark ? #313543 : #fff
 		box-shadow 0 1px rgba(#000, 0.15)
 
 	> div
-		height calc(100% - 48px)
+		height calc(100% - 42px)
 		overflow auto
 		overflow-x hidden
 
diff --git a/src/client/app/desktop/views/pages/deck/deck.notes.vue b/src/client/app/desktop/views/pages/deck/deck.notes.vue
index ff871b049d..48be4e585c 100644
--- a/src/client/app/desktop/views/pages/deck/deck.notes.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.notes.vue
@@ -73,16 +73,20 @@ export default Vue.extend({
 		}
 	},
 
+	inject: ['getColumn', 'getScrollContainer'],
+
+	created() {
+		this.getColumn().$once('mounted', () => {
+			this.rootEl = this.getScrollContainer();
+			this.rootEl.addEventListener('scroll', this.onScroll);
+		})
+	},
+
 	beforeDestroy() {
-		this.root.removeEventListener('scroll', this.onScroll);
+		this.rootEl.removeEventListener('scroll', this.onScroll);
 	},
 
 	methods: {
-		mount(root) {
-			this.rootEl = root;
-			this.rootEl.addEventListener('scroll', this.onScroll);
-		},
-
 		isScrollTop() {
 			if (this.rootEl == null) return true;
 			return this.rootEl.scrollTop <= 8;
diff --git a/src/client/app/desktop/views/pages/deck/deck.tl-column.vue b/src/client/app/desktop/views/pages/deck/deck.tl-column.vue
new file mode 100644
index 0000000000..674f04077f
--- /dev/null
+++ b/src/client/app/desktop/views/pages/deck/deck.tl-column.vue
@@ -0,0 +1,33 @@
+<template>
+<div>
+	<x-column>
+		<span slot="header">
+			<template v-if="src == 'home'">%fa:home% %i18n:@home%</template>
+			<template v-if="src == 'local'">%fa:R comments% %i18n:@local%</template>
+			<template v-if="src == 'global'">%fa:globe% %i18n:@global%</template>
+			<template v-if="src == 'list'">%fa:list% {{ list.title }}</template>
+		</span>
+		<x-tl :src="src"/>
+	</x-column>
+</div>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import XColumn from './deck.column.vue';
+import XTl from './deck.tl.vue';
+
+export default Vue.extend({
+	components: {
+		XColumn,
+		XTl
+	},
+
+	props: {
+		src: {
+			type: String,
+			required: false
+		}
+	},
+});
+</script>
diff --git a/src/client/app/desktop/views/pages/deck/deck.tl.vue b/src/client/app/desktop/views/pages/deck/deck.tl.vue
index ce9a77703f..0a788b32ed 100644
--- a/src/client/app/desktop/views/pages/deck/deck.tl.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.tl.vue
@@ -14,10 +14,6 @@ export default Vue.extend({
 	},
 
 	props: {
-		root: {
-			type: Object,
-			required: false
-		},
 		src: {
 			type: String,
 			required: false,
diff --git a/src/client/app/desktop/views/pages/deck/deck.vue b/src/client/app/desktop/views/pages/deck/deck.vue
index 0c32b7d665..dfd480029c 100644
--- a/src/client/app/desktop/views/pages/deck/deck.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.vue
@@ -1,21 +1,20 @@
 <template>
 <mk-ui :class="$style.root">
 	<div class="qlvquzbjribqcaozciifydkngcwtyzje">
-		<x-column src="home"/>
-		<x-column src="home"/>
-		<x-column src="home"/>
-		<x-column src="home"/>
+		<x-tl-column src="home"/>
+		<x-tl-column src="local"/>
+		<x-tl-column src="global"/>
 	</div>
 </mk-ui>
 </template>
 
 <script lang="ts">
 import Vue from 'vue';
-import XColumn from './deck.column.vue';
+import XTlColumn from './deck.tl-column.vue';
 
 export default Vue.extend({
 	components: {
-		XColumn
+		XTlColumn
 	}
 });
 </script>
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 37d21fecad..f820182a42 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -221,7 +221,9 @@ export default async (user: IUser, data: {
 		}
 
 		// Publish note to global timeline stream
-		publishGlobalTimelineStream(noteObj);
+		if (note.visibility == 'public' && note.replyId == null) {
+			publishGlobalTimelineStream(noteObj);
+		}
 
 		if (note.visibility == 'specified') {
 			data.visibleUsers.forEach(async u => {