diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java
index b83d39bdef9ee756751847d4987ce2b661b3d7a3..ec3762b5819aaf67c311a52346b104a6b85c8636 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java
@@ -120,6 +120,18 @@ public class BlogFragment extends BaseFragment implements BlogPostListener {
 		loadData(false);
 	}
 
+	@Override
+	public void onResume() {
+		super.onResume();
+		list.startPeriodicUpdate();
+	}
+
+	@Override
+	public void onPause() {
+		super.onPause();
+		list.stopPeriodicUpdate();
+	}
+
 	@Override
 	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
 		if (myBlog) {
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java b/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java
index 92526387f18948365615c9aa3aacc1c1e273f589..92f9430c42a1c7365f0add736b811114891c43ca 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java
@@ -16,6 +16,7 @@ import android.view.ViewGroup;
 import android.widget.TextView;
 
 import org.briarproject.R;
+import org.briarproject.android.util.AndroidUtils;
 import org.briarproject.android.util.TextAvatarView;
 import org.briarproject.api.blogs.Blog;
 import org.briarproject.api.sync.GroupId;
@@ -121,8 +122,7 @@ class BlogListAdapter extends
 			ui.status.setVisibility(VISIBLE);
 		} else {
 			long timestamp = item.getTimestamp();
-			ui.date.setText(
-					DateUtils.getRelativeTimeSpanString(ctx, timestamp));
+			ui.date.setText(AndroidUtils.formatDate(ctx, timestamp));
 			ui.date.setVisibility(VISIBLE);
 			ui.avatar.setProblem(false);
 			ui.status.setVisibility(GONE);
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java b/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java
index b1b9f322e7b05772d23da45cb42b09229b310232..a0060a1e73783cdd449bd8721107682c2c118cc8 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java
@@ -11,6 +11,7 @@ import android.widget.ImageView;
 import android.widget.TextView;
 
 import org.briarproject.R;
+import org.briarproject.android.util.AndroidUtils;
 import org.briarproject.android.util.TrustIndicatorView;
 import org.briarproject.api.identity.Author;
 import org.briarproject.util.StringUtils;
@@ -88,8 +89,7 @@ class BlogPostAdapter extends
 		ui.trust.setTrustLevel(post.getAuthorStatus());
 
 		// date
-		ui.date.setText(
-				DateUtils.getRelativeTimeSpanString(ctx, post.getTimestamp()));
+		ui.date.setText(AndroidUtils.formatDate(ctx, post.getTimestamp()));
 
 		// post body
 		ui.body.setText(StringUtils.fromUtf8(post.getBody()));
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java
index 54ac2cdda54898ec9f60815fb3cbb63b2e9ef85c..dbb926493a36d78c06759e1d524bd11c7a3f1819 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java
@@ -3,7 +3,6 @@ package org.briarproject.android.blogs;
 import android.app.Activity;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
-import android.text.format.DateUtils;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
@@ -16,12 +15,15 @@ import org.briarproject.R;
 import org.briarproject.android.ActivityComponent;
 import org.briarproject.android.controller.handler.UiResultHandler;
 import org.briarproject.android.fragment.BaseFragment;
+import org.briarproject.android.util.AndroidUtils;
 import org.briarproject.android.util.TrustIndicatorView;
 import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.MessageId;
 import org.briarproject.util.StringUtils;
 
+import java.util.logging.Logger;
+
 import javax.inject.Inject;
 
 import im.delight.android.identicons.IdenticonDrawable;
@@ -29,16 +31,20 @@ import im.delight.android.identicons.IdenticonDrawable;
 import static android.view.View.GONE;
 import static android.widget.Toast.LENGTH_SHORT;
 import static org.briarproject.android.BriarActivity.GROUP_ID;
+import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION;
 
 public class BlogPostFragment extends BaseFragment {
 
 	public final static String TAG = BlogPostFragment.class.getName();
+	private static final Logger LOG = Logger.getLogger(TAG);
 
 	private final static String BLOG_POST_ID = "briar.BLOG_NAME";
 
 	private GroupId groupId;
 	private MessageId postId;
 	private BlogPostViewHolder ui;
+	private BlogPostItem post = null;
+	private Runnable refresher = null;
 
 	@Inject
 	BlogController blogController;
@@ -88,10 +94,9 @@ public class BlogPostFragment extends BaseFragment {
 					public void onResultUi(Boolean result) {
 						listener.hideLoadingScreen();
 						if (result) {
-							BlogPostItem post =
-									blogController.getBlogPost(postId);
+							post = blogController.getBlogPost(postId);
 							if (post != null) {
-								bind(post);
+								bind();
 							}
 						} else {
 							Toast.makeText(getActivity(),
@@ -102,6 +107,18 @@ public class BlogPostFragment extends BaseFragment {
 				});
 	}
 
+	@Override
+	public void onResume() {
+		super.onResume();
+		startPeriodicUpdate();
+	}
+
+	@Override
+	public void onPause() {
+		super.onPause();
+		stopPeriodicUpdate();
+	}
+
 	@Override
 	public boolean onOptionsItemSelected(final MenuItem item) {
 		switch (item.getItemId()) {
@@ -118,14 +135,14 @@ public class BlogPostFragment extends BaseFragment {
 		return TAG;
 	}
 
-	private void bind(BlogPostItem post) {
+	private void bind() {
 		Author author = post.getAuthor();
 		IdenticonDrawable d = new IdenticonDrawable(author.getId().getBytes());
 		ui.avatar.setImageDrawable(d);
 		ui.authorName.setText(author.getName());
 		ui.trust.setTrustLevel(post.getAuthorStatus());
 		ui.date.setText(
-				DateUtils.getRelativeTimeSpanString(post.getTimestamp()));
+				AndroidUtils.formatDate(getActivity(), post.getTimestamp()));
 
 		if (post.getTitle() != null) {
 			ui.title.setText(post.getTitle());
@@ -154,4 +171,27 @@ public class BlogPostFragment extends BaseFragment {
 		}
 	}
 
+	private void startPeriodicUpdate() {
+		refresher = new Runnable() {
+			@Override
+			public void run() {
+				if (ui == null || post == null) return;
+				LOG.info("Updating Content...");
+
+				ui.date.setText(AndroidUtils
+						.formatDate(getActivity(), post.getTimestamp()));
+				ui.date.postDelayed(refresher, MIN_RESOLUTION);
+			}
+		};
+		LOG.info("Adding Handler Callback");
+		ui.date.postDelayed(refresher, MIN_RESOLUTION);
+	}
+
+	private void stopPeriodicUpdate() {
+		if (refresher != null && ui != null) {
+			LOG.info("Removing Handler Callback");
+			ui.date.removeCallbacks(refresher);
+		}
+	}
+
 }
diff --git a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java
index eff999072c6d1e1b70c64922e2336eba701cdd1a..47d0cc42704dcf101b386c37a486dbea1b103a1e 100644
--- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java
+++ b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java
@@ -17,7 +17,6 @@ import android.view.ViewGroup;
 
 import org.briarproject.R;
 import org.briarproject.android.ActivityComponent;
-import org.briarproject.android.api.AndroidNotificationManager;
 import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
 import org.briarproject.android.controller.handler.UiResultHandler;
 import org.briarproject.android.fragment.BaseFragment;
@@ -108,6 +107,7 @@ public class FeedFragment extends BaseFragment implements
 	@Override
 	public void onResume() {
 		super.onResume();
+		list.startPeriodicUpdate();
 		feedController.onResume();
 		feedController.loadPosts(
 				new UiResultHandler<Collection<BlogPostItem>>(getActivity()) {
@@ -127,6 +127,7 @@ public class FeedFragment extends BaseFragment implements
 	@Override
 	public void onPause() {
 		super.onPause();
+		list.stopPeriodicUpdate();
 		feedController.onPause();
 		// TODO save list position in database/preferences?
 	}
@@ -216,4 +217,5 @@ public class FeedFragment extends BaseFragment implements
 		}
 		s.show();
 	}
+
 }
diff --git a/briar-android/src/org/briarproject/android/util/AndroidUtils.java b/briar-android/src/org/briarproject/android/util/AndroidUtils.java
index 0488e927f64c0ed7aa8a0566a73eb3633bc06485..fb47a7abe9e9603e4e1dfcdd97ee538b30f1bc6e 100644
--- a/briar-android/src/org/briarproject/android/util/AndroidUtils.java
+++ b/briar-android/src/org/briarproject/android/util/AndroidUtils.java
@@ -30,7 +30,7 @@ import static android.text.format.DateUtils.WEEK_IN_MILLIS;
 
 public class AndroidUtils {
 
-	static final long MIN_RESOLUTION = MINUTE_IN_MILLIS;
+	public static final long MIN_RESOLUTION = MINUTE_IN_MILLIS;
 
 	// Fake Bluetooth address returned by BluetoothAdapter on API 23 and later
 	private static final String FAKE_BLUETOOTH_ADDRESS = "02:00:00:00:00:00";