implements guards