constraint based cleaning