refactors charge method