lots of refactoring love - breaking the logic down into smaller components, adding the ability to restore alive objects