Added iterative ! function and cleaned up names