diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index 8e923ea..8f53669 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -307,7 +307,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 				ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (current_method.body))), "self"), ref_call);
 			}
 
-			if (!current_class.is_compact && current_class.get_type_parameters ().size > 0) {
+			if (!current_class.is_compact && !get_ccode_simple_generics (m) && current_class.get_type_parameters ().size > 0) {
 				/* type, dup func, and destroy func fields for generic types */
 				var suffices = new string[] {"type", "dup_func", "destroy_func"};
 				foreach (TypeParameter type_param in current_class.get_type_parameters ()) {
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index d147eb1..8ee8728 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -46,7 +46,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 		bool result = false;
 
 		var cl = m.parent_symbol as Class;
-		if (m is CreationMethod && cl != null && !cl.is_compact) {
+		if (m is CreationMethod && cl != null && !cl.is_compact && !get_ccode_simple_generics (m)) {
 			result = true;
 		}
 
@@ -975,7 +975,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 				}
 				type_param_index++;
 			}
-		} else if (!m.closure && (direction & 1) == 1) {
+		} else if (!m.closure && (direction & 1) == 1 && !get_ccode_simple_generics (m)) {
 			int type_param_index = 0;
 			foreach (var type_param in m.get_type_parameters ()) {
 				cparam_map.set (get_param_pos (0.1 * type_param_index + 0.01), new CCodeParameter ("%s_type".printf (type_param.name.down ()), "GType"));
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7f46a2b..f0de147 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -139,6 +139,7 @@ TESTS = \
 	objects/properties.vala \
 	objects/regex.vala \
 	objects/signals.vala \
+	objects/simple_generics.vala \
 	objects/test-025.vala \
 	objects/test-026.vala \
 	objects/test-029.vala \
diff --git a/tests/objects/simple_generics.vala b/tests/objects/simple_generics.vala
new file mode 100644
index 0000000..1035a09
--- /dev/null
+++ b/tests/objects/simple_generics.vala
@@ -0,0 +1,23 @@
+class Foo<G> : Object {
+	G g;
+
+	[CCode (simple_generics = true)]
+	public Foo (G g) {
+		this.g = g;
+	}
+
+	public G get_g () {
+		return g;
+	}
+}
+
+[CCode (simple_generics = true)]
+G foo<G> (Foo<G> f) {
+	return f.get_g ();
+}
+
+void main () {
+	var f = new Foo<string> ("foo");
+	assert (foo (f) == "foo");
+}
+
