diff --git a/src/third_party/icu/source/common/unistrappender.h b/src/third_party/icu/source/common/unistrappender.h
new file mode 100644
index 0000000..4a459c8
--- /dev/null
+++ b/src/third_party/icu/source/common/unistrappender.h
@@ -0,0 +1,88 @@
+/*
+******************************************************************************
+* Copyright (C) 2015, International Business Machines Corporation and
+* others. All Rights Reserved.
+******************************************************************************
+*
+* File unistrappender.h
+******************************************************************************
+*/
+
+#ifndef __UNISTRAPPENDER_H__
+#define __UNISTRAPPENDER_H__
+
+#include "unicode/unistr.h"
+#include "unicode/uobject.h"
+#include "unicode/utf16.h"
+#include "unicode/utypes.h"
+#include "cmemory.h"
+
+U_NAMESPACE_BEGIN
+
+/**
+ * An optimization for the slowness of calling UnicodeString::append()
+ * one character at a time in a loop. It stores appends in a buffer while
+ * never actually calling append on the unicode string unless the buffer
+ * fills up or is flushed.
+ * 
+ * proper usage:
+ * {
+ *     UnicodeStringAppender appender(astring);
+ *     for (int32_t i = 0; i < 100; ++i) {
+ *        appender.append((UChar) i);
+ *     }
+ *     // appender flushed automatically when it goes out of scope.
+ * }
+ */
+class UnicodeStringAppender : public UMemory {
+public:
+    
+    /**
+     * dest is the UnicodeString being appended to. It must always
+     * exist while this instance exists.
+     */
+    UnicodeStringAppender(UnicodeString &dest) : fDest(&dest), fIdx(0) { }
+
+    inline void append(UChar x) {
+        if (fIdx == UPRV_LENGTHOF(fBuffer)) {
+            fDest->append(fBuffer, 0, fIdx);
+            fIdx = 0;
+        }
+        fBuffer[fIdx++] = x;
+    }
+
+    inline void append(UChar32 x) {
+        if (fIdx >= UPRV_LENGTHOF(fBuffer) - 1) {
+            fDest->append(fBuffer, 0, fIdx);
+            fIdx = 0;
+        }
+        U16_APPEND_UNSAFE(fBuffer, fIdx, x);
+    }
+
+    /**
+     * Ensures that all appended characters have been written out to dest.
+     */
+    inline void flush() {
+        if (fIdx) {
+            fDest->append(fBuffer, 0, fIdx);
+        }
+        fIdx = 0;
+    }
+
+    /**
+     * flush the buffer when we go out of scope.
+     */
+    ~UnicodeStringAppender() {
+        flush();
+    }
+private:
+    UnicodeString *fDest;
+    int32_t fIdx;
+    UChar fBuffer[32];
+    UnicodeStringAppender(const UnicodeStringAppender &other);
+    UnicodeStringAppender &operator=(const UnicodeStringAppender &other);
+};
+
+U_NAMESPACE_END
+
+#endif
