    /*
     *  call-seq:
     *    register(uri, custom_handler_class)
     *
     *  Register a class that implements custom XLST transformation functions.
     */
    static VALUE registr(VALUE self, VALUE uri, VALUE obj)
    {
        VALUE modules = rb_iv_get(self, "@modules");
        if(NIL_P(modules)) rb_raise(rb_eRuntimeError, "wtf! @modules isn't set");

        rb_hash_aset(modules, uri, obj);
        xsltRegisterExtModule((unsigned char *)StringValuePtr(uri), initFunc, shutdownFunc);
        return self;
    }