refactored expense model