I think this method could be broken up over several methods. Not only is it long, but it's also 3 levels deep, making it hard to read or test.