A shameless promotion of my own work in old threads, but I have recently made this solution available.