added divide by zero checks