made initialize and cleanup synchronized so we can avoid un-needed duplicate initialization/cleanup