P0004, P0005 and fixed P0003
Refactoring
Problem 0006