diff --git a/denis/configure.py b/denis/configure.py
index 94ec12bd..1bef66f4 100755
--- a/denis/configure.py
+++ b/denis/configure.py
@@ -19,6 +19,12 @@ def add_initial(parser, required=True):
                             help='Initial submission due date timestamp',
                             required=required)
 
+    def add_peer_review(parser, required=True):
+        parser.add_argument('-p', '--peer-review',
+                            type=int,
+                            help='Peer review submission due date timestamp',
+                            required=required)
+
     def add_final(parser, required=True):
         parser.add_argument('-f', '--final',
                             type=int,
@@ -30,11 +36,13 @@ def add_final(parser, required=True):
     create_parser = command_parsers.add_parser('create')
     add_assignment(create_parser)
     add_initial(create_parser)
+    add_peer_review(create_parser)
     add_final(create_parser)
 
     alter_parser = command_parsers.add_parser('alter')
     add_assignment(alter_parser)
     add_initial(alter_parser, required=False)
+    add_peer_review(alter_parser, required=False)
     add_final(alter_parser, required=False)
 
     remove_parser = command_parsers.add_parser('remove')
@@ -43,23 +51,32 @@ def add_final(parser, required=True):
     command_parsers.add_parser('dump')
     command_parsers.add_parser('reload')
 
+    # Dictionary containing the desired command and all flags with their values
     kwargs = vars(parser.parse_args())
-    globals()[kwargs.pop('command')](**kwargs)
+    # Subparsers store their name in the destination `'command'`
+    subparser_name = kwargs.pop('command')
+    # Get a handle to the function with the desired name
+    subparser_func = globals()[subparser_name]
+    # Call the desired subparser with the remaining flags/values as kwargs
+    subparser_func(**kwargs)
 
 
-def create(assignment, initial, final):
+def create(assignment, initial, peer_review, final):
     try:
         db.Assignment.create(name=assignment,
                              initial_due_date=initial,
+                             peer_review_due_date=peer_review,
                              final_due_date=final)
     except db.peewee.IntegrityError:
         print('cannot create assignment with duplicate name')
 
 
-def alter(assignment, initial, final):
+def alter(assignment, initial, peer_review, final):
     alterations = {}
     if initial is not None:
         alterations[db.Assignment.initial_due_date] = initial
+    if peer_review is not None:
+        alterations[db.Assignment.peer_review_due_date] = peer_review
     if final is not None:
         alterations[db.Assignment.final_due_date] = final
     if not alterations:
@@ -84,6 +101,7 @@ def dump():
     for asn in db.Assignment.select():
         print(f'''{asn.name}:
 \tInitial: {asn.initial_due_date}
+\tPeer Review: {asn.peer_review_due_date}
 \tFinal: {asn.final_due_date}''')
 
 
diff --git a/denis/db.py b/denis/db.py
index f5696100..0407269b 100755
--- a/denis/db.py
+++ b/denis/db.py
@@ -13,6 +13,7 @@ class Meta:
 class Assignment(BaseModel):
     name = peewee.TextField(unique=True)
     initial_due_date = peewee.IntegerField()
+    peer_review_due_date = peewee.IntegerField()
     final_due_date = peewee.IntegerField()
 
 
diff --git a/denis/peer_review.py b/denis/peer_review.py
new file mode 100755
index 00000000..05494ac1
--- /dev/null
+++ b/denis/peer_review.py
@@ -0,0 +1,2 @@
+#!/usr/bin/env python3
+print(__import__('sys').argv)
diff --git a/denis/start.py b/denis/start.py
index 8d9ddd7e..e0c1f044 100755
--- a/denis/start.py
+++ b/denis/start.py
@@ -31,6 +31,7 @@ def signal_handler(*_):
         for assignment in db.Assignment.select():
             name = assignment.name
             initial = assignment.initial_due_date
+            peer_review = assignment.peer_review_due_date
             final = assignment.final_due_date
 
             if in_the_future(initial):
@@ -38,6 +39,11 @@ def signal_handler(*_):
             else:
                 print(f'skipping initial for {name}', file=sys.stderr)
 
+            if in_the_future(peer_review):
+                procs.append(spawn_waiter(str(peer_review), name, './peer_review.py'))  # NOQA: E501
+            else:
+                print(f'skipping peer review for {name}', file=sys.stderr)
+
             if in_the_future(final):
                 procs.append(spawn_waiter(str(final), name, './final.py'))
             else:
