May want to rethink this a bit see if we can avoid requiring an id to be set.