diff --git a/Aegisub.sln b/Aegisub.sln
index 7a20fabea..9d156dcad 100644
--- a/Aegisub.sln
+++ b/Aegisub.sln
@@ -70,6 +70,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PortableInstaller", "aegisu
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boost", "aegisub\build\boost\boost.vcxproj", "{A649D828-A399-4D81-ADEF-94CFDBA7847F}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icu", "aegisub\build\icu\icu.vcxproj", "{F934AB7B-186B-4E96-B20C-A58C38C1B818}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -294,6 +296,17 @@ Global
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Release|Win32.ActiveCfg = Release|Win32
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Release|Win32.Build.0 = Release|Win32
{A649D828-A399-4D81-ADEF-94CFDBA7847F}.Release|x64.ActiveCfg = Release|Win32
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug|Win32.Build.0 = Debug|Win32
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug|x64.ActiveCfg = Debug|x64
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug|x64.Build.0 = Debug|x64
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-MinDep|Win32.ActiveCfg = Debug|Win32
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-MinDep|x64.ActiveCfg = Debug|x64
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Debug-MinDep|x64.Build.0 = Debug|x64
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Release|Win32.ActiveCfg = Release|Win32
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Release|Win32.Build.0 = Release|Win32
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Release|x64.ActiveCfg = Release|x64
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/aegisub/build/Aegisub/Aegisub.vcxproj b/aegisub/build/Aegisub/Aegisub.vcxproj
index 83bdf3af9..1c4205600 100644
--- a/aegisub/build/Aegisub/Aegisub.vcxproj
+++ b/aegisub/build/Aegisub/Aegisub.vcxproj
@@ -63,6 +63,9 @@
{cc791693-6b28-40ac-879d-64a6c16468e3}
+
+ {f934ab7b-186b-4e96-b20c-a58c38c1b818}
+
{bb3fed86-db7a-4dc7-964a-260fb86cde61}
diff --git a/aegisub/build/Aegisub/Aegisub.xml b/aegisub/build/Aegisub/Aegisub.xml
index 6970bb687..b3e04e116 100644
--- a/aegisub/build/Aegisub/Aegisub.xml
+++ b/aegisub/build/Aegisub/Aegisub.xml
@@ -235,6 +235,14 @@
Description="Location of Fontconfig source code."
/>
+
+
..\..\..\deps\freetype2
..\..\..\deps\fribidi
..\..\..\deps\fontconfig
+ ..\..\..\deps\icu\source
..\..\..\deps\libass
..\..\..\deps\wxWidgets
..\..\..\deps\zlib
diff --git a/aegisub/build/icu/icu.vcxproj b/aegisub/build/icu/icu.vcxproj
new file mode 100644
index 000000000..387a374d9
--- /dev/null
+++ b/aegisub/build/icu/icu.vcxproj
@@ -0,0 +1,111 @@
+
+
+
+ {F934AB7B-186B-4E96-B20C-A58C38C1B818}
+ MakeFileProj
+ Makefile
+
+
+
+
+
+
+
+
+ --enable-debug --disable-release CFLAGS=-MDd CXXFLAGS=-MDd
+ --disable-debug --enable-release CFLAGS=-MD CXXFLAGS=-MD
+
+ CC=cl
+ CXX=cl
+ --enable-static
+ --disable-shared
+ --disable-extras
+ --disable-icuio
+ --disable-layout
+ --disable-tests
+ --disable-samples
+ $(CfgDebug)
+
+ $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)$(IcuSrcDir)'))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aegisub/build/icu/mh-msys-msvc b/aegisub/build/icu/mh-msys-msvc
new file mode 100644
index 000000000..d19c4b2c0
--- /dev/null
+++ b/aegisub/build/icu/mh-msys-msvc
@@ -0,0 +1,84 @@
+# ICU's mh-cygwin-msvc doesn't work with msys or Visual Studio 2012.
+# There's a whole bunch of incompatibilities, so this is a complete replacement
+# rather than just a patch.
+
+sbindir=$(bindir)
+CPPFLAGS += -DU_STATIC_IMPLEMENTATION -DUCONFIG_NO_LEGACY_CONVERSION=1 -DU_ENABLE_DYLOAD=0 -DUCONFIG_NO_FILE_IO=1 -DU_CHARSET_IS_UTF8=1
+
+ifeq ($(ENABLE_DEBUG),1)
+CPPFLAGS+=-D_DEBUG=1
+CFLAGS+=-Z7
+CXXFLAGS+=-Z7
+else
+CPPFLAGS+=-DU_RELEASE=1
+endif
+
+CFLAGS+=-GF -nologo
+CXXFLAGS+=-GF -nologo -EHsc -Zc:wchar_t
+CPPFLAGS+=-D_CRT_SECURE_NO_DEPRECATE
+DEFS+=-DWIN32 -DCYGWINMSVC
+LDFLAGS+=-nologo
+
+COMPILE.c= $(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c
+COMPILE.cc= $(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c
+LINK.c= LINK.EXE -subsystem:console $(LDFLAGS)
+LINK.cc= LINK.EXE -subsystem:console $(LDFLAGS)
+
+OUTOPT = -out:
+
+LIBSICU = $(STATIC_PREFIX)$(ICUPREFIX)
+A = lib
+STATIC_O=o
+
+AR = LIB.EXE
+ARFLAGS := -nologo $(ARFLAGS:r=)
+RANLIB = ls -s
+AR_OUTOPT = -OUT:
+
+IMPORT_LIB_EXT = .lib
+
+LIBPREFIX=
+DEFAULT_LIBS = advapi32.lib
+
+DATA_STUBNAME = dt
+I18N_STUBNAME = in
+LIBICU = $(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)
+
+ifeq ($(wildcard $(LIBDIR)/$(LIBICU)$(DATA_STUBNAME)$(ICULIBSUFFIX).lib),)
+LIBICUDT= $(top_builddir)/stubdata/$(LIBICU)$(DATA_STUBNAME)$(ICULIBSUFFIX).lib
+else
+LIBICUDT= $(LIBDIR)/$(LIBICU)$(DATA_STUBNAME)$(ICULIBSUFFIX).lib
+endif
+LIBICUUC= $(LIBDIR)/$(LIBICU)$(COMMON_STUBNAME)$(ICULIBSUFFIX).lib $(LIBICUDT)
+LIBICUI18N= $(LIBDIR)/$(LIBICU)$(I18N_STUBNAME)$(ICULIBSUFFIX).lib
+LIBICULE= $(LIBDIR)/$(LIBICU)$(LAYOUT_STUBNAME)$(ICULIBSUFFIX).lib
+LIBICULX= $(LIBDIR)/$(LIBICU)$(LAYOUTEX_STUBNAME)$(ICULIBSUFFIX).lib
+LIBICUIO= $(LIBDIR)/$(LIBICU)$(IO_STUBNAME)$(ICULIBSUFFIX).lib
+LIBICUTOOLUTIL= $(LIBDIR)/$(LIBICU)$(TOOLUTIL_STUBNAME)$(ICULIBSUFFIX).lib
+
+LDFLAGSICUDT+= /base:"0x4ad00000" -NOENTRY# The NOENTRY option is required for creating a resource-only DLL.
+LDFLAGSICUUC= /base:"0x4a800000"# in-uc = 1MB
+LDFLAGSICUI18N= /base:"0x4a900000"# io-in = 2MB
+LDFLAGSICUIO= /base:"0x4ab00000"# le-io = 1MB
+LDFLAGSICULE= /base:"0x4ac00000"# lx-le = 512KB
+LDFLAGSICULX= /base:"0x4ac80000"
+LDFLAGSICUTOOLUTIL= /base:"0x4ac00000"# Same as layout. Layout and tools probably won't mix.
+
+%.o: $(srcdir)/%.c
+ $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -Fo$@ $<
+
+%.o: $(srcdir)/%.cpp
+ $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -Fo$@ $<
+
+%.res : $(srcdir)/%.rc
+ rc.exe -fo$@ $(CPPFLAGS) $<
+
+ICUPKGDATA_INSTALL_DIR = $(libdir)
+
+ICULIBSUFFIX_VERSION = $(LIB_VERSION_MAJOR)
+
+INSTALL-L=$(INSTALL_PROGRAM)
+
+LDLIBRARYPATH_ENVVAR = PATH
+
+PKGDATA_INVOKE_OPTS = MAKEFLAGS=
diff --git a/aegisub/build/respack/respack.vcxproj b/aegisub/build/respack/respack.vcxproj
index a16129363..ed6fc0a96 100644
--- a/aegisub/build/respack/respack.vcxproj
+++ b/aegisub/build/respack/respack.vcxproj
@@ -23,6 +23,7 @@
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ $(AegisubLibraryDir);%(AdditionalLibraryDirectories)
Console
diff --git a/aegisub/build/standard-settings.props b/aegisub/build/standard-settings.props
index 5998f4617..c82aa3079 100644
--- a/aegisub/build/standard-settings.props
+++ b/aegisub/build/standard-settings.props
@@ -25,6 +25,7 @@
$(AegisubSourceBase)src\msvc;
$(AegisubSourceBase)\include;
$(BoostPath);
+ $(IcuSrcDir)\include;
%(AdditionalIncludeDirectories)
4345