diff --git a/diner.py b/diner.py
index cfd8ddfc6b3544a21d0943f0929090289db017d0..b229e2ac1aa0f269b7dca2566dd1da174ff9a6aa 100644
--- a/diner.py
+++ b/diner.py
@@ -26,21 +26,26 @@ class Item(Persisted):
     name = Column(String(256), nullable=False)
     price = Column(Integer, nullable=False)
     menu = relationship('Menu', back_populates='items')
-    orders = relationship('Order', uselist=True, secondary='order_items', back_populates='items')
-    # # # If there isn't any extra payload in the join table, there's no need to explicitly mention it
+    orders = relationship('Order', uselist=True, secondary='order_items', viewonly=True)
+    order_items = relationship('OrderItem', uselist=True, back_populates='item')
+    # # # If there is extra payload in the join table, then we need to make sure Item & Order can access it
 
 
 class Order(Persisted):
     __tablename__ = 'orders'
     order_id = Column(Integer, primary_key=True)
     timestamp = Column(DateTime)
-    items = relationship('Item', uselist=True, secondary='order_items', back_populates='orders')
+    items = relationship('Item', uselist=True, secondary='order_items', viewonly=True)
+    order_items = relationship('OrderItem', uselist=True, back_populates='order')
 
 
 class OrderItem(Persisted):
     __tablename__ = 'order_items'
     order_id = Column(Integer, ForeignKey('orders.order_id', ondelete='CASCADE'), primary_key=True)
     item_id = Column(Integer, ForeignKey('items.item_id', ondelete='CASCADE'), primary_key=True)
+    amount = Column(Integer)
+    item = relationship('Item', back_populates='order_items')
+    order = relationship('Order', back_populates='order_items')
 
 
 class DinerDatabase(object):
diff --git a/diner_installer.py b/diner_installer.py
index f397337c63e2b7bc6b88c77df36c9b1255ead8d2..f402880a9aaed56350ea6828306fecd4d9677a29 100644
--- a/diner_installer.py
+++ b/diner_installer.py
@@ -15,7 +15,7 @@ def add_starter_data(session):
     orange_juice = Item(menu=beverage_menu, name='Orange Juice', price=149)
     short_stack = Item(menu=food_menu, name='Pancakes', price=399)
     regular_pancakes = Item(menu=food_menu, name='Pancakes', price=499)
-    first_order = Order(items=[orange_juice])
+    first_order = Order(order_items=[OrderItem(item=orange_juice, amount=2)])
     session.add(beverage_menu)
     session.add(food_menu)
     session.add(orange_juice)
@@ -41,6 +41,8 @@ def main():
         print([item.name for item in the_order.items])
         orange_juice: Item = session.query(Item).filter(Item.name == 'Orange Juice').one()
         print([order.order_id for order in orange_juice.orders])
+        print([f'{order_item.amount} {order_item.item.name}s' for order_item in the_order.order_items])
+        print([f'{order_item.amount} {orange_juice.name}s on order #{order_item.order.order_id}' for order_item in orange_juice.order_items])
     except SQLAlchemyError as exception:
         print('Database setup failed!', file=stderr)
         print(f'Cause: {exception}', file=stderr)