finish implementation