Index: ruby/qtruby/src/handlers.cpp
===================================================================
--- ruby/qtruby/src/handlers.cpp	(revision 1026859)
+++ ruby/qtruby/src/handlers.cpp	(working copy)
@@ -2516,6 +2516,7 @@
     { "QwtArray<int>&", marshall_QVectorint },
     { "signed int&", marshall_it<int *> },
     { "uchar*", marshall_ucharP },
+    { "unsigned char*", marshall_ucharP },
     { "unsigned long long int", marshall_it<long long> },
     { "unsigned long long int&", marshall_it<long long> },
     { "void", marshall_void },
Index: ruby/qtruby/src/Qt.cpp
===================================================================
--- ruby/qtruby/src/Qt.cpp	(revision 1026859)
+++ ruby/qtruby/src/Qt.cpp	(working copy)
@@ -269,7 +269,8 @@
 		methodName += (sizeof("operator") - 1);
 	}
 		// If the virtual method hasn't been overriden, just call the C++ one.
-	if (rb_respond_to(obj, rb_intern(methodName)) == 0) {
+		// During GC, avoid checking for override and just call the C++ version
+	if (rb_during_gc() || rb_respond_to(obj, rb_intern(methodName)) == 0) {
     	return false;
 	}
 	QtRuby::VirtualMethodCall c(smoke, method, args, obj, ALLOCA_N(VALUE, smoke->methods[method].numArgs));
Index: ruby/qtruby/src/lib/Qt/qtruby4.rb
===================================================================
--- ruby/qtruby/src/lib/Qt/qtruby4.rb	(revision 1026859)
+++ ruby/qtruby/src/lib/Qt/qtruby4.rb	(working copy)
@@ -2361,7 +2361,11 @@
 			if metaObject.indexOfSlot(signature) == -1
 				self.class.slots signature
 			end
+			# This makes a difference between being and not being able
+			# to run with GC.stress= true. Reason unclear.
+			gc_disabled= GC.disable
 			@block = block
+			GC.enable unless gc_disabled
 		end
 
 		def invoke(*args)
@@ -2515,9 +2519,9 @@
 			elsif argtype == 's'
 				if typename =~ /^(const )?((QChar)[*&]?)$/
 					return 3
-				elsif typename =~ /^(?:u?char\*)$/
+				elsif typename =~ /^(?:(u(nsigned )?)?char\*)$/
 					return 2
-				elsif typename =~ /^(?:const u?char\*)$/
+				elsif typename =~ /^(?:const (u(nsigned )?)?char\*)$/
 					return 1
 				elsif typename =~ /^(?:(?:const )?(QString)[*&]?)$/
 					return 4
@@ -3047,7 +3051,7 @@
 	# matter for the intended use in invoking blocks as Qt slots.
 	def instance_exec(*arguments, &block)
 		block.bind(self)[*arguments]
-	end
+	end unless defined? instance_exec
 end
 
 class Proc 
