diff --git a/briar-android/src/org/briarproject/android/CrashReportActivity.java b/briar-android/src/org/briarproject/android/CrashReportActivity.java
index 539591cb7ce94be77aa5f3a077deb5f76fc0c209..a2b8b2ac9aa1f44905f338f20d6be2d52ed2fe0d 100644
--- a/briar-android/src/org/briarproject/android/CrashReportActivity.java
+++ b/briar-android/src/org/briarproject/android/CrashReportActivity.java
@@ -45,7 +45,6 @@ import org.briarproject.android.util.LayoutUtils;
 import org.briarproject.android.util.ListLoadingProgressBar;
 import org.briarproject.api.android.AndroidExecutor;
 import org.briarproject.api.system.FileUtils;
-import org.briarproject.system.AndroidFileUtils;
 import org.briarproject.util.StringUtils;
 
 import android.annotation.SuppressLint;
@@ -71,12 +70,14 @@ import android.widget.LinearLayout;
 import android.widget.ScrollView;
 import android.widget.TextView;
 
+import javax.inject.Inject;
+
 public class CrashReportActivity extends Activity implements OnClickListener {
 
 	private static final Logger LOG =
 			Logger.getLogger(CrashReportActivity.class.getName());
 
-	private final FileUtils fileUtils = new AndroidFileUtils();
+	@Inject private FileUtils fileUtils;
 	private final AndroidExecutor androidExecutor = new AndroidExecutorImpl();
 
 	private ScrollView scroll = null;
diff --git a/briar-android/src/org/briarproject/android/PasswordActivity.java b/briar-android/src/org/briarproject/android/PasswordActivity.java
index 3d5ecd5e16057319a4f5b1fc32967976ad91b529..383fa88b89dfcb709c62b3bcdfcae2041fe4bee0 100644
--- a/briar-android/src/org/briarproject/android/PasswordActivity.java
+++ b/briar-android/src/org/briarproject/android/PasswordActivity.java
@@ -12,7 +12,7 @@ import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.CryptoExecutor;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.system.AndroidFileUtils;
+import org.briarproject.api.system.FileUtils;
 import org.briarproject.util.StringUtils;
 
 import android.app.AlertDialog;
@@ -41,6 +41,7 @@ public class PasswordActivity extends BaseActivity {
 	// Fields that are accessed from background threads must be volatile
 	@Inject private volatile CryptoComponent crypto;
 	@Inject private volatile DatabaseConfig databaseConfig;
+	@Inject private FileUtils fileUtils;
 
 	@Override
 	public void onCreate(Bundle state) {
@@ -72,7 +73,7 @@ public class PasswordActivity extends BaseActivity {
 	@Override
 	protected void clearDbPrefs() {
 		super.clearDbPrefs();
-		AndroidFileUtils.deleteFileOrDir(databaseConfig.getDatabaseDirectory());
+		fileUtils.deleteFileOrDir(databaseConfig.getDatabaseDirectory());
 		gotoAndFinish(SetupActivity.class, RESULT_CANCELED);
 	}
 
diff --git a/briar-android/src/org/briarproject/system/AndroidFileUtils.java b/briar-android/src/org/briarproject/system/AndroidFileUtils.java
deleted file mode 100644
index 3a5dfa3529916954781e1b92db2f613c0cd6f242..0000000000000000000000000000000000000000
--- a/briar-android/src/org/briarproject/system/AndroidFileUtils.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.briarproject.system;
-
-import org.briarproject.api.system.FileUtils;
-
-import java.io.File;
-import java.io.IOException;
-
-public class AndroidFileUtils implements FileUtils {
-
-	public long getTotalSpace(File f) throws IOException {
-		return f.getTotalSpace();
-	}
-
-	public long getFreeSpace(File f) throws IOException {
-		return f.getUsableSpace();
-	}
-
-	public static void deleteFileOrDir(File f) {
-		if (f.isFile())
-			f.delete();
-		else if (f.isDirectory())
-			for (File child : f.listFiles())
-				deleteFileOrDir(child);
-	}
-}
diff --git a/briar-android/src/org/briarproject/system/AndroidSystemModule.java b/briar-android/src/org/briarproject/system/AndroidSystemModule.java
index aa6769e59bf8bcf53723af9494985d1f38e36c6c..03fd56dcc49a23bb9d86b79f3f5f79b1120ad235 100644
--- a/briar-android/src/org/briarproject/system/AndroidSystemModule.java
+++ b/briar-android/src/org/briarproject/system/AndroidSystemModule.java
@@ -14,7 +14,7 @@ public class AndroidSystemModule extends AbstractModule {
 		bind(Clock.class).to(SystemClock.class);
 		bind(Timer.class).to(SystemTimer.class);
 		bind(SeedProvider.class).to(AndroidSeedProvider.class);
-		bind(FileUtils.class).to(AndroidFileUtils.class);
+		bind(FileUtils.class).to(FileUtilsImpl.class);
 		bind(LocationUtils.class).to(AndroidLocationUtils.class);
 	}
 }
diff --git a/briar-api/src/org/briarproject/api/system/FileUtils.java b/briar-api/src/org/briarproject/api/system/FileUtils.java
index bde3960497f99d34458af49043e0968f634200e7..baf68ca0140b7b5654a6243212a7d867270d9331 100644
--- a/briar-api/src/org/briarproject/api/system/FileUtils.java
+++ b/briar-api/src/org/briarproject/api/system/FileUtils.java
@@ -8,4 +8,6 @@ public interface FileUtils {
 	long getTotalSpace(File f) throws IOException;
 
 	long getFreeSpace(File f) throws IOException;
+
+	void deleteFileOrDir(File f);
 }
diff --git a/briar-core/src/org/briarproject/system/FileUtilsImpl.java b/briar-core/src/org/briarproject/system/FileUtilsImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..923f35c9a159bc25e5cf98a8b996710664338fe1
--- /dev/null
+++ b/briar-core/src/org/briarproject/system/FileUtilsImpl.java
@@ -0,0 +1,25 @@
+package org.briarproject.system;
+
+import org.briarproject.api.system.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+
+public class FileUtilsImpl implements FileUtils {
+
+    public long getTotalSpace(File f) throws IOException {
+        return f.getTotalSpace(); // Requires Java 1.6
+    }
+
+    public long getFreeSpace(File f) throws IOException {
+        return f.getUsableSpace(); // Requires Java 1.6
+    }
+
+    public void deleteFileOrDir(File f) {
+        if (f.isFile())
+            f.delete();
+        else if (f.isDirectory())
+            for (File child : f.listFiles())
+                deleteFileOrDir(child);
+    }
+}
diff --git a/briar-desktop/src/org/briarproject/system/DesktopFileUtils.java b/briar-desktop/src/org/briarproject/system/DesktopFileUtils.java
deleted file mode 100644
index c397068646923d52f59a3d912ca2fd5dd0873f72..0000000000000000000000000000000000000000
--- a/briar-desktop/src/org/briarproject/system/DesktopFileUtils.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.briarproject.system;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.briarproject.api.system.FileUtils;
-
-class DesktopFileUtils implements FileUtils {
-
-	public long getTotalSpace(File f) throws IOException {
-		return f.getTotalSpace(); // Requires Java 1.6
-	}
-
-	public long getFreeSpace(File f) throws IOException {
-		return f.getUsableSpace(); // Requires Java 1.6
-	}
-}
diff --git a/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java b/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java
index e6286d17d2019c4b25c6ffe582cc2438c6547857..e605fe95079c3bfe6b75d71cea214d42b8efba6b 100644
--- a/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java
+++ b/briar-desktop/src/org/briarproject/system/DesktopSystemModule.java
@@ -15,6 +15,6 @@ public class DesktopSystemModule extends AbstractModule {
 		bind(Timer.class).to(SystemTimer.class);
 		if (OsUtils.isLinux())
 			bind(SeedProvider.class).to(LinuxSeedProvider.class);
-		bind(FileUtils.class).to(DesktopFileUtils.class);
+		bind(FileUtils.class).to(FileUtilsImpl.class);
 	}
 }
diff --git a/briar-tests/src/org/briarproject/TestDatabaseModule.java b/briar-tests/src/org/briarproject/TestDatabaseModule.java
index 8cff99d56fae768c35997f2a29139ce5aeb612a7..5e5128eca5789e02300ef0071fd132f9209a4f0c 100644
--- a/briar-tests/src/org/briarproject/TestDatabaseModule.java
+++ b/briar-tests/src/org/briarproject/TestDatabaseModule.java
@@ -4,6 +4,7 @@ import java.io.File;
 
 import org.briarproject.api.db.DatabaseConfig;
 import org.briarproject.api.system.FileUtils;
+import org.briarproject.system.FileUtilsImpl;
 
 import com.google.inject.AbstractModule;
 
@@ -25,6 +26,6 @@ public class TestDatabaseModule extends AbstractModule {
 
 	protected void configure() {
 		bind(DatabaseConfig.class).toInstance(config);
-		bind(FileUtils.class).to(TestFileUtils.class);
+		bind(FileUtils.class).to(FileUtilsImpl.class);
 	}
 }
diff --git a/briar-tests/src/org/briarproject/TestFileUtils.java b/briar-tests/src/org/briarproject/TestFileUtils.java
deleted file mode 100644
index e81b16bde39acfd65947f69382228d4652466494..0000000000000000000000000000000000000000
--- a/briar-tests/src/org/briarproject/TestFileUtils.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.briarproject;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.briarproject.api.system.FileUtils;
-
-public class TestFileUtils implements FileUtils {
-
-	public long getTotalSpace(File f) throws IOException {
-		return f.getTotalSpace(); // Requires Java 1.6
-	}
-
-	public long getFreeSpace(File f) throws IOException {
-		return f.getUsableSpace(); // Requires Java 1.6
-	}
-}
diff --git a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
index ec21e4c6c0fc719b5b487d26b8dfe48dd9a3dddc..ce0ac374e25c9ec0f82f2c3563d89c602547b6b1 100644
--- a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
+++ b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
@@ -21,7 +21,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.briarproject.BriarTestCase;
 import org.briarproject.TestDatabaseConfig;
-import org.briarproject.TestFileUtils;
 import org.briarproject.TestMessage;
 import org.briarproject.TestUtils;
 import org.briarproject.api.Author;
@@ -39,6 +38,7 @@ import org.briarproject.api.messaging.Message;
 import org.briarproject.api.messaging.MessageId;
 import org.briarproject.api.transport.Endpoint;
 import org.briarproject.api.transport.TemporarySecret;
+import org.briarproject.system.FileUtilsImpl;
 import org.briarproject.system.SystemClock;
 import org.junit.After;
 import org.junit.Before;
@@ -1605,7 +1605,7 @@ public class H2DatabaseTest extends BriarTestCase {
 
 	private Database<Connection> open(boolean resume) throws Exception {
 		Database<Connection> db = new H2Database(new TestDatabaseConfig(testDir,
-				MAX_SIZE), new TestFileUtils(), new SystemClock());
+				MAX_SIZE), new FileUtilsImpl(), new SystemClock());
 		if (!resume) TestUtils.deleteTestDirectory(testDir);
 		db.open();
 		return db;
diff --git a/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java b/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java
index 5ae0bbb5030235a60ebb45aa0e05fb146155a34a..a403833b6f1711cd9b3b2e27e2295b9eb08a40da 100644
--- a/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java
+++ b/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java
@@ -1,5 +1,7 @@
 package org.briarproject.plugins.file;
 
+import com.google.inject.Inject;
+
 import static org.briarproject.api.transport.TransportConstants.MIN_STREAM_LENGTH;
 
 import java.io.File;
@@ -11,7 +13,6 @@ import java.util.List;
 import java.util.concurrent.Executor;
 
 import org.briarproject.BriarTestCase;
-import org.briarproject.TestFileUtils;
 import org.briarproject.TestUtils;
 import org.briarproject.api.ContactId;
 import org.briarproject.api.plugins.TransportConnectionWriter;
@@ -29,7 +30,7 @@ public class RemovableDrivePluginTest extends BriarTestCase {
 
 	private final File testDir = TestUtils.getTestDirectory();
 	private final ContactId contactId = new ContactId(234);
-	private final FileUtils fileUtils = new TestFileUtils();
+	@Inject private FileUtils fileUtils;
 
 	@Override
 	@Before