diff -ruwN icu/source/aclocal.m4 icu-haiku/source/aclocal.m4
--- icu/source/aclocal.m4	2010-04-28 17:28:54.011796480 +0200
+++ icu-haiku/source/aclocal.m4	2010-07-26 14:35:01.820248576 +0200
@@ -59,7 +59,8 @@
 *-*-os400*)	icu_cv_host_frag=mh-os400 ;;
 *-apple-rhapsody*)	icu_cv_host_frag=mh-darwin ;;
 *-apple-darwin*)	icu_cv_host_frag=mh-darwin ;;
-*-*-beos|*-*-haiku)	icu_cv_host_frag=mh-beos ;;
+*-*-beos)	icu_cv_host_frag=mh-beos ;;
+*-*-haiku)	icu_cv_host_frag=mh-haiku ;;
 *-*-irix*)	icu_cv_host_frag=mh-irix ;;
 *-dec-osf*) icu_cv_host_frag=mh-alpha-osf ;;
 *-*-nto*)	icu_cv_host_frag=mh-qnx ;;
diff -ruwN icu/source/common/normalizer2.cpp icu-haiku/source/common/normalizer2.cpp
--- icu/source/common/normalizer2.cpp	2010-04-28 17:27:38.044040192 +0200
+++ icu-haiku/source/common/normalizer2.cpp	2010-07-26 19:29:38.945553408 +0200
@@ -221,7 +221,7 @@
               ReorderingBuffer &buffer, UErrorCode &errorCode) const {
         impl.decompose(src, limit, &buffer, errorCode);
     }
-    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
+//    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
     virtual void
     normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
                        ReorderingBuffer &buffer, UErrorCode &errorCode) const {
@@ -231,7 +231,7 @@
     spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const {
         return impl.decompose(src, limit, NULL, errorCode);
     }
-    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
+//    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
     virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
         return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO;
     }
@@ -251,7 +251,7 @@
               ReorderingBuffer &buffer, UErrorCode &errorCode) const {
         impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode);
     }
-    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
+//    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
     virtual void
     normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
                        ReorderingBuffer &buffer, UErrorCode &errorCode) const {
@@ -293,7 +293,7 @@
     spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const {
         return impl.composeQuickCheck(src, limit, onlyContiguous, NULL);
     }
-    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
+//    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
     virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
         return impl.getCompQuickCheck(impl.getNorm16(c));
     }
@@ -320,7 +320,7 @@
               ReorderingBuffer &buffer, UErrorCode &errorCode) const {
         impl.makeFCD(src, limit, &buffer, errorCode);
     }
-    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
+//    using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
     virtual void
     normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
                        ReorderingBuffer &buffer, UErrorCode &errorCode) const {
@@ -330,7 +330,7 @@
     spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &errorCode) const {
         return impl.makeFCD(src, limit, NULL, errorCode);
     }
-    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
+//    using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
     virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasFCDBoundaryBefore(c); }
     virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasFCDBoundaryAfter(c); }
     virtual UBool isInert(UChar32 c) const { return impl.isFCDInert(c); }
diff -ruwN icu/source/config/mh-haiku icu-haiku/source/config/mh-haiku
--- icu/source/config/mh-haiku	1970-01-01 01:00:00.000000000 +0100
+++ icu-haiku/source/config/mh-haiku	2010-07-26 21:54:15.739246080 +0200
@@ -0,0 +1,82 @@
+## -*-makefile-*-
+## haiku-specific setup
+## Copyright (c) 2009, International Business Machines Corporation and
+## others. All Rights Reserved.
+##
+
+## Commands to generate dependency files
+GEN_DEPS.c=  $(CC) -E -MM $(DEFS) $(CPPFLAGS)
+GEN_DEPS.cc= $(CXX) -E -MM $(DEFS) $(CPPFLAGS)
+
+## Flags for position independent code
+SHAREDLIBCFLAGS = -fPIC
+SHAREDLIBCXXFLAGS = -fPIC
+SHAREDLIBCPPFLAGS = -DPIC
+
+## Additional flags when building libraries and with threads
+LIBCPPFLAGS =
+THREADSCPPFLAGS =
+
+## These are the library specific LDFLAGS
+LDFLAGSICUDT=-nodefaultlibs -nostdlib
+
+## Compiler switch to embed a runtime search path
+LD_RPATH=
+LD_RPATH_PRE = -Wl,-rpath,
+
+## Compiler switch to embed a library name
+LD_SONAME = -Wl,-soname -Wl,$(notdir $(MIDDLE_SO_TARGET))
+
+## Shared library options
+LD_SOOPTIONS= -Wl,-Bsymbolic
+
+## Shared object suffix
+SO = so
+## Non-shared intermediate object suffix
+STATIC_O = ao
+
+## Compilation rules
+%.$(STATIC_O): $(srcdir)/%.c
+	$(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $<
+%.o: $(srcdir)/%.c
+	$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $<
+
+%.$(STATIC_O): $(srcdir)/%.cpp
+	$(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $<
+%.o: $(srcdir)/%.cpp
+	$(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $<
+
+
+## Dependency rules
+%.d: $(srcdir)/%.c
+	@echo "generating dependency information for $<"
+	@$(SHELL) -ec '$(GEN_DEPS.c) $< \
+		| sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \
+		[ -s $@ ] || rm -f $@'
+
+%.d: $(srcdir)/%.cpp
+	@echo "generating dependency information for $<"
+	@$(SHELL) -ec '$(GEN_DEPS.cc) $< \
+		| sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \
+		[ -s $@ ] || rm -f $@'
+
+## Versioned libraries rules
+
+%.$(SO).$(SO_TARGET_VERSION_MAJOR): %.$(SO).$(SO_TARGET_VERSION)
+	$(RM) $@ && ln -s ${<F} $@
+%.$(SO): %.$(SO).$(SO_TARGET_VERSION_MAJOR)
+	$(RM) $@ && ln -s ${*F}.$(SO).$(SO_TARGET_VERSION) $@
+
+##  Bind internal references
+
+# LDflags that pkgdata will use
+BIR_LDFLAGS= -Wl,-Bsymbolic
+
+# Dependencies [i.e. map files] for the final library
+BIR_DEPS=
+
+# Use LIBRARY_PATH instead of LD_LIBRARY_PATH
+LDLIBRARYPATH_ENVVAR= LIBRARY_PATH
+
+## End haiku-specific setup
+
diff -ruwN icu/source/configure icu-haiku/source/configure
--- icu/source/configure	2010-04-28 17:28:54.051904512 +0200
+++ icu-haiku/source/configure	2010-07-26 17:24:25.573308928 +0200
@@ -5501,7 +5501,8 @@
 *-*-os400*)	icu_cv_host_frag=mh-os400 ;;
 *-apple-rhapsody*)	icu_cv_host_frag=mh-darwin ;;
 *-apple-darwin*)	icu_cv_host_frag=mh-darwin ;;
-*-*-beos|*-*-haiku)	icu_cv_host_frag=mh-beos ;;
+*-*-beos)	icu_cv_host_frag=mh-beos ;;
+*-*-haiku)	icu_cv_host_frag=mh-haiku ;;
 *-*-irix*)	icu_cv_host_frag=mh-irix ;;
 *-dec-osf*) icu_cv_host_frag=mh-alpha-osf ;;
 *-*-nto*)	icu_cv_host_frag=mh-qnx ;;
@@ -11425,6 +11426,7 @@
 	*-*-nto*)	platform=U_QNX ;;
 	*-dec-osf*) 	platform=U_OSF ;;
 	*-*-beos)		platform=U_BEOS ;;
+	*-*-haiku)		platform=U_HAIKU ;;
 	*-*-irix*)		platform=U_IRIX ;;
 	*-ncr-*)		platform=U_MPRAS ;;
 	*) 		platform=U_UNKNOWN_PLATFORM ;;
diff -ruwN icu/source/configure.in icu-haiku/source/configure.in
--- icu/source/configure.in	2010-04-28 17:28:54.012845056 +0200
+++ icu-haiku/source/configure.in	2010-07-26 17:23:17.328728576 +0200
@@ -1230,6 +1230,7 @@
 	*-*-nto*)	platform=U_QNX ;;
 	*-dec-osf*) 	platform=U_OSF ;;
 	*-*-beos)		platform=U_BEOS ;;
+	*-*-haiku)		platform=U_HAIKU ;;
 	*-*-irix*)		platform=U_IRIX ;;
 	*-ncr-*)		platform=U_MPRAS ;;
 	*) 		platform=U_UNKNOWN_PLATFORM ;;
diff -ruwN icu/source/i18n/currfmt.h icu-haiku/source/i18n/currfmt.h
--- icu/source/i18n/currfmt.h	2010-04-28 17:27:08.025427968 +0200
+++ icu-haiku/source/i18n/currfmt.h	2010-07-26 19:08:17.175636480 +0200
@@ -63,7 +63,9 @@
     virtual Format* clone() const;
 
 
+#if (__GNUC__ != 2)
     using MeasureFormat::format;
+#endif
 
     /**
      * Override Format API.
diff -ruwN icu/source/i18n/digitlst.cpp icu-haiku/source/i18n/digitlst.cpp
--- icu/source/i18n/digitlst.cpp	2010-04-28 17:27:10.042467328 +0200
+++ icu-haiku/source/i18n/digitlst.cpp	2010-07-26 19:06:02.309329920 +0200
@@ -36,7 +36,9 @@
 #include <limits.h>
 #include <string.h>
 #include <stdio.h>
+#if (__GNUC__ != 2)
 #include <limits>
+#endif
 
 // ***************************************************************************
 // class DigitList
@@ -399,11 +401,15 @@
             nonConstThis->fDouble /= -1;
         }
     } else if (isInfinite()) {
+#if (__GNUC__ != 2)
         if (std::numeric_limits<double>::has_infinity) {
             nonConstThis->fDouble = std::numeric_limits<double>::infinity();
         } else {
             nonConstThis->fDouble = std::numeric_limits<double>::max();
         }
+#else
+        nonConstThis->fDouble = DBL_MAX;
+#endif
         if (!isPositive()) {
             nonConstThis->fDouble = -fDouble;
         } 
diff -ruwN icu/source/i18n/reldtfmt.h icu-haiku/source/i18n/reldtfmt.h
--- icu/source/i18n/reldtfmt.h	2010-04-28 17:27:10.049283072 +0200
+++ icu-haiku/source/i18n/reldtfmt.h	2010-07-26 19:08:52.212074496 +0200
@@ -78,7 +78,9 @@
     virtual UBool operator==(const Format& other) const;
 
 
+#if (__GNUC__ != 2)
     using DateFormat::format;
+#endif
 
     /**
      * Format a date or time, which is the standard millis since 24:00 GMT, Jan
diff -ruwN icu/source/i18n/smpdtfmt.cpp icu-haiku/source/i18n/smpdtfmt.cpp
--- icu/source/i18n/smpdtfmt.cpp	2010-04-28 17:27:08.050855936 +0200
+++ icu-haiku/source/i18n/smpdtfmt.cpp	2010-07-26 14:35:01.834142208 +0200
@@ -1054,7 +1054,7 @@
 int32_t
 SimpleDateFormat::parseGMTDefault(const UnicodeString &text, ParsePosition &pos) const {
     int32_t start = pos.getIndex();
-    NumberFormat *currentNumberFormat = getNumberFormat(UDAT_TIMEZONE_RFC_FIELD);
+    NumberFormat *currentNumberFormat = getNumberFormatByIndex(UDAT_TIMEZONE_RFC_FIELD);
 
     if (start + kUtLen + 1 >= text.length()) {
         pos.setErrorIndex(start);
@@ -1465,7 +1465,7 @@
         return;
     }
 
-    currentNumberFormat = getNumberFormat(patternCharIndex);
+    currentNumberFormat = getNumberFormatByIndex(patternCharIndex);
     switch (patternCharIndex) {
 
     // for any "G" symbol, write out the appropriate era string
@@ -1730,7 +1730,7 @@
 //----------------------------------------------------------------------
 
 NumberFormat *
-SimpleDateFormat::getNumberFormat(UDateFormatField index) const {
+SimpleDateFormat::getNumberFormatByIndex(UDateFormatField index) const {
     if (fNumberFormatters != NULL) {
         return fNumberFormatters[index];
     } else {
@@ -2365,7 +2365,7 @@
     }
 
     patternCharIndex = (UDateFormatField)(patternCharPtr - DateFormatSymbols::getPatternUChars());
-    currentNumberFormat = getNumberFormat(patternCharIndex);
+    currentNumberFormat = getNumberFormatByIndex(patternCharIndex);
     UCalendarDateFields field = fgPatternIndexToCalendarField[patternCharIndex];
 
     // If there are any spaces here, skip over them.  If we hit the end
diff -ruwN icu/source/i18n/unicode/choicfmt.h icu-haiku/source/i18n/unicode/choicfmt.h
--- icu/source/i18n/unicode/choicfmt.h	2010-04-28 17:27:04.037486592 +0200
+++ icu-haiku/source/i18n/unicode/choicfmt.h	2010-07-26 18:59:35.882114560 +0200
@@ -441,7 +441,9 @@
     virtual const UnicodeString* getFormats(int32_t& count) const;
 
 
+#if (__GNUC__ != 2)
     using NumberFormat::format;
+#endif
 
     /**
      * Format a double or long number using this object's choices.
diff -ruwN icu/source/i18n/unicode/datefmt.h icu-haiku/source/i18n/unicode/datefmt.h
--- icu/source/i18n/unicode/datefmt.h	2010-04-28 17:27:04.036962304 +0200
+++ icu-haiku/source/i18n/unicode/datefmt.h	2010-07-26 18:57:27.439615488 +0200
@@ -212,7 +212,9 @@
     virtual UBool operator==(const Format&) const;
 
 
+#if (__GNUC__ != 2)
     using Format::format;
+#endif
 
     /**
      * Format an object to produce a string. This method handles Formattable
diff -ruwN icu/source/i18n/unicode/decimfmt.h icu-haiku/source/i18n/unicode/decimfmt.h
--- icu/source/i18n/unicode/decimfmt.h	2010-04-28 17:27:04.032505856 +0200
+++ icu-haiku/source/i18n/unicode/decimfmt.h	2010-07-26 21:37:12.587202560 +0200
@@ -824,7 +824,16 @@
     virtual UBool operator==(const Format& other) const;
 
 
+#if (__GNUC__ != 2)
     using NumberFormat::format;
+#else
+    virtual UnicodeString& format(const Formattable& obj,
+                                  UnicodeString& appendTo,
+                                  FieldPositionIterator* posIter,
+                                  UErrorCode& status) const {
+        return NumberFormat::format(obj, appendTo, posIter, status);
+    }
+#endif
 
     /**
      * Format a double or long number using base-10 representation.
diff -ruwN icu/source/i18n/unicode/dtitvfmt.h icu-haiku/source/i18n/unicode/dtitvfmt.h
--- icu/source/i18n/unicode/dtitvfmt.h	2010-04-28 17:27:04.036700160 +0200
+++ icu-haiku/source/i18n/unicode/dtitvfmt.h	2010-07-26 19:12:22.191627264 +0200
@@ -363,7 +363,9 @@
     UBool operator!=(const Format& other) const;
 
 
+#if (__GNUC__ != 2)
     using Format::format;
+#endif
 
     /**
      * Format an object to produce a string. This method handles Formattable
diff -ruwN icu/source/i18n/unicode/msgfmt.h icu-haiku/source/i18n/unicode/msgfmt.h
--- icu/source/i18n/unicode/msgfmt.h	2010-04-28 17:27:04.033554432 +0200
+++ icu-haiku/source/i18n/unicode/msgfmt.h	2010-07-26 18:57:58.825753600 +0200
@@ -584,7 +584,9 @@
     virtual const Format** getFormats(int32_t& count) const;
 
 
+#if (__GNUC__ != 2)
     using Format::format;
+#endif
 
     /**
      * Formats the given array of arguments into a user-readable string.
diff -ruwN icu/source/i18n/unicode/numfmt.h icu-haiku/source/i18n/unicode/numfmt.h
--- icu/source/i18n/unicode/numfmt.h	2010-04-28 17:27:04.037224448 +0200
+++ icu-haiku/source/i18n/unicode/numfmt.h	2010-07-26 18:54:07.820510720 +0200
@@ -234,8 +234,9 @@
      */
     virtual UBool operator==(const Format& other) const;
 
-
+#if (__GNUC__ != 2)
     using Format::format;
+#endif
 
     /**
      * Format an object to produce a string.  This method handles
diff -ruwN icu/source/i18n/unicode/plurfmt.h icu-haiku/source/i18n/unicode/plurfmt.h
--- icu/source/i18n/unicode/plurfmt.h	2010-04-28 17:27:04.031981568 +0200
+++ icu-haiku/source/i18n/unicode/plurfmt.h	2010-07-26 19:00:08.335282176 +0200
@@ -308,7 +308,9 @@
     void applyPattern(const UnicodeString& pattern, UErrorCode& status);
 
 
+#if (__GNUC__ != 2)
     using Format::format;
+#endif
 
     /**
      * Formats a plural message for a given number.
diff -ruwN icu/source/i18n/unicode/rbnf.h icu-haiku/source/i18n/unicode/rbnf.h
--- icu/source/i18n/unicode/rbnf.h	2010-04-28 17:27:04.039845888 +0200
+++ icu-haiku/source/i18n/unicode/rbnf.h	2010-07-26 19:01:11.091226112 +0200
@@ -722,7 +722,9 @@
                           const Locale& locale = Locale::getDefault());
 
 
+#if (__GNUC__ != 2)
   using NumberFormat::format;
+#endif
 
   /**
    * Formats the specified 32-bit number using the default ruleset.
diff -ruwN icu/source/i18n/unicode/selfmt.h icu-haiku/source/i18n/unicode/selfmt.h
--- icu/source/i18n/unicode/selfmt.h	2010-04-28 17:27:04.039583744 +0200
+++ icu-haiku/source/i18n/unicode/selfmt.h	2010-07-26 19:00:39.130547712 +0200
@@ -220,7 +220,9 @@
     void applyPattern(const UnicodeString& pattern, UErrorCode& status);
 
 
+#if (__GNUC__ != 2)
     using Format::format;
+#endif
 
     /**
      * Selects the phrase for  the given keyword
diff -ruwN icu/source/i18n/unicode/smpdtfmt.h icu-haiku/source/i18n/unicode/smpdtfmt.h
--- icu/source/i18n/unicode/smpdtfmt.h	2010-04-28 17:27:04.034603008 +0200
+++ icu-haiku/source/i18n/unicode/smpdtfmt.h	2010-07-26 18:58:52.592969728 +0200
@@ -368,7 +368,9 @@
     virtual UBool operator==(const Format& other) const;
 
 
+#if (__GNUC__ != 2)
     using DateFormat::format;
+#endif
 
     /**
      * Format a date or time, which is the standard millis since 24:00 GMT, Jan
@@ -1021,8 +1023,7 @@
     /**
      * Get the numbering system to be used for a particular field.
      */
-    using DateFormat::getNumberFormat;    // Do not hide visibility of base class function
-    NumberFormat * getNumberFormat(UDateFormatField index) const;
+    NumberFormat * getNumberFormatByIndex(UDateFormatField index) const;
 
     /**
      * Parse the given override string and set up structures for number formats
diff -ruwN icu/source/i18n/unicode/tmutfmt.h icu-haiku/source/i18n/unicode/tmutfmt.h
--- icu/source/i18n/unicode/tmutfmt.h	2010-04-28 17:27:04.037486592 +0200
+++ icu-haiku/source/i18n/unicode/tmutfmt.h	2010-07-26 21:37:12.592969728 +0200
@@ -164,7 +164,16 @@
     void setNumberFormat(const NumberFormat& format, UErrorCode& status);
 
 
+#if (__GNUC__ != 2)
     using MeasureFormat::format;
+#else
+    virtual UnicodeString& format(const Formattable& obj,
+                                  UnicodeString& appendTo,
+                                  FieldPositionIterator* posIter,
+                                  UErrorCode& status) const {
+        return Format::format(obj, appendTo, posIter, status);
+    }
+#endif
 
     /**
      * Format a TimeUnitAmount.
diff -ruwN icu/source/i18n/uspoof_conf.cpp icu-haiku/source/i18n/uspoof_conf.cpp
--- icu/source/i18n/uspoof_conf.cpp	2010-04-28 17:27:08.050069504 +0200
+++ icu-haiku/source/i18n/uspoof_conf.cpp	2010-07-26 19:15:22.253231104 +0200
@@ -106,8 +106,10 @@
 // Conforms to the type signature for a USortComparator in uvector.h
 
 static int8_t U_CALLCONV SPUStringCompare(UHashTok left, UHashTok right) {
-    const SPUString *sL = static_cast<const SPUString *>(left.pointer);
-    const SPUString *sR = static_cast<const SPUString *>(right.pointer);
+    const SPUString *sL = const_cast<const SPUString *>(
+        static_cast<SPUString *>(left.pointer));
+    const SPUString *sR = const_cast<const SPUString *>(
+        static_cast<SPUString *>(right.pointer));
     int32_t lenL = sL->fStr->length();
     int32_t lenR = sR->fStr->length();
     if (lenL < lenR) {
diff -ruwN icu/source/io/unicode/ustream.h icu-haiku/source/io/unicode/ustream.h
--- icu/source/io/unicode/ustream.h	2010-04-28 17:27:52.013369344 +0200
+++ icu-haiku/source/io/unicode/ustream.h	2010-07-26 14:35:01.843055104 +0200
@@ -27,8 +27,13 @@
  */
 
 #if U_IOSTREAM_SOURCE >= 199711
+
+#if (__GNUC__ == 2)
+#include <iostream>
+#else
 #include <istream>
 #include <ostream>
+#endif
 
 U_NAMESPACE_BEGIN
 
diff -ruwN icu/source/tools/gennorm2/n2builder.cpp icu-haiku/source/tools/gennorm2/n2builder.cpp
--- icu/source/tools/gennorm2/n2builder.cpp	2010-04-28 17:27:42.052953088 +0200
+++ icu-haiku/source/tools/gennorm2/n2builder.cpp	2010-07-26 19:18:33.715390976 +0200
@@ -674,7 +674,11 @@
     }
     int32_t length=p->compositions->size();
     for(int32_t i=0; i<length; ++i) {
+#if (__GNUC__ == 2)
+        CompositionPair &pair=(*p->compositions)[i];
+#else
         CompositionPair &pair=p->compositions->at(i);
+#endif
         // 22 bits for the composite character and whether it combines forward.
         UChar32 compositeAndFwd=pair.composite<<1;
         if(getNormRef(pair.composite).compositions!=NULL) {
diff -ruwN icu/source/tools/pkgdata/pkgdata.cpp icu-haiku/source/tools/pkgdata/pkgdata.cpp
--- icu/source/tools/pkgdata/pkgdata.cpp	2010-04-28 17:27:46.008912896 +0200
+++ icu-haiku/source/tools/pkgdata/pkgdata.cpp	2010-07-26 18:30:06.726401024 +0200
@@ -472,7 +472,7 @@
 }
 
 static int runCommand(const char* command, UBool specialHandling) {
-    char cmd[SMALL_BUFFER_MAX_SIZE];
+    char cmd[64000];
 
     if (!specialHandling) {
 #ifdef USING_CYGWIN
