cleaned up f