slow but complete