diff --git a/briar-android/res/values/color.xml b/briar-android/res/values/color.xml
index 0ae07cc50bdcc6022341224b6ed36ef180d6a2ad..a55aadfa90727f7aedb1be06d8a627e684a43259 100644
--- a/briar-android/res/values/color.xml
+++ b/briar-android/res/values/color.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-	<color name="ButtonBarBorder">#CCCCCC</color>
+	<color name="HorizontalBorder">#CCCCCC</color>
 </resources>
\ No newline at end of file
diff --git a/briar-android/src/net/sf/briar/android/HomeScreenActivity.java b/briar-android/src/net/sf/briar/android/HomeScreenActivity.java
index 2b4b5f8cf9d1ab83a7575047e499617b5cbe1995..82f7a8088220fee28382dc2c161ae2717a26ddd4 100644
--- a/briar-android/src/net/sf/briar/android/HomeScreenActivity.java
+++ b/briar-android/src/net/sf/briar/android/HomeScreenActivity.java
@@ -13,6 +13,7 @@ import net.sf.briar.android.BriarService.BriarBinder;
 import net.sf.briar.android.BriarService.BriarServiceConnection;
 import net.sf.briar.android.contact.ContactListActivity;
 import net.sf.briar.android.messages.ConversationListActivity;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.IBinder;
@@ -48,8 +49,8 @@ public class HomeScreenActivity extends BriarActivity {
 		if(getIntent().getBooleanExtra("net.sf.briar.QUIT", false)) {
 			quit();
 		} else {
-			ListView.LayoutParams matchParent = new ListView.LayoutParams(
-					MATCH_PARENT, MATCH_PARENT);
+			ListView.LayoutParams matchParent =
+					new ListView.LayoutParams(MATCH_PARENT, MATCH_PARENT);
 
 			Button contactsButton = new Button(this);
 			contactsButton.setLayoutParams(matchParent);
@@ -172,8 +173,7 @@ public class HomeScreenActivity extends BriarActivity {
 
 	private void quit() {
 		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT,
-				MATCH_PARENT));
+		layout.setLayoutParams(CommonLayoutParams.MATCH_MATCH);
 		layout.setGravity(CENTER);
 		ProgressBar spinner = new ProgressBar(this);
 		spinner.setIndeterminate(true);
diff --git a/briar-android/src/net/sf/briar/android/contact/ContactListActivity.java b/briar-android/src/net/sf/briar/android/contact/ContactListActivity.java
index 41cab314b1873752e976324bcde1b3a32c67a29c..c66d780bb1d972dd2e3ebb16fe8f297acd92e3fc 100644
--- a/briar-android/src/net/sf/briar/android/contact/ContactListActivity.java
+++ b/briar-android/src/net/sf/briar/android/contact/ContactListActivity.java
@@ -1,8 +1,6 @@
 package net.sf.briar.android.contact;
 
 import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
@@ -16,6 +14,8 @@ import net.sf.briar.android.BriarActivity;
 import net.sf.briar.android.BriarService;
 import net.sf.briar.android.BriarService.BriarServiceConnection;
 import net.sf.briar.android.invitation.AddContactActivity;
+import net.sf.briar.android.widgets.CommonLayoutParams;
+import net.sf.briar.android.widgets.HorizontalBorder;
 import net.sf.briar.api.Contact;
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.db.DatabaseComponent;
@@ -33,7 +33,6 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.ListView;
 
 import com.google.inject.Inject;
@@ -57,23 +56,19 @@ implements OnClickListener, DatabaseListener, ConnectionListener {
 	public void onCreate(Bundle state) {
 		super.onCreate(null);
 		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+		layout.setLayoutParams(CommonLayoutParams.MATCH_MATCH);
 		layout.setOrientation(VERTICAL);
 		layout.setGravity(CENTER_HORIZONTAL);
 
 		adapter = new ContactListAdapter(this);
 		ListView list = new ListView(this);
 		// Give me all the width and all the unused height
-		list.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT, 1f));
+		list.setLayoutParams(CommonLayoutParams.MATCH_WRAP_1);
 		list.setAdapter(adapter);
 		list.setOnItemClickListener(adapter);
 		layout.addView(list);
 
-		View line = new View(this);
-		line.setLayoutParams(new LayoutParams(MATCH_PARENT, 5));
-		int colour = getResources().getColor(R.color.ButtonBarBorder);
-		line.setBackgroundColor(colour);
-		layout.addView(line);
+		layout.addView(new HorizontalBorder(this));
 
 		ImageButton addContactButton = new ImageButton(this);
 		addContactButton.setPadding(10, 10, 10, 10);
diff --git a/briar-android/src/net/sf/briar/android/contact/ContactListAdapter.java b/briar-android/src/net/sf/briar/android/contact/ContactListAdapter.java
index 45bc63639dff68091b7eac35a8ed0bc876b8039d..630522efc4750019f2375acd192192c2699805d2 100644
--- a/briar-android/src/net/sf/briar/android/contact/ContactListAdapter.java
+++ b/briar-android/src/net/sf/briar/android/contact/ContactListAdapter.java
@@ -1,12 +1,12 @@
 package net.sf.briar.android.contact;
 
 import static android.view.Gravity.CENTER_VERTICAL;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.widget.LinearLayout.HORIZONTAL;
 
 import java.util.ArrayList;
 
 import net.sf.briar.R;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.content.Context;
 import android.content.res.Resources;
 import android.text.Html;
@@ -18,7 +18,6 @@ import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.TextView;
 
 class ContactListAdapter extends ArrayAdapter<ContactListItem>
@@ -45,7 +44,7 @@ implements OnItemClickListener {
 
 		TextView name = new TextView(ctx);
 		// Give me all the unused width
-		name.setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT, 1));
+		name.setLayoutParams(CommonLayoutParams.WRAP_WRAP_1);
 		name.setTextSize(18);
 		name.setText(item.getName());
 		layout.addView(name);
diff --git a/briar-android/src/net/sf/briar/android/invitation/AddContactView.java b/briar-android/src/net/sf/briar/android/invitation/AddContactView.java
index cd90bc0fd8edbcda11cc3dbd48d2a3fb4a122ae9..aaa6b1bc97d4dc883ae576f5a4c9808cc38824d5 100644
--- a/briar-android/src/net/sf/briar/android/invitation/AddContactView.java
+++ b/briar-android/src/net/sf/briar/android/invitation/AddContactView.java
@@ -1,7 +1,7 @@
 package net.sf.briar.android.invitation;
 
 import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.content.Context;
 import android.widget.LinearLayout;
 
@@ -15,7 +15,7 @@ abstract class AddContactView extends LinearLayout {
 
 	void init(AddContactActivity container) {
 		this.container = container;
-		setLayoutParams(new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+		setLayoutParams(CommonLayoutParams.MATCH_MATCH);
 		setOrientation(VERTICAL);
 		setGravity(CENTER_HORIZONTAL);
 		populate();
diff --git a/briar-android/src/net/sf/briar/android/invitation/BluetoothWidget.java b/briar-android/src/net/sf/briar/android/invitation/BluetoothWidget.java
index 03b9e76f118c4aa8a72f200392187807149eb80b..ea470926af8a7537e58d78bc89f5af62f3a32898 100644
--- a/briar-android/src/net/sf/briar/android/invitation/BluetoothWidget.java
+++ b/briar-android/src/net/sf/briar/android/invitation/BluetoothWidget.java
@@ -3,8 +3,8 @@ package net.sf.briar.android.invitation;
 import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
 import static android.provider.Settings.ACTION_BLUETOOTH_SETTINGS;
 import static android.view.Gravity.CENTER;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import net.sf.briar.R;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.bluetooth.BluetoothAdapter;
 import android.content.Context;
 import android.content.Intent;
@@ -34,7 +34,7 @@ public class BluetoothWidget extends LinearLayout implements OnClickListener {
 		removeAllViews();
 		Context ctx = getContext();
 		TextView status = new TextView(ctx);
-		status.setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT, 1));
+		status.setLayoutParams(CommonLayoutParams.WRAP_WRAP_1);
 		BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
 		if(adapter == null) {
 			bluetoothStateChanged(false);
diff --git a/briar-android/src/net/sf/briar/android/invitation/CodesDoNotMatchView.java b/briar-android/src/net/sf/briar/android/invitation/CodesDoNotMatchView.java
index d30cffde90b4c0f3aa70b46279f2f07bf8b6da8a..6b39209446f2e892c6fb151323d479633a97ba2d 100644
--- a/briar-android/src/net/sf/briar/android/invitation/CodesDoNotMatchView.java
+++ b/briar-android/src/net/sf/briar/android/invitation/CodesDoNotMatchView.java
@@ -2,8 +2,8 @@ package net.sf.briar.android.invitation;
 
 import static android.view.Gravity.CENTER;
 import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import net.sf.briar.R;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.content.Context;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -44,8 +44,7 @@ implements OnClickListener {
 		addView(interfering);
 
 		Button tryAgain = new Button(ctx);
-		LayoutParams lp = new LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
-		tryAgain.setLayoutParams(lp);
+		tryAgain.setLayoutParams(CommonLayoutParams.WRAP_WRAP);
 		tryAgain.setText(R.string.try_again_button);
 		tryAgain.setOnClickListener(this);
 		addView(tryAgain);
diff --git a/briar-android/src/net/sf/briar/android/invitation/ConnectionFailedView.java b/briar-android/src/net/sf/briar/android/invitation/ConnectionFailedView.java
index 6bc06b41cf19716776ca83e21bdfa63a6b0f4a2b..f3c9df256f9cb3db15949a9dcd616bc812ef89de 100644
--- a/briar-android/src/net/sf/briar/android/invitation/ConnectionFailedView.java
+++ b/briar-android/src/net/sf/briar/android/invitation/ConnectionFailedView.java
@@ -2,8 +2,8 @@ package net.sf.briar.android.invitation;
 
 import static android.view.Gravity.CENTER;
 import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import net.sf.briar.R;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.content.Context;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -53,8 +53,7 @@ implements WifiStateListener, BluetoothStateListener, OnClickListener {
 		addView(bluetooth);
 
 		tryAgainButton = new Button(ctx);
-		LayoutParams lp = new LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
-		tryAgainButton.setLayoutParams(lp);
+		tryAgainButton.setLayoutParams(CommonLayoutParams.WRAP_WRAP);
 		tryAgainButton.setText(R.string.try_again_button);
 		tryAgainButton.setOnClickListener(this);
 		enabledOrDisableTryAgainButton();
diff --git a/briar-android/src/net/sf/briar/android/invitation/NetworkSetupView.java b/briar-android/src/net/sf/briar/android/invitation/NetworkSetupView.java
index da4d7671eade24d1ef5608c368239be434feaf32..64c0f47fbc7997f4aafbf5af9f821cc9bb72cacb 100644
--- a/briar-android/src/net/sf/briar/android/invitation/NetworkSetupView.java
+++ b/briar-android/src/net/sf/briar/android/invitation/NetworkSetupView.java
@@ -1,8 +1,8 @@
 package net.sf.briar.android.invitation;
 
 import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import net.sf.briar.R;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.content.Context;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -35,8 +35,7 @@ implements WifiStateListener, BluetoothStateListener, OnClickListener {
 		addView(bluetooth);
 
 		continueButton = new Button(ctx);
-		LayoutParams lp = new LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
-		continueButton.setLayoutParams(lp);
+		continueButton.setLayoutParams(CommonLayoutParams.WRAP_WRAP);
 		continueButton.setText(R.string.continue_button);
 		continueButton.setOnClickListener(this);
 		enableOrDisableContinueButton();
diff --git a/briar-android/src/net/sf/briar/android/invitation/WifiWidget.java b/briar-android/src/net/sf/briar/android/invitation/WifiWidget.java
index e3c5c2ac0d7d861466cfcb412306c240fa38b303..22fe4f425aaf6f6e94c8327f694efad4134419ef 100644
--- a/briar-android/src/net/sf/briar/android/invitation/WifiWidget.java
+++ b/briar-android/src/net/sf/briar/android/invitation/WifiWidget.java
@@ -3,8 +3,8 @@ package net.sf.briar.android.invitation;
 import static android.content.Context.WIFI_SERVICE;
 import static android.provider.Settings.ACTION_WIFI_SETTINGS;
 import static android.view.Gravity.CENTER;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import net.sf.briar.R;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -36,7 +36,7 @@ public class WifiWidget extends LinearLayout implements OnClickListener {
 		removeAllViews();
 		Context ctx = getContext();
 		TextView status = new TextView(ctx);
-		status.setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT, 1));
+		status.setLayoutParams(CommonLayoutParams.WRAP_WRAP_1);
 		WifiManager wifi = (WifiManager) ctx.getSystemService(WIFI_SERVICE);
 		if(wifi == null) {
 			wifiStateChanged(null);
diff --git a/briar-android/src/net/sf/briar/android/messages/ConversationActivity.java b/briar-android/src/net/sf/briar/android/messages/ConversationActivity.java
index 380145d1b106165e923fc0f934b49d4be7892dbe..bde389210fa355d71f1ed7e33c685573cb46f6ff 100644
--- a/briar-android/src/net/sf/briar/android/messages/ConversationActivity.java
+++ b/briar-android/src/net/sf/briar/android/messages/ConversationActivity.java
@@ -1,8 +1,6 @@
 package net.sf.briar.android.messages;
 
 import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
@@ -18,6 +16,8 @@ import net.sf.briar.R;
 import net.sf.briar.android.BriarActivity;
 import net.sf.briar.android.BriarService;
 import net.sf.briar.android.BriarService.BriarServiceConnection;
+import net.sf.briar.android.widgets.CommonLayoutParams;
+import net.sf.briar.android.widgets.HorizontalBorder;
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.db.DatabaseComponent;
 import net.sf.briar.api.db.DatabaseExecutor;
@@ -35,7 +35,6 @@ import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.ListView;
 
 import com.google.inject.Inject;
@@ -69,23 +68,19 @@ implements DatabaseListener, OnClickListener, OnItemClickListener {
 		if(contactName == null) throw new IllegalStateException();
 
 		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+		layout.setLayoutParams(CommonLayoutParams.MATCH_MATCH);
 		layout.setOrientation(VERTICAL);
 		layout.setGravity(CENTER_HORIZONTAL);
 
 		adapter = new ConversationAdapter(this);
 		list = new ListView(this);
 		// Give me all the width and all the unused height
-		list.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT, 1f));
+		list.setLayoutParams(CommonLayoutParams.MATCH_WRAP_1);
 		list.setAdapter(adapter);
 		list.setOnItemClickListener(this);
 		layout.addView(list);
 
-		View line = new View(this);
-		line.setLayoutParams(new LayoutParams(MATCH_PARENT, 5));
-		int colour = getResources().getColor(R.color.ButtonBarBorder);
-		line.setBackgroundColor(colour);
-		layout.addView(line);
+		layout.addView(new HorizontalBorder(this));
 
 		ImageButton composeButton = new ImageButton(this);
 		composeButton.setPadding(10, 10, 10, 10);
diff --git a/briar-android/src/net/sf/briar/android/messages/ConversationAdapter.java b/briar-android/src/net/sf/briar/android/messages/ConversationAdapter.java
index 8f2b7a96b22bc31401e969a43ac882a32d01ab54..c6419ce7fe6586ee0dc87124cf74153abea43b4b 100644
--- a/briar-android/src/net/sf/briar/android/messages/ConversationAdapter.java
+++ b/briar-android/src/net/sf/briar/android/messages/ConversationAdapter.java
@@ -2,13 +2,13 @@ package net.sf.briar.android.messages;
 
 import static android.graphics.Typeface.BOLD;
 import static android.view.Gravity.CENTER_VERTICAL;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.widget.LinearLayout.HORIZONTAL;
 import static java.text.DateFormat.SHORT;
 
 import java.util.ArrayList;
 
 import net.sf.briar.R;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import net.sf.briar.api.db.PrivateMessageHeader;
 import android.content.Context;
 import android.text.format.DateUtils;
@@ -17,7 +17,6 @@ import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.TextView;
 
 class ConversationAdapter extends ArrayAdapter<PrivateMessageHeader> {
@@ -50,8 +49,7 @@ class ConversationAdapter extends ArrayAdapter<PrivateMessageHeader> {
 
 		TextView subject = new TextView(ctx);
 		// Give me all the unused width
-		subject.setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT,
-				1));
+		subject.setLayoutParams(CommonLayoutParams.WRAP_WRAP_1);
 		subject.setTextSize(14);
 		subject.setMaxLines(2);
 		if(!item.isRead()) subject.setTypeface(null, BOLD);
diff --git a/briar-android/src/net/sf/briar/android/messages/ConversationListActivity.java b/briar-android/src/net/sf/briar/android/messages/ConversationListActivity.java
index 8aa3a27ffc196031e95a582708369af9a7d05b78..1b3699377b39993bb8e5d00514bfb6efd2e7cf41 100644
--- a/briar-android/src/net/sf/briar/android/messages/ConversationListActivity.java
+++ b/briar-android/src/net/sf/briar/android/messages/ConversationListActivity.java
@@ -1,8 +1,6 @@
 package net.sf.briar.android.messages;
 
 import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
@@ -21,6 +19,8 @@ import net.sf.briar.R;
 import net.sf.briar.android.BriarActivity;
 import net.sf.briar.android.BriarService;
 import net.sf.briar.android.BriarService.BriarServiceConnection;
+import net.sf.briar.android.widgets.CommonLayoutParams;
+import net.sf.briar.android.widgets.HorizontalBorder;
 import net.sf.briar.api.Contact;
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.db.DatabaseComponent;
@@ -39,7 +39,6 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.ListView;
 
 import com.google.inject.Inject;
@@ -63,23 +62,19 @@ implements OnClickListener, DatabaseListener {
 	public void onCreate(Bundle state) {
 		super.onCreate(null);
 		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+		layout.setLayoutParams(CommonLayoutParams.MATCH_MATCH);
 		layout.setOrientation(VERTICAL);
 		layout.setGravity(CENTER_HORIZONTAL);
 
 		adapter = new ConversationListAdapter(this);
 		ListView list = new ListView(this);
 		// Give me all the width and all the unused height
-		list.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT, 1f));
+		list.setLayoutParams(CommonLayoutParams.MATCH_WRAP_1);
 		list.setAdapter(adapter);
 		list.setOnItemClickListener(adapter);
 		layout.addView(list);
 
-		View line = new View(this);
-		line.setLayoutParams(new LayoutParams(MATCH_PARENT, 5));
-		int colour = getResources().getColor(R.color.ButtonBarBorder);
-		line.setBackgroundColor(colour);
-		layout.addView(line);
+		layout.addView(new HorizontalBorder(this));
 
 		ImageButton composeButton = new ImageButton(this);
 		composeButton.setPadding(10, 10, 10, 10);
diff --git a/briar-android/src/net/sf/briar/android/messages/ConversationListAdapter.java b/briar-android/src/net/sf/briar/android/messages/ConversationListAdapter.java
index 42b68a5d0dfd6d1054f3f171683f32d52ae28421..80627b99e74b6cf29d18692f2e29fea380c20010 100644
--- a/briar-android/src/net/sf/briar/android/messages/ConversationListAdapter.java
+++ b/briar-android/src/net/sf/briar/android/messages/ConversationListAdapter.java
@@ -3,7 +3,6 @@ package net.sf.briar.android.messages;
 import static android.graphics.Typeface.BOLD;
 import static android.view.Gravity.CENTER_VERTICAL;
 import static android.view.Gravity.LEFT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.widget.LinearLayout.HORIZONTAL;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.text.DateFormat.SHORT;
@@ -11,6 +10,7 @@ import static java.text.DateFormat.SHORT;
 import java.util.ArrayList;
 
 import net.sf.briar.R;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import android.content.Context;
 import android.content.Intent;
 import android.text.format.DateUtils;
@@ -21,7 +21,6 @@ import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.TextView;
 
 class ConversationListAdapter extends ArrayAdapter<ConversationListItem>
@@ -48,8 +47,7 @@ implements OnItemClickListener {
 
 		LinearLayout innerLayout = new LinearLayout(ctx);
 		// Give me all the unused width
-		innerLayout.setLayoutParams(new LayoutParams(WRAP_CONTENT,
-				WRAP_CONTENT, 1));
+		innerLayout.setLayoutParams(CommonLayoutParams.WRAP_WRAP_1);
 		innerLayout.setOrientation(VERTICAL);
 		innerLayout.setGravity(LEFT);
 
diff --git a/briar-android/src/net/sf/briar/android/messages/ReadMessageActivity.java b/briar-android/src/net/sf/briar/android/messages/ReadMessageActivity.java
index 10367da62525b8ea146fec159741c31406034ad0..a5e302485cf6ed130c3324286930615f7c54da12 100644
--- a/briar-android/src/net/sf/briar/android/messages/ReadMessageActivity.java
+++ b/briar-android/src/net/sf/briar/android/messages/ReadMessageActivity.java
@@ -2,8 +2,6 @@ package net.sf.briar.android.messages;
 
 import static android.view.Gravity.CENTER;
 import static android.view.Gravity.CENTER_VERTICAL;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.widget.LinearLayout.HORIZONTAL;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.text.DateFormat.SHORT;
@@ -18,6 +16,9 @@ import net.sf.briar.R;
 import net.sf.briar.android.BriarActivity;
 import net.sf.briar.android.BriarService;
 import net.sf.briar.android.BriarService.BriarServiceConnection;
+import net.sf.briar.android.widgets.CommonLayoutParams;
+import net.sf.briar.android.widgets.HorizontalBorder;
+import net.sf.briar.android.widgets.HorizontalSpace;
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.android.BundleEncrypter;
 import net.sf.briar.api.db.DatabaseComponent;
@@ -31,7 +32,6 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.ScrollView;
 import android.widget.TextView;
 
@@ -113,25 +113,24 @@ implements OnClickListener {
 		}
 
 		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
+		layout.setLayoutParams(CommonLayoutParams.MATCH_WRAP);
 		layout.setOrientation(VERTICAL);
 
 		ScrollView scrollView = new ScrollView(this);
 		// Give me all the width and all the unused height
-		scrollView.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT,
-				1));
+		scrollView.setLayoutParams(CommonLayoutParams.MATCH_WRAP_1);
 
 		LinearLayout message = new LinearLayout(this);
 		message.setOrientation(VERTICAL);
 
 		LinearLayout header = new LinearLayout(this);
-		header.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
+		header.setLayoutParams(CommonLayoutParams.MATCH_WRAP);
 		header.setOrientation(HORIZONTAL);
 		header.setGravity(CENTER_VERTICAL);
 
 		TextView name = new TextView(this);
 		// Give me all the unused width
-		name.setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT, 1));
+		name.setLayoutParams(CommonLayoutParams.WRAP_WRAP_1);
 		name.setTextSize(18);
 		name.setPadding(10, 0, 0, 0);
 		String format = getResources().getString(R.string.message_from);
@@ -156,14 +155,10 @@ implements OnClickListener {
 		scrollView.addView(message);
 		layout.addView(scrollView);
 
-		View line = new View(this);
-		line.setLayoutParams(new LayoutParams(MATCH_PARENT, 5));
-		int colour = getResources().getColor(R.color.ButtonBarBorder);
-		line.setBackgroundColor(colour);
-		layout.addView(line);
+		layout.addView(new HorizontalBorder(this));
 
 		LinearLayout footer = new LinearLayout(this);
-		footer.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
+		footer.setLayoutParams(CommonLayoutParams.MATCH_WRAP);
 		footer.setOrientation(HORIZONTAL);
 		footer.setGravity(CENTER);
 
@@ -174,6 +169,7 @@ implements OnClickListener {
 		else starButton.setImageResource(R.drawable.rating_not_important);
 		starButton.setOnClickListener(this);
 		footer.addView(starButton);
+		footer.addView(new HorizontalSpace(this));
 
 		readButton = new ImageButton(this);
 		readButton.setPadding(10, 10, 10, 10);
@@ -182,6 +178,7 @@ implements OnClickListener {
 		else readButton.setImageResource(R.drawable.content_read);
 		readButton.setOnClickListener(this);
 		footer.addView(readButton);
+		footer.addView(new HorizontalSpace(this));
 
 		prevButton = new ImageButton(this);
 		prevButton.setPadding(10, 10, 10, 10);
@@ -190,6 +187,7 @@ implements OnClickListener {
 		prevButton.setOnClickListener(this);
 		prevButton.setEnabled(!first);
 		footer.addView(prevButton);
+		footer.addView(new HorizontalSpace(this));
 
 		nextButton = new ImageButton(this);
 		nextButton.setPadding(10, 10, 10, 10);
@@ -198,6 +196,7 @@ implements OnClickListener {
 		nextButton.setOnClickListener(this);
 		nextButton.setEnabled(!last);
 		footer.addView(nextButton);
+		footer.addView(new HorizontalSpace(this));
 
 		replyButton = new ImageButton(this);
 		replyButton.setPadding(10, 10, 10, 10);
diff --git a/briar-android/src/net/sf/briar/android/messages/WriteMessageActivity.java b/briar-android/src/net/sf/briar/android/messages/WriteMessageActivity.java
index f5c7514bd10c6a451c45e21c4e47a978317ed4e8..4c3bbe6cc746bab1028cb0b8a2d533d45680497e 100644
--- a/briar-android/src/net/sf/briar/android/messages/WriteMessageActivity.java
+++ b/briar-android/src/net/sf/briar/android/messages/WriteMessageActivity.java
@@ -1,8 +1,6 @@
 package net.sf.briar.android.messages;
 
 import static android.view.Gravity.CENTER_VERTICAL;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.widget.LinearLayout.HORIZONTAL;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.util.logging.Level.INFO;
@@ -17,6 +15,7 @@ import net.sf.briar.R;
 import net.sf.briar.android.BriarActivity;
 import net.sf.briar.android.BriarService;
 import net.sf.briar.android.BriarService.BriarServiceConnection;
+import net.sf.briar.android.widgets.CommonLayoutParams;
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.android.BundleEncrypter;
 import net.sf.briar.api.db.DatabaseComponent;
@@ -33,7 +32,6 @@ import android.view.View.OnClickListener;
 import android.widget.EditText;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
-import android.widget.LinearLayout.LayoutParams;
 import android.widget.TextView;
 
 import com.google.inject.Inject;
@@ -71,17 +69,17 @@ implements OnClickListener {
 		if(pid != null) parentId = new MessageId(pid);
 
 		LinearLayout layout = new LinearLayout(this);
-		layout.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
+		layout.setLayoutParams(CommonLayoutParams.MATCH_WRAP);
 		layout.setOrientation(VERTICAL);
 
 		LinearLayout actionBar = new LinearLayout(this);
-		actionBar.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
+		actionBar.setLayoutParams(CommonLayoutParams.MATCH_WRAP);
 		actionBar.setOrientation(HORIZONTAL);
 		actionBar.setGravity(CENTER_VERTICAL);
 
 		TextView to = new TextView(this);
 		// Give me all the unused width
-		to.setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT, 1));
+		to.setLayoutParams(CommonLayoutParams.WRAP_WRAP_1);
 		to.setPadding(10, 0, 0, 0);
 		to.setTextSize(18);
 		String format = getResources().getString(R.string.message_to);
diff --git a/briar-android/src/net/sf/briar/android/widgets/CommonLayoutParams.java b/briar-android/src/net/sf/briar/android/widgets/CommonLayoutParams.java
new file mode 100644
index 0000000000000000000000000000000000000000..465b98fad85710a608e671cf05c1f3c13b84e49f
--- /dev/null
+++ b/briar-android/src/net/sf/briar/android/widgets/CommonLayoutParams.java
@@ -0,0 +1,23 @@
+package net.sf.briar.android.widgets;
+
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+import android.widget.LinearLayout;
+
+public class CommonLayoutParams {
+
+	public static final LinearLayout.LayoutParams MATCH_MATCH =
+			new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT);
+
+	public static final LinearLayout.LayoutParams MATCH_WRAP =
+			new LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT);
+
+	public static final LinearLayout.LayoutParams MATCH_WRAP_1 =
+			new LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT, 1);
+
+	public static final LinearLayout.LayoutParams WRAP_WRAP =
+			new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
+
+	public static final LinearLayout.LayoutParams WRAP_WRAP_1 =
+			new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, 1);
+}
diff --git a/briar-android/src/net/sf/briar/android/widgets/HorizontalBorder.java b/briar-android/src/net/sf/briar/android/widgets/HorizontalBorder.java
new file mode 100644
index 0000000000000000000000000000000000000000..958092f40c729faf84cf64cfab28485512fd47ea
--- /dev/null
+++ b/briar-android/src/net/sf/briar/android/widgets/HorizontalBorder.java
@@ -0,0 +1,18 @@
+package net.sf.briar.android.widgets;
+
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import net.sf.briar.R;
+import android.content.Context;
+import android.view.View;
+import android.widget.LinearLayout.LayoutParams;
+
+public class HorizontalBorder extends View {
+
+	private static final int LINE_WIDTH = 5;
+
+	public HorizontalBorder(Context ctx) {
+		super(ctx);
+		setLayoutParams(new LayoutParams(MATCH_PARENT, LINE_WIDTH));
+		setBackgroundColor(getResources().getColor(R.color.HorizontalBorder));
+	}
+}
diff --git a/briar-android/src/net/sf/briar/android/widgets/HorizontalSpace.java b/briar-android/src/net/sf/briar/android/widgets/HorizontalSpace.java
new file mode 100644
index 0000000000000000000000000000000000000000..215003f6ca94db2c531b68127b43bcaae2ae7402
--- /dev/null
+++ b/briar-android/src/net/sf/briar/android/widgets/HorizontalSpace.java
@@ -0,0 +1,14 @@
+package net.sf.briar.android.widgets;
+
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+import android.content.Context;
+import android.view.View;
+import android.widget.LinearLayout.LayoutParams;
+
+public class HorizontalSpace extends View {
+
+	public HorizontalSpace(Context ctx) {
+		super(ctx);
+		setLayoutParams(new LayoutParams(WRAP_CONTENT, 0, 1));
+	}
+}