diff --git a/0001-runtime-Fix-support-for-callvirt-delegates-with-a-vt.patch b/0001-runtime-Fix-support-for-callvirt-delegates-with-a-vt.patch
new file mode 100644
index 0000000000..236055bf1f
--- /dev/null
+++ b/0001-runtime-Fix-support-for-callvirt-delegates-with-a-vt.patch
@@ -0,0 +1,71 @@
+From ae495e8bd485f48ecdb7e53d7e98771220f31997 Mon Sep 17 00:00:00 2001
+From: Zoltan Varga <vargaz@gmail.com>
+Date: Wed, 6 May 2015 04:56:52 -0400
+Subject: [PATCH] [runtime] Fix support for callvirt delegates with a vtype
+ first argument. Fixes #29665.
+
+---
+ mcs/class/corlib/Test/System/DelegateTest.cs | 21 +++++++++++++++++++++
+ mono/metadata/marshal.c                      | 17 ++++++++++++-----
+ 2 files changed, 33 insertions(+), 5 deletions(-)
+
+Index: xamarin-pkg-mono/mcs/class/corlib/Test/System/DelegateTest.cs
+===================================================================
+--- xamarin-pkg-mono.orig/mcs/class/corlib/Test/System/DelegateTest.cs	2015-06-13 10:05:39.446662338 +0100
++++ xamarin-pkg-mono/mcs/class/corlib/Test/System/DelegateTest.cs	2015-06-13 10:05:39.438662337 +0100
+@@ -1069,6 +1069,27 @@
+ 			action_int (42);
+ 		}
+ 
++		struct FooStruct {
++			public int i, j, k, l;
++
++			public int GetProp (int a, int b, int c, int d) {
++				return i;
++			}
++		}
++
++		delegate int ByRefDelegate (ref FooStruct s, int a, int b, int c, int d);
++
++#if MONOTOUCH
++		[Category ("NotWorking")]
++#endif
++		[Test]
++		public void CallVirtVType ()
++		{
++			var action = (ByRefDelegate)Delegate.CreateDelegate (typeof (ByRefDelegate), null, typeof (FooStruct).GetMethod ("GetProp"));
++			var s = new FooStruct () { i = 42 };
++			Assert.AreEqual (42, action (ref s, 1, 2, 3, 4));
++		}
++
+ 		class Foo {
+ 
+ 			public void Bar ()
+Index: xamarin-pkg-mono/mono/metadata/marshal.c
+===================================================================
+--- xamarin-pkg-mono.orig/mono/metadata/marshal.c	2015-06-13 10:05:39.446662338 +0100
++++ xamarin-pkg-mono/mono/metadata/marshal.c	2015-06-13 10:05:39.442662338 +0100
+@@ -3248,11 +3248,18 @@
+ 
+ 	if (callvirt) {
+ 		if (!closed_over_null) {
+-			mono_mb_emit_ldarg (mb, 1);
+-			mono_mb_emit_op (mb, CEE_CASTCLASS, target_class);
+-			for (i = 1; i < sig->param_count; ++i)
+-				mono_mb_emit_ldarg (mb, i + 1);
+-			mono_mb_emit_op (mb, CEE_CALLVIRT, target_method);
++			if (target_class->valuetype) {
++				mono_mb_emit_ldarg (mb, 1);
++				for (i = 1; i < sig->param_count; ++i)
++					mono_mb_emit_ldarg (mb, i + 1);
++				mono_mb_emit_op (mb, CEE_CALL, target_method);
++			} else {
++				mono_mb_emit_ldarg (mb, 1);
++				mono_mb_emit_op (mb, CEE_CASTCLASS, target_class);
++				for (i = 1; i < sig->param_count; ++i)
++					mono_mb_emit_ldarg (mb, i + 1);
++				mono_mb_emit_op (mb, CEE_CALLVIRT, target_method);
++			}
+ 		} else {
+ 			mono_mb_emit_byte (mb, CEE_LDNULL);
+ 			for (i = 0; i < sig->param_count; ++i)
diff --git a/add_missing_vb_portable_targets.patch b/add_missing_vb_portable_targets.patch
deleted file mode 100644
index bdefed17db..0000000000
--- a/add_missing_vb_portable_targets.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Index: xamarin-pkg-mono/mcs/tools/xbuild/targets/Microsoft.Portable.VisualBasic_4.0.targets
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ xamarin-pkg-mono/mcs/tools/xbuild/targets/Microsoft.Portable.VisualBasic_4.0.targets	2015-05-15 15:55:12.074775985 +0100
-@@ -0,0 +1,5 @@
-+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-+	<Import Project="..\Microsoft.Portable.Core.props" />
-+	<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
-+	<Import Project="..\Microsoft.Portable.Core.targets" />
-+</Project>
-Index: xamarin-pkg-mono/mcs/tools/xbuild/targets/Microsoft.Portable.VisualBasic_4.5.targets
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ xamarin-pkg-mono/mcs/tools/xbuild/targets/Microsoft.Portable.VisualBasic_4.5.targets	2015-05-15 15:55:19.194775876 +0100
-@@ -0,0 +1,5 @@
-+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-+	<Import Project="..\Microsoft.Portable.Core.props" />
-+	<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
-+	<Import Project="..\Microsoft.Portable.Core.targets" />
-+</Project>
diff --git a/mono-core.spec b/mono-core.spec
index 3ca2e2dc06..6ee57655e2 100644
--- a/mono-core.spec
+++ b/mono-core.spec
@@ -36,7 +36,7 @@ License:        LGPL-2.1 and MIT and MS-PL
 Group:          Development/Languages/Mono
 Url:            http://www.mono-project.com
 Source0:        http://download.mono-project.com/sources/mono/mono-%{version}.tar.bz2
-#Patch0:		add_missing_vb_portable_targets.patch
+Patch0:		0001-runtime-Fix-support-for-callvirt-delegates-with-a-vt.patch
 BuildRequires:  autoconf
 BuildRequires:  automake
 BuildRequires:  bison
@@ -120,7 +120,7 @@ technologies that have been submitted to the ECMA for standardization.
 
 %prep
 %setup -q -n mono-%{__majorver}
-#%patch0 -p1
+%patch0 -p1
 
 %build
 ./autogen.sh