diff --git a/doc/1.manual/x5.htm b/doc/1.manual/x5.htm
index ab950b9e17aabb94baf90383ebfbdf0d123fe881..6d40c6208f5571101e02943faead7284ee2f3912 100644
--- a/doc/1.manual/x5.htm
+++ b/doc/1.manual/x5.htm
@@ -20,6 +20,56 @@
 
 <H3> <A name="s2"> 5.1. release notes </A> </H3>
 
+<P> ------------------ 0.41 ----------------------------
+
+<P> Pd may be compiled in 64 bit address spaces; this is well tested on
+linux and at least seems to work on Microsoft and MacOS.  On linux, in fact,
+if you compile Pd in a 64-bit version of the OS it's automatically in the
+64 bit address space.
+
+<P> In linux, a "-nosleep" flag causes Pd to poll instead of sleeping as it
+waits for dac and adc; this is useful on multiprocessors when you don't mind
+having Pd occupy 100% of one processor and want to get latency as low as
+possible.  (If you don't use this, latency on multiprocessors---Intel Core 2 at
+least---is much worse for some reason than it is on uniprocessors.)  It's
+"experimental" but I use it every day.
+
+<P> added an experimental callback scheduler.  This might reduce latency in
+MacOS and/or Microsoft, although I haven't seen that actually happen yet.
+
+<P> removed limitation on huge messages from text files; this prevented long
+"data" arrays from reloading from disk correctly.
+
+<P> fixed crash bug closing patches with open GOPs.
+
+<P> changed selection strategy so that, right after duplicating a collection 
+of objects, clicking tends to select an already-selected object.
+
+<P> the cursor changes slightly more apprpriately when switching between edit
+to run modes.
+
+<P> got really confused about the proper role of "declare 'path" in abstractions;
+for the moment they are ignored.  I the future, it may be worthwhile to allow
+them but to have them act only locally to the abstraction; but this might mean
+a lot more computation overhead when opening files.
+
+<P> limited window sizes to that of the screen (otherwise, on Mac OS, it's
+impossible to resize them.)
+
+<P> fixed "startup" dialogs to allow unlimited "path" and "lib"  entries
+
+<P> started, but didn't finish, the process of getting Pd to compile with
+t_float as 64 bits.  This would slow Pd down but improve tabread4~'s accuracy.
+
+<P> made IEM Guis respect "-font" flag and friends.  New startup flags:
+"-font-face" (badly named); "-font-size" sysnonym of "-font".  (Large patch from
+HC).
+
+<P> String overflow protection here and there.
+
+<P> migrated to ".net" compiler ("VC 2005", a free download).
+
+
 <P> ------------------ 0.40-1 --------------------------
 
 <P> Fixed "declare" which wasn't working properly yet in 0.40-0, and
diff --git a/src/notes.txt b/src/notes.txt
index b8f65b707fde027e1b952517e58698f0efb8576b..168bd18407be62c6a76b30fa1b87243fb0930595 100644
--- a/src/notes.txt
+++ b/src/notes.txt
@@ -1,11 +1,4 @@
 ---------------- dolist --------------------
-fixed crash bug closing patches with open GOPs
-fixed PC device counting problem (first device invoked by -audiodev 0)
-fixed MSTACKSIZE limitation in m_binbuf.c
-fixed so that if more than one object is selected, clicking prefers to
-    "hit" a selected one (better dragging after "duplicate")
-
-
 test:
 compile on various versions of linux
 windows:
diff --git a/src/s_loader.c b/src/s_loader.c
index 4788c13cb4e1b179c0b6ba875e28cdc1f30df284..da2732f390059a103072628cee3b40fd84eb49b6 100644
--- a/src/s_loader.c
+++ b/src/s_loader.c
@@ -238,3 +238,37 @@ int sys_load_lib(t_canvas *canvas, char *classname)
     return ok;
 }
 
+int sys_run_scheduler(const char *externalschedlibname,
+    const char *sys_extraflagsstring)
+{
+    typedef int (*t_externalschedlibmain)(const char *);
+    t_externalschedlibmain externalmainfunc;
+    char filename[MAXPDSTRING];
+    snprintf(filename, sizeof(filename), "%s.%s", externalschedlibname,
+        sys_dllextent);
+    sys_bashfilename(filename, filename);
+#ifdef MSW
+    {
+        HINSTANCE ntdll = LoadLibrary(filename);
+        if (!ntdll)
+        {
+            post("%s: couldn't load external scheduler lib ", filename);
+            return (0);
+        }
+        externalmainfunc =
+            (t_externalschedlibmain)GetProcAddress(ntdll, "main");
+    }
+#else
+    {
+        void *dlobj = dlopen(filename, RTLD_NOW | RTLD_GLOBAL);
+        if (!dlobj)
+        {
+            post("%s: %s", filename, dlerror());
+            return (0);
+        }
+        externalmainfunc = (t_externalschedlibmain)dlsym(dlobj,
+            "pd_extern_sched");
+    }
+#endif
+    return((*externalmainfunc)(sys_extraflagsstring));
+}
diff --git a/src/s_main.c b/src/s_main.c
index d8d8602d1abf7099356fb0772c979d05c7214653..1838a0a7d02b65092979f0a378154f9a5a80f832 100644
--- a/src/s_main.c
+++ b/src/s_main.c
@@ -77,7 +77,8 @@ int sys_externalschedlib;
 char sys_externalschedlibname[MAXPDSTRING];
 int sys_extraflags;
 char sys_extraflagsstring[MAXPDSTRING];
-
+int sys_run_scheduler(const char *externalschedlibname,
+    const char *sys_extraflagsstring);
 
     /* here the "-1" counts signify that the corresponding vector hasn't been
     specified in command line arguments; sys_set_audio_settings will detect it
@@ -291,28 +292,8 @@ int sys_main(int argc, char **argv)
     if (sys_startgui(sys_guidir->s_name))       /* start the gui */
         return(1);
     if (sys_externalschedlib)
-    {
-#ifdef MSW
-        typedef int (*t_externalschedlibmain)(char *);
-        t_externalschedlibmain externalmainfunc;
-        HINSTANCE ntdll;
-        char filename[MAXPDSTRING];
-
-        snprintf(filename, sizeof(filename), "%s.dll", sys_externalschedlibname);
-        sys_bashfilename(filename, filename);
-        ntdll = LoadLibrary(filename);
-        if (!ntdll)
-        {
-              post("%s: couldn't load external scheduler lib ", filename);
-              return (0);
-        }
-        externalmainfunc = (t_externalschedlibmain)GetProcAddress(ntdll,
-                                                                  "main");
-        return((*externalmainfunc)(sys_extraflagsstring));
-#else
-        return (0);
-#endif
-    }
+        return (sys_run_scheduler(sys_externalschedlibname,
+            sys_extraflagsstring));
     else
     {
             /* open audio and MIDI */