Step 10: complete form abstraction