Ok, I *think* this is the finished RATTLE implementation, but I still need to (thoroughly) test it.