refactored for simpler gc objects but less generic gc algo