High-level steps:

Limitations: