refactoring
material implementation