expectation maximization seems to work