everything implemented but super broken!