Для этого потребовалось разбить одну большую проблему на несколько более мелких. Стоило только это сделать, как решения начали приходить сами собой.