introduce versioned messages and snapshots