diff --git a/package/uclibc++/Makefile b/package/uclibc++/Makefile
index c8bfc1f3bc57ae712484519e7b59ad1ad3230a8f..15c2bce54bdb9153c1e82d3b009d1b9afe54b2c8 100644
--- a/package/uclibc++/Makefile
+++ b/package/uclibc++/Makefile
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=uclibc++
-PKG_VERSION:=0.2.3
+PKG_VERSION:=0.2.4
 PKG_RELEASE:=1
 
 PKG_SOURCE:=uClibc++-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://cxx.uclibc.org/src/
-PKG_MD5SUM:=fd71a433ce1de85885d658f47885ab30
+PKG_MD5SUM:=394c119363dd8b469fb898442a6764b8
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/uClibc++-$(PKG_VERSION)
 PKG_BUILD_PARALLEL:=1
diff --git a/package/uclibc++/patches/002-path_to_bash.patch b/package/uclibc++/patches/002-path_to_bash.patch
index 05d0e6ff42bdd6e40051df224b634a00284f5a7f..26d88ee4dd9ab0e0e931ca405fd9eb94a4637fd4 100644
--- a/package/uclibc++/patches/002-path_to_bash.patch
+++ b/package/uclibc++/patches/002-path_to_bash.patch
@@ -1,12 +1,11 @@
-diff -ur old/bin/Makefile dev/bin/Makefile
---- old/bin/Makefile	Sat Oct 14 17:49:54 2006
-+++ dev/bin/Makefile	Sat Oct 14 17:57:33 2006
-@@ -13,7 +13,7 @@
+--- a/bin/Makefile
++++ b/bin/Makefile
+@@ -13,7 +13,7 @@ install:
  	$(INSTALL) -m 755 $(WRAPPER) $(PREFIX)$(UCLIBCXX_RUNTIME_BINDIR)
  
- $(WRAPPER):
--	echo '#!/bin/sh' > $(WRAPPER)
-+	echo '#!/usr/bin/env bash' > $(WRAPPER)
- 	echo '' >> $(WRAPPER)
- 	echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $(WRAPPER)
- 	echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $(WRAPPER)
+ $(WRAPPER): Makefile
+-	echo '#!/bin/sh' > $@
++	echo '#!/usr/bin/env bash' > $@
+ 	echo '' >> $@
+ 	echo 'WRAPPER_INCLUDEDIR="$${WRAPPER_INCLUDEDIR:=-I$(UCLIBCXX_RUNTIME_INCLUDEDIR)}"' >> $@
+ 	echo 'WRAPPER_LIBDIR="$${WRAPPER_LIBDIR:=-L$(UCLIBCXX_RUNTIME_LIBDIR)}"' >> $@
diff --git a/package/uclibc++/patches/003-cp_command.patch b/package/uclibc++/patches/003-cp_command.patch
deleted file mode 100644
index 53d0ed7af92d5aef2b8b6a65cad5bf7b9d4fb583..0000000000000000000000000000000000000000
--- a/package/uclibc++/patches/003-cp_command.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -ur old/src/Makefile dev/src/Makefile
---- old/src/Makefile	Sat Oct 14 17:49:54 2006
-+++ dev/src/Makefile	Sat Oct 14 18:02:30 2006
-@@ -25,12 +25,14 @@
- 
- all:	libgcc_eh libsupc $(EXOBJS) $(ALLBIN)
- 
-+CP = cp -fPR
-+
- install:
- 	$(INSTALL) -d $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
- ifneq ($(BUILD_ONLY_STATIC_LIB),y)
- 	$(INSTALL) -m 755 $(SHARED_FULLNAME) \
- 		$(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
--	cp -fa $(SHARED_MAJORNAME) $(LIBNAME).so $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
-+	$(CP) $(SHARED_MAJORNAME) $(LIBNAME).so $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
- endif
- ifeq ($(BUILD_STATIC_LIB),y)
- 	$(INSTALL) -m 644 $(LIBNAME).a $(PREFIX)$(UCLIBCXX_RUNTIME_LIBDIR)
diff --git a/package/uclibc++/patches/004-ccache_fixes.patch b/package/uclibc++/patches/004-ccache_fixes.patch
deleted file mode 100644
index 10ceb792baa76ca86091da4c8fa16ecd5336c635..0000000000000000000000000000000000000000
--- a/package/uclibc++/patches/004-ccache_fixes.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -ruN uClibc++-0.2.2-old/src/abi/libgcc_eh/Makefile uClibc++-0.2.2-new/src/abi/libgcc_eh/Makefile
---- uClibc++-0.2.2-old/src/abi/libgcc_eh/Makefile	2007-06-04 00:51:13.000000000 +0200
-+++ uClibc++-0.2.2-new/src/abi/libgcc_eh/Makefile	2007-09-03 21:51:07.000000000 +0200
-@@ -16,7 +16,7 @@
- #
- #else
- #	echo Binary
--	$(AR) x $(shell CC=$(CC) $(TOPDIR)/scripts/find_libgcc_eh.sh)
-+	$(AR) x $(shell CC="$(CC)" $(TOPDIR)/scripts/find_libgcc_eh.sh)
- #endif
- #endif
- 
-diff -ruN uClibc++-0.2.2-old/src/abi/libsupc/Makefile uClibc++-0.2.2-new/src/abi/libsupc/Makefile
---- uClibc++-0.2.2-old/src/abi/libsupc/Makefile	2007-06-04 00:51:13.000000000 +0200
-+++ uClibc++-0.2.2-new/src/abi/libsupc/Makefile	2007-09-03 21:51:17.000000000 +0200
-@@ -14,7 +14,7 @@
- #
- #else
- #	echo Binary
--	$(AR) x $(shell CC=$(CC) $(TOPDIR)/scripts/find_libsupc.sh)
-+	$(AR) x $(shell CC="$(CC)" $(TOPDIR)/scripts/find_libsupc.sh)
- 	$(RM) -f new_op*.o del_op*.o pure.o new_handler.o eh_alloc.o eh_globals.o
- #
- #endif
diff --git a/package/uclibc++/patches/005-wrapper.patch b/package/uclibc++/patches/005-wrapper.patch
deleted file mode 100644
index b526a901f9019bde6f4e82df32692718ae3bdbbc..0000000000000000000000000000000000000000
--- a/package/uclibc++/patches/005-wrapper.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ruN uClibc++-0.2.2-old/bin/Makefile uClibc++-0.2.2-new/bin/Makefile
---- uClibc++-0.2.2-old/bin/Makefile	2007-09-23 13:46:10.000000000 +0200
-+++ uClibc++-0.2.2-new/bin/Makefile	2007-09-23 13:47:03.000000000 +0200
-@@ -25,7 +25,7 @@
- 	echo 'while [ -n "$$1" ]' >> $(WRAPPER)
- 	echo 'do' >> $(WRAPPER)
- 	echo '	WRAPPER_OPTIONS="$$WRAPPER_OPTIONS $$1"' >> $(WRAPPER)
--	echo '	if [ "$$1" = "-c" -o "$$1" = "-E" -o "$$1" = "-S" ]' >> $(WRAPPER)
-+	echo '	if [ "$$1" = "-c" -o "$$1" = "-E" -o "$$1" = "-S" -o "$$1" = "-MF" ]' >> $(WRAPPER)
- 	echo '	then' >> $(WRAPPER)
- 	echo '		WRAPPER_INCLIB="N"' >> $(WRAPPER)
- 	echo '	fi' >> $(WRAPPER)
diff --git a/package/uclibc++/patches/006-eabi_fix.patch b/package/uclibc++/patches/006-eabi_fix.patch
index 1f5ebcb9d070e3bf66903451220f131b5e652254..893c2d60b6e958011fd05b20124f31c66c5516c2 100644
--- a/package/uclibc++/patches/006-eabi_fix.patch
+++ b/package/uclibc++/patches/006-eabi_fix.patch
@@ -1,8 +1,6 @@
-Index: uClibc++-0.2.2/include/typeinfo
-===================================================================
---- uClibc++-0.2.2.orig/include/typeinfo	2008-02-13 00:37:04.000000000 +0100
-+++ uClibc++-0.2.2/include/typeinfo	2008-02-13 00:37:34.000000000 +0100
-@@ -44,6 +44,7 @@
+--- a/include/typeinfo
++++ b/include/typeinfo
+@@ -44,6 +44,7 @@ namespace __cxxabiv1
    class __class_type_info;
  } // namespace __cxxabiv1
  
@@ -10,7 +8,7 @@ Index: uClibc++-0.2.2/include/typeinfo
  #if !__GXX_WEAK__
    // If weak symbols are not supported, typeinfo names are not merged.
    #define __GXX_MERGED_TYPEINFO_NAMES 0
-@@ -51,6 +52,7 @@
+@@ -51,6 +52,7 @@ namespace __cxxabiv1
    // On platforms that support weak symbols, typeinfo names are merged.
    #define __GXX_MERGED_TYPEINFO_NAMES 1
  #endif
@@ -18,11 +16,9 @@ Index: uClibc++-0.2.2/include/typeinfo
  
  namespace std 
  {
-Index: uClibc++-0.2.2/include/unwind-cxx.h
-===================================================================
---- uClibc++-0.2.2.orig/include/unwind-cxx.h	2008-02-13 00:38:04.000000000 +0100
-+++ uClibc++-0.2.2/include/unwind-cxx.h	2008-02-13 00:40:32.000000000 +0100
-@@ -135,6 +135,7 @@
+--- a/include/unwind-cxx.h
++++ b/include/unwind-cxx.h
+@@ -173,6 +173,7 @@ extern std::unexpected_handler __unexpec
  
  // This is the exception class we report -- "GNUCC++\0".
  const _Unwind_Exception_Class __gxx_exception_class
@@ -30,7 +26,7 @@ Index: uClibc++-0.2.2/include/unwind-cxx.h
  = ((((((((_Unwind_Exception_Class) 'G' 
  	 << 8 | (_Unwind_Exception_Class) 'N')
  	<< 8 | (_Unwind_Exception_Class) 'U')
-@@ -143,6 +144,9 @@
+@@ -181,6 +182,9 @@ const _Unwind_Exception_Class __gxx_exce
       << 8 | (_Unwind_Exception_Class) '+')
      << 8 | (_Unwind_Exception_Class) '+')
     << 8 | (_Unwind_Exception_Class) '\0');
diff --git a/package/uclibc++/patches/010-gcc47x_support.patch b/package/uclibc++/patches/010-gcc47x_support.patch
deleted file mode 100644
index a000813b4c1e0e06258f6d20fe29699c0a541aed..0000000000000000000000000000000000000000
--- a/package/uclibc++/patches/010-gcc47x_support.patch
+++ /dev/null
@@ -1,126 +0,0 @@
---- a/include/associative_base
-+++ b/include/associative_base
-@@ -511,7 +511,7 @@
- 
- 	pair<iterator, bool> insert(const value_type& x){
- 		pair<iterator, bool> retval;
--		iterator location = lower_bound(value_to_key(x));
-+		iterator location = lower_bound(this->value_to_key(x));
- 		retval.second = true;
- 		//Empty list or need to insert at end
- 		if(end() == location){
-@@ -520,7 +520,7 @@
- 			return retval;
- 		}
- 		//Something in the list
--		if(c(value_to_key(x), value_to_key(*location))){
-+		if(c(this->value_to_key(x), this->value_to_key(*location))){
- 			location = backing.insert(location.base_iterator(), x);
- 			retval.first = location;
- 		}else{
-@@ -604,7 +604,7 @@
- 	}
- 
- 	iterator insert(const value_type& x){
--		iterator location = lower_bound(value_to_key(x));
-+		iterator location = lower_bound(this->value_to_key(x));
- 
- 		if(location == begin()){
- 			backing.push_front(x);
---- a/include/fstream
-+++ b/include/fstream
-@@ -72,9 +72,9 @@
- 			pbuffer = new char_type[__UCLIBCXX_IOSTREAM_BUFSIZE__];
- 			gbuffer = new char_type[__UCLIBCXX_IOSTREAM_BUFSIZE__];
- 
--			setp(pbuffer, pbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__);
-+			this->setp(pbuffer, pbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__);
- 			//Position get buffer so that there is no data available
--			setg(gbuffer, gbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__,
-+			this->setg(gbuffer, gbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__,
- 				gbuffer + __UCLIBCXX_IOSTREAM_BUFSIZE__);
- 		}
- 
---- a/include/string
-+++ b/include/string
-@@ -426,7 +426,7 @@
- 	}
- 	_UCXXEXPORT size_type find (Ch c, size_type pos = 0) const{
- 		for(size_type i = pos; i < length(); ++i){
--			if(operator[](i) == c){
-+			if(this->operator[](i) == c){
- 				return i;
- 			}
- 		}
-@@ -456,7 +456,7 @@
- 	_UCXXEXPORT size_type find_first_of(const basic_string& str, size_type pos = 0) const{
- 		for(size_type i = pos; i < length(); ++i){
- 			for(size_type j = 0; j < str.length() ; ++j){
--				if( Tr::eq(str[j], operator[](i)) ){
-+				if( Tr::eq(str[j], this->operator[](i)) ){
- 					return i;
- 				}
- 			}
-@@ -472,7 +472,7 @@
- 	}
- 	_UCXXEXPORT size_type find_first_of(Ch c, size_type pos = 0) const{
- 		for(size_type i = pos; i< length(); ++i){
--			if( Tr::eq(operator[](i), c) ){
-+			if( Tr::eq(this->operator[](i), c) ){
- 				return i;
- 			}
- 		}
-@@ -485,7 +485,7 @@
- 		}
- 		for(size_type i = pos; i >0 ; --i){
- 			for(size_type j = 0 ; j < str.length(); ++j){
--				if( Tr::eq(operator[](i-1), str[j]) ){
-+				if( Tr::eq(this->operator[](i-1), str[j]) ){
- 					return i-1;
- 				}
- 			}
-@@ -503,7 +503,7 @@
- 			pos = length();
- 		}
- 		for(size_type i = pos; i >0 ; --i){
--			if( Tr::eq(operator[](i-1), c) ){
-+			if( Tr::eq(this->operator[](i-1), c) ){
- 				return i-1;
- 			}
- 		}
-@@ -515,7 +515,7 @@
- 		for(size_type i = pos; i < length(); ++i){
- 			foundCharacter = false;
-                         for(size_type j = 0; j < str.length() ; ++j){
--                                if( Tr::eq(str[j], operator[](i)) ){
-+                                if( Tr::eq(str[j], this->operator[](i)) ){
- 					foundCharacter = true;
-                                 }
-                         }
-@@ -534,7 +534,7 @@
- 	}
- 	_UCXXEXPORT size_type find_first_not_of(Ch c, size_type pos = 0) const{
- 		for(size_type i = pos; i < length() ; ++i){
--			if(operator[](i) != c){
-+			if(this->operator[](i) != c){
- 				return i;
- 			}
- 		}
-@@ -546,7 +546,7 @@
- 			xpos = pos;
- 		}
- 		
--		while(xpos != npos && npos != str.find_first_of(at(xpos))){
-+		while(xpos != npos && npos != str.find_first_of(this->at(xpos))){
- 			--xpos;
- 		}
- 
-@@ -564,7 +564,7 @@
- 		if(xpos > pos){
- 			xpos = pos;
- 		}
--		while(xpos != npos && Tr::eq(at(xpos), c)){
-+		while(xpos != npos && Tr::eq(this->at(xpos), c)){
- 			--xpos;
- 		}
- 		return xpos;