public void setMetaClass(Object obj, MetaClass theMetaClass) {
    Class theClass = obj.getClass();
    final ClassInfo info = ClassInfo.getClassInfo(theClass);
    MetaClass oldMC = null;
    info.lock();
    try {
      oldMC = info.getPerInstanceMetaClass(obj);
      info.setPerInstanceMetaClass(obj, theMetaClass);
    } finally {
      info.unlock();
    }

    fireConstantMetaClassUpdate(obj, theClass, oldMC, theMetaClass);
  }