diff --git a/edge-monitoring/edge_monitoring_server.py b/edge-monitoring/edge_monitoring_server.py
index 1bea10c..c5bb2f4 100755
--- a/edge-monitoring/edge_monitoring_server.py
+++ b/edge-monitoring/edge_monitoring_server.py
@@ -23,13 +23,20 @@
 from flask import Flask, jsonify, abort, request, Response
 import prometheus_client as prom
 
+# URL of maintenance calendar
 SECRET_ICAL_URL = os.environ.get("SECRET_ICAL_URL")
+
+# Aether environment that the server is monitoring (e.g., "production")
+# To schedule downtime, postfix the cluster name with the env: "ace-tucson-production"
+AETHER_ENV = os.environ.get("AETHER_ENV", "production")
+
+# Move to "no result" status if we don't hear from agent for this many seconds
 NO_RESULT_THRESHOLD = 720
 
 app = Flask(__name__)
 edges = [
     {
-        'name': 'production-edge-example',
+        'name': 'ace-example',
         'status': {
             'control_plane': 'connected',
             'user_plane': 'connected'
@@ -47,8 +54,7 @@
 }
 
 room_mapping = {
-    "production-edge-onf-menlo": "(Compute)-MP-1-Aether Production",
-    "production-edge-example": "(Compute)-MP-1-Aether Production" # for testing
+    "ace-menlo-pixel": "(Compute)-MP-1-Aether Production"
 }
 
 cp_status = prom.Gauge("aetheredge_status_control_plane", "Control plane status code", ["name"])
@@ -58,8 +64,14 @@
 
 def is_my_event(event, name):
     for field in ["summary", "location", "description"]:
-        if name in getattr(event, field, ""):
+        fullname = name
+        if name.startswith("ace-"):
+            fullname = "%s-%s" % (name, AETHER_ENV)
+        if fullname in getattr(event, field, ""):
             return True
+        if name in room_mapping:
+            if room_mapping[name] in getattr(event, field, ""):
+                return True
     return False
 
 def is_naive_datetime(d):
@@ -80,8 +92,6 @@
         if event.start < now and event.end > now:
             if is_my_event(event, name):
                 return True
-            if name in room_mapping and is_my_event(event, room_mapping[name]):
-                return True
     return False
 
 def pull_maintenance_events():
@@ -113,7 +123,7 @@
     res = []
     time_out_stale_results()
     for edge in edges:
-        if edge['name'] == "production-edge-example":
+        if edge['name'] == "ace-example":
             continue
 
         cp_status.labels(edge['name']).set(status_codes[edge['status']['control_plane']])
@@ -195,8 +205,8 @@
 
 
 if __name__ == '__main__':
-    if SECRET_ICAL_URL:
-        print(" * Starting maintenance calendar polling thread")
+    if SECRET_ICAL_URL and AETHER_ENV:
+        print(" * Starting maintenance calendar polling thread (Aether env: %s)" % AETHER_ENV)
         t = threading.Thread(target=pull_maintenance_events)
         t.start()
     app.run(debug=True, host='0.0.0.0', port=80)
