basically works, needs time tuning