Title: Dynamic Software Updating Abstract: Many important applications must run continuously and without interruption, yet must be changed to fix bugs or upgrade functionality. To date, no existing, general-purpose methodology for dynamic updating achieves a practical balance between flexibility, robustness, low overhead, and ease of use. We present a new approach for imperative languages that provides type-safe dynamic updating of native code in an extremely flexible manner (code, data, and types may be updated, at programmer-determined times) and permits the use of automated tools to aid the programmer in the updating process. Our system is based around dynamic patches, which contain both the updated code and the code needed to transition from the old version to the new. A novel aspect of our patches is that they consist of verifiable native code (or VNC, e.g. Typed Assembly Language or Proof-Carrying Code), which is native code accompanied by annotations that allow on-line verification of the code's safety. We discuss how patches are generated mostly automatically, how they are applied using our own novel dynamic-linking technology for VNC systems, and how code is compiled to make it updateable. To concretely illustrate and validate our system, we have implemented a sizeable application: a dynamically updateable web server, called FlashEd. We discuss our experience building and maintaining FlashEd. Performance experiments show that updateable FlashEd runs roughly 2% slower than a static one under various workloads.