We could optimistically try fetching the IM before running all the sanity checks: if it's there there won't be any need to create it.
(See my comment on the synchronized method)