finished some implementations