basics implemented
almost there