diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/DynamicDefinition.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/DynamicDefinition.kt
index 35aa126e..893c3027 100644
--- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/DynamicDefinition.kt
+++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/DynamicDefinition.kt
@@ -1,12 +1,8 @@
 package ru.dbotthepony.kstarbound.defs
 
-import com.google.gson.Gson
 import com.google.gson.JsonObject
 import com.google.gson.internal.bind.JsonTreeReader
-import com.google.gson.reflect.TypeToken
 import ru.dbotthepony.kstarbound.RegistryObject
-import java.lang.reflect.ParameterizedType
-import java.lang.reflect.Type
 
 private fun merge(destination: JsonObject, source: JsonObject) {
 	for ((k, v) in source.entrySet()) {
@@ -25,6 +21,7 @@ private fun merge(destination: JsonObject, source: JsonObject) {
 }
 
 abstract class DynamicDefinition<Def : Any>(val original: RegistryObject<Def>) {
+	@Volatile
 	private var isDirty = false
 	private var dynamicData = JsonObject()
 
@@ -61,5 +58,11 @@ abstract class DynamicDefinition<Def : Any>(val original: RegistryObject<Def>) {
 		dynamicData = saveInput
 	}
 
+	fun toJsonTree(): JsonObject {
+		val tree = original.gson.toJsonTree(def) as JsonObject
+		sanitize(tree)
+		return tree
+	}
+
 	abstract fun sanitize(saveInput: JsonObject)
 }