SCHEME_FALSE, SCHEME_TRUE, SCHEME_NULL, and SCHEME_UNSPECIFIC should be functions, not constants: Not x = SCHEME_FALSE; but: SCHEME_MAKE_FALSE (&x, instance); because, you never know, those constants might be heap allocated. -t