diff --git a/lib/PiTube/Schema/Result/Record.pm b/lib/PiTube/Schema/Result/Record.pm
index 70d40ff06c2b2da4f3043526b308112744665e08..f442b20895ee3ad15f7d20bd3da9d179eac48a06 100644
--- a/lib/PiTube/Schema/Result/Record.pm
+++ b/lib/PiTube/Schema/Result/Record.pm
@@ -20,6 +20,7 @@ __PACKAGE__->add_columns(
         begin
         end
         is_active
+        is_indexed
         is_protected
         stream_id
         publish_user_id
diff --git a/lib/PiTube/Schema/Result/Stream.pm b/lib/PiTube/Schema/Result/Stream.pm
index 6f65fea9678c9d2c1036b48d073cb8c3e99628bb..844c993c8048fb9ac77f08fc08e17c0b393d36f8 100644
--- a/lib/PiTube/Schema/Result/Stream.pm
+++ b/lib/PiTube/Schema/Result/Stream.pm
@@ -19,6 +19,7 @@ __PACKAGE__->add_columns(
     qw(
         is_active
         is_public
+        is_live
         key
         name
         description
diff --git a/lib/PiTube/Schema/Result/Stream_view.pm b/lib/PiTube/Schema/Result/Stream_view.pm
index e1bb52d4a0208cbba0d94c7cbc00d0bbcd10edb5..112436d5b51147370baa9cf6c4fb13f2e2f8a214 100644
--- a/lib/PiTube/Schema/Result/Stream_view.pm
+++ b/lib/PiTube/Schema/Result/Stream_view.pm
@@ -14,14 +14,6 @@ __PACKAGE__->add_columns(qw(
    publish_user_name
 ));
 
-sub is_live {
-    my $self    = shift;
-    my $max_age = shift // 60;
-
-    return 0 if ! $self->publish_last_age;
-    return $self->publish_last_age < $max_age ? 1 : 0;
-}
-
 sub is_writeable {
     my $self  = shift;
     my $acl   = shift // 0;
diff --git a/sql/migrations.sql b/sql/migrations.sql
index 8a4887c2e6ff1fdd544042872ebb9e9880c27aaa..d593bd6c4014b4cce4c2d5923400c9321c96815f 100644
--- a/sql/migrations.sql
+++ b/sql/migrations.sql
@@ -69,6 +69,7 @@ create table "records" (
     "id" integer not null default nextval('uid_seq'),
     "begin" timestamp(0) not null default now(),
     "end" timestamp(0),
+    "deleted" timestamp(0),
     "is_active" bool not null default true,
     "is_protected" bool not null default false,
     "stream_id" integer not null,
@@ -94,3 +95,28 @@ from "records"
 left join "users" on ("records"."publish_user_id" = "users"."id")
 join "streams" on ("records"."stream_id" = "streams"."id")
 ;
+
+-- 6 up
+drop view "records_view";
+drop view "streams_view";
+alter table "streams" add "is_live" boolean not null default 'f';
+alter table "records" add "is_indexed" boolean not null default 'f';
+
+create view "streams_view" as
+select "streams".*,
+    extract(epoch from now()-"publish_last") as "publish_last_age",
+    "users"."name" as "publish_user_name"
+from "streams"
+left join "users" on ("streams"."publish_user_id" = "users"."id")
+;
+
+create view "records_view" as
+select "records".*,
+    "streams"."key" as "stream_key",
+    "streams"."name" as "stream_name",
+    "streams"."is_public" as "stream_is_public",
+    "users"."name" as "publish_user_name"
+from "records"
+left join "users" on ("records"."publish_user_id" = "users"."id")
+join "streams" on ("records"."stream_id" = "streams"."id")
+;