Refactored fields
Refactored fields
Changed to abstract class and rewrote class