diff --git a/autobuild.xml b/autobuild.xml
index 11c2da52dc25642bda3b04818f32043b2749004a..5df49d5a39abda32939439bba4f91bdb88c81f09 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -186,9 +186,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>ac37d0038c91b0672fa31a02731f0eac</string>
+              <string>d935c41632303f704bda003a463d929a</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Darwin/installer/boost-1.52.0-darwin-20121218.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270616/arch/Darwin/installer/boost-1.52.0-darwin-20130220.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -198,9 +198,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>146ed8a8c2ef8ab3f0a6c4f214fc5c22</string>
+              <string>45c5f3440f2f0c36ba9f79f66f4a2e5c</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Linux/installer/boost-1.52.0-linux-20121218.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270616/arch/Linux/installer/boost-1.52.0-linux-20130221.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -210,9 +210,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>3ea60f17d986b7e8a3351298734bdca4</string>
+              <string>b004df5ef67142a2d1efb1d60d7e2da0</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/CYGWIN/installer/boost-1.52.0-windows-20121218.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270616/arch/CYGWIN/installer/boost-1.52.0-windows-20130220.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 452fd5f35602e259915acab77a068d1bd6e16be4..084ba7ea982323d3cd762882e5868e261edfe717 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -192,12 +192,7 @@ endif (LINUX)
 
 
 if (DARWIN)
-  # NOTE (per http://lists.apple.com/archives/darwin-dev/2008/Jan/msg00232.html):
-  # > Why the bus error? What am I doing wrong? 
-  # This is a known issue where getcontext(3) is writing past the end of the
-  # ucontext_t struct when _XOPEN_SOURCE is not defined (rdar://problem/5578699 ).
-  # As a workaround, define _XOPEN_SOURCE before including ucontext.h.
-  add_definitions(-DLL_DARWIN=1 -D_XOPEN_SOURCE)
+  add_definitions(-DLL_DARWIN=1)
   set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")
   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
   set(DARWIN_extra_cstar_flags "-mlong-branch -g")
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 1acb2bbbfdfb3650cc66809d01a315e2816fec25..cff762e1f024cb447e68d40e4151253b4640a86d 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -7,11 +7,12 @@ set(Boost_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindBoost)
 
+  set(BOOST_CONTEXT_LIBRARY boost_context-mt)
+  set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
   set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
   set(BOOST_REGEX_LIBRARY boost_regex-mt)
   set(BOOST_SIGNALS_LIBRARY boost_signals-mt)
   set(BOOST_SYSTEM_LIBRARY boost_system-mt)
-  set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
   set(BOOST_THREAD_LIBRARY boost_thread-mt)
 else (STANDALONE)
   use_prebuilt_binary(boost)
@@ -20,6 +21,12 @@ else (STANDALONE)
 
   if (WINDOWS)
     if(MSVC80)
+      set(BOOST_CONTEXT_LIBRARY 
+          optimized libboost_context-vc80-mt-${BOOST_VERSION}
+          debug libboost_context-vc80-mt-gd-${BOOST_VERSION})
+      set(BOOST_FILESYSTEM_LIBRARY 
+          optimized libboost_filesystem-vc80-mt-${BOOST_VERSION}
+          debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION})
       set(BOOST_PROGRAM_OPTIONS_LIBRARY 
           optimized libboost_program_options-vc80-mt-${BOOST_VERSION}
           debug libboost_program_options-vc80-mt-gd-${BOOST_VERSION})
@@ -32,59 +39,74 @@ else (STANDALONE)
       set(BOOST_SYSTEM_LIBRARY 
           optimized libboost_system-vc80-mt-${BOOST_VERSION}
           debug libboost_system-vc80-mt-gd-${BOOST_VERSION})
-      set(BOOST_FILESYSTEM_LIBRARY 
-          optimized libboost_filesystem-vc80-mt-${BOOST_VERSION}
-          debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION})
+      set(BOOST_THREAD_LIBRARY 
+          optimized libboost_thread-vc80-mt-${BOOST_VERSION}
+          debug libboost_thread-vc80-mt-gd-${BOOST_VERSION})
     else(MSVC80)
       # MSVC 10.0 config
+      set(BOOST_CONTEXT_LIBRARY 
+          optimized libboost_context-mt
+          debug libboost_context-mt-gd)
+      set(BOOST_FILESYSTEM_LIBRARY 
+          optimized libboost_filesystem-mt
+          debug libboost_filesystem-mt-gd)
       set(BOOST_PROGRAM_OPTIONS_LIBRARY 
           optimized libboost_program_options-mt
           debug libboost_program_options-mt-gd)
       set(BOOST_REGEX_LIBRARY
           optimized libboost_regex-mt
           debug libboost_regex-mt-gd)
+      set(BOOST_SIGNALS_LIBRARY 
+          optimized libboost_signals-mt
+          debug libboost_signals-mt-gd)
       set(BOOST_SYSTEM_LIBRARY 
           optimized libboost_system-mt
           debug libboost_system-mt-gd)
-      set(BOOST_FILESYSTEM_LIBRARY 
-          optimized libboost_filesystem-mt
-          debug libboost_filesystem-mt-gd)
       set(BOOST_THREAD_LIBRARY 
           optimized libboost_thread-mt
           debug libboost_thread-mt-gd)
     endif (MSVC80)
   elseif (LINUX)
+    set(BOOST_CONTEXT_LIBRARY
+        optimized boost_context-mt
+        debug boost_context-mt-d)
+    set(BOOST_FILESYSTEM_LIBRARY
+        optimized boost_filesystem-mt
+        debug boost_filesystem-mt-d)
     set(BOOST_PROGRAM_OPTIONS_LIBRARY
         optimized boost_program_options-mt
         debug boost_program_options-mt-d)
     set(BOOST_REGEX_LIBRARY
         optimized boost_regex-mt
         debug boost_regex-mt-d)
+    set(BOOST_SIGNALS_LIBRARY
+        optimized boost_signals-mt
+        debug boost_signals-mt-d)
     set(BOOST_SYSTEM_LIBRARY
         optimized boost_system-mt
         debug boost_system-mt-d)
-    set(BOOST_FILESYSTEM_LIBRARY
-        optimized boost_filesystem-mt
-        debug boost_filesystem-mt-d)
     set(BOOST_THREAD_LIBRARY
         optimized boost_thread-mt
         debug boost_thread-mt-d)
   elseif (DARWIN)
-    set(BOOST_PROGRAM_OPTIONS_LIBRARY
-        optimized boost_program_options-mt
-        debug boost_program_options-mt-d)
+    set(BOOST_CONTEXT_LIBRARY
+        optimized boost_context-mt
+        debug boost_context-mt-d)
+    set(BOOST_FILESYSTEM_LIBRARY
+        optimized boost_filesystem-mt
+        debug boost_filesystem-mt-d)
     set(BOOST_PROGRAM_OPTIONS_LIBRARY
         optimized boost_program_options-mt
         debug boost_program_options-mt-d)
     set(BOOST_REGEX_LIBRARY
         optimized boost_regex-mt
         debug boost_regex-mt-d)
+    set(BOOST_SIGNALS_LIBRARY
+        optimized boost_signals-mt
+        debug boost_signals-mt-d)
     set(BOOST_SYSTEM_LIBRARY
         optimized boost_system-mt
         debug boost_system-mt-d)
-    set(BOOST_FILESYSTEM_LIBRARY
-        optimized boost_filesystem-mt
-        debug boost_filesystem-mt-d)
     set(BOOST_THREAD_LIBRARY
         optimized boost_thread-mt
         debug boost_thread-mt-d)
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index c32e357da3dc9714fa048a03ebc8fdb0777fda30..8457cf5359e76c71602fa289fd2301630f1c2326 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -254,12 +254,13 @@ elseif(LINUX)
         libapr-1.so.0
         libaprutil-1.so.0
         libatk-1.0.so
+        libboost_context-mt.so.${BOOST_VERSION}.0
+        libboost_filesystem-mt.so.${BOOST_VERSION}.0
         libboost_program_options-mt.so.${BOOST_VERSION}.0
         libboost_regex-mt.so.${BOOST_VERSION}.0
-        libboost_thread-mt.so.${BOOST_VERSION}.0
-        libboost_filesystem-mt.so.${BOOST_VERSION}.0
         libboost_signals-mt.so.${BOOST_VERSION}.0
         libboost_system-mt.so.${BOOST_VERSION}.0
+        libboost_thread-mt.so.${BOOST_VERSION}.0
         libbreakpad_client.so.0
         libcollada14dom.so
         libcrypto.so.1.0.0
diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp
index 0b5829eb7ee00821b55b02fbdb6c32f9e48406d9..912270430602f0eddaec965b2732bc6375c5ff62 100644
--- a/indra/llcommon/llcoros.cpp
+++ b/indra/llcommon/llcoros.cpp
@@ -115,7 +115,7 @@ std::string LLCoros::getNameByID(const void* self_id) const
     // passed to us comes.
     for (CoroMap::const_iterator mi(mCoros.begin()), mend(mCoros.end()); mi != mend; ++mi)
     {
-        namespace coro_private = boost::coroutines::detail;
+        namespace coro_private = boost::dcoroutines::detail;
         if (static_cast<void*>(coro_private::coroutine_accessor::get_impl(const_cast<coro&>(*mi->second)).get())
             == self_id)
         {
diff --git a/indra/llcommon/llcoros.h b/indra/llcommon/llcoros.h
index d75f28ec1a5de4eaf43a5058386369d536b3bb4d..03df406b688d8665a67394432f6c11cfa1f8de1c 100644
--- a/indra/llcommon/llcoros.h
+++ b/indra/llcommon/llcoros.h
@@ -29,7 +29,7 @@
 #if ! defined(LL_LLCOROS_H)
 #define LL_LLCOROS_H
 
-#include <boost/coroutine/coroutine.hpp>
+#include <boost/dcoroutine/coroutine.hpp>
 #include "llsingleton.h"
 #include <boost/ptr_container/ptr_map.hpp>
 #include <string>
@@ -78,8 +78,8 @@
 class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
 {
 public:
-    /// Canonical boost::coroutines::coroutine signature we use
-    typedef boost::coroutines::coroutine<void()> coro;
+    /// Canonical boost::dcoroutines::coroutine signature we use
+    typedef boost::dcoroutines::coroutine<void()> coro;
     /// Canonical 'self' type
     typedef coro::self self;
 
diff --git a/indra/llcommon/lleventcoro.h b/indra/llcommon/lleventcoro.h
index 88a5e6ec74c639310b69ca86cdb3ba211c8519c6..a42af63b650fdb6b697ea53a1ac93e28ec5184aa 100644
--- a/indra/llcommon/lleventcoro.h
+++ b/indra/llcommon/lleventcoro.h
@@ -29,8 +29,8 @@
 #if ! defined(LL_LLEVENTCORO_H)
 #define LL_LLEVENTCORO_H
 
-#include <boost/coroutine/coroutine.hpp>
-#include <boost/coroutine/future.hpp>
+#include <boost/dcoroutine/coroutine.hpp>
+#include <boost/dcoroutine/future.hpp>
 #include <boost/optional.hpp>
 #include <string>
 #include <stdexcept>
@@ -206,13 +206,13 @@ LLSD postAndWait(SELF& self, const LLSD& event, const LLEventPumpOrPumpName& req
                  const LLEventPumpOrPumpName& replyPump, const LLSD& replyPumpNamePath=LLSD())
 {
     // declare the future
-    boost::coroutines::future<LLSD> future(self);
+    boost::dcoroutines::future<LLSD> future(self);
     // make a callback that will assign a value to the future, and listen on
     // the specified LLEventPump with that callback
     std::string listenerName(LLEventDetail::listenerNameForCoro(self));
     LLTempBoundListener connection(
         replyPump.getPump().listen(listenerName,
-                                   voidlistener(boost::coroutines::make_callback(future))));
+                                   voidlistener(boost::dcoroutines::make_callback(future))));
     // skip the "post" part if requestPump is default-constructed
     if (requestPump)
     {
@@ -257,7 +257,7 @@ namespace LLEventDetail
      * This helper is specifically for the two-pump version of waitForEventOn().
      * We use a single future object, but we want to listen on two pumps with it.
      * Since we must still adapt from (the callable constructed by)
-     * boost::coroutines::make_callback() (void return) to provide an event
+     * boost::dcoroutines::make_callback() (void return) to provide an event
      * listener (bool return), we've adapted LLVoidListener for the purpose. The
      * basic idea is that we construct a distinct instance of WaitForEventOnHelper
      * -- binding different instance data -- for each of the pumps. Then, when a
@@ -331,16 +331,16 @@ LLEventWithID postAndWait2(SELF& self, const LLSD& event,
                            const LLSD& replyPump1NamePath=LLSD())
 {
     // declare the future
-    boost::coroutines::future<LLEventWithID> future(self);
+    boost::dcoroutines::future<LLEventWithID> future(self);
     // either callback will assign a value to this future; listen on
     // each specified LLEventPump with a callback
     std::string name(LLEventDetail::listenerNameForCoro(self));
     LLTempBoundListener connection0(
         replyPump0.getPump().listen(name + "a",
-                               LLEventDetail::wfeoh(boost::coroutines::make_callback(future), 0)));
+                               LLEventDetail::wfeoh(boost::dcoroutines::make_callback(future), 0)));
     LLTempBoundListener connection1(
         replyPump1.getPump().listen(name + "b",
-                               LLEventDetail::wfeoh(boost::coroutines::make_callback(future), 1)));
+                               LLEventDetail::wfeoh(boost::dcoroutines::make_callback(future), 1)));
     // skip the "post" part if requestPump is default-constructed
     if (requestPump)
     {
diff --git a/indra/llcommon/tests/lleventcoro_test.cpp b/indra/llcommon/tests/lleventcoro_test.cpp
index 901ba35b2f08421aff9000002f0fd9c19640b00e..8d12529613e0fe0a525a69cbca77845ffb810f7d 100644
--- a/indra/llcommon/tests/lleventcoro_test.cpp
+++ b/indra/llcommon/tests/lleventcoro_test.cpp
@@ -64,10 +64,10 @@
 // Boost.Coroutine #include is the *first* #include of the platform header.
 // That means that client code must generally #include Boost.Coroutine headers
 // before anything else.
-#include <boost/coroutine/coroutine.hpp>
+#include <boost/dcoroutine/coroutine.hpp>
 // Normally, lleventcoro.h obviates future.hpp. We only include this because
 // we implement a "by hand" test of future functionality.
-#include <boost/coroutine/future.hpp>
+#include <boost/dcoroutine/future.hpp>
 #include <boost/bind.hpp>
 #include <boost/range.hpp>
 
@@ -87,7 +87,7 @@
 /*****************************************************************************
 *   from the banana.cpp example program borrowed for test<1>()
 *****************************************************************************/
-namespace coroutines = boost::coroutines;
+namespace coroutines = boost::dcoroutines;
 using coroutines::coroutine;
 
 template<typename Iter>
@@ -122,7 +122,7 @@ typedef coroutine<std::string::iterator(void)> match_coroutine_type;
 *   Test helpers
 *****************************************************************************/
 // I suspect this will be typical of coroutines used in Linden software
-typedef boost::coroutines::coroutine<void()> coroutine_type;
+typedef boost::dcoroutines::coroutine<void()> coroutine_type;
 
 /// Simulate an event API whose response is immediate: sent on receipt of the
 /// initial request, rather than after some delay. This is the case that
@@ -173,10 +173,10 @@ namespace tut
                 // ... do whatever preliminary stuff must happen ...
 
                 // declare the future
-                boost::coroutines::future<LLSD> future(self);
+                boost::dcoroutines::future<LLSD> future(self);
                 // tell the future what to wait for
                 LLTempBoundListener connection(
-                    LLEventPumps::instance().obtain("source").listen("coro", voidlistener(boost::coroutines::make_callback(future))));
+                    LLEventPumps::instance().obtain("source").listen("coro", voidlistener(boost::dcoroutines::make_callback(future))));
                 ensure("Not yet", ! future);
                 // attempting to dereference ("resolve") the future causes the calling
                 // coroutine to wait for it
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index e93d73ad0e67a67ac19ba20940361a6f80c14b1f..fe7ceaeba69a3d666959b6669f30a515cd65c1fb 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1823,6 +1823,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
     ${viewer_LIBRARIES}
     ${BOOST_PROGRAM_OPTIONS_LIBRARY}
     ${BOOST_REGEX_LIBRARY}
+    ${BOOST_CONTEXT_LIBRARY}
     ${DBUSGLIB_LIBRARIES}
     ${OPENGL_LIBRARIES}
     ${FMODWRAPPER_LIBRARY} # must come after LLAudio
diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h
index 0316f7997345be5022544791910ad6ee13feae07..a565005f302c5368ee555c676f75429ecbaf49db 100644
--- a/indra/newview/llviewerprecompiledheaders.h
+++ b/indra/newview/llviewerprecompiledheaders.h
@@ -33,8 +33,6 @@
 // in viewer.
 // It is used to precompile headers for improved build speed.
 
-#include <boost/coroutine/coroutine.hpp>
-
 #include "linden_common.h"
 
 // Work around stupid Microsoft STL warning
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
index 7720619df3017a718a3ba393f086fbb67d8db768..28b87bf663cb0126f691bfa58f3195deeca2523c 100644
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -46,6 +46,11 @@ if(LL_TESTS)
   SET(lllogin_TEST_SOURCE_FILES
       lllogin.cpp
       )
+  set_source_files_properties(
+    lllogin.cpp
+    PROPERTIES
+    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_CONTEXT_LIBRARY}"
+    )
 
   LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
 endif(LL_TESTS)
diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp
index bdcb068200768a17abbfc89c25d5d47fa80bb4de..3357ad812d8c771babc2633681884c4d62e8939a 100644
--- a/indra/viewer_components/login/lllogin.cpp
+++ b/indra/viewer_components/login/lllogin.cpp
@@ -23,7 +23,6 @@
  * $/LicenseInfo$
  */
 
-#include <boost/coroutine/coroutine.hpp>
 #include "linden_common.h"
 #include "llsd.h"
 #include "llsdutil.h"