diff --git a/src/002-config/fc-js-init.js b/src/002-config/fc-js-init.js
index ff16bb6b663e94dfc8ea59ef54558a9025662d97..3c923124687bca8b341a43c66007c69029106124 100644
--- a/src/002-config/fc-js-init.js
+++ b/src/002-config/fc-js-init.js
@@ -43,6 +43,7 @@ App.RA = {};
 App.SF = {};
 App.Corporate = {};
 App.SecExp = {};
+App.Reminders = {};
 
 
 Object.defineProperty(App, "activeSlave", {
diff --git a/src/Mods/Reminder/reminder.js b/src/Mods/Reminder/reminder.js
new file mode 100644
index 0000000000000000000000000000000000000000..f8675e215bcf8a7f1a9c21e97755e399af6082fb
--- /dev/null
+++ b/src/Mods/Reminder/reminder.js
@@ -0,0 +1,24 @@
+App.Reminders.add = function(entry, week) {
+    if (entry.length > 0 && week.length > 0 && !isNaN(week) && week > 0) {
+        V.reminders.entries.push(entry);
+        V.reminders.weeks.push(week);
+        V.reminders.text.push(`${entry} in ${numberWithPlural(week, 'week')}`);
+    }
+};
+
+App.Reminders.update = function() {
+    let entries = V.reminders.entries,
+        weeks = V.reminders.weeks,
+        text = [];
+
+    for (let i = 0; i < entries.length; i++) {
+        weeks[i]--;
+        if (weeks[i] > 0) {
+            text.push(`${entries[i]} in ${numberWithPluralOne(weeks[i], 'week')}`);
+        } else {
+            entries.splice(i, 1);
+            weeks.splice(i, 1);
+        }
+    }
+    V.reminders.text = text;
+};
diff --git a/src/init/storyInit.tw b/src/init/storyInit.tw
index 6c547f1b0a9aced2f971c88b54bb5d3344575ef9..58cec7d6145f92be30f9be61a175a938df2b345f 100644
--- a/src/init/storyInit.tw
+++ b/src/init/storyInit.tw
@@ -466,6 +466,7 @@ You should have received a copy of the GNU General Public License along with thi
 <<set $REReductionCheckinIDs = []>>
 <<set $activeSlave = 0>>
 <<set $activeChild = 0>>
+<<set $reminders = {entries: [], weeks: [], text: []}>>
 
 <<set $boomerangSlave = 0, $boomerangWeeks = 0, $boomerangBuyer = 0>>
 
diff --git a/src/pregmod/managePersonalAffairs.tw b/src/pregmod/managePersonalAffairs.tw
index dec16ce95ec10b9a31d2b626e4eee7e8fbc1186d..7e1791e1e43c4b22a7a21941dcd71afc593d34ef 100644
--- a/src/pregmod/managePersonalAffairs.tw
+++ b/src/pregmod/managePersonalAffairs.tw
@@ -218,6 +218,29 @@ Sclera:
 
 <br><br>
 
+<<if $reminders.text.length == 0>>
+	You do not have any reminders set.
+<<else>>
+	You have <<=numberWithPluralOne($reminders.text.length, "reminder")>> set:
+	<<print $reminders.text>>
+<</if>>
+<br>
+Remind me
+<<textbox "$reminderEntry" "">>
+in
+<<textbox "$reminderWeek" "">>
+weeks.
+[[Add|Manage Personal Affairs][App.Reminders.add($reminderEntry, $reminderWeek)]]
+<br>
+<<if $reminders.text.length > 0 || $cheatMode || $debugMode>>
+	[[Clear your reminders|Manage Personal Affairs][$reminders = {entries: [], weeks: [], text: []}]]
+	/* TODO: <<link "Clear a reminder" "Manage Personal Affairs">>
+		<<include "Clear Reminder">>
+	<</link>> */
+<</if>>
+
+<br><br>
+
 You ponder what skills may be useful in running your arcology.
 <br>Trading:
 <<if $PC.skill.trading >= 100>>
diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw
index 2efb59b9f0b5d3eddf411622099adfeb6b0024ed..7ccbd01a8131f2f940cf0fa5b1ac2c2f3872fddd 100644
--- a/src/uncategorized/BackwardsCompatibility.tw
+++ b/src/uncategorized/BackwardsCompatibility.tw
@@ -153,6 +153,10 @@
 	<<set $weddingPlanned = 0>>
 <</if>>
 
+<<if ndef $reminders>>
+	<<set $reminders = {entries: [], weeks: [], text: []}>>
+<</if>>
+
 <<if $releaseID < 1057>>
 	<<if ndef $PC.name>>
 		<<if def $PCName>>
diff --git a/src/uncategorized/endWeek.tw b/src/uncategorized/endWeek.tw
index d2889dcd828c33d74a7470d9cf0d9bb30b3154f8..bb42d234b1265747e13e158c3bff96e7f59e18e9 100644
--- a/src/uncategorized/endWeek.tw
+++ b/src/uncategorized/endWeek.tw
@@ -43,6 +43,10 @@
 	s.lastWeeksRepExpenses = 0;
 })>>
 
+<<if $reminders.text.length > 0>>
+	<<run App.Reminders.update()>>
+<</if>>
+
 <<if $organs.length > 0>>
 	<<run $organs.forEach(function(o) {
 		if (o.weeksToCompletion > 0) {
diff --git a/src/uncategorized/main.tw b/src/uncategorized/main.tw
index 192b5bd1ddab8d0a5857ac429d8f10a20e6fc696..9714f4b24f242567f938bfd970a4c296b1b915aa 100644
--- a/src/uncategorized/main.tw
+++ b/src/uncategorized/main.tw
@@ -80,6 +80,13 @@
 	<<include "Office Description">>
 	[[Hide|Main][$seeDesk = 0]]
 <</if>>
+<<if $reminders.text.length > 0>>
+<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;
+	You have <<=numberWithPluralOne($reminders.text.length, "reminder")>>:
+	<<print $reminders.text>>
+	<br><br>
+<</if>>
 <<if $seeFCNN == 1>>
 	<<if $FCNNstation != 1 && $week >= 90>>
 		<center>FCNN: <<print "FCNN service has been temporarily suspended. Please stand by.">> [[Hide|Main][$seeFCNN = 0]]</center>