If implementation