diff --git a/Builds/VisualStudio2013/beast.vcxproj b/Builds/VisualStudio2013/beast.vcxproj
index 11786b4c9..5879276db 100644
--- a/Builds/VisualStudio2013/beast.vcxproj
+++ b/Builds/VisualStudio2013/beast.vcxproj
@@ -241,6 +241,7 @@
+
diff --git a/Builds/VisualStudio2013/beast.vcxproj.filters b/Builds/VisualStudio2013/beast.vcxproj.filters
index d58e51fc0..5d38dd3c2 100644
--- a/Builds/VisualStudio2013/beast.vcxproj.filters
+++ b/Builds/VisualStudio2013/beast.vcxproj.filters
@@ -1207,6 +1207,9 @@
beast\utility
+
+ beast\utility
+
diff --git a/beast/utility/ci_char_traits.h b/beast/utility/ci_char_traits.h
new file mode 100644
index 000000000..d319fe059
--- /dev/null
+++ b/beast/utility/ci_char_traits.h
@@ -0,0 +1,86 @@
+//------------------------------------------------------------------------------
+/*
+ This file is part of Beast: https://github.com/vinniefalco/Beast
+ Copyright 2013, Vinnie Falco
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+//==============================================================================
+
+#ifndef BEAST_UTILITY_CI_CHAR_TRAITS_H_INCLUDED
+#define BEAST_UTILITY_CI_CHAR_TRAITS_H_INCLUDED
+
+#include
+#include
+
+namespace beast {
+
+struct ci_char_traits : std::char_traits
+{
+ static
+ bool
+ eq (char c1, char c2)
+ {
+ return ::toupper(c1) ==
+ ::toupper(c2);
+ }
+
+ static
+ bool
+ ne (char c1, char c2)
+ {
+ return ::toupper(c1) !=
+ ::toupper(c2);
+ }
+
+ static
+ bool
+ lt (char c1, char c2)
+ {
+ return ::toupper(c1) <
+ ::toupper(c2);
+ }
+
+ static
+ int
+ compare (char const* s1, char const* s2, std::size_t n)
+ {
+ while (n-- > 0)
+ {
+ auto const comp (
+ int(::toupper(*s1++)) -
+ int(::toupper(*s2++)));
+ if (comp != 0)
+ return comp;
+ }
+ return 0;
+ }
+
+ static
+ char const*
+ find (char const* s, int n, char a)
+ {
+ auto const ua (::toupper(a));
+ for (;n--;)
+ {
+ if (::toupper(*s) == ua)
+ return s;
+ s++;
+ }
+ return nullptr;
+ }
+};
+
+}
+
+#endif