Index: trunk/lilv/lilv/lilvmm.hpp
===================================================================
--- trunk/lilv/lilv/lilvmm.hpp	(revision 4975)
+++ trunk/lilv/lilv/lilvmm.hpp	(revision 5092)
@@ -48,4 +48,9 @@
 	inline RT name(T1 a1, T2 a2) { \
 		return lilv_ ## prefix ## _ ## name(me, a1, a2); \
+	}
+
+#define LILV_WRAP3(RT, prefix, name, T1, a1, T2, a2, T3, a3) \
+	inline RT name(T1 a1, T2 a2, T3 a3) { \
+		return lilv_ ## prefix ## _ ## name(me, a1, a2, a3); \
 	}
 
@@ -138,4 +143,25 @@
 	LILV_WRAP1(bool, nodes, contains, const Node, node);
 	LILV_WRAP0(Node, nodes, get_first);
+};
+
+struct UI {
+	inline UI(const LilvUI* c_obj) : me(c_obj) {}
+	LILV_WRAP_CONVERSION(const LilvUI);
+
+	LILV_WRAP0(const LilvNode*, ui, get_uri);
+	LILV_WRAP0(const LilvNode*, ui, get_bundle_uri);
+	LILV_WRAP0(const LilvNode*, ui, get_binary_uri);
+	LILV_WRAP0(const LilvNodes*, ui, get_classes);
+	/*LILV_WRAP3(bool, ui, is_supported,
+	           LilvUISupportedFunc, supported_func,
+	           const LilvNode*,     container_type,
+	           const LilvNode**,    ui_type);*/
+	LILV_WRAP1(bool, ui, is_a, const LilvNode*, class_uri);
+
+	const LilvUI* me;
+};
+
+struct UIs {
+	LILV_WRAP_COLL(UIs, UI, uis);
 };
 
