diff --git a/liblava/app/config.cpp b/liblava/app/config.cpp
index 762951bd295f07166e12a345be7a598fa107f325..e4a976ee2cb33a22179fd81df52e23069a04ecc2 100644
--- a/liblava/app/config.cpp
+++ b/liblava/app/config.cpp
@@ -41,7 +41,7 @@ namespace lava {
     }
 
     bool load_window_file(window::state& state, name save_name) {
-        scope_data data;
+        unique_data data;
         if (!load_file_data(_window_file_, data))
             return false;
 
@@ -73,7 +73,7 @@ namespace lava {
 
         json j;
 
-        scope_data data;
+        unique_data data;
         if (load_file_data(_window_file_, data)) {
             j = json::parse(data.ptr, data.ptr + data.size);
 
diff --git a/liblava/asset/image_data.hpp b/liblava/asset/image_data.hpp
index de314a7804b31aa6f22ffa8ca8d68eca4ed4d1af..462bc5dbe70ebbd7a0ddf1cea579f3dc33a2065e 100644
--- a/liblava/asset/image_data.hpp
+++ b/liblava/asset/image_data.hpp
@@ -21,7 +21,7 @@ namespace lava {
 
     private:
         file image_file;
-        scope_data file_data;
+        unique_data file_data;
     };
 
 } // namespace lava
diff --git a/liblava/asset/mesh_loader.cpp b/liblava/asset/mesh_loader.cpp
index 6376000a198d8c58e78b3a0dadef7042439998b8..74414808ac2484874dbe85865172da9d4aab8554 100644
--- a/liblava/asset/mesh_loader.cpp
+++ b/liblava/asset/mesh_loader.cpp
@@ -48,7 +48,7 @@ lava::mesh::ptr lava::load_mesh(device_ptr device, name filename) {
                 temp_file = file_system::get_pref_dir();
                 temp_file += get_filename_from(target_file, true);
 
-                scope_data temp_data(file.get_size());
+                unique_data temp_data(file.get_size());
                 if (!temp_data.ptr)
                     return nullptr;
 
diff --git a/liblava/asset/texture_loader.cpp b/liblava/asset/texture_loader.cpp
index c56d7f7bacd609f2c84cd7dffb5481b03b7133ec..2b73806cc9937d42a8a603617d34d4e97339c3cb 100644
--- a/liblava/asset/texture_loader.cpp
+++ b/liblava/asset/texture_loader.cpp
@@ -34,7 +34,7 @@
 
 namespace lava {
 
-    texture::ptr create_gli_texture_2d(device_ptr device, file const& file, VkFormat format, scope_data const& temp_data) {
+    texture::ptr create_gli_texture_2d(device_ptr device, file const& file, VkFormat format, unique_data const& temp_data) {
         gli::texture2d tex(file.opened() ? gli::load(temp_data.ptr, temp_data.size)
                                          : gli::load(file.get_path()));
         assert(!tex.empty());
@@ -91,7 +91,7 @@ namespace lava {
         return layers;
     }
 
-    texture::ptr create_gli_texture_array(device_ptr device, file const& file, VkFormat format, scope_data const& temp_data) {
+    texture::ptr create_gli_texture_array(device_ptr device, file const& file, VkFormat format, unique_data const& temp_data) {
         gli::texture2d_array tex(file.opened() ? gli::load(temp_data.ptr, temp_data.size)
                                                : gli::load(file.get_path()));
         assert(!tex.empty());
@@ -112,7 +112,7 @@ namespace lava {
         return texture;
     }
 
-    texture::ptr create_gli_texture_cube_map(device_ptr device, file const& file, VkFormat format, scope_data const& temp_data) {
+    texture::ptr create_gli_texture_cube_map(device_ptr device, file const& file, VkFormat format, unique_data const& temp_data) {
         gli::texture_cube tex(file.opened() ? gli::load(temp_data.ptr, temp_data.size)
                                             : gli::load(file.get_path()));
         assert(!tex.empty());
@@ -133,7 +133,7 @@ namespace lava {
         return texture;
     }
 
-    texture::ptr create_stbi_texture(device_ptr device, file const& file, scope_data const& temp_data) {
+    texture::ptr create_stbi_texture(device_ptr device, file const& file, unique_data const& temp_data) {
         i32 tex_width = 0, tex_height = 0;
         stbi_uc* data = nullptr;
 
@@ -177,7 +177,7 @@ lava::texture::ptr lava::load_texture(device_ptr device, file_format file_format
         return nullptr;
 
     file file(str(file_format.path));
-    scope_data temp_data(file.get_size(), false);
+    unique_data temp_data(file.get_size(), false);
 
     if (file.opened()) {
         if (!temp_data.allocate())
@@ -218,7 +218,7 @@ lava::texture::ptr lava::create_default_texture(device_ptr device, uv2 size, v3
         return nullptr;
 
     i32 const block_size = format_block_size(format);
-    scope_data data(size.x * size.y * block_size);
+    unique_data data(size.x * size.y * block_size);
     memset(data.ptr, 0, data.size);
 
     ui32 const color_r = 255 * color.r;
diff --git a/liblava/core/data.hpp b/liblava/core/data.hpp
index 274d482b76a837b4a6a45729ba56b05d31337f8e..1e27353ddbaca99930139cd50fcf971f8985b09a 100644
--- a/liblava/core/data.hpp
+++ b/liblava/core/data.hpp
@@ -112,23 +112,23 @@ namespace lava {
         size_t size = 0;
     };
 
-    struct scope_data : data {
-        explicit scope_data(size_t length = 0, bool alloc = true) {
+    struct unique_data : data {
+        explicit unique_data(size_t length = 0, bool alloc = true) {
             if (length)
                 set(length, alloc);
         }
 
-        explicit scope_data(ui32 length, bool alloc = true)
-        : scope_data(to_size_t(length), alloc) {}
-        explicit scope_data(i64 length, bool alloc = true)
-        : scope_data(to_size_t(length), alloc) {}
-        explicit scope_data(data const& data) {
+        explicit unique_data(ui32 length, bool alloc = true)
+        : unique_data(to_size_t(length), alloc) {}
+        explicit unique_data(i64 length, bool alloc = true)
+        : unique_data(to_size_t(length), alloc) {}
+        explicit unique_data(data const& data) {
             ptr = data.ptr;
             size = data.size;
             alignment = data.alignment;
         }
 
-        ~scope_data() {
+        ~unique_data() {
             free();
         }
     };
diff --git a/liblava/file/file_utils.hpp b/liblava/file/file_utils.hpp
index 31165c54a1a979dc7244a8c0a2074c663f2a126e..23805388e39a555b90f5c23f8ea11d73dd2ebaa6 100644
--- a/liblava/file/file_utils.hpp
+++ b/liblava/file/file_utils.hpp
@@ -22,7 +22,7 @@ namespace lava {
 
     bool load_file_data(string_ref filename, data& target);
 
-    struct file_data : scope_data {
+    struct file_data : unique_data {
         explicit file_data(string_ref filename) {
             load_file_data(filename, *this);
         }
diff --git a/liblava/file/json_file.cpp b/liblava/file/json_file.cpp
index 78ba54fdd5195f1f9decce0bd9bcb70d189e8bd8..a330ff24fbec6278c6a7a5262aa78c880d833b4e 100644
--- a/liblava/file/json_file.cpp
+++ b/liblava/file/json_file.cpp
@@ -22,7 +22,7 @@ namespace lava {
     }
 
     bool json_file::load() {
-        scope_data data;
+        unique_data data;
         if (!load_file_data(path, data))
             return false;
 
diff --git a/liblava/fwd.hpp b/liblava/fwd.hpp
index 38ac363b8e9c94a6eca33d908a4a23488e2cc41d..4ddc2c3dcc2cc0a196c9026c04d634dd550cbcbe 100644
--- a/liblava/fwd.hpp
+++ b/liblava/fwd.hpp
@@ -43,7 +43,8 @@ namespace lava {
     // liblava/core.hpp
     struct data_provider;
     struct data;
-    struct scope_data;
+    struct cdata;
+    struct unique_data;
     struct id;
     struct ids;
     struct id_obj;