-#define construct_interface(MTYPE,...) _interface_##MTYPE##_ARG1(__VA_ARGS__)((void *)__get_##MTYPE##__VA_ARGS__)
-#define init_object(TYPE,...) _object_##TYPE##_(__VA_ARGS__)
-#define construct_object(TYPE,...) (struct TYPE *)_object_##TYPE##_
-#define _(OBJECT,...) ( _ASSERT(OBJECT), (*( OBJECT->interface->_ARG1(__VA_ARGS__,) )) ( OBJECT,OBJECT->interface->__VA_ARGS__ ) )
-#define __(OBJECT,...) ( _ASSERT(OBJECT), (*( __cll1_seekmethod(OBJECT->interface,_ARG1(__VA_ARGS__,)) )) ( OBJECT,OBJECT->interface->__VA_ARGS__ ) )
+#define new_interface(ID,MTYPE,...) struct _ARG1(__VA_ARGS__,) *ID=_interface_##MTYPE##_ARG1(__VA_ARGS__,) ((void *)__get_##TYPE##__VA_ARGS__,)
+#define init_interface(TYPE,...)
+#define construct_object(TYPE,...) (struct _ARG2(__VA_ARGS__,TYPE,) *)_object_##TYPE##_()
+#define init_object(TYPE,...) (struct TYPE *)_object_##TYPE##_(__VA_ARGS__)
+#define init_polymorph(TYPE,...) _object_##TYPE##_(__VA_ARGS__)
+#define _(OBJECT,...) ( _ASSERT(OBJECT), (*( OBJECT->interface->_ARG1(__VA_ARGS__,) )) ( OBJECT,OBJECT->interface->__VA_ARGS__ ) )
+#define __(OBJECT,...) ( _ASSERT(OBJECT), (*( __cll1_seekmethod(OBJECT->interface,_ARG1(__VA_ARGS__,)) )) ( OBJECT,OBJECT->interface->__VA_ARGS__ ) )