[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#985538: marked as done (unblock: vala/0.48.15-1)



Your message dated Fri, 26 Mar 2021 21:32:33 +0000
with message-id <E1lPu4H-0006Na-2R@respighi.debian.org>
and subject line unblock vala
has caused the Debian Bug report #985538,
regarding unblock: vala/0.48.15-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
985538: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=985538
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: ricotz@ubuntu.com

Please unblock package vala

[ Reason ]
Vala 0.48.x series is a Long-Term support version and receives important bug
fixes and binding fixes.

It is part of GNOME SDK and improves the stability of the vala compiler shipped
in Debian.

Upstream summary at
https://gitlab.gnome.org/GNOME/vala/-/commit/10166000cbf8963cfebae5e15fa0f13b15791308

[ Impact ]
Vala is a compiler and affects every reverse-dependency.

[ Tests ]
The vala 0.48.x series is constantly used by current package set of Debian
testing.
The upstream test suite is extended with every release.
http://ci.vala-project.org:8010/builders/vala-0.48/builds/39

[ Risks ]
Vala is a compiler and affects every reverse-dependency.

[ Other info ]
Upstream between 0.48.14 and 0.48.15
https://gitlab.gnome.org/GNOME/vala/-/compare/8b87a6dbc354d5ec4a04fe6f65238e884bbd7211...10166000cbf8963cfebae5e15fa0f13b15791308

unblock vala/0.48.15-1
diff --git a/NEWS b/NEWS
index 782900d78..e78d744d0 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,48 @@
+Vala 0.48.15
+============
+ * Various improvements and bug fixes:
+  - codegen:
+    + More use of get_ccode_type_name()
+    + "_first_array" parameter for params-array is variadic too
+    + Inherit GType from base struct of SimpleType structs
+    + Error for missing type-arguments of HashTable (de)serialization [#1147]
+    + Free intermediate temp-variables of postcondition expression [#80]
+    + Use the one available source_reference for internal error [#436]
+    + Fix access to captured generics in async method of interfaces [#537]
+    + Don't ever create null-aware free macro for GenericType
+    + Don't add generics arguments/parameters to async finish method
+    + Drop inner casts before converting between generics and integers
+    + Include "glib.h" for deprecated symbols (GOBJECT) [#1155]
+  - vala:
+    + Report warning if --target-glib=auto was not evaluated successfully
+    + Fix ownership inheritance of "unowned var" in foreach statement
+    + Add missing null-check in DataType.get_type_signature()
+    + Check array type of declarations for errornous type-arguments
+    + Check (optional) type-arguments of array creation expression
+    + Replace all type parameter occurances in parameters for signal delegate
+    + Improve error for incompatible expressions in conditional expression
+  - gdbus: Don't leak memory of deserialized arguments on error in wrapper method
+  - girparser:
+    + Reuse populated Node.gtype_struct_for instead of resolving again
+    + Evaluate "glib:type-struct" twice to pick up reparented structs
+    + Allow overriding of "Compact" attribute for classes
+    + Handle empty "<type/>" element and report an error
+    + Add support for NoWrapper metadata for methods
+  - testrunner: Include Gio-2.0/gio-2.0 for GIR tests too
+
+ * Bindings:
+  - glib-2.0,gio-2.0: Add some missing type-arguments
+  - gio-2.0: Add some missing NoWrapper and CCode.has_typedef attributes
+  - gnutls: Fix some binding errors
+  - gsl: Fix some binding errors
+  - gtk4: Add Gtk.INVALID_LIST_POSITION [#1151]
+  - gtk4-unix-print: Switch to gir
+  - gtk4: Update to 4.1.2
+  - libwnck-3.0: Update to 3.36.0
+  - linux: Provide Input.Event.input_event_sec/input_event_usec fields [#1152]
+  - vapi: Fix a couple of attribute typos
+  - webkit2gtk-4.0: Update to 2.31.91
+
 Vala 0.48.14
 ============
  * Highlights:
diff --git a/build-aux/testrunner.sh b/build-aux/testrunner.sh
index dd97adb08..6c31fbe76 100755
--- a/build-aux/testrunner.sh
+++ b/build-aux/testrunner.sh
@@ -105,6 +105,7 @@ function sourceheader() {
 			xmlns:glib="http://www.gtk.org/introspection/glib/1.0";>
   <include name="GLib" version="2.0"/>
   <include name="GObject" version="2.0"/>
+  <include name="Gio" version="2.0"/>
   <c:include name="test.h"/>
   <namespace name="Test"
 			 version="1.2"
@@ -130,7 +131,8 @@ function sourceend() {
 			echo "  </namespace>" >> $SOURCEFILE
 			echo "</repository>" >> $SOURCEFILE
 		fi
-		echo "$VAPIGEN $VAPIGENFLAGS --library $ns $ns.gir && tail -n +5 $ns.vapi|sed '\$d'|diff -wu $ns.vapi.ref -" > check
+		PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg")
+		echo "$VAPIGEN $VAPIGENFLAGS $PACKAGEFLAGS --library $ns $ns.gir && tail -n +5 $ns.vapi|sed '\$d'|diff -wu $ns.vapi.ref -" > check
 	else
 		PACKAGEFLAGS=$([ -z "$PACKAGES" ] || echo $PACKAGES | xargs -n 1 echo -n " --pkg")
 		echo "$VALAC $VALAFLAGS $PACKAGEFLAGS -o $ns$EXEEXT $SOURCEFILE" >> prepare
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
index b2b2e7e1e..851778171 100644
--- a/codegen/valaccodearraymodule.vala
+++ b/codegen/valaccodearraymodule.vala
@@ -148,7 +148,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 
 		List<CCodeExpression> size = ((GLibValue) value).array_length_cvalues;
 		if (size == null || size.size < dim) {
-			Report.error (null, "internal error: invalid array_length for given dimension");
+			Report.error (array_type.source_reference, "internal: invalid array_length for given dimension");
 			return new CCodeInvalidExpression ();
 		}
 		return size[dim - 1];
diff --git a/codegen/valaccodeattribute.vala b/codegen/valaccodeattribute.vala
index dd5cb8a52..e647b4152 100644
--- a/codegen/valaccodeattribute.vala
+++ b/codegen/valaccodeattribute.vala
@@ -842,7 +842,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 			return "void";
 		} else if (node is ClassType) {
 			var type = (ClassType) node;
-			return "%sClass*".printf (get_ccode_name (type.class_symbol));
+			return "%s*".printf (get_ccode_type_name (type.class_symbol));
 		} else if (node is InterfaceType) {
 			var type = (InterfaceType) node;
 			return "%s*".printf (get_ccode_type_name (type.interface_symbol));
@@ -1014,8 +1014,8 @@ public class Vala.CCodeAttribute : AttributeCache {
 				return get_ccode_upper_case_name (sym, "TYPE_");
 			} else if (sym is Struct) {
 				unowned Struct st = (Struct) sym;
-				if (!get_ccode_has_type_id (st)) {
-					unowned Struct? base_struct = st.base_struct;
+				unowned Struct? base_struct = st.base_struct;
+				if (!get_ccode_has_type_id (st) || (base_struct != null && base_struct.is_simple_type ())) {
 					if (base_struct != null) {
 						return get_ccode_type_id (base_struct);
 					}
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 60c4d34cd..412ec82d4 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -828,7 +828,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 		var cenum = new CCodeEnum (get_ccode_name (en));
 
-		cenum.modifiers |= (en.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
+		if (en.version.deprecated) {
+			if (context.profile == Profile.GOBJECT) {
+				decl_space.add_include ("glib.h");
+			}
+			cenum.modifiers |= CCodeModifiers.DEPRECATED;
+		}
 
 		var current_cfile = cfile;
 		cfile = decl_space;
@@ -1649,6 +1654,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		}
 
 		if (prop.version.deprecated) {
+			if (context.profile == Profile.GOBJECT) {
+				decl_space.add_include ("glib.h");
+			}
 			function.modifiers |= CCodeModifiers.DEPRECATED;
 		}
 
@@ -2834,9 +2842,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 				string method_name = "get_%s_type".printf (type_parameter.name.ascii_down ());
 				var cast_self = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (iface)));
-				cast_self.add_argument (new CCodeIdentifier ("self"));
+				cast_self.add_argument (get_this_cexpression ());
 				var function_call = new CCodeFunctionCall (new CCodeMemberAccess.pointer (cast_self, method_name));
-				function_call.add_argument (new CCodeIdentifier ("self"));
+				function_call.add_argument (get_this_cexpression ());
 				return function_call;
 			}
 
@@ -3461,9 +3469,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 				string method_name = "get_%s_destroy_func".printf (type_parameter.name.ascii_down ());
 				var cast_self = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (iface)));
-				cast_self.add_argument (new CCodeIdentifier ("self"));
+				cast_self.add_argument (get_this_cexpression ());
 				var function_call = new CCodeFunctionCall (new CCodeMemberAccess.pointer (cast_self, method_name));
-				function_call.add_argument (new CCodeIdentifier ("self"));
+				function_call.add_argument (get_this_cexpression ());
 				return function_call;
 			}
 
@@ -3695,7 +3703,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			}
 		}
 
-		if (!is_gcollection && ccall.call is CCodeIdentifier && !(type is ArrayType) && !is_macro_definition) {
+		if (!is_gcollection && ccall.call is CCodeIdentifier && !(type is ArrayType) && !(type is GenericType) && !is_macro_definition) {
 			// generate and use NULL-aware free macro to simplify code
 
 			var freeid = (CCodeIdentifier) ccall.call;
@@ -5926,8 +5934,16 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			generate_type_declaration (actual_type, cfile);
 			result = new CCodeCastExpression (cexpr, get_ccode_name (actual_type));
 		} else if (analyzer.is_signed_integer_type_argument (actual_type)) {
+			// FIXME this should not happen
+			while (cexpr is CCodeCastExpression) {
+				cexpr = ((CCodeCastExpression) cexpr).inner;
+			}
 			result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "gintptr"), get_ccode_name (actual_type));
 		} else if (analyzer.is_unsigned_integer_type_argument (actual_type)) {
+			// FIXME this should not happen
+			while (cexpr is CCodeCastExpression) {
+				cexpr = ((CCodeCastExpression) cexpr).inner;
+			}
 			result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "guintptr"), get_ccode_name (actual_type));
 		}
 		return result;
@@ -5937,8 +5953,16 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		unowned SemanticAnalyzer analyzer = context.analyzer;
 		var result = cexpr;
 		if (analyzer.is_signed_integer_type_argument (actual_type)) {
+			// FIXME this should not happen
+			while (cexpr is CCodeCastExpression) {
+				cexpr = ((CCodeCastExpression) cexpr).inner;
+			}
 			result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "gintptr"), get_ccode_name (pointer_type));
 		} else if (analyzer.is_unsigned_integer_type_argument (actual_type)) {
+			// FIXME this should not happen
+			while (cexpr is CCodeCastExpression) {
+				cexpr = ((CCodeCastExpression) cexpr).inner;
+			}
 			result = new CCodeCastExpression (new CCodeCastExpression (cexpr, "guintptr"), get_ccode_name (pointer_type));
 		}
 		return result;
@@ -6461,6 +6485,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		requires_assert = true;
 
 		ccode.add_expression (cassert);
+
+		foreach (var value in temp_ref_values) {
+			ccode.add_expression (destroy_value (value));
+		}
+
+		temp_ref_values.clear ();
 	}
 
 	public unowned DataType? get_this_type () {
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index dd3e0fcf6..b0770a5a0 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -111,7 +111,13 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 		}
 
 		var ctypedef = new CCodeTypeDefinition (get_ccode_name (creturn_type), cfundecl);
-		ctypedef.modifiers |= (d.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
+
+		if (d.version.deprecated) {
+			if (context.profile == Profile.GOBJECT) {
+				decl_space.add_include ("glib.h");
+			}
+			ctypedef.modifiers |= CCodeModifiers.DEPRECATED;
+		}
 
 		decl_space.add_type_declaration (ctypedef);
 	}
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index def8ae955..f15c660ee 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -178,6 +178,9 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 		}
 
 		if (m.version.deprecated) {
+			if (context.profile == Profile.GOBJECT) {
+				decl_space.add_include ("glib.h");
+			}
 			function.modifiers |= CCodeModifiers.DEPRECATED;
 		}
 
@@ -917,7 +920,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 				}
 
 				cparam = new CCodeParameter ("_first_%s".printf (get_ccode_name (param)), ctypename);
-				cparam_map.set (get_param_pos (get_ccode_pos (param), false), cparam);
+				cparam_map.set (get_param_pos (get_ccode_pos (param) - 0.1, true), cparam);
 
 				va_list_name = "_va_list_%s".printf (get_ccode_name (param));
 			}
@@ -979,7 +982,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
 			cparam_map.set (get_param_pos (get_ccode_instance_pos (m)), class_param);
 		}
 
-		if (is_gtypeinstance_creation_method (m)) {
+		if (is_gtypeinstance_creation_method (m) && (direction & 1) == 1) {
 			// memory management for generic types
 			int type_param_index = 0;
 			var cl = (Class) m.parent_symbol;
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index 2eab9e0e1..edd392304 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -77,7 +77,13 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 		}
 
 		var instance_struct = new CCodeStruct ("_%s".printf (get_ccode_name (st)));
-		instance_struct.modifiers |= (st.version.deprecated ? CCodeModifiers.DEPRECATED : 0);
+
+		if (st.version.deprecated) {
+			if (context.profile == Profile.GOBJECT) {
+				decl_space.add_include ("glib.h");
+			}
+			instance_struct.modifiers |= CCodeModifiers.DEPRECATED;
+		}
 
 		foreach (Field f in st.get_fields ()) {
 			if (f.binding == MemberBinding.INSTANCE)  {
diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala
index 6eca1d14a..f0afb3c6a 100644
--- a/codegen/valagdbusservermodule.vala
+++ b/codegen/valagdbusservermodule.vala
@@ -193,6 +193,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 					}
 
 					ccode.close ();
+				} else if (!need_goto_label && m.tree_can_fail && requires_destroy (owned_type)) {
+					need_goto_label = true;
 				}
 			}
 		}
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 7fea7c92e..5d3960ba7 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -75,7 +75,7 @@ public class Vala.GTypeModule : GErrorModule {
 			macro = "(G_TYPE_CHECK_INSTANCE_CAST ((obj), %s, %s))".printf (get_ccode_type_id (cl), get_ccode_name (cl));
 			decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(obj)".printf (get_ccode_type_cast_function (cl)), macro));
 
-			macro = "(G_TYPE_CHECK_CLASS_CAST ((klass), %s, %sClass))".printf (get_ccode_type_id (cl), get_ccode_name (cl));
+			macro = "(G_TYPE_CHECK_CLASS_CAST ((klass), %s, %s))".printf (get_ccode_type_id (cl), get_ccode_type_name (cl));
 			decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(klass)".printf (get_ccode_class_type_function (cl)), macro));
 
 			macro = "(G_TYPE_CHECK_INSTANCE_TYPE ((obj), %s))".printf (get_ccode_type_id (cl));
@@ -84,7 +84,7 @@ public class Vala.GTypeModule : GErrorModule {
 			macro = "(G_TYPE_CHECK_CLASS_TYPE ((klass), %s))".printf (get_ccode_type_id (cl));
 			decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(klass)".printf (get_ccode_class_type_check_function (cl)), macro));
 
-			macro = "(G_TYPE_INSTANCE_GET_CLASS ((obj), %s, %sClass))".printf (get_ccode_type_id (cl), get_ccode_name (cl));
+			macro = "(G_TYPE_INSTANCE_GET_CLASS ((obj), %s, %s))".printf (get_ccode_type_id (cl), get_ccode_type_name (cl));
 			decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(obj)".printf (get_ccode_type_get_function (cl)), macro));
 			decl_space.add_type_declaration (new CCodeNewline ());
 		}
@@ -473,7 +473,7 @@ public class Vala.GTypeModule : GErrorModule {
 		bool has_class_locks = false;
 
 		var instance_priv_struct = new CCodeStruct ("_%sPrivate".printf (get_ccode_name (cl)));
-		var type_priv_struct = new CCodeStruct ("_%sClassPrivate".printf (get_ccode_name (cl)));
+		var type_priv_struct = new CCodeStruct ("_%sPrivate".printf (get_ccode_type_name (cl)));
 
 		if (is_gtypeinstance) {
 			/* create type, dup_func, and destroy_func fields for generic types */
@@ -527,7 +527,7 @@ public class Vala.GTypeModule : GErrorModule {
 
 		if (is_gtypeinstance) {
 			if (cl.has_class_private_fields || has_class_locks) {
-				decl_space.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (type_priv_struct.name), new CCodeVariableDeclarator ("%sClassPrivate".printf (get_ccode_name (cl)))));
+				decl_space.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (type_priv_struct.name), new CCodeVariableDeclarator ("%sPrivate".printf (get_ccode_type_name (cl)))));
 			}
 
 			/* only add the *Private struct if it is not empty, i.e. we actually have private data */
@@ -559,7 +559,7 @@ public class Vala.GTypeModule : GErrorModule {
 			if (cl.has_class_private_fields || has_class_locks) {
 				decl_space.add_type_definition (type_priv_struct);
 
-				string macro = "(G_TYPE_CLASS_GET_PRIVATE (klass, %s, %sClassPrivate))".printf (get_ccode_type_id (cl), get_ccode_name (cl));
+				string macro = "(G_TYPE_CLASS_GET_PRIVATE (klass, %s, %sPrivate))".printf (get_ccode_type_id (cl), get_ccode_type_name (cl));
 				decl_space.add_type_member_declaration (new CCodeMacroReplacement ("%s(klass)".printf (get_ccode_class_get_private_function (cl)), macro));
 			}
 		}
@@ -1189,7 +1189,7 @@ public class Vala.GTypeModule : GErrorModule {
 		push_context (base_init_context);
 
 		var base_init = new CCodeFunction ("%s_base_init".printf (get_ccode_lower_case_name (cl, null)), "void");
-		base_init.add_parameter (new CCodeParameter ("klass", "%sClass *".printf (get_ccode_name (cl))));
+		base_init.add_parameter (new CCodeParameter ("klass", "%s *".printf (get_ccode_type_name (cl))));
 		base_init.modifiers = CCodeModifiers.STATIC;
 
 		push_function (base_init);
@@ -1211,7 +1211,7 @@ public class Vala.GTypeModule : GErrorModule {
 		push_context (class_init_context);
 
 		var func = new CCodeFunction ("%s_class_init".printf (get_ccode_lower_case_name (cl, null)));
-		func.add_parameter (new CCodeParameter ("klass", "%sClass *".printf (get_ccode_name (cl))));
+		func.add_parameter (new CCodeParameter ("klass", "%s *".printf (get_ccode_type_name (cl))));
 		func.add_parameter (new CCodeParameter ("klass_data", "gpointer"));
 		func.modifiers = CCodeModifiers.STATIC;
 
@@ -1240,7 +1240,7 @@ public class Vala.GTypeModule : GErrorModule {
 				fundamental_class = fundamental_class.base_class;
 			}
 
-			var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%sClass *".printf (get_ccode_name (fundamental_class)));
+			var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%s *".printf (get_ccode_type_name (fundamental_class)));
 			var finalize_assignment = new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, "finalize"), new CCodeIdentifier ("%sfinalize".printf (get_ccode_lower_case_prefix (cl))));
 			ccode.add_expression (finalize_assignment);
 		}
@@ -1266,7 +1266,7 @@ public class Vala.GTypeModule : GErrorModule {
 
 				CCodeExpression cfunc = new CCodeIdentifier (get_ccode_real_name (m));
 				cfunc = cast_method_pointer (m.base_method, cfunc, base_type, (m.coroutine ? 1 : 3));
-				var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%sClass *".printf (get_ccode_name (base_type)));
+				var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%s *".printf (get_ccode_type_name (base_type)));
 				ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_vfunc_name (m.base_method)), cfunc);
 
 				if (m.coroutine) {
@@ -1283,7 +1283,7 @@ public class Vala.GTypeModule : GErrorModule {
 				continue;
 			}
 
-			var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%sClass *".printf (get_ccode_name (cl)));
+			var ccast = new CCodeCastExpression (new CCodeIdentifier ("klass"), "%s *".printf (get_ccode_type_name (cl)));
 			ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_vfunc_name (sig.default_handler)), new CCodeIdentifier (get_ccode_real_name (sig.default_handler)));
 		}
 
@@ -1690,7 +1690,7 @@ public class Vala.GTypeModule : GErrorModule {
 		var function = new CCodeFunction ("%s_class_finalize".printf (get_ccode_lower_case_name (cl, null)), "void");
 		function.modifiers = CCodeModifiers.STATIC;
 
-		function.add_parameter (new CCodeParameter ("klass", "%sClass *".printf (get_ccode_name (cl))));
+		function.add_parameter (new CCodeParameter ("klass", "%s *".printf (get_ccode_type_name (cl))));
 
 		push_function (function);
 
@@ -1712,7 +1712,7 @@ public class Vala.GTypeModule : GErrorModule {
 		var function = new CCodeFunction ("%s_base_finalize".printf (get_ccode_lower_case_name (cl, null)), "void");
 		function.modifiers = CCodeModifiers.STATIC;
 
-		function.add_parameter (new CCodeParameter ("klass", "%sClass *".printf (get_ccode_name (cl))));
+		function.add_parameter (new CCodeParameter ("klass", "%s *".printf (get_ccode_type_name (cl))));
 		function.add_parameter (new CCodeParameter ("klass_data", "gpointer"));
 
 		push_function (function);
@@ -2187,7 +2187,7 @@ public class Vala.GTypeModule : GErrorModule {
 		push_context (new EmitContext (iface));
 
 		var default_init = new CCodeFunction ("%s_default_init".printf (get_ccode_lower_case_name (iface, null)), "void");
-		default_init.add_parameter (new CCodeParameter ("iface", "%sIface *".printf (get_ccode_name (iface))));
+		default_init.add_parameter (new CCodeParameter ("iface", "%s *".printf (get_ccode_type_name (iface))));
 		default_init.add_parameter (new CCodeParameter ("iface_data", "gpointer"));
 		default_init.modifiers = CCodeModifiers.STATIC;
 
diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala
index bd45a7738..d4719b906 100644
--- a/codegen/valagvariantmodule.vala
+++ b/codegen/valagvariantmodule.vala
@@ -468,7 +468,10 @@ public class Vala.GVariantModule : GValueModule {
 		string value_name = "_tmp%d_".printf (next_temp_var_id++);
 
 		var type_args = type.get_type_arguments ();
-		assert (type_args.size == 2);
+		if (type_args.size != 2) {
+			Report.error (type.source_reference, "Missing type-arguments for GVariant deserialization of `%s'".printf (type.type_symbol.get_full_name ()));
+			return new CCodeInvalidExpression ();
+		}
 		var key_type = type_args.get (0);
 		var value_type = type_args.get (1);
 
@@ -785,7 +788,10 @@ public class Vala.GVariantModule : GValueModule {
 		string value_name = "_tmp%d_".printf (next_temp_var_id++);
 
 		var type_args = type.get_type_arguments ();
-		assert (type_args.size == 2);
+		if (type_args.size != 2) {
+			Report.error (type.source_reference, "Missing type-arguments for GVariant serialization of `%s'".printf (type.type_symbol.get_full_name ()));
+			return new CCodeInvalidExpression ();
+		}
 		var key_type = type_args.get (0);
 		var value_type = type_args.get (1);
 
diff --git a/codegen/valatyperegisterfunction.vala b/codegen/valatyperegisterfunction.vala
index eac326312..2150df0d7 100644
--- a/codegen/valatyperegisterfunction.vala
+++ b/codegen/valatyperegisterfunction.vala
@@ -223,7 +223,7 @@ public abstract class Vala.TypeRegisterFunction {
 
 			add_class_private_call = new CCodeFunctionCall (new CCodeIdentifier ("g_type_add_class_private"));
 			add_class_private_call.add_argument (new CCodeIdentifier (type_id_name));
-			add_class_private_call.add_argument (new CCodeIdentifier ("sizeof (%sClassPrivate)".printf (get_ccode_name (type_symbol))));
+			add_class_private_call.add_argument (new CCodeIdentifier ("sizeof (%sPrivate)".printf (get_ccode_type_name (cl))));
 			type_init.add_statement (new CCodeExpressionStatement (add_class_private_call));
 		}
 
diff --git a/doc/vala-gen-introspect.1 b/doc/vala-gen-introspect.1
index 250e2e6aa..48edff8a3 100644
--- a/doc/vala-gen-introspect.1
+++ b/doc/vala-gen-introspect.1
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.48.1.
-.TH VALA-GEN-INTROSPECT "1" "February 2021" "gen-introspect 0.48.14" "User Commands"
+.TH VALA-GEN-INTROSPECT "1" "March 2021" "gen-introspect 0.48.15" "User Commands"
 .SH NAME
 vala-gen-introspect \- generate a GI file for GObject and glib based packages
 .SH SYNOPSIS
diff --git a/doc/valac.1 b/doc/valac.1
index 8af927f0c..0a09d4469 100644
--- a/doc/valac.1
+++ b/doc/valac.1
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.48.1.
-.TH VALAC "1" "February 2021" "Vala 0.48.14" "User Commands"
+.TH VALAC "1" "March 2021" "Vala 0.48.15" "User Commands"
 .SH NAME
 valac \- compiler that translates Vala source code into C source and header files
 .SH SYNOPSIS
diff --git a/doc/valadoc.1 b/doc/valadoc.1
index fd7a785a0..fe893c3ea 100644
--- a/doc/valadoc.1
+++ b/doc/valadoc.1
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.48.1.
-.TH VALADOC "1" "February 2021" "Valadoc 0.48.14" "User Commands"
+.TH VALADOC "1" "March 2021" "Valadoc 0.48.15" "User Commands"
 .SH NAME
 valadoc \- Vala Documentation Tool
 .SH SYNOPSIS
diff --git a/doc/vapigen.1 b/doc/vapigen.1
index ca2e1cd00..54daa1bf4 100644
--- a/doc/vapigen.1
+++ b/doc/vapigen.1
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.48.1.
-.TH VAPIGEN "1" "February 2021" "Vala API Generator 0.48.14" "User Commands"
+.TH VAPIGEN "1" "March 2021" "Vala API Generator 0.48.15" "User Commands"
 .SH NAME
 vapigen \- generate a Vala API
 .SH SYNOPSIS
diff --git a/tests/annotations/deprecated-delegate-minimal.vala b/tests/annotations/deprecated-delegate-minimal.vala
new file mode 100644
index 000000000..3e34e8657
diff --git a/tests/annotations/deprecated-enum-minimal.vala b/tests/annotations/deprecated-enum-minimal.vala
new file mode 100644
index 000000000..91f0be73e
diff --git a/tests/annotations/deprecated-method-minimal.vala b/tests/annotations/deprecated-method-minimal.vala
new file mode 100644
index 000000000..99aba27e8
diff --git a/tests/annotations/deprecated-property-minimal.vala b/tests/annotations/deprecated-property-minimal.vala
new file mode 100644
index 000000000..a52e7733f
diff --git a/tests/annotations/deprecated-struct-minimal.vala b/tests/annotations/deprecated-struct-minimal.vala
new file mode 100644
index 000000000..6b1c34493
diff --git a/tests/basic-types/gvariants-hashtable-missing-type-arguments.test b/tests/basic-types/gvariants-hashtable-missing-type-arguments.test
new file mode 100644
index 000000000..2ce71ded5
diff --git a/tests/generics/gvariant-serialization.test b/tests/generics/gvariant-serialization.test
new file mode 100644
index 000000000..e9f9ad593
diff --git a/tests/generics/integer-member-access.vala b/tests/generics/integer-member-access.vala
new file mode 100644
index 000000000..47dc31a13
diff --git a/tests/gir/async-creation-method.test b/tests/gir/async-creation-method.test
new file mode 100644
index 000000000..fccafb0b8
diff --git a/tests/gir/method-class.test b/tests/gir/method-class.test
new file mode 100644
index 000000000..adb7ec105
diff --git a/tests/gir/method-nowrapper.test b/tests/gir/method-nowrapper.test
new file mode 100644
index 000000000..ed2c1deca
diff --git a/tests/gir/signal-virtual.test b/tests/gir/signal-virtual.test
new file mode 100644
index 000000000..b0073eddd
diff --git a/tests/methods/params-array-with-throws.vala b/tests/methods/params-array-with-throws.vala
new file mode 100644
index 000000000..9bffd6680
diff --git a/tests/methods/postconditions-temp-variables.vala b/tests/methods/postconditions-temp-variables.vala
new file mode 100644
index 000000000..46414725d
diff --git a/tests/methods/preconditions-temp-variables.vala b/tests/methods/preconditions-temp-variables.vala
new file mode 100644
index 000000000..b116166bb
diff --git a/tests/objects/bug626038-2.vala b/tests/objects/bug626038-2.vala
new file mode 100644
index 000000000..2a2422846
diff --git a/tests/objects/interface-async-captured-generic.vala b/tests/objects/interface-async-captured-generic.vala
new file mode 100644
index 000000000..ae51d676a
diff --git a/tests/posix/string-concat.vala b/tests/posix/string-concat.vala
new file mode 100644
index 000000000..ead6abeed
diff --git a/tests/semantic/array-invalid-type-argument.test b/tests/semantic/array-invalid-type-argument.test
new file mode 100644
index 000000000..89e6d4039
diff --git a/tests/semantic/array-too-few-type-arguments.test b/tests/semantic/array-too-few-type-arguments.test
new file mode 100644
index 000000000..3161b5b3e
diff --git a/tests/semantic/array-too-many-type-arguments.test b/tests/semantic/array-too-many-type-arguments.test
new file mode 100644
index 000000000..84d64e83f
diff --git a/tests/semantic/assignment-fixed-array-length.test b/tests/semantic/assignment-fixed-array-length.test
new file mode 100644
index 000000000..5de56ba56
diff --git a/tests/semantic/conditional-expression-incompatible.test b/tests/semantic/conditional-expression-incompatible.test
new file mode 100644
index 000000000..1d8c108c3
diff --git a/tests/structs/gtype-base-struct.vala b/tests/structs/gtype-base-struct.vala
new file mode 100644
index 000000000..3a4c2b946
diff --git a/vala/valaarraycreationexpression.vala b/vala/valaarraycreationexpression.vala
index 534481562..5e0f46172 100644
--- a/vala/valaarraycreationexpression.vala
+++ b/vala/valaarraycreationexpression.vala
@@ -245,6 +245,12 @@ public class Vala.ArrayCreationExpression : Expression {
 
 		if (element_type != null) {
 			element_type.check (context);
+
+			// check whether there is the expected amount of type-arguments
+			if (!element_type.check_type_arguments (context, true)) {
+				error = true;
+				return false;
+			}
 		}
 
 		if (length_type == null) {
diff --git a/vala/valaarraytype.vala b/vala/valaarraytype.vala
index 588539c12..7fff66b04 100644
--- a/vala/valaarraytype.vala
+++ b/vala/valaarraytype.vala
@@ -324,7 +324,18 @@ public class Vala.ArrayType : ReferenceType {
 			}
 		}
 
-		return element_type.check (context);
+		if (!element_type.check (context)) {
+			error = true;
+			return false;
+		}
+
+		// check whether there is the expected amount of type-arguments
+		if (!element_type.check_type_arguments (context, true)) {
+			error = true;
+			return false;
+		}
+
+		return true;
 	}
 
 	public override DataType get_actual_type (DataType? derived_instance_type, List<DataType>? method_type_arguments, CodeNode? node_reference) {
diff --git a/vala/valaclass.vala b/vala/valaclass.vala
index dcd3ecacc..3fffdb352 100644
--- a/vala/valaclass.vala
+++ b/vala/valaclass.vala
@@ -555,15 +555,9 @@ public class Vala.Class : ObjectTypeSymbol {
 				return false;
 			}
 
-			int n_type_args = base_type_reference.get_type_arguments ().size;
-			int n_type_params = ((ObjectTypeSymbol) base_type_reference.type_symbol).get_type_parameters ().size;
-			if (n_type_args < n_type_params) {
+			// check whether there is the expected amount of type-arguments
+			if (!base_type_reference.check_type_arguments (context)) {
 				error = true;
-				Report.error (base_type_reference.source_reference, "too few type arguments");
-				return false;
-			} else if (n_type_args > n_type_params) {
-				error = true;
-				Report.error (base_type_reference.source_reference, "too many type arguments");
 				return false;
 			}
 		}
diff --git a/vala/valacodecontext.vala b/vala/valacodecontext.vala
index af9afed33..051cc2c00 100644
--- a/vala/valacodecontext.vala
+++ b/vala/valacodecontext.vala
@@ -602,10 +602,13 @@ public class Vala.CodeContext {
 		if (target_glib == "auto") {
 			var available_glib = pkg_config_modversion ("glib-2.0");
 			if (available_glib != null && available_glib.scanf ("%d.%d", out glib_major, out glib_minor) >= 2) {
-				glib_minor -= ++glib_minor % 2;
+				glib_minor++;
+				glib_minor -= glib_minor % 2;
 				set_target_glib_version ("%d.%d".printf (glib_major, glib_minor));
-				return;
+			} else {
+				Report.warning (null, "Could not determine the version of `glib-2.0', target version of glib was not set");
 			}
+			return;
 		}
 
 		glib_major = target_glib_major;
diff --git a/vala/valaconditionalexpression.vala b/vala/valaconditionalexpression.vala
index 868b58108..01983ed25 100644
--- a/vala/valaconditionalexpression.vala
+++ b/vala/valaconditionalexpression.vala
@@ -194,7 +194,8 @@ public class Vala.ConditionalExpression : Expression {
 			value_type = false_expression.value_type.copy ();
 		} else {
 			error = true;
-			Report.error (condition.source_reference, "Incompatible expressions");
+			var source_reference = new SourceReference (true_expression.source_reference.file, true_expression.source_reference.begin, false_expression.source_reference.end);
+			Report.error (source_reference, "Cannot resolve target type from `%s' and `%s'".printf (true_expression.value_type.to_prototype_string (), false_expression.value_type.to_prototype_string ()));
 			return false;
 		}
 
diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala
index bb00ff8cf..209a40821 100644
--- a/vala/valadatatype.vala
+++ b/vala/valadatatype.vala
@@ -497,6 +497,38 @@ public abstract class Vala.DataType : CodeNode {
 		return result;
 	}
 
+	public bool is_generic () {
+		if (this is GenericType) {
+			return true;
+		}
+
+		if (!has_type_arguments ()) {
+			return false;
+		}
+		foreach (var type_arg in type_argument_list) {
+			if (type_arg.is_generic ()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	public void replace_type_parameter (TypeParameter old_type_param, TypeParameter new_type_param) {
+		if (this is GenericType) {
+			unowned GenericType generic_type = (GenericType) this;
+			if (generic_type.type_parameter == old_type_param) {
+				generic_type.type_parameter = new_type_param;
+			}
+			return;
+		}
+		if (!has_type_arguments ()) {
+			return;
+		}
+		foreach (var type_arg in type_argument_list) {
+			type_arg.replace_type_parameter (old_type_param, new_type_param);
+		}
+	}
+
 	/**
 	 * Search for the type parameter in this formal type and match it in
 	 * value_type.
@@ -574,7 +606,12 @@ public abstract class Vala.DataType : CodeNode {
 				str.append_c ('(');
 				foreach (Field f in st.get_fields ()) {
 					if (f.binding == MemberBinding.INSTANCE) {
-						str.append (f.variable_type.get_type_signature (f));
+						var s = f.variable_type.get_type_signature (f);
+						if (s != null) {
+							str.append (s);
+						} else {
+							return null;
+						}
 					}
 				}
 				str.append_c (')');
@@ -612,4 +649,49 @@ public abstract class Vala.DataType : CodeNode {
 			return null;
 		}
 	}
+
+	/**
+	 * Returns whether the given amount of type-argument matches the symbol's count of type-parameters
+	 *
+	 * @param context a CodeContext
+	 * @param allow_none whether no type-argments are allowed
+	 * @return true if successful
+	 */
+	public bool check_type_arguments (CodeContext context, bool allow_none = false) {
+		int n_type_args = get_type_arguments ().size;
+		int expected_n_type_args = 0;
+
+		if (type_symbol is ObjectTypeSymbol) {
+			expected_n_type_args = ((ObjectTypeSymbol) type_symbol).get_type_parameters ().size;
+		} else if (type_symbol is Struct) {
+			expected_n_type_args = ((Struct) type_symbol).get_type_parameters ().size;
+		} else if (type_symbol is Delegate) {
+			expected_n_type_args = ((Delegate) type_symbol).get_type_parameters ().size;
+		} else if (n_type_args > 0) {
+			Report.error (source_reference, "`%s' does not support type arguments".printf (type_symbol.get_full_name ()));
+			error = true;
+			return false;
+		} else {
+			// nothing to do here
+			return true;
+		}
+
+		if ((!allow_none || n_type_args > 0) && n_type_args < expected_n_type_args) {
+			error = true;
+			Report.error (source_reference, "too few type arguments for `%s'".printf (type_symbol.get_full_name ()));
+			return false;
+		} else if ((!allow_none || n_type_args > 0) && n_type_args > expected_n_type_args) {
+			error = true;
+			Report.error (source_reference, "too many type arguments for `%s'".printf (type_symbol.get_full_name ()));
+			return false;
+		}
+
+		foreach (DataType type in get_type_arguments ()) {
+			if (!type.check (context)) {
+				return false;
+			}
+		}
+
+		return true;
+	}
 }
diff --git a/vala/valadelegatetype.vala b/vala/valadelegatetype.vala
index 4029f00af..9821a9e70 100644
--- a/vala/valadelegatetype.vala
+++ b/vala/valadelegatetype.vala
@@ -99,23 +99,9 @@ public class Vala.DelegateType : CallableType {
 			return false;
 		}
 
-		var n_type_params = delegate_symbol.get_type_parameters ().size;
-		var n_type_args = get_type_arguments ().size;
-		if (n_type_args > 0 && n_type_args < n_type_params) {
-			error = true;
-			Report.error (source_reference, "too few type arguments");
+		// check whether there is the expected amount of type-arguments
+		if (!check_type_arguments (context, true)) {
 			return false;
-		} else if (n_type_args > 0 && n_type_args > n_type_params) {
-			error = true;
-			Report.error (source_reference, "too many type arguments");
-			return false;
-		}
-
-		foreach (DataType type in get_type_arguments ()) {
-			if (!type.check (context)) {
-				error = true;
-				return false;
-			}
 		}
 
 		return true;
diff --git a/vala/valaforeachstatement.vala b/vala/valaforeachstatement.vala
index a04076b58..e225047bc 100644
--- a/vala/valaforeachstatement.vala
+++ b/vala/valaforeachstatement.vala
@@ -332,9 +332,10 @@ public class Vala.ForeachStatement : Block {
 		// analyze element type
 		if (type_reference is VarType) {
 			// var type
+			bool value_owned = type_reference.value_owned;
 			type_reference = element_type.copy ();
 			// FIXME Only follows "unowned var" otherwise inherit ownership of element-type
-			if (!type_reference.value_owned) {
+			if (!value_owned) {
 				type_reference.value_owned = false;
 			}
 		} else if (!element_type.compatible (type_reference)) {
@@ -354,9 +355,10 @@ public class Vala.ForeachStatement : Block {
 		// analyze element type
 		if (type_reference is VarType) {
 			// var type
+			bool value_owned = type_reference.value_owned;
 			type_reference = element_type.copy ();
 			// FIXME Only follows "unowned var" otherwise inherit ownership of element-type
-			if (!type_reference.value_owned) {
+			if (!value_owned) {
 				type_reference.value_owned = false;
 			}
 		} else if (!element_type.compatible (type_reference)) {
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index fe9ea451d..5496023c2 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -63,6 +63,7 @@ public class Vala.GirParser : CodeVisitor {
 		VFUNC_NAME,
 		VIRTUAL,
 		ABSTRACT,
+		COMPACT,
 		SEALED,
 		SCOPE,
 		STRUCT,
@@ -93,6 +94,7 @@ public class Vala.GirParser : CodeVisitor {
 		DESTROY_NOTIFY_CNAME,
 		FINISH_VFUNC_NAME,
 		NO_ACCESSOR_METHOD,
+		NO_WRAPPER,
 		CNAME,
 		DELEGATE_TARGET,
 		CTYPE;
@@ -537,6 +539,8 @@ public class Vala.GirParser : CodeVisitor {
 		public ArrayList<int> destroy_parameters;
 		// record-specific
 		public UnresolvedSymbol gtype_struct_for;
+		// class-specific
+		public UnresolvedSymbol type_struct;
 		// alias-specific
 		public DataType base_type;
 		// struct-specific
@@ -854,6 +858,25 @@ public class Vala.GirParser : CodeVisitor {
 			return res;
 		}
 
+		static void move_class_methods (Node target, Node? source) {
+			if (source == null) {
+				return;
+			}
+
+			var i = 0;
+			while (i < source.members.size) {
+				var node = source.members[i];
+				if (node.symbol is Method) {
+					source.remove_member (node);
+					target.add_member (node);
+
+					((Method) node.symbol).binding = MemberBinding.CLASS;
+				} else {
+					i++;
+				}
+			}
+		}
+
 		public void process (GirParser parser) {
 			if (processed) {
 				return;
@@ -881,24 +904,12 @@ public class Vala.GirParser : CodeVisitor {
 			}
 
 			if (symbol is Class && girdata != null) {
+				if (type_struct != null) {
+					move_class_methods (this, parser.resolve_node (parent, type_struct));
+				}
 				var class_struct = girdata["glib:type-struct"];
 				if (class_struct != null) {
-					var klass = parser.resolve_node (parent, parser.parse_symbol_from_string (class_struct, source_reference));
-					if (klass != null) {
-						var i = 0;
-						while ( i < klass.members.size ) {
-							var node = klass.members[i];
-							if (node.symbol is Method) {
-								klass.remove_member (node);
-								this.add_member (node);
-
-								Method m = (Method) node.symbol;
-								m.binding = MemberBinding.CLASS;
-							} else {
-								i++;
-							}
-						}
-					}
+					move_class_methods (this, parser.resolve_node (parent, parser.parse_symbol_from_string (class_struct, source_reference)));
 				}
 			}
 
@@ -1202,9 +1213,8 @@ public class Vala.GirParser : CodeVisitor {
 						merged = true;
 					} else {
 						// record for a gtype
-						var gtype_struct_for = girdata["glib:is-gtype-struct-for"];
 						if (gtype_struct_for != null) {
-							var obj = parser.resolve_node (parent, parser.parse_symbol_from_string (gtype_struct_for, source_reference));
+							var obj = parser.resolve_node (parent, gtype_struct_for);
 							if (obj != null && obj.symbol is Interface && "%sIface".printf (obj.get_cname ()) != get_cname ()) {
 								// set the interface struct name
 								obj.symbol.set_attribute_string ("CCode", "type_cname", get_cname ());
@@ -2713,7 +2723,16 @@ public class Vala.GirParser : CodeVisitor {
 			type_name = ctype;
 		}
 
-		DataType type = parse_type_from_gir_name (type_name, out no_array_length, out array_null_terminated, ctype);
+		DataType type;
+		if (type_name != null) {
+			type = parse_type_from_gir_name (type_name, out no_array_length, out array_null_terminated, ctype);
+		} else {
+			// empty <type/>
+			no_array_length = false;
+			array_null_terminated = false;
+			type = new InvalidType ();
+			Report.error (get_current_src (), "empty type element");
+		}
 
 		// type arguments / element types
 		while (current_token == MarkupTokenType.START_ELEMENT) {
@@ -2932,6 +2951,11 @@ public class Vala.GirParser : CodeVisitor {
 			if (parent != null) {
 				cl.add_base_type (parse_type_from_gir_name (parent));
 			}
+			var type_struct = reader.get_attribute ("glib:type-struct");
+			if (type_struct != null) {
+				current.type_struct = parse_symbol_from_string (type_struct, current.source_reference);
+				unresolved_gir_symbols.add (current.type_struct);
+			}
 			current.symbol = cl;
 		} else {
 			cl = (Class) current.symbol;
@@ -3270,9 +3294,12 @@ public class Vala.GirParser : CodeVisitor {
 				} else {
 					m.is_virtual = true;
 				}
-				if (invoker == null && !metadata.has_argument (ArgumentType.VFUNC_NAME)) {
+				if (metadata.has_argument (ArgumentType.NO_WRAPPER)) {
+					s.set_attribute ("NoWrapper", metadata.get_bool (ArgumentType.NO_WRAPPER), s.source_reference);
+				} else if (invoker == null && !metadata.has_argument (ArgumentType.VFUNC_NAME)) {
 					s.set_attribute ("NoWrapper", true, s.source_reference);
-				} if (current.girdata["name"] != name) {
+				}
+				if (current.girdata["name"] != name) {
 					m.set_attribute_string ("CCode", "vfunc_name", current.girdata["name"]);
 				}
 			} else if (symbol_type == "function") {
@@ -3482,7 +3509,11 @@ public class Vala.GirParser : CodeVisitor {
 		bool require_copy_free = false;
 		if (current.new_symbol) {
 			cl = new Class (current.name, current.source_reference);
-			cl.is_compact = true;
+			if (metadata.has_argument (ArgumentType.COMPACT)) {
+				cl.is_compact = metadata.get_bool (ArgumentType.COMPACT);
+			} else {
+				cl.is_compact = true;
+			}
 			current.symbol = cl;
 		} else {
 			cl = (Class) current.symbol;
diff --git a/vala/valaobjectcreationexpression.vala b/vala/valaobjectcreationexpression.vala
index ea9565755..321058ae6 100644
--- a/vala/valaobjectcreationexpression.vala
+++ b/vala/valaobjectcreationexpression.vala
@@ -256,14 +256,9 @@ public class Vala.ObjectCreationExpression : Expression {
 		value_type = type_reference.copy ();
 		value_type.value_owned = true;
 
-		int given_num_type_args = type_reference.get_type_arguments ().size;
-		int expected_num_type_args = 0;
-
 		if (type is Class) {
 			var cl = (Class) type;
 
-			expected_num_type_args = cl.get_type_parameters ().size;
-
 			if (struct_creation) {
 				error = true;
 				Report.error (source_reference, "syntax error, use `new' to create new objects");
@@ -320,8 +315,6 @@ public class Vala.ObjectCreationExpression : Expression {
 		} else if (type is Struct) {
 			var st = (Struct) type;
 
-			expected_num_type_args = st.get_type_parameters ().size;
-
 			if (!struct_creation && !context.deprecated) {
 				Report.warning (source_reference, "deprecated syntax, don't use `new' to initialize structs");
 			}
@@ -337,13 +330,9 @@ public class Vala.ObjectCreationExpression : Expression {
 			}
 		}
 
-		if (expected_num_type_args > given_num_type_args) {
-			error = true;
-			Report.error (source_reference, "too few type arguments");
-			return false;
-		} else if (expected_num_type_args < given_num_type_args) {
+		// check whether there is the expected amount of type-arguments
+		if (!type_reference.check_type_arguments (context)) {
 			error = true;
-			Report.error (source_reference, "too many type arguments");
 			return false;
 		}
 
diff --git a/vala/valaobjecttype.vala b/vala/valaobjecttype.vala
index 53101926c..8e08ade76 100644
--- a/vala/valaobjecttype.vala
+++ b/vala/valaobjecttype.vala
@@ -103,21 +103,9 @@ public class Vala.ObjectType : ReferenceType {
 			return false;
 		}
 
-		int n_type_args = get_type_arguments ().size;
-		if (n_type_args > 0 && n_type_args < object_type_symbol.get_type_parameters ().size) {
-			error = true;
-			Report.error (source_reference, "too few type arguments");
+		// check whether there is the expected amount of type-arguments
+		if (!check_type_arguments (context, true)) {
 			return false;
-		} else if (n_type_args > 0 && n_type_args > object_type_symbol.get_type_parameters ().size) {
-			error = true;
-			Report.error (source_reference, "too many type arguments");
-			return false;
-		}
-
-		foreach (DataType type in get_type_arguments ()) {
-			if (!type.check (context)) {
-				return false;
-			}
 		}
 
 		return true;
diff --git a/vala/valasignal.vala b/vala/valasignal.vala
index 392b31489..c63542617 100644
--- a/vala/valasignal.vala
+++ b/vala/valasignal.vala
@@ -122,7 +122,7 @@ public class Vala.Signal : Symbol, Callable {
 			actual_param.variable_type = actual_param.variable_type.get_actual_type (sender_type, null, node_reference);
 			generated_delegate.add_parameter (actual_param);
 
-			if (actual_param.variable_type is GenericType) {
+			if (actual_param.variable_type.is_generic ()) {
 				is_generic = true;
 			}
 		}
@@ -136,9 +136,8 @@ public class Vala.Signal : Symbol, Callable {
 			// parameter types must refer to the delegate type parameters
 			// instead of to the class type parameters
 			foreach (var param in generated_delegate.get_parameters ()) {
-				unowned GenericType? generic_type = param.variable_type as GenericType;
-				if (generic_type != null) {
-					generic_type.type_parameter = generated_delegate.get_type_parameters ().get (generated_delegate.get_type_parameter_index (generic_type.type_parameter.name));
+				foreach (var type_param in generated_delegate.get_type_parameters ()) {
+					param.variable_type.replace_type_parameter (cl.get_type_parameters ().get (cl.get_type_parameter_index (type_param.name)), type_param);
 				}
 			}
 		}
diff --git a/vapi/Makefile.am b/vapi/Makefile.am
index 5136d5812..854ba8642 100644
--- a/vapi/Makefile.am
+++ b/vapi/Makefile.am
@@ -584,7 +584,7 @@ gtk+-3.0:
 	$(GENVAPI) --library $(srcdir)/gtk+-3.0 --pkg atk --pkg gdk-3.0 --pkg gdk-pixbuf-2.0 --pkg gio-2.0 --pkg pango --pkg cairo --metadatadir $(METADATADIR) $(METADATADIR)/Gtk-3.0-custom.vala $(GIRDIR)/Gtk-3.0.gir
 
 gtk4:
-	$(GENVAPI) --library $(srcdir)/gtk4 --pkg cairo --pkg gdk-pixbuf-2.0 --pkg gio-2.0 --pkg graphene-gobject-1.0 --pkg pango --pkg x11 \
+	$(GENVAPI) --library $(srcdir)/gtk4 --pkg cairo --pkg gdk-pixbuf-2.0 --pkg gio-2.0 --pkg graphene-gobject-1.0 --pkg pango --pkg pangocairo --pkg x11 \
 		--metadatadir $(METADATADIR) \
 		$(METADATADIR)/GdkWayland-4.0-custom.vala $(GIRDIR)/GdkWayland-4.0.gir \
 		$(METADATADIR)/GdkX11-4.0-custom.vala $(GIRDIR)/GdkX11-4.0.gir \
@@ -599,7 +599,9 @@ gtk+-unix-print-3.0:
 	$(GENVAPI) --library $(srcdir)/gtk+-unix-print-3.0 $(PACKAGESDIR)/gtk+-unix-print-3.0/gtk+-unix-print-3.0-custom.vala $(PACKAGESDIR)/gtk+-unix-print-3.0/gtk+-unix-print-3.0.gi
 
 gtk4-unix-print:
-	$(GENVAPI) --library $(srcdir)/gtk4-unix-print $(PACKAGESDIR)/gtk4-unix-print/gtk4-unix-print-custom.vala $(PACKAGESDIR)/gtk4-unix-print/gtk4-unix-print.gi
+	ln -s $(GIRDIR)/Gtk-4.0.gir GtkUnixPrint-4.0.gir; \
+	$(GENVAPI) --library $(srcdir)/gtk4-unix-print --pkg gtk4 --pkg pangocairo --metadatadir $(METADATADIR) $(METADATADIR)/GtkUnixPrint-4.0-custom.vala GtkUnixPrint-4.0.gir; \
+	rm -f GtkUnixPrint-4.0.gir
 
 gtksourceview-2.0:
 	$(GENVAPI) --library $(srcdir)/gtksourceview-2.0 $(PACKAGESDIR)/gtksourceview-2.0/gtksourceview-2.0.gi
diff --git a/vapi/gio-2.0.vapi b/vapi/gio-2.0.vapi
index d9aeb4189..f9bdad9ca 100644
--- a/vapi/gio-2.0.vapi
+++ b/vapi/gio-2.0.vapi
@@ -1682,7 +1682,7 @@ namespace GLib {
 		[Version (since = "2.64")]
 		public bool find (GLib.Object item, out uint position);
 		[Version (since = "2.64")]
-		public bool find_with_equal_func (GLib.Object item, GLib.EqualFunc equal_func, out uint position);
+		public bool find_with_equal_func (GLib.Object item, GLib.EqualFunc<GLib.Object> equal_func, out uint position);
 		[Version (since = "2.44")]
 		public void insert (uint position, GLib.Object item);
 		[Version (since = "2.44")]
@@ -2284,10 +2284,10 @@ namespace GLib {
 		public void changed (string key, void* origin_tag);
 		[CCode (cheader_filename = "gio/gsettingsbackend.h", feature_test_macro = "G_SETTINGS_ENABLE_BACKEND")]
 		[Version (since = "2.26")]
-		public void changed_tree (GLib.Tree tree, void* origin_tag);
+		public void changed_tree ([CCode (type = "GTree*")] GLib.Tree<string,GLib.Variant> tree, void* origin_tag);
 		[CCode (cheader_filename = "gio/gsettingsbackend.h", feature_test_macro = "G_SETTINGS_ENABLE_BACKEND")]
 		[Version (since = "2.26")]
-		public static void flatten_tree (GLib.Tree tree, out string path, [CCode (array_length = false, array_null_terminated = true)] out (unowned string)[] keys, [CCode (array_length = false, array_null_terminated = true)] out (unowned GLib.Variant)[] values);
+		public static void flatten_tree ([CCode (type = "GTree*")] GLib.Tree<string,GLib.Variant> tree, out string path, [CCode (array_length = false, array_null_terminated = true)] out (unowned string)[] keys, [CCode (array_length = false, array_null_terminated = true)] out (unowned GLib.Variant)[] values);
 		[CCode (cheader_filename = "gio/gsettingsbackend.h", feature_test_macro = "G_SETTINGS_ENABLE_BACKEND")]
 		[Version (since = "2.28")]
 		public static GLib.SettingsBackend get_default ();
@@ -2337,7 +2337,7 @@ namespace GLib {
 		public virtual bool write (string key, GLib.Variant value, void* origin_tag);
 		[CCode (cheader_filename = "gio/gsettingsbackend.h", feature_test_macro = "G_SETTINGS_ENABLE_BACKEND")]
 		[NoWrapper]
-		public virtual bool write_tree (GLib.Tree tree, void* origin_tag);
+		public virtual bool write_tree ([CCode (type = "GTree*")] GLib.Tree<string,GLib.Variant> tree, void* origin_tag);
 	}
 	[CCode (cheader_filename = "gio/gio.h", ref_function = "g_settings_schema_ref", type_id = "g_settings_schema_get_type ()", unref_function = "g_settings_schema_unref")]
 	[Compact]
@@ -3432,14 +3432,19 @@ namespace GLib {
 		public bool condition_wait (GLib.IOCondition condition, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public GLib.Source create_source (GLib.IOCondition condition, GLib.Cancellable? cancellable = null);
 		[CCode (vfunc_name = "condition_check")]
+		[NoWrapper]
 		public virtual GLib.IOCondition datagram_condition_check (GLib.IOCondition condition);
 		[CCode (vfunc_name = "condition_wait")]
+		[NoWrapper]
 		public virtual bool datagram_condition_wait (GLib.IOCondition condition, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (vfunc_name = "create_source")]
+		[NoWrapper]
 		public virtual GLib.Source datagram_create_source (GLib.IOCondition condition, GLib.Cancellable? cancellable = null);
 		[CCode (vfunc_name = "receive_messages")]
+		[NoWrapper]
 		public virtual int datagram_receive_messages ([CCode (array_length_cname = "num_messages", array_length_pos = 1.5, array_length_type = "guint")] GLib.InputMessage[] messages, int flags, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (vfunc_name = "send_messages")]
+		[NoWrapper]
 		public virtual int datagram_send_messages ([CCode (array_length_cname = "num_messages", array_length_pos = 1.5, array_length_type = "guint")] GLib.OutputMessage[] messages, int flags, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public int receive_messages ([CCode (array_length_cname = "num_messages", array_length_pos = 1.5, array_length_type = "guint")] GLib.InputMessage[] messages, int flags, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		public int send_messages ([CCode (array_length_cname = "num_messages", array_length_pos = 1.5, array_length_type = "guint")] GLib.OutputMessage[] messages, int flags, int64 timeout, GLib.Cancellable? cancellable = null) throws GLib.Error;
@@ -3823,6 +3828,7 @@ namespace GLib {
 		public abstract bool is_readable ();
 		public ssize_t read_nonblocking ([CCode (array_length_cname = "count", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (vfunc_name = "read_nonblocking")]
+		[NoWrapper]
 		public abstract ssize_t read_nonblocking_fn ([CCode (array_length_cname = "count", array_length_pos = 1.1, array_length_type = "gsize")] uint8[] buffer) throws GLib.Error;
 	}
 	[CCode (cheader_filename = "gio/gio.h", type_cname = "GPollableOutputStreamInterface", type_id = "g_pollable_output_stream_get_type ()")]
@@ -3833,10 +3839,12 @@ namespace GLib {
 		public abstract bool is_writable ();
 		public ssize_t write_nonblocking ([CCode (array_length_cname = "count", array_length_pos = 1.5, array_length_type = "gsize")] uint8[] buffer, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (vfunc_name = "write_nonblocking")]
+		[NoWrapper]
 		public abstract ssize_t write_nonblocking_fn ([CCode (array_length_cname = "count", array_length_pos = 1.1, array_length_type = "gsize")] uint8[]? buffer) throws GLib.Error;
 		[Version (since = "2.60")]
 		public GLib.PollableReturn writev_nonblocking ([CCode (array_length_cname = "n_vectors", array_length_pos = 1.5, array_length_type = "gsize")] GLib.OutputVector[] vectors, out size_t bytes_written, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[CCode (vfunc_name = "writev_nonblocking")]
+		[NoWrapper]
 		[Version (since = "2.60")]
 		public abstract GLib.PollableReturn writev_nonblocking_fn ([CCode (array_length_cname = "n_vectors", array_length_pos = 1.5, array_length_type = "gsize")] GLib.OutputVector[] vectors, out size_t bytes_written) throws GLib.Error;
 	}
@@ -4906,9 +4914,9 @@ namespace GLib {
 	public delegate GLib.Variant SettingsBindSetMappingShared (GLib.Value value, GLib.VariantType expected_type, void* user_data);
 	[CCode (cheader_filename = "gio/gio.h", instance_pos = 2.9)]
 	public delegate bool SettingsGetMapping (GLib.Variant value, out void* result);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", has_typedef = false)]
 	public delegate void SimpleActionActivateCallback (GLib.SimpleAction action, GLib.Variant? parameter);
-	[CCode (cheader_filename = "gio/gio.h")]
+	[CCode (cheader_filename = "gio/gio.h", has_typedef = false)]
 	public delegate void SimpleActionChangeStateCallback (GLib.SimpleAction action, GLib.Variant value);
 	[CCode (cheader_filename = "gio/gio.h", has_target = false)]
 	public delegate void SimpleAsyncThreadFunc (GLib.SimpleAsyncResult res, GLib.Object object, GLib.Cancellable? cancellable = null);
diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi
index 39a6b0b88..71df44b9d 100644
--- a/vapi/glib-2.0.vapi
+++ b/vapi/glib-2.0.vapi
@@ -2165,7 +2165,7 @@ namespace GLib {
 		public static void yield ();
 		public static void exit (T retval);
 		[Version (deprecated_since = "2.32", since = "2.10")]
-		public static void @foreach (Func<Thread> thread_func);
+		public static void @foreach (Func<Thread<T>> thread_func);
 
 		[CCode (cname = "g_usleep")]
 		public static void usleep (ulong microseconds);
@@ -2346,10 +2346,10 @@ namespace GLib {
 		[CCode (cname = "g_thread_pool_free")]
 		void _free (bool immediate, bool wait);
 		[CCode (cname = "vala__g_thread_pool_free_wrapper")]
-		public static void free (owned ThreadPool? pool, bool immediate, bool wait) {
-			ThreadPool* ptr = (owned) pool;
+		public static void free (owned ThreadPool<T>? pool, bool immediate, bool wait) {
+			ThreadPool<T>* ptr = (owned) pool;
 			if (ptr != null) {
-				((ThreadPool)ptr)._free (immediate, wait);
+				((ThreadPool<T>)ptr)._free (immediate, wait);
 			}
 		}
 		public static void set_max_unused_threads (int max_threads);
@@ -4864,7 +4864,7 @@ namespace GLib {
 		public uint get_length ();
 		[Version (since = "2.4")]
 		public void reverse ();
-		public Queue copy ();
+		public Queue<G> copy ();
 		[Version (since = "2.4")]
 		public unowned List<G> find (G data);
 		[Version (since = "2.4")]
@@ -5392,8 +5392,8 @@ namespace GLib {
 
 	/* N-ary Trees */
 
-	public delegate bool NodeTraverseFunc (Node node);
-	public delegate void NodeForeachFunc (Node node);
+	public delegate bool NodeTraverseFunc<G> (Node<G> node);
+	public delegate void NodeForeachFunc<G> (Node<G> node);
 
 	[CCode (cprefix = "G_TRAVERSE_")]
 	public enum TraverseFlags {
@@ -5421,8 +5421,8 @@ namespace GLib {
 		public unowned Node<G> append_data (owned G data);
 		public unowned Node<G> prepend_data (owned G data);
 		public void reverse_children ();
-		public void traverse (TraverseType order, TraverseFlags flags, int max_depth, NodeTraverseFunc func);
-		public void children_foreach (TraverseFlags flags, NodeForeachFunc func);
+		public void traverse (TraverseType order, TraverseFlags flags, int max_depth, NodeTraverseFunc<G> func);
+		public void children_foreach (TraverseFlags flags, NodeForeachFunc<G> func);
 		public unowned Node<G> get_root ();
 		public unowned Node<G> find (TraverseType order, TraverseFlags flags, G data);
 		public unowned Node<G> find_child (TraverseFlags flags, G data);
@@ -5458,10 +5458,10 @@ namespace GLib {
 		}
 
 		public G data;
-		public Node next;
-		public Node prev;
-		public Node parent;
-		public Node children;
+		public Node<G> next;
+		public Node<G> prev;
+		public Node<G> parent;
+		public Node<G> children;
 	}
 
 	/* Quarks */
diff --git a/vapi/gnet-2.0.vapi b/vapi/gnet-2.0.vapi
index b15338cbf..9bafd317e 100644
--- a/vapi/gnet-2.0.vapi
+++ b/vapi/gnet-2.0.vapi
@@ -115,17 +115,17 @@ namespace GNet {
 	}
 
 	public class IOChannel {
-		[CCode(name = "gnet_io_channel_writen")]
+		[CCode(cname = "gnet_io_channel_writen")]
 		public static GLib.IOError writen(GLib.IOChannel chan, string buf,
 										  size_t len, out size_t bytes_written);
 
-		[CCode(name = "gnet_io_channel_readn")]
+		[CCode(cname = "gnet_io_channel_readn")]
 		public static GLib.IOError readn(GLib.IOChannel chan, string buf,
 										 size_t len, out size_t bytes_read);
-		[CCode(name = "gnet_io_channel_readline")]
+		[CCode(cname = "gnet_io_channel_readline")]
 		public static GLib.IOError readline(GLib.IOChannel chan, string buf,
 											size_t len, out size_t bytes_read);
-		[CCode(name = "gnet_io_channel_readline_strdup")]
+		[CCode(cname = "gnet_io_channel_readline_strdup")]
 		public static GLib.IOError readline_strdup(GLib.IOChannel chan,
 												   out string buf,
 												   size_t bytes_read);
diff --git a/vapi/gnutls.vapi b/vapi/gnutls.vapi
index a7299af33..9369792f4 100644
--- a/vapi/gnutls.vapi
+++ b/vapi/gnutls.vapi
@@ -904,9 +904,9 @@ namespace GnuTLS
 		public struct Ava
 		{
 			[CCode (cname = "oid.data", array_length_cname = "oid.size")]
-			uint8[] oid;
+			unowned uint8[] oid;
 			[CCode (cname = "value.data", array_length_cname = "value.size")]
-			uint8[] value;
+			unowned uint8[] value;
 			ulong value_tag;
 		}
 
@@ -1711,13 +1711,13 @@ namespace GnuTLS
 	{
 		public CertificateType type;
 		[CCode (cname = "cert.x509", array_length_cname = "ncerts", array_length_type = "unsigned int")]
-		public X509.Certificate[] cert_x509;
+		public unowned X509.Certificate[] cert_x509;
 		[CCode (cname = "cert.pgp")]
-		public OpenPGP.Certificate cert_pgp;
+		public unowned OpenPGP.Certificate cert_pgp;
 		[CCode (cname = "key.x509")]
-		public X509.PrivateKey key_x509;
+		public unowned X509.PrivateKey key_x509;
 		[CCode (cname = "key.pgp")]
-		public OpenPGP.PrivateKey key_pgp;
+		public unowned OpenPGP.PrivateKey key_pgp;
 		public uint deinit_all;
 	}
 
diff --git a/vapi/gsl.vapi b/vapi/gsl.vapi
index 2631e5a5f..1b328af9f 100644
--- a/vapi/gsl.vapi
+++ b/vapi/gsl.vapi
@@ -66,10 +66,6 @@ namespace Gsl
 		MASS_NEUTRON,
 		RYDBERG,
 		BOLTZMANN,
-		BOHR_MAGNETON,
-		NUCLEAR_MAGNETON,
-		ELECTRON_MAGNETIC_MOMENT,
-		PROTON_MAGNETIC_MOMENT,
 		MOLAR_GAS,
 		STANDARD_GAS_VOLUME,
 		MINUTE,
@@ -128,9 +124,6 @@ namespace Gsl
 		PSI,
 		POISE,
 		STOKES,
-		FARADAY,
-		ELECTRON_CHARGE,
-		GAUSS,
 		STILB,
 		LUMEN,
 		LUX,
@@ -169,10 +162,6 @@ namespace Gsl
 		MASS_NEUTRON,
 		RYDBERG,
 		BOLTZMANN,
-		BOHR_MAGNETON,
-		NUCLEAR_MAGNETON,
-		ELECTRON_MAGNETIC_MOMENT,
-		PROTON_MAGNETIC_MOMENT,
 		MOLAR_GAS,
 		STANDARD_GAS_VOLUME,
 		MINUTE,
@@ -231,9 +220,6 @@ namespace Gsl
 		PSI,
 		POISE,
 		STOKES,
-		FARADAY,
-		ELECTRON_CHARGE,
-		GAUSS,
 		STILB,
 		LUMEN,
 		LUX,
@@ -251,7 +237,13 @@ namespace Gsl
 		JOULE,
 		ERG,
 		STEFAN_BOLTZMANN_CONSTANT,
-		THOMSON_CROSS_SECTION
+		THOMSON_CROSS_SECTION,
+		BOHR_MAGNETON,
+		NUCLEAR_MAGNETON,
+		ELECTRON_MAGNETIC_MOMENT,
+		PROTON_MAGNETIC_MOMENT,
+		FARADAY,
+		ELECTRON_CHARGE
 	}
 
 	[CCode (cprefix="GSL_CONST_MKS_", cheader_filename="gsl/gsl_const_mks.h", has_type_id = false)]
@@ -272,10 +264,6 @@ namespace Gsl
 		MASS_NEUTRON,
 		RYDBERG,
 		BOLTZMANN,
-		BOHR_MAGNETON,
-		NUCLEAR_MAGNETON,
-		ELECTRON_MAGNETIC_MOMENT,
-		PROTON_MAGNETIC_MOMENT,
 		MOLAR_GAS,
 		STANDARD_GAS_VOLUME,
 		MINUTE,
@@ -334,9 +322,6 @@ namespace Gsl
 		PSI,
 		POISE,
 		STOKES,
-		FARADAY,
-		ELECTRON_CHARGE,
-		GAUSS,
 		STILB,
 		LUMEN,
 		LUX,
@@ -353,11 +338,18 @@ namespace Gsl
 		DYNE,
 		JOULE,
 		ERG,
+		BOHR_MAGNETON,
+		NUCLEAR_MAGNETON,
+		ELECTRON_MAGNETIC_MOMENT,
+		PROTON_MAGNETIC_MOMENT,
 		STEFAN_BOLTZMANN_CONSTANT,
 		THOMSON_CROSS_SECTION,
+		FARADAY,
+		ELECTRON_CHARGE,
 		VACUUM_PERMITTIVITY,
 		VACUUM_PERMEABILITY,
-		DEBYE
+		DEBYE,
+		GAUSS
 	}
 
 	[CCode (cprefix="GSL_CONST_MKSA_", cheader_filename="gsl/gsl_const_mksa.h", has_type_id = false)]
@@ -378,10 +370,6 @@ namespace Gsl
 		MASS_NEUTRON,
 		RYDBERG,
 		BOLTZMANN,
-		BOHR_MAGNETON,
-		NUCLEAR_MAGNETON,
-		ELECTRON_MAGNETIC_MOMENT,
-		PROTON_MAGNETIC_MOMENT,
 		MOLAR_GAS,
 		STANDARD_GAS_VOLUME,
 		MINUTE,
@@ -440,9 +428,6 @@ namespace Gsl
 		PSI,
 		POISE,
 		STOKES,
-		FARADAY,
-		ELECTRON_CHARGE,
-		GAUSS,
 		STILB,
 		LUMEN,
 		LUX,
@@ -461,9 +446,16 @@ namespace Gsl
 		ERG,
 		STEFAN_BOLTZMANN_CONSTANT,
 		THOMSON_CROSS_SECTION,
+		BOHR_MAGNETON,
+		NUCLEAR_MAGNETON,
+		ELECTRON_MAGNETIC_MOMENT,
+		PROTON_MAGNETIC_MOMENT,
+		FARADAY,
+		ELECTRON_CHARGE,
 		VACUUM_PERMITTIVITY,
 		VACUUM_PERMEABILITY,
-		DEBYE
+		DEBYE,
+		GAUSS
 	}
 
 
@@ -518,9 +510,9 @@ namespace Gsl
 		APPROX
 	}
 
-	[CCode (has_target = false)]
+	[CCode (cname = "gsl_error_handler_t*", has_target = false)]
 	public delegate void ErrorHandler (string reason, string file, int line, int errno);
-	[CCode (has_target = false)]
+	[CCode (cname = "gsl_stream_handler_t*", has_target = false)]
 	public delegate void StreamHandler (string label, string file, int line, string reason);
 
 	[CCode (lower_case_cprefix="gsl_", cheader_filename="gsl/gsl_errno.h")]
@@ -568,9 +560,9 @@ namespace Gsl
 
 	/* The isnan, isinf and finite are define in the double type. The elementary functions are in GLib.Math */
 
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate double _Function (double x, void* params);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void _FunctionFdf (double x, void* params, out double f, out double df);
 
 	[SimpleType]
@@ -910,7 +902,7 @@ namespace Gsl
 		public static int CL_array (double lmin, int kmax, double eta, [CCode (array_length = false)] double[] cl);
 	}
 
-	[CCode (lower_case_cprefix="gsl_sf_coupling_", cheader_filename="gsl/gsl_coupling.h")]
+	[CCode (lower_case_cprefix="gsl_sf_coupling_", cheader_filename="gsl/gsl_sf_coupling.h")]
 	namespace Coupling
 	{
 		public static double 3j (int two_ja, int two_jb, int two_jc, int two_ma, int two_mb, int two_mc);
@@ -990,8 +982,8 @@ namespace Gsl
 		public static int E_e (double phi, double k, Mode mode, out Result result);
 		public static double P (double phi, double k, double n, Mode mode);
 		public static int P_e (double phi, double k, double n, Mode mode, out Result result);
-		public static double D (double phi, double k, double n, Mode mode);
-		public static int D_e (double phi, double k, double n, Mode mode, out Result result);
+		public static double D (double phi, double k, Mode mode);
+		public static int D_e (double phi, double k, Mode mode, out Result result);
 
 		public static double RC (double x, double y, Mode mode);
 		public static int RC_e (double x, double y, Mode mode, out Result result);
@@ -1003,7 +995,7 @@ namespace Gsl
 		public static int RJ_e (double x, double y, double z, double p, Mode mode, out Result result);
 	}
 
-	[CCode (lower_case_cprefix="gsl_sf_elljac_", cheader_filename="gsl/gsl_elljac.h")]
+	[CCode (lower_case_cprefix="gsl_sf_elljac_", cheader_filename="gsl/gsl_sf_elljac.h")]
 	namespace EllJac
 	{
 		public static int e (double u, double m, out double sn, out double cn, out double dn);
@@ -1037,8 +1029,8 @@ namespace Gsl
 		public static int exp_mult_e10_e (double x, double y, out ResultE10 result);
 		public static int exp_err_e (double x, double dx, out Result result);
 		public static int exp_err_e10_e (double x, double dx, out ResultE10 result);
-		public static int exp_mul_err_e (double x, double dx, double y, double dy, out Result result);
-		public static int exp_mul_err_e10_e (double x, double dx, double y, double dy, out ResultE10 result);
+		public static int exp_mult_err_e (double x, double dx, double y, double dy, out Result result);
+		public static int exp_mult_err_e10_e (double x, double dx, double y, double dy, out ResultE10 result);
 		public static double expm1 (double x);
 		public static int expm1_e (double x, out Result result);
 		public static double exprel (double x);
@@ -1060,8 +1052,8 @@ namespace Gsl
 		public static int expint_En_e (int n, double x, out Result result);
 		public static double expint_Ei (double x);
 		public static int expint_Ei_e (double x, out Result result);
-		public static double expint_Ei_3 (double x);
-		public static int expint_Ei_3_e (double x, out Result result);
+		public static double expint_3 (double x);
+		public static int expint_3_e (double x, out Result result);
 		public static double Shi (double x);
 		public static int Shi_e (double x, out Result result);
 		public static double Chi (double x);
@@ -1074,7 +1066,7 @@ namespace Gsl
 		public static double atanint_e (double x, out Result result);
 	}
 
-	[CCode (lower_case_cprefix="gsl_sf_fermi_dirac_", cheader_filename="gsl/gsl_sf_fermi_dirach.h")]
+	[CCode (lower_case_cprefix="gsl_sf_fermi_dirac_", cheader_filename="gsl/gsl_sf_fermi_dirac.h")]
 	namespace FermiDirac
 	{
 		public static double m1 (double x);
@@ -1174,10 +1166,10 @@ namespace Gsl
 		[CCode (cname="gsl_sf_gegenpoly_3_e")]
 		public static double C3_e (double lambda, double x, out Result result);
 		[CCode (cname="gsl_sf_gegenpoly_n")]
-		public static double Cn (double lambda, double x);
+		public static double Cn (int n, double lambda, double x);
 		[CCode (cname="gsl_sf_gegenpoly_n_e")]
-		public static double Cn_e (double lambda, double x, out Result result);
-		public static int array (int nmax, double lambda, double x, out Result result);
+		public static double Cn_e (int n, double lambda, double x, out Result result);
+		public static int array (int nmax, double lambda, double x, [CCode (array_length = false)] double[] result_array);
 	}
 
 	[CCode (lower_case_cprefix="gsl_sf_hyperg_", cheader_filename="gsl/gsl_sf_hyperg.h")]
@@ -1260,11 +1252,11 @@ namespace Gsl
 		public static double Plm (int l, int m, double x);
 		public static int Plm_e (int l, int m, double x, out Result result);
 		public static int Plm_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array);
-		public static int Plm_deriv_array (int lmax, int m, double x, double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
+		public static int Plm_deriv_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
 		public static double sphPlm (int l, int m, double x);
 		public static int sphPlm_e (int l, int m, double x, out Result result);
 		public static int sphPlm_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array);
-		public static int sphPlm_deriv_array (int lmax, int m, double x, double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
+		public static int sphPlm_deriv_array (int lmax, int m, double x, [CCode (array_length = false)] double[] result_array, [CCode (array_length = false)] double[] result_deriv_array);
 		public static int array_size (int lmax, int m);
 
 		[CCode (cname="gsl_sf_conicalP_half")]
@@ -1338,21 +1330,21 @@ namespace Gsl
 
 		public static int a_array (int order_min, int order_max, double qq, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
 		public static int b_array (int order_min, int order_max, double qq, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
-		public static int a (int order, double qq, out Result result);
-		public static int b (int order, double qq, out Result result);
+		public static int a (int order, double qq);
+		public static int b (int order, double qq);
 		public static int a_coeff (int order, double qq, double aa, [CCode (array_length = false)] double[] coeff);
 		public static int b_coeff (int order, double qq, double aa, [CCode (array_length = false)] double[] coeff);
 
 		[CCode (cname="gsl_sf_mathieu_alloc")]
 		public MathieuWorkspace (size_t nn, double qq);
 
-		public static int ce (int order, double qq, double zz, out Result result);
-		public static int se (int order, double qq, double zz, out Result result);
+		public static int ce (int order, double qq, double zz);
+		public static int se (int order, double qq, double zz);
 		public static int ce_array (int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
 		public static int se_array (int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
 
-		public static int Mc (int kind, int order, double qq, double zz, out Result result);
-		public static int Ms (int kind, int order, double qq, double zz, out Result result);
+		public static int Mc (int kind, int order, double qq, double zz);
+		public static int Ms (int kind, int order, double qq, double zz);
 		public static int Mc_array (int kind, int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
 		public static int Ms_array (int kind, int nmin, int nmax, double qq, double zz, MathieuWorkspace work, [CCode (array_length = false)] double[] result_array);
 	}
@@ -1380,7 +1372,7 @@ namespace Gsl
 		public static int psi_1_e (double x, out Result result);
 
 		public static double psi_n (int n, double x);
-		public static int psi_e_n (int n, double x, out Result result);
+		public static int psi_n_e (int n, double x, out Result result);
 	}
 
 	[CCode (lower_case_cprefix="gsl_sf_", cheader_filename="gsl/gsl_sf_synchrotron.h")]
@@ -1619,8 +1611,8 @@ namespace Gsl
 
 		public VectorComplexView subvector (size_t i, size_t n);
 		public VectorComplexView subvector_with_stride (size_t i, size_t stride, size_t n);
-		public VectorView complex_real ();
-		public VectorView complex_imag ();
+		public VectorView const_real ();
+		public VectorView const_imag ();
 
 		public int memcpy (VectorComplex src);
 		public int swap (VectorComplex w);
@@ -1632,15 +1624,8 @@ namespace Gsl
 		public int sub (VectorComplex b);
 		public int mul (VectorComplex b);
 		public int div (VectorComplex b);
-		public int scale (double x);
-		public int add_constant (double x);
-
-		public double max ();
-		public double min ();
-		public void minmax (out double min_out, out double max_out);
-		public size_t max_index ();
-		public size_t min_index ();
-		public void minmax_index (out size_t imin, out size_t imax);
+		public int scale (Complex x);
+		public int add_constant (Complex x);
 
 		public bool isnull ();
 		public bool ispos ();
@@ -1657,7 +1642,7 @@ namespace Gsl
 		public static MatrixView array ([CCode (array_length = false)] double[] v, size_t n1, size_t n2);
 		public static MatrixView array_with_tda ([CCode (array_length = false)] double[] v, size_t n1, size_t n2, size_t tda);
 		public static MatrixView vector (Vector v, size_t n1, size_t n2);
-		public static MatrixView vectr_with_tda (Vector v, size_t n1, size_t n2, size_t tda);
+		public static MatrixView vector_with_tda (Vector v, size_t n1, size_t n2, size_t tda);
 	}
 
 	[Compact]
@@ -1680,7 +1665,9 @@ namespace Gsl
 		[CCode (cname="gsl_matrix_alloc_from_matrix")]
 		public Matrix.from_matrix (Matrix m, size_t k1, size_t k2, size_t n1, size_t n2);
 
+		[CCode (cname="gsl_vector_alloc_row_from_matrix")]
 		public Vector alloc_row_from_matrix (size_t i);
+		[CCode (cname="gsl_vector_alloc_col_from_matrix")]
 		public Vector alloc_col_from_matrix (size_t j);
 
 		public double @get (size_t i, size_t j);
@@ -1752,7 +1739,7 @@ namespace Gsl
 		public static MatrixComplexView array ([CCode (array_length = false)] double[] v, size_t n1, size_t n2);
 		public static MatrixComplexView array_with_tda ([CCode (array_length = false)] double[] v, size_t n1, size_t n2, size_t tda);
 		public static MatrixComplexView vector (VectorComplex v, size_t n1, size_t n2);
-		public static MatrixComplexView vectr_with_tda (VectorComplex v, size_t n1, size_t n2, size_t tda);
+		public static MatrixComplexView vector_with_tda (VectorComplex v, size_t n1, size_t n2, size_t tda);
 	}
 
 	[Compact]
@@ -1775,14 +1762,16 @@ namespace Gsl
 		[CCode (cname="gsl_matrix_complex_alloc_from_matrix")]
 		public MatrixComplex.from_matrix (MatrixComplex m, size_t k1, size_t k2, size_t n1, size_t n2);
 
+		[CCode (cname="gsl_vector_complex_alloc_row_from_matrix")]
 		public VectorComplex alloc_row_from_matrix (size_t i);
+		[CCode (cname="gsl_vector_complex_alloc_col_from_matrix")]
 		public VectorComplex alloc_col_from_matrix (size_t j);
 
-		public double @get (size_t i, size_t j);
-		public void @set (size_t i, size_t j, double x);
-		public double* ptr (size_t i, size_t j);
+		public Complex @get (size_t i, size_t j);
+		public void @set (size_t i, size_t j, Complex x);
+		public Complex* ptr (size_t i, size_t j);
 
-		public void set_all (double x);
+		public void set_all (Complex x);
 		public void set_zero ();
 		public void set_identity ();
 
@@ -1821,16 +1810,9 @@ namespace Gsl
 		public int sub (MatrixComplex b);
 		public int mul_elements (MatrixComplex b);
 		public int div_elements (MatrixComplex b);
-		public int scale (double x);
-		public int add_constant (double x);
-		public int add_diagonal (double x);
-
-		public double max ();
-		public double min ();
-		public void minmax (out double min_out, out double max_out);
-		public void max_index (out size_t imax, out size_t jmax);
-		public void min_index (out size_t imin, out size_t jmin);
-		public void minmax_index (out size_t imin, out size_t jmin, out size_t imax, out size_t jmax);
+		public int scale (Complex x);
+		public int add_constant (Complex x);
+		public int add_diagonal (Complex x);
 
 		public bool isnull ();
 		public bool ispos ();
@@ -1913,9 +1895,9 @@ namespace Gsl
 	namespace PermuteVectorComplex
 	{
 		[CCode (cname="gsl_permute_vector_complex")]
-		public static int permute (Permutation p, Vector v);
+		public static int permute (Permutation p, VectorComplex v);
 		[CCode (cname="gsl_permute_vector_complex_inverse")]
-		public static int permute_inverse (Permutation p, Vector v);
+		public static int permute_inverse (Permutation p, VectorComplex v);
 	}
 
 
@@ -2001,7 +1983,7 @@ namespace Gsl
 		public static int LU_refine (Matrix A, Matrix LU, Permutation p, Vector b, Vector x, Vector residual);
 		public static int complex_LU_refine (MatrixComplex A, MatrixComplex LU, Permutation p, VectorComplex b, VectorComplex x, VectorComplex residual);
 		public static int LU_invert (Matrix LU, Permutation p, Matrix inverse);
-		public static int complex_LU_invert (MatrixComplex LU, Permutation p, Matrix inverse);
+		public static int complex_LU_invert (MatrixComplex LU, Permutation p, MatrixComplex inverse);
 		public static double LU_det (Matrix LU, int signum);
 		public static Complex complex_LU_det (MatrixComplex LU, int signum);
 		public static double LU_lndet (Matrix LU);
@@ -2065,7 +2047,7 @@ namespace Gsl
 		public static int bidiag_unpack2 (Matrix A, Vector tau_U, Vector tau_V, Matrix V);
 		public static int bidiag_unpack_B (Matrix A, Vector diag, Vector superdiag);
 
-		public static int householder_tansform (Vector v);
+		public static int householder_transform (Vector v);
 		public static Complex complex_householder_transform (VectorComplex V);
 		public static int householder_hm (double tau, Vector v, Matrix A);
 		public static int complex_householder_hm (Complex tau, VectorComplex V, MatrixComplex A);
@@ -2140,7 +2122,7 @@ namespace Gsl
 		[CCode (cname="gsl_eigen_herm_alloc")]
 		public EigenHermWorkspace (size_t n);
 		[CCode (cname="gsl_eigen_herm", instance_pos=-1)]
-		public int init (MatrixComplex A, VectorComplex eval);
+		public int init (MatrixComplex A, Vector eval);
 	}
 
 	[Compact]
@@ -2157,7 +2139,7 @@ namespace Gsl
 		[CCode (cname="gsl_eigen_hermv_alloc")]
 		public EigenHermvWorkspace (size_t n);
 		[CCode (cname="gsl_eigen_hermv", instance_pos=-1)]
-		public int init (MatrixComplex A, VectorComplex eval, MatrixComplex evec);
+		public int init (MatrixComplex A, Vector eval, MatrixComplex evec);
 	}
 
 	[Compact]
@@ -2322,7 +2304,7 @@ namespace Gsl
 	/*
 	 * Fast Fourier Transforms (FFTs)
 	 */
-	[CCode (cname="gsl_fft_direction", cheader_filename="gsl/gsl_fft.h", has_type_id = false)]
+	[CCode (cname="gsl_fft_direction", cprefix = "gsl_fft_", cheader_filename="gsl/gsl_fft.h", has_type_id = false)]
 	public enum FFTDirection
 	{
 		forward = -1,
@@ -2336,11 +2318,12 @@ namespace Gsl
 		public size_t n;
 		public size_t nf;
 		public size_t factor[64];
-		public Complex twiddle[64];
-		public Complex trig;
+		public Complex* twiddle[64];
+		public Complex* trig;
 
 		[CCode (cname="gsl_fft_complex_wavetable_alloc")]
 		public FFTComplexWavetable (size_t n);
+		[CCode (cname="gsl_fft_complex_memcpy")]
 		public int memcpy (FFTComplexWavetable src);
 	}
 
@@ -2355,7 +2338,6 @@ namespace Gsl
 		public FFTComplexWorkspace (size_t n);
 	}
 
-	[Compact]
 	[CCode (lower_case_cprefix="gsl_fft_complex_", cheader_filename="gsl/gsl_fft_complex.h")]
 	namespace FFTComplex
 	{
@@ -2381,8 +2363,8 @@ namespace Gsl
 		public size_t n;
 		public size_t nf;
 		public size_t factor[64];
-		public Complex twiddle[64];
-		public Complex trig;
+		public Complex* twiddle[64];
+		public Complex* trig;
 
 		[CCode (cname="gsl_fft_real_wavetable_alloc")]
 		public FFTRealWavetable (size_t n);
@@ -2399,11 +2381,10 @@ namespace Gsl
 		public FFTRealWorkspace (size_t n);
 	}
 
-	[Compact]
 	[CCode (lower_case_cprefix="gsl_fft_real_", cheader_filename="gsl/gsl_fft_real.h")]
 	namespace FFTReal
 	{
-		public static int radix2_forward ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
+		public static int radix2_transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n);
 		public static int transform ([CCode (array_length = false)] double[] data, size_t stride, size_t n, FFTRealWavetable wavetable, FFTRealWorkspace work);
 		public static int unpack ([CCode (array_length = false)] double[] real_coefficient, [CCode (array_length = false)] double[] complex_coeficient, size_t stride, size_t n);
 	}
@@ -2415,8 +2396,8 @@ namespace Gsl
 		public size_t n;
 		public size_t nf;
 		public size_t factor[64];
-		public Complex twiddle[64];
-		public Complex trig;
+		public Complex* twiddle[64];
+		public Complex* trig;
 
 		[CCode (cname="gsl_fft_halfcomplex_wavetable_alloc")]
 		public FFTHalfcomplexWavetable (size_t n);
@@ -2439,7 +2420,7 @@ namespace Gsl
 	/*
 	 * Numerical Integration
 	 */
-	[CCode (cprefix="GSL_INTEG_", cheader_filename="gsl/gsl_integration.h", has_type_id = false)]
+	[CCode (cname = "enum gsl_integration_qawo_enum", cprefix="GSL_INTEG_", cheader_filename="gsl/gsl_integration.h", has_type_id = false)]
 	public enum QAWO
 	{
 		COSINE,
@@ -2523,7 +2504,7 @@ namespace Gsl
 		public static void qk61 (Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
 		public static void qcheb (Function* f, double a, double b, out double cheb12, out double cheb24);
 
-		public static void qk (int n, [CCode (array_length = false)] double[] xgk, [CCode (array_length = false)] double[] wg, [CCode (array_length = false)] double[] wgk, [CCode (array_length = false)] double[] fv1, [CCode (array_length = false)] double[] fv2, Function* f, double a, double b, out double result, out double abserr, out double resabs, double resasc);
+		public static void qk (int n, [CCode (array_length = false)] double[] xgk, [CCode (array_length = false)] double[] wg, [CCode (array_length = false)] double[] wgk, [CCode (array_length = false)] double[] fv1, [CCode (array_length = false)] double[] fv2, Function* f, double a, double b, out double result, out double abserr, out double resabs, out double resasc);
 		public static int qng (Function* f, double a, double b, double epsabs, double epsrel, out double result, out double abserr, out size_t neval);
 		public static int qag (Function* f, double a, double b, double epsabs, double epsrel, size_t limit, int key, IntegrationWorkspace workspace, out double result, out double abserr);
 		public static int qagi (Function* f, double epsabs, double epsrel, size_t limit, IntegrationWorkspace workspace, out double result, out double abserr);
@@ -2541,18 +2522,18 @@ namespace Gsl
 	/*
 	 * Random Number Generation
 	 */
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void RNGSetState (void *state, ulong seed);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate ulong RNGGetState (void* state);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate double RNGGetDouble (void* state);
 
 	[SimpleType]
 	[CCode (cname="gsl_rng_type", cheader_filename="gsl/gsl_rng.h", has_type_id = false)]
 	public struct RNGType
 	{
-		public string name;
+		public unowned string name;
 		public ulong max;
 		public ulong min;
 		public size_t size;
@@ -2797,18 +2778,18 @@ namespace Gsl
 	/*
 	 * Quasi-Random Sequences
 	 */
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate size_t QRNGStateSize (uint dimension);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int QRNGInitState (void* state, uint dimension);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int QRNGGetState2 (void* state, uint dimension, out double x);
 
 	[SimpleType]
 	[CCode (cname="gsl_qrng_type", cheader_filename="gsl/gsl_qrng.h", has_type_id = false)]
 	public struct QRNGType
 	{
-  		public string name;
+  		public unowned string name;
   		public uint max_dimension;
   		public QRNGStateSize state_size;
   		public QRNGInitState init_state;
@@ -2989,7 +2970,7 @@ namespace Gsl
 
 		[CCode (cname="gsl_ran_discrete_preproc")]
 		public RanDiscrete (size_t K, double* P);
-		[CCode (cname="gsl_ran_discrete")]
+		[CCode (cname="gsl_ran_discrete", instance_pos = -1)]
 		public size_t discrete (RNG g);
 		[CCode (instance_pos=-1)]
 		public double pdf (size_t k);
@@ -3179,9 +3160,9 @@ namespace Gsl
 		public double cov ();
 
 		public double sum ();
-		public int equal_bins_p (Histogram h2) ;
-		public int add (Histogram h2);
-		public int sub (Histogram h2);
+		public int equal_bins_p (Histogram2d h2);
+		public int add (Histogram2d h2);
+		public int sub (Histogram2d h2);
 		public int mul (Histogram2d h2);
 		public int div (Histogram2d h2);
 		public int scale (double scale);
@@ -3191,7 +3172,7 @@ namespace Gsl
 		public int fwrite (GLib.FileStream stream);
 		[CCode (instance_pos=-1)]
 		public int fread (GLib.FileStream stream);
-		public static int fprintf (GLib.FileStream stream, Histogram h, string range_format, string bin_format);
+		public static int fprintf (GLib.FileStream stream, Histogram2d h, string range_format, string bin_format);
 		[CCode (instance_pos=-1)]
 		public int fscanf (GLib.FileStream stream);
 	}
@@ -3216,14 +3197,16 @@ namespace Gsl
 	/*
 	 * N-Tuples
 	 */
-	[CCode (has_target = false)]
-	public delegate int NTupleFunc (void* ntuple_data, void* params);
+	[CCode (has_target = false, has_typedef = false)]
+	public delegate int NTupleSelectFunc (void* ntuple_data, void* params);
+	[CCode (has_target = false, has_typedef = false)]
+	public delegate double NTupleValueFunc (void* ntuple_data, void* params);
 
 	[SimpleType]
 	[CCode (cname="gsl_ntuple_select_fn", cheader_filename="gsl/gsl_ntuple.h", has_type_id = false)]
 	public struct NTupleSelectFn
 	{
-		public NTupleFunc function;
+		public NTupleSelectFunc function;
 		public void* params;
 	}
 
@@ -3231,7 +3214,7 @@ namespace Gsl
 	[CCode (cname="gsl_ntuple_value_fn", cheader_filename="gsl/gsl_ntuple.h", has_type_id = false)]
 	public struct NTupleValueFn
 	{
-		public NTupleFunc function;
+		public NTupleValueFunc function;
 		public void* params;
 	}
 
@@ -3240,7 +3223,7 @@ namespace Gsl
 	public class NTuple
 	{
 		public GLib.FileStream file;
-		public void* ntrupel_data;
+		public void* ntuple_data;
 		public size_t size;
 
 		public static NTuple open (string filename, void* ntuple_data, size_t size);
@@ -3264,7 +3247,7 @@ namespace Gsl
 		STRATIFIED
 	}
 
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate double MonteFunc ([CCode (array_length = false)] double[] x_array, size_t dim, void* params);
 
 	[SimpleType]
@@ -3384,19 +3367,19 @@ namespace Gsl
 	[CCode (lower_case_cprefix="gsl_siman_", cheader_filename="gsl/gsl_siman.h", has_type_id = false)]
 	namespace Siman
 	{
-		[CCode (has_target = false)]
+		[CCode (cname = "gsl_siman_Efunc_t", has_target = false)]
 		public delegate double Efunc_t (void *xp);
-		[CCode (has_target = false)]
+		[CCode (cname = "gsl_siman_step_t", has_target = false)]
 		public delegate void step_t (RNG r, void *xp, double step_size);
-		[CCode (has_target = false)]
+		[CCode (cname = "gsl_siman_metric_t", has_target = false)]
 		public delegate double metric_t (void *xp, void* yp);
-		[CCode (has_target = false)]
+		[CCode (cname = "gsl_siman_print_t", has_target = false)]
 		public delegate void print_t (void* xp);
-		[CCode (has_target = false)]
+		[CCode (cname = "gsl_siman_copy_t", has_target = false)]
 		public delegate void copy_t (void* source, void* dest);
-		[CCode (has_target = false)]
+		[CCode (cname = "gsl_siman_copy_construct_t", has_target = false)]
 		public delegate void copy_construct_t (void* xp);
-		[CCode (has_target = false)]
+		[CCode (cname = "gsl_siman_destroy_t", has_target = false)]
 		public delegate void destroy_t (void* xp);
 
 		public static void solve(RNG r, void *x0_p, Efunc_t Ef, step_t take_step, metric_t distance, print_t print_position, copy_t copyfunc, copy_construct_t copy_constructor, destroy_t destructor, size_t element_size, SimanParams params);
@@ -3415,27 +3398,27 @@ namespace Gsl
 		DEC
 	}
 
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int OdeivFunction (double t, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] dydt, void* params);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int OdeivJacobian (double t, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] dfdy, [CCode (array_length = false)] double[] dfdt, void* params);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void* OdeivStepAlloc (size_t dim);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int OdeivStepApply (void* state, size_t dim, double t, double h, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] yerr, [CCode (array_length = false)] double[] dydt_in, [CCode (array_length = false)] double[] dydt_out, OdeivSystem* dydt);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int OdeivStepReset (void* state, size_t dim);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate uint OdeivStepOrder (void* state);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void OdeivStepFree (void* state);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void* OdeivControlAlloc ();
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int OdeivControlInit (void* state, double eps_abs, double eps_rel, double a_y, double a_dydt);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int OdeivControlHadjust (void* state, size_t dim, uint ord, [CCode (array_length = false)] double[] y, [CCode (array_length = false)] double[] yerr, [CCode (array_length = false)] double[] yp, [CCode (array_length = false)] double[] h);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void OdeivControlFree (void* state);
 
 	[SimpleType]
@@ -3452,7 +3435,7 @@ namespace Gsl
 	[CCode (cname="gsl_odeiv_step_type", cheader_filename="gsl/gsl_odeiv.h", has_type_id = false)]
 	public struct OdeivStepType
 	{
-		public string name;
+		public unowned string name;
 		public int can_use_dydt_in;
 		public int gives_exact_dydt_out;
 		public OdeivStepAlloc alloc;
@@ -3499,7 +3482,7 @@ namespace Gsl
 	[CCode (cname="gsl_odeiv_control_type", cheader_filename="gsl/gsl_odeiv.h", has_type_id = false)]
 	public struct OdeivControlType
 	{
-		public string name;
+		public unowned string name;
 		public OdeivControlAlloc alloc;
 		public OdeivControlInit init;
 		public OdeivControlHadjust hadjust;
@@ -3552,19 +3535,19 @@ namespace Gsl
 	/*
 	 * Interpolation
 	 */
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void* InterpAlloc (size_t size);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int InterpInit (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int InterpEval (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int InterpEvalDeriv (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y_p);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int InterpEvalDeriv2 (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, double x, InterpAccel* i, out double y_pp);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int InterpEvalInteg (void* t, [CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size, InterpAccel* i, double a, double b, out double result);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void InterpFree (void* t);
 
 	[Compact]
@@ -3585,7 +3568,7 @@ namespace Gsl
 	[CCode (cname="gsl_interp_type", cheader_filename="gsl/gsl_interp.h", has_type_id = false)]
 	public struct InterpType
 	{
-		public string name;
+		public unowned string name;
 		public uint min_size;
 		public InterpAlloc alloc;
 		public InterpInit init;
@@ -3618,7 +3601,7 @@ namespace Gsl
 		public void* state;
 
 		[CCode (cname="gsl_interp_alloc")]
-		public Interp (InterpType T, size_t n);
+		public Interp (InterpType* T, size_t n);
 		public int init ([CCode (array_length = false)] double[] xa, [CCode (array_length = false)] double[] ya, size_t size);
 		public string name ();
 		public uint min_size ();
@@ -3660,7 +3643,7 @@ namespace Gsl
 	/*
 	 * Numerical Differentiation
 	 */
-	[CCode (lower_case_cprefix="gsl_deriv_", cheader_fileame="gsl/gsl_deriv.h")]
+	[CCode (lower_case_cprefix="gsl_deriv_", cheader_filename="gsl/gsl_deriv.h")]
 	namespace Deriv
 	{
 		public static int central (Function* f, double x, double h, out double result, out double abserr);
@@ -3754,21 +3737,21 @@ namespace Gsl
 	/*
 	 * Wavelet Transforms
 	 */
-	[CCode (has_type_id = false)]
+	[CCode (cname = "gsl_wavelet_direction", cprefix = "gsl_wavelet_", has_type_id = false)]
 	public enum WaveletDirection
 	{
 		forward = 1,
 		backward = -1
 	}
 
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int WaveletInit (double** h1, double** g1, double** h2, double** g2, size_t* nc, size_t* offset, size_t member);
 
 	[SimpleType]
 	[CCode (cname="gsl_wavelet_type", cheader_filename="gsl/gsl_wavelet.h", has_type_id = false)]
 	public struct WaveletType
 	{
-		public string name;
+		public unowned string name;
 		public WaveletInit init;
 	}
 
@@ -3817,25 +3800,25 @@ namespace Gsl
 		public int transform_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletDirection dir, WaveletWorkspace work);
 		[CCode (cname="gsl_wavelet2d_transform_forward")]
 		public int transform_forward_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
-		[CCode (cname="gsl_wavelet2d__transform_inverse")]
+		[CCode (cname="gsl_wavelet2d_transform_inverse")]
 		public int transform_inverse_2d ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_nstransform")]
 		public int nstransform ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletDirection dir,WaveletWorkspace work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_nstransform_forward")]
 		public int nstransform_forward ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_nstransform_inverse")]
 		public int nstransform_inverse ([CCode (array_length = false)] double[] data, size_t tda, size_t size1, size_t size2, WaveletWorkspace * work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_transform_matrix")]
 		public int transform_matrix (Matrix a, WaveletDirection dir, WaveletWorkspace work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_transform_matrix_forward")]
 		public int transform_matrix_forward (Matrix a, WaveletWorkspace work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_transform_matrix_inverse")]
 		public int transform_matrix_inverse (Matrix a, WaveletWorkspace work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_nstransform_matrix")]
 		public int nstransform_matrix (Matrix a, WaveletDirection dir, WaveletWorkspace work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_nstransform_matrix_forward")]
 		public int nstransform_matrix_forward (Matrix a, WaveletWorkspace work);
-		[CCode (cprefix="gsl_wavelet2d_")]
+		[CCode (cname="gsl_wavelet2d_nstransform_matrix_inverse")]
 		public int nstransform_matrix_inverse (Matrix a, WaveletWorkspace work);
 	}
 
@@ -3869,20 +3852,20 @@ namespace Gsl
 	/*
 	 * One dimensional Root-Finding
 	 */
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int RootFsolverSet (void* state, Function* f, double* root, double x_lower, double x_upper);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int RootFsolverIterate (void* state, Function* f, double* root, double* x_lower, double* x_upper);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int RootFdfsolverSet (void* state, FunctionFdf* f, double* root);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int RootFdfsolverIterate (void* state, FunctionFdf* d, double* root);
 
 	[SimpleType]
 	[CCode (cname="gsl_root_fsolver_type", cheader_filename="gsl/gsl_roots.h", has_type_id = false)]
 	public struct RootFsolverType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public RootFsolverSet @set;
 		public RootFsolverIterate iterate;
@@ -3910,7 +3893,7 @@ namespace Gsl
 	[CCode (cname="gsl_root_fdfsolver_type", cheader_filename="gsl/gsl_roots.h", has_type_id = false)]
 	public struct RootFdfsolverType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public RootFdfsolverSet @set;
 		public RootFdfsolverIterate iterate;
@@ -3960,18 +3943,18 @@ namespace Gsl
 	/*
 	 * One dimensional Minimization
 	 */
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MinSet (void* state, Function* f, double xminimun, double f_minimum, double x_lower, double f_lower, double x_upper, double f_upper);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MinIterate (void *state, Function* f, double* x_minimum, double* f_minimum, double* x_lower, double* f_lower, double* x_upper, double* f_upper);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MinBracketingFunction (Function* f, double* x_minimum, double* f_minimum, double* x_lower, double* f_lower, double* x_upper, double* f_upper, size_t eval_max);
 
 	[SimpleType]
 	[CCode (cname="gsl_min_fminimizer_type", cheader_filename="gsl/gsl_min.h", has_type_id = false)]
 	public struct MinFminimizerType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public MinSet @set;
 		public MinIterate iterate;
@@ -4019,27 +4002,27 @@ namespace Gsl
 	/*
 	 * Multidimensional Root-Finding
 	 */
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootF (Vector x, void* params, Vector f);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootFAlloc (void* state, size_t n);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootFSet (void* state, MultirootFunction* function, Vector x, Vector f, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootFIterate (void* state, MultirootFunction* function, Vector x, Vector f, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void MultirootFFree (void* state);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootDF (Vector x, void* params, Matrix df);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootFDF (Vector x, void* params, Vector f, Matrix df);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootFdfAlloc (void* state, size_t n);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootFdfSet (void* state, MultirootFunctionFdf* fdf, Vector x, Vector f, Matrix J, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootFdfIterate (void* state, MultirootFunctionFdf* fdf, Vector x, Vector f, Matrix J, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultirootFdfFree (void* state);
 
 	[SimpleType]
@@ -4058,7 +4041,7 @@ namespace Gsl
 	[CCode (cname="gsl_multiroot_fsolver_type", cheader_filename="gsl/gsl_multiroots.h", has_type_id = false)]
 	public struct MultirootFsolverType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public MultirootFAlloc alloc;
 		public MultirootFSet @set;
@@ -4100,7 +4083,7 @@ namespace Gsl
 	[CCode (cname="gsl_multiroot_fdfsolver_type", cheader_filename="gsl/gsl_multiroots.h", has_type_id = false)]
 	public struct MultirootFdfsolverType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public MultirootFdfAlloc alloc;
 		public MultirootFdfSet @set;
@@ -4157,19 +4140,19 @@ namespace Gsl
 	/*
 	 * Multidimensional Minimization
 	 */
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate double MultiminF (Vector x, void* params);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void MultiminDf (Vector x, void* params, Vector df);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void MultiminFdf (Vector x, void* params, double* f, Vector df);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFAlloc (void *state, size_t n);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFSet (void* state, MultiminFunction* f, Vector x, double* size);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFIterate (void* state, MultiminFunction* f, Vector x, double* size, double* fval);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFFree (void* state);
 
 	[SimpleType]
@@ -4199,7 +4182,7 @@ namespace Gsl
 	[CCode (cname="gsl_multimin_fminimizer_type", cheader_filename="gsl/gsl_multimin.h", has_type_id = false)]
 	public struct MultiminFminimizerType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public MultiminFAlloc alloc;
 		public MultiminFSet @set;
@@ -4233,22 +4216,22 @@ namespace Gsl
 		public static int size (double size, double epsabs);
 	}
 
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFdfAlloc (void *state, size_t n);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFdfSet (void* state, MultiminFunctionFdf* fdf, Vector x, double* f, Vector gradient, double step_size, double tol);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFdfIterate (void* state, MultiminFunctionFdf* fdf, Vector x, double* f, Vector gradient, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFdfRestart (void* state);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultiminFdfFree (void* state);
 
 	[SimpleType]
 	[CCode (cname="gsl_multimin_fdfminimizer_type", cheader_filename="gsl/gsl_multimin.h", has_type_id = false)]
 	public struct MultiminFdfminimizerType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public MultiminFdfAlloc alloc;
 		public MultiminFdfSet @set;
@@ -4302,7 +4285,7 @@ namespace Gsl
 	namespace Fit
 	{
 		public static int linear ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c0, out double c1, out double cov00, out double cov01, out double cov11, out double sumsq);
-		public static int wlinear ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c0, out double c1, out double cov00, out double cov01, out double cov11, double chisq);
+		public static int wlinear ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c0, out double c1, out double cov00, out double cov01, out double cov11, out double chisq);
 		public static int linear_est (double x, double c0, double c1, double cov00, double cov01, double cov11, out double y, out double y_err);
 		public static int mul ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c1, out double cov11, out double sumsq);
 		public static int wmul ([CCode (array_length = false)] double[] x, size_t xstride, [CCode (array_length = false)] double[] w, size_t wstride, [CCode (array_length = false)] double[] y, size_t ystride, size_t n, out double c1, out double cov11, out double sumsq);
@@ -4331,7 +4314,7 @@ namespace Gsl
 	namespace Multifit
 	{
 		public static int linear (Matrix X, Vector y, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
-		public static int linear_svd (Matrix X, Vector y, double tol, out size_t rank, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
+		public static int linear_svd (Matrix X, MultifitLinearWorkspace work);
 		public static int wlinear (Matrix X, Vector w, Vector y, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
 		public static int wlinear_svd (Matrix X, Vector w, Vector y, double tol, out size_t rank, Vector c, Matrix cov, out double chisq, MultifitLinearWorkspace work);
 		public static int linear_est (Vector x, Vector c, Matrix cov, out double y, out double y_err);
@@ -4342,27 +4325,27 @@ namespace Gsl
 	/*
 	 * Nonlinear Least-Squares Fitting
 	 */
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitF (Vector x, void* params, Vector f);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitFAlloc (void* state, size_t n, size_t p);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitFSet (void* state, MultifitFunction* function, Vector x, Vector f, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitFIterate (void* state, MultifitFunction* function, Vector x, Vector f, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void MultifitFFree (void* state);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitDf (Vector x, void* params, Matrix df);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitFdf (Vector x, void* params, Vector f, Matrix df);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitFdfAlloc (void* state, size_t n, size_t p);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitFdfSet (void* state, MultifitFunctionFdf fdf, Vector x, Vector f, Matrix J, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate int MultifitFdfIterate (void* state, MultifitFunctionFdf fdf, Vector x, Vector f, Matrix J, Vector dx);
-	[CCode (has_target = false)]
+	[CCode (has_target = false, has_typedef = false)]
 	public delegate void MultifitFdfFree (void* state);
 
 	[CCode (lower_case_cprefix="gsl_multifit_", cheader_filename="gsl/gsl_multifit_nlin.h")]
@@ -4373,7 +4356,7 @@ namespace Gsl
 	}
 
 	[SimpleType]
-	[CCode (cname="gsl_multifit_function", cheader_filename="gls/gsl_multifit_nlin.h", has_type_id = false)]
+	[CCode (cname="gsl_multifit_function", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
 	public struct MultifitFunction
 	{
 		public MultifitF f;
@@ -4386,7 +4369,7 @@ namespace Gsl
 	[CCode (cname="gsl_multifit_fsolver_type", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
 	public struct MultifitFsolverType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public MultifitFAlloc alloc;
 		public MultifitFSet @set;
@@ -4429,7 +4412,7 @@ namespace Gsl
 	[CCode (cname="gsl_multifit_fdfsolver_type", cheader_filename="gsl/gsl_multifit_nlin.h", has_type_id = false)]
 	public struct MultifitFdfsolverType
 	{
-		public string name;
+		public unowned string name;
 		public size_t size;
 		public MultifitFdfAlloc alloc;
 		public MultifitFdfSet @set;
@@ -4445,8 +4428,10 @@ namespace Gsl
 		public MultifitFunctionFdf* fdf;
 		public Vector x;
 		public Vector f;
-		public Vector J;
 		public Vector dx;
+		public Vector g;
+		public Vector sqrt_wts;
+		public size_t niter;
 		public void* state;
 
 		[CCode (cname="gsl_multifit_fdfsolver_alloc")]
diff --git a/vapi/gstreamer-audio-1.0.vapi b/vapi/gstreamer-audio-1.0.vapi
index 16c60fdb8..21dfdfde9 100644
--- a/vapi/gstreamer-audio-1.0.vapi
+++ b/vapi/gstreamer-audio-1.0.vapi
@@ -341,6 +341,8 @@ namespace Gst {
 			public weak Gst.Audio.Info info;
 			[CCode (has_construct_function = false)]
 			protected Filter ();
+			[CCode (cname = "gst_audio_filter_class_add_pad_templates")]
+			public class void add_pad_templates (Gst.Caps allowed_caps);
 			[NoWrapper]
 			public virtual bool setup (Gst.Audio.Info info);
 		}
diff --git a/vapi/gstreamer-rtsp-1.0.vapi b/vapi/gstreamer-rtsp-1.0.vapi
index 988d1deb3..fafa3293b 100644
--- a/vapi/gstreamer-rtsp-1.0.vapi
+++ b/vapi/gstreamer-rtsp-1.0.vapi
@@ -239,7 +239,7 @@ namespace Gst {
 			public Gst.RTSP.Result wait_backlog_usec (int64 timeout);
 			public Gst.RTSP.Result write_data ([CCode (array_length_cname = "size", array_length_pos = 1.5, array_length_type = "guint")] owned uint8[] data, out uint id);
 		}
-		[CCode (cheader_filename = "gst/rtsp/rtsp.h", type_id = "gst_rtsp_extension_get_type ()")]
+		[CCode (cheader_filename = "gst/rtsp/rtsp.h", type_cname = "GstRTSPExtensionInterface", type_id = "gst_rtsp_extension_get_type ()")]
 		[GIR (name = "RTSPExtension")]
 		public interface Extension : GLib.Object {
 			public abstract Gst.RTSP.Result after_send (Gst.RTSP.Message req, Gst.RTSP.Message resp);
diff --git a/vapi/gstreamer-tag-1.0.vapi b/vapi/gstreamer-tag-1.0.vapi
index 953fe1711..1ef26138b 100644
--- a/vapi/gstreamer-tag-1.0.vapi
+++ b/vapi/gstreamer-tag-1.0.vapi
@@ -134,7 +134,7 @@ namespace Gst {
 			[NoWrapper]
 			public virtual Gst.Buffer render_start_tag (Gst.TagList tag_list);
 		}
-		[CCode (cheader_filename = "gst/tag/tag.h", type_id = "gst_tag_xmp_writer_get_type ()")]
+		[CCode (cheader_filename = "gst/tag/tag.h", type_cname = "GstTagXmpWriterInterface", type_id = "gst_tag_xmp_writer_get_type ()")]
 		[GIR (name = "TagXmpWriter")]
 		public interface XmpWriter : Gst.Element {
 			public void add_all_schemas ();
diff --git a/vapi/gstreamer-video-1.0.vapi b/vapi/gstreamer-video-1.0.vapi
index 8730c72ed..2129c3a4e 100644
--- a/vapi/gstreamer-video-1.0.vapi
+++ b/vapi/gstreamer-video-1.0.vapi
@@ -518,7 +518,7 @@ namespace Gst {
 			[HasEmitter]
 			public virtual signal void value_changed (Gst.Video.ColorBalanceChannel channel, int value);
 		}
-		[CCode (cheader_filename = "gst/video/video.h", type_id = "gst_video_direction_get_type ()")]
+		[CCode (cheader_filename = "gst/video/video.h", type_cname = "GstVideoDirectionInterface", type_id = "gst_video_direction_get_type ()")]
 		[GIR (name = "VideoDirection")]
 		[Version (since = "1.10")]
 		public interface Direction : GLib.Object {
@@ -560,7 +560,7 @@ namespace Gst {
 			[Version (since = "1.18")]
 			public void send_mouse_scroll_event (double x, double y, double delta_x, double delta_y);
 		}
-		[CCode (cheader_filename = "gst/video/video.h", type_id = "gst_video_orientation_get_type ()")]
+		[CCode (cheader_filename = "gst/video/video.h", type_cname = "GstVideoOrientationInterface", type_id = "gst_video_orientation_get_type ()")]
 		[GIR (name = "VideoOrientation")]
 		public interface Orientation : GLib.Object {
 			public abstract bool get_hcenter (out int center);
@@ -572,7 +572,7 @@ namespace Gst {
 			public abstract bool set_vcenter (int center);
 			public abstract bool set_vflip (bool flip);
 		}
-		[CCode (cheader_filename = "gst/video/video.h", type_id = "gst_video_overlay_get_type ()")]
+		[CCode (cheader_filename = "gst/video/video.h", type_cname = "GstVideoOverlayInterface", type_id = "gst_video_overlay_get_type ()")]
 		[GIR (name = "VideoOverlay")]
 		public interface Overlay : GLib.Object {
 			public abstract void expose ();
diff --git a/vapi/gtk4-unix-print.vapi b/vapi/gtk4-unix-print.vapi
index 38a742e01..6885b50ae 100644
--- a/vapi/gtk4-unix-print.vapi
+++ b/vapi/gtk4-unix-print.vapi
@@ -2,10 +2,10 @@
 
 [CCode (cprefix = "Gtk", gir_namespace = "Gtk", gir_version = "4.0", lower_case_cprefix = "gtk_")]
 namespace Gtk {
-	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
-	public class PageSetupUnixDialog : Gtk.Dialog, Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget, Gtk.Native, Gtk.ShortcutManager, Gtk.Root {
+	[CCode (cheader_filename = "gtk/gtkunixprint.h", type_id = "gtk_page_setup_unix_dialog_get_type ()")]
+	public class PageSetupUnixDialog : Gtk.Dialog, Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget, Gtk.Native, Gtk.Root, Gtk.ShortcutManager {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
-		public PageSetupUnixDialog (string title, Gtk.Window parent);
+		public PageSetupUnixDialog (string? title, Gtk.Window? parent);
 		public unowned Gtk.PageSetup get_page_setup ();
 		public unowned Gtk.PrintSettings get_print_settings ();
 		public void set_page_setup (Gtk.PageSetup page_setup);
@@ -14,7 +14,7 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
 	public abstract class PrintBackend : GLib.Object {
 	}
-	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
+	[CCode (cheader_filename = "gtk/gtkunixprint.h", type_id = "gtk_print_job_get_type ()")]
 	public class PrintJob : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public PrintJob (string title, Gtk.Printer printer, Gtk.PrintSettings settings, Gtk.PageSetup page_setup);
@@ -22,6 +22,7 @@ namespace Gtk {
 		public uint get_n_up ();
 		public Gtk.NumberUpLayout get_n_up_layout ();
 		public int get_num_copies ();
+		[CCode (array_length_pos = 0.1)]
 		public unowned Gtk.PageRange[] get_page_ranges ();
 		public Gtk.PageSet get_page_set ();
 		public Gtk.PrintPages get_pages ();
@@ -39,7 +40,7 @@ namespace Gtk {
 		public void set_n_up (uint n_up);
 		public void set_n_up_layout (Gtk.NumberUpLayout layout);
 		public void set_num_copies (int num_copies);
-		public void set_page_ranges (Gtk.PageRange[] ranges);
+		public void set_page_ranges ([CCode (array_length_cname = "n_ranges", array_length_pos = 1.1)] owned Gtk.PageRange[] ranges);
 		public void set_page_set (Gtk.PageSet page_set);
 		public void set_pages (Gtk.PrintPages pages);
 		public void set_reverse (bool reverse);
@@ -54,12 +55,12 @@ namespace Gtk {
 		public Gtk.PrintSettings settings { get; construct; }
 		public string title { get; construct; }
 		public bool track_print_status { get; set; }
-		public virtual signal void status_changed ();
+		public signal void status_changed ();
 	}
-	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
-	public class PrintUnixDialog : Gtk.Dialog, Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget, Gtk.Native, Gtk.ShortcutManager, Gtk.Root {
+	[CCode (cheader_filename = "gtk/gtkunixprint.h", type_id = "gtk_print_unix_dialog_get_type ()")]
+	public class PrintUnixDialog : Gtk.Dialog, Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget, Gtk.Native, Gtk.Root, Gtk.ShortcutManager {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
-		public PrintUnixDialog (string title, Gtk.Window parent);
+		public PrintUnixDialog (string? title, Gtk.Window? parent);
 		public void add_custom_tab (Gtk.Widget child, Gtk.Widget tab_label);
 		public int get_current_page ();
 		public bool get_embed_page_setup ();
@@ -75,7 +76,7 @@ namespace Gtk {
 		public void set_has_selection (bool has_selection);
 		public void set_manual_capabilities (Gtk.PrintCapabilities capabilities);
 		public void set_page_setup (Gtk.PageSetup page_setup);
-		public void set_settings (Gtk.PrintSettings settings);
+		public void set_settings (Gtk.PrintSettings? settings);
 		public void set_support_selection (bool support_selection);
 		public int current_page { get; set; }
 		public bool embed_page_setup { get; set; }
@@ -87,7 +88,7 @@ namespace Gtk {
 		public Gtk.Printer selected_printer { get; }
 		public bool support_selection { get; set; }
 	}
-	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
+	[CCode (cheader_filename = "gtk/gtkunixprint.h", type_id = "gtk_printer_get_type ()")]
 	public class Printer : GLib.Object {
 		[CCode (has_construct_function = false)]
 		public Printer (string name, Gtk.PrintBackend backend, bool virtual_);
@@ -132,9 +133,9 @@ namespace Gtk {
 		[NoAccessorMethod]
 		public bool paused { get; }
 		public string state_message { get; }
-		public virtual signal void details_acquired (bool p0);
+		public signal void details_acquired (bool success);
 	}
-	[CCode (cheader_filename = "gtk/gtkunixprint.h", cprefix = "GTK_PRINT_CAPABILITY_")]
+	[CCode (cheader_filename = "gtk/gtkunixprint.h", cprefix = "GTK_PRINT_CAPABILITY_", type_id = "gtk_print_capabilities_get_type ()")]
 	[Flags]
 	public enum PrintCapabilities {
 		PAGE_SET,
@@ -150,8 +151,8 @@ namespace Gtk {
 	}
 	[CCode (cheader_filename = "gtk/gtkunixprint.h", instance_pos = 1.9)]
 	public delegate void PrintJobCompleteFunc (Gtk.PrintJob print_job) throws GLib.Error;
-	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
+	[CCode (cheader_filename = "gtk/gtkunixprint.h", instance_pos = 1.9)]
 	public delegate bool PrinterFunc (Gtk.Printer printer);
 	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
-	public static void enumerate_printers (owned Gtk.PrinterFunc func, bool wait);
+	public static void enumerate_printers ([CCode (delegate_target_pos = 1.33333, destroy_notify_pos = 1.66667)] owned Gtk.PrinterFunc func, bool wait);
 }
diff --git a/vapi/gtk4.vapi b/vapi/gtk4.vapi
index 841487e8d..99574a9c2 100644
--- a/vapi/gtk4.vapi
+++ b/vapi/gtk4.vapi
@@ -5301,12 +5301,16 @@ namespace Gdk {
 		public unowned Gdk.Rectangle? get_anchor_rect ();
 		public void get_offset (out int dx, out int dy);
 		public Gdk.Gravity get_rect_anchor ();
+		[Version (since = "4.2")]
+		public void get_shadow_width (out int left, out int right, out int top, out int bottom);
 		public Gdk.Gravity get_surface_anchor ();
 		public unowned Gdk.PopupLayout @ref ();
 		public void set_anchor_hints (Gdk.AnchorHints anchor_hints);
 		public void set_anchor_rect (Gdk.Rectangle anchor_rect);
 		public void set_offset (int dx, int dy);
 		public void set_rect_anchor (Gdk.Gravity anchor);
+		[Version (since = "4.2")]
+		public void set_shadow_width (int left, int right, int top, int bottom);
 		public void set_surface_anchor (Gdk.Gravity anchor);
 		public void unref ();
 	}
@@ -6004,6 +6008,8 @@ namespace Gsk {
 	public class ConicGradientNode : Gsk.RenderNode {
 		[CCode (has_construct_function = false, type = "GskRenderNode*")]
 		public ConicGradientNode (Graphene.Rect bounds, Graphene.Point center, float rotation, [CCode (array_length_cname = "n_color_stops", array_length_pos = 4.1, array_length_type = "gsize")] Gsk.ColorStop[] color_stops);
+		[Version (since = "4.2")]
+		public float get_angle ();
 		public unowned Graphene.Point? get_center ();
 		[CCode (array_length_pos = 0.1, array_length_type = "gsize")]
 		public unowned Gsk.ColorStop[] get_color_stops ();
@@ -6097,6 +6103,12 @@ namespace Gsk {
 		public size_t get_n_color_stops ();
 		public unowned Graphene.Point? get_start ();
 	}
+	[CCode (cheader_filename = "gsk/gsk.h", type_id = "gsk_ngl_renderer_get_type ()")]
+	public class NglRenderer : Gsk.Renderer {
+		[CCode (has_construct_function = false, type = "GskRenderer*")]
+		[Version (since = "4.2")]
+		public NglRenderer ();
+	}
 	[CCode (cheader_filename = "gsk/gsk.h", type_id = "gsk_opacity_node_get_type ()")]
 	public class OpacityNode : Gsk.RenderNode {
 		[CCode (has_construct_function = false, type = "GskRenderNode*")]
@@ -6451,7 +6463,7 @@ namespace Gtk {
 		public void set_license_type (Gtk.License license_type);
 		public void set_logo (Gdk.Paintable? logo);
 		public void set_logo_icon_name (string? icon_name);
-		public void set_program_name (string name);
+		public void set_program_name (string? name);
 		public void set_system_information (string? system_information);
 		public void set_translator_credits (string? translator_credits);
 		public void set_version (string? version);
@@ -7388,6 +7400,8 @@ namespace Gtk {
 		public bool inconsistent { get; set; }
 		public string label { get; set; }
 		public bool use_underline { get; set; }
+		[Version (since = "4.2")]
+		public virtual signal void activate ();
 		public virtual signal void toggled ();
 	}
 	[CCode (cheader_filename = "gtk/gtk.h", type_id = "gtk_closure_expression_get_type ()")]
@@ -8191,9 +8205,10 @@ namespace Gtk {
 		public void unref ();
 		public unowned Gtk.ExpressionWatch watch (GLib.Object? this_, owned Gtk.ExpressionNotify notify);
 	}
-	[CCode (cheader_filename = "gtk/gtk.h", has_type_id = false, ref_function = "gtk_expression_watch_ref", unref_function = "gtk_expression_watch_unref")]
-	[Compact]
+	[CCode (cheader_filename = "gtk/gtk.h", ref_function = "gtk_expression_watch_ref", type_id = "gtk_expression_watch_get_type ()", unref_function = "gtk_expression_watch_unref")]
 	public class ExpressionWatch {
+		[CCode (has_construct_function = false)]
+		protected ExpressionWatch ();
 		public bool evaluate (GLib.Value value);
 		public unowned Gtk.ExpressionWatch @ref ();
 		public void unref ();
@@ -8697,11 +8712,15 @@ namespace Gtk {
 		public virtual void focus_in ();
 		public virtual void focus_out ();
 		public virtual void get_preedit_string (out string str, out Pango.AttrList attrs, out int cursor_pos);
+		[Version (deprecated = true, deprecated_since = "4.2")]
 		public virtual bool get_surrounding (out string text, out int cursor_index);
+		public virtual bool get_surrounding_with_selection (out string text, out int cursor_index, out int anchor_index);
 		public virtual void reset ();
 		public virtual void set_client_widget (Gtk.Widget? widget);
 		public virtual void set_cursor_location (Gdk.Rectangle area);
+		[Version (deprecated = true, deprecated_since = "4.2")]
 		public virtual void set_surrounding (string text, int len, int cursor_index);
+		public virtual void set_surrounding_with_selection (string text, int len, int cursor_index, int anchor_index);
 		public virtual void set_use_preedit (bool use_preedit);
 		[NoAccessorMethod]
 		public Gtk.InputHints input_hints { get; set; }
@@ -9114,7 +9133,7 @@ namespace Gtk {
 		public unowned Gtk.Adjustment get_adjustment ();
 		public unowned Gtk.ListBoxRow? get_row_at_index (int index_);
 		public unowned Gtk.ListBoxRow? get_row_at_y (int y);
-		public unowned Gtk.ListBoxRow get_selected_row ();
+		public unowned Gtk.ListBoxRow? get_selected_row ();
 		public GLib.List<weak Gtk.ListBoxRow> get_selected_rows ();
 		public Gtk.SelectionMode get_selection_mode ();
 		public bool get_show_separators ();
@@ -10642,7 +10661,7 @@ namespace Gtk {
 		public bool get_can_unselect ();
 		public unowned GLib.ListModel get_model ();
 		public uint get_selected ();
-		public void* get_selected_item ();
+		public unowned GLib.Object? get_selected_item ();
 		public void set_autoselect (bool autoselect);
 		public void set_can_unselect (bool can_unselect);
 		public void set_model (GLib.ListModel? model);
@@ -11083,10 +11102,6 @@ namespace Gtk {
 		public signal void preedit_changed (string preedit);
 		public signal void toggle_overwrite ();
 	}
-	[CCode (cheader_filename = "gtk/gtk.h", has_type_id = false)]
-	[Compact]
-	public class TextBTree {
-	}
 	[CCode (cheader_filename = "gtk/gtk.h", type_id = "gtk_text_buffer_get_type ()")]
 	public class TextBuffer : GLib.Object {
 		[CCode (has_construct_function = false)]
@@ -12078,7 +12093,7 @@ namespace Gtk {
 		public int get_margin_end ();
 		public int get_margin_start ();
 		public int get_margin_top ();
-		public unowned string? get_name ();
+		public unowned string get_name ();
 		public unowned Gtk.Native? get_native ();
 		public unowned Gtk.Widget? get_next_sibling ();
 		public double get_opacity ();
@@ -12292,6 +12307,8 @@ namespace Gtk {
 		public unowned Gtk.Widget? get_focus ();
 		public bool get_focus_visible ();
 		public unowned Gtk.WindowGroup get_group ();
+		[Version (since = "4.2")]
+		public bool get_handle_menubar_accel ();
 		public bool get_hide_on_close ();
 		public unowned string? get_icon_name ();
 		public bool get_mnemonics_visible ();
@@ -12321,6 +12338,8 @@ namespace Gtk {
 		public void set_display (Gdk.Display display);
 		public void set_focus (Gtk.Widget? focus);
 		public void set_focus_visible (bool setting);
+		[Version (since = "4.2")]
+		public void set_handle_menubar_accel (bool handle_menubar_accel);
 		public void set_hide_on_close (bool setting);
 		public void set_icon_name (string? name);
 		public static void set_interactive_debugging (bool enable);
@@ -12351,6 +12370,8 @@ namespace Gtk {
 		public Gtk.Widget focus_widget { owned get; set; }
 		[NoAccessorMethod]
 		public bool fullscreened { get; set construct; }
+		[Version (since = "4.2")]
+		public bool handle_menubar_accel { get; set; }
 		public bool hide_on_close { get; set; }
 		public string icon_name { get; set; }
 		[NoAccessorMethod]
@@ -12852,11 +12873,6 @@ namespace Gtk {
 		public Gtk.Requisition? copy ();
 		public void free ();
 	}
-	[CCode (cheader_filename = "gtk/gtk.h", has_type_id = false)]
-	public struct SettingsValue {
-		public weak string origin;
-		public GLib.Value value;
-	}
 	[CCode (cheader_filename = "gtk/gtk.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "gtk_text_iter_get_type ()")]
 	public struct TextIter {
 		public void assign (Gtk.TextIter other);
@@ -13509,7 +13525,9 @@ namespace Gtk {
 	public enum Ordering {
 		SMALLER,
 		EQUAL,
-		LARGER
+		LARGER;
+		[CCode (cheader_filename = "gtk/gtk.h")]
+		public static Gtk.Ordering from_cmpfunc (int cmpfunc_result);
 	}
 	[CCode (cheader_filename = "gtk/gtk.h", cprefix = "GTK_ORIENTATION_", type_id = "gtk_orientation_get_type ()")]
 	public enum Orientation {
@@ -14103,6 +14121,8 @@ namespace Gtk {
 	public const int INPUT_ERROR;
 	[CCode (cheader_filename = "gtk/gtk.h", cname = "GTK_INTERFACE_AGE")]
 	public const int INTERFACE_AGE;
+	[CCode (cheader_filename = "gtk/gtk.h", cname = "GTK_INVALID_LIST_POSITION")]
+	public const uint INVALID_LIST_POSITION;
 	[CCode (cheader_filename = "gtk/gtk.h", cname = "GTK_LEVEL_BAR_OFFSET_FULL")]
 	public const string LEVEL_BAR_OFFSET_FULL;
 	[CCode (cheader_filename = "gtk/gtk.h", cname = "GTK_LEVEL_BAR_OFFSET_HIGH")]
@@ -14236,7 +14256,7 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static void disable_setlocale ();
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public static int distribute_natural_allocation (int extra_space, uint n_requested_sizes, Gtk.RequestedSize sizes);
+	public static int distribute_natural_allocation (int extra_space, [CCode (array_length_cname = "n_requested_sizes", array_length_pos = 1.5, array_length_type = "guint")] Gtk.RequestedSize[] sizes);
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static bool drag_check_threshold (Gtk.Widget widget, int start_x, int start_y, int current_x, int current_y);
 	[CCode (cheader_filename = "gtk/gtk.h")]
@@ -14258,8 +14278,6 @@ namespace Gtk {
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static void hsv_to_rgb (float h, float s, float v, out float r, out float g, out float b);
 	[CCode (cheader_filename = "gtk/gtk.h")]
-	public static void im_modules_init ();
-	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static void init ();
 	[CCode (cheader_filename = "gtk/gtk.h")]
 	public static bool init_check ();
diff --git a/vapi/libftdi.vapi b/vapi/libftdi.vapi
index 7008985a0..b98f097e0 100644
--- a/vapi/libftdi.vapi
+++ b/vapi/libftdi.vapi
@@ -1,4 +1,4 @@
-[CCode (cprefix = "FTDI_", lower_case_prefix = "ftdi_", cheader_filename = "ftdi.h")]
+[CCode (cprefix = "FTDI_", lower_case_cprefix = "ftdi_", cheader_filename = "ftdi.h")]
 namespace FTDI {
 
 	public const int DEFAULT_EEPROM_SIZE;
diff --git a/vapi/libwnck-3.0.vapi b/vapi/libwnck-3.0.vapi
index 537099c2d..9fce7617f 100644
--- a/vapi/libwnck-3.0.vapi
+++ b/vapi/libwnck-3.0.vapi
@@ -61,6 +61,17 @@ namespace Wnck {
 		public virtual signal void icon_changed ();
 		public virtual signal void name_changed ();
 	}
+	[CCode (cheader_filename = "libwnck/libwnck.h", type_id = "wnck_image_menu_item_get_type ()")]
+	public class ImageMenuItem : Gtk.MenuItem, Atk.Implementor, Gtk.Actionable, Gtk.Activatable, Gtk.Buildable {
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public ImageMenuItem ();
+		public void make_label_bold ();
+		public void make_label_normal ();
+		public void set_image_from_icon_pixbuf (Gdk.Pixbuf pixbuf);
+		public void set_image_from_window (Wnck.Window window);
+		[CCode (has_construct_function = false, type = "GtkWidget*")]
+		public ImageMenuItem.with_label (string label);
+	}
 	[CCode (cheader_filename = "libwnck/libwnck.h", type_id = "wnck_pager_get_type ()")]
 	public class Pager : Gtk.Widget, Atk.Implementor, Gtk.Buildable {
 		[CCode (has_construct_function = false, type = "GtkWidget*")]
@@ -70,6 +81,7 @@ namespace Wnck {
 		public void set_display_mode (Wnck.PagerDisplayMode mode);
 		public bool set_n_rows (int n_rows);
 		public bool set_orientation (Gtk.Orientation orientation);
+		[Version (since = "3.36")]
 		public void set_scroll_mode (Wnck.PagerScrollMode scroll_mode);
 		[Version (since = "2.2")]
 		public void set_shadow_type (Gtk.ShadowType shadow_type);
@@ -363,9 +375,11 @@ namespace Wnck {
 		CONTENT
 	}
 	[CCode (cheader_filename = "libwnck/libwnck.h", cprefix = "WNCK_PAGER_SCROLL_", type_id = "wnck_pager_scroll_mode_get_type ()")]
+	[Version (since = "3.36")]
 	public enum PagerScrollMode {
 		@2D,
-		@1D
+		@1D,
+		NONE
 	}
 	[CCode (cheader_filename = "libwnck/libwnck.h", cprefix = "WNCK_TASKLIST_", type_id = "wnck_tasklist_grouping_type_get_type ()")]
 	public enum TasklistGroupingType {
diff --git a/vapi/linux.vapi b/vapi/linux.vapi
index 25b5188f3..37441b0fa 100644
--- a/vapi/linux.vapi
+++ b/vapi/linux.vapi
@@ -664,7 +664,7 @@ namespace Linux {
                 SET_TEARSYNC
             }
 
-            [Flags, CCode (cname = "int", has_type_id = false, prefix = "OMAPFB_CAPS_")]
+            [Flags, CCode (cname = "int", has_type_id = false, cprefix = "OMAPFB_CAPS_")]
             public enum Caps {
                 GENERIC_MASK,
                 LCDC_MASK,
@@ -1644,7 +1644,10 @@ namespace Linux {
 
         [CCode (cname = "struct input_event", has_type_id = false, cheader_filename = "linux/input.h")]
         public struct Event {
+            [Version (deprecated = true, replacement = "Event.input_event_sec and Event.input_event_usec")]
             public Posix.timeval time;
+            public time_t input_event_sec;
+            public long input_event_usec;
             public uint16 type;
             public uint16 code;
             public int32 value;
diff --git a/vapi/metadata/Gdk-4.0.metadata b/vapi/metadata/Gdk-4.0.metadata
index 3053be7df..40cb0fcbf 100644
--- a/vapi/metadata/Gdk-4.0.metadata
+++ b/vapi/metadata/Gdk-4.0.metadata
@@ -57,5 +57,3 @@ Device
 
 // vapigen actually generates the correctly, but in away that breaks BC
 Rectangle.union return_void
-
-DrawingContext skip
diff --git a/vapi/metadata/Gio-2.0-custom.vala b/vapi/metadata/Gio-2.0-custom.vala
index 9bb88ae92..1b212271a 100644
--- a/vapi/metadata/Gio-2.0-custom.vala
+++ b/vapi/metadata/Gio-2.0-custom.vala
@@ -177,7 +177,9 @@ namespace GLib {
 		}
 	}
 
+	[CCode (has_typedef = false)]
 	public delegate void SimpleActionActivateCallback (SimpleAction action, Variant? parameter);
+	[CCode (has_typedef = false)]
 	public delegate void SimpleActionChangeStateCallback (SimpleAction action, Variant value);
 	[CCode (cheader_filename = "gio/gio.h", cname = "GAsyncReadyCallback", instance_pos = 2.9)]
 	public delegate void TaskReadyCallback (GLib.Object? source_object, GLib.Task task);
diff --git a/vapi/metadata/Gio-2.0.metadata b/vapi/metadata/Gio-2.0.metadata
index 51c5e7079..2da6f7838 100644
--- a/vapi/metadata/Gio-2.0.metadata
+++ b/vapi/metadata/Gio-2.0.metadata
@@ -55,6 +55,9 @@ dbus_address_get_for_bus_sync parent="GLib.BusType" name="get_address_sync"
 SETTINGS_BACKEND_EXTENSION_POINT_NAME cheader_filename="gio/gsettingsbackend.h" feature_test_macro="G_SETTINGS_ENABLE_BACKEND"
 SettingsBackend
   .* cheader_filename="gio/gsettingsbackend.h" feature_test_macro="G_SETTINGS_ENABLE_BACKEND"
+  .changed_tree.tree type="GLib.Tree<string,GLib.Variant>"
+  .flatten_tree.tree type="GLib.Tree<string,GLib.Variant>"
+  .write_tree.tree type="GLib.Tree<string,GLib.Variant>"
 
 Action
   .parameter_type nullable
@@ -81,11 +84,11 @@ Cancellable
 Credentials
   .get_native skip=false
 DatagramBased
-  .condition_check#virtual_method virtual name="datagram_condition_check"
-  .condition_wait#virtual_method virtual name="datagram_condition_wait"
-  .create_source#virtual_method virtual name="datagram_create_source"
-  .receive_messages#virtual_method virtual name="datagram_receive_messages"
-  .send_messages#virtual_method virtual name="datagram_send_messages"
+  .condition_check#virtual_method virtual name="datagram_condition_check" no_wrapper
+  .condition_wait#virtual_method virtual name="datagram_condition_wait" no_wrapper
+  .create_source#virtual_method virtual name="datagram_create_source" no_wrapper
+  .receive_messages#virtual_method virtual name="datagram_receive_messages" no_wrapper
+  .send_messages#virtual_method virtual name="datagram_send_messages" no_wrapper
 DataInputStream
   .read_* throws="GLib.IOError"
   .read_line_finish_utf8 skip
@@ -157,6 +160,7 @@ ListModel
   .get_item#virtual_method skip
   .get_item#method skip=false abstract type="GLib.Object?"
 ListStore
+  .find_with_equal_func.equal_func type_arguments="GLib.Object"
   .insert_sorted.compare_func type_arguments="GLib.Object"
   .sort.compare_func type_arguments="GLib.Object"
 MemoryInputStream
@@ -276,11 +280,11 @@ Initable
 PollableInputStream
   .create_source type="GLib.PollableSource"
   .read_nonblocking.buffer type="uint8[]" array_length_idx=1
-  .read_nonblocking#virtual_method name="read_nonblocking_fn"
+  .read_nonblocking#virtual_method name="read_nonblocking_fn" no_wrapper
 PollableOutputStream
   .create_source type="GLib.PollableSource"
-  .write_nonblocking#virtual_method name="write_nonblocking_fn"
-  .writev_nonblocking#virtual_method name="writev_nonblocking_fn"
+  .write_nonblocking#virtual_method name="write_nonblocking_fn" no_wrapper
+  .writev_nonblocking#virtual_method name="writev_nonblocking_fn" no_wrapper
 TlsClientConnection
   .new nullable
   .accepted_cas type="GLib.List<GLib.ByteArray>"
diff --git a/vapi/metadata/Gtk-4.0-custom.vala b/vapi/metadata/Gtk-4.0-custom.vala
index c3f98568b..9c600f520 100644
--- a/vapi/metadata/Gtk-4.0-custom.vala
+++ b/vapi/metadata/Gtk-4.0-custom.vala
@@ -39,4 +39,7 @@ namespace Gtk {
 		[CCode (delegate_target = false)]
 		public unowned Gtk.BuildableParserErrorFunc error;
 	}
+
+	[CCode (cname = "GTK_INVALID_LIST_POSITION")]
+	public const uint INVALID_LIST_POSITION;
 }
diff --git a/vapi/metadata/Gtk-4.0.metadata b/vapi/metadata/Gtk-4.0.metadata
index 76cfd5e3b..d918d3c8e 100644
--- a/vapi/metadata/Gtk-4.0.metadata
+++ b/vapi/metadata/Gtk-4.0.metadata
@@ -6,10 +6,22 @@
 * cheader_filename="gtk/gtk.h"
 IMContext cheader_filename="gtk/gtk.h,gtk/gtkimmodule.h"
 
+// Needs to be in gtk4-unix-print
+PageSetupUnixDialog skip
+Printer skip
+PrinterFunc skip
+PrintBackend skip
+PrintCapabilities skip
+PrintJob skip
+PrintJobCompleteFunc skip
+PrintUnixDialog skip
+enumerate_printers skip
+
 // Causes vapigen issues, not sure why -- <union> without name
 
 // G-I doesn't support structs
 Border struct
+ExpressionWatch compact=false
 Requisition struct
 TextIter struct
 TreeIter struct
diff --git a/vapi/metadata/GtkUnixPrint-4.0-custom.vala b/vapi/metadata/GtkUnixPrint-4.0-custom.vala
new file mode 100644
index 000000000..88fb76f6b
--- /dev/null
+++ b/vapi/metadata/GtkUnixPrint-4.0-custom.vala
@@ -0,0 +1,17 @@
+namespace Gtk {
+	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
+	public class Printer : GLib.Object {
+		[CCode (cname = "gtk_printer_accepts_pdf")]
+		public bool get_accepts_pdf ();
+		[CCode (cname = "gtk_printer_accepts_ps")]
+		public bool get_accepts_ps ();
+		[CCode (cname = "gtk_printer_is_virtual")]
+		public bool get_is_virtual ();
+		public Gtk.PrintBackend backend { get; construct; }
+	}
+	[CCode (cheader_filename = "gtk/gtkunixprint.h")]
+	public abstract class PrintBackend : GLib.Object {
+	}
+	[CCode (cheader_filename = "gtk/gtkunixprint.h", instance_pos = 1.9)]
+	public delegate void PrintJobCompleteFunc (Gtk.PrintJob print_job) throws GLib.Error;
+}
diff --git a/vapi/metadata/GtkUnixPrint-4.0.metadata b/vapi/metadata/GtkUnixPrint-4.0.metadata
new file mode 100644
index 000000000..c595b6bde
--- /dev/null
+++ b/vapi/metadata/GtkUnixPrint-4.0.metadata
@@ -0,0 +1,12 @@
+* cheader_filename="gtk/gtkunixprint.h"
+* skip
+
+PageSetupUnixDialog skip=false
+Printer skip=false
+PrinterFunc skip=false
+//PrintBackend skip=false
+PrintCapabilities skip=false
+PrintJob skip=false
+//PrintJobCompleteFunc skip=false
+PrintUnixDialog skip=false
+enumerate_printers skip=false
diff --git a/vapi/packages/gtk4-unix-print/gtk4-unix-print.excludes b/vapi/packages/gtk4-unix-print/gtk4-unix-print.excludes
deleted file mode 100644
index e69de29bb..000000000
diff --git a/vapi/packages/gtk4-unix-print/gtk4-unix-print.files b/vapi/packages/gtk4-unix-print/gtk4-unix-print.files
diff --git a/vapi/posix.vapi b/vapi/posix.vapi
index 24c07b326..3bc992d55 100644
--- a/vapi/posix.vapi
+++ b/vapi/posix.vapi
@@ -2496,11 +2496,11 @@ namespace Posix {
 	[CCode (cheader_filename = "unistd.h")]
 	public int execlp (string path, params string[] arg);
 	[CCode (cheader_filename = "unistd.h")]
-	public int execv (string path, [CCode (array_length = false, null_terminated = true)] string[] arg);
+	public int execv (string path, [CCode (array_length = false, array_null_terminated = true)] string[] arg);
 	[CCode (cheader_filename = "unistd.h")]
-	public int execvp (string path, [CCode (array_length = false, null_terminated = true)] string[] arg);
+	public int execvp (string path, [CCode (array_length = false, array_null_terminated = true)] string[] arg);
 	[CCode (cheader_filename = "unistd.h")]
-	public int pipe ([CCode (array_length = false, null_terminated = false)] int[] pipefd);
+	public int pipe ([CCode (array_length = false, array_null_terminated = false)] int[] pipefd);
 	[CCode (cheader_filename = "unistd.h")]
 	public ssize_t read (int fd, void* buf, size_t count);
 	[CCode (cheader_filename = "unistd.h")]
diff --git a/vapi/webkit2gtk-4.0.vapi b/vapi/webkit2gtk-4.0.vapi
index b50ca9885..a7616e387 100644
--- a/vapi/webkit2gtk-4.0.vapi
+++ b/vapi/webkit2gtk-4.0.vapi
@@ -471,14 +471,24 @@ namespace WebKit {
 		public unowned WebKit.JavascriptResult @ref ();
 		public void unref ();
 	}
+	[CCode (cheader_filename = "webkit2/webkit2.h", type_id = "webkit_media_key_system_permission_request_get_type ()")]
+	public class MediaKeySystemPermissionRequest : GLib.Object, WebKit.PermissionRequest {
+		[CCode (has_construct_function = false)]
+		protected MediaKeySystemPermissionRequest ();
+	}
 	[CCode (cheader_filename = "webkit2/webkit2.h", ref_function = "webkit_mime_info_ref", type_id = "webkit_mime_info_get_type ()", unref_function = "webkit_mime_info_unref")]
 	[Compact]
 	public class MimeInfo {
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public unowned string get_description ();
 		[CCode (array_length = false, array_null_terminated = true)]
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public unowned string[] get_extensions ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public unowned string get_mime_type ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public unowned WebKit.MimeInfo @ref ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public void unref ();
 	}
 	[CCode (cheader_filename = "webkit2/webkit2.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "webkit_navigation_action_get_type ()")]
@@ -614,9 +624,13 @@ namespace WebKit {
 	public class Plugin : GLib.Object {
 		[CCode (has_construct_function = false)]
 		protected Plugin ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public unowned string get_description ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public unowned GLib.List<WebKit.MimeInfo> get_mime_info_list ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public unowned string get_name ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public unowned string get_path ();
 	}
 	[CCode (cheader_filename = "webkit2/webkit2.h", type_id = "webkit_pointer_lock_permission_request_get_type ()")]
@@ -729,7 +743,7 @@ namespace WebKit {
 		public uint16 get_port ();
 		[Version (since = "2.16")]
 		public unowned string? get_protocol ();
-		[Version (since = "2.16")]
+		[Version (deprecated = true, deprecated_since = "2.32", since = "2.16")]
 		public bool is_opaque ();
 		[Version (since = "2.16")]
 		public unowned WebKit.SecurityOrigin @ref ();
@@ -760,7 +774,7 @@ namespace WebKit {
 		public uint32 get_default_font_size ();
 		public uint32 get_default_monospace_font_size ();
 		public bool get_draw_compositing_indicators ();
-		[Version (since = "2.2")]
+		[Version (deprecated = true, deprecated_since = "2.32.", since = "2.2")]
 		public bool get_enable_accelerated_2d_canvas ();
 		[Version (since = "2.24")]
 		public bool get_enable_back_forward_navigation_gestures ();
@@ -790,6 +804,7 @@ namespace WebKit {
 		public bool get_enable_mock_capture_devices ();
 		public bool get_enable_offline_web_application_cache ();
 		public bool get_enable_page_cache ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public bool get_enable_plugins ();
 		[Version (deprecated = true, deprecated_since = "2.16.")]
 		public bool get_enable_private_browsing ();
@@ -836,7 +851,7 @@ namespace WebKit {
 		public void set_default_font_size (uint32 font_size);
 		public void set_default_monospace_font_size (uint32 font_size);
 		public void set_draw_compositing_indicators (bool enabled);
-		[Version (since = "2.2")]
+		[Version (deprecated = true, deprecated_since = "2.32.", since = "2.2")]
 		public void set_enable_accelerated_2d_canvas (bool enabled);
 		[Version (since = "2.24")]
 		public void set_enable_back_forward_navigation_gestures (bool enabled);
@@ -866,6 +881,7 @@ namespace WebKit {
 		public void set_enable_mock_capture_devices (bool enabled);
 		public void set_enable_offline_web_application_cache (bool enabled);
 		public void set_enable_page_cache (bool enabled);
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public void set_enable_plugins (bool enabled);
 		[Version (deprecated = true, deprecated_since = "2.16.")]
 		public void set_enable_private_browsing (bool enabled);
@@ -913,7 +929,7 @@ namespace WebKit {
 		public uint default_font_size { get; set construct; }
 		public uint default_monospace_font_size { get; set construct; }
 		public bool draw_compositing_indicators { get; set construct; }
-		[Version (since = "2.2")]
+		[Version (deprecated = true, deprecated_since = "2.32.", since = "2.2")]
 		public bool enable_accelerated_2d_canvas { get; set construct; }
 		[Version (since = "2.24")]
 		public bool enable_back_forward_navigation_gestures { get; set construct; }
@@ -943,6 +959,7 @@ namespace WebKit {
 		public bool enable_mock_capture_devices { get; set construct; }
 		public bool enable_offline_web_application_cache { get; set construct; }
 		public bool enable_page_cache { get; set construct; }
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public bool enable_plugins { get; set construct; }
 		[Version (deprecated = true, deprecated_since = "2.16.")]
 		public bool enable_private_browsing { get; set construct; }
@@ -1073,6 +1090,10 @@ namespace WebKit {
 		public void remove_filter (WebKit.UserContentFilter filter);
 		[Version (since = "2.26")]
 		public void remove_filter_by_id (string filter_id);
+		[Version (since = "2.32")]
+		public void remove_script (WebKit.UserScript script);
+		[Version (since = "2.32")]
+		public void remove_style_sheet (WebKit.UserStyleSheet stylesheet);
 		[Version (since = "2.8")]
 		public void unregister_script_message_handler (string name);
 		[Version (since = "2.22")]
@@ -1095,11 +1116,11 @@ namespace WebKit {
 		[Version (since = "2.28")]
 		public UserMessage (string name, GLib.Variant? parameters);
 		[Version (since = "2.28")]
-		public unowned GLib.UnixFDList get_fd_list ();
+		public unowned GLib.UnixFDList? get_fd_list ();
 		[Version (since = "2.28")]
 		public unowned string get_name ();
 		[Version (since = "2.28")]
-		public unowned GLib.Variant get_parameters ();
+		public unowned GLib.Variant? get_parameters ();
 		[Version (since = "2.28")]
 		public void send_reply (WebKit.UserMessage reply);
 		[CCode (has_construct_function = false)]
@@ -1161,6 +1182,7 @@ namespace WebKit {
 		public unowned string get_favicon_database_directory ();
 		[Version (since = "2.26")]
 		public unowned WebKit.GeolocationManager get_geolocation_manager ();
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public async GLib.List<WebKit.Plugin> get_plugins (GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[Version (since = "2.4")]
 		public WebKit.ProcessModel get_process_model ();
@@ -1170,6 +1192,7 @@ namespace WebKit {
 		public bool get_spell_checking_enabled ();
 		[CCode (array_length = false, array_null_terminated = true)]
 		public unowned string[] get_spell_checking_languages ();
+		[Version (deprecated = true, deprecated_since = "2.32.")]
 		public WebKit.TLSErrorsPolicy get_tls_errors_policy ();
 		[Version (since = "2.30")]
 		public bool get_use_system_appearance_for_scrollbars ();
@@ -1188,6 +1211,7 @@ namespace WebKit {
 		public void register_uri_scheme (string scheme, owned WebKit.URISchemeRequestCallback callback);
 		[Version (since = "2.28")]
 		public void send_message_to_all_extensions (WebKit.UserMessage message);
+		[Version (deprecated = true, deprecated_since = "2.32")]
 		public void set_additional_plugins_directory (string directory);
 		[Version (since = "2.18")]
 		public void set_automation_allowed (bool allowed);
@@ -1195,7 +1219,7 @@ namespace WebKit {
 		[Version (deprecated = true, deprecated_since = "2.10.")]
 		public void set_disk_cache_directory (string directory);
 		public void set_favicon_database_directory (string? path);
-		[Version (since = "2.16")]
+		[Version (deprecated = true, deprecated_since = "2.32.", since = "2.16")]
 		public void set_network_proxy_settings (WebKit.NetworkProxyMode proxy_mode, WebKit.NetworkProxySettings? proxy_settings);
 		public void set_preferred_languages ([CCode (array_length = false, array_null_terminated = true)] string[]? languages);
 		[Version (since = "2.4")]
@@ -1204,6 +1228,7 @@ namespace WebKit {
 		public void set_sandbox_enabled (bool enabled);
 		public void set_spell_checking_enabled (bool enabled);
 		public void set_spell_checking_languages ([CCode (array_length = false, array_null_terminated = true)] string[] languages);
+		[Version (deprecated = true, deprecated_since = "2.32.")]
 		public void set_tls_errors_policy (WebKit.TLSErrorsPolicy policy);
 		[Version (since = "2.30")]
 		public void set_use_system_appearance_for_scrollbars (bool enabled);
@@ -1526,14 +1551,20 @@ namespace WebKit {
 		public bool get_persistent_credential_storage_enabled ();
 		[Version (since = "2.30")]
 		public unowned string? get_service_worker_registrations_directory ();
+		[Version (since = "2.32")]
+		public WebKit.TLSErrorsPolicy get_tls_errors_policy ();
 		[Version (deprecated = true, deprecated_since = "2.24.", since = "2.10")]
 		public unowned string? get_websql_directory ();
 		[Version (since = "2.16")]
 		public async bool remove (WebKit.WebsiteDataTypes types, GLib.List<WebKit.WebsiteData> website_data, GLib.Cancellable? cancellable = null) throws GLib.Error;
 		[Version (since = "2.30")]
 		public void set_itp_enabled (bool enabled);
+		[Version (since = "2.32")]
+		public void set_network_proxy_settings (WebKit.NetworkProxyMode proxy_mode, WebKit.NetworkProxySettings? proxy_settings);
 		[Version (since = "2.30")]
 		public void set_persistent_credential_storage_enabled (bool enabled);
+		[Version (since = "2.32")]
+		public void set_tls_errors_policy (WebKit.TLSErrorsPolicy policy);
 		[Version (since = "2.10")]
 		public string base_cache_directory { get; construct; }
 		[Version (since = "2.10")]
@@ -1983,6 +2014,9 @@ namespace WebKit {
 	[CCode (cheader_filename = "webkit2/webkit2.h")]
 	public static uint get_minor_version ();
 	[CCode (cheader_filename = "webkit2/webkit2.h")]
+	[Version (since = "2.32")]
+	public static unowned string media_key_system_permission_get_name (WebKit.MediaKeySystemPermissionRequest request);
+	[CCode (cheader_filename = "webkit2/webkit2.h")]
 	[Version (since = "2.24")]
 	public static string? uri_for_display (string uri);
 	[CCode (cheader_filename = "webkit2/webkit2.h")]
diff --git a/vapi/webkit2gtk-web-extension-4.0.vapi b/vapi/webkit2gtk-web-extension-4.0.vapi
index f0c03aabb..893236c56 100644
--- a/vapi/webkit2gtk-web-extension-4.0.vapi
+++ b/vapi/webkit2gtk-web-extension-4.0.vapi
@@ -4104,11 +4104,11 @@ namespace WebKit {
 		public UserMessage (string name, GLib.Variant? parameters);
 		public static GLib.Quark error_quark ();
 		[Version (since = "2.28")]
-		public unowned GLib.UnixFDList get_fd_list ();
+		public unowned GLib.UnixFDList? get_fd_list ();
 		[Version (since = "2.28")]
 		public unowned string get_name ();
 		[Version (since = "2.28")]
-		public unowned GLib.Variant get_parameters ();
+		public unowned GLib.Variant? get_parameters ();
 		[Version (since = "2.28")]
 		public void send_reply (WebKit.UserMessage reply);
 		[CCode (has_construct_function = false)]
diff --git a/vapi/zlib.vapi b/vapi/zlib.vapi
index 2ce34ad16..6f76ba941 100644
--- a/vapi/zlib.vapi
+++ b/vapi/zlib.vapi
@@ -139,7 +139,7 @@ namespace ZLib {
 		public int inflate (int flush);
 		[CCode (cname = "inflateSetDictionary")]
 		public int set_dictionary ([CCode (array_length_type = "guint")] uint8[] dictionary);
-		[CCode (cnmae = "inflateSync")]
+		[CCode (cname = "inflateSync")]
 		public int sync ();
 		public int reset ();
 		public int prime (int bits, int value);

--- End Message ---
--- Begin Message ---
Unblocked.

--- End Message ---

Reply to: