And the idle relearn procedures aren't working? There are 3 processes that need to be followed in order to get the idle to relearn. If it doesn't find 650rpm + or - 100revs it won't set, in which case you most probably have a vacuum leak.
If the process works, and the idle drops, but then goes back to a high idle after you restart the engine next, you probably have an engine fault code logged in the ecu.
The rough idle, what makes it rough? Does it sound like it has lumpy cams? Is it missfiring?