refactored FreeList to be unified