Given polyhedron P and and a point x*, the separation problem for polyhedra asks to certify that x* ∈ P and if not, to determine an inequality that is satisfied by P and violated by x*. This problem is repeatedly solved in cutting plane methods for Integer Programming and the quality of the violated inequality is an essential feature in the performance of such methods. In the paper we address the problem of finding efficiently an inequality that is violated by x* and either defines an improper face or a facet of P. We provide some evidence that our method works on structured and unstructured problems.