diff --git a/briar-android/res/values-v11/styles.xml b/briar-android/res/values-v11/styles.xml
index dbc0841459eb1e98959203ca36ef8e22088a8ee6..12c9ddd648edf88e2b2ed185640eb1b1e14771c1 100644
--- a/briar-android/res/values-v11/styles.xml
+++ b/briar-android/res/values-v11/styles.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<style name="LightTheme" parent="android:Theme.Holo.Light" />
-	<integer name="horizontal_border_width">5</integer>
 	<integer name="spinner_padding">10</integer>
 </resources>
\ No newline at end of file
diff --git a/briar-android/res/values/styles.xml b/briar-android/res/values/styles.xml
index a65656192cb3e6c4786fab3afdd956ba4759a263..07556eda81dfa7c682ad3c90aa392bd670848ef6 100644
--- a/briar-android/res/values/styles.xml
+++ b/briar-android/res/values/styles.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<style name="LightTheme" parent="android:Theme.Light" />
-	<integer name="horizontal_border_width">2</integer>
 	<integer name="spinner_padding">0</integer>
 </resources>
\ No newline at end of file
diff --git a/briar-android/src/org/briarproject/android/HomeScreenActivity.java b/briar-android/src/org/briarproject/android/HomeScreenActivity.java
index 909b948e45fa80ae822d002640c668d84e169687..7024486e5b50e74dc10155856b6b28c540f83d24 100644
--- a/briar-android/src/org/briarproject/android/HomeScreenActivity.java
+++ b/briar-android/src/org/briarproject/android/HomeScreenActivity.java
@@ -27,6 +27,8 @@ import org.briarproject.android.BriarService.BriarBinder;
 import org.briarproject.android.BriarService.BriarServiceConnection;
 import org.briarproject.android.contact.ContactListActivity;
 import org.briarproject.android.groups.GroupListActivity;
+import org.briarproject.android.util.FixedVerticalSpace;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.android.DatabaseUiExecutor;
 import org.briarproject.api.android.ReferenceManager;
@@ -198,10 +200,12 @@ public class HomeScreenActivity extends RoboActivity {
 		layout.setOrientation(VERTICAL);
 		layout.setGravity(CENTER_HORIZONTAL);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		enterPassword = new TextView(this);
 		enterPassword.setGravity(CENTER);
 		enterPassword.setTextSize(18);
-		enterPassword.setPadding(10, 10, 10, 0);
+		enterPassword.setPadding(pad, pad, pad, 0);
 		enterPassword.setText(R.string.enter_password);
 		layout.addView(enterPassword);
 
@@ -218,6 +222,9 @@ public class HomeScreenActivity extends RoboActivity {
 		});
 		layout.addView(passwordEntry);
 
+		// Adjusting the padding of buttons and EditTexts has the wrong results
+		layout.addView(new FixedVerticalSpace(this));
+
 		continueButton = new Button(this);
 		continueButton.setLayoutParams(WRAP_WRAP);
 		continueButton.setText(R.string.continue_button);
@@ -230,7 +237,6 @@ public class HomeScreenActivity extends RoboActivity {
 
 		progress = new ProgressBar(this);
 		progress.setLayoutParams(WRAP_WRAP);
-		progress.setPadding(0, 10, 0, 0);
 		progress.setIndeterminate(true);
 		progress.setVisibility(GONE);
 		layout.addView(progress);
@@ -288,12 +294,16 @@ public class HomeScreenActivity extends RoboActivity {
 		LinearLayout layout = new LinearLayout(this);
 		layout.setLayoutParams(MATCH_MATCH);
 		layout.setGravity(CENTER);
+
+		int pad = LayoutUtils.getPadding(this);
+
 		TextView warning = new TextView(this);
 		warning.setGravity(CENTER);
 		warning.setTextSize(18);
-		warning.setPadding(10, 10, 10, 10);
+		warning.setPadding(pad, pad, pad, pad);
 		warning.setText(R.string.expiry_warning);
 		layout.addView(warning);
+
 		setContentView(layout);
 	}
 
@@ -359,10 +369,12 @@ public class HomeScreenActivity extends RoboActivity {
 		});
 		buttons.add(quitButton);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		GridView grid = new GridView(this);
 		grid.setLayoutParams(matchMatch);
 		grid.setGravity(CENTER);
-		grid.setPadding(5, 5, 5, 5);
+		grid.setPadding(pad, pad, pad, pad);
 		grid.setBackgroundColor(getResources().getColor(
 				R.color.home_screen_background));
 		grid.setNumColumns(2);
diff --git a/briar-android/src/org/briarproject/android/SetupActivity.java b/briar-android/src/org/briarproject/android/SetupActivity.java
index a9e56819049597f700e52d9c9d8e34a24b110581..5aef39a828c2c68476620b9207db96cd7a6922b4 100644
--- a/briar-android/src/org/briarproject/android/SetupActivity.java
+++ b/briar-android/src/org/briarproject/android/SetupActivity.java
@@ -19,6 +19,7 @@ import java.util.concurrent.Executor;
 import javax.inject.Inject;
 
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.android.util.StrengthMeter;
 import org.briarproject.api.AuthorFactory;
 import org.briarproject.api.LocalAuthor;
@@ -70,10 +71,12 @@ public class SetupActivity extends RoboActivity implements OnClickListener {
 		layout.setOrientation(VERTICAL);
 		layout.setGravity(CENTER_HORIZONTAL);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		TextView chooseNickname = new TextView(this);
 		chooseNickname.setGravity(CENTER);
 		chooseNickname.setTextSize(18);
-		chooseNickname.setPadding(10, 10, 10, 0);
+		chooseNickname.setPadding(pad, pad, pad, 0);
 		chooseNickname.setText(R.string.choose_nickname);
 		layout.addView(chooseNickname);
 
@@ -93,7 +96,7 @@ public class SetupActivity extends RoboActivity implements OnClickListener {
 		TextView choosePassword = new TextView(this);
 		choosePassword.setGravity(CENTER);
 		choosePassword.setTextSize(18);
-		choosePassword.setPadding(10, 10, 10, 0);
+		choosePassword.setPadding(pad, pad, pad, 0);
 		choosePassword.setText(R.string.choose_password);
 		layout.addView(choosePassword);
 
@@ -113,7 +116,7 @@ public class SetupActivity extends RoboActivity implements OnClickListener {
 		TextView confirmPassword = new TextView(this);
 		confirmPassword.setGravity(CENTER);
 		confirmPassword.setTextSize(18);
-		confirmPassword.setPadding(10, 10, 10, 0);
+		confirmPassword.setPadding(pad, pad, pad, 0);
 		confirmPassword.setText(R.string.confirm_password);
 		layout.addView(confirmPassword);
 
@@ -131,13 +134,13 @@ public class SetupActivity extends RoboActivity implements OnClickListener {
 		layout.addView(passwordConfirmation);
 
 		strengthMeter = new StrengthMeter(this);
-		strengthMeter.setPadding(30, 10, 30, 0);
+		strengthMeter.setPadding(5 * pad, pad, 5 * pad, 0);
 		layout.addView(strengthMeter);
 
 		feedback = new TextView(this);
 		feedback.setGravity(CENTER);
 		feedback.setTextSize(14);
-		feedback.setPadding(10, 10, 10, 10);
+		feedback.setPadding(pad, pad, pad, pad);
 		feedback.setText("");
 		layout.addView(feedback);
 
@@ -150,7 +153,6 @@ public class SetupActivity extends RoboActivity implements OnClickListener {
 
 		progress = new ProgressBar(this);
 		progress.setLayoutParams(WRAP_WRAP);
-		progress.setPadding(0, 10, 0, 0);
 		progress.setIndeterminate(true);
 		progress.setVisibility(GONE);
 		layout.addView(progress);
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java b/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java
index 83f1ae127ceeb45b70597955ed294e2a13cf8f17..e02799b6e44821dc0841d4f25ecdb872cc6d409f 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java
+++ b/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java
@@ -7,6 +7,8 @@ import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
 import java.util.ArrayList;
 
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.text.Html;
@@ -20,9 +22,12 @@ import android.widget.TextView;
 
 class ContactListAdapter extends ArrayAdapter<ContactListItem> {
 
+	private final int pad;
+
 	ContactListAdapter(Context ctx) {
 		super(ctx, android.R.layout.simple_expandable_list_item_1,
 				new ArrayList<ContactListItem>());
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	@Override
@@ -37,7 +42,7 @@ class ContactListAdapter extends ArrayAdapter<ContactListItem> {
 			layout.setBackgroundColor(res.getColor(R.color.unread_background));
 
 		ImageView bulb = new ImageView(ctx);
-		bulb.setPadding(5, 5, 5, 5);
+		bulb.setPadding(pad, pad, pad, pad);
 		if(item.isConnected())
 			bulb.setImageResource(R.drawable.contact_connected);
 		else bulb.setImageResource(R.drawable.contact_disconnected);
@@ -48,7 +53,7 @@ class ContactListAdapter extends ArrayAdapter<ContactListItem> {
 		name.setLayoutParams(WRAP_WRAP_1);
 		name.setTextSize(18);
 		name.setMaxLines(1);
-		name.setPadding(0, 10, 10, 10);
+		name.setPadding(0, pad, pad, pad);
 		int unread = item.getUnreadCount();
 		String contactName = item.getContact().getAuthor().getName();
 		if(unread > 0) name.setText(contactName + " (" + unread + ")");
@@ -57,7 +62,7 @@ class ContactListAdapter extends ArrayAdapter<ContactListItem> {
 
 		TextView connected = new TextView(ctx);
 		connected.setTextSize(14);
-		connected.setPadding(0, 10, 10, 10);
+		connected.setPadding(0, pad, pad, pad);
 		if(item.isConnected()) {
 			connected.setText(R.string.contact_connected);
 		} else {
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java b/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java
index 4d08434ce4901d2a5d40e5f0d972b134cba7c31f..d36a862bdc6a951b8efdd7e4fe45df14751df538 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java
@@ -7,7 +7,9 @@ import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
 import java.util.ArrayList;
 
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.db.MessageHeader;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.text.format.DateUtils;
@@ -19,9 +21,12 @@ import android.widget.TextView;
 
 class ConversationAdapter extends ArrayAdapter<ConversationItem> {
 
+	private final int pad;
+
 	ConversationAdapter(Context ctx) {
 		super(ctx, android.R.layout.simple_expandable_list_item_1,
 				new ArrayList<ConversationItem>());
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	@Override
@@ -41,13 +46,13 @@ class ConversationAdapter extends ArrayAdapter<ConversationItem> {
 		name.setLayoutParams(WRAP_WRAP_1);
 		name.setTextSize(18);
 		name.setMaxLines(1);
-		name.setPadding(10, 10, 10, 10);
+		name.setPadding(pad, pad, pad, pad);
 		name.setText(header.getAuthor().getName());
 		layout.addView(name);
 
 		TextView date = new TextView(ctx);
 		date.setTextSize(14);
-		date.setPadding(0, 10, 10, 10);
+		date.setPadding(0, pad, pad, pad);
 		long then = header.getTimestamp(), now = System.currentTimeMillis();
 		date.setText(DateUtils.formatSameDayTime(then, now, SHORT, SHORT));
 		layout.addView(date);
diff --git a/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java b/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
index 5745d4a9b8e60b1a7afc47a1d93e893e986a040f..ee27a2d8500fd5fd1de48ff35bd90cec9590914b 100644
--- a/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
@@ -19,7 +19,8 @@ import javax.inject.Inject;
 
 import org.briarproject.R;
 import org.briarproject.android.util.HorizontalBorder;
-import org.briarproject.android.util.HorizontalSpace;
+import org.briarproject.android.util.ElasticHorizontalSpace;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.AuthorId;
 import org.briarproject.api.android.DatabaseUiExecutor;
 import org.briarproject.api.db.DatabaseComponent;
@@ -28,6 +29,7 @@ import org.briarproject.api.db.NoSuchMessageException;
 import org.briarproject.api.lifecycle.LifecycleManager;
 import org.briarproject.api.messaging.GroupId;
 import org.briarproject.api.messaging.MessageId;
+
 import roboguice.activity.RoboActivity;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -114,18 +116,20 @@ implements OnClickListener {
 		header.setOrientation(HORIZONTAL);
 		header.setGravity(CENTER_VERTICAL);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		TextView name = new TextView(this);
 		// Give me all the unused width
 		name.setLayoutParams(WRAP_WRAP_1);
 		name.setTextSize(18);
 		name.setMaxLines(1);
-		name.setPadding(10, 10, 10, 10);
+		name.setPadding(pad, pad, pad, pad);
 		name.setText(authorName);
 		header.addView(name);
 
 		TextView date = new TextView(this);
 		date.setTextSize(14);
-		date.setPadding(0, 10, 10, 10);
+		date.setPadding(0, pad, pad, pad);
 		long now = System.currentTimeMillis();
 		date.setText(DateUtils.formatSameDayTime(timestamp, now, SHORT, SHORT));
 		header.addView(date);
@@ -134,7 +138,7 @@ implements OnClickListener {
 		if(contentType.equals("text/plain")) {
 			// Load and display the message body
 			content = new TextView(this);
-			content.setPadding(10, 0, 10, 10);
+			content.setPadding(pad, 0, pad, pad);
 			message.addView(content);
 			loadMessageBody();
 		}
@@ -154,21 +158,21 @@ implements OnClickListener {
 		else readButton.setImageResource(R.drawable.content_read);
 		readButton.setOnClickListener(this);
 		footer.addView(readButton);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 
 		prevButton = new ImageButton(this);
 		prevButton.setBackgroundResource(0);
 		prevButton.setImageResource(R.drawable.navigation_previous_item);
 		prevButton.setOnClickListener(this);
 		footer.addView(prevButton);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 
 		nextButton = new ImageButton(this);
 		nextButton.setBackgroundResource(0);
 		nextButton.setImageResource(R.drawable.navigation_next_item);
 		nextButton.setOnClickListener(this);
 		footer.addView(nextButton);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 
 		replyButton = new ImageButton(this);
 		replyButton.setBackgroundResource(0);
diff --git a/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java b/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java
index bf671b63edcea2f079261a93542a5366b876c16c..847a472ff041c42452987527b603a7f9d89c947b 100644
--- a/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java
@@ -19,7 +19,8 @@ import java.util.logging.Logger;
 import javax.inject.Inject;
 
 import org.briarproject.R;
-import org.briarproject.android.util.HorizontalSpace;
+import org.briarproject.android.util.ElasticHorizontalSpace;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.AuthorId;
 import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.android.DatabaseUiExecutor;
@@ -34,6 +35,7 @@ import org.briarproject.api.messaging.GroupId;
 import org.briarproject.api.messaging.Message;
 import org.briarproject.api.messaging.MessageFactory;
 import org.briarproject.api.messaging.MessageId;
+
 import roboguice.activity.RoboActivity;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -97,13 +99,15 @@ implements OnClickListener {
 		header.setOrientation(HORIZONTAL);
 		header.setGravity(CENTER_VERTICAL);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		from = new TextView(this);
 		from.setTextSize(18);
-		from.setPadding(10, 10, 10, 10);
+		from.setPadding(pad, pad, pad, pad);
 		from.setText(R.string.from);
 		header.addView(from);
 
-		header.addView(new HorizontalSpace(this));
+		header.addView(new ElasticHorizontalSpace(this));
 
 		sendButton = new ImageButton(this);
 		sendButton.setBackgroundResource(0);
@@ -115,7 +119,7 @@ implements OnClickListener {
 
 		to = new TextView(this);
 		to.setTextSize(18);
-		to.setPadding(10, 0, 10, 10);
+		to.setPadding(pad, 0, pad, pad);
 		String format = getResources().getString(R.string.format_to);
 		to.setText(String.format(format, contactName));
 		layout.addView(to);
diff --git a/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java b/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java
index d227059f07e7de766aa2f84d98b92aed54f28591..5474b05a1951d8737edcb2bbf5c4b92e9169ddcb 100644
--- a/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/CreateGroupActivity.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.briarproject.R;
 import org.briarproject.android.contact.SelectContactsDialog;
 import org.briarproject.android.invitation.AddContactActivity;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.Contact;
 import org.briarproject.api.ContactId;
 import org.briarproject.api.android.DatabaseUiExecutor;
@@ -31,6 +32,7 @@ import org.briarproject.api.db.DbException;
 import org.briarproject.api.lifecycle.LifecycleManager;
 import org.briarproject.api.messaging.Group;
 import org.briarproject.api.messaging.GroupFactory;
+
 import roboguice.activity.RoboFragmentActivity;
 import android.content.Intent;
 import android.os.Bundle;
@@ -79,10 +81,12 @@ SelectContactsDialog.Listener {
 		layout.setOrientation(VERTICAL);
 		layout.setGravity(CENTER_HORIZONTAL);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		TextView chooseName = new TextView(this);
 		chooseName.setGravity(CENTER);
 		chooseName.setTextSize(18);
-		chooseName.setPadding(10, 10, 10, 0);
+		chooseName.setPadding(pad, pad, pad, 0);
 		chooseName.setText(R.string.choose_forum_name);
 		layout.addView(chooseName);
 
diff --git a/briar-android/src/org/briarproject/android/groups/GroupAdapter.java b/briar-android/src/org/briarproject/android/groups/GroupAdapter.java
index 1b9b446ef6a6603a986d44106201753f6db87a7d..4900e2f3e179e96caa0afe27a360419232821e72 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupAdapter.java
+++ b/briar-android/src/org/briarproject/android/groups/GroupAdapter.java
@@ -7,8 +7,10 @@ import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
 import java.util.ArrayList;
 
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.Author;
 import org.briarproject.api.db.MessageHeader;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.text.format.DateUtils;
@@ -20,9 +22,12 @@ import android.widget.TextView;
 
 class GroupAdapter extends ArrayAdapter<MessageHeader> {
 
+	private final int pad;
+
 	GroupAdapter(Context ctx) {
 		super(ctx, android.R.layout.simple_expandable_list_item_1,
 				new ArrayList<MessageHeader>());
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	@Override
@@ -41,7 +46,7 @@ class GroupAdapter extends ArrayAdapter<MessageHeader> {
 		name.setLayoutParams(WRAP_WRAP_1);
 		name.setTextSize(18);
 		name.setMaxLines(1);
-		name.setPadding(10, 10, 10, 10);
+		name.setPadding(pad, pad, pad, pad);
 		Author author = item.getAuthor();
 		if(author == null) {
 			name.setTextColor(res.getColor(R.color.anonymous_author));
@@ -53,7 +58,7 @@ class GroupAdapter extends ArrayAdapter<MessageHeader> {
 
 		TextView date = new TextView(ctx);
 		date.setTextSize(14);
-		date.setPadding(10, 10, 10, 10);
+		date.setPadding(pad, pad, pad, pad);
 		long then = item.getTimestamp(), now = System.currentTimeMillis();
 		date.setText(DateUtils.formatSameDayTime(then, now, SHORT, SHORT));
 		layout.addView(date);
diff --git a/briar-android/src/org/briarproject/android/groups/GroupListActivity.java b/briar-android/src/org/briarproject/android/groups/GroupListActivity.java
index 6dbd585f67e39e430b2c37d0b743333a0747a7a9..d61c4148e88c78f3d6904cbe10252aeaf02813f6 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupListActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/GroupListActivity.java
@@ -24,7 +24,7 @@ import javax.inject.Inject;
 
 import org.briarproject.R;
 import org.briarproject.android.util.HorizontalBorder;
-import org.briarproject.android.util.HorizontalSpace;
+import org.briarproject.android.util.ElasticHorizontalSpace;
 import org.briarproject.android.util.ListLoadingProgressBar;
 import org.briarproject.api.android.DatabaseUiExecutor;
 import org.briarproject.api.db.DatabaseComponent;
@@ -99,21 +99,21 @@ implements EventListener, OnClickListener, OnItemClickListener {
 		footer.setLayoutParams(MATCH_WRAP);
 		footer.setOrientation(HORIZONTAL);
 		footer.setGravity(CENTER);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 
 		newGroupButton = new ImageButton(this);
 		newGroupButton.setBackgroundResource(0);
 		newGroupButton.setImageResource(R.drawable.social_new_chat);
 		newGroupButton.setOnClickListener(this);
 		footer.addView(newGroupButton);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 
 		manageGroupsButton = new ImageButton(this);
 		manageGroupsButton.setBackgroundResource(0);
 		manageGroupsButton.setImageResource(R.drawable.action_settings);
 		manageGroupsButton.setOnClickListener(this);
 		footer.addView(manageGroupsButton);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 		layout.addView(footer);
 
 		setContentView(layout);
diff --git a/briar-android/src/org/briarproject/android/groups/GroupListAdapter.java b/briar-android/src/org/briarproject/android/groups/GroupListAdapter.java
index 7bcb6ad56d05496bf7cad615fdc7c7d81f929843..e9ee80b98693f0ae91afc2f0fb75406e6a2bf45e 100644
--- a/briar-android/src/org/briarproject/android/groups/GroupListAdapter.java
+++ b/briar-android/src/org/briarproject/android/groups/GroupListAdapter.java
@@ -12,6 +12,8 @@ import java.util.Comparator;
 import java.util.List;
 
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.text.format.DateUtils;
@@ -24,11 +26,13 @@ import android.widget.TextView;
 class GroupListAdapter extends BaseAdapter {
 
 	private final Context ctx;
+	private final int pad;
 	private final List<GroupListItem> list = new ArrayList<GroupListItem>();
 	private int available = 0;
 
 	GroupListAdapter(Context ctx) {
 		this.ctx = ctx;
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	public void setAvailable(int available) {
@@ -63,7 +67,7 @@ class GroupListAdapter extends BaseAdapter {
 			TextView manage = new TextView(ctx);
 			manage.setGravity(CENTER);
 			manage.setTextSize(18);
-			manage.setPadding(10, 10, 10, 10);
+			manage.setPadding(pad, pad, pad, pad);
 			String format = res.getQuantityString(R.plurals.forums_available,
 					available);
 			manage.setText(String.format(format, available));
@@ -80,7 +84,7 @@ class GroupListAdapter extends BaseAdapter {
 		name.setLayoutParams(WRAP_WRAP_1);
 		name.setTextSize(18);
 		name.setMaxLines(1);
-		name.setPadding(10, 10, 10, 10);
+		name.setPadding(pad, pad, pad, pad);
 		int unread = item.getUnreadCount();
 		String groupName = item.getGroup().getName();
 		if(unread > 0) name.setText(groupName + " (" + unread + ")");
@@ -90,14 +94,14 @@ class GroupListAdapter extends BaseAdapter {
 		if(item.isEmpty()) {
 			TextView noPosts = new TextView(ctx);
 			noPosts.setTextSize(14);
-			noPosts.setPadding(10, 0, 10, 10);
+			noPosts.setPadding(pad, 0, pad, pad);
 			noPosts.setTextColor(res.getColor(R.color.no_posts));
 			noPosts.setText(R.string.no_posts);
 			layout.addView(noPosts);
 		} else {
 			TextView date = new TextView(ctx);
 			date.setTextSize(14);
-			date.setPadding(10, 0, 10, 10);
+			date.setPadding(pad, 0, pad, pad);
 			long then = item.getTimestamp(), now = System.currentTimeMillis();
 			date.setText(DateUtils.formatSameDayTime(then, now, SHORT, SHORT));
 			layout.addView(date);
diff --git a/briar-android/src/org/briarproject/android/groups/ManageGroupsAdapter.java b/briar-android/src/org/briarproject/android/groups/ManageGroupsAdapter.java
index a3c115e385d014d4549e95cfa42a15135b956320..f6dd5eade9e03c9a0b40fce1b5a462073cc78ddb 100644
--- a/briar-android/src/org/briarproject/android/groups/ManageGroupsAdapter.java
+++ b/briar-android/src/org/briarproject/android/groups/ManageGroupsAdapter.java
@@ -12,7 +12,9 @@ import java.util.Comparator;
 import java.util.List;
 
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.messaging.GroupStatus;
+
 import android.content.Context;
 import android.view.View;
 import android.view.ViewGroup;
@@ -24,11 +26,13 @@ import android.widget.TextView;
 class ManageGroupsAdapter extends BaseAdapter {
 
 	private final Context ctx;
+	private final int pad;
 	private final List<ManageGroupsItem> list =
 			new ArrayList<ManageGroupsItem>();
 
 	ManageGroupsAdapter(Context ctx) {
 		this.ctx = ctx;
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	public void add(ManageGroupsItem item) {
@@ -58,7 +62,7 @@ class ManageGroupsAdapter extends BaseAdapter {
 			TextView none = new TextView(ctx);
 			none.setGravity(CENTER);
 			none.setTextSize(18);
-			none.setPadding(10, 10, 10, 10);
+			none.setPadding(pad, pad, pad, pad);
 			none.setText(R.string.no_forums_available);
 			return none;
 		}
@@ -68,7 +72,7 @@ class ManageGroupsAdapter extends BaseAdapter {
 		layout.setOrientation(HORIZONTAL);
 
 		ImageView subscribed = new ImageView(ctx);
-		subscribed.setPadding(5, 5, 5, 5);
+		subscribed.setPadding(pad, pad, pad, pad);
 		subscribed.setImageResource(R.drawable.navigation_accept);
 		if(!s.isSubscribed()) subscribed.setVisibility(INVISIBLE);
 		layout.addView(subscribed);
@@ -79,13 +83,13 @@ class ManageGroupsAdapter extends BaseAdapter {
 		TextView name = new TextView(ctx);
 		name.setTextSize(18);
 		name.setMaxLines(1);
-		name.setPadding(0, 10, 10, 10);
+		name.setPadding(0, pad, pad, pad);
 		name.setText(s.getGroup().getName());
 		innerLayout.addView(name);
 
 		TextView status = new TextView(ctx);
 		status.setTextSize(14);
-		status.setPadding(0, 0, 10, 10);
+		status.setPadding(0, 0, pad, pad);
 		if(s.isSubscribed()) {
 			if(s.isVisibleToAll()) status.setText(R.string.subscribed_all);
 			else status.setText(R.string.subscribed_some);
diff --git a/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java b/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java
index 00910319f1ccba48ffa025e847d17147f92fa8b7..6284aab7283ae9d7082c683b03dadb12eaf3d446 100644
--- a/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/ReadGroupPostActivity.java
@@ -19,7 +19,8 @@ import javax.inject.Inject;
 
 import org.briarproject.R;
 import org.briarproject.android.util.HorizontalBorder;
-import org.briarproject.android.util.HorizontalSpace;
+import org.briarproject.android.util.ElasticHorizontalSpace;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.android.DatabaseUiExecutor;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
@@ -27,6 +28,7 @@ import org.briarproject.api.db.NoSuchMessageException;
 import org.briarproject.api.lifecycle.LifecycleManager;
 import org.briarproject.api.messaging.GroupId;
 import org.briarproject.api.messaging.MessageId;
+
 import roboguice.activity.RoboActivity;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -107,12 +109,14 @@ implements OnClickListener {
 		header.setOrientation(HORIZONTAL);
 		header.setGravity(CENTER_VERTICAL);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		TextView name = new TextView(this);
 		// Give me all the unused width
 		name.setLayoutParams(WRAP_WRAP_1);
 		name.setTextSize(18);
 		name.setMaxLines(1);
-		name.setPadding(10, 10, 10, 10);
+		name.setPadding(pad, pad, pad, pad);
 		if(authorName == null) {
 			name.setTextColor(res.getColor(R.color.anonymous_author));
 			name.setText(R.string.anonymous);
@@ -123,7 +127,7 @@ implements OnClickListener {
 
 		TextView date = new TextView(this);
 		date.setTextSize(14);
-		date.setPadding(0, 10, 10, 10);
+		date.setPadding(0, pad, pad, pad);
 		long now = System.currentTimeMillis();
 		date.setText(DateUtils.formatSameDayTime(timestamp, now, SHORT, SHORT));
 		header.addView(date);
@@ -132,7 +136,7 @@ implements OnClickListener {
 		if(contentType.equals("text/plain")) {
 			// Load and display the message body
 			content = new TextView(this);
-			content.setPadding(10, 0, 10, 10);
+			content.setPadding(pad, 0, pad, pad);
 			message.addView(content);
 			loadMessageBody();
 		}
@@ -152,21 +156,21 @@ implements OnClickListener {
 		else readButton.setImageResource(R.drawable.content_read);
 		readButton.setOnClickListener(this);
 		footer.addView(readButton);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 
 		prevButton = new ImageButton(this);
 		prevButton.setBackgroundResource(0);
 		prevButton.setImageResource(R.drawable.navigation_previous_item);
 		prevButton.setOnClickListener(this);
 		footer.addView(prevButton);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 
 		nextButton = new ImageButton(this);
 		nextButton.setBackgroundResource(0);
 		nextButton.setImageResource(R.drawable.navigation_next_item);
 		nextButton.setOnClickListener(this);
 		footer.addView(nextButton);
-		footer.addView(new HorizontalSpace(this));
+		footer.addView(new ElasticHorizontalSpace(this));
 
 		replyButton = new ImageButton(this);
 		replyButton.setBackgroundResource(0);
diff --git a/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java b/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
index 47d6a701aae9da99a0e0ba3eeb4b130b96546f69..b46e488a3670267a187ef7849cc09d037680fca8 100644
--- a/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
+++ b/briar-android/src/org/briarproject/android/groups/WriteGroupPostActivity.java
@@ -24,7 +24,8 @@ import org.briarproject.android.identity.CreateIdentityActivity;
 import org.briarproject.android.identity.LocalAuthorItem;
 import org.briarproject.android.identity.LocalAuthorItemComparator;
 import org.briarproject.android.identity.LocalAuthorSpinnerAdapter;
-import org.briarproject.android.util.HorizontalSpace;
+import org.briarproject.android.util.ElasticHorizontalSpace;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.AuthorId;
 import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.android.DatabaseUiExecutor;
@@ -40,6 +41,7 @@ import org.briarproject.api.messaging.GroupId;
 import org.briarproject.api.messaging.Message;
 import org.briarproject.api.messaging.MessageFactory;
 import org.briarproject.api.messaging.MessageId;
+
 import roboguice.activity.RoboActivity;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -109,9 +111,11 @@ implements OnItemSelectedListener, OnClickListener {
 		header.setOrientation(HORIZONTAL);
 		header.setGravity(CENTER_VERTICAL);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		TextView from = new TextView(this);
 		from.setTextSize(18);
-		from.setPadding(10, 10, 0, 10);
+		from.setPadding(pad, pad, 0, pad);
 		from.setText(R.string.from);
 		header.addView(from);
 
@@ -121,7 +125,7 @@ implements OnItemSelectedListener, OnClickListener {
 		spinner.setOnItemSelectedListener(this);
 		header.addView(spinner);
 
-		header.addView(new HorizontalSpace(this));
+		header.addView(new ElasticHorizontalSpace(this));
 
 		sendButton = new ImageButton(this);
 		sendButton.setBackgroundResource(0);
@@ -133,7 +137,7 @@ implements OnItemSelectedListener, OnClickListener {
 
 		to = new TextView(this);
 		to.setTextSize(18);
-		to.setPadding(10, 0, 10, 10);
+		to.setPadding(pad, 0, pad, pad);
 		to.setText(R.string.to);
 		layout.addView(to);
 
diff --git a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
index d2f48d9fbc25a5ea4d3477382d06e9338242cc50..2ae410790d41b6fbbb833b9379ac2897068ef6eb 100644
--- a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
+++ b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
@@ -19,6 +19,7 @@ import java.util.logging.Logger;
 import javax.inject.Inject;
 
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.api.AuthorFactory;
 import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.android.DatabaseUiExecutor;
@@ -28,6 +29,7 @@ import org.briarproject.api.crypto.KeyPair;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.lifecycle.LifecycleManager;
+
 import roboguice.activity.RoboActivity;
 import android.os.Bundle;
 import android.view.KeyEvent;
@@ -67,10 +69,12 @@ implements OnEditorActionListener, OnClickListener {
 		layout.setOrientation(VERTICAL);
 		layout.setGravity(CENTER_HORIZONTAL);
 
+		int pad = LayoutUtils.getPadding(this);
+
 		TextView chooseNickname = new TextView(this);
 		chooseNickname.setGravity(CENTER);
 		chooseNickname.setTextSize(18);
-		chooseNickname.setPadding(10, 10, 10, 0);
+		chooseNickname.setPadding(pad, pad, pad, 0);
 		chooseNickname.setText(R.string.choose_nickname);
 		layout.addView(chooseNickname);
 
diff --git a/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java b/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java
index 186999fc0c439a6c8fcb607cea4fd121d5999ddc..09f535c6294a8e59affb7476f31c828e800c56e4 100644
--- a/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java
+++ b/briar-android/src/org/briarproject/android/identity/LocalAuthorSpinnerAdapter.java
@@ -68,6 +68,7 @@ implements SpinnerAdapter {
 		name.setTextSize(18);
 		name.setMaxLines(1);
 		Resources res = ctx.getResources();
+		// FIXME: Use LayoutUtils.getPadding() here?
 		int pad = res.getInteger(R.integer.spinner_padding);
 		name.setPadding(pad, pad, pad, pad);
 		LocalAuthorItem item = getItem(position);
diff --git a/briar-android/src/org/briarproject/android/invitation/AddContactView.java b/briar-android/src/org/briarproject/android/invitation/AddContactView.java
index 5fdcb3059c4e9522f3c5ad6e428b6a821b11eec2..bd5cd38115180e62e82c4d3624638644c412ffd9 100644
--- a/briar-android/src/org/briarproject/android/invitation/AddContactView.java
+++ b/briar-android/src/org/briarproject/android/invitation/AddContactView.java
@@ -2,15 +2,21 @@ package org.briarproject.android.invitation;
 
 import static android.view.Gravity.CENTER_HORIZONTAL;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
+
+import org.briarproject.android.util.LayoutUtils;
+
 import android.content.Context;
 import android.widget.LinearLayout;
 
 abstract class AddContactView extends LinearLayout {
 
+	protected final int pad;
+
 	protected AddContactActivity container = null;
 
 	AddContactView(Context ctx) {
 		super(ctx);
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	void init(AddContactActivity container) {
diff --git a/briar-android/src/org/briarproject/android/invitation/BluetoothStatusView.java b/briar-android/src/org/briarproject/android/invitation/BluetoothStatusView.java
index 28ecd6e1da39ce542b1b25a7c2bc6cb13277491e..a91110e5eaa7964535944901bf27c5ae225f84e2 100644
--- a/briar-android/src/org/briarproject/android/invitation/BluetoothStatusView.java
+++ b/briar-android/src/org/briarproject/android/invitation/BluetoothStatusView.java
@@ -4,7 +4,10 @@ import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERA
 import static android.provider.Settings.ACTION_BLUETOOTH_SETTINGS;
 import static android.view.Gravity.CENTER;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
+
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+
 import android.bluetooth.BluetoothAdapter;
 import android.content.Context;
 import android.content.Intent;
@@ -17,8 +20,11 @@ import android.widget.TextView;
 
 class BluetoothStatusView extends LinearLayout implements OnClickListener {
 
+	private final int pad;
+
 	public BluetoothStatusView(Context ctx) {
 		super(ctx);
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	void init() {
@@ -33,18 +39,18 @@ class BluetoothStatusView extends LinearLayout implements OnClickListener {
 		TextView status = new TextView(ctx);
 		status.setLayoutParams(WRAP_WRAP_1);
 		status.setTextSize(14);
-		status.setPadding(10, 10, 10, 10);
+		status.setPadding(pad, pad, pad, pad);
 		BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
 		if(adapter == null) {
 			ImageView warning = new ImageView(ctx);
-			warning.setPadding(5, 5, 5, 5);
+			warning.setPadding(pad, pad, pad, pad);
 			warning.setImageResource(R.drawable.alerts_and_states_warning);
 			addView(warning);
 			status.setText(R.string.bluetooth_not_available);
 			addView(status);
 		} else if(adapter.getScanMode() == SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
 			ImageView ok = new ImageView(ctx);
-			ok.setPadding(5, 5, 5, 5);
+			ok.setPadding(pad, pad, pad, pad);
 			ok.setImageResource(R.drawable.navigation_accept);
 			addView(ok);
 			status.setText(R.string.bluetooth_discoverable);
@@ -55,7 +61,7 @@ class BluetoothStatusView extends LinearLayout implements OnClickListener {
 			addView(settings);
 		} else if(adapter.isEnabled()) {
 			ImageView warning = new ImageView(ctx);
-			warning.setPadding(5, 5, 5, 5);
+			warning.setPadding(pad, pad, pad, pad);
 			warning.setImageResource(R.drawable.alerts_and_states_warning);
 			addView(warning);
 			status.setText(R.string.bluetooth_not_discoverable);
@@ -66,7 +72,7 @@ class BluetoothStatusView extends LinearLayout implements OnClickListener {
 			addView(settings);
 		} else {
 			ImageView warning = new ImageView(ctx);
-			warning.setPadding(5, 5, 5, 5);
+			warning.setPadding(pad, pad, pad, pad);
 			warning.setImageResource(R.drawable.alerts_and_states_warning);
 			addView(warning);
 			status.setText(R.string.bluetooth_disabled);
diff --git a/briar-android/src/org/briarproject/android/invitation/CodeEntryView.java b/briar-android/src/org/briarproject/android/invitation/CodeEntryView.java
index 26f28c6101414846829e16056b52d278866e987e..6b330a0f41f59576497bdb10363b15a328db5c88 100644
--- a/briar-android/src/org/briarproject/android/invitation/CodeEntryView.java
+++ b/briar-android/src/org/briarproject/android/invitation/CodeEntryView.java
@@ -6,7 +6,10 @@ import static android.view.Gravity.CENTER;
 import static android.view.Gravity.CENTER_HORIZONTAL;
 import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
+
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+
 import android.content.Context;
 import android.view.KeyEvent;
 import android.view.View;
@@ -21,12 +24,15 @@ import android.widget.TextView.OnEditorActionListener;
 class CodeEntryView extends LinearLayout
 implements OnEditorActionListener, OnClickListener {
 
+	private final int pad;
+
 	private CodeEntryListener listener = null;
 	private EditText codeEntry = null;
 	private Button continueButton = null;
 
 	public CodeEntryView(Context ctx) {
 		super(ctx);
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	void init(CodeEntryListener listener, String prompt) {
@@ -38,7 +44,7 @@ implements OnEditorActionListener, OnClickListener {
 		TextView enterCode = new TextView(ctx);
 		enterCode.setGravity(CENTER_HORIZONTAL);
 		enterCode.setTextSize(14);
-		enterCode.setPadding(10, 10, 10, 0);
+		enterCode.setPadding(pad, pad, pad, 0);
 		enterCode.setText(prompt);
 		addView(enterCode);
 
diff --git a/briar-android/src/org/briarproject/android/invitation/CodesDoNotMatchView.java b/briar-android/src/org/briarproject/android/invitation/CodesDoNotMatchView.java
index c6399dd91677fa52bd8a80342b1df83d5e906d82..c62aa974791b7f5818f086bb94f22e8e659ad0a8 100644
--- a/briar-android/src/org/briarproject/android/invitation/CodesDoNotMatchView.java
+++ b/briar-android/src/org/briarproject/android/invitation/CodesDoNotMatchView.java
@@ -2,7 +2,9 @@ package org.briarproject.android.invitation;
 
 import static android.view.Gravity.CENTER;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
+
 import org.briarproject.R;
+
 import android.content.Context;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -30,14 +32,14 @@ class CodesDoNotMatchView extends AddContactView implements OnClickListener {
 
 		TextView failed = new TextView(ctx);
 		failed.setTextSize(22);
-		failed.setPadding(10, 10, 10, 10);
+		failed.setPadding(pad, pad, pad, pad);
 		failed.setText(R.string.codes_do_not_match);
 		innerLayout.addView(failed);
 		addView(innerLayout);
 
 		TextView interfering = new TextView(ctx);
 		interfering.setTextSize(14);
-		interfering.setPadding(10, 0, 10, 10);
+		interfering.setPadding(pad, 0, pad, pad);
 		interfering.setText(R.string.interfering);
 		addView(interfering);
 
diff --git a/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java b/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java
index 78b886cfc0c0c9bba35683013578cdf1a0c9a95f..b19ba409c64cfa4fbdcd968e8a5d618323069492 100644
--- a/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ConfirmationCodeView.java
@@ -2,7 +2,9 @@ package org.briarproject.android.invitation;
 
 import static android.view.Gravity.CENTER;
 import static android.view.Gravity.CENTER_HORIZONTAL;
+
 import org.briarproject.R;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.widget.ImageView;
@@ -28,7 +30,7 @@ class ConfirmationCodeView extends AddContactView implements CodeEntryListener {
 
 		TextView connected = new TextView(ctx);
 		connected.setTextSize(22);
-		connected.setPadding(10, 10, 10, 10);
+		connected.setPadding(pad, pad, pad, pad);
 		connected.setText(R.string.connected_to_contact);
 		innerLayout.addView(connected);
 		addView(innerLayout);
@@ -36,14 +38,14 @@ class ConfirmationCodeView extends AddContactView implements CodeEntryListener {
 		TextView yourCode = new TextView(ctx);
 		yourCode.setGravity(CENTER_HORIZONTAL);
 		yourCode.setTextSize(14);
-		yourCode.setPadding(10, 10, 10, 10);
+		yourCode.setPadding(pad, pad, pad, pad);
 		yourCode.setText(R.string.your_confirmation_code);
 		addView(yourCode);
 
 		TextView code = new TextView(ctx);
 		code.setGravity(CENTER_HORIZONTAL);
 		code.setTextSize(50);
-		code.setPadding(10, 0, 10, 10);
+		code.setPadding(pad, 0, pad, pad);
 		int localCode = container.getLocalConfirmationCode();
 		code.setText(String.format("%06d", localCode));
 		addView(code);
diff --git a/briar-android/src/org/briarproject/android/invitation/ConnectedView.java b/briar-android/src/org/briarproject/android/invitation/ConnectedView.java
index c31452002b62d148c26ea9bf6a0e635c9d85d58c..d91b7ca410262260814dd6e09b12490f4a00d2cb 100644
--- a/briar-android/src/org/briarproject/android/invitation/ConnectedView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ConnectedView.java
@@ -27,7 +27,7 @@ class ConnectedView extends AddContactView {
 
 		TextView connected = new TextView(ctx);
 		connected.setTextSize(22);
-		connected.setPadding(10, 10, 10, 10);
+		connected.setPadding(pad, pad, pad, pad);
 		connected.setText(R.string.connected_to_contact);
 		innerLayout.addView(connected);
 		addView(innerLayout);
@@ -38,7 +38,7 @@ class ConnectedView extends AddContactView {
 
 		ProgressBar progress = new ProgressBar(ctx);
 		progress.setIndeterminate(true);
-		progress.setPadding(10, 10, 10, 10);
+		progress.setPadding(pad, pad, pad, pad);
 		innerLayout.addView(progress);
 
 		TextView connecting = new TextView(ctx);
diff --git a/briar-android/src/org/briarproject/android/invitation/ConnectionFailedView.java b/briar-android/src/org/briarproject/android/invitation/ConnectionFailedView.java
index dc3efb8e2f029c8b5900b55d0ff6dca102fa65b5..768ca91bf72f6a8a62071798d379b7c9b4470abf 100644
--- a/briar-android/src/org/briarproject/android/invitation/ConnectionFailedView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ConnectionFailedView.java
@@ -2,7 +2,9 @@ package org.briarproject.android.invitation;
 
 import static android.view.Gravity.CENTER;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
+
 import org.briarproject.R;
+
 import android.content.Context;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -34,14 +36,14 @@ class ConnectionFailedView extends AddContactView implements OnClickListener {
 
 		TextView failed = new TextView(ctx);
 		failed.setTextSize(22);
-		failed.setPadding(10, 10, 10, 10);
+		failed.setPadding(pad, pad, pad, pad);
 		failed.setText(R.string.connection_failed);
 		innerLayout.addView(failed);
 		addView(innerLayout);
 
 		TextView checkNetwork = new TextView(ctx);
 		checkNetwork.setTextSize(14);
-		checkNetwork.setPadding(10, 0, 10, 10);
+		checkNetwork.setPadding(pad, 0, pad, pad);
 		checkNetwork.setText(R.string.check_same_network);
 		addView(checkNetwork);
 
diff --git a/briar-android/src/org/briarproject/android/invitation/ConnectionView.java b/briar-android/src/org/briarproject/android/invitation/ConnectionView.java
index 7dae72eef45180a1460387caa7016c47d5eb61f9..0762f200b1118caa14c6c415ea99a4a46997a93d 100644
--- a/briar-android/src/org/briarproject/android/invitation/ConnectionView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ConnectionView.java
@@ -2,7 +2,9 @@ package org.briarproject.android.invitation;
 
 import static android.view.Gravity.CENTER;
 import static android.view.Gravity.CENTER_HORIZONTAL;
+
 import org.briarproject.R;
+
 import android.content.Context;
 import android.widget.LinearLayout;
 import android.widget.ProgressBar;
@@ -20,14 +22,14 @@ class ConnectionView extends AddContactView {
 		TextView yourCode = new TextView(ctx);
 		yourCode.setGravity(CENTER_HORIZONTAL);
 		yourCode.setTextSize(14);
-		yourCode.setPadding(10, 10, 10, 10);
+		yourCode.setPadding(pad, pad, pad, pad);
 		yourCode.setText(R.string.your_invitation_code);
 		addView(yourCode);
 
 		TextView code = new TextView(ctx);
 		code.setGravity(CENTER_HORIZONTAL);
 		code.setTextSize(50);
-		code.setPadding(10, 0, 10, 10);
+		code.setPadding(pad, 0, pad, pad);
 		int localCode = container.getLocalInvitationCode();
 		code.setText(String.format("%06d", localCode));
 		addView(code);
@@ -40,7 +42,7 @@ class ConnectionView extends AddContactView {
 
 			ProgressBar progress = new ProgressBar(ctx);
 			progress.setIndeterminate(true);
-			progress.setPadding(10, 10, 10, 10);
+			progress.setPadding(pad, pad, pad, pad);
 			innerLayout.addView(progress);
 
 			TextView connecting = new TextView(ctx);
@@ -58,7 +60,7 @@ class ConnectionView extends AddContactView {
 			innerLayout.setGravity(CENTER);
 
 			ProgressBar progress = new ProgressBar(ctx);
-			progress.setPadding(10, 10, 10, 10);
+			progress.setPadding(pad, pad, pad, pad);
 			progress.setIndeterminate(true);
 			innerLayout.addView(progress);
 
diff --git a/briar-android/src/org/briarproject/android/invitation/ContactDetailsView.java b/briar-android/src/org/briarproject/android/invitation/ContactDetailsView.java
index f9616697609c08833bc77c6c944d841b56a2c249..0a0da9a402836d80b5a62c4c97bbf3b390470d4f 100644
--- a/briar-android/src/org/briarproject/android/invitation/ContactDetailsView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ContactDetailsView.java
@@ -28,7 +28,7 @@ class ContactDetailsView extends AddContactView {
 
 		TextView connected = new TextView(ctx);
 		connected.setTextSize(22);
-		connected.setPadding(10, 10, 10, 10);
+		connected.setPadding(pad, pad, pad, pad);
 		connected.setText(R.string.connected_to_contact);
 		innerLayout.addView(connected);
 		addView(innerLayout);
@@ -36,14 +36,14 @@ class ContactDetailsView extends AddContactView {
 		TextView yourCode = new TextView(ctx);
 		yourCode.setGravity(CENTER_HORIZONTAL);
 		yourCode.setTextSize(14);
-		yourCode.setPadding(10, 0, 10, 10);
+		yourCode.setPadding(pad, 0, pad, pad);
 		yourCode.setText(R.string.your_confirmation_code);
 		addView(yourCode);
 
 		TextView code = new TextView(ctx);
 		code.setGravity(CENTER_HORIZONTAL);
 		code.setTextSize(50);
-		code.setPadding(10, 0, 10, 10);
+		code.setPadding(pad, 0, pad, pad);
 		int localCode = container.getLocalConfirmationCode();
 		code.setText(String.format("%06d", localCode));
 		addView(code);
@@ -54,7 +54,7 @@ class ContactDetailsView extends AddContactView {
 
 		ProgressBar progress = new ProgressBar(ctx);
 		progress.setIndeterminate(true);
-		progress.setPadding(10, 10, 10, 10);
+		progress.setPadding(pad, pad, pad, pad);
 		innerLayout.addView(progress);
 
 		TextView connecting = new TextView(ctx);
diff --git a/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java b/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java
index fba3a0c8c06248139658c50554537b4a097d626a..795eb529d85d620c84048b281ff4654a0ee02b56 100644
--- a/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java
+++ b/briar-android/src/org/briarproject/android/invitation/InvitationCodeView.java
@@ -18,14 +18,14 @@ class InvitationCodeView extends AddContactView implements CodeEntryListener {
 		TextView yourCode = new TextView(ctx);
 		yourCode.setGravity(CENTER_HORIZONTAL);
 		yourCode.setTextSize(14);
-		yourCode.setPadding(10, 10, 10, 10);
+		yourCode.setPadding(pad, pad, pad, pad);
 		yourCode.setText(R.string.your_invitation_code);
 		addView(yourCode);
 
 		TextView code = new TextView(ctx);
 		code.setGravity(CENTER_HORIZONTAL);
 		code.setTextSize(50);
-		code.setPadding(10, 0, 10, 10);
+		code.setPadding(pad, 0, pad, pad);
 		int localCode = container.getLocalInvitationCode();
 		code.setText(String.format("%06d", localCode));
 		addView(code);
diff --git a/briar-android/src/org/briarproject/android/invitation/NetworkSetupView.java b/briar-android/src/org/briarproject/android/invitation/NetworkSetupView.java
index 0e4ecde983836590d85936c48a9a83f50a0719f1..9fc38961bf38b98d6daaf492720e479d1d45f6d6 100644
--- a/briar-android/src/org/briarproject/android/invitation/NetworkSetupView.java
+++ b/briar-android/src/org/briarproject/android/invitation/NetworkSetupView.java
@@ -44,7 +44,7 @@ implements OnItemSelectedListener, OnClickListener {
 
 		TextView yourNickname = new TextView(ctx);
 		yourNickname.setTextSize(18);
-		yourNickname.setPadding(10, 10, 10, 10);
+		yourNickname.setPadding(pad, pad, pad, pad);
 		yourNickname.setText(R.string.your_nickname);
 		innerLayout.addView(yourNickname);
 
@@ -67,7 +67,7 @@ implements OnItemSelectedListener, OnClickListener {
 		TextView faceToFace = new TextView(ctx);
 		faceToFace.setGravity(CENTER);
 		faceToFace.setTextSize(14);
-		faceToFace.setPadding(10, 10, 10, 10);
+		faceToFace.setPadding(pad, pad, pad, pad);
 		faceToFace.setText(R.string.fact_to_face);
 		addView(faceToFace);
 
diff --git a/briar-android/src/org/briarproject/android/invitation/WaitForContactView.java b/briar-android/src/org/briarproject/android/invitation/WaitForContactView.java
index bcf5cc23340db1f92a289b7cecdad68f5a8c28ed..625c4576cd91a73832e978fb104a00118ed13021 100644
--- a/briar-android/src/org/briarproject/android/invitation/WaitForContactView.java
+++ b/briar-android/src/org/briarproject/android/invitation/WaitForContactView.java
@@ -28,7 +28,7 @@ class WaitForContactView extends AddContactView {
 
 		TextView connected = new TextView(ctx);
 		connected.setTextSize(22);
-		connected.setPadding(10, 10, 10, 10);
+		connected.setPadding(pad, pad, pad, pad);
 		connected.setText(R.string.connected_to_contact);
 		innerLayout.addView(connected);
 		addView(innerLayout);
@@ -36,14 +36,14 @@ class WaitForContactView extends AddContactView {
 		TextView yourCode = new TextView(ctx);
 		yourCode.setGravity(CENTER_HORIZONTAL);
 		yourCode.setTextSize(14);
-		yourCode.setPadding(10, 0, 10, 10);
+		yourCode.setPadding(pad, 0, pad, pad);
 		yourCode.setText(R.string.your_confirmation_code);
 		addView(yourCode);
 
 		TextView code = new TextView(ctx);
 		code.setGravity(CENTER_HORIZONTAL);
 		code.setTextSize(50);
-		code.setPadding(10, 0, 10, 10);
+		code.setPadding(pad, 0, pad, pad);
 		int localCode = container.getLocalConfirmationCode();
 		code.setText(String.format("%06d", localCode));
 		addView(code);
@@ -54,7 +54,7 @@ class WaitForContactView extends AddContactView {
 
 		ProgressBar progress = new ProgressBar(ctx);
 		progress.setIndeterminate(true);
-		progress.setPadding(10, 10, 10, 10);
+		progress.setPadding(pad, pad, pad, pad);
 		innerLayout.addView(progress);
 
 		TextView connecting = new TextView(ctx);
diff --git a/briar-android/src/org/briarproject/android/invitation/WifiStatusView.java b/briar-android/src/org/briarproject/android/invitation/WifiStatusView.java
index 3d5b286afd623532890c0c64a4e1f7947ac78f71..c55f48fa0b1686d383f26471b6cebe71cf39f30b 100644
--- a/briar-android/src/org/briarproject/android/invitation/WifiStatusView.java
+++ b/briar-android/src/org/briarproject/android/invitation/WifiStatusView.java
@@ -4,7 +4,10 @@ import static android.content.Context.WIFI_SERVICE;
 import static android.provider.Settings.ACTION_WIFI_SETTINGS;
 import static android.view.Gravity.CENTER;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
+
 import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+
 import android.content.Context;
 import android.content.Intent;
 import android.net.wifi.WifiInfo;
@@ -18,8 +21,11 @@ import android.widget.TextView;
 
 class WifiStatusView extends LinearLayout implements OnClickListener {
 
+	private final int pad;
+
 	public WifiStatusView(Context ctx) {
 		super(ctx);
+		pad = LayoutUtils.getPadding(ctx);
 	}
 
 	void init() {
@@ -33,12 +39,12 @@ class WifiStatusView extends LinearLayout implements OnClickListener {
 		Context ctx = getContext();
 		TextView status = new TextView(ctx);
 		status.setTextSize(14);
-		status.setPadding(10, 10, 10, 10);
+		status.setPadding(pad, pad, pad, pad);
 		status.setLayoutParams(WRAP_WRAP_1);
 		WifiManager wifi = (WifiManager) ctx.getSystemService(WIFI_SERVICE);
 		if(wifi == null) {
 			ImageView warning = new ImageView(ctx);
-			warning.setPadding(5, 5, 5, 5);
+			warning.setPadding(pad, pad, pad, pad);
 			warning.setImageResource(R.drawable.alerts_and_states_warning);
 			addView(warning);
 			status.setText(R.string.wifi_not_available);
@@ -49,7 +55,7 @@ class WifiStatusView extends LinearLayout implements OnClickListener {
 			int networkId = info.getNetworkId();
 			if(networkName == null || networkId == -1) {
 				ImageView warning = new ImageView(ctx);
-				warning.setPadding(5, 5, 5, 5);
+				warning.setPadding(pad, pad, pad, pad);
 				warning.setImageResource(R.drawable.alerts_and_states_warning);
 				addView(warning);
 				status.setText(R.string.wifi_disconnected);
@@ -60,7 +66,7 @@ class WifiStatusView extends LinearLayout implements OnClickListener {
 				addView(settings);
 			} else {
 				ImageView ok = new ImageView(ctx);
-				ok.setPadding(5, 5, 5, 5);
+				ok.setPadding(pad, pad, pad, pad);
 				ok.setImageResource(R.drawable.navigation_accept);
 				addView(ok);
 				String format = getResources().getString(
@@ -74,7 +80,7 @@ class WifiStatusView extends LinearLayout implements OnClickListener {
 			}
 		} else {
 			ImageView warning = new ImageView(ctx);
-			warning.setPadding(5, 5, 5, 5);
+			warning.setPadding(pad, pad, pad, pad);
 			warning.setImageResource(R.drawable.alerts_and_states_warning);
 			addView(warning);
 			status.setText(R.string.wifi_disabled);
diff --git a/briar-android/src/org/briarproject/android/util/HorizontalSpace.java b/briar-android/src/org/briarproject/android/util/ElasticHorizontalSpace.java
similarity index 74%
rename from briar-android/src/org/briarproject/android/util/HorizontalSpace.java
rename to briar-android/src/org/briarproject/android/util/ElasticHorizontalSpace.java
index b04db1898f8c3472e455e91a8bc948b612127742..2a4ec2fa97e7b014652b4fec1c320d9c42901aad 100644
--- a/briar-android/src/org/briarproject/android/util/HorizontalSpace.java
+++ b/briar-android/src/org/briarproject/android/util/ElasticHorizontalSpace.java
@@ -5,9 +5,9 @@ import android.content.Context;
 import android.view.View;
 import android.widget.LinearLayout.LayoutParams;
 
-public class HorizontalSpace extends View {
+public class ElasticHorizontalSpace extends View {
 
-	public HorizontalSpace(Context ctx) {
+	public ElasticHorizontalSpace(Context ctx) {
 		super(ctx);
 		setLayoutParams(new LayoutParams(WRAP_CONTENT, 0, 1));
 	}
diff --git a/briar-android/src/org/briarproject/android/util/FixedVerticalSpace.java b/briar-android/src/org/briarproject/android/util/FixedVerticalSpace.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a3bb9ee7cfc584095821ce505a589d8c4210b66
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/util/FixedVerticalSpace.java
@@ -0,0 +1,15 @@
+package org.briarproject.android.util;
+
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+import android.content.Context;
+import android.view.View;
+import android.widget.LinearLayout.LayoutParams;
+
+public class FixedVerticalSpace extends View {
+
+	public FixedVerticalSpace(Context ctx) {
+		super(ctx);
+		int pad = LayoutUtils.getPadding(ctx);
+		setLayoutParams(new LayoutParams(WRAP_CONTENT, pad));
+	}
+}
diff --git a/briar-android/src/org/briarproject/android/util/HorizontalBorder.java b/briar-android/src/org/briarproject/android/util/HorizontalBorder.java
index 2ed3fddf103d6175955101ce4061afa40744cd0d..6911e371e0110b8296689d0de881d07771fc76a4 100644
--- a/briar-android/src/org/briarproject/android/util/HorizontalBorder.java
+++ b/briar-android/src/org/briarproject/android/util/HorizontalBorder.java
@@ -1,9 +1,10 @@
 package org.briarproject.android.util;
 
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+
 import org.briarproject.R;
+
 import android.content.Context;
-import android.content.res.Resources;
 import android.view.View;
 import android.widget.LinearLayout.LayoutParams;
 
@@ -11,8 +12,7 @@ public class HorizontalBorder extends View {
 
 	public HorizontalBorder(Context ctx) {
 		super(ctx);
-		Resources res = ctx.getResources();
-		int width = res.getInteger(R.integer.horizontal_border_width);
+		int width = LayoutUtils.getSeparatorWidth(ctx);
 		setLayoutParams(new LayoutParams(MATCH_PARENT, width));
 		setBackgroundColor(getResources().getColor(R.color.horizontal_border));
 	}
diff --git a/briar-android/src/org/briarproject/android/util/LayoutUtils.java b/briar-android/src/org/briarproject/android/util/LayoutUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a14c9807e99362febe36e99bad62a50ca4f9171
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/util/LayoutUtils.java
@@ -0,0 +1,24 @@
+package org.briarproject.android.util;
+
+import static android.content.Context.WINDOW_SERVICE;
+import android.content.Context;
+import android.util.DisplayMetrics;
+import android.view.WindowManager;
+
+public class LayoutUtils {
+
+	public static int getSeparatorWidth(Context ctx) {
+		return Math.max(2, getMaxDisplayDimension(ctx) / 100 - 6);
+	}
+
+	public static int getPadding(Context ctx) {
+		return getMaxDisplayDimension(ctx) / 100 + 7;
+	}
+
+	private static int getMaxDisplayDimension(Context ctx) {
+		DisplayMetrics metrics = new DisplayMetrics();
+		WindowManager wm = (WindowManager) ctx.getSystemService(WINDOW_SERVICE);
+		wm.getDefaultDisplay().getMetrics(metrics);
+		return Math.max(metrics.widthPixels, metrics.heightPixels);
+	}
+}