diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
index 88bfaa70097c26629499854172bb93cd85fc0921..a6d46c706294111c375d15c184345bce97e444a8 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
@@ -34,23 +34,18 @@ import com.mikepenz.materialdrawer.AccountHeader;
 import com.mikepenz.materialdrawer.AccountHeaderBuilder;
 import com.mikepenz.materialdrawer.Drawer;
 
-import aspm.annotations.BooleanPreference;
-import aspm.annotations.IntPreference;
-import aspm.annotations.PreferenceWrapper;
-import aspm.annotations.StringPreference;
 import butterknife.Bind;
 import butterknife.ButterKnife;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.events.GeneralErrorEvent;
-import de.kuschku.quasseldroid_ng.BuildConfig;
 import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.service.ClientBackgroundThread;
-import de.kuschku.quasseldroid_ng.util.BoundActivity;
 import de.kuschku.quasseldroid_ng.ui.chat.fragment.ChatFragment;
 import de.kuschku.quasseldroid_ng.ui.chat.fragment.LoadingFragment;
 import de.kuschku.quasseldroid_ng.ui.chat.util.ActivityImplFactory;
 import de.kuschku.quasseldroid_ng.ui.chat.util.ILayoutHelper;
 import de.kuschku.quasseldroid_ng.ui.chat.util.Status;
+import de.kuschku.quasseldroid_ng.util.BoundActivity;
 import de.kuschku.quasseldroid_ng.util.accounts.AccountManager;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/Settings.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/Settings.java
index 0d3e09c2bc07764b1c6e02dc1b3fb5f962138edf..27d9b66acab76489639bdb61558a05d4d6c6625b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/Settings.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/Settings.java
@@ -24,9 +24,9 @@ package de.kuschku.quasseldroid_ng.ui.chat;
 import android.content.Context;
 import android.content.SharedPreferences;
 
-import aspm.BooleanPreference;
-import aspm.IntPreference;
-import aspm.StringPreference;
+import de.kuschku.quasseldroid_ng.util.preferences.BooleanPreference;
+import de.kuschku.quasseldroid_ng.util.preferences.IntPreference;
+import de.kuschku.quasseldroid_ng.util.preferences.StringPreference;
 import de.kuschku.util.backports.Objects;
 
 public class Settings {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java
index 5aa436af0651bf6febc984c2ab65ef1878d37baf..127359db667a51fb9f05172454dc89d8ad9804d2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java
@@ -26,8 +26,6 @@ import android.content.Context;
 import java.util.Set;
 import java.util.UUID;
 
-import aspm.StringPreference;
-
 public class AccountManager {
     AccountManagerHelper helper;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/AbstractPreferenceElement.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/AbstractPreferenceElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..32f257b2e9a08142024b9da07d89c5ffc7bf73bc
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/AbstractPreferenceElement.java
@@ -0,0 +1,75 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid_ng.util.preferences;
+
+import android.content.SharedPreferences;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public abstract class AbstractPreferenceElement<T> implements PreferenceElement<T>, OnChangeListener<T> {
+    private final Set<OnChangeListener<T>> listeners = new HashSet<>();
+    protected SharedPreferences pref;
+    protected SharedPreferences.Editor edit;
+    protected String key;
+    protected T defValue;
+
+    public AbstractPreferenceElement(SharedPreferences pref, String key, T defValue) {
+        this.pref = pref;
+        this.key = key;
+        this.defValue = defValue;
+    }
+
+    public void change() {
+        change(get());
+    }
+
+    public void change(T value) {
+        for (OnChangeListener<T> listener : listeners)
+            listener.change(value);
+    }
+
+    public void addChangeListener(OnChangeListener<T> listener) {
+        listeners.add(listener);
+    }
+
+    public void removeChangeListener(OnChangeListener<T> listener) {
+        listeners.remove(listener);
+    }
+
+    protected abstract void put(T value);
+
+    public void batch(SharedPreferences.Editor edit) {
+        if (this.edit != null) this.edit.commit();
+        this.edit = edit;
+    }
+
+    public T get() {
+        return or(defValue);
+    }
+
+    public void set(T value) {
+        edit = pref.edit();
+        put(value);
+        edit.commit();
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/BooleanPreference.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/BooleanPreference.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d0b0ce3307706d8c846d81f2d0c5118ef67704c
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/BooleanPreference.java
@@ -0,0 +1,40 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid_ng.util.preferences;
+
+import android.content.SharedPreferences;
+
+public class BooleanPreference extends AbstractPreferenceElement<Boolean> {
+    public BooleanPreference(SharedPreferences pref, String key, Boolean init) {
+        super(pref, key, init);
+    }
+
+    @Override
+    protected void put(Boolean value) {
+        edit.putBoolean(key, value);
+    }
+
+    @Override
+    public Boolean or(Boolean defValue) {
+        return pref.getBoolean(key, defValue);
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/FloatPreference.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/FloatPreference.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e6a44fe71eab1aa493919dd3f38aea248b1a3ce
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/FloatPreference.java
@@ -0,0 +1,40 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid_ng.util.preferences;
+
+import android.content.SharedPreferences;
+
+public class FloatPreference extends AbstractPreferenceElement<Float> {
+    public FloatPreference(SharedPreferences pref, String key, Float init) {
+        super(pref, key, init);
+    }
+
+    @Override
+    protected void put(Float value) {
+        edit.putFloat(key, value);
+    }
+
+    @Override
+    public Float or(Float defValue) {
+        return pref.getFloat(key, defValue);
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/IntPreference.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/IntPreference.java
new file mode 100644
index 0000000000000000000000000000000000000000..f598b30961f67402e5e59565d2e9043953aa554d
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/IntPreference.java
@@ -0,0 +1,40 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid_ng.util.preferences;
+
+import android.content.SharedPreferences;
+
+public class IntPreference extends AbstractPreferenceElement<Integer> {
+    public IntPreference(SharedPreferences pref, String key, Integer defValue) {
+        super(pref, key, defValue);
+    }
+
+    @Override
+    protected void put(Integer value) {
+        edit.putInt(key, value);
+    }
+
+    @Override
+    public Integer or(Integer defValue) {
+        return pref.getInt(key, defValue);
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/LongPreference.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/LongPreference.java
new file mode 100644
index 0000000000000000000000000000000000000000..ad51dd392603deee99daf2388d720d79734d2ff4
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/LongPreference.java
@@ -0,0 +1,40 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid_ng.util.preferences;
+
+import android.content.SharedPreferences;
+
+public class LongPreference extends AbstractPreferenceElement<Long> {
+    public LongPreference(SharedPreferences pref, String key, Long defValue) {
+        super(pref, key, defValue);
+    }
+
+    @Override
+    protected void put(Long value) {
+        edit.putLong(key, value);
+    }
+
+    @Override
+    public Long or(Long defValue) {
+        return pref.getLong(key, defValue);
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/OnChangeListener.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/OnChangeListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..80554b99b7aa964167ed93908433aa6cc698af10
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/OnChangeListener.java
@@ -0,0 +1,26 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid_ng.util.preferences;
+
+public interface OnChangeListener<T> {
+    void change(T value);
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/PreferenceElement.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/PreferenceElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..68897a345b6f08c78b5a53d92bb820a85e6254e4
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/PreferenceElement.java
@@ -0,0 +1,34 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid_ng.util.preferences;
+
+public interface PreferenceElement<T> {
+    void addChangeListener(OnChangeListener<T> listener);
+
+    void removeChangeListener(OnChangeListener<T> listener);
+
+    T get();
+
+    T or(T otherwise);
+
+    void set(T value);
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/StringPreference.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/StringPreference.java
new file mode 100644
index 0000000000000000000000000000000000000000..0221090b977b5133a9b68b948fea42c3fd753673
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/StringPreference.java
@@ -0,0 +1,40 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid_ng.util.preferences;
+
+import android.content.SharedPreferences;
+
+public class StringPreference extends AbstractPreferenceElement<String> {
+    public StringPreference(SharedPreferences pref, String key, String init) {
+        super(pref, key, init);
+    }
+
+    @Override
+    protected void put(String value) {
+        edit.putString(key, value);
+    }
+
+    @Override
+    public String or(String defValue) {
+        return pref.getString(key, defValue);
+    }
+}