diff --git a/check.py b/check.py
index 05d52b4..2e5f193 100755
--- a/check.py
+++ b/check.py
@@ -19,6 +19,14 @@ from urllib3.exceptions import InsecureRequestWarning  # type: ignore
 from urllib3.util.url import parse_url  # type: ignore
 
 
+class LiveConference(typing.TypedDict):
+    """Live conference."""
+
+    conference: str
+    year: int
+    live: date
+
+
 class AbsoluteDNSAdapter(HTTPAdapter):
     """A custom adapter for requests to ensure hostnames are treated as absolute."""
 
@@ -139,36 +147,45 @@ def load_yaml(name: str) -> typing.Any:
     return yaml.safe_load(open(filename))
 
 
-def main(show_not_live: bool = False) -> None:
-    """Check each conference."""
-    today = date.today()
+def check_conference_web_site(name: str, src_url: str, year: int) -> bool:
+    """Check if an individual web site is live."""
+    assert "{year}" in src_url
+    live, msg = check_conference(name, url := src_url.format(year=year))
+    if live:
+        body = f"{name}\n{url}\nWeb page title: {msg}"
+        send_mail(f"Conference site live: {name}", body)
+
+    return live
+
+
+def find_new_conference_web_sites(
+    today: date, live: list[LiveConference]
+) -> list[LiveConference]:
+    """Check for new conference web sites going live."""
     this_year = today.year
 
-    conferences = load_yaml("conferences")
-    live_conferences = load_yaml("live")
-    live_set = {(c["conference"], c["year"]) for c in live_conferences}
+    new: list[LiveConference] = []
 
-    new_live = False
+    live_set = {(c["conference"], c["year"]) for c in live}
+    for name, src_url in load_yaml("conferences").items():
+        new += [
+            {"conference": name, "year": year, "live": today}
+            for year in (this_year, this_year + 1)
+            if (name, year) not in live_set
+            and check_conference_web_site(name, src_url, year)
+        ]
+    return new
 
-    for name, src_url in conferences.items():
-        for year in this_year, this_year + 1:
-            if (name, year) in live_set:
-                continue
-            assert "{year}" in src_url
-            url = src_url.format(year=year)
-            live, msg = check_conference(name, url)
-            if not live:
-                continue
-            body = f"{name}\n{url}\nWeb page title: {msg}"
-            send_mail(f"Conference site live: {name}", body)
 
-            new_live = True
-            live_conferences.append({"conference": name, "year": year, "live": today})
+def main(show_not_live: bool = False) -> None:
+    """Check fow new conference web sites."""
+    live: list[LiveConference] = load_yaml("live")
+    if not (new := find_new_conference_web_sites(date.today(), live)):
+        return
 
-    if new_live:
-        live_filename = os.path.expanduser(config["data"]["live"])
-        with open(live_filename, "w") as out:
-            yaml.dump(live_conferences, stream=out, sort_keys=False)
+    live_filename = os.path.expanduser(config["data"]["live"])
+    with open(live_filename, "w") as out:
+        yaml.dump(live + new, stream=out, sort_keys=False)
 
 
 if __name__ == "__main__":