updated implementations