diff -ruN icu/source/common/messagepattern.cpp icu-haiku/source/common/messagepattern.cpp
--- icu/source/common/messagepattern.cpp	2011-07-19 23:16:28.046137344 +0200
+++ icu-haiku/source/common/messagepattern.cpp	2011-08-19 15:48:48.211025920 +0200
@@ -88,8 +88,12 @@
                   int32_t length,
                   UErrorCode &errorCode);
     UBool ensureCapacityForOneMore(int32_t oldLength, UErrorCode &errorCode);
-    UBool memEquals(const MessagePatternList<T, stackCapacity> &other, int32_t length) const {
-        return 0==uprv_memcmp(a.getAlias(), other.a.getAlias(), length*sizeof(T));
+    UBool equals(const MessagePatternList<T, stackCapacity> &other, int32_t length) const {
+		for (int32_t i=0; i<length; ++i) {
+            if (!(a.getAlias()[i] == other.a.getAlias()[i]))
+                return FALSE;
+		}
+        return TRUE;
     }
 
     MaybeStackArray<T, stackCapacity> a;
@@ -309,7 +313,7 @@
         msg==other.msg &&
         // parts.equals(o.parts)
         partsLength==other.partsLength &&
-        (partsLength==0 || partsList->memEquals(*other.partsList, partsLength));
+        (partsLength==0 || partsList->equals(*other.partsList, partsLength));
     // No need to compare numericValues if msg and parts are the same.
 }
 
diff -ruN icu/source/common/normalizer2.cpp icu-haiku/source/common/normalizer2.cpp
--- icu/source/common/normalizer2.cpp	2011-07-19 23:16:24.008912896 +0200
+++ icu-haiku/source/common/normalizer2.cpp	2011-08-19 15:46:55.276824064 +0200
@@ -239,7 +239,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,
                        UnicodeString &safeMiddle,
@@ -250,7 +250,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;
     }
@@ -270,7 +270,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,
                        UnicodeString &safeMiddle,
@@ -313,7 +313,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));
     }
@@ -340,7 +340,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,
                        UnicodeString &safeMiddle,
@@ -351,7 +351,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 -ruN icu/source/common/unicode/bytestrie.h icu-haiku/source/common/unicode/bytestrie.h
--- icu/source/common/unicode/bytestrie.h	2011-07-19 23:16:16.052953088 +0200
+++ icu-haiku/source/common/unicode/bytestrie.h	2011-08-19 15:46:55.331874304 +0200
@@ -338,6 +338,9 @@
         // but the code looks more confusing that way.)
         UVector32 *stack_;
     };
+#if (__GNUC__ == 2)
+    friend class Iterator;
+#endif
 
 private:
     friend class BytesTrieBuilder;
diff -ruN icu/source/common/unicode/bytestriebuilder.h icu-haiku/source/common/unicode/bytestriebuilder.h
--- icu/source/common/unicode/bytestriebuilder.h	2011-07-19 23:16:16.053477376 +0200
+++ icu-haiku/source/common/unicode/bytestriebuilder.h	2011-08-19 15:46:55.333185024 +0200
@@ -141,6 +141,9 @@
     private:
         const char *s;
     };
+#if (__GNUC__ == 2)
+    friend class BTLinearMatchNode;
+#endif
 
     virtual Node *createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length,
                                         Node *nextNode) const;
diff -ruN icu/source/common/unicode/platform.h.in icu-haiku/source/common/unicode/platform.h.in
--- icu/source/common/unicode/platform.h.in	2011-07-19 23:16:18.055574528 +0200
+++ icu-haiku/source/common/unicode/platform.h.in	2011-08-19 15:46:55.346554368 +0200
@@ -299,7 +299,7 @@
 
 #ifdef U_STATIC_IMPLEMENTATION
 #define U_EXPORT
-#elif @U_USE_GCC_VISIBILITY_ATTRIBUTE@
+#elif (@U_USE_GCC_VISIBILITY_ATTRIBUTE@) && (__GNUC__ > 2)
 #define U_EXPORT __attribute__((visibility("default")))
 #elif (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x550) \
    || (defined(__SUNPRO_C) && __SUNPRO_C >= 0x550) 
diff -ruN icu/source/common/unicode/stringtriebuilder.h icu-haiku/source/common/unicode/stringtriebuilder.h
--- icu/source/common/unicode/stringtriebuilder.h	2011-07-19 23:16:18.056623104 +0200
+++ icu-haiku/source/common/unicode/stringtriebuilder.h	2011-08-19 15:46:55.336068608 +0200
@@ -245,6 +245,9 @@
     protected:
         int32_t value;
     };
+#if (__GNUC__ == 2)
+    friend class FinalValueNode;
+#endif
 
     /** @internal */
     class ValueNode : public Node {
@@ -272,6 +275,9 @@
     protected:
         Node *next;
     };
+#if (__GNUC__ == 2)
+    friend class IntermediateValueNode;
+#endif
 
     /** @internal */
     class LinearMatchNode : public ValueNode {
@@ -323,6 +329,9 @@
         int32_t values[kMaxBranchLinearSubNodeLength];
         UChar units[kMaxBranchLinearSubNodeLength];
     };
+#if (__GNUC__ == 2)
+    friend class ListBranchNode;
+#endif
 
     /** @internal */
     class SplitBranchNode : public BranchNode {
@@ -339,6 +348,9 @@
         Node *lessThan;
         Node *greaterOrEqual;
     };
+#if (__GNUC__ == 2)
+    friend class SplitBranchNode;
+#endif
 
     // Branch head node, for writing the actual node lead unit.
     /** @internal */
@@ -354,6 +366,9 @@
         int32_t length;
         Node *next;  // A branch sub-node.
     };
+#if (__GNUC__ == 2)
+    friend class BranchHeadNode;
+#endif
 
     /** @internal */
     virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length,
diff -ruN icu/source/common/unicode/ucharstrie.h icu-haiku/source/common/unicode/ucharstrie.h
--- icu/source/common/unicode/ucharstrie.h	2011-07-19 23:16:18.058720256 +0200
+++ icu-haiku/source/common/unicode/ucharstrie.h	2011-08-19 15:46:55.338165760 +0200
@@ -368,6 +368,9 @@
         // but the code looks more confusing that way.)
         UVector32 *stack_;
     };
+#if (__GNUC__ == 2)
+    friend class Iterator;
+#endif
 
 private:
     friend class UCharsTrieBuilder;
diff -ruN icu/source/common/unicode/ucharstriebuilder.h icu-haiku/source/common/unicode/ucharstriebuilder.h
--- icu/source/common/unicode/ucharstriebuilder.h	2011-07-19 23:16:18.059244544 +0200
+++ icu-haiku/source/common/unicode/ucharstriebuilder.h	2011-08-19 15:46:55.339738624 +0200
@@ -145,6 +145,9 @@
     private:
         const UChar *s;
     };
+#if (__GNUC__ == 2)
+	friend class UCTLinearMatchNode;
+#endif
 
     virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length,
                                         Node *nextNode) const;
diff -ruN icu/source/config/mh-haiku icu-haiku/source/config/mh-haiku
--- icu/source/config/mh-haiku	2011-07-19 23:16:46.026214400 +0200
+++ icu-haiku/source/config/mh-haiku	2011-08-19 15:46:55.328990720 +0200
@@ -17,6 +17,9 @@
 LIBCPPFLAGS =
 THREADSCPPFLAGS =
 
+#
+CPPFLAGS += -D__STDC_ISO_10646__ -DU_CHARSET_IS_UTF8=1
+
 ## Compiler switch to embed a runtime search path
 LD_RPATH=
 LD_RPATH_PRE = -Wl,-rpath,
@@ -31,35 +34,35 @@
 
 ## Compilation rules
 %.$(STATIC_O): $(srcdir)/%.c
-        $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $<
+	$(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $<
 %.o: $(srcdir)/%.c
-        $(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $<
+	$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $<
 
 %.$(STATIC_O): $(srcdir)/%.cpp
-        $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $<
+	$(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $<
 %.o: $(srcdir)/%.cpp
-        $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $<
+	$(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 $@'
+	@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 $@'
+	@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} $@
+	$(RM) $@ && ln -s ${<F} $@
 %.$(SO): %.$(SO).$(SO_TARGET_VERSION_MAJOR)
-        $(RM) $@ && ln -s ${*F}.$(SO).$(SO_TARGET_VERSION) $@
+	$(RM) $@ && ln -s ${*F}.$(SO).$(SO_TARGET_VERSION) $@
 
 ##  Bind internal references
 
diff -ruN icu/source/configure icu-haiku/source/configure
--- icu/source/configure	2011-07-19 23:19:38.029884416 +0200
+++ icu-haiku/source/configure	2011-08-19 15:46:55.287834112 +0200
@@ -7748,6 +7748,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 -ruN icu/source/configure.in icu-haiku/source/configure.in
--- icu/source/configure.in	2011-07-19 23:19:38.029360128 +0200
+++ icu-haiku/source/configure.in	2011-08-19 15:46:55.290717696 +0200
@@ -1286,6 +1286,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 -ruN icu/source/i18n/alphaindex.cpp icu-haiku/source/i18n/alphaindex.cpp
--- icu/source/i18n/alphaindex.cpp	2011-07-19 23:16:04.049545216 +0200
+++ icu-haiku/source/i18n/alphaindex.cpp	2011-08-19 15:46:55.342884352 +0200
@@ -196,7 +196,7 @@
 
     UnicodeSet labelSet;
     for (int32_t psIndex=0; psIndex<preferenceSorting.size(); psIndex++) {
-        UnicodeString item = *static_cast<const UnicodeString *>(preferenceSorting.elementAt(psIndex));
+        UnicodeString item = *static_cast<UnicodeString *>(preferenceSorting.elementAt(psIndex));
         // TODO:  Since preferenceSorting was originally populated from the contents of a UnicodeSet,
         //        is it even possible for duplicates to show up in this check?
         if (labelSet.contains(item)) {
@@ -240,7 +240,7 @@
         int32_t count = 0;
         int32_t old = -1;
         for (int32_t srcIndex=0; srcIndex<labels_->size(); srcIndex++) {
-            const UnicodeString *str = static_cast<const UnicodeString *>(labels_->elementAt(srcIndex));
+            const UnicodeString *str = static_cast<UnicodeString *>(labels_->elementAt(srcIndex));
             ++count;
             const int32_t bump = count * maxLabelCount_ / size;
             if (bump == old) {
@@ -528,7 +528,7 @@
 const UnicodeString &AlphabeticIndex::getOverflowComparisonString(const UnicodeString &lowerLimit, UErrorCode &/*status*/) {
     for (int32_t i=0; i<firstScriptCharacters_->size(); i++) {
         const UnicodeString *s =
-                static_cast<const UnicodeString *>(firstScriptCharacters_->elementAt(i));
+                const_cast<const UnicodeString *>(static_cast<UnicodeString *>(firstScriptCharacters_->elementAt(i)));
         if (collator_->compare(*s, lowerLimit) > 0) {
             return *s;
         }
@@ -735,8 +735,10 @@
 sortCollateComparator(const void *context, const void *left, const void *right) {
     const UHashTok *leftTok = static_cast<const UHashTok *>(left);
     const UHashTok *rightTok = static_cast<const UHashTok *>(right);
-    const UnicodeString *leftString  = static_cast<const UnicodeString *>(leftTok->pointer);
-    const UnicodeString *rightString = static_cast<const UnicodeString *>(rightTok->pointer);
+    const UnicodeString *leftString  
+        = const_cast<const UnicodeString *>(static_cast<UnicodeString *>(leftTok->pointer));
+    const UnicodeString *rightString 
+        = const_cast<const UnicodeString *>(static_cast<UnicodeString *>(rightTok->pointer));
     const Collator *col = static_cast<const Collator *>(context);
 
     if (leftString == rightString) {
@@ -760,8 +762,10 @@
 recordCompareFn(const void *context, const void *left, const void *right) {
     const UHashTok *leftTok = static_cast<const UHashTok *>(left);
     const UHashTok *rightTok = static_cast<const UHashTok *>(right);
-    const AlphabeticIndex::Record *leftRec  = static_cast<const AlphabeticIndex::Record *>(leftTok->pointer);
-    const AlphabeticIndex::Record *rightRec = static_cast<const AlphabeticIndex::Record *>(rightTok->pointer);
+    const AlphabeticIndex::Record *leftRec  
+        = const_cast<const AlphabeticIndex::Record *>(static_cast<AlphabeticIndex::Record *>(leftTok->pointer));
+    const AlphabeticIndex::Record *rightRec 
+        = const_cast<const AlphabeticIndex::Record *>(static_cast<AlphabeticIndex::Record *>(rightTok->pointer));
     const Collator *col = static_cast<const Collator *>(context);
 
     Collator::EComparisonResult r = col->compare(leftRec->sortingName_, rightRec->sortingName_);
@@ -1087,8 +1091,8 @@
 PreferenceComparator(const void *context, const void *left, const void *right) {
     const UHashTok *leftTok  = static_cast<const UHashTok *>(left);
     const UHashTok *rightTok = static_cast<const UHashTok *>(right);
-    const UnicodeString *s1  = static_cast<const UnicodeString *>(leftTok->pointer);
-    const UnicodeString *s2  = static_cast<const UnicodeString *>(rightTok->pointer);
+    const UnicodeString *s1  = const_cast<const UnicodeString *>(static_cast<UnicodeString *>(leftTok->pointer));
+    const UnicodeString *s2  = const_cast<const UnicodeString *>(static_cast<UnicodeString *>(rightTok->pointer));
     UErrorCode &status       = *(UErrorCode *)(context);   // Cast off both static and const.
     if (s1 == s2) {
         return 0;
diff -ruN icu/source/i18n/currfmt.h icu-haiku/source/i18n/currfmt.h
--- icu/source/i18n/currfmt.h	2011-07-19 23:16:00.058720256 +0200
+++ icu-haiku/source/i18n/currfmt.h	2011-08-19 15:46:55.293339136 +0200
@@ -63,7 +63,9 @@
     virtual Format* clone() const;
 
 
+#if (__GNUC__ > 2)
     using MeasureFormat::format;
+#endif
 
     /**
      * Override Format API.
diff -ruN icu/source/i18n/digitlst.cpp icu-haiku/source/i18n/digitlst.cpp
--- icu/source/i18n/digitlst.cpp	2011-07-19 23:16:00.050593792 +0200
+++ icu-haiku/source/i18n/digitlst.cpp	2011-08-19 15:46:55.295698432 +0200
@@ -37,7 +37,9 @@
 #include <limits.h>
 #include <string.h>
 #include <stdio.h>
+#if (__GNUC__ > 2)
 #include <limits>
+#endif
 
 // ***************************************************************************
 // class DigitList
@@ -423,11 +425,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 -ruN icu/source/i18n/reldtfmt.h icu-haiku/source/i18n/reldtfmt.h
--- icu/source/i18n/reldtfmt.h	2011-07-19 23:16:06.034078720 +0200
+++ icu-haiku/source/i18n/reldtfmt.h	2011-08-19 15:46:55.297533440 +0200
@@ -79,7 +79,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 -ruN icu/source/i18n/unicode/alphaindex.h icu-haiku/source/i18n/unicode/alphaindex.h
--- icu/source/i18n/unicode/alphaindex.h	2011-07-19 23:15:52.042467328 +0200
+++ icu-haiku/source/i18n/unicode/alphaindex.h	2011-08-19 15:46:55.344719360 +0200
@@ -588,6 +588,9 @@
          Record(AlphabeticIndex *alphaIndex, const UnicodeString &name, const void *data);
          ~Record();
      };
+#if (__GNUC__ == 2)
+     friend struct Record;
+#endif
 
      /**
        * Holds all user records before they are distributed into buckets.
diff -ruN icu/source/i18n/unicode/choicfmt.h icu-haiku/source/i18n/unicode/choicfmt.h
--- icu/source/i18n/unicode/choicfmt.h	2011-07-19 23:15:52.038797312 +0200
+++ icu-haiku/source/i18n/unicode/choicfmt.h	2011-08-19 15:46:55.300154880 +0200
@@ -352,7 +352,9 @@
     virtual const UnicodeString* getFormats(int32_t& count) const;
 
 
+#if (__GNUC__ > 2)
     using NumberFormat::format;
+#endif
 
     /**
      * Formats a double number using this object's choices.
diff -ruN icu/source/i18n/unicode/datefmt.h icu-haiku/source/i18n/unicode/datefmt.h
--- icu/source/i18n/unicode/datefmt.h	2011-07-19 23:15:52.035389440 +0200
+++ icu-haiku/source/i18n/unicode/datefmt.h	2011-08-19 15:46:55.302514176 +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 -ruN icu/source/i18n/unicode/decimfmt.h icu-haiku/source/i18n/unicode/decimfmt.h
--- icu/source/i18n/unicode/decimfmt.h	2011-07-19 23:15:54.040370176 +0200
+++ icu-haiku/source/i18n/unicode/decimfmt.h	2011-08-19 15:46:55.305397760 +0200
@@ -834,7 +834,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 -ruN icu/source/i18n/unicode/dtitvfmt.h icu-haiku/source/i18n/unicode/dtitvfmt.h
--- icu/source/i18n/unicode/dtitvfmt.h	2011-07-19 23:15:54.042467328 +0200
+++ icu-haiku/source/i18n/unicode/dtitvfmt.h	2011-08-19 15:46:55.307757056 +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 -ruN icu/source/i18n/unicode/msgfmt.h icu-haiku/source/i18n/unicode/msgfmt.h
--- icu/source/i18n/unicode/msgfmt.h	2011-07-19 23:15:54.041156608 +0200
+++ icu-haiku/source/i18n/unicode/msgfmt.h	2011-08-19 15:46:55.310116352 +0200
@@ -615,7 +615,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 -ruN icu/source/i18n/unicode/numfmt.h icu-haiku/source/i18n/unicode/numfmt.h
--- icu/source/i18n/unicode/numfmt.h	2011-07-19 23:15:54.039059456 +0200
+++ icu-haiku/source/i18n/unicode/numfmt.h	2011-08-19 15:46:55.312213504 +0200
@@ -212,8 +212,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 -ruN icu/source/i18n/unicode/plurfmt.h icu-haiku/source/i18n/unicode/plurfmt.h
--- icu/source/i18n/unicode/plurfmt.h	2011-07-19 23:15:52.044040192 +0200
+++ icu-haiku/source/i18n/unicode/plurfmt.h	2011-08-19 15:46:55.314310656 +0200
@@ -281,7 +281,9 @@
     void applyPattern(const UnicodeString& pattern, UErrorCode& status);
 
 
+#if (__GNUC__ > 2)
     using Format::format;
+#endif
 
     /**
      * Formats a plural message for a given number.
diff -ruN icu/source/i18n/unicode/rbnf.h icu-haiku/source/i18n/unicode/rbnf.h
--- icu/source/i18n/unicode/rbnf.h	2011-07-19 23:15:54.034340864 +0200
+++ icu-haiku/source/i18n/unicode/rbnf.h	2011-08-19 15:46:55.316932096 +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 -ruN icu/source/i18n/unicode/selfmt.h icu-haiku/source/i18n/unicode/selfmt.h
--- icu/source/i18n/unicode/selfmt.h	2011-07-19 23:15:52.042991616 +0200
+++ icu-haiku/source/i18n/unicode/selfmt.h	2011-08-19 15:46:55.318767104 +0200
@@ -219,7 +219,9 @@
     void applyPattern(const UnicodeString& pattern, UErrorCode& status);
 
 
+#if (__GNUC__ > 2)
     using Format::format;
+#endif
 
     /**
      * Selects the phrase for  the given keyword
diff -ruN icu/source/i18n/unicode/smpdtfmt.h icu-haiku/source/i18n/unicode/smpdtfmt.h
--- icu/source/i18n/unicode/smpdtfmt.h	2011-07-19 23:15:52.035127296 +0200
+++ icu-haiku/source/i18n/unicode/smpdtfmt.h	2011-08-19 15:46:55.321126400 +0200
@@ -369,7 +369,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 -ruN icu/source/i18n/unicode/tmutfmt.h icu-haiku/source/i18n/unicode/tmutfmt.h
--- icu/source/i18n/unicode/tmutfmt.h	2011-07-19 23:15:54.039583744 +0200
+++ icu-haiku/source/i18n/unicode/tmutfmt.h	2011-08-19 15:46:55.322961408 +0200
@@ -162,7 +162,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 MeasureFormat::format(obj, appendTo, posIter, status);
+    }
+#endif
 
     /**
      * Format a TimeUnitAmount.
diff -ruN icu/source/tools/pkgdata/pkgdata.cpp icu-haiku/source/tools/pkgdata/pkgdata.cpp
--- icu/source/tools/pkgdata/pkgdata.cpp	2011-07-19 23:16:36.003670016 +0200
+++ icu-haiku/source/tools/pkgdata/pkgdata.cpp	2011-08-19 15:46:55.326107136 +0200
@@ -476,7 +476,7 @@
 
 static int runCommand(const char* command, UBool specialHandling) {
     char *cmd = NULL;
-    char cmdBuffer[SMALL_BUFFER_MAX_SIZE];
+    char cmdBuffer[64000];
     int32_t len = strlen(command);
 
     if (len == 0) {
