diff --git a/ChangeLog b/ChangeLog
index b679bdefb77c2118302e0a02ac53aa58575e29fd..7f9dc205da40b1a3015467625042f6783f46808c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
-Changes in version 0.2.2.3-alpha - 2009-??-??
+Changes in version 0.2.2.3-alpha - 2009-09-23
+  o Minor bugfixes:
+    - If the networkstatus consensus tells us that we should use a
+      negative circuit package window, ignore it. Otherwise we'll
+      believe it and then trigger an assert.
+
 
 Changes in version 0.2.2.2-alpha - 2009-09-21
   o Major features:
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 259666732ac4aa808339f7c50f35a5bc847588be..560bec55f13ca224cada38fa5342dd3ee4f9ee46 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -367,10 +367,11 @@ circuit_purpose_to_controller_string(uint8_t purpose)
 int32_t
 circuit_initial_package_window(void)
 {
-  networkstatus_t *consensus = networkstatus_get_latest_consensus();
-  if (consensus)
-    return networkstatus_get_param(consensus, "circwindow", CIRCWINDOW_START);
-  return CIRCWINDOW_START;
+  int32_t num = networkstatus_get_param(NULL, "circwindow", CIRCWINDOW_START);
+  /* If the consensus tells us a negative number, we'd assert. */
+  if (num < 0)
+    num = CIRCWINDOW_START;
+  return num;
 }
 
 /** Initialize the common elements in a circuit_t, and add it to the global
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index fd38df4e68a5a8c374fd58f1ecf79ea69ed88ac3..5d1f8b24a32cd5f0c8911557055d163a1ff5bfbd 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -1894,14 +1894,18 @@ networkstatus_dump_bridge_status_to_file(time_t now)
 }
 
 /** Return the value of a integer parameter from the networkstatus <b>ns</b>
- * whose name is <b>param_name</b>.  Return <b>default_val</b> if ns is NULL,
- * or if it has no parameter called <b>param_name</b>. */
+ * whose name is <b>param_name</b>.  If <b>ns</b> is NULL, try loading the
+ * latest consensus ourselves. Return <b>default_val</b> if no latest
+ * consensus, or if it has no parameter called <b>param_name</b>. */
 int32_t
 networkstatus_get_param(networkstatus_t *ns, const char *param_name,
                         int32_t default_val)
 {
   size_t name_len;
 
+  if (!ns) /* if they pass in null, go find it ourselves */
+    ns = networkstatus_get_latest_consensus();
+
   if (!ns || !ns->net_params)
     return default_val;