Factor out multi-display code

This should help us with a few limitations we've faced, and enable future refacotrs