finished implementation @lizlux