Just a thought: having a specific type that supports both shared and unshared versions probably isn't going to work. Shared objects are their own beast.