finish implementation part