everything works, almost everything implemented