a little more decomposition and get rid of assignment in expression and spruce up variable names a bit