diff --git a/liblava/base/instance.cpp b/liblava/base/instance.cpp
index 9f5504aaa276a821ab2042fdf977e12419792eff..bf7c51441a27f934e8793b6b7497a0ac445f08ed 100644
--- a/liblava/base/instance.cpp
+++ b/liblava/base/instance.cpp
@@ -38,7 +38,7 @@ bool instance::create(create_param& param, debug_config::ref d, app_info::ref i)
             param.extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
     }
 
-    if (!param.check()) {
+    if (!check(param)) {
 
         log()->error("create instance param");
         return false;
@@ -108,37 +108,6 @@ void instance::destroy() {
     vk_instance = nullptr;
 }
 
-bool instance::create_param::check() const {
-
-    auto layer_properties = enumerate_layer_properties();
-    for (auto const& layer_name : layers) {
-
-        auto itr = std::find_if(layer_properties.begin(), layer_properties.end(), 
-                            [&](VkLayerProperties const& extProp) {
-
-                                return strcmp(layer_name, extProp.layerName) == 0;
-                            });
-
-        if (itr == layer_properties.end())
-            return false;
-    }
-
-    auto extensions_properties = enumerate_extension_properties();
-    for (auto const& ext_name : extensions) {
-
-        auto itr = std::find_if(extensions_properties.begin(), extensions_properties.end(),
-                            [&](VkExtensionProperties const& extProp) {
-
-                                return strcmp(ext_name, extProp.extensionName) == 0;
-                            });
-
-        if (itr == extensions_properties.end())
-            return false;
-    }
-
-    return true;
-}
-
 static VKAPI_ATTR VkBool32 VKAPI_CALL validation_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity,
         VkDebugUtilsMessageTypeFlagsEXT message_type, const VkDebugUtilsMessengerCallbackDataEXT* callback_data, void* user_data) {
 
@@ -253,3 +222,34 @@ internal_version instance::get_version() {
 }
 
 } // lava
+
+bool lava::check(instance::create_param::ref param) {
+
+    auto layer_properties = instance::enumerate_layer_properties();
+    for (auto const& layer_name : param.layers) {
+
+        auto itr = std::find_if(layer_properties.begin(), layer_properties.end(),
+                            [&](VkLayerProperties const& extProp) {
+
+                                return strcmp(layer_name, extProp.layerName) == 0;
+                            });
+
+        if (itr == layer_properties.end())
+            return false;
+    }
+
+    auto extensions_properties = instance::enumerate_extension_properties();
+    for (auto const& ext_name : param.extensions) {
+
+        auto itr = std::find_if(extensions_properties.begin(), extensions_properties.end(),
+                            [&](VkExtensionProperties const& extProp) {
+
+                                return strcmp(ext_name, extProp.extensionName) == 0;
+                            });
+
+        if (itr == extensions_properties.end())
+            return false;
+    }
+
+    return true;
+}
diff --git a/liblava/base/instance.hpp b/liblava/base/instance.hpp
index d8ea637bcd8fbfde1f17e4721fb4618420bcdd34..881990845f4bdbea7f4abc31f89f01a47cb818e3 100644
--- a/liblava/base/instance.hpp
+++ b/liblava/base/instance.hpp
@@ -12,10 +12,10 @@ struct instance : no_copy_no_move {
 
     struct create_param {
 
+        using ref = create_param const&;
+
         names layers{};
         names extensions{};
-
-        bool check() const;
     };
 
     struct debug_config {
@@ -87,4 +87,6 @@ private:
     VkDebugUtilsMessengerEXT debug_messenger = 0;
 };
 
+bool check(instance::create_param::ref param);
+
 } // lava