diff --git a/lib/CF/Schema/Result/Post.pm b/lib/CF/Schema/Result/Post.pm
index 03d004d4ccc6b333fac72bd978aedeefeda6d380..31d326e32d22f899c8b0186436c86dd5b7ef80d4 100644
--- a/lib/CF/Schema/Result/Post.pm
+++ b/lib/CF/Schema/Result/Post.pm
@@ -17,9 +17,12 @@ __PACKAGE__->add_columns(
         sequence          => 'uid_seq'
     },
     qw(
-        datetime
+        created
+        changed
+        deleted
         is_archived
         user_id
+        program_entry_id
         type
         state
         content
diff --git a/lib/CF/Schema/Result/Post_view.pm b/lib/CF/Schema/Result/Post_view.pm
index 4ddf5c77f494bd43c23b799c4ec4ded0783c5e30..a7c3978cd38e7afda395d7ede03766a7c671c705 100644
--- a/lib/CF/Schema/Result/Post_view.pm
+++ b/lib/CF/Schema/Result/Post_view.pm
@@ -24,12 +24,14 @@ sub format {
 
     my $post = {
         id          => $self->id,
-        datetime    => $self->datetime,
+        datetime    => $self->created,
         type        => $self->type,
         state       => $self->state,
         content     => $self->content,
         is_archived => $self->is_archived,
+        is_changed  => $self->changed ? 1 : 0,
         author => {
+            id    => $self->user_id,
             name  => $self->user_name,
             group => $self->group_name,
         },
diff --git a/sql/2/up.sql b/sql/2/up.sql
index 462490230544280bf52d362905cd49f14f6e168e..f085c6c12013ee4d52e3614efa3d1855651e97b6 100644
--- a/sql/2/up.sql
+++ b/sql/2/up.sql
@@ -1,8 +1,11 @@
 create table "posts" (
     "id" integer not null default nextval('uid_seq'),
-    "datetime" timestamp(0) not null default now(),
+    "created" timestamp(0) not null default now(),
+    "changed" timestamp(0),
+    "deleted" timestamp(0),
     "is_archived" bool not null default 'false',
     "user_id" integer not null,
+    "program_entry_id" integer,
     "type" integer not null, -- 0 -  "post" | "procedure-proposal"
     "state" integer not null default 0,
     "content" text,
@@ -11,18 +14,24 @@ create table "posts" (
     primary key("id")
 );
 
-create table "announcements" (
+create table "posts_history" (
     "id" integer not null default nextval('uid_seq'),
     "datetime" timestamp(0) not null default now(),
-    "is_archived" bool not null default 'false',
-    "user_id" integer,
-    "type" integer not null,
+    "post_id" integer not null,
+    "user_id" integer not null,
     "content" text,
-    "link" text,
-    "related_post_id" integer,
     primary key("id")
 );
 
+create table "posts_ranking" (
+    "id" integer not null default nextval('uid_seq'),
+    "post_id" integer not null,
+    "user_id" integer not null,
+    "ranking" integer,
+    primary key("id"),
+    unique("post_id", "user_id")
+);
+
 create view "posts_view" as
 select
     "posts".*,
diff --git a/sql/3/up.sql b/sql/3/up.sql
index 58d40fa56f1596bae2d34b4e5add6f72178e2d88..7c84966c1bfc627639cab09895bde5e1d5861d1c 100644
--- a/sql/3/up.sql
+++ b/sql/3/up.sql
@@ -1,17 +1,13 @@
-create table "posts_history" (
+create table "announcements" (
     "id" integer not null default nextval('uid_seq'),
     "datetime" timestamp(0) not null default now(),
-    "post_id" integer not null,
-    "user_id" integer not null,
+    "is_archived" bool not null default 'false',
+    "user_id" integer,
+    "type" integer not null,
     "content" text,
+    "link" text,
+    "related_post_id" integer,
     primary key("id")
 );
 
-create table "posts_ranking" (
-    "id" integer not null default nextval('uid_seq'),
-    "post_id" integer not null,
-    "user_id" integer not null,
-    "ranking" integer,
-    primary key("id"),
-    unique("post_id", "user_id")
-);
+