diff --git a/src/layer/vk_layer_settings_helper.cpp b/src/layer/vk_layer_settings_helper.cpp
index 47e45f0..683d5ea 100644
--- a/src/layer/vk_layer_settings_helper.cpp
+++ b/src/layer/vk_layer_settings_helper.cpp
@@ -8,6 +8,19 @@
 // - Christophe Riccio <christophe@lunarg.com>
 #include "vulkan/layer/vk_layer_settings.hpp"
 
+static std::string Merge(const std::vector<std::string> &strings) {
+    std::string result;
+
+    for (std::size_t i = 0, n = strings.size(); i < n; ++i) {
+        if (!result.empty()) {
+            result += ",";
+        }
+        result += strings[i];
+    }
+
+    return result;
+}
+
 void vlGetLayerSettingValue(VlLayerSettingSet layerSettingSet, const char *pSettingName, bool &settingValue) {
     uint32_t value_count = 1;
     VkBool32 value;
@@ -112,10 +125,9 @@
 }
 
 void vlGetLayerSettingValue(VlLayerSettingSet layerSettingSet, const char *pSettingName, std::string &settingValue) {
-    uint32_t value_count = 1;
-    const char *value;
-    vlGetLayerSettingValues(layerSettingSet, pSettingName, VK_LAYER_SETTING_TYPE_STRING_EXT, &value_count, &value);
-    settingValue = value;
+    std::vector<std::string> values;
+    vlGetLayerSettingValues(layerSettingSet, pSettingName, values);
+    settingValue = Merge(values);
 }
 
 void vlGetLayerSettingValues(VlLayerSettingSet layerSettingSet, const char *pSettingName, std::vector<std::string> &settingValues) {
diff --git a/tests/layer/test_setting_cpp.cpp b/tests/layer/test_setting_cpp.cpp
index 170615d..81fccf9 100644
--- a/tests/layer/test_setting_cpp.cpp
+++ b/tests/layer/test_setting_cpp.cpp
@@ -334,7 +334,6 @@
     vlDestroyLayerSettingSet(layerSettingSet, nullptr);
 }
 
-
 TEST(test_layer_setting_cpp, vlGetLayerSettingValue_String) {
     const char* value_data[] = {"VALUE_A"};
 
@@ -352,6 +351,27 @@
     vlDestroyLayerSettingSet(layerSettingSet, nullptr);
 }
 
+TEST(test_layer_setting_cpp, vlGetLayerSettingValue_Strings) {
+    const char* values_data[] = {"VALUE_A", "VALUE_B"};
+    const uint32_t value_count = static_cast<uint32_t>(std::size(values_data));
+
+    const VkLayerSettingEXT settings[] = {
+        {"VK_LAYER_LUNARG_test", "my_setting", VK_LAYER_SETTING_TYPE_STRING_EXT, value_count, {values_data}}
+    };
+    const uint32_t settings_size = static_cast<uint32_t>(std::size(settings));
+
+    const VkLayerSettingsCreateInfoEXT layer_settings_create_info{VK_STRUCTURE_TYPE_LAYER_SETTINGS_EXT, nullptr, settings_size, settings};
+
+    VlLayerSettingSet layerSettingSet = VK_NULL_HANDLE;
+    vlCreateLayerSettingSet("VK_LAYER_LUNARG_test", &layer_settings_create_info, nullptr, nullptr, &layerSettingSet);
+
+    std::string value;
+    vlGetLayerSettingValue(layerSettingSet, "my_setting", value);
+    EXPECT_STREQ("VALUE_A,VALUE_B", value.c_str());
+
+    vlDestroyLayerSettingSet(layerSettingSet, nullptr);
+}
+
 TEST(test_layer_setting_cpp, vlGetLayerSettingValues_String) {
     const char* values_data[] = {"VALUE_A", "VALUE_B"};
     const uint32_t value_count = static_cast<uint32_t>(std::size(values_data));
