diff --git a/libs/libblade/src/blade_restmgr.c b/libs/libblade/src/blade_restmgr.c
index 9c241e3ef7..69d4551017 100644
--- a/libs/libblade/src/blade_restmgr.c
+++ b/libs/libblade/src/blade_restmgr.c
@@ -106,9 +106,9 @@ void blade_restmgr_handle_exit_context(const struct mg_context *ctx);
 
 static void blade_restmgr_cleanup(void *ptr, void *arg, ks_pool_cleanup_action_t action, ks_pool_cleanup_type_t type)
 {
-	blade_restmgr_t *brestmgr = (blade_restmgr_t *)ptr;
+	//blade_restmgr_t *brestmgr = (blade_restmgr_t *)ptr;
 
-	ks_assert(brestmgr);
+	//ks_assert(brestmgr);
 
 	switch (action) {
 	case KS_MPCL_ANNOUNCE:
diff --git a/libs/libblade/switchblade/switchblade.c b/libs/libblade/switchblade/switchblade.c
index e18dff0b80..5c4b89c70e 100644
--- a/libs/libblade/switchblade/switchblade.c
+++ b/libs/libblade/switchblade/switchblade.c
@@ -140,15 +140,23 @@ void command_quit(blade_handle_t *bh, char *args)
 int rest_service_test(blade_restmgr_t *brestmgr, struct mg_connection *conn, const char **captures)
 {
 	const struct mg_request_info *info = NULL;
+	cJSON *json = NULL;
+	cJSON *json_captures = NULL;
 	ks_sb_t *sb = NULL;
 
+	json = cJSON_CreateObject();
+
 	ks_sb_create(&sb, NULL, 0);
 
 	info = mg_get_request_info(conn);
 
-	ks_sb_printf(sb, "Method: %s\n", info->request_method);
+	cJSON_AddStringToObject(json, "method", info->request_method);
 
-	for (int i = 0; captures[i]; ++i) ks_sb_printf(sb, "Capture #%d: %s\n", i, captures[i]);
+	cJSON_AddItemToObject(json, "captures", (json_captures = cJSON_CreateArray()));
+
+	for (int i = 0; captures[i]; ++i) cJSON_AddItemToArray(json_captures, cJSON_CreateString(captures[i]));
+
+	ks_sb_json(sb, json);
 
 	mg_printf(conn,
 		"HTTP/1.1 200 OK\r\n"
@@ -161,6 +169,8 @@ int rest_service_test(blade_restmgr_t *brestmgr, struct mg_connection *conn, con
 
 	ks_sb_destroy(&sb);
 
+	cJSON_Delete(json);
+
 	return 200;
 }
 
diff --git a/libs/libblade/switchblade/switchblade.vcxproj b/libs/libblade/switchblade/switchblade.vcxproj
index de2fb48c5f..0eb09f50e8 100644
--- a/libs/libblade/switchblade/switchblade.vcxproj
+++ b/libs/libblade/switchblade/switchblade.vcxproj
@@ -182,7 +182,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;KS_DECLARE_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <SDLCheck>true</SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)..\win32\openssl\include;$(SolutionDir)..\win32\openssl\include_x64;../src/include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <DisableSpecificWarnings>4090</DisableSpecificWarnings>
@@ -193,6 +193,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;rpcrt4.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff --git a/libs/libblade/test/testcli.vcxproj b/libs/libblade/test/testcli.vcxproj
index 381d842a12..a0c687a67e 100644
--- a/libs/libblade/test/testcli.vcxproj
+++ b/libs/libblade/test/testcli.vcxproj
@@ -182,7 +182,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;KS_DECLARE_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <SDLCheck>true</SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)..\win32\openssl\include;$(SolutionDir)..\win32\openssl\include_x64;../src/include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <DisableSpecificWarnings>4090</DisableSpecificWarnings>
@@ -193,6 +193,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;rpcrt4.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff --git a/libs/libblade/test/testcon.vcxproj b/libs/libblade/test/testcon.vcxproj
index ffa9af660d..513324ec69 100644
--- a/libs/libblade/test/testcon.vcxproj
+++ b/libs/libblade/test/testcon.vcxproj
@@ -182,7 +182,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;KS_DECLARE_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <SDLCheck>true</SDLCheck>
       <AdditionalIncludeDirectories>$(SolutionDir)..\win32\openssl\include;$(SolutionDir)..\win32\openssl\include_x64;../src/include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <DisableSpecificWarnings>4090</DisableSpecificWarnings>
@@ -193,6 +193,7 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;rpcrt4.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
diff --git a/libs/libks/src/include/ks_sb.h b/libs/libks/src/include/ks_sb.h
index b9b5f1863f..e82da02ca0 100644
--- a/libs/libks/src/include/ks_sb.h
+++ b/libs/libks/src/include/ks_sb.h
@@ -48,6 +48,7 @@ KS_DECLARE(ks_status_t) ks_sb_accommodate(ks_sb_t *sb, ks_size_t len);
 KS_DECLARE(ks_status_t) ks_sb_append(ks_sb_t *sb, const char *str);
 KS_DECLARE(ks_status_t) ks_sb_append_ex(ks_sb_t *sb, const char *str, ks_size_t len);
 KS_DECLARE(ks_status_t) ks_sb_printf(ks_sb_t *sb, const char *fmt, ...);
+KS_DECLARE(ks_status_t) ks_sb_json(ks_sb_t *sb, const cJSON *json);
 
 KS_END_EXTERN_C
 
diff --git a/libs/libks/src/ks_sb.c b/libs/libks/src/ks_sb.c
index acdbb594c0..19219b372d 100644
--- a/libs/libks/src/ks_sb.c
+++ b/libs/libks/src/ks_sb.c
@@ -191,6 +191,28 @@ done:
 	return ret;
 }
 
+KS_DECLARE(ks_status_t) ks_sb_json(ks_sb_t *sb, const cJSON *json)
+{
+	ks_status_t ret = KS_STATUS_SUCCESS;
+	char *str = NULL;
+
+	ks_assert(sb);
+	ks_assert(json);
+
+	str = cJSON_Print(json);
+	if (!str) {
+		ret = KS_STATUS_FAIL;
+		goto done;
+	}
+
+	ks_sb_append(sb, str);
+
+done:
+	if (str) free(str);
+
+	return ret;
+}
+
 
 /* For Emacs:
  * Local Variables: