anchor.diff:        (type-default-interface-unref iface))))
   
   
  -(defun expand-ginterface-type (type forward-p options &rest args)
  +(defun expand-interface-type (type forward-p options &rest args)
     (declare (ignore args))
     (let ((class (type-from-number type))
   	(slots (getf options :slots))) 
       `(defclass ,class (,(supertype type))
          ,(unless forward-p
   	  (slot-definitions class (query-object-interface-properties type) slots))
  -      (:metaclass ginterface-class)
  +      (:metaclass interface-class)
         (:gtype ,(register-type-as type)))))
   
  -(defun ginterface-dependencies (type options)
  +(defun interface-dependencies (type options)
     (delete-duplicates 
      (cons
       (supertype type)
  
positive.code:       collect (find-type-number type))))))
  
  
  (register-derivable-type 'ginterface "GInterface" 'expand-ginterface-type 'ginterface-dependencies)
  
negative.code:   (call-next-method))
  
  
  (defmethod validate-superclass ((class interface-class) (super standard-class))
    (subtypep (class-name super) 'interface))
  
  
  (define-type-method alien-type ((type interface))
    (declare (ignore type))
    (alien-type 'gobject))
  
  (define-type-method size-of ((type interface) &key inlined)
    (assert-not-inlined type inlined)
    (size-of 'gobject))
  
  (define-type-method from-alien-form ((type interface) location &key (ref :copy))
    (declare (ignore type))
    (from-alien-form 'gobject location :ref ref))
  
  (define-type-method from-alien-function ((type interface) &key (ref :copy))
    (declare (ignore type))
    (from-alien-function 'gobject :ref ref))
  
  (define-type-method to-alien-form ((type interface) instance &optional copy-p)
    (declare (ignore type))
    (to-alien-form 'gobject instance copy-p))
  
  (define-type-method to-alien-function ((type interface) &optional copy-p)
    (declare (ignore type))
    (to-alien-function 'gobject copy-p))
  
  (define-type-method reader-function ((type interface) &key ref inlined)
    (assert-not-inlined type inlined)
    (reader-function 'gobject :ref ref))
  
  (define-type-method writer-function ((type interface) &key temp inlined)
    (assert-not-inlined type inlined)
    (writer-function 'gobject :temp temp))
  
  (define-type-method destroy-function ((type interface) &key temp inlined)
    (assert-not-inlined type inlined)
    (destroy-function 'gobject :temp temp))
  
  