diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt
index f53335c5ac4fedde064ce77831bae2bed08d95d3..cbcddc0207daf6c643eae69026dfd5c57b8e749e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashAdapter.kt
@@ -90,7 +90,7 @@ class CrashAdapter : ListAdapter<Pair<Report?, Uri>, CrashAdapter.CrashViewHolde
       this.item = item
       this.uri = uri
 
-      binding.crashTime.text = item?.environment?.crashTime?.let {
+      binding.crashTime.text = item?.timestamp?.let {
         dateTimeFormatter.format(Instant.ofEpochMilli(it).atZone(ZoneId.systemDefault()))
       } ?: "null"
       binding.versionName.text = item?.application?.versionName ?: "null"
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt
index 2f594bfa6c642048c468f1fada0ad3a9c1c1591d..089626f12f045e1ae48a41dc2a354e126388d36a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashFragment.kt
@@ -75,7 +75,7 @@ class CrashFragment : DaggerFragment() {
             FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.fileprovider", it)
           )
         }
-        .sortedByDescending { it.first?.environment?.crashTime }
+        .sortedByDescending { it.first?.timestamp }
 
       activity?.runOnUiThread {
         this.adapter?.submitList(list)
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt
index a455e1cd15c4bf8ef7ebd7935e0604b2fc3ecc11..7c713967f2d53fa77795b364299a36c5c1712f1b 100644
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/collectors/AppCollector.kt
@@ -24,7 +24,6 @@ import android.os.Build
 import de.kuschku.malheur.CrashContext
 import de.kuschku.malheur.config.AppConfig
 import de.kuschku.malheur.data.AppInfo
-import de.kuschku.malheur.util.reflectionCollectConstants
 
 class AppCollector(private val application: Application) : Collector<AppInfo, AppConfig> {
   override fun collect(context: CrashContext, config: AppConfig) = AppInfo(
@@ -39,20 +38,13 @@ class AppCollector(private val application: Application) : Collector<AppInfo, Ap
         application.packageManager.getPackageInfo(application.packageName, 0).versionCode.toLong()
       }
     },
-    buildConfig = collectIf(config.buildConfig) {
-      reflectionCollectConstants(
-        context.buildConfig ?: getBuildConfigClass(application.packageName)
-      )
-    },
     installationSource = collectIf(config.installationSource) {
-      @Suppress("DEPRECATION")
-      application.packageManager.getInstallerPackageName(application.packageName)
+      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+        application.packageManager.getInstallSourceInfo(application.packageName).originatingPackageName
+      } else {
+        @Suppress("DEPRECATION")
+        application.packageManager.getInstallerPackageName(application.packageName)
+      }
     }
   )
-
-  private fun getBuildConfigClass(packageName: String) = try {
-    Class.forName("$packageName.BuildConfig")
-  } catch (e: ClassNotFoundException) {
-    null
-  }
 }
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/ConfigurationCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/ConfigurationCollector.kt
deleted file mode 100644
index 9842e4217f4599fc92012c850a212823cb4a0f95..0000000000000000000000000000000000000000
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/ConfigurationCollector.kt
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2020 Janne Mareike Koschinski
- * Copyright (c) 2020 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * 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.malheur.collectors
-
-import android.annotation.SuppressLint
-import android.app.Application
-import android.content.res.Configuration
-import android.util.SparseArray
-import de.kuschku.malheur.CrashContext
-import java.lang.reflect.Field
-import java.lang.reflect.Modifier
-
-class ConfigurationCollector(private val application: Application) :
-  Collector<Map<String, Any?>, Boolean> {
-  private val configValueInfo = mutableMapOf<String, SparseArray<String>>()
-
-  private val configurationFields = listOf(
-    FieldDefinition(
-      fieldName = "screenHeightDp"
-    ),
-    FieldDefinition(
-      fieldName = "screenWidthDp"
-    ),
-    FieldDefinition(
-      fieldName = "smallestScreenWidthDp"
-    ),
-    FieldDefinition(
-      fieldName = "navigation",
-      enumPrefix = "NAVIGATION"
-    ),
-    FieldDefinition(
-      fieldName = "navigationHidden",
-      enumPrefix = "NAVIGATIONHIDDEN"
-    ),
-    FieldDefinition(
-      fieldName = "orientation",
-      enumPrefix = "ORIENTATION"
-    ),
-    FieldDefinition(
-      fieldName = "screenLayout",
-      enumPrefix = "SCREENLAYOUT",
-      isFlag = true
-    ),
-    FieldDefinition(
-      fieldName = "touchscreen",
-      enumPrefix = "TOUCHSCREEN"
-    ),
-    FieldDefinition(
-      fieldName = "uiMode",
-      enumPrefix = "UI_MODE",
-      isFlag = true
-    )
-  )
-
-  init {
-    val configurationFieldPrefixes = configurationFields.map(FieldDefinition::enumPrefix)
-
-    Configuration::class.java.declaredFields.filter {
-      Modifier.isStatic(it.modifiers)
-    }.filter {
-      it.type == Int::class.java
-    }.filterNot {
-      it.name.endsWith("_MASK")
-    }.forEach { field ->
-      val group = configurationFieldPrefixes.find { field.name.startsWith(it + "_") }
-      if (group != null) {
-        val value = field.name.substring(group.length + 1)
-        configValueInfo.getOrPut(group, ::SparseArray).put(field.getInt(null), value)
-      }
-    }
-  }
-
-  @SuppressLint("PrivateApi")
-  override fun collect(context: CrashContext,
-                       config: Boolean) = configurationFields.mapNotNull { info ->
-    val field: Field? = Configuration::class.java.getDeclaredField(info.fieldName)
-    field?.let {
-      Pair(info, it)
-    }
-  }.filter { (_, field) ->
-    !Modifier.isStatic(field.modifiers)
-  }.map { (info, field) ->
-    val groupInfo = configValueInfo[info.enumPrefix]
-    if (groupInfo != null) {
-      val value = field.getInt(application.resources.configuration)
-      if (info.isFlag) {
-        info.fieldName to (0 until groupInfo.size()).map { idx ->
-          groupInfo.keyAt(idx) to groupInfo.valueAt(idx)
-        }.filter { (key, _) ->
-          value and key != 0
-        }.map { (_, value) ->
-          value
-        }.toList()
-      } else {
-        val valueConstant = groupInfo[value]
-        if (valueConstant == null) {
-          info.fieldName to value
-        } else {
-          info.fieldName to valueConstant
-        }
-      }
-    } else {
-      val value = field.getInt(application.resources.configuration)
-      info.fieldName to value
-    }
-  }.toMap()
-
-  class FieldDefinition(
-    val fieldName: String,
-    val enumPrefix: String? = null,
-    val isFlag: Boolean = false
-  )
-}
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/DeviceCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/DeviceCollector.kt
deleted file mode 100644
index 20cbfcc91d5dfe6dc193fff103c972316937fee9..0000000000000000000000000000000000000000
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/DeviceCollector.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2020 Janne Mareike Koschinski
- * Copyright (c) 2020 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * 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.malheur.collectors
-
-import android.app.Application
-import android.os.Build
-import de.kuschku.malheur.CrashContext
-import de.kuschku.malheur.config.DeviceConfig
-import de.kuschku.malheur.data.DeviceInfo
-import de.kuschku.malheur.util.reflectionCollectConstants
-import java.io.File
-
-class DeviceCollector(private val application: Application) : Collector<DeviceInfo, DeviceConfig> {
-  private val displayCollector = DisplayCollector(application)
-
-  override fun collect(context: CrashContext, config: DeviceConfig): DeviceInfo {
-    return DeviceInfo(
-      build = collectIf(config.build) {
-        reflectionCollectConstants(Build::class.java)
-      },
-      version = collectIf(config.version) {
-        reflectionCollectConstants(Build.VERSION::class.java)
-      },
-      processor = collectIf(config.processor) {
-        readProcInfo()
-      },
-      display = displayCollector.collectIf(context, config.display)
-    )
-  }
-
-  private fun readProcInfo() = File("/proc/cpuinfo")
-    .bufferedReader(Charsets.UTF_8)
-    .lineSequence()
-    .map { line -> line.split(":") }
-    .filter { split -> split.size == 2 }
-    .map { (key, value) -> key.trim() to value.trim() }
-    .filter { (key, _) -> key == "Hardware" }
-    .map { (_, value) -> value }
-    .firstOrNull()
-}
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt
deleted file mode 100644
index aa93c2729acea5dbbf447e669828fde847150c5c..0000000000000000000000000000000000000000
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2020 Janne Mareike Koschinski
- * Copyright (c) 2020 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * 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.malheur.collectors
-
-import android.app.Application
-import android.content.Context
-import android.graphics.Point
-import android.os.Build
-import android.util.SparseArray
-import android.view.Display
-import android.view.WindowManager
-import androidx.annotation.RequiresApi
-import de.kuschku.malheur.CrashContext
-import de.kuschku.malheur.data.DisplayInfo
-import de.kuschku.malheur.data.MetricsInfo
-import de.kuschku.malheur.util.getMetrics
-import java.lang.reflect.Modifier
-
-class DisplayCollector(application: Application) :
-  Collector<DisplayInfo, Boolean> {
-  private val windowManager = application.getSystemService(
-    Context.WINDOW_SERVICE
-  ) as WindowManager
-
-  @Suppress("DEPRECATION")
-  override fun collect(context: CrashContext, config: Boolean): DisplayInfo {
-    val display = windowManager.defaultDisplay
-    val hdrCapabilities = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-      val capabilitiesEnum = getHdrCapabilitiesEnum()
-      display.hdrCapabilities.supportedHdrTypes.map(capabilitiesEnum::get)
-    } else {
-      null
-    }
-
-    val size = Point().also {
-      display.getRealSize(it)
-    }
-
-    return DisplayInfo(
-      width = size.x,
-      height = size.y,
-      refreshRate = display.refreshRate,
-      hdr = hdrCapabilities,
-      isWideGamut = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-        display.isWideColorGamut
-      } else {
-        null
-      },
-      metrics = MetricsInfo(display.getMetrics())
-    )
-  }
-
-  @RequiresApi(Build.VERSION_CODES.N)
-  private fun getHdrCapabilitiesEnum(): SparseArray<String> {
-    val hdrCapabilityEnums = SparseArray<String>()
-    Display.HdrCapabilities::class.java.declaredFields.filter {
-      Modifier.isStatic(it.modifiers)
-    }.filter {
-      it.name.startsWith("HDR_TYPE_")
-    }.filter {
-      it.type == Int::class.java
-    }.forEach {
-      try {
-        val value = it.getInt(null)
-        hdrCapabilityEnums.put(value, it.name.substring("HDR_TYPE_".length))
-      } catch (e: IllegalAccessException) {
-      }
-    }
-    return hdrCapabilityEnums
-  }
-}
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt
deleted file mode 100644
index 0651be4c0f950f473f720766509ea84c97f074d5..0000000000000000000000000000000000000000
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/EnvCollector.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2020 Janne Mareike Koschinski
- * Copyright (c) 2020 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * 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.malheur.collectors
-
-import android.app.Application
-import android.os.Debug
-import android.os.Environment
-import de.kuschku.malheur.CrashContext
-import de.kuschku.malheur.config.EnvConfig
-import de.kuschku.malheur.data.EnvInfo
-import de.kuschku.malheur.data.MemoryInfo
-import de.kuschku.malheur.util.reflectionCollectGetters
-import java.io.File
-
-class EnvCollector(application: Application) : Collector<EnvInfo, EnvConfig> {
-  private val configurationCollector = ConfigurationCollector(application)
-
-  override fun collect(context: CrashContext, config: EnvConfig) = EnvInfo(
-    paths = collectIf(config.paths) {
-      reflectionCollectGetters(
-        Environment::class.java
-      )?.map { (key, value) ->
-        key to if (value is File) {
-          value.canonicalPath
-        } else {
-          value
-        }
-      }?.toMap()
-    },
-    memory = collectIf(config.memory) {
-      val memoryInfo = Debug.MemoryInfo()
-      Debug.getMemoryInfo(memoryInfo)
-      MemoryInfo(memoryInfo)
-    },
-    configuration = configurationCollector.collectIf(context, config.configuration),
-    startTime = collectIf(config.startTime) {
-      context.startTime.time
-    },
-    crashTime = collectIf(config.crashTime) {
-      context.crashTime.time
-    }
-  )
-}
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/LogCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/LogCollector.kt
deleted file mode 100644
index dc30423bd3de25d61e730c8bb54ea7d5195e7b35..0000000000000000000000000000000000000000
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/LogCollector.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2020 Janne Mareike Koschinski
- * Copyright (c) 2020 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * 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.malheur.collectors
-
-import de.kuschku.malheur.CrashContext
-import de.kuschku.malheur.config.LogConfig
-import java.text.SimpleDateFormat
-import java.util.*
-
-class LogCollector : Collector<Map<String, List<String>>, LogConfig> {
-  private val logcatTimeFormatter = SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.ROOT)
-
-  override fun collect(context: CrashContext, config: LogConfig): Map<String, List<String>> {
-    val since = logcatTimeFormatter.format(context.startTime)
-    return config.buffers.map { buffer ->
-      buffer to readLogCat(since, buffer)
-    }.toMap()
-  }
-
-  private fun readLogCat(since: String, buffer: String) = ProcessBuilder()
-    .command("logcat", "-t", since, "-b", buffer)
-    .redirectErrorStream(true)
-    .start()
-    .inputStream
-    .bufferedReader(Charsets.UTF_8)
-    .readLines()
-}
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt
index 7eff4fcc32aa4884c9daf8b7632c60ec2ca364b5..1203f45da54c660917ce12cfb1ead51bebeb4162 100644
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/collectors/ReportCollector.kt
@@ -27,17 +27,12 @@ import de.kuschku.malheur.data.Report
 class ReportCollector(application: Application) : Collector<Report, ReportConfig> {
   private val crashCollector = CrashCollector()
   private val threadCollector = ThreadCollector()
-  private val logcatCollector = LogCollector()
   private val applicationCollector = AppCollector(application)
-  private val deviceCollector = DeviceCollector(application)
-  private val environmentCollector = EnvCollector(application)
 
   override fun collect(context: CrashContext, config: ReportConfig) = Report(
+    timestamp = System.currentTimeMillis(),
     crash = crashCollector.collectIf(context, config.crash),
     threads = threadCollector.collectIf(context, config.threads),
-    /*logcat = logcatCollector.collectIf(context, config.logcat),*/
     application = applicationCollector.collectIf(context, config.application),
-    device = deviceCollector.collectIf(context, config.device),
-    environment = environmentCollector.collectIf(context, config.environment)
   )
 }
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt
index 5f0c3d592447c246ea65cc94a210c6a1742b3bcb..324d609500fc6c57dc496333f22b3248b870641e 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/AppInfo.kt
@@ -19,9 +19,11 @@
 
 package de.kuschku.malheur.data
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class AppInfo(
   val versionName: String?,
   val versionCode: Long?,
-  val buildConfig: Map<String, Any?>?,
   val installationSource: String?
 )
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/CrashInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/CrashInfo.kt
index 6dec8b59b1c53f52636b0f321aca59a4852e50cd..e21f3ecd03c7a94c18aa1afbe2c744f0aa672e08 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/CrashInfo.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/CrashInfo.kt
@@ -19,6 +19,9 @@
 
 package de.kuschku.malheur.data
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class CrashInfo(
   val cause: ExceptionInfo?,
   val exception: String?
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/DeviceInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/DeviceInfo.kt
deleted file mode 100644
index 60b4eaa0495e7932f2ccfdf83c343666f55851a1..0000000000000000000000000000000000000000
--- a/malheur/src/main/java/de/kuschku/malheur/data/DeviceInfo.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2020 Janne Mareike Koschinski
- * Copyright (c) 2020 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * 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.malheur.data
-
-data class DeviceInfo(
-  val build: Map<String, Any?>?,
-  val version: Map<String, Any?>?,
-  val processor: String?,
-  val display: DisplayInfo?
-)
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt
index 28137649dde18bfe62e3b566daf9a9d83b8f6145..c8a76764753a74763971ccd956d1d4a061326f75 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/DisplayInfo.kt
@@ -19,11 +19,11 @@
 
 package de.kuschku.malheur.data
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class DisplayInfo(
   val width: Int,
   val height: Int,
-  val refreshRate: Float,
-  val hdr: List<String>?,
-  val isWideGamut: Boolean?,
   val metrics: MetricsInfo
 )
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/EnvInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/EnvInfo.kt
deleted file mode 100644
index 852a9aa156a611c6fbf153b8f2d61b0f898daacb..0000000000000000000000000000000000000000
--- a/malheur/src/main/java/de/kuschku/malheur/data/EnvInfo.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2020 Janne Mareike Koschinski
- * Copyright (c) 2020 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * 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.malheur.data
-
-data class EnvInfo(
-  val paths: Map<String, Any?>?,
-  val memory: MemoryInfo?,
-  val configuration: Map<String, Any?>?,
-  val startTime: Long?,
-  val crashTime: Long?
-)
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/ExceptionInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/ExceptionInfo.kt
index 25962d729e0372350364ccc19b20c9d22b50c038..8e7d53a6035147d70bb752de7e6426b3beb36a70 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/ExceptionInfo.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/ExceptionInfo.kt
@@ -19,6 +19,9 @@
 
 package de.kuschku.malheur.data
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class ExceptionInfo(
   val type: String?,
   val message: String?,
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/MemoryInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/MemoryInfo.kt
deleted file mode 100644
index 9a0ddd33bdd8c5a99eea9f8eab1d0d78d43e10c5..0000000000000000000000000000000000000000
--- a/malheur/src/main/java/de/kuschku/malheur/data/MemoryInfo.kt
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2020 Janne Mareike Koschinski
- * Copyright (c) 2020 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * 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.malheur.data
-
-import android.os.Debug
-
-data class MemoryInfo(
-  var dalvikPss: Int?,
-  var dalvikPrivateDirty: Int?,
-  var dalvikSharedDirty: Int?,
-
-  var nativePss: Int?,
-  var nativePrivateDirty: Int?,
-  var nativeSharedDirty: Int?,
-
-  var otherPss: Int?,
-  var otherPrivateDirty: Int?,
-  var otherSharedDirty: Int?
-) {
-  constructor(memoryInfo: Debug.MemoryInfo?) : this(
-    dalvikPss = memoryInfo?.dalvikPss,
-    dalvikPrivateDirty = memoryInfo?.dalvikPrivateDirty,
-    dalvikSharedDirty = memoryInfo?.dalvikSharedDirty,
-
-    nativePss = memoryInfo?.nativePss,
-    nativePrivateDirty = memoryInfo?.nativePrivateDirty,
-    nativeSharedDirty = memoryInfo?.nativeSharedDirty,
-
-    otherPss = memoryInfo?.otherPss,
-    otherPrivateDirty = memoryInfo?.otherPrivateDirty,
-    otherSharedDirty = memoryInfo?.otherSharedDirty
-  )
-}
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/MetricsInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/MetricsInfo.kt
index 308708871bdf461811a10b7cb9e3b778ddd95686..033e7f4bb24b86ecf335e6486c888caa11ee8962 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/MetricsInfo.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/MetricsInfo.kt
@@ -20,7 +20,9 @@
 package de.kuschku.malheur.data
 
 import android.util.DisplayMetrics
+import kotlinx.serialization.Serializable
 
+@Serializable
 data class MetricsInfo(
   val density: Float,
   val scaledDensity: Float,
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/Report.kt b/malheur/src/main/java/de/kuschku/malheur/data/Report.kt
index 5b13196061dea0009e47a0bd0783c402937b70ec..8e177648ac1868ada05276b85393caa855519d53 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/Report.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/Report.kt
@@ -19,11 +19,12 @@
 
 package de.kuschku.malheur.data
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class Report(
+  val timestamp: Long? = null,
   val crash: CrashInfo? = null,
   val threads: ThreadsInfo? = null,
-  val logcat: Map<String, List<String>?>? = null,
   val application: AppInfo? = null,
-  val device: DeviceInfo? = null,
-  val environment: EnvInfo? = null
 )
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/ThreadInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/ThreadInfo.kt
index 40fd06d74ddec5b55e6ca23c47714ebdce35d4b2..8e374f62eed0a9b7b38e10c5fea7ad91b31f5aac 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/ThreadInfo.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/ThreadInfo.kt
@@ -19,6 +19,9 @@
 
 package de.kuschku.malheur.data
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class ThreadInfo(
   val id: Long?,
   val name: String?,
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/ThreadsInfo.kt b/malheur/src/main/java/de/kuschku/malheur/data/ThreadsInfo.kt
index dd344798c24aaec72986127c5bc458e7512580fc..e3888eecb0622bbcaf1bb82d85e3b88d0e0a1911 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/ThreadsInfo.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/ThreadsInfo.kt
@@ -19,6 +19,9 @@
 
 package de.kuschku.malheur.data
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class ThreadsInfo(
   val crashed: ThreadInfo?,
   val others: List<ThreadInfo>?
diff --git a/malheur/src/main/java/de/kuschku/malheur/data/TraceElement.kt b/malheur/src/main/java/de/kuschku/malheur/data/TraceElement.kt
index c612c4d096941b4ce2c5e26efe0d80f22f9abcc5..4c7853be580ef5e1bd3a2de54d292d7b0dea9e32 100644
--- a/malheur/src/main/java/de/kuschku/malheur/data/TraceElement.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/data/TraceElement.kt
@@ -19,6 +19,9 @@
 
 package de.kuschku.malheur.data
 
+import kotlinx.serialization.Serializable
+
+@Serializable
 data class TraceElement(
   val className: String?,
   val methodName: String?,
diff --git a/malheur/src/main/java/de/kuschku/malheur/util/ReflectionHelper.kt b/malheur/src/main/java/de/kuschku/malheur/util/ReflectionHelper.kt
index fd18a0550e3411ad19078a82303df7c963514f9d..1009b395dde83ff4b9528358e460a1a4418c3f1b 100644
--- a/malheur/src/main/java/de/kuschku/malheur/util/ReflectionHelper.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/util/ReflectionHelper.kt
@@ -19,17 +19,6 @@
 
 package de.kuschku.malheur.util
 
-fun reflectionCollectConstants(klass: Class<*>?) = klass?.declaredFields
-  ?.mapNotNull {
-    var result: Pair<String, Any?>? = null
-    try {
-      result = it.name to it.get(null)
-    } catch (e: IllegalAccessException) {
-    } catch (e: IllegalArgumentException) {
-    }
-    result
-  }?.toMap()
-
 fun <T> reflectionCollectGetters(klass: Class<T>?) = klass?.declaredMethods
   ?.filter { it.parameterTypes.isEmpty() && it.returnType != Void::class.java }
   ?.filter { it.name != "getClass" }