[SCM] GNU Shockwave Flash (SWF) player branch, upstream, updated. upstream/0.8.11_git20140419-1-g6f3a9e8

Gabriele Giacone gg0-guest at moszumanska.debian.org
Tue Jul 8 21:32:51 UTC 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Shockwave Flash (SWF) player".

The branch, upstream has been updated
       via  6f3a9e8e8717134511e3c52e9005abe2aca33dd1 (commit)
      from  2da9a9681f8dd68cd58ec28e8cbfcb39d35dd40d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 Makefile.am                                        |     2 +-
 NEWS                                               |    10 +-
 configure.ac                                       |    43 +-
 cygnal/Makefile.am                                 |     5 +-
 cygnal/alloc.cpp                                   |     8 +-
 cygnal/cgi-bin/echo/Makefile.am                    |     2 +-
 cygnal/cgi-bin/echo/echo.cpp                       |    59 +-
 cygnal/cgi-bin/echo/echo.h                         |    35 +-
 cygnal/cgi-bin/echo/gateway.cpp                    |    59 +-
 cygnal/cgi-bin/echo/gateway.h                      |     9 +-
 cygnal/cgi-bin/fitcDemo/Makefile.am                |     2 +-
 cygnal/cgi-bin/fitcDemo/fitcDemo.cpp               |    53 +-
 cygnal/cgi-bin/fitcDemo/fitcDemo.h                 |    25 +-
 cygnal/cgi-bin/oflaDemo/Makefile.am                |     2 +-
 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp               |   111 +-
 cygnal/cgi-bin/oflaDemo/oflaDemo.h                 |    41 +-
 cygnal/crc.cpp                                     |     2 +-
 cygnal/cvm.cpp                                     |     8 +-
 cygnal/cygnal.cpp                                  |    75 +-
 cygnal/cygnal.h                                    |    33 +-
 cygnal/handler.cpp                                 |    39 +-
 cygnal/handler.h                                   |    62 +-
 cygnal/http_server.cpp                             |   129 +-
 cygnal/http_server.h                               |    33 +-
 cygnal/libamf/amf.cpp                              |   289 +-
 cygnal/libamf/amf.h                                |    67 +-
 cygnal/libamf/amf_msg.cpp                          |   119 +-
 cygnal/libamf/amf_msg.h                            |    45 +-
 cygnal/libamf/buffer.cpp                           |    96 +-
 cygnal/libamf/buffer.h                             |    52 +-
 cygnal/libamf/element.cpp                          |   141 +-
 cygnal/libamf/element.h                            |    83 +-
 cygnal/libamf/flv.cpp                              |    83 +-
 cygnal/libamf/flv.h                                |    55 +-
 cygnal/libamf/lcshm.cpp                            |   123 +-
 cygnal/libamf/lcshm.h                              |    46 +-
 cygnal/libamf/sol.cpp                              |    72 +-
 cygnal/libamf/sol.h                                |    25 +-
 cygnal/libnet/Makefile.am                          |     2 +-
 cygnal/libnet/cache.cpp                            |    45 +-
 cygnal/libnet/cache.h                              |    16 +-
 cygnal/libnet/cque.cpp                             |    66 +-
 cygnal/libnet/cque.h                               |    40 +-
 cygnal/libnet/cqueue.cpp                           |     6 +-
 cygnal/libnet/cqueue.h                             |    18 +-
 cygnal/libnet/diskstream.cpp                       |    88 +-
 cygnal/libnet/diskstream.h                         |    24 +-
 cygnal/libnet/http.cpp                             |   119 +-
 cygnal/libnet/http.h                               |    39 +-
 cygnal/libnet/lirc.cpp                             |     4 +-
 cygnal/libnet/network.cpp                          |    73 +-
 cygnal/libnet/network.h                            |    25 +-
 cygnal/libnet/rtmp.cpp                             |   237 +-
 cygnal/libnet/rtmp.h                               |    91 +-
 cygnal/libnet/rtmp_client.cpp                      |   147 +-
 cygnal/libnet/rtmp_client.h                        |    31 +-
 cygnal/libnet/rtmp_msg.cpp                         |    32 +-
 cygnal/libnet/rtmp_msg.h                           |    22 +-
 cygnal/libnet/sshclient.cpp                        |    16 +-
 cygnal/libnet/sshclient.h                          |    18 +-
 cygnal/libnet/sshserver.cpp                        |    12 +-
 cygnal/libnet/sshserver.h                          |     6 +-
 cygnal/libnet/sslclient.cpp                        |    16 +-
 cygnal/libnet/sslclient.h                          |    18 +-
 cygnal/libnet/sslserver.cpp                        |    14 +-
 cygnal/libnet/sslserver.h                          |     6 +-
 cygnal/libnet/statistics.cpp                       |     8 +-
 cygnal/libnet/statistics.h                         |     2 +-
 cygnal/proc.cpp                                    |    22 +-
 cygnal/proc.h                                      |    11 +-
 cygnal/rtmp_server.cpp                             |   305 +-
 cygnal/rtmp_server.h                               |    59 +-
 cygnal/serverSO.cpp                                |     2 +-
 cygnal/testsuite/cygnal.all/Makefile.am            |     4 +-
 cygnal/testsuite/libamf.all/Makefile.am            |     5 +-
 cygnal/testsuite/libamf.all/test_amf.cpp           |    53 +-
 cygnal/testsuite/libamf.all/test_amfmsg.cpp        |    29 +-
 cygnal/testsuite/libamf.all/test_buffer.cpp        |    28 +-
 cygnal/testsuite/libamf.all/test_el.cpp            |    10 +-
 cygnal/testsuite/libamf.all/test_flv.cpp           |    40 +-
 cygnal/testsuite/libamf.all/test_lc.cpp            |    10 +-
 cygnal/testsuite/libamf.all/test_number.cpp        |     4 +-
 cygnal/testsuite/libamf.all/test_sol.cpp           |     5 +-
 cygnal/testsuite/libnet.all/Makefile.am            |     4 +-
 cygnal/testsuite/libnet.all/generate_amfbins.cpp   |    24 +-
 cygnal/testsuite/libnet.all/test_cache.cpp         |    26 +-
 cygnal/testsuite/libnet.all/test_cque.cpp          |    30 +-
 cygnal/testsuite/libnet.all/test_diskstream.cpp    |     6 +-
 cygnal/testsuite/libnet.all/test_handler.cpp       |    26 +-
 cygnal/testsuite/libnet.all/test_http.cpp          |   338 +-
 cygnal/testsuite/libnet.all/test_rtmp.cpp          |   129 +-
 extensions/dejagnu/Makefile.am                     |     2 +-
 extensions/dejagnu/dejagnu.h                       |     2 +-
 extensions/fileio/Makefile.am                      |     2 +-
 extensions/fileio/fileio.cpp                       |     6 +-
 extensions/gtk2/gtkext.cpp                         |     6 +-
 extensions/gtk2/gtkext.h                           |     4 +-
 extensions/mysql/mysql_db.cpp                      |    18 +-
 gui/Player.cpp                                     |    31 +-
 gui/Player.h                                       |    15 +-
 gui/ScreenShotter.cpp                              |    14 +-
 gui/ScreenShotter.h                                |     6 +-
 gui/aos4/aos4.cpp                                  |     2 +-
 gui/aos4/aos4_agg_glue.h                           |     2 +-
 gui/aos4/aos4_cairo_glue.h                         |     2 +-
 gui/aos4/aos4_glue.h                               |     2 +-
 gui/aos4/gui_aos4.cpp                              |     6 +-
 gui/aqua/aqua.cpp                                  |     2 +-
 gui/aqua/gui_aqua.cpp                              |     6 +-
 gui/dump/dump.cpp                                  |    14 +-
 gui/dump/dump.h                                    |     8 +-
 gui/dump/gui_dump.cpp                              |     6 +-
 gui/fb/fb.cpp                                      |    33 +-
 gui/fb/fb_glue.h                                   |     2 +-
 gui/fb/fb_glue_agg.cpp                             |    23 +-
 gui/fb/fb_glue_agg.h                               |     5 +-
 gui/fb/fb_glue_gles1.h                             |     4 +-
 gui/fb/fb_glue_ovg.cpp                             |     2 +-
 gui/fb/fb_glue_ovg.h                               |     2 +-
 gui/fb/fbsup.h                                     |    10 +-
 gui/fb/gui_fb.cpp                                  |     6 +-
 gui/fltk/fltk_glue_cairo.cpp                       |     2 +-
 gui/fltk/gui_fltk.cpp                              |     6 +-
 gui/gnash.cpp                                      |    78 +-
 gui/gtk/gtk.cpp                                    |    66 +-
 gui/gtk/gtk_canvas.cpp                             |    13 +-
 gui/gtk/gtk_canvas.h                               |     4 +-
 gui/gtk/gtk_glue.h                                 |     2 +-
 gui/gtk/gtk_glue_agg.cpp                           |     6 +-
 gui/gtk/gtk_glue_agg.h                             |     1 -
 gui/gtk/gtk_glue_agg_vaapi.cpp                     |     8 +-
 gui/gtk/gtk_glue_agg_vaapi.h                       |    10 +-
 gui/gtk/gtk_glue_cairo.cpp                         |    23 +-
 gui/gtk/gtk_glue_gtkglext.cpp                      |     6 +-
 gui/gtk/gtk_glue_gtkglext.h                        |     1 -
 gui/gtk/gtk_glue_ovg.cpp                           |     2 +-
 gui/gtk/gtk_glue_ovg.h                             |     5 +-
 gui/gtk/gtksup.h                                   |     2 +-
 gui/gtk/gui_gtk.cpp                                |     6 +-
 gui/gui.cpp                                        |    50 +-
 gui/gui.h                                          |    41 +-
 gui/haiku/gui_haiku.cpp                            |     6 +-
 gui/haiku/haiku_agg_glue.cpp                       |     4 +-
 gui/haiku/haiku_agg_glue.h                         |     6 +-
 gui/pythonmod/Makefile.am                          |    20 +-
 gui/pythonmod/gnash-view.cpp                       |    71 +-
 gui/qt/GuiQt4.cpp                                  |     6 +-
 gui/qt/Qt4Glue.h                                   |     2 +-
 gui/qt/Qt4GlueAgg.cpp                              |     2 +-
 gui/qt/Qt4GlueAgg.h                                |     7 +-
 gui/qt/Qt4GlueCairo.cpp                            |     7 +-
 gui/qt/Qt4GlueCairo.h                              |     9 +-
 gui/qt/Qt4GlueOgl.cpp                              |     5 +-
 gui/qt/Qt4GlueOgl.h                                |     3 -
 gui/qt/Qt4Gui.cpp                                  |    84 +-
 gui/qt/Qt4Gui.h                                    |     7 +-
 gui/qt/gui_kde.cpp                                 |     6 +-
 gui/qt/kde_glue_agg.h                              |     5 +-
 gui/qt/kdesup.h                                    |     4 +-
 gui/sdl/gui_sdl.cpp                                |     6 +-
 gui/sdl/sdl.cpp                                    |     2 +-
 gui/sdl/sdl_agg_glue.cpp                           |    14 +-
 gui/sdl/sdl_agg_glue.h                             |     6 +-
 gui/sdl/sdl_cairo_glue.cpp                         |    12 +-
 gui/sdl/sdl_cairo_glue.h                           |     4 +-
 gui/sdl/sdl_glue.h                                 |     4 +-
 gui/sdl/sdl_ogl_glue.cpp                           |     2 +-
 gui/sdl/sdl_ogl_glue.h                             |     2 +-
 libbase/AMF.cpp                                    |    22 +-
 libbase/AMF.h                                      |    30 +-
 libbase/BitsReader.cpp                             |     6 +-
 libbase/BitsReader.h                               |    30 +-
 libbase/ClockTime.cpp                              |    14 +-
 libbase/ClockTime.h                                |     6 +-
 libbase/GC.cpp                                     |    16 +-
 libbase/GC.h                                       |     6 +-
 libbase/GnashAlgorithm.h                           |     6 +-
 libbase/GnashFactory.h                             |    20 +-
 libbase/GnashImage.cpp                             |    26 +-
 libbase/GnashImage.h                               |    30 +-
 libbase/GnashImageGif.cpp                          |    17 +-
 libbase/GnashImageGif.h                            |     3 +-
 libbase/GnashImageJpeg.cpp                         |    33 +-
 libbase/GnashImageJpeg.h                           |    18 +-
 libbase/GnashImagePng.cpp                          |    51 +-
 libbase/GnashImagePng.h                            |     5 +-
 libbase/GnashNumeric.h                             |    23 +-
 libbase/GnashScopedPtr.h                           |    85 -
 libbase/GnashSleep.h                               |     2 +-
 libbase/GnashVaapiImage.cpp                        |    18 +-
 libbase/GnashVaapiImage.h                          |    13 +-
 libbase/GnashVaapiImageProxy.h                     |     7 +-
 libbase/GnashVaapiTexture.cpp                      |     2 +-
 libbase/GnashVaapiTexture.h                        |     4 +-
 libbase/IOChannel.cpp                              |    38 +-
 libbase/IOChannel.h                                |    18 +-
 libbase/ImageIterators.h                           |     6 +-
 libbase/Makefile.am                                |     2 -
 libbase/NamingPolicy.cpp                           |     4 +-
 libbase/NamingPolicy.h                             |     2 +-
 libbase/NetworkAdapter.cpp                         |   127 +-
 libbase/NetworkAdapter.h                           |     8 +-
 libbase/Point2d.h                                  |    32 +-
 libbase/RTMP.cpp                                   |   133 +-
 libbase/RTMP.h                                     |    53 +-
 libbase/Range2d.h                                  |    58 +-
 libbase/SWFCtype.cpp                               |   317 +-
 libbase/SharedMem.cpp                              |     6 +-
 libbase/SharedMem.h                                |     4 +-
 libbase/SimpleBuffer.h                             |    78 +-
 libbase/Socket.cpp                                 |    24 +-
 libbase/Socket.h                                   |     4 +-
 libbase/StreamProvider.cpp                         |    49 +-
 libbase/StreamProvider.h                           |    18 +-
 libbase/URL.cpp                                    |     7 +-
 libbase/URLAccessManager.cpp                       |     4 +-
 libbase/WallClockTimer.cpp                         |     4 +-
 libbase/WallClockTimer.h                           |     6 +-
 libbase/accumulator.h                              |     6 +-
 libbase/arg_parser.cpp                             |     6 +-
 libbase/arg_parser.h                               |     5 +-
 libbase/extension.cpp                              |     6 +-
 libbase/log.cpp                                    |    75 +-
 libbase/log.h                                      |   174 +-
 libbase/memory.cpp                                 |     6 +-
 libbase/noseek_fd_adapter.cpp                      |     7 +-
 libbase/noseek_fd_adapter.h                        |     2 +-
 libbase/rc.cpp                                     |    12 +-
 libbase/rc.h                                       |    12 +-
 libbase/ref_counted.h                              |     6 +-
 libbase/sharedlib.cpp                              |    19 +-
 libbase/sharedlib.h                                |     8 +-
 libbase/snappingrange.h                            |     8 +-
 libbase/string_table.cpp                           |     6 +-
 libbase/string_table.h                             |     8 +-
 libbase/tree.hh                                    |   122 +-
 libbase/tu_file.cpp                                |    30 +-
 libbase/tu_file.h                                  |     4 +-
 libbase/utf8.cpp                                   |    26 +-
 libbase/utf8.h                                     |    11 +-
 libbase/utility.h                                  |     2 +-
 libbase/zlib_adapter.cpp                           |    18 +-
 libbase/zlib_adapter.h                             |     4 +-
 libcore/AMFConverter.cpp                           |    16 +-
 libcore/AMFConverter.h                             |     8 +-
 libcore/Bitmap.cpp                                 |     8 +-
 libcore/Bitmap.h                                   |     4 +-
 libcore/BitmapMovie.cpp                            |     2 +-
 libcore/Button.cpp                                 |    64 +-
 libcore/Button.h                                   |     8 +-
 libcore/CharacterProxy.cpp                         |     4 +-
 libcore/CharacterProxy.h                           |     1 -
 libcore/ClassHierarchy.cpp                         |     9 +-
 libcore/ClassHierarchy.h                           |    10 +-
 libcore/DisplayList.cpp                            |    58 +-
 libcore/DisplayList.h                              |    14 +-
 libcore/DisplayObject.cpp                          |    98 +-
 libcore/DisplayObject.h                            |    40 +-
 libcore/DisplayObjectContainer.cpp                 |     2 +-
 libcore/DragState.h                                |    16 +-
 libcore/DynamicShape.cpp                           |    16 +-
 libcore/DynamicShape.h                             |    16 +-
 libcore/ExternalInterface.cpp                      |    14 +-
 libcore/ExternalInterface.h                        |     6 +-
 libcore/FillStyle.cpp                              |    14 +-
 libcore/FillStyle.h                                |    18 +-
 libcore/Filters.h                                  |   105 +-
 libcore/Font.cpp                                   |    40 +-
 libcore/Font.h                                     |    37 +-
 libcore/FreetypeGlyphsProvider.cpp                 |    66 +-
 libcore/FreetypeGlyphsProvider.h                   |    14 +-
 libcore/Function.cpp                               |     8 +-
 libcore/Function.h                                 |    12 +-
 libcore/Function2.cpp                              |     4 +-
 libcore/Function2.h                                |    10 +-
 libcore/Geometry.cpp                               |     6 +-
 libcore/Geometry.h                                 |    45 +-
 libcore/HostInterface.h                            |    12 +-
 libcore/InteractiveObject.h                        |     8 +-
 libcore/LineStyle.cpp                              |     6 +-
 libcore/LineStyle.h                                |     9 +-
 libcore/LoadVariablesThread.cpp                    |   219 +-
 libcore/LoadVariablesThread.h                      |   127 +-
 libcore/MorphShape.cpp                             |     2 +-
 libcore/MorphShape.h                               |     2 +-
 libcore/MouseButtonState.h                         |     4 +-
 libcore/Movie.h                                    |     6 +-
 libcore/MovieClip.cpp                              |   144 +-
 libcore/MovieClip.h                                |    22 +-
 libcore/MovieFactory.cpp                           |    30 +-
 libcore/MovieFactory.h                             |     6 +-
 libcore/MovieLibrary.h                             |    11 +-
 libcore/MovieLoader.cpp                            |    68 +-
 libcore/MovieLoader.h                              |    49 +-
 libcore/PropFlags.h                                |    10 +-
 libcore/Property.cpp                               |     5 +-
 libcore/Property.h                                 |    40 +-
 libcore/PropertyList.cpp                           |    26 +-
 libcore/PropertyList.h                             |    15 +-
 libcore/RGBA.cpp                                   |     2 +-
 libcore/RGBA.h                                     |    22 +-
 libcore/RunResources.h                             |    42 +-
 libcore/SWFCxForm.cpp                              |    20 +-
 libcore/SWFCxForm.h                                |    23 +-
 libcore/SWFMatrix.cpp                              |    54 +-
 libcore/SWFMatrix.h                                |    34 +-
 libcore/SWFMovie.cpp                               |    10 +-
 libcore/SWFMovie.h                                 |     8 +-
 libcore/SWFRect.cpp                                |    24 +-
 libcore/SWFRect.h                                  |    54 +-
 libcore/SWFStream.cpp                              |    50 +-
 libcore/SWFStream.h                                |    28 +-
 libcore/Shape.cpp                                  |    16 +-
 libcore/Shape.h                                    |    18 +-
 libcore/StaticText.cpp                             |     6 +-
 libcore/StaticText.h                               |     4 +-
 libcore/SystemClock.cpp                            |     4 +-
 libcore/SystemClock.h                              |     4 +-
 libcore/TextField.cpp                              |   153 +-
 libcore/TextField.h                                |    56 +-
 libcore/Timers.cpp                                 |    14 +-
 libcore/Timers.h                                   |     6 +-
 libcore/Transform.h                                |     9 +-
 libcore/UserFunction.h                             |     2 +-
 libcore/Video.cpp                                  |    16 +-
 libcore/Video.h                                    |    10 +-
 libcore/abc/AbcBlock.cpp                           |   126 +-
 libcore/abc/AbcBlock.h                             |    25 +-
 libcore/abc/Class.cpp                              |    22 +-
 libcore/abc/Class.h                                |     8 +-
 libcore/abc/CodeStream.cpp                         |    16 +-
 libcore/abc/CodeStream.h                           |    10 +-
 libcore/abc/Method.cpp                             |    16 +-
 libcore/abc/Method.h                               |    44 +-
 libcore/abc/MultiName.h                            |     4 +-
 libcore/abc/abc_function.h                         |     2 +-
 libcore/abc/asException.h                          |    12 +-
 libcore/as_environment.cpp                         |    28 +-
 libcore/as_environment.h                           |     4 +-
 libcore/as_function.cpp                            |     2 +-
 libcore/as_object.cpp                              |    47 +-
 libcore/as_object.h                                |    20 +-
 libcore/as_value.cpp                               |    21 +-
 libcore/as_value.h                                 |    26 +-
 libcore/asobj/ASConversions.cpp                    |    26 +-
 libcore/asobj/Array_as.cpp                         |    69 +-
 libcore/asobj/AsBroadcaster.cpp                    |     2 +-
 libcore/asobj/Camera_as.cpp                        |    10 +-
 libcore/asobj/Color_as.cpp                         |    24 +-
 libcore/asobj/ContextMenuItem_as.cpp               |     2 +-
 libcore/asobj/ContextMenu_as.cpp                   |     4 +-
 libcore/asobj/Date_as.cpp                          |    67 +-
 libcore/asobj/Error_as.cpp                         |     2 +-
 libcore/asobj/Function_as.cpp                      |     4 +-
 libcore/asobj/Global_as.cpp                        |    87 +-
 libcore/asobj/Global_as.h                          |    61 +-
 libcore/asobj/Key_as.cpp                           |     2 +-
 libcore/asobj/LoadVars_as.cpp                      |     2 +-
 libcore/asobj/LoadableObject.cpp                   |     8 +-
 libcore/asobj/LocalConnection_as.cpp               |    66 +-
 libcore/asobj/Microphone_as.cpp                    |    13 +-
 libcore/asobj/Mouse_as.cpp                         |     2 +-
 libcore/asobj/MovieClipLoader.cpp                  |     2 +-
 libcore/asobj/MovieClip_as.cpp                     |    82 +-
 libcore/asobj/NetConnection_as.cpp                 |    94 +-
 libcore/asobj/NetConnection_as.h                   |     7 +-
 libcore/asobj/NetStream_as.cpp                     |   147 +-
 libcore/asobj/NetStream_as.h                       |    77 +-
 libcore/asobj/Object.cpp                           |     4 +-
 libcore/asobj/PlayHead.cpp                         |     8 +-
 libcore/asobj/PlayHead.h                           |    10 +-
 libcore/asobj/Selection_as.cpp                     |     4 +-
 libcore/asobj/SharedObject_as.cpp                  |    85 +-
 libcore/asobj/Sound_as.cpp                         |    81 +-
 libcore/asobj/String_as.cpp                        |    14 +-
 libcore/asobj/String_as.h                          |     2 +-
 libcore/asobj/TextField_as.cpp                     |    16 +-
 libcore/asobj/TextFormat_as.cpp                    |    32 +-
 libcore/asobj/TextFormat_as.h                      |    38 +-
 libcore/asobj/TextSnapshot_as.cpp                  |    70 +-
 libcore/asobj/XMLNode_as.cpp                       |   120 +-
 libcore/asobj/XMLNode_as.h                         |    23 +-
 libcore/asobj/XMLSocket_as.cpp                     |    14 +-
 libcore/asobj/XML_as.cpp                           |    45 +-
 libcore/asobj/XML_as.h                             |     5 +-
 libcore/asobj/flash/display/BitmapData_as.cpp      |   165 +-
 libcore/asobj/flash/display/BitmapData_as.h        |     8 +-
 .../asobj/flash/external/ExternalInterface_as.cpp  |     5 +-
 libcore/asobj/flash/filters/BevelFilter_as.cpp     |    10 +-
 libcore/asobj/flash/filters/BitmapFilter_as.cpp    |     2 +-
 libcore/asobj/flash/filters/BlurFilter_as.cpp      |     2 +-
 .../asobj/flash/filters/DropShadowFilter_as.cpp    |     2 +-
 libcore/asobj/flash/filters/GlowFilter_as.cpp      |     4 +-
 .../asobj/flash/filters/GradientBevelFilter_as.cpp |     2 +-
 .../asobj/flash/filters/GradientGlowFilter_as.cpp  |     2 +-
 libcore/asobj/flash/geom/ColorTransform_as.cpp     |    10 +-
 libcore/asobj/flash/geom/Matrix_as.cpp             |     2 +-
 libcore/asobj/flash/geom/Rectangle_as.cpp          |     4 +-
 libcore/asobj/flash/net/FileReferenceList_as.h     |     2 +-
 libcore/asobj/flash/net/FileReference_as.cpp       |     7 +-
 libcore/asobj/flash/net/FileReference_as.h         |     2 +-
 libcore/asobj/flash/text/TextRenderer_as.cpp       |     2 +-
 libcore/asobj/flash/text/TextRenderer_as.h         |     2 +-
 libcore/builtin_function.h                         |     7 +-
 libcore/event_id.cpp                               |    85 +-
 libcore/event_id.h                                 |     2 +-
 libcore/fontlib.cpp                                |    13 +-
 libcore/movie_root.cpp                             |   190 +-
 libcore/movie_root.h                               |    56 +-
 libcore/parser/BitmapMovieDefinition.cpp           |    10 +-
 libcore/parser/BitmapMovieDefinition.h             |     6 +-
 libcore/parser/SWFMovieDefinition.cpp              |   170 +-
 libcore/parser/SWFMovieDefinition.h                |   116 +-
 libcore/parser/SWFParser.cpp                       |     2 +-
 libcore/parser/SWFParser.h                         |     3 +-
 libcore/parser/TypesParser.cpp                     |    81 +-
 libcore/parser/action_buffer.cpp                   |    65 +-
 libcore/parser/action_buffer.h                     |    22 +-
 libcore/parser/filter_factory.cpp                  |    16 +-
 libcore/parser/filter_factory.h                    |     4 +-
 libcore/parser/movie_definition.h                  |    36 +-
 libcore/parser/sprite_definition.cpp               |     2 +-
 libcore/parser/sprite_definition.h                 |    14 +-
 libcore/swf/CSMTextSettingsTag.cpp                 |     8 +-
 libcore/swf/DefaultTagLoaders.cpp                  |   177 +-
 libcore/swf/DefineBitsTag.cpp                      |   106 +-
 libcore/swf/DefineButtonCxformTag.cpp              |     7 +-
 libcore/swf/DefineButtonSoundTag.cpp               |     7 +-
 libcore/swf/DefineButtonSoundTag.h                 |     4 +-
 libcore/swf/DefineButtonTag.cpp                    |    32 +-
 libcore/swf/DefineButtonTag.h                      |    33 +-
 libcore/swf/DefineEditTextTag.cpp                  |     6 +-
 libcore/swf/DefineEditTextTag.h                    |    24 +-
 libcore/swf/DefineFontAlignZonesTag.cpp            |    14 +-
 libcore/swf/DefineFontNameTag.h                    |     2 +-
 libcore/swf/DefineFontTag.cpp                      |    37 +-
 libcore/swf/DefineFontTag.h                        |    22 +-
 libcore/swf/DefineMorphShapeTag.cpp                |    12 +-
 libcore/swf/DefineMorphShapeTag.h                  |     2 +-
 libcore/swf/DefineScalingGridTag.cpp               |     2 +-
 libcore/swf/DefineSceneAndFrameLabelDataTag.h      |    12 +-
 libcore/swf/DefineShapeTag.cpp                     |     8 +-
 libcore/swf/DefineShapeTag.h                       |     4 +-
 libcore/swf/DefineTextTag.cpp                      |    10 +-
 libcore/swf/DefineTextTag.h                        |     2 +-
 libcore/swf/DefineVideoStreamTag.cpp               |    15 +-
 libcore/swf/DefineVideoStreamTag.h                 |    50 +-
 libcore/swf/DefinitionTag.h                        |     9 +-
 libcore/swf/DoABCTag.h                             |     2 +-
 libcore/swf/DoInitActionTag.h                      |     2 +-
 libcore/swf/ExportAssetsTag.h                      |     9 +-
 libcore/swf/ImportAssetsTag.h                      |    11 +-
 libcore/swf/PlaceObject2Tag.cpp                    |    21 +-
 libcore/swf/PlaceObject2Tag.h                      |    16 +-
 libcore/swf/ScriptLimitsTag.h                      |     4 +-
 libcore/swf/SetTabIndexTag.cpp                     |     4 +-
 libcore/swf/ShapeRecord.cpp                        |   110 +-
 libcore/swf/ShapeRecord.h                          |     7 +-
 libcore/swf/SoundStreamHeadTag.cpp                 |    16 +-
 libcore/swf/SoundStreamHeadTag.h                   |     2 -
 libcore/swf/StartSoundTag.cpp                      |     3 +-
 libcore/swf/StartSoundTag.h                        |     4 +-
 libcore/swf/StreamSoundBlockTag.cpp                |    14 +-
 libcore/swf/StreamSoundBlockTag.h                  |     6 +-
 libcore/swf/SymbolClassTag.h                       |     4 +-
 libcore/swf/TagLoadersTable.h                      |     4 +-
 libcore/swf/TextRecord.cpp                         |    42 +-
 libcore/swf/TextRecord.h                           |    12 +-
 libcore/swf/VideoFrameTag.cpp                      |     8 +-
 libcore/swf/tag_loaders.cpp                        |    49 +-
 libcore/swf_event.h                                |     5 +-
 libcore/vm/ASHandlers.cpp                          |   135 +-
 libcore/vm/ActionExec.cpp                          |    38 +-
 libcore/vm/ActionExec.h                            |    14 +-
 libcore/vm/CallStack.h                             |     2 +-
 libcore/vm/ExecutableCode.h                        |    21 +-
 libcore/vm/Machine.cpp                             |   118 +-
 libcore/vm/Machine.h                               |     6 +-
 libcore/vm/SafeStack.h                             |     2 +-
 libcore/vm/VM.cpp                                  |    20 +-
 libcore/vm/VM.h                                    |    10 +-
 libcore/vm/fn_call.h                               |    38 +-
 libdevice/DeviceGlue.cpp                           |     2 +-
 libdevice/DeviceGlue.h                             |     9 +-
 libdevice/GnashDevice.h                            |     6 +-
 libdevice/directfb/DirectFBDevice.h                |     3 +-
 libdevice/directfb/Renderer_DirectFB.cpp           |     4 +-
 libdevice/directfb/Renderer_DirectFB.h             |     2 +-
 libdevice/egl/eglDevice.h                          |     3 +-
 libdevice/events/EventDevice.cpp                   |    39 +-
 libdevice/events/InputDevice.cpp                   |    26 +-
 libdevice/events/InputDevice.h                     |    29 +-
 libdevice/events/MouseDevice.cpp                   |    13 +-
 libdevice/events/TouchDevice.cpp                   |    16 +-
 libdevice/events/UinputDevice.cpp                  |    11 +-
 libdevice/rawfb/RawFBDevice.cpp                    |    32 +-
 libdevice/rawfb/RawFBDevice.h                      |    11 +-
 libdevice/vaapi/VaapiContext.cpp                   |     6 +-
 libdevice/vaapi/VaapiContext.h                     |    10 +-
 libdevice/vaapi/VaapiDevice.h                      |     3 +-
 libdevice/vaapi/VaapiGlobalContext.cpp             |     6 +-
 libdevice/vaapi/VaapiGlobalContext.h               |     4 +-
 libdevice/vaapi/VaapiImage.cpp                     |     4 +-
 libdevice/vaapi/VaapiImage.h                       |     5 +-
 libdevice/vaapi/VaapiSubpicture.cpp                |     2 +-
 libdevice/vaapi/VaapiSubpicture.h                  |     4 +-
 libdevice/vaapi/VaapiSurface.cpp                   |    16 +-
 libdevice/vaapi/VaapiSurface.h                     |     8 +-
 libdevice/vaapi/VaapiSurfaceGLX.cpp                |    40 +-
 libdevice/vaapi/VaapiSurfaceGLX.h                  |     4 +-
 libdevice/vaapi/VaapiSurfaceProxy.cpp              |     4 +-
 libdevice/vaapi/VaapiSurfaceProxy.h                |    12 +-
 libdevice/vaapi/vaapi_common.h                     |     7 +-
 libdevice/vaapi/vaapi_utils.cpp                    |     2 +-
 libdevice/vaapi/vaapi_utils.h                      |     2 +-
 libdevice/x11/X11Device.h                          |     3 +-
 libmedia/AudioDecoder.h                            |    30 +-
 libmedia/AudioDecoderSimple.cpp                    |    75 +-
 libmedia/AudioDecoderSimple.h                      |     6 +-
 libmedia/AudioDecoderSpeex.cpp                     |    41 +-
 libmedia/AudioDecoderSpeex.h                       |     6 +-
 libmedia/AudioInput.h                              |     2 +-
 libmedia/AudioResampler.cpp                        |    12 +-
 libmedia/AudioResampler.h                          |     4 +-
 libmedia/FLVParser.cpp                             |   107 +-
 libmedia/FLVParser.h                               |    97 +-
 libmedia/MediaHandler.cpp                          |    21 +-
 libmedia/MediaHandler.h                            |    26 +-
 libmedia/MediaParser.cpp                           |   115 +-
 libmedia/MediaParser.h                             |   147 +-
 libmedia/SoundInfo.h                               |    14 +-
 libmedia/VideoConverter.h                          |    18 +-
 libmedia/VideoDecoder.h                            |     4 +-
 libmedia/VideoInput.h                              |     2 +-
 libmedia/ffmpeg/AudioDecoderFfmpeg.cpp             |    84 +-
 libmedia/ffmpeg/AudioDecoderFfmpeg.h               |    18 +-
 libmedia/ffmpeg/AudioInputFfmpeg.h                 |     2 +-
 libmedia/ffmpeg/AudioResamplerFfmpeg.cpp           |     9 +-
 libmedia/ffmpeg/AudioResamplerFfmpeg.h             |     6 +-
 libmedia/ffmpeg/MediaHandlerFfmpeg.cpp             |    28 +-
 libmedia/ffmpeg/MediaHandlerFfmpeg.h               |    10 +-
 libmedia/ffmpeg/MediaParserFfmpeg.cpp              |   168 +-
 libmedia/ffmpeg/MediaParserFfmpeg.h                |    49 +-
 libmedia/ffmpeg/VideoConverterFfmpeg.cpp           |    12 +-
 libmedia/ffmpeg/VideoConverterFfmpeg.h             |     4 +-
 libmedia/ffmpeg/VideoDecoderFfmpeg.cpp             |    40 +-
 libmedia/ffmpeg/VideoDecoderFfmpeg.h               |    16 +-
 libmedia/ffmpeg/VideoDecoderFfmpegVaapi.cpp        |     5 +-
 libmedia/ffmpeg/VideoDecoderFfmpegVaapi.h          |     6 +-
 libmedia/ffmpeg/VideoInputFfmpeg.h                 |     2 +-
 libmedia/gst/AudioDecoderGst.cpp                   |    34 +-
 libmedia/gst/AudioDecoderGst.h                     |     8 +-
 libmedia/gst/AudioInputGst.cpp                     |    90 +-
 libmedia/gst/AudioInputGst.h                       |     2 +-
 libmedia/gst/GstUtil.cpp                           |    14 +-
 libmedia/gst/MediaHandlerGst.cpp                   |    35 +-
 libmedia/gst/MediaHandlerGst.h                     |    10 +-
 libmedia/gst/MediaParserGst.cpp                    |    43 +-
 libmedia/gst/MediaParserGst.h                      |    10 +-
 libmedia/gst/VideoConverterGst.cpp                 |    12 +-
 libmedia/gst/VideoConverterGst.h                   |     2 +-
 libmedia/gst/VideoDecoderGst.cpp                   |    24 +-
 libmedia/gst/VideoDecoderGst.h                     |     8 +-
 libmedia/gst/VideoInputGst.cpp                     |   132 +-
 libmedia/gst/VideoInputGst.h                       |     7 +-
 libmedia/haiku/AudioDecoderHaiku.cpp               |    18 +-
 libmedia/haiku/AudioDecoderHaiku.h                 |    10 +-
 libmedia/haiku/AudioInputHaiku.h                   |     2 +-
 libmedia/haiku/MediaHandlerHaiku.cpp               |    24 +-
 libmedia/haiku/MediaHandlerHaiku.h                 |    10 +-
 libmedia/haiku/MediaParserHaiku.cpp                |     6 +-
 libmedia/haiku/MediaParserHaiku.h                  |     7 +-
 libmedia/haiku/VideoConverterHaiku.cpp             |     2 +-
 libmedia/haiku/VideoConverterHaiku.h               |     2 +-
 libmedia/haiku/VideoDecoderHaiku.cpp               |    12 +-
 libmedia/haiku/VideoDecoderHaiku.h                 |     4 +-
 libmedia/haiku/VideoInputHaiku.h                   |     2 +-
 librender/GnashTexture.cpp                         |    33 +-
 librender/GnashTexture.h                           |     3 +-
 librender/Renderer.h                               |    10 +-
 librender/agg/LinearRGB.h                          |     8 +-
 librender/agg/Renderer_agg.cpp                     |   116 +-
 librender/agg/Renderer_agg.h                       |     4 +-
 librender/agg/Renderer_agg_bitmap.h                |    10 +-
 librender/agg/Renderer_agg_style.h                 |    16 +-
 librender/cairo/PathParser.cpp                     |    25 +-
 librender/cairo/PathParser.h                       |     6 +-
 librender/cairo/Renderer_cairo.cpp                 |    92 +-
 librender/cairo/Renderer_cairo.h                   |     7 +-
 librender/opengl/Renderer_ogl.cpp                  |   143 +-
 librender/opengles1/Renderer_gles1.cpp             |     4 +-
 librender/opengles1/Renderer_gles1.h               |     6 +-
 librender/openvg/OpenVGBitmap.cpp                  |     6 +-
 librender/openvg/OpenVGBitmap.h                    |     4 +-
 librender/openvg/OpenVGRenderer.cpp                |    13 +-
 librender/openvg/OpenVGRenderer.h                  |     5 +-
 librender/testr.cpp                                |    20 +-
 libsound/AuxStream.h                               |     6 +-
 libsound/EmbedSound.cpp                            |    31 +-
 libsound/EmbedSound.h                              |    19 +-
 libsound/EmbedSoundInst.cpp                        |    20 +-
 libsound/EmbedSoundInst.h                          |     6 +-
 libsound/InputStream.h                             |     4 +-
 libsound/LiveSound.cpp                             |    27 +-
 libsound/LiveSound.h                               |   159 +-
 libsound/NullSoundHandler.h                        |     4 +-
 libsound/SoundEnvelope.h                           |     8 +-
 libsound/SoundUtils.h                              |     6 +-
 libsound/StreamingSound.cpp                        |    16 +-
 libsound/StreamingSound.h                          |     4 +-
 libsound/StreamingSoundData.cpp                    |    37 +-
 libsound/StreamingSoundData.h                      |    17 +-
 libsound/WAVWriter.cpp                             |    34 +-
 libsound/WAVWriter.h                               |     4 +-
 libsound/aos4/sound_handler_ahi.cpp                |    74 +-
 libsound/aos4/sound_handler_ahi.h                  |    29 +-
 libsound/mkit/sound_handler_mkit.cpp               |    74 +-
 libsound/mkit/sound_handler_mkit.h                 |    33 +-
 libsound/sdl/sound_handler_sdl.cpp                 |    78 +-
 libsound/sdl/sound_handler_sdl.h                   |    29 +-
 libsound/sound_handler.cpp                         |    96 +-
 libsound/sound_handler.h                           |    30 +-
 macros/ax_cxx_compile_stdcxx_11.m4                 |   145 +
 macros/boost.m4                                    |    12 +-
 macros/npapi.m4                                    |     6 +-
 macros/po.m4                                       |     2 +-
 plugin/aos4/plugin.cpp                             |     6 +-
 plugin/aos4/plugin.h                               |     2 +-
 plugin/npapi/external.cpp                          |    15 +-
 plugin/npapi/external.h                            |     4 +-
 plugin/npapi/mozilla-sdk/np_entry.cpp              |     4 +-
 plugin/npapi/mozilla-sdk/npn_gate.cpp              |     4 +-
 plugin/npapi/plugin.cpp                            |    65 +-
 plugin/npapi/pluginScriptObject.cpp                |    66 +-
 plugin/npapi/test.cpp                              |     2 +-
 plugin/win32/plugin.cpp                            |     6 +-
 plugin/win32/plugin.h                              |     2 +-
 po/Makefile.am                                     |    10 +-
 po/gnash.pot                                       | 10382 +++++++------
 po/nb.po                                           |  1292 ++
 po/{zh_TW.po => zh_CN.po}                          | 14523 ++++++++++---------
 revno.h                                            |     2 +-
 testsuite/DummyCharacter.h                         |     4 +-
 testsuite/DummyMovieDefinition.h                   |     2 +-
 testsuite/FuzzyPixel.h                             |     2 +-
 testsuite/Makefile.am                              |     1 +
 testsuite/MovieTester.cpp                          |    49 +-
 testsuite/MovieTester.h                            |    28 +-
 testsuite/actionscript.all/BitmapData.as           |    10 +-
 testsuite/actionscript.all/Date.as                 |    17 +-
 testsuite/actionscript.all/Makefile.am             |    10 +-
 testsuite/actionscript.all/MovieClipLoader.as      |     6 +-
 testsuite/actionscript.all/XMLNode.as              |    49 +-
 testsuite/analyse-results.sh                       |    47 +-
 testsuite/check.h                                  |    11 +
 testsuite/dejagnu.h                                |     1 +
 testsuite/generic-testrunner.sh                    |     2 +-
 testsuite/libbase.all/CurlStreamTest.cpp           |     6 +-
 testsuite/libbase.all/IntTypesTest.cpp             |    21 +-
 testsuite/libbase.all/Makefile.am                  |     6 +-
 testsuite/libbase.all/NoSeekFileTest.cpp           |    30 +-
 testsuite/libbase.all/Point2dTest.cpp              |     5 +-
 testsuite/libbase.all/Range2dTest.cpp              |     2 +-
 testsuite/libbase.all/RcTest.cpp                   |     9 +-
 testsuite/libbase.all/URLTest.cpp                  |     5 +-
 testsuite/libbase.all/memtest.cpp                  |     1 +
 testsuite/libbase.all/snappingrangetest.cpp        |     1 +
 testsuite/libbase.all/string_tableTest.cpp         |     6 +-
 testsuite/libcore.all/AsValueTest.cpp              |     9 +-
 testsuite/libcore.all/BitsReaderTest.cpp           |    14 +-
 testsuite/libcore.all/ClassSizes.cpp               |     6 +-
 testsuite/libcore.all/CodeStreamTest.cpp           |     8 +-
 testsuite/libcore.all/CxFormTest.cpp               |     9 +-
 testsuite/libcore.all/DisplayListTest.cpp          |     7 +-
 testsuite/libcore.all/EdgeTest.cpp                 |     1 +
 testsuite/libcore.all/Makefile.am                  |     5 +-
 testsuite/libcore.all/MatrixTest.cpp               |    17 +-
 testsuite/libcore.all/PointTest.cpp                |     7 -
 testsuite/libcore.all/PropFlagsTest.cpp            |     1 +
 testsuite/libcore.all/PropertyListTest.cpp         |     6 +-
 testsuite/libcore.all/SafeStackTest.cpp            |     4 +-
 testsuite/libcore.all/StreamTest.cpp               |    13 +-
 testsuite/libdevice.all/test_dfb.cpp               |     1 +
 testsuite/libdevice.all/test_egl.cpp               |     1 +
 testsuite/libdevice.all/test_events.cpp            |    15 +-
 testsuite/libdevice.all/test_rawfb.cpp             |     3 +-
 testsuite/libdevice.all/test_vaapi.cpp             |     1 +
 testsuite/libdevice.all/test_x11.cpp               |     1 +
 testsuite/libmedia.all/Makefile.am                 |     4 +-
 testsuite/misc-haxe.all/classes.all/media/media.am |     7 +-
 testsuite/misc-haxe.all/classes.all/net/net.am     |     2 +
 testsuite/misc-ming.all/BeginBitmapFillRunner.cpp  |     4 +-
 testsuite/misc-ming.all/BitmapDataTestRunner.cpp   |     4 +-
 .../misc-ming.all/ButtonEventsTest-Runner.cpp      |     4 +-
 .../misc-ming.all/ButtonPropertiesTestRunner.cpp   |     4 +-
 .../misc-ming.all/DefineEditTextTest-Runner.cpp    |     4 +-
 .../DefineEditTextVariableNameTest-Runner.cpp      |     4 +-
 testsuite/misc-ming.all/DefineTextTest-Runner.cpp  |     5 +-
 testsuite/misc-ming.all/DragDropTestRunner.cpp     |     3 +-
 testsuite/misc-ming.all/DrawingApiTestRunner.cpp   |     4 +-
 testsuite/misc-ming.all/KeyEventOrderRunner.cpp    |     4 +-
 testsuite/misc-ming.all/Makefile.am                |    16 +-
 .../misc-ming.all/NetStream-SquareTestRunner.cpp   |     4 +-
 .../PrototypeEventListenersTestRunner.cpp          |     3 +-
 .../misc-ming.all/ResolveEventsTest-Runner.cpp     |     4 +-
 testsuite/misc-ming.all/RollOverOutTest-Runner.cpp |     4 +-
 .../SpriteButtonEventsTest-Runner.cpp              |     4 +-
 .../misc-ming.all/Video-EmbedSquareTestRunner.cpp  |     4 +-
 .../misc-ming.all/attachMovieLoopingTestRunner.cpp |     4 +-
 testsuite/misc-ming.all/attachMovieTestRunner.cpp  |     4 +-
 testsuite/misc-ming.all/intervalTestRunner.cpp     |     4 +-
 testsuite/misc-ming.all/key_event_testrunner.cpp   |     4 +-
 testsuite/misc-ming.all/loading/Makefile.am        |     1 +
 .../misc-ming.all/loading/loadMovieTestRunner.cpp  |     6 +-
 testsuite/misc-ming.all/loop/Makefile.am           |     1 +
 testsuite/misc-ming.all/loop/loop_test-Runner.cpp  |     6 +-
 testsuite/misc-ming.all/loop/loop_test2runner.cpp  |     4 +-
 .../misc-ming.all/loop/simple_loop_testrunner.cpp  |     4 +-
 testsuite/misc-ming.all/masks_test2runner.cpp      |     4 +-
 testsuite/misc-ming.all/masks_testrunner.cpp       |     4 +-
 testsuite/misc-ming.all/morph_test1runner.cpp      |     8 +-
 testsuite/misc-ming.all/register_class/Makefile.am |     1 +
 .../register_class/registerClassTestRunner.cpp     |     4 +-
 .../misc-ming.all/replace_buttons1test_runner.cpp  |     4 +-
 .../misc-ming.all/replace_shapes1test_runner.cpp   |     4 +-
 .../misc-ming.all/replace_sprites1test_runner.cpp  |     4 +-
 testsuite/misc-ming.all/root_stop_testrunner.cpp   |     3 +-
 .../sound/EmbeddedSoundTest-Runner.cpp             |     5 +-
 testsuite/misc-ming.all/sound/Makefile.am          |     1 +
 .../misc-ming.all/sound/StreamSoundTestRunner.cpp  |     5 +-
 .../misc-ming.all/sound/eventSoundTest1-Runner.cpp |     6 +-
 .../sound/streamingSoundTest1-Runner.cpp           |     4 +-
 .../sound/streamingSoundTest2-Runner.cpp           |     4 +-
 testsuite/misc-swfc.all/Makefile.am                |    20 +-
 testsuite/misc-swfc.all/button_test1runner.cpp     |     6 +-
 testsuite/misc-swfc.all/sound_stop_runner.cpp      |     6 +-
 testsuite/misc-swfmill.all/Makefile.am             |     1 +
 .../misc-swfmill.all/backgroundTestRunner.cpp      |     6 +-
 .../misc-swfmill.all/missing_bitmapTestRunner.cpp  |     6 +-
 testsuite/movies.all/Makefile.am                   |     1 +
 .../movies.all/gravity_embedded-TestRunner.cpp     |     4 +-
 testsuite/movies.all/tic_tac2-TestRunner.cpp       |    92 +-
 testsuite/network.all/test_ssh.cpp                 |     2 +-
 testsuite/network.all/test_ssl.cpp                 |     2 +-
 testsuite/samples/Makefile.am                      |     1 +
 testsuite/samples/clip_as_button2-TestRunner.cpp   |     6 +-
 .../samples/gotoFrameOnKeyEvent-TestRunner.cpp     |     6 +-
 testsuite/samples/subshapes-TestRunner.cpp         |     6 +-
 testsuite/samples/test_15bpp_bitmap-TestRunner.cpp |     6 +-
 testsuite/simultaneous-testrunner.sh               |    74 +-
 testsuite/timingissues                             |     9 +-
 utilities/findmicrophones.cpp                      |    22 +-
 utilities/findwebcams.cpp                          |    30 +-
 utilities/flvdumper.cpp                            |    21 +-
 utilities/processor.cpp                            |    42 +-
 utilities/rtmpget.cpp                              |    14 +-
 utilities/soldumper.cpp                            |    12 +-
 757 files changed, 23066 insertions(+), 22147 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index f8bcf34..1199d32 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -489,7 +489,7 @@ check-local:
 	$(MAKE) anal
 
 anal testreport checksum:
-	$(srcdir)/testsuite/analyse-results.sh
+	$(srcdir)/testsuite/analyse-results.sh $(MODE)
 endif
 
 .PHONY : dumpconfig \
diff --git a/NEWS b/NEWS
index 20dfb8a..dc3d70a 100644
--- a/NEWS
+++ b/NEWS
@@ -4,14 +4,18 @@ YYYY/MM/DD
 Caveats:
 * The in-tree copy of jemalloc has been removed in preference to linking
   the system-installed jemalloc library.
-* The minimum required version of FFMPEG/libavcodec (if available) is 53.35.0.
+* The minimum required version of FFMPEG/libavcodec (if available) is
+  53.35.0.
+* Extensions support is now disabled by default.
+* The minimum GCC version required to build Gnash is 4.6.0.
 
 Improvements since 0.8.10 release are:
 
  * Fix opening of external URL with Gnash Standalone (#31833)
  * Stability fixes in image handling, (CVE-2012-1175, #39388, #37629).
- * Stability fixes in parsing (#34686) and ActionScript handling (#39385, #39404).
- * NPAPI Plugin stability fix (#36002).
+ * Stability fixes in parsing (#34686) and ActionScript handling (#39385,
+   #39404).
+ * NPAPI Plugin stability fix (#36002, #42199) and a file descriptor leak.
  * Improved NetStream ActionScript class support.
  * Add support for IPv6 [TODO: affects Socket/XML, and what else?].
  * Fix build against recent Boost, FFMPEG and libav.
diff --git a/configure.ac b/configure.ac
index 0d580a7..10e7b49 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 dnl  
-dnl  Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+dnl  Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014
 dnl  Free Software Foundation, Inc.
 dnl  
 dnl  This program is free software; you can redistribute it and/or modify
@@ -30,6 +30,7 @@ dnl Figure out development tool stuff
 dnl --------------------------------------------------------
 
 AC_PROG_CXX
+AX_CXX_COMPILE_STDCXX_11(noext, mandatory)
 AC_PROG_CC
 AM_PROG_CC_C_O
 AC_EXEEXT
@@ -1358,7 +1359,7 @@ ext_lirc=no
 ext_dbus=no
 ext_all=no
 extensions_list=
-extensions_support=yes
+extensions_support=no
 nextensions=0
 AC_ARG_ENABLE(extensions,
   AC_HELP_STRING([--enable-extensions=], [Specify which extensions to build (default: none)])
@@ -1367,11 +1368,10 @@ AC_HELP_STRING([--disable-extensions], [Disable support for extensions entirely]
     if test "x${enableval}" != "xno"; then
       extlist="${enableval}"
       enableval=`echo ${enableval} | tr '\054' ' ' `
-      AC_DEFINE([USE_EXTENSIONS], [1], [Specify that extension support is enabled.])
+      extensions_support=yes
     else
       extlist=""
       enableval=""
-      extensions_support=no
     fi
   fi
   nextensions=0
@@ -1451,8 +1451,6 @@ AM_CONDITIONAL(BUILD_LIRC_EXT, [ test x$ext_lirc = xyes ])
 AM_CONDITIONAL(BUILD_DBUS_EXT, [ test x$ext_dbus = xyes ])
 AM_CONDITIONAL(BUILD_EXTENSIONS, [ test -n "$extensions_list"])
 
-AM_CONDITIONAL(ENABLE_EXTENSIONS, [ test "x${extensions_support}" != "xno" ])
-
 dnl --------------------------------------------------------
 dnl Libtool
 dnl --------------------------------------------------------
@@ -1687,12 +1685,18 @@ dnl --------------------------------------------------------
 AC_ARG_ENABLE(cygnal,
   AC_HELP_STRING([--enable-cygnal], [Enable building of the Cygnal server]),
 [case "${enableval}" in
-  yes) cygnal=yes ;;
+  yes) cygnal=yes
+       extensions_support=yes ;;
   no)  cygnal=no ;;
   *)   AC_MSG_ERROR([bad value ${enableval} for enable-cygnal option]) ;;
 esac],cygnal=no)
 AM_CONDITIONAL(CYGNAL, test x$cygnal = xyes)
 
+if test x$extensions_support = xyes; then
+    AC_DEFINE([USE_EXTENSIONS], [1], [Specify that extension support is enabled.])
+fi
+AM_CONDITIONAL(ENABLE_EXTENSIONS, [ test "x${extensions_support}" != "xno" ])
+
 dnl --------------------------------------------------------
 dnl Build the cgibins server if specified.
 dnl --------------------------------------------------------
@@ -2143,6 +2147,11 @@ if test x$ipc_key = xno; then
   )
 fi
 
+dnl If sysv semaphores functs are stubs (e.g. on Hurd),
+dnl disable LocalConnection tests
+AC_CHECK_FUNCS(semget, semget=yes)
+AM_CONDITIONAL(HAVE_SEMGET, test x${semget} = xyes)
+
 AC_CACHE_CHECK([for finite], ac_cv_finite,
  [AC_TRY_COMPILE([
    #include <math.h>
@@ -2689,8 +2698,15 @@ dnl ****************************************
 dnl *** Check for ELF visibility support ***
 dnl ****************************************
 
+dnl Enable visibility by default, disabled if extensions are enabled
 AC_ARG_ENABLE([visibility],
-  AC_HELP_STRING([--enable-visibility], [Use ELF visibility attributes]), [], [enable_visibility=no])
+  AC_HELP_STRING([--enable-visibility], [Use ELF visibility attributes])
+AC_HELP_STRING([--disable-visibility], [Disable ELF visibility]), [], [
+    if test x"$extensions_support" != x"no"; then
+      enable_visibility=no
+    else
+      enable_visibility=yes
+    fi])
 
 if test x"$enable_visibility" != x"no"; then
   dnl Check whether the compiler supports the visibility attribute
@@ -2881,11 +2897,18 @@ AC_ARG_ENABLE([harden],
   [harden=yes]
 )
 
-if test x"$harden" = x"yes" -a x"${host_cpu}" != mips -a x"${android}" != xyes; then
+if test x"$harden" = x"yes" -a x"${host_cpu}" != x"mips" -a x"${android}" != x"yes" -a x"$GCC" = x"yes"; then
     CPPFLAGS="${CPPFLAGS} -D_FORTIFY_SOURCE=2"
     CFLAGS="${CFLAGS} -fPIE -fstack-protector --param ssp-buffer-size=4 -Wformat -Werror=format-security"
     CXXFLAGS="${CXXFLAGS} -fPIE -fstack-protector --param ssp-buffer-size=4 -Wformat -Werror=format-security"
-    LDFLAGS="${LDFLAGS} -fPIE -pie -Wl,-z,relro -Wl,-z,now"
+
+    if test x"$with_gnu_ld" = x"yes"; then
+      LDFLAGS="${LDFLAGS} -fPIE -pie -Wl,-z,relro -Wl,-z,now"
+    elif test x"$darwin" = x"yes"; then
+      LDFLAGS="${LDFLAGS} -fPIE -pie"
+    else
+      LDFLAGS="${LDFLAGS}"
+    fi
 fi
 
 dnl Define convenience constants so Gnash can print out the
diff --git a/cygnal/Makefile.am b/cygnal/Makefile.am
index 30fbba6..c4b0146 100644
--- a/cygnal/Makefile.am
+++ b/cygnal/Makefile.am
@@ -44,8 +44,6 @@ sysconf_DATA = cygnalrc
 # this is where Cygnal plugins get installed
 pluginsdir = $(libdir)/cygnal/plugins
 
-AM_CPPFLAGS = 	-DPLUGINSDIR=\"$(pluginsdir)\"
-
 AM_LDFLAGS = \
 	libnet/libgnashnet.la \
 	libamf/libgnashamf.la \
@@ -68,7 +66,7 @@ endif
 
 localedir = $(datadir)/locale
 
-INCLUDES = -I.. \
+AM_CPPFLAGS = -I.. \
         -I$(srcdir)/libamf \
         -I$(srcdir)/libnet \
         -I$(top_srcdir)	\
@@ -83,6 +81,7 @@ INCLUDES = -I.. \
         -I$(top_srcdir)/libcore/parser \
         -I$(top_srcdir)/libcore/vm \
         -DLOCALEDIR=\"$(localedir)\" \
+        -DPLUGINSDIR=\"$(pluginsdir)\" \
 	$(CURL_CFLAGS) \
 	$(BOOST_CFLAGS) \
 	$(PTHREAD_CFLAGS)
diff --git a/cygnal/alloc.cpp b/cygnal/alloc.cpp
index bf74cfc..9ce5902 100644
--- a/cygnal/alloc.cpp
+++ b/cygnal/alloc.cpp
@@ -19,15 +19,15 @@
 
 /// This defines thread safe new/delete operators
 #include <new>
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 
-static boost::mutex mem_mutex;
+static std::mutex mem_mutex;
 
 #if 0
 // Wrap new in a mutex, because it is not thread safe.
 void *
 operator new (std::size_t bytes) throw (std::bad_alloc) {
-    boost::mutex::scoped_lock lock(mem_mutex);
+    std::lock_guard<std::mutex> lock(mem_mutex);
     void *ptr = malloc (bytes);
     return ptr;
 }
@@ -35,7 +35,7 @@ operator new (std::size_t bytes) throw (std::bad_alloc) {
 // Wrap delete in a mutex, because it is not thread safe.
 void
 operator delete (void* vptr) throw () {
-    boost::mutex::scoped_lock lock(mem_mutex);
+    std::lock_guard<std::mutex> lock(mem_mutex);
     free (vptr);
 }
 #endif
diff --git a/cygnal/cgi-bin/echo/Makefile.am b/cygnal/cgi-bin/echo/Makefile.am
index 841a203..28c9830 100644
--- a/cygnal/cgi-bin/echo/Makefile.am
+++ b/cygnal/cgi-bin/echo/Makefile.am
@@ -31,7 +31,7 @@ GNASH_LIBS = \
 	$(BOOST_LIBS) \
 	$(NULL)
 
-INCLUDES = \
+AM_CPPFLAGS = \
         -I$(top_srcdir)/libbase \
 	-I$(top_srcdir)/libcore \
 	-I$(top_srcdir)/libltdl \
diff --git a/cygnal/cgi-bin/echo/echo.cpp b/cygnal/cgi-bin/echo/echo.cpp
index 4087a5d..0b9d871 100644
--- a/cygnal/cgi-bin/echo/echo.cpp
+++ b/cygnal/cgi-bin/echo/echo.cpp
@@ -21,7 +21,6 @@
 #include <log.h>
 #include <iostream>
 #include <string>
-#include <boost/shared_ptr.hpp>
 
 // Gnash headers
 #include "amf.h"
@@ -48,14 +47,12 @@ static bool netdebug = false;
 
 static EchoTest echo;
 	
-extern "C" {
-    
     // the standard API
-    boost::shared_ptr<Handler::cygnal_init_t>
-    echo_init_func(boost::shared_ptr<gnash::RTMPMsg> &msg)
+    std::shared_ptr<Handler::cygnal_init_t>
+    echo_init_func(std::shared_ptr<gnash::RTMPMsg> &msg)
     {
 	GNASH_REPORT_FUNCTION;
-        boost::shared_ptr<Handler::cygnal_init_t> init(new Handler::cygnal_init_t);
+        std::shared_ptr<Handler::cygnal_init_t> init(new Handler::cygnal_init_t);
         
         if (msg) {
             echo.setNetConnection(msg);
@@ -70,11 +67,11 @@ extern "C" {
         return init;
     }
 
-    boost::shared_ptr<cygnal::Buffer> echo_read_func()
+    std::shared_ptr<cygnal::Buffer> echo_read_func()
     {
 // 	GNASH_REPORT_FUNCTION;
 	
-	boost::shared_ptr<cygnal::Buffer> buf = echo.getResponse();
+	std::shared_ptr<cygnal::Buffer> buf = echo.getResponse();
 
 // 	log_network("%s", hexify(data, safe, true));
 
@@ -83,13 +80,13 @@ extern "C" {
 //         GNASH_REPORT_RETURN;
     }
 
-    size_t echo_write_func(boost::uint8_t *data, size_t size)
+    size_t echo_write_func(std::uint8_t *data, size_t size)
     {
 // 	GNASH_REPORT_FUNCTION;
 
-	boost::shared_ptr<cygnal::Buffer> buf = echo.getResponse();
+	std::shared_ptr<cygnal::Buffer> buf = echo.getResponse();
 
-        vector<boost::shared_ptr<cygnal::Element> > request =
+        vector<std::shared_ptr<cygnal::Element> > request =
 	    echo.parseEchoRequest(data, size);
         if (request[3]) {
             buf = echo.formatEchoResponse(request[1]->to_number(), *request[3]);
@@ -103,8 +100,6 @@ extern "C" {
 //         GNASH_REPORT_RETURN;
     }
     
-} // end of extern C
-
 int
 main(int argc, char *argv[])
 {
@@ -178,7 +173,7 @@ main(int argc, char *argv[])
     // This is the main message processing loop for rtmp. All message received require
     // a response.
     do {
-        boost::shared_ptr<cygnal::Buffer> bufptr(new cygnal::Buffer);
+        std::shared_ptr<cygnal::Buffer> bufptr(new cygnal::Buffer);
         if (infile.empty()) {
             net.readNet(netfd, *bufptr);
         } else {
@@ -190,10 +185,10 @@ main(int argc, char *argv[])
             }
         }
         
-        vector<boost::shared_ptr<cygnal::Element> > request = net.parseEchoRequest(
+        vector<std::shared_ptr<cygnal::Element> > request = net.parseEchoRequest(
             bufptr->reference(), bufptr->allocated());
         if (request[3]) {
-            boost::shared_ptr<cygnal::Buffer> result = net.formatEchoResponse(request[1]->to_number(), *request[3]);
+            std::shared_ptr<cygnal::Buffer> result = net.formatEchoResponse(request[1]->to_number(), *request[3]);
             if (net.writeNet(netfd, *result)) {
                 log_debug("Sent echo test response response to client.");
             }
@@ -216,31 +211,31 @@ EchoTest::~EchoTest()
 
 // Parse an Echo Request message coming from the Red5 echo_test. This
 // method should only be used for testing purposes.
-vector<boost::shared_ptr<cygnal::Element > >
-EchoTest::parseEchoRequest(boost::uint8_t *ptr, size_t size)
+vector<std::shared_ptr<cygnal::Element > >
+EchoTest::parseEchoRequest(std::uint8_t *ptr, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
     cygnal::AMF amf;
-    vector<boost::shared_ptr<cygnal::Element > > headers;
+    vector<std::shared_ptr<cygnal::Element > > headers;
 
     // The first element is the name of the test, 'echo'
-    boost::shared_ptr<cygnal::Element> el1 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el1 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el1);
 
     // The second element is the number of the test,
-    boost::shared_ptr<cygnal::Element> el2 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el2 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el2);
 
     // This one has always been a NULL object from my tests
-    boost::shared_ptr<cygnal::Element> el3 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el3 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el3);
 
     // This one has always been an NULL or Undefined object from my tests
-    boost::shared_ptr<cygnal::Element> el4 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el4 = amf.extractAMF(ptr, ptr+size);
     if (!el4) {
 	log_error("Couldn't reliably extract the echo data!");
     }
@@ -254,11 +249,11 @@ EchoTest::parseEchoRequest(boost::uint8_t *ptr, size_t size)
 // is only used for testing by developers. The format appears to be
 // a string '_result', followed by the number of the test, and then two
 // NULL objects.
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 EchoTest::formatEchoResponse(double num, cygnal::Element &el)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> data = cygnal::AMF::encodeElement(el);
+    std::shared_ptr<cygnal::Buffer> data = cygnal::AMF::encodeElement(el);
     if (data) {
 	return formatEchoResponse(num, data->reference(), data->allocated());
     } else {
@@ -269,15 +264,15 @@ EchoTest::formatEchoResponse(double num, cygnal::Element &el)
     return data;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 EchoTest::formatEchoResponse(double num, cygnal::Buffer &data)
 {
 //    GNASH_REPORT_FUNCTION;
     return formatEchoResponse(num, data.reference(), data.allocated());
 }
 
-boost::shared_ptr<cygnal::Buffer>
-EchoTest::formatEchoResponse(double num, boost::uint8_t *data, size_t size)
+std::shared_ptr<cygnal::Buffer>
+EchoTest::formatEchoResponse(double num, std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
@@ -291,11 +286,11 @@ EchoTest::formatEchoResponse(double num, boost::uint8_t *data, size_t size)
     Element null;
     null.makeNull();
 
-    boost::shared_ptr<cygnal::Buffer> encecho = echo.encode();
-    boost::shared_ptr<cygnal::Buffer> encidx  = index.encode();   
-    boost::shared_ptr<cygnal::Buffer> encnull  = null.encode();   
+    std::shared_ptr<cygnal::Buffer> encecho = echo.encode();
+    std::shared_ptr<cygnal::Buffer> encidx  = index.encode();
+    std::shared_ptr<cygnal::Buffer> encnull  = null.encode();
 
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(encecho->size()
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(encecho->size()
 						       + encidx->size()
 						       + encnull->size() + size));
 
diff --git a/cygnal/cgi-bin/echo/echo.h b/cygnal/cgi-bin/echo/echo.h
index ca69426..48b2f27 100644
--- a/cygnal/cgi-bin/echo/echo.h
+++ b/cygnal/cgi-bin/echo/echo.h
@@ -20,9 +20,6 @@
 #define _ECHO_H_
 
 #include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
 #include <sstream>
 
 // gnash headers
@@ -46,40 +43,38 @@ public:
     ~EchoTest ();
   
     // Parse an Echo Request message coming from the Red5 echo_test.
-    std::vector<boost::shared_ptr<cygnal::Element > > parseEchoRequest(cygnal::Buffer &buf)
+    std::vector<std::shared_ptr<cygnal::Element > > parseEchoRequest(cygnal::Buffer &buf)
         { return parseEchoRequest(buf.reference(), buf.size()); };
-    std::vector<boost::shared_ptr<cygnal::Element > > parseEchoRequest(boost::uint8_t *buf, size_t size);
+    std::vector<std::shared_ptr<cygnal::Element > > parseEchoRequest(std::uint8_t *buf, size_t size);
     
     // format a response to the 'echo' test used for testing Gnash.
-    boost::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, cygnal::Element &el);
-    boost::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, cygnal::Buffer &data);
-    boost::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, boost::uint8_t *data, size_t size);
+    std::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, cygnal::Element &el);
+    std::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, cygnal::Buffer &data);
+    std::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, std::uint8_t *data, size_t size);
 
-    boost::shared_ptr<cygnal::Buffer> getResponse() { return _response; };
-    void setResponse(boost::shared_ptr<cygnal::Buffer> &x) { _response = x; };
+    std::shared_ptr<cygnal::Buffer> getResponse() { return _response; };
+    void setResponse(std::shared_ptr<cygnal::Buffer> &x) { _response = x; };
 
     void setNetConnection(gnash::RTMPMsg *msg) { _netconnect.reset(msg); };
-    void setNetConnection(boost::shared_ptr<gnash::RTMPMsg> msg) { _netconnect = msg; };
-    boost::shared_ptr<gnash::RTMPMsg> getNetConnection() { return _netconnect;};
+    void setNetConnection(std::shared_ptr<gnash::RTMPMsg> msg) { _netconnect = msg; };
+    std::shared_ptr<gnash::RTMPMsg> getNetConnection() { return _netconnect;};
     
 private:
-    boost::shared_ptr<cygnal::Buffer> _response;    
-    boost::shared_ptr<Handler::cygnal_init_t> _info;
+    std::shared_ptr<cygnal::Buffer> _response;
+    std::shared_ptr<Handler::cygnal_init_t> _info;
     /// \var _netconnect
     ///    This store the data from the NetConnection ActionScript
     ///    object we get as the final part of the handshake process
     ///    that is used to set up the connection. This has all the
     ///    file paths and other information needed by the server.
-    boost::shared_ptr<gnash::RTMPMsg>	_netconnect;    
+    std::shared_ptr<gnash::RTMPMsg>	_netconnect;
 };  
 
 // the standard API
-extern "C" {
-    boost::shared_ptr<Handler::cygnal_init_t>echo_init_func(boost::shared_ptr<gnash::RTMPMsg> &msg);
+    std::shared_ptr<Handler::cygnal_init_t>echo_init_func(std::shared_ptr<gnash::RTMPMsg> &msg);
     
-    boost::shared_ptr<cygnal::Buffer> echo_read_func();
-    size_t echo_write_func(boost::uint8_t *data, size_t size);
-}
+    std::shared_ptr<cygnal::Buffer> echo_read_func();
+    size_t echo_write_func(std::uint8_t *data, size_t size);
 
 } // end of cygnal namespace
 #endif  // end of __ECHO_H__
diff --git a/cygnal/cgi-bin/echo/gateway.cpp b/cygnal/cgi-bin/echo/gateway.cpp
index ff49eca..0cbc1d3 100644
--- a/cygnal/cgi-bin/echo/gateway.cpp
+++ b/cygnal/cgi-bin/echo/gateway.cpp
@@ -21,7 +21,6 @@
 #include <log.h>
 #include <iostream>
 #include <string>
-#include <boost/shared_ptr.hpp>
 
 #include "amf.h"
 #include "arg_parser.h"
@@ -49,11 +48,11 @@ static GatewayTest gateway;
 extern "C" {
     
     // the standard API
-    boost::shared_ptr<Handler::cygnal_init_t>
-    gateway_init_func(boost::shared_ptr<gnash::RTMPMsg> &msg)
+    std::shared_ptr<Handler::cygnal_init_t>
+    gateway_init_func(std::shared_ptr<gnash::RTMPMsg> &msg)
     {
 	GNASH_REPORT_FUNCTION;
-        boost::shared_ptr<Handler::cygnal_init_t> init(new Handler::cygnal_init_t);
+        std::shared_ptr<Handler::cygnal_init_t> init(new Handler::cygnal_init_t);
         
         init->version = "Gateway Test 0.1 (Gnash)";
         init->description = "gateway RTMPT test for Cygnal.\n"
@@ -62,14 +61,14 @@ extern "C" {
         return init;
     }
 
-    boost::shared_ptr<amf::Buffer> gateway_read_func()
+    std::shared_ptr<amf::Buffer> gateway_read_func()
     {
 // 	GNASH_REPORT_FUNCTION;
 	
 //      GNASH_REPORT_RETURN;
     }
 
-    size_t gateway_write_func(boost::uint8_t *data, size_t size)
+    size_t gateway_write_func(std::uint8_t *data, size_t size)
     {
 // 	GNASH_REPORT_FUNCTION;
 
@@ -166,8 +165,8 @@ main(int argc, char *argv[])
     }
     
     // Wait for data, and when we get it, process it.
-    boost::shared_ptr<amf::Buffer> content;
-    vector<boost::shared_ptr<amf::Element> > headers;
+    std::shared_ptr<amf::Buffer> content;
+    vector<std::shared_ptr<amf::Element> > headers;
     net.setTimeout(10);
     do {
         netfd = net.newConnection(false, fd);
@@ -177,7 +176,7 @@ main(int argc, char *argv[])
         }
         // See if we have any messages waiting
         if (infile.empty()) {
-            boost::shared_ptr<amf::Buffer> content = net.readNet();
+            std::shared_ptr<amf::Buffer> content = net.readNet();
             if (!content) {
                 done = true;
                 break;
@@ -194,7 +193,7 @@ main(int argc, char *argv[])
             break;
         }
         
-  	//boost::shared_ptr<amf::Element> &el0 = headers[0];
+  	//std::shared_ptr<amf::Element> &el0 = headers[0];
 	
         if (!done) {
             if (headers.size() >= 4) {
@@ -236,28 +235,28 @@ GatewayTest::~GatewayTest()
 
 // Parse an Echo Request message coming from the Red5 echo_test. This
 // method should only be used for testing purposes.
-vector<boost::shared_ptr<amf::Element > >
-GatewayTest::parseEchoRequest(boost::uint8_t *data, size_t size)
+vector<std::shared_ptr<amf::Element > >
+GatewayTest::parseEchoRequest(std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     
-    vector<boost::shared_ptr<amf::Element > > headers;
+    vector<std::shared_ptr<amf::Element > > headers;
 	
     // skip past the header bytes, we don't care about them.
-    boost::uint8_t *tmpptr = data + 6;
+    std::uint8_t *tmpptr = data + 6;
     
-    boost::uint16_t length;
-    length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-    tmpptr += sizeof(boost::uint16_t);
+    std::uint16_t length;
+    length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+    tmpptr += sizeof(std::uint16_t);
 
     // Get the first name, which is a raw string, and not preceded by
     // a type byte.
-    boost::shared_ptr<amf::Element > el1(new amf::Element);
+    std::shared_ptr<amf::Element > el1(new amf::Element);
     
     // If the length of the name field is corrupted, then we get out of
     // range quick, and corrupt memory. This is a bit of a hack, but
     // reduces memory errors caused by some of the corrupted tes cases.
-    boost::uint8_t *endstr = std::find(tmpptr, tmpptr+length, '\0');
+    std::uint8_t *endstr = std::find(tmpptr, tmpptr+length, '\0');
     if (endstr != tmpptr+length) {
 	log_debug("Caught corrupted string! length was %d, null at %d",
 		  length,  endstr-tmpptr);
@@ -269,9 +268,9 @@ GatewayTest::parseEchoRequest(boost::uint8_t *data, size_t size)
     
     // Get the second name, which is a raw string, and not preceded by
     // a type byte.
-    length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-    tmpptr += sizeof(boost::uint16_t);
-    boost::shared_ptr<amf::Element > el2(new amf::Element);
+    length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+    tmpptr += sizeof(std::uint16_t);
+    std::shared_ptr<amf::Element > el2(new amf::Element);
 
 //     std::string name2(reinterpret_cast<const char *>(tmpptr), length);
 //     el2->setName(name2.c_str(), name2.size());
@@ -291,11 +290,11 @@ GatewayTest::parseEchoRequest(boost::uint8_t *data, size_t size)
     // Get the last two pieces of data, which are both AMF encoded
     // with a type byte.
     amf::AMF amf;
-    boost::shared_ptr<amf::Element> el3 = amf.extractAMF(tmpptr, tmpptr + size);
+    std::shared_ptr<amf::Element> el3 = amf.extractAMF(tmpptr, tmpptr + size);
     headers.push_back(el3);
     tmpptr += amf.totalsize();
     
-    boost::shared_ptr<amf::Element> el4 = amf.extractAMF(tmpptr, tmpptr + size);
+    std::shared_ptr<amf::Element> el4 = amf.extractAMF(tmpptr, tmpptr + size);
     headers.push_back(el4);
 
      return headers;
@@ -308,7 +307,7 @@ amf::Buffer &
 GatewayTest::formatEchoResponse(const std::string &num, amf::Element &el)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<amf::Buffer> data;
+    std::shared_ptr<amf::Buffer> data;
 
     amf::Element nel;
     if (el.getType() == amf::Element::TYPED_OBJECT_AMF0) {
@@ -319,7 +318,7 @@ GatewayTest::formatEchoResponse(const std::string &num, amf::Element &el)
 	    // FIXME: see about using std::reverse() instead.
 	    for (int i=el.propertySize()-1; i>=0; i--) {
 // 	    for (int i=0 ; i<el.propertySize(); i++) {
-		boost::shared_ptr<amf::Element> child = el.getProperty(i);
+		std::shared_ptr<amf::Element> child = el.getProperty(i);
 		nel.addProperty(child);
 	    }
 	    data = nel.encode();
@@ -341,11 +340,11 @@ GatewayTest::formatEchoResponse(const std::string &num, amf::Buffer &data)
 }
 
 amf::Buffer &
-GatewayTest::formatEchoResponse(const std::string &num, boost::uint8_t *data, size_t size)
+GatewayTest::formatEchoResponse(const std::string &num, std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    //boost::uint8_t *tmpptr  = data;
+    //std::uint8_t *tmpptr  = data;
     
     // FIXME: temporary hacks while debugging
     amf::Buffer fixme("00 00 00 00 00 01");
@@ -370,11 +369,11 @@ GatewayTest::formatEchoResponse(const std::string &num, boost::uint8_t *data, si
     // the request, a slash followed by a number like "/2".
     string result = num;
     result += "/onResult";
-    boost::shared_ptr<amf::Buffer> res = amf::AMF::encodeString(result);
+    std::shared_ptr<amf::Buffer> res = amf::AMF::encodeString(result);
     _buffer.append(res->begin()+1, res->size()-1);
 
     // Add the null data item
-    boost::shared_ptr<amf::Buffer> null = amf::AMF::encodeString("null");
+    std::shared_ptr<amf::Buffer> null = amf::AMF::encodeString("null");
     _buffer.append(null->begin()+1, null->size()-1);
 
     // Add the other binary blob
diff --git a/cygnal/cgi-bin/echo/gateway.h b/cygnal/cgi-bin/echo/gateway.h
index 637ef68..023ca37 100644
--- a/cygnal/cgi-bin/echo/gateway.h
+++ b/cygnal/cgi-bin/echo/gateway.h
@@ -21,9 +21,6 @@
 
 #include <string>
 #include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
 #include <sstream>
 
 #include "amf.h"
@@ -43,14 +40,14 @@ public:
     ~GatewayTest ();
 
     // Parse an Echo Request message coming from the Red5 echo_test.
-    std::vector<boost::shared_ptr<amf::Element > > parseEchoRequest(amf::Buffer &buf)
+    std::vector<std::shared_ptr<amf::Element > > parseEchoRequest(amf::Buffer &buf)
         { return parseEchoRequest(buf.reference(), buf.size()); };
-    std::vector<boost::shared_ptr<amf::Element > > parseEchoRequest(boost::uint8_t *buf, size_t size);
+    std::vector<std::shared_ptr<amf::Element > > parseEchoRequest(std::uint8_t *buf, size_t size);
 
     // format a response to the 'echo' test used for testing Gnash.
     amf::Buffer &formatEchoResponse(const std::string &num, amf::Element &el);
     amf::Buffer &formatEchoResponse(const std::string &num, amf::Buffer &data);
-    amf::Buffer &formatEchoResponse(const std::string &num, boost::uint8_t *data, size_t size);
+    amf::Buffer &formatEchoResponse(const std::string &num, std::uint8_t *data, size_t size);
 private:
 };
 
diff --git a/cygnal/cgi-bin/fitcDemo/Makefile.am b/cygnal/cgi-bin/fitcDemo/Makefile.am
index e661c49..49027f6 100644
--- a/cygnal/cgi-bin/fitcDemo/Makefile.am
+++ b/cygnal/cgi-bin/fitcDemo/Makefile.am
@@ -31,7 +31,7 @@ GNASH_LIBS = \
 	$(BOOST_CFLAGS) \
 	$(NULL)
 
-INCLUDES = \
+AM_CPPFLAGS = \
         -I$(top_srcdir)/libbase \
         -I$(top_srcdir)/libamf \
 	-I$(top_srcdir)/libnet \
diff --git a/cygnal/cgi-bin/fitcDemo/fitcDemo.cpp b/cygnal/cgi-bin/fitcDemo/fitcDemo.cpp
index 49ec080..c6ad29a 100644
--- a/cygnal/cgi-bin/fitcDemo/fitcDemo.cpp
+++ b/cygnal/cgi-bin/fitcDemo/fitcDemo.cpp
@@ -24,7 +24,6 @@
 #include <log.h>
 #include <iostream>
 #include <string>
-#include <boost/shared_ptr.hpp>
 
 // Gnash headers
 #include "amf.h"
@@ -54,25 +53,25 @@ static FitcDemoTest fitcDemo;
 	
 extern "C" {
     
-    boost::shared_ptr<Handler::cygnal_init_t>
+    std::shared_ptr<Handler::cygnal_init_t>
     fitcDemo_class_init()
     {
 	GNASH_REPORT_FUNCTION;
         // the standard API
         
-        boost::shared_ptr<Handler::cygnal_init_t> init(new Handler::cygnal_init_t);
+        std::shared_ptr<Handler::cygnal_init_t> init(new Handler::cygnal_init_t);
 //     init.read_func = read_func;
 //     init.write_func = write_func;
         
         return init;
     }
 
-    size_t fitcDemo_read_func(boost::uint8_t *data, size_t size)
+    size_t fitcDemo_read_func(std::uint8_t *data, size_t size)
     {
 // 	GNASH_REPORT_FUNCTION;
 	
 	size_t safe = 0;
-	boost::shared_ptr<amf::Buffer> buf = fitcDemo.getResponse();
+	std::shared_ptr<amf::Buffer> buf = fitcDemo.getResponse();
 
 	if (size < buf->allocated()) {
 	    safe = buf->allocated();
@@ -88,13 +87,13 @@ extern "C" {
 //         GNASH_REPORT_RETURN;
     }
 
-    size_t fitcDemo_write_func(boost::uint8_t *data, size_t size)
+    size_t fitcDemo_write_func(std::uint8_t *data, size_t size)
     {
 // 	GNASH_REPORT_FUNCTION;
 
-	boost::shared_ptr<amf::Buffer> buf = fitcDemo.getResponse();
+	std::shared_ptr<amf::Buffer> buf = fitcDemo.getResponse();
 
-        vector<boost::shared_ptr<amf::Element> > request =
+        vector<std::shared_ptr<amf::Element> > request =
 	    fitcDemo.parseFitcDemoRequest(data, size);
         if (request[3]) {
             buf = fitcDemo.formatFitcDemoResponse(request[1]->to_number(), *request[3]);
@@ -183,7 +182,7 @@ main(int argc, char *argv[])
     // This is the main message processing loop for rtmp. All message received require
     // a response.
     do {
-        boost::shared_ptr<amf::Buffer> bufptr(new amf::Buffer);
+        std::shared_ptr<amf::Buffer> bufptr(new amf::Buffer);
         if (infile.empty()) {
             net.readNet(netfd, *bufptr);
         } else {
@@ -195,10 +194,10 @@ main(int argc, char *argv[])
             }
         }
         
-        vector<boost::shared_ptr<amf::Element> > request = net.parseFitcDemoRequest(
+        vector<std::shared_ptr<amf::Element> > request = net.parseFitcDemoRequest(
             bufptr->reference(), bufptr->allocated());
         if (request[3]) {
-            boost::shared_ptr<amf::Buffer> result = net.formatFitcDemoResponse(request[1]->to_number(), *request[3]);
+            std::shared_ptr<amf::Buffer> result = net.formatFitcDemoResponse(request[1]->to_number(), *request[3]);
             if (net.writeNet(netfd, *result)) {
                 log_debug("Sent fitcDemo test response response to client.");
             }
@@ -221,31 +220,31 @@ FitcDemoTest::~FitcDemoTest()
 
 // Parse an FitcDemo Request message coming from the Red5 fitcDemo_test. This
 // method should only be used for testing purposes.
-vector<boost::shared_ptr<amf::Element > >
-FitcDemoTest::parseFitcDemoRequest(boost::uint8_t *ptr, size_t size)
+vector<std::shared_ptr<amf::Element > >
+FitcDemoTest::parseFitcDemoRequest(std::uint8_t *ptr, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
     AMF amf;
-    vector<boost::shared_ptr<amf::Element > > headers;
+    vector<std::shared_ptr<amf::Element > > headers;
 
     // The first element is the name of the test, 'fitcDemo'
-    boost::shared_ptr<amf::Element> el1 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<amf::Element> el1 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el1);
 
     // The second element is the number of the test,
-    boost::shared_ptr<amf::Element> el2 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<amf::Element> el2 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el2);
 
     // This one has always been a NULL object from my tests
-    boost::shared_ptr<amf::Element> el3 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<amf::Element> el3 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el3);
 
     // This one has always been an NULL or Undefined object from my tests
-    boost::shared_ptr<amf::Element> el4 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<amf::Element> el4 = amf.extractAMF(ptr, ptr+size);
     if (!el4) {
 	log_error("Couldn't reliably extract the fitcDemo data!");
     }
@@ -259,11 +258,11 @@ FitcDemoTest::parseFitcDemoRequest(boost::uint8_t *ptr, size_t size)
 // is only used for testing by developers. The format appears to be
 // a string '_result', followed by the number of the test, and then two
 // NULL objects.
-boost::shared_ptr<amf::Buffer>
+std::shared_ptr<amf::Buffer>
 FitcDemoTest::formatFitcDemoResponse(double num, amf::Element &el)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<amf::Buffer> data = amf::AMF::encodeElement(el);
+    std::shared_ptr<amf::Buffer> data = amf::AMF::encodeElement(el);
     if (data) {
 	return formatFitcDemoResponse(num, data->reference(), data->allocated());
     } else {
@@ -274,15 +273,15 @@ FitcDemoTest::formatFitcDemoResponse(double num, amf::Element &el)
     return data;
 }
 
-boost::shared_ptr<amf::Buffer>
+std::shared_ptr<amf::Buffer>
 FitcDemoTest::formatFitcDemoResponse(double num, amf::Buffer &data)
 {
 //    GNASH_REPORT_FUNCTION;
     return formatFitcDemoResponse(num, data.reference(), data.allocated());
 }
 
-boost::shared_ptr<amf::Buffer>
-FitcDemoTest::formatFitcDemoResponse(double num, boost::uint8_t *data, size_t size)
+std::shared_ptr<amf::Buffer>
+FitcDemoTest::formatFitcDemoResponse(double num, std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
@@ -296,11 +295,11 @@ FitcDemoTest::formatFitcDemoResponse(double num, boost::uint8_t *data, size_t si
     Element null;
     null.makeNull();
 
-    boost::shared_ptr<amf::Buffer> encfitcDemo = fitcDemo.encode();
-    boost::shared_ptr<amf::Buffer> encidx  = index.encode();   
-    boost::shared_ptr<amf::Buffer> encnull  = null.encode();   
+    std::shared_ptr<amf::Buffer> encfitcDemo = fitcDemo.encode();
+    std::shared_ptr<amf::Buffer> encidx  = index.encode();
+    std::shared_ptr<amf::Buffer> encnull  = null.encode();
 
-    boost::shared_ptr<amf::Buffer> buf(new amf::Buffer(encfitcDemo->size()
+    std::shared_ptr<amf::Buffer> buf(new amf::Buffer(encfitcDemo->size()
 						       + encidx->size()
 						       + encnull->size() + size));
 
diff --git a/cygnal/cgi-bin/fitcDemo/fitcDemo.h b/cygnal/cgi-bin/fitcDemo/fitcDemo.h
index 30de5a5..656a2b5 100644
--- a/cygnal/cgi-bin/fitcDemo/fitcDemo.h
+++ b/cygnal/cgi-bin/fitcDemo/fitcDemo.h
@@ -20,9 +20,6 @@
 #define _FITCDEMO_H_
 
 #include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
 #include <sstream>
 
 // gnash headers
@@ -45,27 +42,27 @@ public:
     ~FitcDemoTest ();
   
     // Parse an FitcDemo Request message coming from the Red5 fitcDemo_test.
-    std::vector<boost::shared_ptr<amf::Element > > parseFitcDemoRequest(amf::Buffer &buf)
+    std::vector<std::shared_ptr<amf::Element > > parseFitcDemoRequest(amf::Buffer &buf)
         { return parseFitcDemoRequest(buf.reference(), buf.size()); };
-    std::vector<boost::shared_ptr<amf::Element > > parseFitcDemoRequest(boost::uint8_t *buf, size_t size);
+    std::vector<std::shared_ptr<amf::Element > > parseFitcDemoRequest(std::uint8_t *buf, size_t size);
     
     // format a response to the 'fitcDemo' test used for testing Gnash.
-    boost::shared_ptr<amf::Buffer> formatFitcDemoResponse(double num, amf::Element &el);
-    boost::shared_ptr<amf::Buffer> formatFitcDemoResponse(double num, amf::Buffer &data);
-    boost::shared_ptr<amf::Buffer> formatFitcDemoResponse(double num, boost::uint8_t *data, size_t size);
+    std::shared_ptr<amf::Buffer> formatFitcDemoResponse(double num, amf::Element &el);
+    std::shared_ptr<amf::Buffer> formatFitcDemoResponse(double num, amf::Buffer &data);
+    std::shared_ptr<amf::Buffer> formatFitcDemoResponse(double num, std::uint8_t *data, size_t size);
 
-    boost::shared_ptr<amf::Buffer> getResponse() { return _response; };
-    void setResponse(boost::shared_ptr<amf::Buffer> &x) { _response = x; };
+    std::shared_ptr<amf::Buffer> getResponse() { return _response; };
+    void setResponse(std::shared_ptr<amf::Buffer> &x) { _response = x; };
 
 private:
-    boost::shared_ptr<amf::Buffer> _response;    
+    std::shared_ptr<amf::Buffer> _response;
 };  
 
 extern "C" {
-    boost::shared_ptr<Handler::cygnal_init_t> fitcDemo_class_init(); 
+    std::shared_ptr<Handler::cygnal_init_t> fitcDemo_class_init();
     // the standard API
-    size_t fitcDemo_read_func(boost::uint8_t *data, size_t size);
-    size_t fitcDemo_write_func(boost::uint8_t *data, size_t size);
+    size_t fitcDemo_read_func(std::uint8_t *data, size_t size);
+    size_t fitcDemo_write_func(std::uint8_t *data, size_t size);
 }
 
 } // end of cygnal namespace
diff --git a/cygnal/cgi-bin/oflaDemo/Makefile.am b/cygnal/cgi-bin/oflaDemo/Makefile.am
index e24a9fe..fcee9d7 100644
--- a/cygnal/cgi-bin/oflaDemo/Makefile.am
+++ b/cygnal/cgi-bin/oflaDemo/Makefile.am
@@ -31,7 +31,7 @@ GNASH_LIBS = \
 	$(BOOST_LIBS) \
 	$(NULL)
 
-INCLUDES = \
+AM_CPPFLAGS = \
         -I$(top_srcdir)/libbase \
 	-I$(top_srcdir)/libcore \
 	-I$(top_srcdir)/libltdl \
diff --git a/cygnal/cgi-bin/oflaDemo/oflaDemo.cpp b/cygnal/cgi-bin/oflaDemo/oflaDemo.cpp
index d4f0a40..3b2ebd4 100644
--- a/cygnal/cgi-bin/oflaDemo/oflaDemo.cpp
+++ b/cygnal/cgi-bin/oflaDemo/oflaDemo.cpp
@@ -27,8 +27,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <ctime>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #if !defined(_MSC_VER)
 # include <unistd.h>
@@ -105,12 +104,12 @@ static OflaDemoTest oflaDemo;
 extern "C" {
     
     // the standard API
-    boost::shared_ptr<Handler::cygnal_init_t>
-    oflaDemo_init_func(boost::shared_ptr<gnash::RTMPMsg> &msg)
+    std::shared_ptr<Handler::cygnal_init_t>
+    oflaDemo_init_func(std::shared_ptr<gnash::RTMPMsg> &msg)
     {
 	GNASH_REPORT_FUNCTION;
         
-        boost::shared_ptr<Handler::cygnal_init_t> init(new Handler::cygnal_init_t);
+        std::shared_ptr<Handler::cygnal_init_t> init(new Handler::cygnal_init_t);
         if (msg) {
             oflaDemo.setNetConnection(msg);
         } else {
@@ -124,11 +123,11 @@ extern "C" {
         return init;
     }
 
-    boost::shared_ptr<cygnal::Buffer> oflaDemo_read_func()
+    std::shared_ptr<cygnal::Buffer> oflaDemo_read_func()
     {
 // 	GNASH_REPORT_FUNCTION;
 	
-	boost::shared_ptr<cygnal::Buffer> buf = oflaDemo.getResponse();
+	std::shared_ptr<cygnal::Buffer> buf = oflaDemo.getResponse();
 // 	log_network("%s", hexify(data, safe, true));
 
         return buf;
@@ -136,27 +135,27 @@ extern "C" {
 //         GNASH_REPORT_RETURN;
     }
 
-    size_t oflaDemo_write_func(boost::uint8_t *data, size_t size)
+    size_t oflaDemo_write_func(std::uint8_t *data, size_t size)
     {
 // 	GNASH_REPORT_FUNCTION;
 
-	boost::shared_ptr<cygnal::Buffer> buf = oflaDemo.getResponse();
+	std::shared_ptr<cygnal::Buffer> buf = oflaDemo.getResponse();
 
-        vector<boost::shared_ptr<cygnal::Element> > request =
+        vector<std::shared_ptr<cygnal::Element> > request =
 	    oflaDemo.parseOflaDemoRequest(data, size);
         
         if (request.empty()) {
             // Send the packet to notify the client that the
             // NetConnection::connect() was sucessful. After the client
             // receives this, the handhsake is completed.
-            boost::shared_ptr<cygnal::Buffer> error =
+            std::shared_ptr<cygnal::Buffer> error =
                 oflaDemo.encodeResult(RTMPMsg::NC_CALL_FAILED);
             // This builds the full header,which is required as the first part
             // of the packet.
-            boost::shared_ptr<cygnal::Buffer> head = oflaDemo.encodeHeader(0x3,
+            std::shared_ptr<cygnal::Buffer> head = oflaDemo.encodeHeader(0x3,
                                           RTMP::HEADER_12, error->allocated(),
                                           RTMP::INVOKE, RTMPMsg::FROM_SERVER);
-            boost::scoped_ptr<cygnal::Buffer> response(new cygnal::Buffer(
+            std::unique_ptr<cygnal::Buffer> response(new cygnal::Buffer(
                                    error->allocated() + head->allocated()));
             *response = head;
             *response += error;
@@ -250,7 +249,7 @@ main(int argc, char *argv[])
     // This is the main message processing loop for rtmp. All message received require
     // a response.
     do {
-        boost::shared_ptr<cygnal::Buffer> bufptr(new cygnal::Buffer);
+        std::shared_ptr<cygnal::Buffer> bufptr(new cygnal::Buffer);
         if (infile.empty()) {
             net.readNet(netfd, *bufptr);
         } else {
@@ -262,10 +261,10 @@ main(int argc, char *argv[])
             }
         }
         
-        vector<boost::shared_ptr<cygnal::Element> > request = net.parseOflaDemoRequest(
+        vector<std::shared_ptr<cygnal::Element> > request = net.parseOflaDemoRequest(
             bufptr->reference(), bufptr->allocated());
         if (request[3]) {
-            boost::shared_ptr<cygnal::Buffer> result = net.formatOflaDemoResponse(request[1]->to_number(), *request[3]);
+            std::shared_ptr<cygnal::Buffer> result = net.formatOflaDemoResponse(request[1]->to_number(), *request[3]);
             if (net.writeNet(netfd, *result)) {
                 log_debug("Sent oflaDemo test response response to client.");
             }
@@ -286,14 +285,14 @@ demoService::~demoService()
 //    GNASH_REPORT_FUNCTION;
 }
 
-std::vector<boost::shared_ptr<demoService::filestats_t> > &
+std::vector<std::shared_ptr<demoService::filestats_t> > &
 demoService::getListOfAvailableFiles(const std::string &path)
 {
 //    GNASH_REPORT_FUNCTION;
     return getListOfAvailableFiles(path, ".flv");
 }
 
-std::vector<boost::shared_ptr<demoService::filestats_t> > &
+std::vector<std::shared_ptr<demoService::filestats_t> > &
 demoService::getListOfAvailableFiles(const std::string &path,
 				    const std::string &type)
 {
@@ -317,7 +316,7 @@ demoService::getListOfAvailableFiles(const std::string &path,
 #else
 	// The Adobe media server and Red5 sort the directories
 	// alphabetically, so we do too.
-	int ret = scandir(path.c_str(), &namelist, 0, alphasort);
+	int ret = scandir(path.c_str(), &namelist, nullptr, alphasort);
 	for (int i=0; i<ret; ++i) {
 	    entry = namelist[i];
 #endif	
@@ -342,7 +341,7 @@ demoService::getListOfAvailableFiles(const std::string &path,
                 filespec += name;
                 struct stat st;
                 if (stat(filespec.c_str(), &st) == 0) {
-                    boost::shared_ptr<demoService::filestats_t> stats(new filestats_t);
+                    std::shared_ptr<demoService::filestats_t> stats(new filestats_t);
                     stats->name = name;
                     stringstream ss;
                         ss << st.st_size;
@@ -385,16 +384,16 @@ OflaDemoTest::~OflaDemoTest()
 
 // Parse an OflaDemo Request message coming from the Red5 oflaDemo_test. This
 // method should only be used for testing purposes.
-vector<boost::shared_ptr<cygnal::Element > >
-OflaDemoTest::parseOflaDemoRequest(boost::uint8_t *ptr, size_t size)
+vector<std::shared_ptr<cygnal::Element > >
+OflaDemoTest::parseOflaDemoRequest(std::uint8_t *ptr, size_t size)
 {
     GNASH_REPORT_FUNCTION;
 
     demoService demo;
     cygnal::AMF amf;
-    vector<boost::shared_ptr<cygnal::Element > > headers;
+    vector<std::shared_ptr<cygnal::Element > > headers;
 
-    boost::shared_ptr<cygnal::Element> el1 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el1 = amf.extractAMF(ptr, ptr+size);
     if (!el1) {
         log_error("No AMF data in message!");
         return headers;
@@ -405,7 +404,7 @@ OflaDemoTest::parseOflaDemoRequest(boost::uint8_t *ptr, size_t size)
     headers.push_back(el1);
 
     // The second element is a number
-    boost::shared_ptr<cygnal::Element> el2 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el2 = amf.extractAMF(ptr, ptr+size);
     if (!el2) {
         log_error("No AMF data in message!");
         return headers;
@@ -416,11 +415,11 @@ OflaDemoTest::parseOflaDemoRequest(boost::uint8_t *ptr, size_t size)
     if (method == "demoService.getListOfAvailableFLVs") {
         // Get the path from the NetConnection object we recieved from the
         // client at the end of the handshake process.
-        boost::shared_ptr<cygnal::Element> version;
-        boost::shared_ptr<cygnal::Element> tcurl;
-        boost::shared_ptr<cygnal::Element> swfurl;
+        std::shared_ptr<cygnal::Element> version;
+        std::shared_ptr<cygnal::Element> tcurl;
+        std::shared_ptr<cygnal::Element> swfurl;
         
-        boost::shared_ptr<gnash::RTMPMsg> msg = getNetConnection();
+        std::shared_ptr<gnash::RTMPMsg> msg = getNetConnection();
         if (msg) {
             version  = msg->findProperty("flashVer");
             if (version) {
@@ -446,32 +445,32 @@ OflaDemoTest::parseOflaDemoRequest(boost::uint8_t *ptr, size_t size)
             std::string key = docroot + "/";
             key += url.hostname() + url.path();
             demo.getListOfAvailableFiles(key);
-            std::vector<boost::shared_ptr<demoService::filestats_t> > &mediafiles = demo.getFileStats(); 
+            std::vector<std::shared_ptr<demoService::filestats_t> > &mediafiles = demo.getFileStats();
             // std::vector<demoService::filestats_t> mediafiles = demo.getListOfAvailableFiles(key); 
-            std::vector<boost::shared_ptr<demoService::filestats_t> >::iterator it;
+            std::vector<std::shared_ptr<demoService::filestats_t> >::iterator it;
             // Make the top level object
             Element toparr;
             toparr.makeECMAArray();
             
             size_t total_size = 0;
-            vector<boost::shared_ptr<cygnal::Buffer> > buffers;
+            vector<std::shared_ptr<cygnal::Buffer> > buffers;
             for (it=mediafiles.begin(); it<mediafiles.end(); ++it) {
-                vector<boost::shared_ptr<cygnal::Element> > data;
+                vector<std::shared_ptr<cygnal::Element> > data;
                 
-                boost::shared_ptr<demoService::filestats_t> file = *it;
-                boost::shared_ptr<cygnal::Element> obj(new cygnal::Element);
+                std::shared_ptr<demoService::filestats_t> file = *it;
+                std::shared_ptr<cygnal::Element> obj(new cygnal::Element);
                 obj->makeECMAArray();
                 obj->setName(file->name);
                 
-                boost::shared_ptr<cygnal::Element> modified(new cygnal::Element);
+                std::shared_ptr<cygnal::Element> modified(new cygnal::Element);
                 modified->makeString("lastModified", file->last);
                 obj->addProperty(modified);
 
-                boost::shared_ptr<cygnal::Element> name(new cygnal::Element);
+                std::shared_ptr<cygnal::Element> name(new cygnal::Element);
                 name->makeString("name", file->name);
                 obj->addProperty(name);
 
-                boost::shared_ptr<cygnal::Element> size(new cygnal::Element);
+                std::shared_ptr<cygnal::Element> size(new cygnal::Element);
                 size->makeString("size", file->size);
                 obj->addProperty(size);
 
@@ -479,31 +478,31 @@ OflaDemoTest::parseOflaDemoRequest(boost::uint8_t *ptr, size_t size)
                 toparr.addProperty(obj);
             }
             
-            boost::shared_ptr<cygnal::Buffer> topenc = toparr.encode();
+            std::shared_ptr<cygnal::Buffer> topenc = toparr.encode();
             total_size += topenc->allocated();
             
             // Start with the method name for the INVOKE
             cygnal::Element method;
             method.makeString("_result");
-            boost::shared_ptr<cygnal::Buffer> methodenc  = method.encode();
+            std::shared_ptr<cygnal::Buffer> methodenc  = method.encode();
             total_size += methodenc->allocated();
             
             // Add the stream ID
             cygnal::Element sid;
             sid.makeNumber(2); // FIXME: needs a real value!
-            boost::shared_ptr<cygnal::Buffer> sidenc  = sid.encode();
+            std::shared_ptr<cygnal::Buffer> sidenc  = sid.encode();
             total_size += sidenc->allocated();
 
             // There there is always a NULL object to start the data
             Element null;
             null.makeNull();
-            boost::shared_ptr<cygnal::Buffer> encnull  = null.encode();
+            std::shared_ptr<cygnal::Buffer> encnull  = null.encode();
             total_size += encnull->allocated();
 
-            boost::shared_ptr<cygnal::Buffer> result(new cygnal::Buffer(total_size+cygnal::AMF_HEADER_SIZE+RTMP_MAX_HEADER_SIZE+10));            
+            std::shared_ptr<cygnal::Buffer> result(new cygnal::Buffer(total_size+cygnal::AMF_HEADER_SIZE+RTMP_MAX_HEADER_SIZE+10));
             _response.reset(new cygnal::Buffer(total_size+cygnal::AMF_HEADER_SIZE+RTMP_MAX_HEADER_SIZE+10));
 #if 0
-            boost::shared_ptr<cygnal::Buffer> head = encodeHeader(0x3,
+            std::shared_ptr<cygnal::Buffer> head = encodeHeader(0x3,
 			    RTMP::HEADER_8, total_size,
 			    RTMP::INVOKE, RTMPMsg::FROM_SERVER);
             *result = head;
@@ -515,11 +514,11 @@ OflaDemoTest::parseOflaDemoRequest(boost::uint8_t *ptr, size_t size)
 
 #if 0
             // Followed by all the encoded objects and properties
-            vector<boost::shared_ptr<cygnal::Buffer> >::iterator rit;
+            vector<std::shared_ptr<cygnal::Buffer> >::iterator rit;
             for (rit=buffers.begin(); rit<buffers.end(); ++rit) {
-                boost::shared_ptr<cygnal::Buffer> buf = *rit;
+                std::shared_ptr<cygnal::Buffer> buf = *rit;
                 *_response += buf;
-                std::vector<boost::shared_ptr<cygnal::Element> > data1;
+                std::vector<std::shared_ptr<cygnal::Element> > data1;
             }
 #endif
         }
@@ -534,11 +533,11 @@ OflaDemoTest::parseOflaDemoRequest(boost::uint8_t *ptr, size_t size)
 // is only used for testing by developers. The format appears to be
 // a string '_result', followed by the number of the test, and then two
 // NULL objects.
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 OflaDemoTest::formatOflaDemoResponse(double num, cygnal::Element &el)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> data = cygnal::AMF::encodeElement(el);
+    std::shared_ptr<cygnal::Buffer> data = cygnal::AMF::encodeElement(el);
     if (data) {
 	return formatOflaDemoResponse(num, data->reference(), data->allocated());
     } else {
@@ -549,15 +548,15 @@ OflaDemoTest::formatOflaDemoResponse(double num, cygnal::Element &el)
     return data;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 OflaDemoTest::formatOflaDemoResponse(double num, cygnal::Buffer &data)
 {
 //    GNASH_REPORT_FUNCTION;
     return formatOflaDemoResponse(num, data.reference(), data.allocated());
 }
 
-boost::shared_ptr<cygnal::Buffer>
-OflaDemoTest::formatOflaDemoResponse(double num, boost::uint8_t *data, size_t size)
+std::shared_ptr<cygnal::Buffer>
+OflaDemoTest::formatOflaDemoResponse(double num, std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
@@ -571,11 +570,11 @@ OflaDemoTest::formatOflaDemoResponse(double num, boost::uint8_t *data, size_t si
     Element null;
     null.makeNull();
 
-    boost::shared_ptr<cygnal::Buffer> encoflaDemo = oflaDemo.encode();
-    boost::shared_ptr<cygnal::Buffer> encidx  = index.encode();   
-    boost::shared_ptr<cygnal::Buffer> encnull  = null.encode();   
+    std::shared_ptr<cygnal::Buffer> encoflaDemo = oflaDemo.encode();
+    std::shared_ptr<cygnal::Buffer> encidx  = index.encode();
+    std::shared_ptr<cygnal::Buffer> encnull  = null.encode();
 
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(encoflaDemo->size()
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(encoflaDemo->size()
 						       + encidx->size()
 						       + encnull->size() + size));
 
diff --git a/cygnal/cgi-bin/oflaDemo/oflaDemo.h b/cygnal/cgi-bin/oflaDemo/oflaDemo.h
index 04fd03b..17c960e 100644
--- a/cygnal/cgi-bin/oflaDemo/oflaDemo.h
+++ b/cygnal/cgi-bin/oflaDemo/oflaDemo.h
@@ -21,9 +21,6 @@
 
 #include <string>
 #include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
 #include <sstream>
 
 // gnash headers
@@ -54,16 +51,16 @@ public:
     ~demoService();
 
     /// return the list of FLV files we've found
-    std::vector<boost::shared_ptr<filestats_t> > &getListOfAvailableFiles(const std::string &path);
+    std::vector<std::shared_ptr<filestats_t> > &getListOfAvailableFiles(const std::string &path);
 
     /// return the list of FLV files we've found of the specified type
-    std::vector<boost::shared_ptr<filestats_t> > &getListOfAvailableFiles(const std::string &path,
+    std::vector<std::shared_ptr<filestats_t> > &getListOfAvailableFiles(const std::string &path,
 									  const std::string &type);
-    std::vector<boost::shared_ptr<filestats_t> > &getFileStats() { return _stats; };
+    std::vector<std::shared_ptr<filestats_t> > &getFileStats() { return _stats; };
     
 private:
     std::string				_path;
-    std::vector<boost::shared_ptr<filestats_t> >	_stats;
+    std::vector<std::shared_ptr<filestats_t> >	_stats;
 };
     
 class OflaDemoTest : public cygnal::RTMPServer
@@ -73,39 +70,39 @@ public:
     ~OflaDemoTest ();
   
     // Parse an OflaDemo Request message coming from the Red5 oflaDemo_test.
-    std::vector<boost::shared_ptr<cygnal::Element > > parseOflaDemoRequest(cygnal::Buffer &buf)
+    std::vector<std::shared_ptr<cygnal::Element > > parseOflaDemoRequest(cygnal::Buffer &buf)
         { return parseOflaDemoRequest(buf.reference(), buf.size()); };
-    std::vector<boost::shared_ptr<cygnal::Element > > parseOflaDemoRequest(boost::uint8_t *buf, size_t size);
+    std::vector<std::shared_ptr<cygnal::Element > > parseOflaDemoRequest(std::uint8_t *buf, size_t size);
     
     // format a response to the 'oflaDemo' test used for testing Gnash.
-    boost::shared_ptr<cygnal::Buffer> formatOflaDemoResponse(double num, cygnal::Element &el);
-    boost::shared_ptr<cygnal::Buffer> formatOflaDemoResponse(double num, cygnal::Buffer &data);
-    boost::shared_ptr<cygnal::Buffer> formatOflaDemoResponse(double num, boost::uint8_t *data, size_t size);
+    std::shared_ptr<cygnal::Buffer> formatOflaDemoResponse(double num, cygnal::Element &el);
+    std::shared_ptr<cygnal::Buffer> formatOflaDemoResponse(double num, cygnal::Buffer &data);
+    std::shared_ptr<cygnal::Buffer> formatOflaDemoResponse(double num, std::uint8_t *data, size_t size);
 
-    boost::shared_ptr<cygnal::Buffer> getResponse() { return _response; };
-    void setResponse(boost::shared_ptr<cygnal::Buffer> &x) { _response = x; };
+    std::shared_ptr<cygnal::Buffer> getResponse() { return _response; };
+    void setResponse(std::shared_ptr<cygnal::Buffer> &x) { _response = x; };
     
     void setNetConnection(gnash::RTMPMsg *msg) { _netconnect.reset(msg); };
-    void setNetConnection(boost::shared_ptr<gnash::RTMPMsg> msg) { _netconnect = msg; };
-    boost::shared_ptr<gnash::RTMPMsg> getNetConnection() { return _netconnect;};
+    void setNetConnection(std::shared_ptr<gnash::RTMPMsg> msg) { _netconnect = msg; };
+    std::shared_ptr<gnash::RTMPMsg> getNetConnection() { return _netconnect;};
 
     /// \var _netconnect
     ///    This store the data from the NetConnection ActionScript
     ///    object we get as the final part of the handshake process
     ///    that is used to set up the connection. This has all the
     ///    file paths and other information needed by the server.
-    boost::shared_ptr<gnash::RTMPMsg>	_netconnect;
+    std::shared_ptr<gnash::RTMPMsg>	_netconnect;
 private:
-    boost::shared_ptr<cygnal::Buffer> _response;
-    boost::shared_ptr<Handler::cygnal_init_t> _info;
+    std::shared_ptr<cygnal::Buffer> _response;
+    std::shared_ptr<Handler::cygnal_init_t> _info;
 }; 
 
 // the standard API
 extern "C" {
-    boost::shared_ptr<Handler::cygnal_init_t>oflaDemo_init_func(boost::shared_ptr<gnash::RTMPMsg> &msg);
+    std::shared_ptr<Handler::cygnal_init_t>oflaDemo_init_func(std::shared_ptr<gnash::RTMPMsg> &msg);
     
-    boost::shared_ptr<cygnal::Buffer> oflaDemo_read_func();
-    size_t oflaDemo_write_func(boost::uint8_t *data, size_t size);
+    std::shared_ptr<cygnal::Buffer> oflaDemo_read_func();
+    size_t oflaDemo_write_func(std::uint8_t *data, size_t size);
 }
 
 } // end of cygnal namespace
diff --git a/cygnal/crc.cpp b/cygnal/crc.cpp
index 1464e7b..2fb53d7 100644
--- a/cygnal/crc.cpp
+++ b/cygnal/crc.cpp
@@ -34,7 +34,7 @@
 #include <sys/types.h>
 #include "GnashSystemIOHeaders.h" // for getuid()
 #include <sys/stat.h>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include <cctype>  // for toupper
 #include <string>
diff --git a/cygnal/cvm.cpp b/cygnal/cvm.cpp
index 4186179..6293444 100644
--- a/cygnal/cvm.cpp
+++ b/cygnal/cvm.cpp
@@ -333,10 +333,10 @@ vm_main(int argc, char *argv[])
 
 
 #ifdef USE_FFMPEG
-    std::auto_ptr<media::MediaHandler> handler(
+    std::unique_ptr<media::MediaHandler> handler(
             new gnash::media::ffmpeg::MediaHandlerFfmpeg() );
 #elif defined(USE_GST)
-    std::auto_ptr<media::MediaHandler> handler(
+    std::unique_ptr<media::MediaHandler> handler(
             new gnash::media::gst::MediaHandlerGst() );
 #else
     std::cerr << "Neither SOUND_SDL nor SOUND_GST defined" << std::endl;
@@ -344,7 +344,7 @@ vm_main(int argc, char *argv[])
 #endif
     gnash::media::MediaHandler::set(handler);
 
-    boost::shared_ptr<sound::sound_handler> soundHandler(
+    std::shared_ptr<sound::sound_handler> soundHandler(
             new sound::NullSoundHandler());
 
     std::vector<movie_data>	data;
@@ -394,7 +394,7 @@ play_movie(const std::string& filename, const RunResources& runResources)
 
     try {
       if (filename == "-") {
-         std::auto_ptr<IOChannel> in (
+         std::unique_ptr<IOChannel> in (
                  noseek_fd_adapter::make_stream(fileno(stdin)) );
          md = gnash::MovieFactory::makeMovie(in, filename, runResources, false);
       } else {
diff --git a/cygnal/cygnal.cpp b/cygnal/cygnal.cpp
index 320e278..c9e9399 100644
--- a/cygnal/cygnal.cpp
+++ b/cygnal/cygnal.cpp
@@ -34,6 +34,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <functional>
+#include <mutex>
+#include <condition_variable>
 
 #include "GnashSleep.h"
 #include "revno.h"
@@ -51,7 +54,6 @@ extern "C"{
 #endif
 }
 
-#include <boost/shared_ptr.hpp>
 
 // classes internal to Gnash
 #include "network.h"
@@ -89,11 +91,6 @@ extern "C"{
 //#include <boost/date_time/local_time/local_time.hpp>
 #include <boost/date_time/time_zone_base.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/thread/thread.hpp>
-#include <boost/bind.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/condition.hpp>
-#include <boost/thread/tss.hpp>
 
 #ifndef POLLRDHUP
 #define POLLRDHUP 0
@@ -166,11 +163,11 @@ static Cache& cache = Cache::getDefaultInstance();
 //static std::map<std::string, Proc> procs; // = proc::getDefaultInstance();
 
 // This mutex is used to signify when all the threads are done.
-static boost::condition	alldone;
-static boost::mutex	alldone_mutex;
+static std::condition_variable	alldone;
+static std::mutex		alldone_mutex;
 
-static boost::condition	noclients;
-static boost::mutex	noclients_mutex;
+static std::condition_variable	noclients;
+static std::mutex		noclients_mutex;
 
 const char *proto_str[] = {
     "NONE",
@@ -305,7 +302,7 @@ Cygnal::loadPeersFile(const std::string &filespec)
         }
 
 	// Create a new peer item
-	boost::shared_ptr<peer_t> peer(new Cygnal::peer_t);
+	std::shared_ptr<peer_t> peer(new Cygnal::peer_t);
 	peer->hostname = host;
 	peer->port = strtol(portstr.c_str(), NULL, 0) & 0xffff;
 
@@ -350,14 +347,14 @@ Cygnal::probePeers(peer_t &peer)
 }
 
 void
-Cygnal::probePeers(std::vector<boost::shared_ptr<peer_t> > &peers)
+Cygnal::probePeers(std::vector<std::shared_ptr<peer_t> > &peers)
 {
 //     GNASH_REPORT_FUNCTION;
 
 // 	createClient();
-    std::vector<boost::shared_ptr<Cygnal::peer_t> >::iterator it;
+    std::vector<std::shared_ptr<Cygnal::peer_t> >::iterator it;
     for (it = peers.begin(); it != peers.end(); ++it) {
-	boost::shared_ptr<Cygnal::peer_t> peer = *it;
+	std::shared_ptr<Cygnal::peer_t> peer = *it;
 	probePeers(*peer);
 	if (peer->connected) {
 	    log_network(_("%s is active on fd #%d."), peer->hostname,
@@ -371,20 +368,20 @@ void
 Cygnal::removeHandler(const std::string &path)
 {
 //     GNASH_REPORT_FUNCTION;
-    map<std::string, boost::shared_ptr<Handler> >::iterator it;
+    map<std::string, std::shared_ptr<Handler> >::iterator it;
     it = _handlers.find(path);
     if (it != _handlers.end()) {
-	boost::mutex::scoped_lock lock(_mutex);
+	std::lock_guard<std::mutex> lock(_mutex);
 	_handlers.erase(it);
     }
 }
 
-boost::shared_ptr<Handler>
+std::shared_ptr<Handler>
 Cygnal::findHandler(const std::string &path)
 {
 //     GNASH_REPORT_FUNCTION;
-    map<std::string, boost::shared_ptr<Handler> >::iterator it;
-    boost::shared_ptr<Handler> hand;
+    map<std::string, std::shared_ptr<Handler> >::iterator it;
+    std::shared_ptr<Handler> hand;
     it = _handlers.find(path);
     if (it != _handlers.end()) {
 	hand = (*it).second;
@@ -396,7 +393,7 @@ Cygnal::findHandler(const std::string &path)
 void
 Cygnal::dump()
 {
-    std::vector<boost::shared_ptr<Cygnal::peer_t> >::iterator it;
+    std::vector<std::shared_ptr<Cygnal::peer_t> >::iterator it;
     for (it = _peers.begin(); it != _peers.end(); ++it) {
 	cerr << "Remote Peer: " << (*it)->hostname
 	     << ":" << (*it)->port << endl;
@@ -529,7 +526,7 @@ main(int argc, char *argv[])
 
     // Lock a mutex the main() waits in before exiting. This is
     // because all the actually processing is done by other threads.
-    boost::mutex::scoped_lock lk(alldone_mutex);
+    std::unique_lock<std::mutex> lk(alldone_mutex);
     
     // Start the Admin handler. This allows one to connect to Cygnal
     // at port 1111 and dump statistics to the terminal for tuning
@@ -537,7 +534,7 @@ main(int argc, char *argv[])
     if (admin) {
 	Network::thread_params_t admin_data;
 	admin_data.port = gnash::ADMIN_PORT;
-	boost::thread admin_thread(boost::bind(&admin_handler, &admin_data));
+	std::thread admin_thread(std::bind(&admin_handler, &admin_data));
     }
 
 //    Cvm cvm;
@@ -567,7 +564,7 @@ main(int argc, char *argv[])
 	http_data->port = port_offset + gnash::HTTP_PORT;
         http_data->hostname = hostname;
 	if (crcfile.getThreadingFlag()) {
-	    boost::thread http_thread(boost::bind(&connection_handler, http_data));
+	    std::thread http_thread(std::bind(&connection_handler, http_data));
 	} else {
 	    connection_handler(http_data);
 	}
@@ -585,7 +582,7 @@ main(int argc, char *argv[])
 	rtmp_data->port = port_offset + gnash::RTMP_PORT;
         rtmp_data->hostname = hostname;
 	if (crcfile.getThreadingFlag()) {
-	    boost::thread rtmp_thread(boost::bind(&connection_handler, rtmp_data));
+	    std::thread rtmp_thread(std::bind(&connection_handler, rtmp_data));
 	} else {
 	    connection_handler(rtmp_data);
 	}
@@ -846,11 +843,11 @@ connection_handler(Network::thread_params_t *args)
 	    hargs->protocol = args->protocol;
 	    hargs->netfd = args->netfd;
 #if 0
-	    boost::shared_ptr<Handler> hand = cyg.findHandler(path);
+	    std::shared_ptr<Handler> hand = cyg.findHandler(path);
 	    HTTPServer *http = new HTTPServer;
 	    hargs.entry = http;
 	    http->setDocRoot(crcfile.getDocumentRoot());
-	    boost::shared_ptr<cygnal::Buffer> buf(http->peekChunk());
+	    std::shared_ptr<cygnal::Buffer> buf(http->peekChunk());
 	    http->processHeaderFields(*buf);
 	    string hostname, path;
 	    string::size_type pos = http->getField("host").find(":", 0);
@@ -889,9 +886,9 @@ connection_handler(Network::thread_params_t *args)
 		// If in multi-threaded mode (the default), start a thread
 		// with a connection_handler for each port we're interested
 		// in. Each port of could have a different protocol.
-		boost::bind(event_handler, hargs);
+		std::bind(event_handler, hargs);
 		if (crcfile.getThreadingFlag() == true) {
-		    boost::thread event_thread(boost::bind(&event_handler, hargs));
+		    std::thread event_thread(std::bind(&event_handler, hargs));
 		} else {
 		    event_handler(hargs);
 		    // We're done, close this network connection
@@ -912,7 +909,7 @@ connection_handler(Network::thread_params_t *args)
 	    rargs->protocol = args->protocol;
 	    rargs->netfd = args->netfd;
 	    RTMPServer *rtmp = new RTMPServer;
-	    boost::shared_ptr<cygnal::Element> tcurl = 
+	    std::shared_ptr<cygnal::Element> tcurl =
 		rtmp->processClientHandShake(args->netfd);
 	    if (!tcurl) {
 // 		    log_error("Couldn't read the tcUrl variable!");
@@ -921,7 +918,7 @@ connection_handler(Network::thread_params_t *args)
 	    }
 	    URL url(tcurl->to_string());
 	    string key = url.hostname() + url.path();
-	    boost::shared_ptr<Handler> hand = cyg.findHandler(url.path());
+	    std::shared_ptr<Handler> hand = cyg.findHandler(url.path());
 	    if (!hand) {
 		log_network(_("Creating new %s Handler for: %s for fd %#d"),
 			    proto_str[args->protocol], key, args->netfd);
@@ -929,8 +926,8 @@ connection_handler(Network::thread_params_t *args)
 		cyg.addHandler(key, hand);
 		rargs->entry = rtmp;
 		hand->setNetConnection(rtmp->getNetConnection());
-		std::vector<boost::shared_ptr<Cygnal::peer_t> >::iterator it;
-		std::vector<boost::shared_ptr<Cygnal::peer_t> > active = cyg.getActive();
+		std::vector<std::shared_ptr<Cygnal::peer_t> >::iterator it;
+		std::vector<std::shared_ptr<Cygnal::peer_t> > active = cyg.getActive();
 		for (it = active.begin(); it < active.end(); ++it) {
 		    Cygnal::peer_t *peer = (*it).get();
 		    hand->addRemote(peer->fd);
@@ -952,7 +949,7 @@ connection_handler(Network::thread_params_t *args)
 		    cgiroot = PLUGINSDIR;
 		}
 		hand->scanDir(cgiroot);
-		boost::shared_ptr<Handler::cygnal_init_t> init = 
+		std::shared_ptr<Handler::cygnal_init_t> init =
 		    hand->initModule(url.path());
 		
 		// this is where the real work gets done.
@@ -961,7 +958,7 @@ connection_handler(Network::thread_params_t *args)
 		    // with a connection_handler for each port we're interested
 		    // in. Each port of course has a different protocol.
 		    if (crcfile.getThreadingFlag() == true) {
-			boost::thread event_thread(boost::bind(&event_handler, args));
+			std::thread event_thread(std::bind(&event_handler, args));
 		    } else {
 			event_handler(args);
 			// We're done, close this network connection
@@ -1045,7 +1042,7 @@ event_handler(Network::thread_params_t *args)
 	    // hand->dump();
 	}
 #if 0
-	boost::shared_ptr<DiskStream> filestream(cache.findFile(args->filespec));
+	std::shared_ptr<DiskStream> filestream(cache.findFile(args->filespec));
 	if (filestream) {
 	    filestream->dump();
 	}
@@ -1053,7 +1050,7 @@ event_handler(Network::thread_params_t *args)
 //      	cache.dump();
 #endif
 	//hand->dump();
-	boost::shared_ptr<DiskStream> ds;
+	std::shared_ptr<DiskStream> ds;
 	for (int i=1; i <= hand->getActiveDiskStreams(); i++) {
 	    ds = hand->getDiskStream(i);
 	    if (ds) {
@@ -1090,7 +1087,7 @@ event_handler(Network::thread_params_t *args)
 		  {
 		      largs.netfd = i;
 		      // largs.filespec = fullpath;
-		      boost::shared_ptr<HTTPServer> &http = hand->getHTTPHandler(i);
+		      std::shared_ptr<HTTPServer> &http = hand->getHTTPHandler(i);
 		      if (!http->http_handler(hand, args->netfd, args->buffer)) {
 			  log_network(_("Done with HTTP connection for fd #%d, CGI %s"), i, args->filespec);
 			  net.closeNet(args->netfd);
@@ -1114,7 +1111,7 @@ event_handler(Network::thread_params_t *args)
 		  {
 		      net.setTimeout(timeout);
 		      args->netfd = i;
-		      boost::shared_ptr<HTTPServer> &http = hand->getHTTPHandler(i);
+		      std::shared_ptr<HTTPServer> &http = hand->getHTTPHandler(i);
 		      // args->filespec = path;
 		      if (!http->http_handler(hand, args->netfd, args->buffer)) {
 			  log_network(_("Done with HTTP connection for fd #%d, CGI %s"), i, largs.filespec);
@@ -1126,7 +1123,7 @@ event_handler(Network::thread_params_t *args)
 		  {
 		      args->netfd = i;
 		      // args->filespec = path;
-		      boost::shared_ptr<HTTPServer> &http = hand->getHTTPHandler(i);
+		      std::shared_ptr<HTTPServer> &http = hand->getHTTPHandler(i);
 		      if (!http->http_handler(hand, args->netfd, args->buffer)) {
 			  log_network(_("Done with HTTP connection for fd #%d, CGI %s"), i, args->filespec);
 			  return;
diff --git a/cygnal/cygnal.h b/cygnal/cygnal.h
index 7640556..f310cee 100644
--- a/cygnal/cygnal.h
+++ b/cygnal/cygnal.h
@@ -19,9 +19,8 @@
 #ifndef __CYGNAL_H__
 #define __CYGNAL_H__
 
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/thread.hpp>
+#include <cstdint>
+#include <thread>
 #include <vector>
 #include <string>
 #include <map>
@@ -59,29 +58,29 @@ public:
 
     void probePeers();
     void probePeers(peer_t &peer);
-    void probePeers(boost::shared_ptr<peer_t> peer);
-    void probePeers(std::vector<boost::shared_ptr<peer_t> > &peers);
+    void probePeers(std::shared_ptr<peer_t> peer);
+    void probePeers(std::vector<std::shared_ptr<peer_t> > &peers);
 
-    void addHandler(const std::string &path, boost::shared_ptr<Handler> x) {
+    void addHandler(const std::string &path, std::shared_ptr<Handler> x) {
  	_handlers[path] = x;
     };
 
-    boost::shared_ptr<Handler> findHandler(const std::string &path);
+    std::shared_ptr<Handler> findHandler(const std::string &path);
     void removeHandler(const std::string &path);
 
-    std::vector<boost::shared_ptr<peer_t> > & getActive() { return _active_peers; };
+    std::vector<std::shared_ptr<peer_t> > & getActive() { return _active_peers; };
 
     void dump();
 
 private:
-    void addPeer(boost::shared_ptr<peer_t> x) {
+    void addPeer(std::shared_ptr<peer_t> x) {
  	_peers.push_back(x);
     };
 
-    std::vector<boost::shared_ptr<peer_t> > _peers;
-    std::vector<boost::shared_ptr<peer_t> > _active_peers;
-    std::map<std::string, boost::shared_ptr<Handler> > _handlers;
-    boost::mutex _mutex;
+    std::vector<std::shared_ptr<peer_t> > _peers;
+    std::vector<std::shared_ptr<peer_t> > _active_peers;
+    std::map<std::string, std::shared_ptr<Handler> > _handlers;
+    std::mutex _mutex;
 };
 
 /// \class cygnal::ThreadCounter of threads currently
@@ -92,13 +91,13 @@ class ThreadCounter
 public:
 
     ThreadCounter() : _tids(0) {};
-    void increment() { boost::mutex::scoped_lock lk(_tid_mutex); ++_tids; };
-    void decrement() { boost::mutex::scoped_lock lk(_tid_mutex); --_tids; };
+    void increment() { std::lock_guard<std::mutex> lk(_tid_mutex); ++_tids; };
+    void decrement() { std::lock_guard<std::mutex> lk(_tid_mutex); --_tids; };
     int num_of_tids() { return _tids; };
 private:
-    boost::mutex  _tid_mutex;
+    std::mutex  _tid_mutex;
     int           _tids;
-    boost::thread _tid_handle;
+    std::thread _tid_handle;
 };
   
 // End of gnash namespace 
diff --git a/cygnal/handler.cpp b/cygnal/handler.cpp
index 4ec0a27..d1abec7 100644
--- a/cygnal/handler.cpp
+++ b/cygnal/handler.cpp
@@ -20,12 +20,9 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/thread/thread.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/bind.hpp>
+#include <mutex>
+#include <memory>
+#include <functional>
 #include <algorithm>
 #include <string>
 #include <deque>
@@ -99,7 +96,7 @@ Handler::addClient(int fd, Network::protocols_supported_e proto)
 {
     // GNASH_REPORT_FUNCTION;
 
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     
     log_debug("Adding %d to the client array.", fd);
     switch (proto) {
@@ -107,7 +104,7 @@ Handler::addClient(int fd, Network::protocols_supported_e proto)
 	  break;
       case Network::HTTP:
       {
-	  boost::shared_ptr<HTTPServer> http(new HTTPServer);
+	  std::shared_ptr<HTTPServer> http(new HTTPServer);
 	  _http[fd] = http;
 	  break;
       }
@@ -115,7 +112,7 @@ Handler::addClient(int fd, Network::protocols_supported_e proto)
 	  break;
       case Network::RTMP:
       {
-	  boost::shared_ptr<RTMPServer> rtmp(new RTMPServer);
+	  std::shared_ptr<RTMPServer> rtmp(new RTMPServer);
 	  _rtmp[fd] = rtmp;
 	  break;
       }
@@ -145,7 +142,7 @@ Handler::parseFirstRequest(int fd, gnash::Network::protocols_supported_e proto)
     string key;
     Network net;
     cygnal::Buffer *buf = 0;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     
     switch (proto) {
       case Network::NONE:
@@ -222,7 +219,7 @@ int
 Handler::recvMsg(int fd)
 {
     // GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
     switch (_protocol[fd]) {
       case Network::NONE:
@@ -253,7 +250,7 @@ Handler::removeClient(int x)
 {
     // GNASH_REPORT_FUNCTION;
 
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
     vector<int>::iterator it;
     for (it = _clients.begin(); it < _clients.end(); ++it) {
@@ -265,7 +262,7 @@ Handler::removeClient(int x)
 }
 
 void 
-Handler::setPlugin(boost::shared_ptr<Handler::cygnal_init_t> &/* init */)
+Handler::setPlugin(std::shared_ptr<Handler::cygnal_init_t> &/* init */)
 {
 //    GNASH_REPORT_FUNCTION;
 //     _plugin.reset(init.get());
@@ -279,7 +276,7 @@ Handler::setPlugin(Handler::cygnal_io_read_t /* read_ptr */, Handler::cygnal_io_
     _plugin.reset(new Handler::cygnal_init_t);
 }
 
-boost::shared_ptr<Handler::cygnal_init_t>
+std::shared_ptr<Handler::cygnal_init_t>
 Handler::initModule(const std::string& str)
 {
     // GNASH_REPORT_FUNCTION;
@@ -318,7 +315,7 @@ Handler::initModule(const std::string& str)
     if (!init_symptr) {
 	log_network(_("No %s symbol in plugin"), symbol);
     } else {
-	boost::shared_ptr<cygnal_init_t> info = init_symptr(_netconnect);
+	std::shared_ptr<cygnal_init_t> info = init_symptr(_netconnect);
 	log_network(_("Initialized Plugin: \"%s\": %s"), info->version,
 		    info->description);
     }
@@ -358,7 +355,7 @@ Handler::initModule(const std::string& str)
 }
 
 size_t
-Handler::writeToPlugin(boost::uint8_t *data, size_t size)
+Handler::writeToPlugin(std::uint8_t *data, size_t size)
 {
     // GNASH_REPORT_FUNCTION;
     size_t ret = 0;
@@ -369,12 +366,12 @@ Handler::writeToPlugin(boost::uint8_t *data, size_t size)
     return ret;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 Handler::readFromPlugin()
 {
     // GNASH_REPORT_FUNCTION;
 
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     if (_plugin) {
 	buf = _plugin->read_func();
     }
@@ -398,7 +395,7 @@ Handler::initialized()
 }
 
 // Find a stream in the vector or Disk Streams
-boost::shared_ptr<gnash::DiskStream>
+std::shared_ptr<gnash::DiskStream>
 Handler::findStream(const std::string &filespec)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -454,7 +451,7 @@ Handler::playStream(const std::string &filespec)
 {
     GNASH_REPORT_FUNCTION;
 
-    boost::shared_ptr<gnash::DiskStream> ds = _diskstreams[_streams];
+    std::shared_ptr<gnash::DiskStream> ds = _diskstreams[_streams];
 
     string fullpath = crcfile.getDocumentRoot();
     fullpath += "/";
@@ -599,7 +596,7 @@ Handler::dump()
 
     cerr << "Currently there are " << dec <<_diskstreams.size() << " DiskStreams."
 	 << endl;
-    map<int, boost::shared_ptr<DiskStream> >::iterator it;
+    map<int, std::shared_ptr<DiskStream> >::iterator it;
     for (it = _diskstreams.begin(); it != _diskstreams.end(); ++it) {
 	if (it->second) {
 	    cerr << "DiskStream for fd #" << dec << it->first << endl;
diff --git a/cygnal/handler.h b/cygnal/handler.h
index 6154e75..29c84b1 100644
--- a/cygnal/handler.h
+++ b/cygnal/handler.h
@@ -20,12 +20,9 @@
 #define __HANDLER_H__ 1
 
 #include <map>
-#include <boost/cstdint.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_ptr.hpp>
-//#include <boost/thread/condition.hpp>
+#include <cstdint>
+#include <mutex>
+#include <memory>
 
 #include <vector>
 #include <string>
@@ -90,8 +87,8 @@ public:
     } pub_stream_e;
     /// This typedef is only used for the io function that must be
     /// supported by the plugin.
-    typedef size_t (*cygnal_io_write_t)(boost::uint8_t *data, size_t size);
-    typedef boost::shared_ptr<cygnal::Buffer> (*cygnal_io_read_t)();
+    typedef size_t (*cygnal_io_write_t)(std::uint8_t *data, size_t size);
+    typedef std::shared_ptr<cygnal::Buffer> (*cygnal_io_read_t)();
     typedef struct {
 	std::string version;
 	std::string description;
@@ -104,7 +101,7 @@ public:
     
     /// This typedef is only used for the init function optionally
     /// supported by the plugin.
-    typedef boost::shared_ptr<cygnal_init_t>(*cygnal_io_init_t)(boost::shared_ptr<gnash::RTMPMsg> &msg);
+    typedef std::shared_ptr<cygnal_init_t>(*cygnal_io_init_t)(std::shared_ptr<gnash::RTMPMsg> &msg);
 
     DSOEXPORT Handler();
     ~Handler();
@@ -121,14 +118,14 @@ public:
     // Check the status of active disk streams, which is one less than
     // default as the Streams IDs start at 1.
     int getActiveDiskStreams() { return _diskstreams.size(); }
-    // int removeDiskStream(boost::shared_ptr<DiskStream> x);
+    // int removeDiskStream(std::shared_ptr<DiskStream> x);
     
     // Operate on a disk streaming inprogress
-    boost::shared_ptr<gnash::DiskStream> getDiskStream(int x) { return _diskstreams[x]; }
-    void setDiskStream(int x, boost::shared_ptr<gnash::DiskStream> y) { _diskstreams[x] = y; }
+    std::shared_ptr<gnash::DiskStream> getDiskStream(int x) { return _diskstreams[x]; }
+    void setDiskStream(int x, std::shared_ptr<gnash::DiskStream> y) { _diskstreams[x] = y; }
 
     /// Add a SharedObject
-    void addSOL(boost::shared_ptr<cygnal::Element> x) {
+    void addSOL(std::shared_ptr<cygnal::Element> x) {
 	_sol.push_back(x);
     };
 
@@ -162,24 +159,24 @@ public:
     ///     Add a remote machine to the list for input messages.
     size_t addRemote(int x) { _remote.push_back(x); return _remote.size(); };
 
-    void setPlugin(boost::shared_ptr<Handler::cygnal_init_t> &init);
+    void setPlugin(std::shared_ptr<Handler::cygnal_init_t> &init);
     void setPlugin(Handler::cygnal_io_read_t read_ptr, Handler::cygnal_io_write_t write_ptr );
 
     /// Initialize the named module within Cygnal
     //
-    boost::shared_ptr<cygnal_init_t> initModule(const std::string& module);
+    std::shared_ptr<cygnal_init_t> initModule(const std::string& module);
 
     /// \method initialized
     ///     See if any of the cgi-bins has been loaded.
     bool initialized();
 
     /// This method reads raw data from a plugin.
-    boost::shared_ptr<cygnal::Buffer> readFromPlugin();
+    std::shared_ptr<cygnal::Buffer> readFromPlugin();
 
     /// This method writes raw data to a plugin.
     size_t writeToPlugin(cygnal::Buffer &buf) {
 	return writeToPlugin(buf.begin(), buf.allocated()); };
-    size_t writeToPlugin(boost::uint8_t *data, size_t size);
+    size_t writeToPlugin(std::uint8_t *data, size_t size);
 
     // These methods handle control of the file streaming, and are
     // used by both HTTP and RTMP*
@@ -208,7 +205,7 @@ public:
     int pauseStream(double transid);
 
     // Find a stream in the vector or Disk Streams
-    boost::shared_ptr<gnash::DiskStream> findStream(const std::string &filespec);
+    std::shared_ptr<gnash::DiskStream> findStream(const std::string &filespec);
 
     // Pause the RTMP stream
     int togglePause(double);
@@ -231,13 +228,13 @@ public:
     // and shouldn't really be done here, but we're trying not to
     // break things while refactoring.
     void setNetConnection(gnash::RTMPMsg *msg) { _netconnect.reset(msg); };
-    void setNetConnection(boost::shared_ptr<gnash::RTMPMsg> msg) { _netconnect = msg; };
-    boost::shared_ptr<gnash::RTMPMsg> getNetConnection() { return _netconnect;};
+    void setNetConnection(std::shared_ptr<gnash::RTMPMsg> msg) { _netconnect = msg; };
+    std::shared_ptr<gnash::RTMPMsg> getNetConnection() { return _netconnect;};
 #endif
     
 #if 1
-    boost::shared_ptr<HTTPServer> &getHTTPHandler(int fd)  { return _http[fd]; };
-    boost::shared_ptr<RTMPServer> getRTMPHandler(int fd)  { return _rtmp[fd]; };
+    std::shared_ptr<HTTPServer> &getHTTPHandler(int fd)  { return _http[fd]; };
+    std::shared_ptr<RTMPServer> getRTMPHandler(int fd)  { return _rtmp[fd]; };
 #endif
     
     // Parse the first nessages when starting a new message handler,
@@ -264,15 +261,14 @@ protected:
     /// \var _diskstreams
     ///   This is all the opened disk based files that are currently
     ///   being streamed by the server.
-    //    boost::shared_array<gnash::DiskStream> _diskstreams;
-    std::map<int, boost::shared_ptr<gnash::DiskStream> > _diskstreams;
+    std::map<int, std::shared_ptr<gnash::DiskStream> > _diskstreams;
     /// \var _protocol
     ///    this is the map of which protocol is being used by which
     ///    file descriptor.
     std::map<int, gnash::Network::protocols_supported_e> _protocol;
 #if 1
-    std::map<int, boost::shared_ptr<HTTPServer> > _http;
-    std::map<int, boost::shared_ptr<RTMPServer> > _rtmp;
+    std::map<int, std::shared_ptr<HTTPServer> > _http;
+    std::map<int, std::shared_ptr<RTMPServer> > _rtmp;
 #endif
     /// \var _clients
     ///	    is the array of all clients connected to this server for
@@ -286,16 +282,16 @@ protected:
     /// \var _local
     ///    These are local process we're responsible for
     ///    starting and stopping.
-    boost::shared_ptr<cygnal::Proc>	_local;
+    std::shared_ptr<cygnal::Proc>	_local;
     /// \var _plugins
     ///	    is for the dynamically loaded applications
-    boost::shared_ptr<cygnal_init_t>	_plugin;
+    std::shared_ptr<cygnal_init_t>	_plugin;
     /// \var _file
     ///	    is for disk based files
-    std::vector<boost::shared_ptr<gnash::DiskStream> > _files;
+    std::vector<std::shared_ptr<gnash::DiskStream> > _files;
     /// \var _sol
     ///	    is for remote SharedObjects
-    std::vector<boost::shared_ptr<cygnal::Element> > _sol;
+    std::vector<std::shared_ptr<cygnal::Element> > _sol;
     ///var _bodysize;
     ///     is to store the body size of the previous packet for this
     ///     channel. 4 and 1 byte heades don't use the length field,
@@ -317,15 +313,15 @@ protected:
     ///    object we get as the final part of the handshake process
     ///    that is used to set up the connection. This has all the
     ///    file paths and other information needed by the server.
-    boost::shared_ptr<gnash::RTMPMsg>	_netconnect;
+    std::shared_ptr<gnash::RTMPMsg>	_netconnect;
 #endif
 
     std::map<int, std::string> _keys;
 private:    
-    boost::mutex			_mutex;
+    std::mutex			_mutex;
     
 // Remote Shared Objects. References are an index into this vector.
-//    std::map<std::string, boost::shared_ptr<handler_t> > _handlers;
+//    std::map<std::string, std::shared_ptr<handler_t> > _handlers;
 };
 
 } // end of gnash namespace
diff --git a/cygnal/http_server.cpp b/cygnal/http_server.cpp
index fde1cb8..7b5f84a 100644
--- a/cygnal/http_server.cpp
+++ b/cygnal/http_server.cpp
@@ -22,10 +22,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
+#include <mutex>
 #include <boost/tokenizer.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/date_time/gregorian/gregorian.hpp>
@@ -66,7 +63,7 @@
 using namespace gnash;
 using namespace std;
 
-static boost::mutex stl_mutex;
+static std::mutex stl_mutex;
 
 namespace cygnal
 {
@@ -145,7 +142,7 @@ HTTPServer::processClientRequest(Handler *hand, int fd, cygnal::Buffer *buf)
     string url = _docroot + _filespec;
     
     // See if the file is in the cache and already opened.
-    boost::shared_ptr<DiskStream> filestream(cache.findFile(_filespec));
+    std::shared_ptr<DiskStream> filestream(cache.findFile(_filespec));
     if (filestream) {
 	log_debug("FIXME: found filestream %s in cache!", _filespec);
 	filestream->dump();
@@ -188,7 +185,7 @@ HTTPServer::processGetRequest(Handler *hand, int fd, cygnal::Buffer *buf)
 //    cerr << "YYYYYYY: " << (char *)buf->reference() << endl;
 //    cerr << hexify(buf->reference(), buf->allocated(), false) << endl;
     
-    if (buf == 0) {
+    if (buf == nullptr) {
      //	log_debug("Queue empty, net connection dropped for fd #%d", getFileFd());
 	log_debug("Queue empty, net connection dropped for fd #%d", fd);
 //	cygnal::Buffer buf;
@@ -202,7 +199,7 @@ HTTPServer::processGetRequest(Handler *hand, int fd, cygnal::Buffer *buf)
     
     string url = _docroot + _filespec;
 
-    boost::shared_ptr<DiskStream> ds = hand->getDiskStream(fd);
+    std::shared_ptr<DiskStream> ds = hand->getDiskStream(fd);
     if (ds) {
 	_diskstream = ds;
     }
@@ -271,21 +268,21 @@ HTTPServer::processGetRequest(Handler *hand, int fd, cygnal::Buffer *buf)
 // A POST request asks sends a data from the client to the server. After processing
 // the header like we normally do, we then read the amount of bytes specified by
 // the "content-length" field, and then write that data to disk, or decode the amf.
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 HTTPServer::processPostRequest(int fd, cygnal::Buffer * /* bufFIXME */)
 {
     GNASH_REPORT_FUNCTION;
 
 //    cerr << "QUE1 = " << _que.size() << endl;
 
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     
     if (_que.size() == 0) {
 	return buf;
     }
     
     buf = _que.pop();
-    if (buf == 0) {
+    if (buf == nullptr) {
 	log_debug("Queue empty, net connection dropped for fd #%d",
 		  getFileFd());
 	return buf;
@@ -293,9 +290,9 @@ HTTPServer::processPostRequest(int fd, cygnal::Buffer * /* bufFIXME */)
 //    cerr << __FUNCTION__ << buf->allocated() << " : " << hexify(buf->reference(), buf->allocated(), true) << endl;
     
     clearHeader();
-    boost::uint8_t *data = processHeaderFields(buf.get());
-    size_t length = strtol(getField("content-length").c_str(), NULL, 0);
-    boost::shared_ptr<cygnal::Buffer> content(new cygnal::Buffer(length));
+    std::uint8_t *data = processHeaderFields(buf.get());
+    size_t length = strtol(getField("content-length").c_str(), nullptr, 0);
+    std::shared_ptr<cygnal::Buffer> content(new cygnal::Buffer(length));
     int ret = 0;
     if (buf->allocated() - (data - buf->reference()) ) {
 //	cerr << "Don't need to read more data: have " << buf->allocated() << " bytes" << endl;
@@ -321,7 +318,7 @@ HTTPServer::processPostRequest(int fd, cygnal::Buffer * /* bufFIXME */)
 	log_debug("Got AMF data in POST");
 #if 0
 	amf::AMF amf;
-	boost::shared_ptr<cygnal::Element> el = amf.extractAMF(content.reference(), content.end());
+	std::shared_ptr<cygnal::Element> el = amf.extractAMF(content.reference(), content.end());
 	el->dump();		// FIXME: do something intelligent
 				// with this Element
 #endif
@@ -342,13 +339,13 @@ HTTPServer::processPostRequest(int fd, cygnal::Buffer * /* bufFIXME */)
   	cgis.startCGI(_filespec, true, CGIBIN_PORT);
  	cgis.createClient("localhost", CGIBIN_PORT);
 	cgis.writeNet(*content);
-	boost::shared_ptr<cygnal::Buffer> reply = cgis.readNet();
+	std::shared_ptr<cygnal::Buffer> reply = cgis.readNet();
 	
 	writeNet(fd, *reply);
 //	cgis.stopCGI(_filespec);
 #else
-	vector<boost::shared_ptr<cygnal::Element> > headers = parseEchoRequest(*content);
-  	//boost::shared_ptr<cygnal::Element> &el0 = headers[0];
+	vector<std::shared_ptr<cygnal::Element> > headers = parseEchoRequest(*content);
+  	//std::shared_ptr<cygnal::Element> &el0 = headers[0];
 
 	if (headers.size() >= 4) {
 	    if (headers[3]) {
@@ -367,61 +364,61 @@ HTTPServer::processPostRequest(int fd, cygnal::Buffer * /* bufFIXME */)
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 HTTPServer::processPutRequest(int /* fd */, cygnal::Buffer */* buf */)
 {
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
 //    GNASH_REPORT_FUNCTION;
     log_unimpl(_("PUT request"));
 
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 HTTPServer::processDeleteRequest(int /* fd */, cygnal::Buffer */* buf */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     log_unimpl(_("DELETE request"));
     
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 HTTPServer::processConnectRequest(int /* fd */, cygnal::Buffer */* buf */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     log_unimpl(_("CONNECT request"));
 
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 HTTPServer::processOptionsRequest(int /* fd */, cygnal::Buffer */* buf */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     log_unimpl(_("OPTIONS request"));
 
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 HTTPServer::processHeadRequest(int /* fd */, cygnal::Buffer */* buf */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     log_unimpl(_("HEAD request"));
     
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 HTTPServer::processTraceRequest(int /* fd */, cygnal::Buffer */* buf */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     log_unimpl(_("TRACE request"));
     
     return buf;
@@ -481,7 +478,7 @@ HTTPServer::formatGetReply(size_t size, http_status_e code)
     formatHeader(size, code);
     
 //    int ret = Network::writeNet(_header.str());    
-//    boost::uint8_t *ptr = (boost::uint8_t *)_body.str().c_str();
+//    std::uint8_t *ptr = (std::uint8_t *)_body.str().c_str();
 //     buf->copy(ptr, _body.str().size());
 //    _handler->dump();
 
@@ -512,7 +509,7 @@ HTTPServer::formatPostReply(rtmpt_cmd_e /* code */)
 
 #if 0
     formatHeader(_filesize, code);
-    boost::shared_ptr<cygnal::Buffer> buf = new cygnal::Buffer;
+    std::shared_ptr<cygnal::Buffer> buf = new cygnal::Buffer;
     if (_header.str().size()) {
 	buf->resize(_header.str().size());
 	string str = _header.str();
@@ -533,28 +530,28 @@ HTTPServer::formatPostReply(rtmpt_cmd_e /* code */)
 #ifndef USE_CGIBIN
 // Parse an Echo Request message coming from the Red5 echo_test. This
 // method should only be used for testing purposes.
-vector<boost::shared_ptr<cygnal::Element > >
-HTTPServer::parseEchoRequest(boost::uint8_t *data, size_t size)
+vector<std::shared_ptr<cygnal::Element > >
+HTTPServer::parseEchoRequest(std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     
-    vector<boost::shared_ptr<cygnal::Element > > headers;
+    vector<std::shared_ptr<cygnal::Element > > headers;
 	
     // skip past the header bytes, we don't care about them.
-    boost::uint8_t *tmpptr = data + 6;
+    std::uint8_t *tmpptr = data + 6;
     
-    boost::uint16_t length;
-    length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-    tmpptr += sizeof(boost::uint16_t);
+    std::uint16_t length;
+    length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+    tmpptr += sizeof(std::uint16_t);
 
     // Get the first name, which is a raw string, and not preceded by
     // a type byte.
-    boost::shared_ptr<cygnal::Element > el1(new cygnal::Element);
+    std::shared_ptr<cygnal::Element > el1(new cygnal::Element);
     
     // If the length of the name field is corrupted, then we get out of
     // range quick, and corrupt memory. This is a bit of a hack, but
     // reduces memory errors caused by some of the corrupted tes cases.
-    boost::uint8_t *endstr = std::find(tmpptr, tmpptr+length, '\0');
+    std::uint8_t *endstr = std::find(tmpptr, tmpptr+length, '\0');
     if (endstr != tmpptr+length) {
 	log_debug("Caught corrupted string! length was %d, null at %d",
 		  length,  endstr-tmpptr);
@@ -566,9 +563,9 @@ HTTPServer::parseEchoRequest(boost::uint8_t *data, size_t size)
     
     // Get the second name, which is a raw string, and not preceded by
     // a type byte.
-    length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-    tmpptr += sizeof(boost::uint16_t);
-    boost::shared_ptr<cygnal::Element > el2(new cygnal::Element);
+    length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+    tmpptr += sizeof(std::uint16_t);
+    std::shared_ptr<cygnal::Element > el2(new cygnal::Element);
 
 //     std::string name2(reinterpret_cast<const char *>(tmpptr), length);
 //     el2->setName(name2.c_str(), name2.size());
@@ -588,11 +585,11 @@ HTTPServer::parseEchoRequest(boost::uint8_t *data, size_t size)
     // Get the last two pieces of data, which are both AMF encoded
     // with a type byte.
     amf::AMF amf;
-    boost::shared_ptr<cygnal::Element> el3 = amf.extractAMF(tmpptr, tmpptr + size);
+    std::shared_ptr<cygnal::Element> el3 = amf.extractAMF(tmpptr, tmpptr + size);
     headers.push_back(el3);
     tmpptr += amf.totalsize();
     
-    boost::shared_ptr<cygnal::Element> el4 = amf.extractAMF(tmpptr, tmpptr + size);
+    std::shared_ptr<cygnal::Element> el4 = amf.extractAMF(tmpptr, tmpptr + size);
     headers.push_back(el4);
 
      return headers;
@@ -605,7 +602,7 @@ cygnal::Buffer &
 HTTPServer::formatEchoResponse(const std::string &num, cygnal::Element &el)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> data;
+    std::shared_ptr<cygnal::Buffer> data;
 
     cygnal::Element nel;
     if (el.getType() == cygnal::Element::TYPED_OBJECT_AMF0) {
@@ -616,7 +613,7 @@ HTTPServer::formatEchoResponse(const std::string &num, cygnal::Element &el)
 	    // FIXME: see about using std::reverse() instead.
 	    for (int i=el.propertySize()-1; i>=0; i--) {
 // 	    for (int i=0 ; i<el.propertySize(); i++) {
-		boost::shared_ptr<cygnal::Element> child = el.getProperty(i);
+		std::shared_ptr<cygnal::Element> child = el.getProperty(i);
 		nel.addProperty(child);
 	    }
 	    data = nel.encode();
@@ -638,11 +635,11 @@ HTTPServer::formatEchoResponse(const std::string &num, cygnal::Buffer &data)
 }
 
 cygnal::Buffer &
-HTTPServer::formatEchoResponse(const std::string &num, boost::uint8_t *data, size_t size)
+HTTPServer::formatEchoResponse(const std::string &num, std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    //boost::uint8_t *tmpptr  = data;
+    //std::uint8_t *tmpptr  = data;
     
     // FIXME: temporary hacks while debugging
     cygnal::Buffer fixme("00 00 00 00 00 01");
@@ -667,11 +664,11 @@ HTTPServer::formatEchoResponse(const std::string &num, boost::uint8_t *data, siz
     // the request, a slash followed by a number like "/2".
     string result = num;
     result += "/onResult";
-    boost::shared_ptr<cygnal::Buffer> res = amf::AMF::encodeString(result);
+    std::shared_ptr<cygnal::Buffer> res = amf::AMF::encodeString(result);
     _buffer.append(res->begin()+1, res->size()-1);
 
     // Add the null data item
-    boost::shared_ptr<cygnal::Buffer> null = amf::AMF::encodeString("null");
+    std::shared_ptr<cygnal::Buffer> null = amf::AMF::encodeString("null");
     _buffer.append(null->begin()+1, null->size()-1);
 
     // Add the other binary blob
@@ -710,7 +707,7 @@ HTTPServer::formatEchoResponse(const std::string &num, boost::uint8_t *data, siz
 /// <index>
 ///    is a consecutive number that seems to be used to detect missing packages
 HTTP::rtmpt_cmd_e
-HTTP::extractRTMPT(boost::uint8_t *data)
+HTTP::extractRTMPT(std::uint8_t *data)
 {
     GNASH_REPORT_FUNCTION;
 
@@ -779,7 +776,7 @@ HTTP::extractRTMPT(boost::uint8_t *data)
 /// <index>
 ///    is a consecutive number that seems to be used to detect missing packages
 HTTPServer::rtmpt_cmd_e
-HTTPServer::extractRTMPT(boost::uint8_t *data)
+HTTPServer::extractRTMPT(std::uint8_t *data)
 {
     GNASH_REPORT_FUNCTION;
 
@@ -822,8 +819,8 @@ HTTPServer::extractRTMPT(boost::uint8_t *data)
 	}
     }
 
-    _index = strtol(indx.c_str(), NULL, 0);
-    _clientid = strtol(cid.c_str(), NULL, 0);
+    _index = strtol(indx.c_str(), nullptr, 0);
+    _clientid = strtol(cid.c_str(), nullptr, 0);
     end =  body.find("\r\n", start);
 //     if (end != string::npos) {
 //         cmd = HTTPServer::CLOSE;
@@ -834,7 +831,7 @@ HTTPServer::extractRTMPT(boost::uint8_t *data)
 
 #if 0
 HTTPServer::http_method_e
-HTTPServer::extractCommand(boost::uint8_t *data)
+HTTPServer::extractCommand(std::uint8_t *data)
 {
     GNASH_REPORT_FUNCTION;
 
@@ -867,9 +864,9 @@ HTTPServer::extractCommand(boost::uint8_t *data)
     // For valid requests, the second argument, delimited by spaces
     // is the filespec of the file being requested or transmitted.
     if (cmd != HTTP::HTTP_NONE) {
-	boost::uint8_t *start = std::find(data, data+7, ' ') + 1;
-	boost::uint8_t *end   = std::find(start + 2, data+PATH_MAX, ' ');
-	boost::uint8_t *params = std::find(start, end, '?');
+	std::uint8_t *start = std::find(data, data+7, ' ') + 1;
+	std::uint8_t *end   = std::find(start + 2, data+PATH_MAX, ' ');
+	std::uint8_t *params = std::find(start, end, '?');
 	if (params != end) {
 	    _params = std::string(params+1, end);
 	    _filespec = std::string(start, params);
@@ -893,7 +890,7 @@ HTTPServer::extractCommand(boost::uint8_t *data)
     return cmd;
 }
 
-boost::uint8_t *
+std::uint8_t *
 HTTPServer::processHeaderFields(cygnal::Buffer &buf)
 {
   //    GNASH_REPORT_FUNCTION;
@@ -946,8 +943,8 @@ HTTPServer::processHeaderFields(cygnal::Buffer &buf)
 	    
 //	    cerr << "FIXME: " << (void *)i << " : " << dec <<  end << endl;
 	} else {
-	    const boost::uint8_t *cmd = reinterpret_cast<const boost::uint8_t *>(i->c_str());
-	    if (extractCommand(const_cast<boost::uint8_t *>(cmd)) == HTTP::HTTP_NONE) {
+	    const std::uint8_t *cmd = reinterpret_cast<const std::uint8_t *>(i->c_str());
+	    if (extractCommand(const_cast<std::uint8_t *>(cmd)) == HTTP::HTTP_NONE) {
 		break;
 #if 1
 	    } else {
@@ -1006,7 +1003,7 @@ HTTPServer::http_handler(Handler *hand, int netfd, cygnal::Buffer *buf)
 
     // Handler *hand = reinterpret_cast<Handler *>(args->handler);
     // cygnal::Buffer *buf = args->buffer;
-    // boost::shared_ptr<HTTPServer> www(new HTTPServer); // = hand->getHTTPHandler    (args->netfd);
+    // std::shared_ptr<HTTPServer> www(new HTTPServer); // = hand->getHTTPHandler    (args->netfd);
     
     string url, parameters;
     // by default, only look once unless changed later
@@ -1061,11 +1058,11 @@ HTTPServer::http_handler(Handler *hand, int netfd, cygnal::Buffer *buf)
 	cerr << "FIXME no cache hit for: " << www.getFilespec() << endl;
 //	    www.clearHeader();
 // 	    cygnal::Buffer &ss = www.formatHeader(filestream->getFileSize(), HTTP::LIFE_IS_GOOD);
-// 	    www.writeNet(args->netfd, (boost::uint8_t *)www.getHeader().c_str(), www.getHeader().size());
+// 	    www.writeNet(args->netfd, (std::uint8_t *)www.getHeader().c_str(), www.getHeader().size());
 // 	    cache.addResponse(www.getFilespec(), www.getHeader());
     } else {
 	cerr << "FIXME cache hit on: " << www.getFilespec() << endl;
-	www.writeNet(args->netfd, (boost::uint8_t *)response.c_str(), response.size());
+	www.writeNet(args->netfd, (std::uint8_t *)response.c_str(), response.size());
     }	
 #endif
     
diff --git a/cygnal/http_server.h b/cygnal/http_server.h
index e63f307..594ec48 100644
--- a/cygnal/http_server.h
+++ b/cygnal/http_server.h
@@ -22,9 +22,6 @@
 
 #include <string>
 #include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
 #include <sstream>
 
 #include "amf.h"
@@ -49,16 +46,16 @@ public:
     http_method_e processClientRequest(int fd);
     http_method_e processClientRequest(Handler *hand, int fd, cygnal::Buffer *buf);
     cygnal::Buffer &processGetRequest(Handler *hand, int fd, cygnal::Buffer *buf);
-    boost::shared_ptr<cygnal::Buffer> processPostRequest(int fd, cygnal::Buffer *buf);
-    boost::shared_ptr<cygnal::Buffer> processPutRequest(int fd, cygnal::Buffer *buf);
-    boost::shared_ptr<cygnal::Buffer> processDeleteRequest(int fd, cygnal::Buffer *buf);
-    boost::shared_ptr<cygnal::Buffer> processConnectRequest(int fd, cygnal::Buffer *buf);
-    boost::shared_ptr<cygnal::Buffer> processOptionsRequest(int fd, cygnal::Buffer *buf);
-    boost::shared_ptr<cygnal::Buffer> processHeadRequest(int fd, cygnal::Buffer *buf);
-    boost::shared_ptr<cygnal::Buffer> processTraceRequest(int fd, cygnal::Buffer *buf);
+    std::shared_ptr<cygnal::Buffer> processPostRequest(int fd, cygnal::Buffer *buf);
+    std::shared_ptr<cygnal::Buffer> processPutRequest(int fd, cygnal::Buffer *buf);
+    std::shared_ptr<cygnal::Buffer> processDeleteRequest(int fd, cygnal::Buffer *buf);
+    std::shared_ptr<cygnal::Buffer> processConnectRequest(int fd, cygnal::Buffer *buf);
+    std::shared_ptr<cygnal::Buffer> processOptionsRequest(int fd, cygnal::Buffer *buf);
+    std::shared_ptr<cygnal::Buffer> processHeadRequest(int fd, cygnal::Buffer *buf);
+    std::shared_ptr<cygnal::Buffer> processTraceRequest(int fd, cygnal::Buffer *buf);
 
     // Handle the response for the request.
-    boost::shared_ptr<cygnal::Buffer> formatServerReply(http_status_e code);
+    std::shared_ptr<cygnal::Buffer> formatServerReply(http_status_e code);
     cygnal::Buffer &formatGetReply(gnash::DiskStream::filetype_e type, size_t size, http_status_e code); 
     cygnal::Buffer &formatGetReply(size_t size, http_status_e code); 
     cygnal::Buffer &formatGetReply(http_status_e code); 
@@ -68,27 +65,27 @@ public:
     // These methods extract data from an RTMPT message. RTMP is an
     // extension to HTTP that adds commands to manipulate the
     // connection's persistance.
-    rtmpt_cmd_e extractRTMPT(boost::uint8_t *data);
+    rtmpt_cmd_e extractRTMPT(std::uint8_t *data);
     rtmpt_cmd_e extractRTMPT(cygnal::Buffer &data)
 	{ return extractRTMPT(data.reference()); };    
 
 #if 0
     // Examine the beginning of the data for an HTTP request command
     // like GET or POST, etc...
-    http_method_e extractCommand(boost::uint8_t *data);
+    http_method_e extractCommand(std::uint8_t *data);
     http_method_e extractCommand(cygnal::Buffer &data)
 	{ return extractCommand(data.reference()); };    
 
     // process all the header fields in the Buffer, storing them internally
     // in _fields. The address returned is the address where the Content data
     // starts, and is "Content-Length" bytes long, of "Content-Type" data.
-    boost::uint8_t *processHeaderFields(cygnal::Buffer &buf);
+    std::uint8_t *processHeaderFields(cygnal::Buffer &buf);
 #endif
     
 #if 0
     // Parse an Echo Request message coming from the Red5 echo_test.
-    std::vector<boost::shared_ptr<cygnal::Element > > parseEchoRequest(gnash::cygnal::Buffer &buf) { return parseEchoRequest(buf.reference(), buf.size()); };
-    std::vector<boost::shared_ptr<cygnal::Element > > parseEchoRequest(boost::uint8_t *buf, size_t size);
+    std::vector<std::shared_ptr<cygnal::Element > > parseEchoRequest(gnash::cygnal::Buffer &buf) { return parseEchoRequest(buf.reference(), buf.size()); };
+    std::vector<std::shared_ptr<cygnal::Element > > parseEchoRequest(std::uint8_t *buf, size_t size);
     
     // format a response to the 'echo' test used for testing Gnash.
     gnash::cygnal::Buffer &formatEchoResponse(const std::string &num, cygnal::Element &el);
@@ -97,12 +94,12 @@ public:
 #endif
 
     bool http_handler(Handler *hand, int netfd, cygnal::Buffer *buf);
-    boost::shared_ptr<gnash::DiskStream> getDiskStream() { return _diskstream; };
+    std::shared_ptr<gnash::DiskStream> getDiskStream() { return _diskstream; };
 
     void dump();    
 private:
     cygnal::Buffer _buf;
-    boost::shared_ptr<gnash::DiskStream> _diskstream;
+    std::shared_ptr<gnash::DiskStream> _diskstream;
 };
 
 } // end of gnash namespace
diff --git a/cygnal/libamf/amf.cpp b/cygnal/libamf/amf.cpp
index a49e645..b2dea5e 100644
--- a/cygnal/libamf/amf.cpp
+++ b/cygnal/libamf/amf.cpp
@@ -26,11 +26,10 @@
 #include "element.h"
 #include "amfutf8.h"
 
-#include <boost/shared_ptr.hpp>
 #include <string>
 #include <vector>
 #include <map>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 namespace cygnal
 {
@@ -102,10 +101,10 @@ void *
 swapBytes(void *word, size_t size)
 {
     union {
-	boost::uint16_t s;
+	std::uint16_t s;
 	struct {
-	    boost::uint8_t c0;
-	    boost::uint8_t c1;
+	    std::uint8_t c0;
+	    std::uint8_t c1;
 	} c;
     } u;
 	   
@@ -118,7 +117,7 @@ swapBytes(void *word, size_t size)
     // Little-endian machine: byte-swap the word
 
     // A conveniently-typed pointer to the source data
-    boost::uint8_t *x = static_cast<boost::uint8_t *>(word);
+    std::uint8_t *x = static_cast<std::uint8_t *>(word);
 
     /// Handle odd as well as even counts of bytes
     std::reverse(x, x+size);
@@ -135,14 +134,14 @@ swapBytes(void *word, size_t size)
 /// @param num A double value to serialize.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeNumber(double indata)
 {
 //    GNASH_REPORT_FUNCTION;
     double num;
     // Encode the data as a 64 bit, big-endian, numeric value
     // only one additional byte for the type
-    boost::shared_ptr<Buffer> buf(new Buffer(AMF0_NUMBER_SIZE + 1));
+    std::shared_ptr<Buffer> buf(new Buffer(AMF0_NUMBER_SIZE + 1));
     *buf = Element::NUMBER_AMF0;
     num = indata;
     swapBytes(&num, AMF0_NUMBER_SIZE);
@@ -156,14 +155,14 @@ AMF::encodeNumber(double indata)
 /// @param flag The boolean value to serialize.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeBoolean(bool flag)
 {
 //    GNASH_REPORT_FUNCTION;
     // Encode a boolean value. 0 for false, 1 for true
-    boost::shared_ptr<Buffer> buf(new Buffer(2));
+    std::shared_ptr<Buffer> buf(new Buffer(2));
     *buf = Element::BOOLEAN_AMF0; 
-    *buf += static_cast<boost::uint8_t>(flag);
+    *buf += static_cast<std::uint8_t>(flag);
     
     return buf;
 }
@@ -171,14 +170,14 @@ AMF::encodeBoolean(bool flag)
 /// \brief Encode the end of an object to it's serialized representation.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeObject(const cygnal::Element &data)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint32_t length;
+    std::uint32_t length;
     length = data.propertySize();
     gnash::log_debug(_("Encoded data size has %d properties"), length);
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     if (length) {
 	buf.reset(new cygnal::Buffer);
     } else {
@@ -187,11 +186,11 @@ AMF::encodeObject(const cygnal::Element &data)
     
     *buf = Element::OBJECT_AMF0;
     if (data.propertySize() > 0) {
-	std::vector<boost::shared_ptr<cygnal::Element> >::const_iterator ait;
-	std::vector<boost::shared_ptr<cygnal::Element> > props = data.getProperties();
+	std::vector<std::shared_ptr<cygnal::Element> >::const_iterator ait;
+	std::vector<std::shared_ptr<cygnal::Element> > props = data.getProperties();
 	for (ait = props.begin(); ait != props.end(); ++ait) {
-	    boost::shared_ptr<cygnal::Element> el = (*(ait));
-	    boost::shared_ptr<cygnal::Buffer> item = AMF::encodeElement(el);
+	    std::shared_ptr<cygnal::Element> el = (*(ait));
+	    std::shared_ptr<cygnal::Buffer> item = AMF::encodeElement(el);
 	    if (item) {
 		*buf += item;
 		item.reset();
@@ -213,11 +212,11 @@ AMF::encodeObject(const cygnal::Element &data)
 /// \brief Encode the end of an object to it's serialized representation.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeObjectEnd()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer> buf(new Buffer(1));
+    std::shared_ptr<Buffer> buf(new Buffer(1));
     *buf += TERMINATOR;
 
     return buf;
@@ -226,11 +225,11 @@ AMF::encodeObjectEnd()
 /// \brief Encode an "Undefined" object to it's serialized representation.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeUndefined()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer> buf(new Buffer(1));
+    std::shared_ptr<Buffer> buf(new Buffer(1));
     *buf = Element::UNDEFINED_AMF0;
     
     return buf;
@@ -239,11 +238,11 @@ AMF::encodeUndefined()
 /// \brief Encode a "Unsupported" object to it's serialized representation.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeUnsupported()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer> buf(new Buffer(1));
+    std::shared_ptr<Buffer> buf(new Buffer(1));
     *buf = Element::UNSUPPORTED_AMF0;
     
     return buf;
@@ -254,13 +253,13 @@ AMF::encodeUnsupported()
 /// @param data A pointer to the raw bytes that becomes the data.
 /// 
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
-AMF::encodeDate(const boost::uint8_t *date)
+std::shared_ptr<Buffer>
+AMF::encodeDate(const std::uint8_t *date)
 {
 //    GNASH_REPORT_FUNCTION;
-//    boost::shared_ptr<Buffer> buf;
-    boost::shared_ptr<Buffer> buf;
-    if (date != 0) {
+//    std::shared_ptr<Buffer> buf;
+    std::shared_ptr<Buffer> buf;
+    if (date != nullptr) {
 	buf.reset(new Buffer(AMF0_NUMBER_SIZE+1));
 	*buf = Element::DATE_AMF0;
 	double num = *(reinterpret_cast<const double*>(date));
@@ -274,12 +273,12 @@ AMF::encodeDate(const boost::uint8_t *date)
 ///		A NULL object is often used as a placeholder in RTMP.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeNull()
 {
 //    GNASH_REPORT_FUNCTION;
 
-    boost::shared_ptr<Buffer> buf(new Buffer(1));
+    std::shared_ptr<Buffer> buf(new Buffer(1));
     *buf = Element::NULL_AMF0;
     
     return buf;
@@ -292,11 +291,11 @@ AMF::encodeNull()
 /// @param nbytes The number of bytes to serialize.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
-AMF::encodeXMLObject(const boost::uint8_t * /*data */, size_t /* size */)
+std::shared_ptr<Buffer>
+AMF::encodeXMLObject(const std::uint8_t * /*data */, size_t /* size */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer> buf;
+    std::shared_ptr<Buffer> buf;
     gnash::log_unimpl(_("XML AMF objects not supported yet"));
     buf.reset();
     return buf;
@@ -309,15 +308,15 @@ AMF::encodeXMLObject(const boost::uint8_t * /*data */, size_t /* size */)
 /// @param size The number of bytes to serialize.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeTypedObject(const cygnal::Element &data)
 {
 //    GNASH_REPORT_FUNCTION;
 
     size_t size = 0;
-    boost::uint32_t props;
+    std::uint32_t props;
     props = data.propertySize();
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     //    log_debug("Encoded data size has %d properties", props);
     if (props) {
 	// Calculate the total size of the output buffer
@@ -334,7 +333,7 @@ AMF::encodeTypedObject(const cygnal::Element &data)
     *buf = Element::TYPED_OBJECT_AMF0;
 
     size_t length = data.getNameSize();
-    boost::uint16_t enclength = length;
+    std::uint16_t enclength = length;
     swapBytes(&enclength, 2);
     *buf += enclength;
 
@@ -346,11 +345,11 @@ AMF::encodeTypedObject(const cygnal::Element &data)
     }
     
     if (data.propertySize() > 0) {
-	std::vector<boost::shared_ptr<cygnal::Element> >::const_iterator ait;
-	std::vector<boost::shared_ptr<cygnal::Element> > props = data.getProperties();
+	std::vector<std::shared_ptr<cygnal::Element> >::const_iterator ait;
+	std::vector<std::shared_ptr<cygnal::Element> > props = data.getProperties();
 	for (ait = props.begin(); ait != props.end(); ++ait) {
-	    boost::shared_ptr<cygnal::Element> el = (*(ait));
-	    boost::shared_ptr<cygnal::Buffer> item = AMF::encodeElement(el);
+	    std::shared_ptr<cygnal::Element> el = (*(ait));
+	    std::shared_ptr<cygnal::Buffer> item = AMF::encodeElement(el);
 	    if (item) {
 		*buf += item;
 		item.reset();
@@ -376,14 +375,14 @@ AMF::encodeTypedObject(const cygnal::Element &data)
 /// @param size The number of bytes to serialize.
 ///
 /// @return a binary AMF packet in big endian format (header,data)
-boost::shared_ptr<Buffer>
-AMF::encodeReference(boost::uint16_t index)
+std::shared_ptr<Buffer>
+AMF::encodeReference(std::uint16_t index)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint16_t num = index;
-    boost::shared_ptr<cygnal::Buffer> buf(new Buffer(3));
+    std::uint16_t num = index;
+    std::shared_ptr<cygnal::Buffer> buf(new Buffer(3));
     *buf = Element::REFERENCE_AMF0;
-    swapBytes(&num, sizeof(boost::uint16_t));
+    swapBytes(&num, sizeof(std::uint16_t));
     *buf += num;
     
     return buf;
@@ -396,11 +395,11 @@ AMF::encodeReference(boost::uint16_t index)
 /// @param size The number of bytes to serialize.
 ///
 /// @return a binary AMF packet in big endian format (header,data)
-boost::shared_ptr<Buffer>
-AMF::encodeMovieClip(const boost::uint8_t * /*data */, size_t /* size */)
+std::shared_ptr<Buffer>
+AMF::encodeMovieClip(const std::uint8_t * /*data */, size_t /* size */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer> buf;
+    std::shared_ptr<Buffer> buf;
     gnash::log_unimpl(_("Movie Clip AMF objects not supported yet"));
     
     return buf;
@@ -415,17 +414,17 @@ AMF::encodeMovieClip(const boost::uint8_t * /*data */, size_t /* size */)
 /// @param size The number of bytes to serialize.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeECMAArray(const cygnal::Element &data)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint32_t length;
+    std::uint32_t length;
     bool sparse = false;
     //size_t counter = 0;
 
     length = data.propertySize();
     //    log_debug("Encoded data size has %d properties", length);
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer);
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer);
     if (length == 0) {
 	// an undefined array is only 5 bytes, 1 for the type and
 	// 4 for the length.
@@ -433,17 +432,17 @@ AMF::encodeECMAArray(const cygnal::Element &data)
     }
     *buf = Element::ECMA_ARRAY_AMF0;
     length = 0;
-    swapBytes(&length, sizeof(boost::uint32_t));
+    swapBytes(&length, sizeof(std::uint32_t));
     *buf += length;
 
     // At lest for red5, it seems to encode from the last item to the
     // first, so we do the same for now.
     if (data.propertySize() > 0) {
-	boost::shared_ptr<cygnal::Buffer> item;
-	std::vector<boost::shared_ptr<cygnal::Element> >::const_iterator ait;    
-	std::vector<boost::shared_ptr<cygnal::Element> > props = data.getProperties();
+	std::shared_ptr<cygnal::Buffer> item;
+	std::vector<std::shared_ptr<cygnal::Element> >::const_iterator ait;
+	std::vector<std::shared_ptr<cygnal::Element> > props = data.getProperties();
 	for (ait = props.begin(); ait != props.end(); ++ait) {
-	    boost::shared_ptr<cygnal::Element> el = (*(ait));
+	    std::shared_ptr<cygnal::Element> el = (*(ait));
 	    if (sparse) {
 		sparse = false;
 // 		char num[12];
@@ -468,7 +467,7 @@ AMF::encodeECMAArray(const cygnal::Element &data)
 #if 0
     double count = data.propertySize();
     cygnal::Element ellen("length", count);
-    boost::shared_ptr<cygnal::Buffer> buflen = ellen.encode();
+    std::shared_ptr<cygnal::Buffer> buflen = ellen.encode();
     *buf += buflen;
 #endif
     
@@ -487,11 +486,11 @@ AMF::encodeECMAArray(const cygnal::Element &data)
 /// @param size The number of bytes to serialize.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
-AMF::encodeLongString(const boost::uint8_t * /* data */, size_t /* size */)
+std::shared_ptr<Buffer>
+AMF::encodeLongString(const std::uint8_t * /* data */, size_t /* size */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer> buf;
+    std::shared_ptr<Buffer> buf;
     gnash::log_unimpl(_("Long String AMF objects not supported yet"));
     
     return buf;
@@ -504,11 +503,11 @@ AMF::encodeLongString(const boost::uint8_t * /* data */, size_t /* size */)
 /// @param size The number of bytes to serialize.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
-AMF::encodeRecordSet(const boost::uint8_t * /* data */, size_t /* size */)
+std::shared_ptr<Buffer>
+AMF::encodeRecordSet(const std::uint8_t * /* data */, size_t /* size */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer> buf;
+    std::shared_ptr<Buffer> buf;
     gnash::log_unimpl(_("Reecord Set AMF objects not supported yet"));
     
     return buf;
@@ -523,14 +522,14 @@ AMF::encodeRecordSet(const boost::uint8_t * /* data */, size_t /* size */)
 /// @param size The number of bytes to serialize.
 ///
 /// @return a binary AMF packet in big endian format (header,data)
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeStrictArray(const cygnal::Element &data)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint32_t items;
+    std::uint32_t items;
     items = data.propertySize();
     //    log_debug("Encoded data size has %d properties", items);
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer);
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer);
     if (items) {
 	buf.reset(new cygnal::Buffer);
     } else {
@@ -540,17 +539,17 @@ AMF::encodeStrictArray(const cygnal::Element &data)
 	//	buf.reset(new cygnal::Buffer(5));
     }
     *buf = Element::STRICT_ARRAY_AMF0;
-    swapBytes(&items, sizeof(boost::uint32_t));
+    swapBytes(&items, sizeof(std::uint32_t));
     *buf += items;
 
     if (data.propertySize() > 0) {
-	std::vector<boost::shared_ptr<cygnal::Element> >::const_iterator ait;    
-	std::vector<boost::shared_ptr<cygnal::Element> > props = data.getProperties();
+	std::vector<std::shared_ptr<cygnal::Element> >::const_iterator ait;
+	std::vector<std::shared_ptr<cygnal::Element> > props = data.getProperties();
 	bool sparse = false;
 	size_t counter = 0;
 	for (ait = props.begin(); ait != props.end(); ++ait) {
 	    counter++;
-	    boost::shared_ptr<cygnal::Element> el = (*(ait));
+	    std::shared_ptr<cygnal::Element> el = (*(ait));
 #if 0
 	    // FIXME: Red5's echo tests like to turn strict array's into ecma
 	    // arrays, but we shouldn't do that in the core.
@@ -563,10 +562,10 @@ AMF::encodeStrictArray(const cygnal::Element &data)
 		    // When returning an ECMA array for a sparsely populated
 		    // array, Red5 adds one more to the count to be 1 based,
 		    // instead of zero based.
-		    boost::uint32_t moreitems = data.propertySize() + 1;
-		    swapBytes(&moreitems, sizeof(boost::uint32_t));
-		    boost::uint8_t *ptr = buf->reference() + 1;
-		    memcpy(ptr, &moreitems, sizeof(boost::uint32_t));
+		    std::uint32_t moreitems = data.propertySize() + 1;
+		    swapBytes(&moreitems, sizeof(std::uint32_t));
+		    std::uint8_t *ptr = buf->reference() + 1;
+		    memcpy(ptr, &moreitems, sizeof(std::uint32_t));
 		    sparse = true;
 		}
 		continue;
@@ -582,7 +581,7 @@ AMF::encodeStrictArray(const cygnal::Element &data)
 		    cygnal::Element ellen("length", nodes);
 		    *buf += AMF::encodeElement(ellen);
 		} else {
-		    boost::shared_ptr<cygnal::Buffer> item = AMF::encodeElement(el);
+		    std::shared_ptr<cygnal::Buffer> item = AMF::encodeElement(el);
 		    if (item) {
 			*buf += item;
 			item.reset();
@@ -604,10 +603,10 @@ AMF::encodeStrictArray(const cygnal::Element &data)
 /// @param str a string value
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeString(const std::string &str)
 {
-    boost::uint8_t *ptr = const_cast<boost::uint8_t *>(reinterpret_cast<const boost::uint8_t *>(str.c_str()));
+    std::uint8_t *ptr = const_cast<std::uint8_t *>(reinterpret_cast<const std::uint8_t *>(str.c_str()));
     return encodeString(ptr, str.size());
 }
 
@@ -618,17 +617,17 @@ AMF::encodeString(const std::string &str)
 /// @param size The size of the data in bytes
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
-AMF::encodeString(boost::uint8_t *data, size_t size)
+std::shared_ptr<Buffer>
+AMF::encodeString(std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer>buf(new Buffer(size + AMF_HEADER_SIZE));
+    std::shared_ptr<Buffer>buf(new Buffer(size + AMF_HEADER_SIZE));
     *buf = Element::STRING_AMF0;
     // when a string is stored in an element, we add a NULL terminator so
     // it can be printed by to_string() efficiently. The NULL terminator
     // doesn't get written when encoding a string as it has a byte count
     // instead.
-    boost::uint16_t length = size;
+    std::uint16_t length = size;
 //    log_debug("Encoded data size is going to be %d", length);
     swapBytes(&length, 2);
     *buf += length;
@@ -641,13 +640,13 @@ AMF::encodeString(boost::uint8_t *data, size_t size)
 ///	A NULL String is a string with no associated data.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeNullString()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint16_t length;
+    std::uint16_t length;
     
-    boost::shared_ptr<Buffer> buf(new Buffer(AMF_HEADER_SIZE));
+    std::shared_ptr<Buffer> buf(new Buffer(AMF_HEADER_SIZE));
     *buf = Element::STRING_AMF0;
     // when a string is stored in an element, we add a NULL terminator so
     // it can be printed by to_string() efficiently. The NULL terminator
@@ -682,17 +681,17 @@ AMF::encodeNullString()
 /// @param el A smart pointer to the Element to encode.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
-AMF::encodeElement(boost::shared_ptr<cygnal::Element> el)
+std::shared_ptr<Buffer>
+AMF::encodeElement(std::shared_ptr<cygnal::Element> el)
 {
     return encodeElement(*el);
 }
 
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 AMF::encodeElement(const cygnal::Element& el)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<Buffer> buf;
+    std::shared_ptr<Buffer> buf;
     // Encode the element's data
     switch (el.getType()) {
       case Element::NOTYPE:
@@ -700,14 +699,14 @@ AMF::encodeElement(const cygnal::Element& el)
 	  break;
       case Element::NUMBER_AMF0:
       {
-  //	  boost::shared_ptr<Buffer> encnum = AMF::encodeNumber(el.to_number());
+  //	  std::shared_ptr<Buffer> encnum = AMF::encodeNumber(el.to_number());
   //	  *buf += encnum;
 	  buf = AMF::encodeNumber(el.to_number());
           break;
       }
       case Element::BOOLEAN_AMF0:
       {
-// 	  boost::shared_ptr<Buffer> encbool = AMF::encodeBoolean(el.to_bool());
+// 	  std::shared_ptr<Buffer> encbool = AMF::encodeBoolean(el.to_bool());
 // 	  *buf += encodeBoolean(el.to_bool());
 // 	  *buf += encbool;
 	  buf = AMF::encodeBoolean(el.to_bool());
@@ -715,7 +714,7 @@ AMF::encodeElement(const cygnal::Element& el)
       }
       case Element::STRING_AMF0:
       {
-  //	  boost::shared_ptr<Buffer> encstr = AMF::encodeString(el.to_string());
+  //	  std::shared_ptr<Buffer> encstr = AMF::encodeString(el.to_string());
 	  //	  *buf += encstr;
 	  if (el.getDataSize() == 0) {
 	      buf = encodeNullString();
@@ -755,7 +754,7 @@ AMF::encodeElement(const cygnal::Element& el)
       }
       case Element::DATE_AMF0:
       {
-  //	  boost::shared_ptr<Buffer> encdate = AMF::encodeNumber(el.to_number());
+  //	  std::shared_ptr<Buffer> encdate = AMF::encodeNumber(el.to_number());
 	  buf = AMF::encodeDate(el.to_reference());
           break;
       }
@@ -789,17 +788,17 @@ AMF::encodeElement(const cygnal::Element& el)
     };
 
     // If the name field is set, it's a property, followed by the data
-    boost::shared_ptr<Buffer> bigbuf;
+    std::shared_ptr<Buffer> bigbuf;
     if (el.getName() && (el.getType() != Element::TYPED_OBJECT_AMF0)) {
 	if (buf) {
-	    bigbuf.reset(new cygnal::Buffer(el.getNameSize() + sizeof(boost::uint16_t) + buf->size()));
+	    bigbuf.reset(new cygnal::Buffer(el.getNameSize() + sizeof(std::uint16_t) + buf->size()));
 	} else {
-	    bigbuf.reset(new cygnal::Buffer(el.getNameSize() + sizeof(boost::uint16_t)));
+	    bigbuf.reset(new cygnal::Buffer(el.getNameSize() + sizeof(std::uint16_t)));
 	}
 	
 	// Add the length of the string for the name of the variable
 	size_t length = el.getNameSize();
-	boost::uint16_t enclength = length;
+	std::uint16_t enclength = length;
 	swapBytes(&enclength, 2);
 	*bigbuf = enclength;
 	// Now the name itself
@@ -821,20 +820,20 @@ AMF::encodeElement(const cygnal::Element& el)
 /// @param el A smart pointer to the Element to encode.
 ///
 /// @return a binary AMF packet in big endian format
-boost::shared_ptr<Buffer>
-AMF::encodeProperty(boost::shared_ptr<cygnal::Element> el)
+std::shared_ptr<Buffer>
+AMF::encodeProperty(std::shared_ptr<cygnal::Element> el)
 {
 //    GNASH_REPORT_FUNCTION;
     size_t outsize;
     
     outsize = el->getNameSize() + el->getDataSize() + AMF_PROP_HEADER_SIZE;
 
-    boost::shared_ptr<Buffer> buf(new Buffer(outsize));
+    std::shared_ptr<Buffer> buf(new Buffer(outsize));
     _totalsize += outsize;
 
     // Add the length of the string for the name of the property
     size_t length = el->getNameSize();
-    boost::uint16_t enclength = length;
+    std::uint16_t enclength = length;
     swapBytes(&enclength, 2);
     *buf = enclength;
 
@@ -879,12 +878,12 @@ AMF::encodeProperty(boost::shared_ptr<cygnal::Element> el)
 /// @return A smart ptr to an Element.
 ///
 /// @remarks May throw a ParserException
-boost::shared_ptr<cygnal::Element> 
-AMF::extractAMF(boost::shared_ptr<Buffer> buf)
+std::shared_ptr<cygnal::Element>
+AMF::extractAMF(std::shared_ptr<Buffer> buf)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t* start = buf->reference();
-    boost::uint8_t* tooFar = start+buf->size();
+    std::uint8_t* start = buf->reference();
+    std::uint8_t* tooFar = start+buf->size();
     
     return extractAMF(start, tooFar);
 }
@@ -900,21 +899,21 @@ AMF::extractAMF(boost::shared_ptr<Buffer> buf)
 /// @return A smart ptr to an Element.
 ///
 /// @remarks May throw a ParserException
-boost::shared_ptr<cygnal::Element> 
-AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
+std::shared_ptr<cygnal::Element>
+AMF::extractAMF(std::uint8_t *in, std::uint8_t* tooFar)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    boost::uint8_t *tmpptr = in;
-    boost::uint16_t length;
-    boost::shared_ptr<cygnal::Element> el(new Element);
+    std::uint8_t *tmpptr = in;
+    std::uint16_t length;
+    std::shared_ptr<cygnal::Element> el(new Element);
 
-    if (in == 0) {
+    if (in == nullptr) {
         gnash::log_error(_("AMF body input data is NULL"));
         return el;
     }
 
-    std::map<boost::uint16_t, cygnal::Element> references;
+    std::map<std::uint16_t, cygnal::Element> references;
     
     // All elements look like this:
     // the first two bytes is the length of name of the element
@@ -972,8 +971,8 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
             break;
         case Element::STRING_AMF0:
             // get the length of the name
-            length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-            tmpptr += sizeof(boost::uint16_t);
+            length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+            tmpptr += sizeof(std::uint16_t);
             if (length >= SANE_STR_SIZE) {
                 gnash::log_error(_("%d bytes for a string is over the safe "
                                    "limit of %d, line %d"), length,
@@ -1002,9 +1001,9 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
                     tmpptr++;
                     break;
                 }
-                boost::shared_ptr<cygnal::Element> child =
+                std::shared_ptr<cygnal::Element> child =
                     amf_obj.extractProperty(tmpptr, tooFar); 
-                if (child == 0) {
+                if (child == nullptr) {
                     // skip past zero length string (2 bytes), null
                     // (1 byte) and end object (1 byte)
                     //tmpptr += 3;
@@ -1028,8 +1027,8 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
             break;
         case Element::REFERENCE_AMF0:
         {
-            length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-            tmpptr += sizeof(boost::uint16_t);
+            length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+            tmpptr += sizeof(std::uint16_t);
             el->makeReference(length);
             // FIXME: connect reference Element to the object
             // pointed to by the index.
@@ -1042,7 +1041,7 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
         case Element::ECMA_ARRAY_AMF0:
         {
             el->makeECMAArray();
-            tmpptr += sizeof(boost::uint32_t);
+            tmpptr += sizeof(std::uint32_t);
 #if 1
             while (tmpptr < tooFar) { // FIXME: was tooFar - AMF_HEADER_SIZE)
                 if (*tmpptr+3 == TERMINATOR) {
@@ -1050,9 +1049,9 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
                     tmpptr++;
                     break;
                 }
-                boost::shared_ptr<cygnal::Element> child =
+                std::shared_ptr<cygnal::Element> child =
                     amf_obj.extractProperty(tmpptr, tooFar); 
-                if (child == 0) {
+                if (child == nullptr) {
                     // skip past zero length string (2 bytes),
                     // null (1 byte) and end object (1 byte)
                     //tmpptr += 3;
@@ -1066,12 +1065,12 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
             break;
 #else
             // get the number of elements in the array
-            boost::uint32_t items = 
-                ntohl((*(boost::uint32_t *)tmpptr) & 0xffffffff);
+            std::uint32_t items =
+                ntohl((*(std::uint32_t *)tmpptr) & 0xffffffff);
   
-            tmpptr += sizeof(boost::uint32_t);
+            tmpptr += sizeof(std::uint32_t);
             while (items--) {
-                boost::shared_ptr<cygnal::Element> child =
+                std::shared_ptr<cygnal::Element> child =
                     amf_obj.extractProperty(tmpptr, tooFar); 
                 if (child == 0) {
                     break;
@@ -1091,13 +1090,13 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
         {
             el->makeStrictArray();
             // get the number of numbers in the array
-            boost::uint32_t items = ntohl((*(boost::uint32_t *)tmpptr));
+            std::uint32_t items = ntohl((*(std::uint32_t *)tmpptr));
             // Skip past the length field to get to the start of the data
-            tmpptr += sizeof(boost::uint32_t);
+            tmpptr += sizeof(std::uint32_t);
             while (items) {
-                boost::shared_ptr<cygnal::Element> child =
+                std::shared_ptr<cygnal::Element> child =
                     amf_obj.extractAMF(tmpptr, tooFar); 
-                if (child == 0) {
+                if (child == nullptr) {
                     break;
                 } else {
                 //child->dump();
@@ -1133,8 +1132,8 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
         {
             el->makeTypedObject();
             
-            length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-            tmpptr += sizeof(boost::uint16_t);
+            length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+            tmpptr += sizeof(std::uint16_t);
             if (length > 0) {
                 std::string name(reinterpret_cast<const char*>(tmpptr), length);
                 //log_debug("Typed object name is: %s", el->getName());
@@ -1152,9 +1151,9 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
                     tmpptr++;
                     break;
                 }
-                boost::shared_ptr<cygnal::Element> child =
+                std::shared_ptr<cygnal::Element> child =
                     amf_obj.extractProperty(tmpptr, tooFar); 
-                if (child == 0) {
+                if (child == nullptr) {
                     break;
                 }
                 el->addProperty(child);
@@ -1187,13 +1186,13 @@ AMF::extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar)
 /// @return A smart ptr to an Element.
 ///
 /// @remarks May throw a ParserException
-boost::shared_ptr<cygnal::Element> 
-AMF::extractProperty(boost::shared_ptr<Buffer> buf)
+std::shared_ptr<cygnal::Element>
+AMF::extractProperty(std::shared_ptr<Buffer> buf)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    boost::uint8_t* start = buf->reference();
-    boost::uint8_t* tooFar = start+buf->size();
+    std::uint8_t* start = buf->reference();
+    std::uint8_t* tooFar = start+buf->size();
     return extractProperty(start, tooFar);
 }
 
@@ -1210,18 +1209,18 @@ AMF::extractProperty(boost::shared_ptr<Buffer> buf)
 /// @return A smart ptr to an Element.
 ///
 /// @remarks May throw a ParserException
-boost::shared_ptr<cygnal::Element> 
-AMF::extractProperty(boost::uint8_t *in, boost::uint8_t* tooFar)
+std::shared_ptr<cygnal::Element>
+AMF::extractProperty(std::uint8_t *in, std::uint8_t* tooFar)
 {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::uint8_t *tmpptr = in;
-    boost::uint16_t length;
-    boost::shared_ptr<cygnal::Element> el;
+    std::uint8_t *tmpptr = in;
+    std::uint16_t length;
+    std::shared_ptr<cygnal::Element> el;
 
-    length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
+    length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
     // go past the length bytes, which leaves us pointing at the raw data
-    tmpptr += sizeof(boost::uint16_t);
+    tmpptr += sizeof(std::uint16_t);
 
     // sanity check the length of the data. The length is usually only zero if
     // we've gone all the way to the end of the object.
diff --git a/cygnal/libamf/amf.h b/cygnal/libamf/amf.h
index 6478de3..389fcc7 100644
--- a/cygnal/libamf/amf.h
+++ b/cygnal/libamf/amf.h
@@ -29,8 +29,7 @@
 
 #include <string>
 #include <cstring>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 
 #include "element.h"
 #include "dsodefs.h"
@@ -48,7 +47,7 @@ const size_t AMF0_NUMBER_SIZE = 0x08;
 /// \brief The header size in bytes of an common AMF object.
 ///	The size of an AMF header is a type field (1 byte), followed by a
 ///	length field. (short)
-const boost::uint8_t AMF_HEADER_SIZE = 3;
+const std::uint8_t AMF_HEADER_SIZE = 3;
 
 /// \brief  The header size of a property.
 ///	A property is a little different. It always assumes the the
@@ -56,20 +55,20 @@ const boost::uint8_t AMF_HEADER_SIZE = 3;
 ///	type byte like a regular AMF object and length is used for the
 ///	data. So a property object header is then only 5 bytes instead
 ///	of the 6 that one assumes would be used.
-const boost::uint8_t AMF_PROP_HEADER_SIZE = 5;
+const std::uint8_t AMF_PROP_HEADER_SIZE = 5;
 
 /// AMF version 0 is supported by default
-const boost::uint8_t AMF_VERSION = 0;
+const std::uint8_t AMF_VERSION = 0;
 
 /// For terminating sequences, a byte with value 0x09 is used.
-const boost::uint8_t TERMINATOR = 0x09;
+const std::uint8_t TERMINATOR = 0x09;
 
 /// \brief The maximum size for a string.
 /// As if there is a parsing error, we'll often see the symptom of the length
 /// for the following value is bogus. Although the length field is a short, it
 /// seems silly to assume we'll ever see a string 65,000 characters long. Still,
 /// it makes sense to make this an adjustable thing.
-const boost::uint16_t SANE_STR_SIZE = 65535;
+const std::uint16_t SANE_STR_SIZE = 65535;
 
 /// Binary representation of an ActionScript object.
 //
@@ -135,7 +134,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeString(const std::string &str);
+    static std::shared_ptr<Buffer> encodeString(const std::string &str);
     
     /// Encode an array of ASCII bytes to its serialized representation.
     // 
@@ -145,7 +144,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeString(boost::uint8_t *data,
+    static std::shared_ptr<Buffer> encodeString(std::uint8_t *data,
 						  size_t size);
 
     /// Encode a String object to its serialized representation.
@@ -154,7 +153,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeNullString();
+    static std::shared_ptr<Buffer> encodeNullString();
 
     /// Encode a Boolean object to its serialized representation.
     //
@@ -162,13 +161,13 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeBoolean(bool flag);
+    static std::shared_ptr<Buffer> encodeBoolean(bool flag);
 
     /// Encode an "Undefined" object to its serialized representation.
     //
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeUndefined();
+    static std::shared_ptr<Buffer> encodeUndefined();
 
     /// Encode a NULL object to its serialized representation.
     //
@@ -176,13 +175,13 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeNull();
+    static std::shared_ptr<Buffer> encodeNull();
 
     /// Encode a "Unsupported" object to its serialized representation.
     //
     /// @return a binary AMF packet in big endian format
     ///
-    static  boost::shared_ptr<Buffer> encodeUnsupported();
+    static  std::shared_ptr<Buffer> encodeUnsupported();
 
     /// Encode an XML object to its serialized representation.
     //
@@ -192,7 +191,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeXMLObject(const boost::uint8_t *data,
+    static std::shared_ptr<Buffer> encodeXMLObject(const std::uint8_t *data,
 						     size_t nbytes);
 
     /// Encode a Typed Object to its serialized representation.
@@ -203,7 +202,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeTypedObject(const cygnal::Element &data);
+    static std::shared_ptr<Buffer> encodeTypedObject(const cygnal::Element &data);
 
     /// Encode a Reference to an object to its serialized representation.
     //
@@ -213,7 +212,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format (header,data)
     ///
-    static boost::shared_ptr<Buffer> encodeReference(boost::uint16_t index);
+    static std::shared_ptr<Buffer> encodeReference(std::uint16_t index);
 
     /// Encode a Movie Clip (swf data) to its serialized representation.
     //
@@ -223,7 +222,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format (header,data)
     ///
-    static boost::shared_ptr<Buffer> encodeMovieClip(const boost::uint8_t *data,
+    static std::shared_ptr<Buffer> encodeMovieClip(const std::uint8_t *data,
 						     size_t size);
 
     /// Encode an ECMA Array to its serialized representation.
@@ -237,7 +236,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeECMAArray(const cygnal::Element &data);
+    static std::shared_ptr<Buffer> encodeECMAArray(const cygnal::Element &data);
 
     /// Encode a Long String to its serialized representation.
     //
@@ -247,7 +246,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeLongString(const boost::uint8_t *data,
+    static std::shared_ptr<Buffer> encodeLongString(const std::uint8_t *data,
 						      size_t size);
 
     /// Encode a Record Set to its serialized representation.
@@ -258,7 +257,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeRecordSet(const boost::uint8_t *data,
+    static std::shared_ptr<Buffer> encodeRecordSet(const std::uint8_t *data,
 						     size_t size);
 
     /// Encode a Date to its serialized representation.
@@ -267,7 +266,7 @@ public:
     /// 
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeDate(const boost::uint8_t *data);
+    static std::shared_ptr<Buffer> encodeDate(const std::uint8_t *data);
 
     /// Encode a Strict Array to its serialized representation.
     //
@@ -280,7 +279,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format (header,data)
     ///
-    static boost::shared_ptr<Buffer> encodeStrictArray(const cygnal::Element &data);
+    static std::shared_ptr<Buffer> encodeStrictArray(const cygnal::Element &data);
     
     /// Encode an object to its serialized representation.
     //
@@ -288,13 +287,13 @@ public:
     /// 
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeObject(const cygnal::Element &data);
+    static std::shared_ptr<Buffer> encodeObject(const cygnal::Element &data);
 
     /// Encode the end of an object to its serialized representation.
     //
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeObjectEnd();
+    static std::shared_ptr<Buffer> encodeObjectEnd();
 
     /// Encode a 64 bit number to its serialized representation.
     //
@@ -302,7 +301,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeNumber(double num);
+    static std::shared_ptr<Buffer> encodeNumber(double num);
 
     /// Encode an Element to its serialized representation.
     //
@@ -310,7 +309,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeElement(boost::shared_ptr<cygnal::Element> el);
+    static std::shared_ptr<Buffer> encodeElement(std::shared_ptr<cygnal::Element> el);
 
     /// Encode an Element to its serialized representation.
     //
@@ -318,7 +317,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    static boost::shared_ptr<Buffer> encodeElement(const cygnal::Element& el);
+    static std::shared_ptr<Buffer> encodeElement(const cygnal::Element& el);
 
     /// Encode a variable to its serialized representation.
     //
@@ -326,7 +325,7 @@ public:
     ///
     /// @return a binary AMF packet in big endian format
     ///
-    boost::shared_ptr<Buffer> encodeProperty(boost::shared_ptr<cygnal::Element> el);
+    std::shared_ptr<Buffer> encodeProperty(std::shared_ptr<cygnal::Element> el);
 
     /// @} end of encoding methods 
 
@@ -342,7 +341,7 @@ public:
     ///
     /// @return The data type from the header
     ///
-    static Element::amf0_type_e extractElementHeader(boost::uint8_t *in)
+    static Element::amf0_type_e extractElementHeader(std::uint8_t *in)
                          { return *(reinterpret_cast<Element::amf0_type_e *>(in)); };
 
     /// Extract an AMF object from an array of raw bytes.
@@ -358,7 +357,7 @@ public:
     ///
     /// @remarks May throw a ParserException
     ///
-    boost::shared_ptr<cygnal::Element> extractAMF(boost::uint8_t *in, boost::uint8_t* tooFar);
+    std::shared_ptr<cygnal::Element> extractAMF(std::uint8_t *in, std::uint8_t* tooFar);
 
     /// Extract an AMF object from an array of raw bytes.
     //
@@ -368,7 +367,7 @@ public:
     ///
     /// @remarks May throw a ParserException
     ///
-    boost::shared_ptr<cygnal::Element> extractAMF(boost::shared_ptr<Buffer> buf);
+    std::shared_ptr<cygnal::Element> extractAMF(std::shared_ptr<Buffer> buf);
     
     /// Extract a Property.
     //
@@ -385,7 +384,7 @@ public:
     ///
     /// @remarks May throw a ParserException
     ///
-    boost::shared_ptr<cygnal::Element> extractProperty(boost::uint8_t *in, boost::uint8_t* tooFar);
+    std::shared_ptr<cygnal::Element> extractProperty(std::uint8_t *in, std::uint8_t* tooFar);
 
     /// Extract a Property.
     //
@@ -399,7 +398,7 @@ public:
     ///
     /// @remarks May throw a ParserException
     ///
-    boost::shared_ptr<cygnal::Element> extractProperty(boost::shared_ptr<Buffer> buf);
+    std::shared_ptr<cygnal::Element> extractProperty(std::shared_ptr<Buffer> buf);
 
     /// @} end of decoding methods 
 
diff --git a/cygnal/libamf/amf_msg.cpp b/cygnal/libamf/amf_msg.cpp
index f18c4ff..ca6da89 100644
--- a/cygnal/libamf/amf_msg.cpp
+++ b/cygnal/libamf/amf_msg.cpp
@@ -27,9 +27,8 @@
 #include "network.h"
 #include "GnashSystemNetHeaders.h"
 
-#include <boost/shared_ptr.hpp>
 #include <string>
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 
 using gnash::GnashException;
 using gnash::log_error;
@@ -40,18 +39,18 @@ using std::endl;
 namespace cygnal
 {
 
-boost::shared_ptr<cygnal::Buffer> 
-AMF_msg::encodeContextHeader(boost::uint16_t version, boost::uint16_t headers,
-			     boost::uint16_t messages)
+std::shared_ptr<cygnal::Buffer>
+AMF_msg::encodeContextHeader(std::uint16_t version, std::uint16_t headers,
+			     std::uint16_t messages)
 {
 //    GNASH_REPORT_FUNCTION;
     size_t size = sizeof(AMF_msg::context_header_t);
-    boost::shared_ptr<cygnal::Buffer> buf (new cygnal::Buffer(size));
+    std::shared_ptr<cygnal::Buffer> buf (new cygnal::Buffer(size));
 
     // use a short as a temporary, as it turns out htons() returns a 32bit int
     // instead when compiling with -O2. This forces appending bytes to get the
     // right size.
-    boost::uint16_t swapped = htons(version);
+    std::uint16_t swapped = htons(version);
     *buf = swapped;
     swapped = htons(headers);
     *buf += swapped;
@@ -61,7 +60,7 @@ AMF_msg::encodeContextHeader(boost::uint16_t version, boost::uint16_t headers,
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 AMF_msg::encodeContextHeader(AMF_msg::context_header_t *head)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -72,17 +71,17 @@ AMF_msg::encodeContextHeader(AMF_msg::context_header_t *head)
 //  00 06 67 65 74 77 61 79                <- getway, message #1
 //  00 04 2f 32 32 39                      <- /229, operation name
 //  00 00 00 0e				   <- byte length of message
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 AMF_msg::encodeMsgHeader(AMF_msg::message_header_t *head)
 {
 //    GNASH_REPORT_FUNCTION;
     // The size of the buffer are the two strings, their lenght fields, and the integer.
-//     size_t size = head->target.size() + head->response.size() + sizeof(boost::uint32_t)
-//         + (sizeof(boost::uint16_t) * 2);
-    boost::shared_ptr<cygnal::Buffer> buf (new cygnal::Buffer(sizeof(AMF_msg::message_header_t)));
+//     size_t size = head->target.size() + head->response.size() + sizeof(std::uint32_t)
+//         + (sizeof(std::uint16_t) * 2);
+    std::shared_ptr<cygnal::Buffer> buf (new cygnal::Buffer(sizeof(AMF_msg::message_header_t)));
 
     // Encode the target URI, which usually looks something like ."getway"
-    boost::uint16_t length = head->target.size();    
+    std::uint16_t length = head->target.size();
     *buf = length;
     *buf += head->target;
 
@@ -92,58 +91,58 @@ AMF_msg::encodeMsgHeader(AMF_msg::message_header_t *head)
     *buf += head->target;
 
     // Encode the size of the encoded message
-    *buf += static_cast<boost::uint32_t>(head->size);
+    *buf += static_cast<std::uint32_t>(head->size);
     
     return buf;
 }
 
 // These methods parse the raw data of the AMF packet
-boost::shared_ptr<AMF_msg::context_header_t>
+std::shared_ptr<AMF_msg::context_header_t>
 AMF_msg::parseContextHeader(cygnal::Buffer &data)
 {
 //    GNASH_REPORT_FUNCTION;
     return parseContextHeader(data.reference(), data.size());
 }
 
-boost::shared_ptr<AMF_msg::context_header_t>
-AMF_msg::parseContextHeader(boost::uint8_t *data, size_t /* size */)
+std::shared_ptr<AMF_msg::context_header_t>
+AMF_msg::parseContextHeader(std::uint8_t *data, size_t /* size */)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<AMF_msg::context_header_t> msg (new AMF_msg::context_header_t);
+    std::shared_ptr<AMF_msg::context_header_t> msg (new AMF_msg::context_header_t);
 
-    boost::uint16_t tmpnum = *reinterpret_cast<boost::uint16_t *>(data);
+    std::uint16_t tmpnum = *reinterpret_cast<std::uint16_t *>(data);
     msg->version  = tmpnum;
-    tmpnum = *reinterpret_cast<boost::uint16_t *>(data + sizeof(boost::uint16_t));
+    tmpnum = *reinterpret_cast<std::uint16_t *>(data + sizeof(std::uint16_t));
     msg->headers   = ntohs(tmpnum);
-    tmpnum = *reinterpret_cast<boost::uint16_t *>(data + sizeof(boost::uint32_t));
+    tmpnum = *reinterpret_cast<std::uint16_t *>(data + sizeof(std::uint32_t));
     msg->messages = ntohs(tmpnum);
 
     return msg;
 }
 
-boost::shared_ptr<AMF_msg::message_header_t>
+std::shared_ptr<AMF_msg::message_header_t>
 AMF_msg::parseMessageHeader(cygnal::Buffer &data)
 {
 //    GNASH_REPORT_FUNCTION;
     return parseMessageHeader(data.reference(), data.size());
 }
 
-boost::shared_ptr<AMF_msg::message_header_t>
-AMF_msg::parseMessageHeader(boost::uint8_t *data, size_t size)
+std::shared_ptr<AMF_msg::message_header_t>
+AMF_msg::parseMessageHeader(std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     AMF amf;
-    boost::uint8_t *tmpptr = data;
-    boost::shared_ptr<AMF_msg::message_header_t> msg (new AMF_msg::message_header_t);
+    std::uint8_t *tmpptr = data;
+    std::shared_ptr<AMF_msg::message_header_t> msg (new AMF_msg::message_header_t);
 
     // The target is a standard length->bytes field
-    boost::uint16_t length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
+    std::uint16_t length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
     if (length == 0) {
         boost::format msg("Length of string shouldn't be zero! amf_msg.cpp::%1%(): %2%");
         msg % __FUNCTION__ % __LINE__;
         throw GnashException(msg.str());
     }
-    tmpptr += sizeof(boost::uint16_t);
+    tmpptr += sizeof(std::uint16_t);
     std::string str1(reinterpret_cast<const char *>(tmpptr), length);
     msg->target = str1;
     if ((tmpptr - data) > static_cast<int>(size)) {
@@ -155,13 +154,13 @@ AMF_msg::parseMessageHeader(boost::uint8_t *data, size_t size)
     }
     
     // The response is a standard length->bytes field
-    length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
+    length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
     if (length == 0) {
         boost::format msg("Length of string shouldn't be zero! amf_msg.cpp::%1%(): %2%");
         msg % __FUNCTION__ % __LINE__;
         throw GnashException(msg.str());
     }
-    tmpptr += sizeof(boost::uint16_t);
+    tmpptr += sizeof(std::uint16_t);
     std::string str2(reinterpret_cast<const char *>(tmpptr), length);
     msg->response = str2;
     tmpptr += length;
@@ -172,7 +171,7 @@ AMF_msg::parseMessageHeader(boost::uint8_t *data, size_t size)
     }    
 
     // The length is a 4 word integer
-    msg->size = ntohl((*(boost::uint32_t *)tmpptr));
+    msg->size = ntohl((*(std::uint32_t *)tmpptr));
 
     if (msg->target.empty()) {
         log_error(_("AMF Message \'target\' field missing!"));
@@ -190,20 +189,20 @@ AMF_msg::parseMessageHeader(boost::uint8_t *data, size_t size)
     return msg;
 }
 
-boost::shared_ptr<AMF_msg::context_header_t>
+std::shared_ptr<AMF_msg::context_header_t>
 AMF_msg::parseAMFPacket(cygnal::Buffer &data)
 {
 //    GNASH_REPORT_FUNCTION;
     return parseAMFPacket(data.reference(), data.size());
 }
 
-boost::shared_ptr<AMF_msg::context_header_t>
-AMF_msg::parseAMFPacket(boost::uint8_t *data, size_t size)
+std::shared_ptr<AMF_msg::context_header_t>
+AMF_msg::parseAMFPacket(std::uint8_t *data, size_t size)
 {
     GNASH_REPORT_FUNCTION;
 //    _messages.push_back();
-    boost::uint8_t *ptr = data + sizeof(AMF_msg::context_header_t);
-    boost::shared_ptr<context_header_t> header = AMF_msg::parseContextHeader(data, size);
+    std::uint8_t *ptr = data + sizeof(AMF_msg::context_header_t);
+    std::shared_ptr<context_header_t> header = AMF_msg::parseContextHeader(data, size);
 
 //     log_debug("%s: %s", __PRETTY_FUNCTION__, hexify(data, size, true));
     
@@ -211,13 +210,13 @@ AMF_msg::parseAMFPacket(boost::uint8_t *data, size_t size)
     /// Read all the messages from the AMF packet
     try {
         for (int i=0; i<header->messages; i++) {
-            boost::shared_ptr<AMF_msg::amf_message_t> msgpkt(new AMF_msg::amf_message_t);
-            boost::shared_ptr<AMF_msg::message_header_t> msghead = AMF_msg::parseMessageHeader(ptr, size);
+            std::shared_ptr<AMF_msg::amf_message_t> msgpkt(new AMF_msg::amf_message_t);
+            std::shared_ptr<AMF_msg::message_header_t> msghead = AMF_msg::parseMessageHeader(ptr, size);
             if (msghead) {
                 ptr += msghead->target.size() + msghead->response.size()
-                    + (sizeof(boost::uint16_t) * 2)
-                    + (sizeof(boost::uint32_t));
-                boost::shared_ptr<cygnal::Element> el = amf.extractAMF(ptr, ptr+size);
+                    + (sizeof(std::uint16_t) * 2)
+                    + (sizeof(std::uint32_t));
+                std::shared_ptr<cygnal::Element> el = amf.extractAMF(ptr, ptr+size);
                 msgpkt->header.target = msghead->target;
                 msgpkt->header.response = msghead->response;
                 msgpkt->header.size = msghead->size;
@@ -234,7 +233,7 @@ AMF_msg::parseAMFPacket(boost::uint8_t *data, size_t size)
     return header;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 AMF_msg::encodeAMFPacket(const std::string & /* target */,
                          const std::string & /*response */, size_t /* size */)
 {
@@ -243,29 +242,29 @@ AMF_msg::encodeAMFPacket(const std::string & /* target */,
     return encodeAMFPacket();
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 AMF_msg::encodeAMFPacket()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer);
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer);
 
     // Encode the packet header
-    boost::shared_ptr<cygnal::Buffer> buf1 = encodeContextHeader(0, 0, _messages.size());
+    std::shared_ptr<cygnal::Buffer> buf1 = encodeContextHeader(0, 0, _messages.size());
     *buf = buf1;
 
     // Now encode all the messages
 
-    std::vector<boost::shared_ptr<AMF_msg::amf_message_t> >::iterator it;
+    std::vector<std::shared_ptr<AMF_msg::amf_message_t> >::iterator it;
     for (it = _messages.begin(); it != _messages.end(); ++it) {
-        boost::shared_ptr<AMF_msg::amf_message_t> msg = (*(it));
+        std::shared_ptr<AMF_msg::amf_message_t> msg = (*(it));
 
-        boost::shared_ptr<cygnal::Buffer> buf2 = encodeMsgHeader(msg->header.target,
+        std::shared_ptr<cygnal::Buffer> buf2 = encodeMsgHeader(msg->header.target,
 							     msg->header.response,
 							     msg->header.size);
 
 // 	AMF_msg::dump(msg->header);
 // 	msg->data->dump();
-        boost::shared_ptr<cygnal::Buffer> buf3 = msg->data->encode();
+        std::shared_ptr<cygnal::Buffer> buf3 = msg->data->encode();
 	*buf += buf2;
 	*buf += buf3;
     }
@@ -273,27 +272,27 @@ AMF_msg::encodeAMFPacket()
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 AMF_msg::encodeMsgHeader(const std::string &target,
                          const std::string &response, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
-    size_t total = target.size() + sizeof(boost::uint16_t);
-    total += response.size() + sizeof(boost::uint16_t);
-    total += sizeof(boost::uint32_t);
+    size_t total = target.size() + sizeof(std::uint16_t);
+    total += response.size() + sizeof(std::uint16_t);
+    total += sizeof(std::uint32_t);
     
-    boost::shared_ptr<cygnal::Buffer> buf (new cygnal::Buffer(total));
-    boost::uint16_t length = target.size();
-    swapBytes(&length, sizeof(boost::uint16_t));
+    std::shared_ptr<cygnal::Buffer> buf (new cygnal::Buffer(total));
+    std::uint16_t length = target.size();
+    swapBytes(&length, sizeof(std::uint16_t));
     *buf += length;
     *buf += target;
 
     length = response.size();
-    swapBytes(&length, sizeof(boost::uint16_t));
+    swapBytes(&length, sizeof(std::uint16_t));
     *buf += length;
     *buf += response;
 
-    boost::uint32_t swapped = htonl(size);
+    std::uint32_t swapped = htonl(size);
     *buf += swapped;
     
     return buf;
@@ -322,9 +321,9 @@ AMF_msg::dump()
 {
 //    GNASH_REPORT_FUNCTION;
     cout << "AMF Packet has " << _messages.size() << " messages." << endl;
-    std::vector<boost::shared_ptr<AMF_msg::amf_message_t> >::iterator it;
+    std::vector<std::shared_ptr<AMF_msg::amf_message_t> >::iterator it;
     for (it = _messages.begin(); it != _messages.end(); ++it) {
-        boost::shared_ptr<AMF_msg::amf_message_t> msg = (*(it));
+        std::shared_ptr<AMF_msg::amf_message_t> msg = (*(it));
         AMF_msg::dump(msg->header);
         msg->data->dump();
     }
diff --git a/cygnal/libamf/amf_msg.h b/cygnal/libamf/amf_msg.h
index a8da5c0..338cada 100644
--- a/cygnal/libamf/amf_msg.h
+++ b/cygnal/libamf/amf_msg.h
@@ -30,8 +30,7 @@
 #include <string>
 #include <vector>
 
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 
 #include "element.h"
 #include "dsodefs.h"
@@ -58,9 +57,9 @@ class DSOEXPORT AMF_msg {
         AMF3 = 0x11
     } amf_version_e;
     typedef struct {
-        boost::uint16_t version;
-        boost::uint16_t headers;
-        boost::uint16_t messages;
+        std::uint16_t version;
+        std::uint16_t headers;
+        std::uint16_t messages;
     } context_header_t;
     typedef struct {
         std::string     target;
@@ -69,41 +68,41 @@ class DSOEXPORT AMF_msg {
     } message_header_t;
     typedef struct {
         message_header_t header;
-        boost::shared_ptr<cygnal::Element> data;
+        std::shared_ptr<cygnal::Element> data;
     } amf_message_t;
 
-    size_t addMessage(boost::shared_ptr<amf_message_t> msg)
+    size_t addMessage(std::shared_ptr<amf_message_t> msg)
     {
         _messages.push_back(msg); return _messages.size();
     };
-    boost::shared_ptr<amf_message_t> &getMessage(int x) { return _messages[x]; };
+    std::shared_ptr<amf_message_t> &getMessage(int x) { return _messages[x]; };
     size_t messageCount() { return _messages.size(); };
     
     // These methods create the raw data of the AMF packet from Elements
-    static boost::shared_ptr<cygnal::Buffer> encodeContextHeader(context_header_t *head);
-    static boost::shared_ptr<cygnal::Buffer> encodeContextHeader(boost::uint16_t version,
-							      boost::uint16_t headers,
-							      boost::uint16_t messages);
+    static std::shared_ptr<cygnal::Buffer> encodeContextHeader(context_header_t *head);
+    static std::shared_ptr<cygnal::Buffer> encodeContextHeader(std::uint16_t version,
+							      std::uint16_t headers,
+							      std::uint16_t messages);
 
-    static boost::shared_ptr<cygnal::Buffer> encodeMsgHeader(message_header_t *head);
-    static boost::shared_ptr<cygnal::Buffer> encodeMsgHeader(const std::string &target,
+    static std::shared_ptr<cygnal::Buffer> encodeMsgHeader(message_header_t *head);
+    static std::shared_ptr<cygnal::Buffer> encodeMsgHeader(const std::string &target,
                                           const std::string &response, size_t size);
     
     // These methods parse the raw data of the AMF packet into data structures
-    static boost::shared_ptr<context_header_t> parseContextHeader(cygnal::Buffer &data);
-    static boost::shared_ptr<context_header_t> parseContextHeader(boost::uint8_t *data, size_t size);
+    static std::shared_ptr<context_header_t> parseContextHeader(cygnal::Buffer &data);
+    static std::shared_ptr<context_header_t> parseContextHeader(std::uint8_t *data, size_t size);
     
-    static boost::shared_ptr<message_header_t> parseMessageHeader(cygnal::Buffer &data);
-    static boost::shared_ptr<message_header_t> parseMessageHeader(boost::uint8_t *data, size_t size);
+    static std::shared_ptr<message_header_t> parseMessageHeader(cygnal::Buffer &data);
+    static std::shared_ptr<message_header_t> parseMessageHeader(std::uint8_t *data, size_t size);
 
     // These methods parse the entire packet. which consists of multiple messages
-    boost::shared_ptr<context_header_t> parseAMFPacket(cygnal::Buffer &buf);
-    boost::shared_ptr<context_header_t> parseAMFPacket(boost::uint8_t *data,
+    std::shared_ptr<context_header_t> parseAMFPacket(cygnal::Buffer &buf);
+    std::shared_ptr<context_header_t> parseAMFPacket(std::uint8_t *data,
 						       size_t size);
 
     // This methods create an entire packet from multiple messages, already parsed in
-    boost::shared_ptr<cygnal::Buffer> encodeAMFPacket();
-    boost::shared_ptr<cygnal::Buffer> encodeAMFPacket(const std::string &target,
+    std::shared_ptr<cygnal::Buffer> encodeAMFPacket();
+    std::shared_ptr<cygnal::Buffer> encodeAMFPacket(const std::string &target,
 				     const std::string &response, size_t size);
     
     static void dump(context_header_t &data);
@@ -111,7 +110,7 @@ class DSOEXPORT AMF_msg {
     void dump();
     
 private:
-    std::vector<boost::shared_ptr<amf_message_t> > _messages;
+    std::vector<std::shared_ptr<amf_message_t> > _messages;
 //     context_header_t    _context_header;
 };
 
diff --git a/cygnal/libamf/buffer.cpp b/cygnal/libamf/buffer.cpp
index ab6366d..b287759 100644
--- a/cygnal/libamf/buffer.cpp
+++ b/cygnal/libamf/buffer.cpp
@@ -20,7 +20,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <iostream>
 #include <boost/random/uniform_int.hpp>
 #include <boost/random/mersenne_twister.hpp>
@@ -43,8 +43,8 @@ namespace cygnal
 /// @param digit The digit as a hex value
 ///
 /// @return The byte as a decimal value.
-boost::uint8_t
-Buffer::hex2digit (boost::uint8_t digit)
+std::uint8_t
+Buffer::hex2digit (std::uint8_t digit)
 {  
     if (digit == 0)
         return 0;
@@ -73,10 +73,10 @@ Buffer::hex2mem(const std::string &str)
 //    GNASH_REPORT_FUNCTION;
     size_t count = str.size();
     size_t size = (count/3) + 4;
-    boost::uint8_t ch = 0;
+    std::uint8_t ch = 0;
     
-    boost::uint8_t *ptr = const_cast<boost::uint8_t *>(reinterpret_cast<const boost::uint8_t *>(str.c_str()));
-    boost::uint8_t *end = ptr + count;
+    std::uint8_t *ptr = const_cast<std::uint8_t *>(reinterpret_cast<const std::uint8_t *>(str.c_str()));
+    std::uint8_t *end = ptr + count;
 
     init(size);
     
@@ -126,7 +126,7 @@ Buffer::init(size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     if (!_data) {
-	_data.reset(new boost::uint8_t[size]);
+	_data.reset(new std::uint8_t[size]);
 	_seekptr = _data.get();
     }
     _seekptr = _data.get();
@@ -142,7 +142,7 @@ Buffer::init(size_t size)
 
 /// \brief Create a new Buffer with the default size
 Buffer::Buffer() 
-    : _seekptr(0)
+    : _seekptr(nullptr)
 {
 //    GNASH_REPORT_FUNCTION;
     _nbytes = cygnal::NETBUFSIZE;
@@ -151,7 +151,7 @@ Buffer::Buffer()
     
 /// \brief Create a new Buffer with a size other than the default
 Buffer::Buffer(size_t nbytes)
-    : _seekptr(0)
+    : _seekptr(nullptr)
 {
 //    GNASH_REPORT_FUNCTION;
     _nbytes = nbytes;
@@ -180,7 +180,7 @@ Buffer::~Buffer()
 		  (void *)_data.get(), _nbytes,
 		  (float)((now.tv_sec - _stamp.tv_sec) + ((now.tv_nsec - _stamp.tv_nsec)/1e9)));
 #endif
-        _seekptr = 0;
+        _seekptr = nullptr;
         _nbytes = 0;
     }
 }
@@ -195,7 +195,7 @@ Buffer::~Buffer()
 ///		
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::copy(boost::uint8_t *data, size_t nbytes)
+Buffer::copy(std::uint8_t *data, size_t nbytes)
 {    
 //    GNASH_REPORT_FUNCTION;
     if (_data) {
@@ -221,7 +221,7 @@ Buffer::copy(boost::uint8_t *data, size_t nbytes)
 ///		
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::append(boost::uint8_t *data, size_t nbytes)
+Buffer::append(std::uint8_t *data, size_t nbytes)
 {
 //    GNASH_REPORT_FUNCTION;
     if (_data) {
@@ -262,7 +262,7 @@ Buffer &
 Buffer::operator+=(cygnal::Element::amf0_type_e type)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t nb = static_cast<boost::uint8_t>(type);
+    std::uint8_t nb = static_cast<std::uint8_t>(type);
     
     return operator+=(nb);
 }
@@ -276,7 +276,7 @@ Buffer &
 Buffer::operator+=(char byte)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t nb = static_cast<boost::uint8_t>(byte);
+    std::uint8_t nb = static_cast<std::uint8_t>(byte);
     return operator+=(nb);
 }
 
@@ -289,7 +289,7 @@ Buffer &
 Buffer::operator+=(bool flag)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t nb = static_cast<boost::uint8_t>(flag);
+    std::uint8_t nb = static_cast<std::uint8_t>(flag);
     return operator+=(nb);
 }
 
@@ -299,12 +299,12 @@ Buffer::operator+=(bool flag)
 /// 
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::operator+=(boost::uint8_t byte)
+Buffer::operator+=(std::uint8_t byte)
 {
 //    GNASH_REPORT_FUNCTION;
     if ((_seekptr + 1) <= (_data.get() + _nbytes)) {
 	*_seekptr = byte;
-	_seekptr += sizeof(boost::uint8_t);
+	_seekptr += sizeof(std::uint8_t);
     }
     return *this;
 }
@@ -319,7 +319,7 @@ Buffer &
 Buffer::operator+=(const char *str)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = const_cast<boost::uint8_t *>(reinterpret_cast<const boost::uint8_t *>(str));
+    std::uint8_t *ptr = const_cast<std::uint8_t *>(reinterpret_cast<const std::uint8_t *>(str));
     return append(ptr, strlen(str));
     
 }
@@ -334,7 +334,7 @@ Buffer &
 Buffer::operator+=(const std::string &str)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = const_cast<boost::uint8_t *>(reinterpret_cast<const boost::uint8_t *>(str.c_str()));
+    std::uint8_t *ptr = const_cast<std::uint8_t *>(reinterpret_cast<const std::uint8_t *>(str.c_str()));
     return append(ptr, str.size());
     
 }
@@ -348,7 +348,7 @@ Buffer &
 Buffer::operator+=(double num)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(&num);
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(&num);
     return append(ptr, AMF0_NUMBER_SIZE);
 }
 
@@ -358,11 +358,11 @@ Buffer::operator+=(double num)
 /// 
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::operator+=(boost::uint16_t length)
+Buffer::operator+=(std::uint16_t length)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(&length);
-    return append(ptr, sizeof(boost::uint16_t));
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(&length);
+    return append(ptr, sizeof(std::uint16_t));
 }
 
 /// \brief Append an integer to existing data in the buffer.
@@ -371,11 +371,11 @@ Buffer::operator+=(boost::uint16_t length)
 /// 
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::operator+=(boost::uint32_t length)
+Buffer::operator+=(std::uint32_t length)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(&length);
-    return append(ptr, sizeof(boost::uint32_t));
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(&length);
+    return append(ptr, sizeof(std::uint32_t));
 }
 
 /// \brief Append a Buffer class to existing data in the buffer.
@@ -384,7 +384,7 @@ Buffer::operator+=(boost::uint32_t length)
 /// 
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::operator+=(boost::shared_ptr<Buffer> &buf)
+Buffer::operator+=(std::shared_ptr<Buffer> buf)
 {
 //    GNASH_REPORT_FUNCTION;
     append(buf->reference(), buf->allocated());
@@ -419,7 +419,7 @@ Buffer &
 Buffer::operator=(const std::string &str)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = const_cast<boost::uint8_t *>(reinterpret_cast<const boost::uint8_t *>(str.c_str()));
+    std::uint8_t *ptr = const_cast<std::uint8_t *>(reinterpret_cast<const std::uint8_t *>(str.c_str()));
     return copy(ptr, str.size());
 }
 
@@ -427,7 +427,7 @@ Buffer &
 Buffer::operator=(const char *str)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = const_cast<boost::uint8_t *>(reinterpret_cast<const boost::uint8_t *>(str));
+    std::uint8_t *ptr = const_cast<std::uint8_t *>(reinterpret_cast<const std::uint8_t *>(str));
     return copy(ptr, strlen(str));
 }
 
@@ -441,7 +441,7 @@ Buffer &
 Buffer::operator=(double num)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(&num);
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(&num);
     return copy(ptr, AMF0_NUMBER_SIZE);
 }
 
@@ -452,11 +452,11 @@ Buffer::operator=(double num)
 /// 
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::operator=(boost::uint16_t length)
+Buffer::operator=(std::uint16_t length)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(&length);
-    return copy(ptr, sizeof(boost::uint16_t));
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(&length);
+    return copy(ptr, sizeof(std::uint16_t));
 }
 
 /// \brief Copy a AMF0 type into the buffer.
@@ -468,7 +468,7 @@ Buffer::operator=(boost::uint16_t length)
 Buffer &
 Buffer::operator=(cygnal::Element::amf0_type_e type)
 {
-    boost::uint8_t nb = static_cast<boost::uint8_t>(type);
+    std::uint8_t nb = static_cast<std::uint8_t>(type);
     return operator=(nb);
 }
 
@@ -481,7 +481,7 @@ Buffer::operator=(cygnal::Element::amf0_type_e type)
 Buffer &
 Buffer::operator=(bool flag)
 {
-    boost::uint8_t nb = static_cast<boost::uint8_t>(flag);
+    std::uint8_t nb = static_cast<std::uint8_t>(flag);
     return operator=(nb);
 }
 
@@ -492,7 +492,7 @@ Buffer::operator=(bool flag)
 /// 
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::operator=(boost::uint8_t byte)
+Buffer::operator=(std::uint8_t byte)
 {
 //    GNASH__FUNCTION;
    
@@ -506,7 +506,7 @@ Buffer::operator=(boost::uint8_t byte)
 /// 
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::operator=(boost::uint8_t *data)
+Buffer::operator=(std::uint8_t *data)
 {
 //    GNASH_REPORT_FUNCTION;
     if (data) {
@@ -524,7 +524,7 @@ Buffer::operator=(boost::uint8_t *data)
 /// 
 /// @return A reference to a Buffer.
 Buffer &
-Buffer::operator=(boost::shared_ptr<Buffer> &buf)
+Buffer::operator=(std::shared_ptr<Buffer> buf)
 {
 //    GNASH_REPORT_FUNCTION;
     copy(buf->reference(), buf->size());
@@ -559,16 +559,16 @@ Buffer::operator==(Buffer &buf)
 /// @param byte The byte to remove from the buffer.
 ///
 /// @return A real pointer to the base address of the buffer.
-boost::uint8_t *
-Buffer::remove(boost::uint8_t c)
+std::uint8_t *
+Buffer::remove(std::uint8_t c)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *start = std::find(begin(), end(), c);
+    std::uint8_t *start = std::find(begin(), end(), c);
 
 //    log_debug("Byte is at %x", (void *)start);
     
-    if (start == 0) {
-	return 0;
+    if (start == nullptr) {
+	return nullptr;
     }
     
     std::copy(start + 1, end(), start);
@@ -587,7 +587,7 @@ Buffer::remove(boost::uint8_t c)
 ///		Buffer
 ///
 /// @return A real pointer to the base address of the Buffer.
-boost::uint8_t *
+std::uint8_t *
 Buffer::remove(int start)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -611,7 +611,7 @@ Buffer::remove(int start)
 /// @param range The amount of bytes to remove from the Buffer.
 ///
 /// @return A real pointer to the base address of the Buffer.
-boost::uint8_t *
+std::uint8_t *
 Buffer::remove(int start, int range)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -665,7 +665,7 @@ Buffer &
 Buffer::resize(size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::scoped_array<boost::uint8_t> tmp;
+    std::unique_ptr<std::uint8_t[]> tmp;
 
     // If there is no size, don't do anything
     if (size == 0) {
@@ -675,7 +675,7 @@ Buffer::resize(size_t size)
     // If we don't have any data yet in this buffer, resizing is cheap, as
     // we don't havce to copy any data.
     if (_seekptr == _data.get()) {
-	_data.reset(new boost::uint8_t[size]);
+	_data.reset(new std::uint8_t[size]);
 	_nbytes= size;
 	return *this;
     }
@@ -711,7 +711,7 @@ Buffer::resize(size_t size)
 	    gnash::log_error(_("cygnal::Buffer::resize(%d): Truncating data (%d bytes) while resizing!"), size, used - size);
 	    used = size;
 	}
-	boost::uint8_t *newptr = new boost::uint8_t[size];
+	std::uint8_t *newptr = new std::uint8_t[size];
 	std::copy(_data.get(), _data.get() + used, newptr);
 	_data.reset(newptr);
 	
diff --git a/cygnal/libamf/buffer.h b/cygnal/libamf/buffer.h
index 864b78a..709e1ff 100644
--- a/cygnal/libamf/buffer.h
+++ b/cygnal/libamf/buffer.h
@@ -24,9 +24,7 @@
 #endif
 
 #include <vector>
-#include <boost/cstdint.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 #include <iostream> // for output operator
 #include <string>
 
@@ -147,7 +145,7 @@ public:
     /// @param nbytes The number of bytes to copy.
     ///		
     /// @return A reference to a Buffer.
-    Buffer &copy(boost::uint8_t *data, size_t nbytes);
+    Buffer &copy(std::uint8_t *data, size_t nbytes);
     
     /// \brief Copy a Buffer class into the buffer.
     ///		This overwrites all data, and resets the seek ptr.
@@ -156,7 +154,7 @@ public:
     /// 
     /// @return A reference to a Buffer.
     Buffer &operator=(Buffer &buf);
-    Buffer &operator=(boost::shared_ptr<Buffer>& buf);
+    Buffer &operator=(std::shared_ptr<Buffer> buf);
     /// \brief Copy a string into the buffer.
     ///		This overwrites all data, and resets the seek ptr.
     ///
@@ -179,21 +177,21 @@ public:
     /// @param num A numeric short value.
     /// 
     /// @return A reference to a Buffer.
-    Buffer &operator=(boost::uint16_t length);
+    Buffer &operator=(std::uint16_t length);
     /// \brief Copy a byte into the buffer.
     ///		This overwrites all data, and resets the seek ptr.
     ///
     /// @param byte A single byte.
     /// 
     /// @return A reference to a Buffer.
-    Buffer &operator=(boost::uint8_t byte);
+    Buffer &operator=(std::uint8_t byte);
     /// \brief Copy a byte into the buffer.
     ///		This overwrites all data, and resets the seek ptr.
     ///
     /// @param byte A pointer to a single byte.
     /// 
     /// @return A reference to a Buffer.
-    Buffer &operator=(boost::uint8_t *byte);
+    Buffer &operator=(std::uint8_t *byte);
     /// \brief Copy a AMF0 type into the buffer.
     ///		This overwrites all data, and resets the seek ptr.
     ///
@@ -217,7 +215,7 @@ public:
     /// @param nbytes The number of bytes to append.
     ///		
     /// @return A reference to a Buffer.
-    Buffer &append(boost::uint8_t *data, size_t nbytes);
+    Buffer &append(std::uint8_t *data, size_t nbytes);
 
     /// \brief Append a Buffer class to existing data in the buffer.
     ///
@@ -225,7 +223,7 @@ public:
     /// 
     /// @return A reference to a Buffer.
     Buffer &operator+=(Buffer &buf);
-    Buffer &operator+=(boost::shared_ptr<Buffer> &buf);
+    Buffer &operator+=(std::shared_ptr<Buffer> buf);
 
     /// \brief Append a string to existing data in the buffer.
     ///
@@ -247,19 +245,19 @@ public:
     /// @param num A numeric integer value.
     /// 
     /// @return A reference to a Buffer.
-    Buffer &operator+=(boost::uint32_t length);
+    Buffer &operator+=(std::uint32_t length);
     /// \brief Append a short to existing data in the buffer.
     /// 
     /// @param num A numeric short value.
     /// 
     /// @return A reference to a Buffer.
-    Buffer &operator+=(boost::uint16_t length);
+    Buffer &operator+=(std::uint16_t length);
     /// \brief Append a byte to existing data in the buffer.
     ///
     /// @param byte A single byte.
     /// 
     /// @return A reference to a Buffer.
-    Buffer &operator+=(boost::uint8_t byte);
+    Buffer &operator+=(std::uint8_t byte);
     Buffer &operator+=(char byte);
     /// \brief Append an AMF0 type to existing data in the buffer.
     ///
@@ -282,7 +280,7 @@ public:
     /// @param byte The byte to remove from the buffer.
     ///
     /// @return A real pointer to the base address of the buffer.
-    boost::uint8_t *remove(boost::uint8_t c);
+    std::uint8_t *remove(std::uint8_t c);
     /// \brief Drop a byte without resizing.
     ///		This will remove the byte from the Buffer, and then
     ///		move the remaining data to be in the correct
@@ -292,7 +290,7 @@ public:
     ///		Buffer
     ///
     /// @return A real pointer to the base address of the Buffer.
-    boost::uint8_t *remove(int index);
+    std::uint8_t *remove(int index);
     /// \brief Drop bytes without resizing.
     ///		This will remove the bytes from the Buffer, and then
     ///		move the remaining data to be in the correct
@@ -307,22 +305,22 @@ public:
     /// @param range The amoiunt of bytes to remove from the Buffer.
     ///
     /// @return A real pointer to the base address of the Buffer.
-    boost::uint8_t *remove(int start, int range);
+    std::uint8_t *remove(int start, int range);
 //    Network::byte_t *remove(char c);
     
     /// \brief Return the base address of the Buffer.
     ///
     /// @return A real pointer to the base address of the Buffer.
-    boost::uint8_t *begin() { return _data.get() ; };
-    boost::uint8_t *reference() { return _data.get(); }
-    const boost::uint8_t *reference() const { return _data.get(); }
+    std::uint8_t *begin() { return _data.get() ; };
+    std::uint8_t *reference() { return _data.get(); }
+    const std::uint8_t *reference() const { return _data.get(); }
 
     /// \brief Return the last address of the Buffer
     ///		Which is the base address plus the total size of the
     ///		Buffer.
     ///
     /// @return A real pointer to the last address of the Buffer with data.
-    boost::uint8_t *end() { return _seekptr; };
+    std::uint8_t *end() { return _seekptr; };
 
     /// \brief Get the size of the Buffer.
     ///
@@ -341,7 +339,7 @@ public:
     void setSize(size_t nbytes) { _nbytes = nbytes; };
 
     /// \brief Set the real pointer to a block of Memory.
-    void setPointer(boost::uint8_t *ptr) { _data.reset(ptr); };
+    void setPointer(std::uint8_t *ptr) { _data.reset(ptr); };
     
     /// \brief Test equivalance against another Buffer.
     ///		This compares all the data on the current Buffer with
@@ -359,7 +357,7 @@ public:
     ///		get.
     ///
     /// @return The byte at the specified location.
-    boost::uint8_t operator[](int index) { return _data[index]; };
+    std::uint8_t operator[](int index) { return _data[index]; };
 
     /// \brief Get the byte at a specified location.
     ///
@@ -367,7 +365,7 @@ public:
     ///		get.
     ///
     /// @return A real pointer to the byte at the specified location.
-    boost::uint8_t *at(int index) { return _data.get() + index; };
+    std::uint8_t *at(int index) { return _data.get() + index; };
 
     /// \brief How much room is left in the buffer past the seek pointer.
     ///		This is primarily used to see if the buffer is fully
@@ -388,7 +386,7 @@ public:
     /// @param ptr the real pointer to set the seek pointer to
     ///
     /// @return nothing
-    void setSeekPointer(boost::uint8_t *ptr) { _seekptr = ptr; };
+    void setSeekPointer(std::uint8_t *ptr) { _seekptr = ptr; };
     void setSeekPointer(off_t offset) { _seekptr = _data.get() + offset; };
     
     ///  \brief Dump the internal data of this class in a human readable form.
@@ -401,12 +399,12 @@ public:
     /// \var _seekptr
     ///	\brief This is a pointer to the address in the Buffer to
     ///		write data to then next time some is appended.
-    boost::uint8_t *_seekptr;
+    std::uint8_t *_seekptr;
     
     /// \var _data
     ///	\brief This is the container of the actual data in this
     ///		Buffer.
-    boost::scoped_array<boost::uint8_t> _data;
+    std::unique_ptr<std::uint8_t[]> _data;
     
     /// \var _nbytes
     ///	\brief This is the total allocated size of the Buffer.
@@ -434,7 +432,7 @@ public:
     /// @param digit The digit as a hex value
     ///
     /// @return The byte as a decimal value.
-    boost::uint8_t hex2digit (boost::uint8_t digit);
+    std::uint8_t hex2digit (std::uint8_t digit);
 };
 
 /// \brief Dump to the specified output stream.
diff --git a/cygnal/libamf/element.cpp b/cygnal/libamf/element.cpp
index f87d452..be9f7d0 100644
--- a/cygnal/libamf/element.cpp
+++ b/cygnal/libamf/element.cpp
@@ -22,8 +22,7 @@
 #include <vector>
 #include <cmath>
 #include <climits>
-#include <boost/shared_ptr.hpp>
-#include <boost/cstdint.hpp> // for boost::?int??_t
+#include <cstdint> // for boost::?int??_t
 
 #include "buffer.h"
 #include "log.h"
@@ -66,7 +65,7 @@ const char *astype_str[] = {
 
 /// \brief Create a new Element with no data type.
 Element::Element()
-    : _name(0),
+    : _name(nullptr),
       _type(NOTYPE)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -84,7 +83,7 @@ Element::~Element()
 ///
 /// @param data The double to use as the value for this Element.
 Element::Element(double indata)
-    : _name(0),
+    : _name(nullptr),
       _type(NOTYPE)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -97,7 +96,7 @@ Element::Element(double indata)
 ///
 /// @param num The double to use as the value of the property.
 Element::Element(const string &name, double num)
-    : _name(0),
+    : _name(nullptr),
       _type(NOTYPE)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -110,7 +109,7 @@ Element::Element(const string &name, double num)
 ///
 /// @remarks This assume the data string is already NULL terminated.
 Element::Element(const string &indata)
-    : _name(0),
+    : _name(nullptr),
       _type(NOTYPE)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -119,7 +118,7 @@ Element::Element(const string &indata)
 
 /// \overload Element(const std::string &data)
 Element::Element(const char *indata)
-    : _name(0),
+    : _name(nullptr),
       _type(NOTYPE)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -132,7 +131,7 @@ Element::Element(const char *indata)
 ///
 /// @param data The ASCII string to use as the value of the property.
 Element::Element(const string &name, const string &data)
-    : _name(0),
+    : _name(nullptr),
       _type(NOTYPE)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -143,7 +142,7 @@ Element::Element(const string &name, const string &data)
 ///
 /// @param data The boolean to use as the value for this Element.
 Element::Element(bool data)
-    : _name(0),
+    : _name(nullptr),
       _type(NOTYPE)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -156,7 +155,7 @@ Element::Element(bool data)
 ///
 /// @param data The boolean to use as the value of the property.
 Element::Element(const string &name, bool indata)
-    : _name(0),
+    : _name(nullptr),
       _type(NOTYPE)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -215,7 +214,7 @@ Element::clear()
 {
 //    GNASH_REPORT_FUNCTION;
 	delete[] _name;
-	_name = 0;
+	_name = nullptr;
 	_buffer.reset();
 }
 
@@ -250,12 +249,12 @@ Element::to_number() const
 /// \brief Cast the data in this Element to a short value.
 ///
 /// @return short value.
-boost::uint16_t
+std::uint16_t
 Element::to_short() const
 {
 //    GNASH_REPORT_FUNCTION;
     if (_buffer) {
-	return *(reinterpret_cast<boost::uint16_t *>(_buffer->reference()));
+	return *(reinterpret_cast<std::uint16_t *>(_buffer->reference()));
     }
 //    return ::nan("NaN");
     return -1;
@@ -264,12 +263,12 @@ Element::to_short() const
 /// \brief Cast the data in this Element to a short value.
 ///
 /// @return short value.
-boost::uint32_t
+std::uint32_t
 Element::to_integer() const
 {
 //    GNASH_REPORT_FUNCTION;
     if (_buffer) {
-	return *(reinterpret_cast<boost::uint32_t *>(_buffer->reference()));
+	return *(reinterpret_cast<std::uint32_t *>(_buffer->reference()));
     }
 //    return ::nan("NaN");
     return -1;
@@ -288,7 +287,7 @@ Element::to_string() const
 	}
 	return "NULL";
     }
-    return 0;
+    return nullptr;
 }
 
 /// \brief Cast the data in this Element to a boolean value.
@@ -307,24 +306,24 @@ Element::to_bool() const
 /// \brief Cast the data in this Element to an real pointer to data.
 ///
 /// @return A real pointer to the base address of the raw data in memory.
-boost::uint8_t *
+std::uint8_t *
 Element::to_reference()
 {
 //    GNASH_REPORT_FUNCTION;
     if (_buffer) {
 	return _buffer->reference();
     }
-    return 0;
+    return nullptr;
 }
 
-const boost::uint8_t *
+const std::uint8_t *
 Element::to_reference() const
 {
 //    GNASH_REPORT_FUNCTION;
     if (_buffer) {
 	return _buffer->reference();
     }
-    return 0;
+    return nullptr;
 }
 
 /// \brief Test equivalance against another Element.
@@ -413,7 +412,7 @@ Element::calculateSize(cygnal::Element &el) const
     // If thr name is set, it's a property, so the length is
     // prefixed to the name string.
     if (el.getNameSize()) {
-	outsize += el.getNameSize() + sizeof(boost::uint16_t);
+	outsize += el.getNameSize() + sizeof(std::uint16_t);
     }
     // If there is any data, then the size of the data plus the header
     // of the type and the length is next.
@@ -424,14 +423,14 @@ Element::calculateSize(cygnal::Element &el) const
     // If an array has no data, it's undefined, so has a length of zero.
     if (el.getType() == Element::STRICT_ARRAY_AMF0) {
 	if (el.getDataSize() == 0) {
-	    outsize = sizeof(boost::uint32_t) + 1;
+	    outsize = sizeof(std::uint32_t) + 1;
 	}
     }
     
     // More complex messages have child elements, either properties or
     // the items in an array, If we have children, count up their size too.
     // Calculate the total size of the message
-    std::vector<boost::shared_ptr<cygnal::Element> > props = el.getProperties();
+    std::vector<std::shared_ptr<cygnal::Element> > props = el.getProperties();
     for (size_t i=0; i<props.size(); i++) {
 	outsize += props[i]->getDataSize();
 	if (props[i]->getNameSize()) {
@@ -450,7 +449,7 @@ Element::calculateSize(cygnal::Element &el) const
 ///	properties into raw binary data in big endoan format.
 ///
 /// @return a smart pointer to a Buffer class.
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 Element::encode()
 {
 //    GNASH_REPORT_FUNCTION;
@@ -458,12 +457,12 @@ Element::encode()
     return encode(false);
 }
 
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 Element::encode(bool notobject)
 {
 //    GNASH_REPORT_FUNCTION;
     size_t size = 0;
-    boost::shared_ptr<Buffer> buf;
+    std::shared_ptr<Buffer> buf;
 
     if (_type == Element::OBJECT_AMF0) {
 	// Calculate the total size of the output buffer
@@ -481,19 +480,19 @@ Element::encode(bool notobject)
 	if (!notobject) {
 	    *buf = Element::OBJECT_AMF0;
 	}
-	if (_name > static_cast<char *>(0)) {
+	if (_name > static_cast<char *>(nullptr)) {
 	    size_t length = getNameSize();
-	    boost::uint16_t enclength = length;
+	    std::uint16_t enclength = length;
 	    swapBytes(&enclength, 2);
 	    *buf += enclength;
 	    string str = _name;
 	    *buf += str;
-	    boost::uint8_t byte = static_cast<boost::uint8_t>(0x5);
+	    std::uint8_t byte = static_cast<std::uint8_t>(0x5);
 	    *buf += byte;
 	}
 
 	for (size_t i=0; i<_properties.size(); i++) {
-	    boost::shared_ptr<Buffer> partial = AMF::encodeElement(_properties[i]);
+	    std::shared_ptr<Buffer> partial = AMF::encodeElement(_properties[i]);
 //	    log_debug("Encoded partial size for is %d", partial->size());
 // 	    _properties[i]->dump();
 // 	    partial->dump();
@@ -506,7 +505,7 @@ Element::encode(bool notobject)
 	}
 //	log_debug("FIXME: Terminating object");
 	if (!notobject) {
-	    boost::uint8_t pad = 0;
+	    std::uint8_t pad = 0;
 	    *buf += pad;
 	    *buf += pad;
 	    *buf += TERMINATOR;
@@ -525,7 +524,7 @@ Element::encode(bool notobject)
 ///		the array to get.
 ///
 /// @return A smart pointer to the Element or property.
-boost::shared_ptr<Element>
+std::shared_ptr<Element>
 Element::operator[](size_t index)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -533,7 +532,7 @@ Element::operator[](size_t index)
 	return _properties[index];
     }
     
-    boost::shared_ptr<Element> el; 
+    std::shared_ptr<Element> el;
     return el;
 }
 
@@ -607,7 +606,7 @@ Element::operator=(bool flag)
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeString(boost::uint8_t *data, size_t size)
+Element::makeString(std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::STRING_AMF0;
@@ -650,7 +649,7 @@ Element::makeNullString()
 //    GNASH_REPORT_FUNCTION;
     _type = Element::STRING_AMF0;
     try {
-	check_buffer(sizeof(boost::uint8_t));
+	check_buffer(sizeof(std::uint8_t));
     } catch (std::exception& e) {
 	log_error("%s", e.what());
 	return *this;
@@ -672,7 +671,7 @@ Element::makeString(const char *str, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::STRING_AMF0;
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(const_cast<char *>(str));
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(const_cast<char *>(str));
     return makeString(ptr, size);
 }
 
@@ -711,7 +710,7 @@ Element::makeString(const string &name, const string &str)
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeNumber(boost::shared_ptr<cygnal::Buffer> buf)
+Element::makeNumber(std::shared_ptr<cygnal::Buffer> buf)
 {
 //    GNASH_REPORT_FUNCTION;
     return makeNumber(buf->reference());
@@ -724,7 +723,7 @@ Element::makeNumber(boost::shared_ptr<cygnal::Buffer> buf)
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeNumber(boost::uint8_t *data)
+Element::makeNumber(std::uint8_t *data)
 {
 //    GNASH_REPORT_FUNCTION;
     double num = *reinterpret_cast<const double*>(data);
@@ -778,10 +777,10 @@ Element::makeNumber(const string &name, double num)
     return makeNumber(num);
 }
 
-/// \overload Element::makeNumber(const std::string &name, boost::uint8_t *data);
+/// \overload Element::makeNumber(const std::string &name, std::uint8_t *data);
 ///		The size isn't needed as a double is always the same size.
 Element &
-Element::makeNumber(const std::string &name, boost::uint8_t *data)
+Element::makeNumber(const std::string &name, std::uint8_t *data)
 {
 //    GNASH_REPORT_FUNCTION;
     if (name.size()) {
@@ -845,7 +844,7 @@ Element::makeBoolean(const string &name, bool flag)
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeBoolean(boost::uint8_t *data)
+Element::makeBoolean(std::uint8_t *data)
 {
 //    GNASH_REPORT_FUNCTION;
     bool flag = *reinterpret_cast<const bool*>(data);
@@ -947,7 +946,7 @@ Element::makeObject(const std::string &name)
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeObject(const std::string &name, std::vector<boost::shared_ptr<Element> > &data)
+Element::makeObject(const std::string &name, std::vector<std::shared_ptr<Element> > &data)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = OBJECT_AMF0;
@@ -963,13 +962,13 @@ Element::makeObject(const std::string &name, std::vector<boost::shared_ptr<Eleme
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeObject(std::vector<boost::shared_ptr<Element> > &data)
+Element::makeObject(std::vector<std::shared_ptr<Element> > &data)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::OBJECT_AMF0;
-    std::vector<boost::shared_ptr<Element> >::const_iterator ait;
+    std::vector<std::shared_ptr<Element> >::const_iterator ait;
     for (ait = data.begin(); ait != data.end(); ++ait) {
-	boost::shared_ptr<Element> el = (*(ait));
+	std::shared_ptr<Element> el = (*(ait));
 	addProperty(el);
 //	el->dump(os);
     }
@@ -988,7 +987,7 @@ Element::makeXMLObject()
     return *this;
 }
 Element &
-Element::makeXMLObject(boost::uint8_t * /*data*/)
+Element::makeXMLObject(std::uint8_t * /*data*/)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::XML_OBJECT_AMF0;
@@ -1071,7 +1070,7 @@ Element::makeTypedObject()
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeTypedObject(boost::uint8_t */*data*/)
+Element::makeTypedObject(std::uint8_t */*data*/)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::TYPED_OBJECT_AMF0;
@@ -1092,12 +1091,12 @@ Element::makeReference()
 }
 
 Element &
-Element::makeReference(boost::uint16_t index)
+Element::makeReference(std::uint16_t index)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::REFERENCE_AMF0;
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(&index);
-    return makeReference(ptr, sizeof(boost::uint16_t));
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(&index);
+    return makeReference(ptr, sizeof(std::uint16_t));
     
     return *this;
 }
@@ -1110,7 +1109,7 @@ Element::makeReference(boost::uint16_t index)
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeReference(boost::uint8_t *indata, size_t size)
+Element::makeReference(std::uint8_t *indata, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::REFERENCE_AMF0;
@@ -1144,7 +1143,7 @@ Element::makeMovieClip()
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeMovieClip(boost::uint8_t *indata, size_t size)
+Element::makeMovieClip(std::uint8_t *indata, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::MOVIECLIP_AMF0;
@@ -1189,7 +1188,7 @@ Element::makeECMAArray(const std::string &name)
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeECMAArray(const std::string &name, std::vector<boost::shared_ptr<cygnal::Element> > &data)
+Element::makeECMAArray(const std::string &name, std::vector<std::shared_ptr<cygnal::Element> > &data)
 {
 //    GNASH_REPORT_FUNCTION;
     _type = Element::ECMA_ARRAY_AMF0;
@@ -1206,7 +1205,7 @@ Element::makeECMAArray(const std::string &name, std::vector<boost::shared_ptr<cy
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeECMAArray(std::vector<boost::shared_ptr<cygnal::Element> > &data)
+Element::makeECMAArray(std::vector<std::shared_ptr<cygnal::Element> > &data)
 {
 //    GNASH_REPORT_FUNCTION;
     makeObject(data);
@@ -1252,7 +1251,7 @@ Element::makeStrictArray(const std::string &name)
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeStrictArray(const std::string &name, std::vector<boost::shared_ptr<cygnal::Element> > &data)
+Element::makeStrictArray(const std::string &name, std::vector<std::shared_ptr<cygnal::Element> > &data)
 {
 //    GNASH_REPORT_FUNCTION;
     makeObject(name, data);
@@ -1268,7 +1267,7 @@ Element::makeStrictArray(const std::string &name, std::vector<boost::shared_ptr<
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeStrictArray(std::vector<boost::shared_ptr<cygnal::Element> > &data)
+Element::makeStrictArray(std::vector<std::shared_ptr<cygnal::Element> > &data)
 {
 //    GNASH_REPORT_FUNCTION;
     makeObject(data);
@@ -1295,7 +1294,7 @@ Element::makeUnsupported()
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeUnsupported(boost::uint8_t *data)
+Element::makeUnsupported(std::uint8_t *data)
 {
     UNUSED(data);
     _type = Element::UNSUPPORTED_AMF0;
@@ -1321,7 +1320,7 @@ Element::makeLongString()
 ///
 /// @return A reference to this Element.
 Element &
-Element::makeLongString(boost::uint8_t *indata)
+Element::makeLongString(std::uint8_t *indata)
 {
     UNUSED(indata);
     _type = Element::LONG_STRING_AMF0;
@@ -1341,7 +1340,7 @@ Element::makeRecordSet()
     return *this;
 }
 Element &
-Element::makeRecordSet(boost::uint8_t *data)
+Element::makeRecordSet(std::uint8_t *data)
 {
     UNUSED(data);
     _type = Element::RECORD_SET_AMF0;
@@ -1363,7 +1362,7 @@ Element::makeDate()
 }
 
 Element &
-Element::makeDate(boost::uint8_t *date)
+Element::makeDate(std::uint8_t *date)
 {
 //    GNASH_REPORT_FUNCTION;
 
@@ -1377,7 +1376,7 @@ Element &
 Element::makeDate(double date)
 {
 //    GNASH_REPORT_FUNCTION;
-    //boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(&date);
+    //std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(&date);
     _type = Element::DATE_AMF0;
     try {
 	check_buffer(AMF0_NUMBER_SIZE);
@@ -1434,7 +1433,7 @@ void
 Element::setName(const char *name, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(const_cast<char *>(name));
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(const_cast<char *>(name));
     return setName(ptr, size);
 }
 
@@ -1449,10 +1448,10 @@ Element::setName(const char *name, size_t size)
 ///
 /// @remarks This adds a NULL string terminator so the name can be printed.
 void
-Element::setName(boost::uint8_t *name, size_t size)
+Element::setName(std::uint8_t *name, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
-    if ((size > 0) && (name != 0)) {
+    if ((size > 0) && (name != nullptr)) {
 	_name = new char[size+1];
 	std::copy(name, name+size, _name);
 	*(_name + size) = 0;
@@ -1470,7 +1469,7 @@ void
 Element::check_buffer(size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
-    if (_buffer == 0) {
+    if (_buffer == nullptr) {
 	_buffer.reset(new Buffer(size));
     } else {
 	if (_buffer->size() < size) {
@@ -1554,10 +1553,10 @@ Element::dump(std::ostream& os) const
     }
 
     if (_properties.size() > 0) {
-	std::vector<boost::shared_ptr<Element> >::const_iterator ait;
+	std::vector<std::shared_ptr<Element> >::const_iterator ait;
 	os << "# of Properties in object: " << _properties.size() << std::endl;
 	for (ait = _properties.begin(); ait != _properties.end(); ++ait) {
-	    const boost::shared_ptr<Element> el = (*(ait));
+	    const std::shared_ptr<Element> el = (*(ait));
 	    el->dump(os);
 	}
     }
@@ -1569,21 +1568,21 @@ Element::dump(std::ostream& os) const
 ///	search for.
 ///
 /// @return A smart pointer to the Element for this property.
-boost::shared_ptr<cygnal::Element> 
+std::shared_ptr<cygnal::Element>
 Element::findProperty(const std::string &name)
 {
     if (_properties.size() > 0) {
-	std::vector<boost::shared_ptr<Element> >::iterator ait;
+	std::vector<std::shared_ptr<Element> >::iterator ait;
 //	cerr << "# of Properties in object: " << _properties.size() << endl;
 	for (ait = _properties.begin(); ait != _properties.end(); ++ait) {
-	    boost::shared_ptr<Element> el = (*(ait));
+	    std::shared_ptr<Element> el = (*(ait));
 	    if (el->getName() == name) {
 		return el;
 	    }
 //	    el->dump();
 	}
     }
-    boost::shared_ptr<Element> el;
+    std::shared_ptr<Element> el;
     return el;
 }
 
diff --git a/cygnal/libamf/element.h b/cygnal/libamf/element.h
index 22f9502..8d669ac 100644
--- a/cygnal/libamf/element.h
+++ b/cygnal/libamf/element.h
@@ -23,9 +23,8 @@
 #include <string>
 #include <cstring>
 #include <iostream> // for output operator
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <cstdint>
+#include <memory>
 
 //#include "network.h"
 #include "dsodefs.h" // DSOEXPORT
@@ -182,7 +181,7 @@ public:
     ///
     /// @return A reference to this Element.
     Element &operator=(Element &el);
-//    Element &operator=(boost::shared_ptr<Element>);
+//    Element &operator=(std::shared_ptr<Element>);
 
     /// \brief Make this Element be the same as a double.
     ///		This sets both the data type and the value.
@@ -222,8 +221,8 @@ public:
     ///
     /// @return A reference to this Element.
     Element &makeString(const char *str, size_t size);
-    /// \overload Element::makeString(boost::uint8_t *data, size_t size)
-    Element &makeString(boost::uint8_t *data, size_t size);
+    /// \overload Element::makeString(std::uint8_t *data, size_t size)
+    Element &makeString(std::uint8_t *data, size_t size);
 
     /// \brief Make this Element with an ASCII string value.
     ///
@@ -254,7 +253,7 @@ public:
     /// @param buf A smart pointer to a Buffer class.
     ///
     /// @return A reference to this Element.
-    Element &makeNumber(boost::shared_ptr<cygnal::Buffer> buf); 
+    Element &makeNumber(std::shared_ptr<cygnal::Buffer> buf);
 
     /// \brief Make this Element with a double value.
     ///		The size isn't needed as a double is always the same size.
@@ -262,7 +261,7 @@ public:
     /// @param str The double to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeNumber(boost::uint8_t *data);
+    Element &makeNumber(std::uint8_t *data);
     
     /// \brief Make this Element a Property with a double value
     ///
@@ -270,9 +269,9 @@ public:
     ///
     /// @param num The double to use as the value of the property.
     Element &makeNumber(const std::string &name, double num) ;
-    /// \overload Element::makeNumber(const std::string &name, boost::uint8_t *data);
+    /// \overload Element::makeNumber(const std::string &name, std::uint8_t *data);
     ///		The size isn't needed as a double is always the same size.
-    Element &makeNumber(const std::string &name, boost::uint8_t *data);
+    Element &makeNumber(const std::string &name, std::uint8_t *data);
 
     /// \brief Make this Element with a boolean value.
     ///		The size isn't needed as a boolean is always the same size.
@@ -280,7 +279,7 @@ public:
     /// @param data A real pointer to the boolean use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeBoolean(boost::uint8_t *data);
+    Element &makeBoolean(std::uint8_t *data);
 
     /// \brief Make this Element with a boolean value.
     ///
@@ -350,7 +349,7 @@ public:
     /// @param data A smart pointer to an Element to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeObject(std::vector<boost::shared_ptr<cygnal::Element> > &data);
+    Element &makeObject(std::vector<std::shared_ptr<cygnal::Element> > &data);
     
     /// \brief Make this Element a Property with an Object as the value.
     ///
@@ -359,7 +358,7 @@ public:
     /// @param data A smart pointer to an Element to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeObject(const std::string &name, std::vector<boost::shared_ptr<cygnal::Element> > &data);
+    Element &makeObject(const std::string &name, std::vector<std::shared_ptr<cygnal::Element> > &data);
     
     /// \brief Make this Element as an XML Object data type.
     ///		This is like a string object, but the type is different.
@@ -384,7 +383,7 @@ public:
     ///
     /// @return A reference to this Element.
     Element &makeXMLObject(const std::string &name, const std::string &data);
-    Element &makeXMLObject(boost::uint8_t *data);
+    Element &makeXMLObject(std::uint8_t *data);
 
     /// \brief Make this Element a Property with an ECMA Array as the value.
     ///		This is a mixed array of any AMF types. These are stored
@@ -407,7 +406,7 @@ public:
     /// @param data A smart pointer to a vector of Elements to use as the vaule.
     ///
     /// @return A reference to this Element.
-    Element &makeECMAArray(std::vector<boost::shared_ptr<cygnal::Element> > &data);
+    Element &makeECMAArray(std::vector<std::shared_ptr<cygnal::Element> > &data);
 
     /// \brief Make this Element a Property with an ECMA Array as the value.
     ///
@@ -416,7 +415,7 @@ public:
     /// @param data A smart pointer to a vector of Elements to use as the vaule.
     ///
     /// @return A reference to this Element.
-    Element &makeECMAArray(const std::string &name, std::vector<boost::shared_ptr<cygnal::Element> > &data);
+    Element &makeECMAArray(const std::string &name, std::vector<std::shared_ptr<cygnal::Element> > &data);
 
     /// \brief Make this Element a Property with an Strict Array as the value.
     ///		This is an array of a single AMF type. These are stored
@@ -441,7 +440,7 @@ public:
     /// @param data A smart pointer to a vector of Elements to use as the vaule.
     ///
     /// @return A reference to this Element.
-    Element &makeStrictArray(std::vector<boost::shared_ptr<cygnal::Element> > &data);
+    Element &makeStrictArray(std::vector<std::shared_ptr<cygnal::Element> > &data);
 
     /// \brief Make this Element a Property with an Strict Array as the value.
     ///
@@ -450,7 +449,7 @@ public:
     /// @param data A smart pointer to a vector of Elements to use as the vaule.
     ///
     /// @return A reference to this Element.
-    Element &makeStrictArray(const std::string &name, std::vector<boost::shared_ptr<cygnal::Element> > &data);
+    Element &makeStrictArray(const std::string &name, std::vector<std::shared_ptr<cygnal::Element> > &data);
 
     /// \brief Make this Element a Property with an Typed Object as the value.
     ///
@@ -467,13 +466,13 @@ public:
     /// @param size The number of bytes to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeTypedObject(boost::uint8_t *data);
+    Element &makeTypedObject(std::uint8_t *data);
     
     /// \brief Make this Element a Property with an Object Reference as the value.
     ///
     /// @return A reference to this Element.
     Element &makeReference();
-    Element &makeReference(boost::uint16_t index);
+    Element &makeReference(std::uint16_t index);
 
     /// \brief Make this Element a Property with an Object Reference as the value.
     ///
@@ -482,7 +481,7 @@ public:
     /// @param size The number of bytes to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeReference(boost::uint8_t *data, size_t size);
+    Element &makeReference(std::uint8_t *data, size_t size);
     
     /// \brief Make this Element a Property with a Movie Clip (SWF data) as the value.
     ///
@@ -496,7 +495,7 @@ public:
     /// @param size The number of bytes to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeMovieClip(boost::uint8_t *data, size_t size);
+    Element &makeMovieClip(std::uint8_t *data, size_t size);
 
     /// \brief Make this Element a Property with a UTF8 String as the value.
     ///
@@ -510,7 +509,7 @@ public:
     /// @param size The number of bytes to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeLongString(boost::uint8_t *data);
+    Element &makeLongString(std::uint8_t *data);
     
     /// \brief Make this Element a Property with a Record Set as the value.
     ///
@@ -524,7 +523,7 @@ public:
     /// @param size The number of bytes to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeRecordSet(boost::uint8_t *data);
+    Element &makeRecordSet(std::uint8_t *data);
     
     /// \brief Make this Element a Property with a Date as the value.
     ///
@@ -536,7 +535,7 @@ public:
     /// @param data A real pointer to the raw data to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeDate(boost::uint8_t *data);
+    Element &makeDate(std::uint8_t *data);
     Element &makeDate(double data);
     
     /// \brief Make this Element a Property with an Unsupported value.
@@ -551,7 +550,7 @@ public:
     /// @param size The number of bytes to use as the value.
     ///
     /// @return A reference to this Element.
-    Element &makeUnsupported(boost::uint8_t *data);
+    Element &makeUnsupported(std::uint8_t *data);
     
     /// \brief Test equivalance against another Element.
     ///		This compares all the data and the data type in the
@@ -573,7 +572,7 @@ public:
     /// @param buf A smart pointer to an Element.
     ///
     /// @return A boolean true if the Elements are indentical.
-    bool operator==(boost::shared_ptr<cygnal::Element> );
+    bool operator==(std::shared_ptr<cygnal::Element> );
     
     /// \brief Test equivalance against a boolean value
     ///		This compares all the data and the data type in the
@@ -592,7 +591,7 @@ public:
     ///		the array to get.
     ///
     /// @return A smart pointer to the Element or property.
-    boost::shared_ptr<cygnal::Element> operator[](size_t index);
+    std::shared_ptr<cygnal::Element> operator[](size_t index);
 
     /// \brief Get the size in bytes of the Element's data.
     ///		All data in an Element is stored in a Buffer class.
@@ -626,12 +625,12 @@ public:
     /// \brief Cast the data in this Element to a short (2 bytes) value.
     ///
     /// @return short (2 bytes) value.
-    boost::uint16_t to_short() const;
+    std::uint16_t to_short() const;
 
     /// \brief Cast the data in this Element to an integer (4 bytes) value.
     ///
     /// @return integer (4 bytes) value.
-    boost::uint32_t to_integer() const;
+    std::uint32_t to_integer() const;
 
     /// \brief Cast the data in this Element to an ASCII string value.
     ///
@@ -641,8 +640,8 @@ public:
     /// \brief Cast the data in this Element to an real pointer to data.
     ///
     /// @return A real pointer to the base address of the raw data in memory.
-    boost::uint8_t *to_reference();
-    const boost::uint8_t *to_reference() const;
+    std::uint8_t *to_reference();
+    const std::uint8_t *to_reference() const;
 
     // Manipulate the name of a property
 
@@ -678,7 +677,7 @@ public:
     /// @return nothing.
     ///
     /// @remarks This add a NULL string terminator so the name can be printed.
-    void setName(boost::uint8_t *name, size_t size);
+    void setName(std::uint8_t *name, size_t size);
 
     // Manipulate the children Elements of an object
 
@@ -688,21 +687,21 @@ public:
     ///		search for.
     ///
     /// @return A smart pointer to the Element for this property.
-    boost::shared_ptr<Element> findProperty(const std::string &name);
+    std::shared_ptr<Element> findProperty(const std::string &name);
 
     /// \brief Find the property at this index for this Object.
     ///
     /// @param index The index of the property in the array of data.
     ///
     /// @return A smart pointer to the Element for this property.
-    boost::shared_ptr<Element> getProperty(size_t index) const { return _properties[index]; };
+    std::shared_ptr<Element> getProperty(size_t index) const { return _properties[index]; };
 
     /// \brief Add a Property to the array of properties for this object.
     ///
     /// @param el A smart pointer to the Element for this Property.
     ///
     /// @return nothing.
-    void addProperty(boost::shared_ptr<Element> el) { _properties.push_back(el); };
+    void addProperty(std::shared_ptr<Element> el) { _properties.push_back(el); };
 
     void clearProperties() { return _properties.clear(); };
 
@@ -712,7 +711,7 @@ public:
     ///
     /// @remarks This does not remove the Element from array of
     ///		properties.
-    boost::shared_ptr<Element> popProperty()
+    std::shared_ptr<Element> popProperty()
 			{ return _properties.front(); };
 
     /// \brief Get the count of properties for this Element.
@@ -730,8 +729,8 @@ public:
     ///		formatting onStatus response packets.
     ///
     /// @return a smart pointer to a Buffer class.
-    boost::shared_ptr<Buffer> encode();
-    boost::shared_ptr<Buffer> encode(bool notobject);
+    std::shared_ptr<Buffer> encode();
+    std::shared_ptr<Buffer> encode(bool notobject);
 
     /// \brief Get the array of properties for this Element.
     ///
@@ -739,7 +738,7 @@ public:
     ///
     /// @remarks This is only intended to be used for testing and
     ///		debugging purposes.
-    std::vector<boost::shared_ptr<Element> > getProperties() const
+    std::vector<std::shared_ptr<Element> > getProperties() const
 			{ return _properties; };
 
     size_t calculateSize();
@@ -770,7 +769,7 @@ private:
     /// \var _buffer
     ///		A smart pointer to the Buffer used to hold the data
     ///		for this Element.
-    boost::shared_ptr<cygnal::Buffer> _buffer;
+    std::shared_ptr<cygnal::Buffer> _buffer;
 
     /// \var _type
     ///		The AMF0 data type of this Element.
@@ -779,7 +778,7 @@ private:
     /// \var _properties
     ///		The vector of properties stored for this Element if
     ///		it's a top level object.
-    std::vector<boost::shared_ptr<Element> > _properties;
+    std::vector<std::shared_ptr<Element> > _properties;
 };                              // end of class definition
 
 
diff --git a/cygnal/libamf/flv.cpp b/cygnal/libamf/flv.cpp
index 0f8a206..c9e0769 100644
--- a/cygnal/libamf/flv.cpp
+++ b/cygnal/libamf/flv.cpp
@@ -27,12 +27,11 @@
 #include "flv.h"
 
 #include <boost/detail/endian.hpp>
-#include <boost/shared_ptr.hpp>
 #include <string>
 #include <vector>
 #include <cmath>
 #include <climits>
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 
 using gnash::log_debug;
 using gnash::log_error;
@@ -61,31 +60,31 @@ Flv::~Flv()
 }
 
 // Encode the data into a Buffer
-boost::shared_ptr<cygnal::Buffer>
-Flv::encodeHeader(boost::uint8_t type)
+std::shared_ptr<cygnal::Buffer>
+Flv::encodeHeader(std::uint8_t type)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf(new Buffer(sizeof(Flv::flv_header_t)));
+    std::shared_ptr<cygnal::Buffer> buf(new Buffer(sizeof(Flv::flv_header_t)));
     buf->clear();
     
-    boost::uint8_t version = 0x1;
+    std::uint8_t version = 0x1;
     *buf = "FLV";
     *buf += version;
 
     *buf += type;
 
-    boost::uint32_t size = htonl(0x9);
-    buf->append((boost::uint8_t *)&size, sizeof(boost::uint32_t));
+    std::uint32_t size = htonl(0x9);
+    buf->append((std::uint8_t *)&size, sizeof(std::uint32_t));
 
     return buf;
 }
 
 // Decode a Buffer into a header
-boost::shared_ptr<Flv::flv_header_t>
-Flv::decodeHeader(boost::uint8_t *data)
+std::shared_ptr<Flv::flv_header_t>
+Flv::decodeHeader(std::uint8_t *data)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<flv_header_t> header(new flv_header_t);
+    std::shared_ptr<flv_header_t> header(new flv_header_t);
     memcpy(header.get(), data, sizeof(flv_header_t));
 //    std::copy(buf->begin(), buf->begin() + sizeof(flv_header_t), header.get());
 
@@ -113,9 +112,9 @@ Flv::decodeHeader(boost::uint8_t *data)
     // Be lazy, as head_size is an array of 4 bytes, and not an integer in the data
     // structure. This is to get around possible padding done to the data structure
     // done by some compilers.
-    boost::uint32_t size = *(reinterpret_cast<boost::uint32_t *>(header->head_size));
+    std::uint32_t size = *(reinterpret_cast<std::uint32_t *>(header->head_size));
     // The header size is big endian
-    swapBytes(header->head_size, sizeof(boost::uint32_t));
+    swapBytes(header->head_size, sizeof(std::uint32_t));
     
     // The header size is always 9, guess it could change some day in the far future, so
     // we should use it.
@@ -128,19 +127,19 @@ Flv::decodeHeader(boost::uint8_t *data)
 }
 
 // Decode a MetaData object, which is after the header, but before all the tags
-boost::shared_ptr<cygnal::Element> 
-Flv::decodeMetaData(boost::shared_ptr<cygnal::Buffer> buf)
+std::shared_ptr<cygnal::Element>
+Flv::decodeMetaData(std::shared_ptr<cygnal::Buffer> buf)
 {
     return decodeMetaData(buf->reference(), buf->size());
 }
 
-boost::shared_ptr<cygnal::Element> 
-Flv::decodeMetaData(boost::uint8_t *buf, size_t size)
+std::shared_ptr<cygnal::Element>
+Flv::decodeMetaData(std::uint8_t *buf, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     AMF amf;
-    boost::uint8_t *ptr = buf;
-    boost::uint8_t *tooFar = ptr + size;
+    std::uint8_t *ptr = buf;
+    std::uint8_t *tooFar = ptr + size;
     
     // Extract the onMetaData object name
     // In disk files, I always see the 0x2 type field for
@@ -150,13 +149,13 @@ Flv::decodeMetaData(boost::uint8_t *buf, size_t size)
 	ptr++;
     }
     
-    boost::uint16_t length;
-    length = ntohs((*(boost::uint16_t *)ptr) & 0xffff);
+    std::uint16_t length;
+    length = ntohs((*(std::uint16_t *)ptr) & 0xffff);
     if (length >= SANE_STR_SIZE) {
 	log_error(_("%d bytes for a string is over the safe limit of %d"),
 		  length, SANE_STR_SIZE);
     }
-    ptr += sizeof(boost::uint16_t);
+    ptr += sizeof(std::uint16_t);
     std::string name(reinterpret_cast<const char *>(ptr), length);
     ptr += length;
     
@@ -170,11 +169,11 @@ Flv::decodeMetaData(boost::uint8_t *buf, size_t size)
     return _metadata;
 }
 
-boost::shared_ptr<Flv::flv_audio_t>
-Flv::decodeAudioData(boost::uint8_t byte)
+std::shared_ptr<Flv::flv_audio_t>
+Flv::decodeAudioData(std::uint8_t byte)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<flv_audio_t> audio(new flv_audio_t);
+    std::shared_ptr<flv_audio_t> audio(new flv_audio_t);
 //    memset(audio->reference(), 0, sizeof(flv_audio_t));
 
     // Get the sound type
@@ -229,11 +228,11 @@ Flv::decodeAudioData(boost::uint8_t byte)
     return audio;
 }
 
-boost::shared_ptr<Flv::flv_video_t>
-Flv::decodeVideoData(boost::uint8_t byte)
+std::shared_ptr<Flv::flv_video_t>
+Flv::decodeVideoData(std::uint8_t byte)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<flv_video_t> video(new flv_video_t);
+    std::shared_ptr<flv_video_t> video(new flv_video_t);
 //    memset(video, 0, sizeof(flv_video_t));
 
     // Get the codecID codecID
@@ -271,16 +270,16 @@ Flv::decodeVideoData(boost::uint8_t byte)
 }
 
 // Convert a 24 bit integer to a 32 bit one so we can use it.
-boost::uint32_t
-Flv::convert24(boost::uint8_t *num)
+std::uint32_t
+Flv::convert24(std::uint8_t *num)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint32_t bodysize = 0;
+    std::uint32_t bodysize = 0;
 
 #ifdef BOOST_BIG_ENDIAN
-    bodysize = *(reinterpret_cast<boost::uint32_t *>(num)) >> 8;
+    bodysize = *(reinterpret_cast<std::uint32_t *>(num)) >> 8;
 #else
-    bodysize = *(reinterpret_cast<boost::uint32_t *>(num)) << 8;
+    bodysize = *(reinterpret_cast<std::uint32_t *>(num)) << 8;
     bodysize = ntohl(bodysize);
 #endif
     
@@ -288,12 +287,12 @@ Flv::convert24(boost::uint8_t *num)
 }
 
 // Decode the tag header
-boost::shared_ptr<Flv::flv_tag_t>
-Flv::decodeTagHeader(boost::uint8_t *buf)
+std::shared_ptr<Flv::flv_tag_t>
+Flv::decodeTagHeader(std::uint8_t *buf)
 {
 //    GNASH_REPORT_FUNCTION;
     flv_tag_t *data = reinterpret_cast<flv_tag_t *>(buf);
-    boost::shared_ptr<flv_tag_t> tag(new flv_tag_t);
+    std::shared_ptr<flv_tag_t> tag(new flv_tag_t);
     memcpy(tag.get(), data, sizeof(flv_tag_t));
 
 //    std::copy(buf->begin(), buf->end(), tag);
@@ -306,21 +305,21 @@ Flv::decodeTagHeader(boost::uint8_t *buf)
     return tag;
 }
 
-boost::shared_ptr<cygnal::Element> 
+std::shared_ptr<cygnal::Element>
 Flv::findProperty(const std::string &name)
 {
     if (_properties.size() > 0) {
-	std::vector<boost::shared_ptr<cygnal::Element> >::iterator ait;
+	std::vector<std::shared_ptr<cygnal::Element> >::iterator ait;
 //	cerr << "# of Properties in object: " << _properties.size() << endl;
 	for (ait = _properties.begin(); ait != _properties.end(); ++ait) {
-	    boost::shared_ptr<cygnal::Element> el = (*(ait));
+	    std::shared_ptr<cygnal::Element> el = (*(ait));
 	    if (el->getName() == name) {
 		return el;
 	    }
 //	    el->dump();
 	}
     }
-    boost::shared_ptr<cygnal::Element> el;
+    std::shared_ptr<cygnal::Element> el;
     return el;
 }
 
@@ -329,11 +328,11 @@ Flv::dump()
 {
 //    GNASH_REPORT_FUNCTION;
     if (_properties.size() > 0) {
-	std::vector<boost::shared_ptr<cygnal::Element> >::iterator ait;
+	std::vector<std::shared_ptr<cygnal::Element> >::iterator ait;
 	std::cerr << "# of Properties in object: " << _properties.size()
 	          << std::endl;
 	for (ait = _properties.begin(); ait != _properties.end(); ++ait) {
-	    boost::shared_ptr<cygnal::Element> el = (*(ait));
+	    std::shared_ptr<cygnal::Element> el = (*(ait));
             // an onMetaData packet of an FLV stream only contains number or
             // boolean bydefault
             if (el->getType() == Element::NUMBER_AMF0) {
diff --git a/cygnal/libamf/flv.h b/cygnal/libamf/flv.h
index 01d9b8d..de845af 100644
--- a/cygnal/libamf/flv.h
+++ b/cygnal/libamf/flv.h
@@ -22,8 +22,7 @@
 #include <vector>
 #include <string>
 #include <cstring>
-#include <boost/cstdint.hpp>    // for boost::?int??_t
-#include <boost/shared_ptr.hpp>
+#include <cstdint>    // for boost::?int??_t
 
 //#include "buffer.h"
 #include "element.h"
@@ -40,7 +39,7 @@ namespace cygnal
 const size_t FLV_HEADER_SIZE = 0x9;
 
 /// \brief The maximum value that can be held in a 32 bit word.
-const boost::uint32_t FLV_MAX_LENGTH = 0xffffff;
+const std::uint32_t FLV_MAX_LENGTH = 0xffffff;
 
 /// \class Flv
 ///	This class abstracts an FLV file into something usable by Gnash.
@@ -48,7 +47,7 @@ class DSOEXPORT Flv {
   public:
     /// \typedef previous_size_t
     ///		This is the size in bytes of the previous MetaTag.
-    typedef boost::uint32_t previous_size_t;
+    typedef std::uint32_t previous_size_t;
     /// \enum Flv::flv_type_e
     ///		The two flv file types
     typedef enum {
@@ -144,19 +143,19 @@ class DSOEXPORT Flv {
     
     /// \struct Flv::flv_header_t.
     typedef struct {
-        boost::uint8_t  sig[3];      // always "FLV"
-        boost::uint8_t  version;     // version, always seems to be 1
-        boost::uint8_t  type;        // Bitmask: 0x4 for audio, 0x1 for video
-        boost::uint8_t  head_size[4];// size of header, always seems to be 9
+        std::uint8_t  sig[3];      // always "FLV"
+        std::uint8_t  version;     // version, always seems to be 1
+        std::uint8_t  type;        // Bitmask: 0x4 for audio, 0x1 for video
+        std::uint8_t  head_size[4];// size of header, always seems to be 9
     } flv_header_t;
 
     /// \struct Flv::flv_tag_t.
     typedef struct {
-        boost::uint8_t  type;         // the type. audio, video, or meta
-        boost::uint8_t  bodysize[3];  // body size (tag size - sizeof(flv_tag_t))
-        boost::uint8_t  timestamp[3]; // timestamp in milliseconds
-        boost::uint8_t  extended;     // extended timestamp
-        boost::uint8_t  streamid[3];  // always 0
+        std::uint8_t  type;         // the type. audio, video, or meta
+        std::uint8_t  bodysize[3];  // body size (tag size - sizeof(flv_tag_t))
+        std::uint8_t  timestamp[3]; // timestamp in milliseconds
+        std::uint8_t  extended;     // extended timestamp
+        std::uint8_t  streamid[3];  // always 0
     } flv_tag_t;
     
     Flv();
@@ -167,15 +166,15 @@ class DSOEXPORT Flv {
     /// @param type The data type for the header
     ///
     /// @return a smart pointer to a Buffer containing the data in big endian format.
-    boost::shared_ptr<cygnal::Buffer> encodeHeader(boost::uint8_t type);
+    std::shared_ptr<cygnal::Buffer> encodeHeader(std::uint8_t type);
     
     /// \brief Decode a Buffer into a header
     ///
     /// @param buf a smart pointer to a Buffer containing the data.
     ///
     /// @return a smart pointer to data structure that contains the data.
-    boost::shared_ptr<flv_header_t> decodeHeader(boost::shared_ptr<cygnal::Buffer> buf) { return decodeHeader(buf->reference()); };
-    boost::shared_ptr<flv_header_t> decodeHeader(boost::uint8_t *data);
+    std::shared_ptr<flv_header_t> decodeHeader(std::shared_ptr<cygnal::Buffer> buf) { return decodeHeader(buf->reference()); };
+    std::shared_ptr<flv_header_t> decodeHeader(std::uint8_t *data);
 
     /// \brief Decode a MetaData object.
     ///		This is after the header, but before all the other tags usually
@@ -183,7 +182,7 @@ class DSOEXPORT Flv {
     /// @param buf a smart pointer to a Buffer containing the data.
     ///
     /// @return a smart pointer to an Element that contains the data.
-    boost::shared_ptr<cygnal::Element> decodeMetaData(boost::shared_ptr<cygnal::Buffer> buf);
+    std::shared_ptr<cygnal::Element> decodeMetaData(std::shared_ptr<cygnal::Buffer> buf);
 
     /// \brief Decode a MetaData object.
     ///		This is after the header, but before all the other tags usually
@@ -193,29 +192,29 @@ class DSOEXPORT Flv {
     /// @param size The size of the data in bytes
     ///
     /// @return a smart pointer to an Element that contains the data.
-    boost::shared_ptr<cygnal::Element> decodeMetaData(boost::uint8_t *data, size_t size);
+    std::shared_ptr<cygnal::Element> decodeMetaData(std::uint8_t *data, size_t size);
 
     /// \brief Decode an Audio object.
     ///
     /// @param flags The data to deserialize.
     /// 
     /// @return a smart pointer to an audio data structure that contains the data.
-    boost::shared_ptr<flv_audio_t> decodeAudioData(boost::uint8_t flags);
+    std::shared_ptr<flv_audio_t> decodeAudioData(std::uint8_t flags);
 
     /// \brief Decode an Video object.
     ///
     /// @param flags The data to deserialize.
     /// 
     /// @return a smart pointer to an video data structure that contains the data.
-    boost::shared_ptr<flv_video_t> decodeVideoData(boost::uint8_t flags);
+    std::shared_ptr<flv_video_t> decodeVideoData(std::uint8_t flags);
     
     /// \brief Decode an MetaData object.
     ///
     /// @param flags The data to deserialize.
     /// 
     /// @return a smart pointer to an video data structure that contains the data.
-    boost::shared_ptr<flv_tag_t> decodeTagHeader(boost::shared_ptr<cygnal::Buffer> &buf) { return decodeTagHeader(buf->reference()); };
-    boost::shared_ptr<flv_tag_t> decodeTagHeader(boost::uint8_t *data);
+    std::shared_ptr<flv_tag_t> decodeTagHeader(std::shared_ptr<cygnal::Buffer> &buf) { return decodeTagHeader(buf->reference()); };
+    std::shared_ptr<flv_tag_t> decodeTagHeader(std::uint8_t *data);
 
     /// \brief Find the named property for this Object.
     ///
@@ -223,20 +222,20 @@ class DSOEXPORT Flv {
     ///		search for.
     ///
     /// @return A smart pointer to the Element for this property.    
-    boost::shared_ptr<cygnal::Element> findProperty(const std::string &name);
+    std::shared_ptr<cygnal::Element> findProperty(const std::string &name);
 
     /// \brief Set all the properties from an array of Element classes.
     ///
     /// @param array
     ///
     /// @return nothing
-    void setProperties(std::vector<boost::shared_ptr<cygnal::Element> > array)
+    void setProperties(std::vector<std::shared_ptr<cygnal::Element> > array)
 			{ _properties = array; };
 
     /// \brief Convert a 24 bit integer to a 32 bit one so we can use it.
     ///
     /// @return An unsigned 32 bit integer
-    boost::uint32_t convert24(boost::uint8_t *);
+    std::uint32_t convert24(std::uint8_t *);
     
     /// \brief Dump the internal data of this class in a human readable form.
     /// @remarks This should only be used for debugging purposes.
@@ -247,7 +246,7 @@ class DSOEXPORT Flv {
     ///		A stored copy of the Flv file header.
     flv_header_t                _header;
     
-//    boost::uint32_t             _previous_tag_size;
+//    std::uint32_t             _previous_tag_size;
     /// \var Flv::_tag
     ///		A stored copy of the main onMetaTag data. Althought
     ///		there may be more than one MetaTag in an FLV, I've
@@ -258,12 +257,12 @@ class DSOEXPORT Flv {
     /// \var Flv::_properties
     ///		The array of properties for this Flv file, which is
     ///		populated by the data from the first onMetaTag block.
-    std::vector<boost::shared_ptr<cygnal::Element> > _properties;
+    std::vector<std::shared_ptr<cygnal::Element> > _properties;
 
     /// \var _metadata
     ///         The data contained in the first onMetaData tag from
     ///         the FLV file.
-    boost::shared_ptr<cygnal::Element> _metadata;
+    std::shared_ptr<cygnal::Element> _metadata;
     
 }; // end of class definition
 
diff --git a/cygnal/libamf/lcshm.cpp b/cygnal/libamf/lcshm.cpp
index 0a5d6f8..9d63490 100644
--- a/cygnal/libamf/lcshm.cpp
+++ b/cygnal/libamf/lcshm.cpp
@@ -21,8 +21,7 @@
 #include <vector>
 #include <string>
 #include <cstring>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 
 #include "log.h"
 #include "buffer.h"
@@ -54,10 +53,12 @@ using gnash::log_error;
 namespace cygnal
 {
 
+#if 0
 // The maximum 
 // although a bool is one byte, it appears to be a short in AMF,
 // plus the type byte.
 const int AMF_BOOLEAN_SIZE = 3;
+#endif
 
 /// \var LC_HEADER_SIZE
 ///     The header size for a memory segment.
@@ -100,7 +101,7 @@ const int LC_LISTENERS_START  = MAX_LC_HEADER_SIZE +  LC_HEADER_SIZE;
 LcShm::LcShm() 
     :
     SharedMem(64528),
-    _baseaddr(0)
+    _baseaddr(nullptr)
 {
 //    GNASH_REPORT_FUNCTION;
 }
@@ -108,7 +109,7 @@ LcShm::LcShm()
 /// \brief Construct an initialized shared memory segment.
 ///
 /// @param addr The address to use for the memory segment.
-LcShm::LcShm(boost::uint8_t *addr)
+LcShm::LcShm(std::uint8_t *addr)
     :
     SharedMem(64528)
 {
@@ -137,7 +138,7 @@ LcShm::~LcShm()
 /// \brief Construct a block of Listeners.
 ///     This constructs an uninitialized Listener block.
 Listener::Listener()
-    : _baseaddr(0)
+    : _baseaddr(nullptr)
 {
 //    GNASH_REPORT_FUNCTION;
 }
@@ -146,7 +147,7 @@ Listener::Listener()
 ///
 /// @param baseaddr The address to use for the block of
 ///     Listeners.
-Listener::Listener(boost::uint8_t *x)
+Listener::Listener(std::uint8_t *x)
 {
 //    GNASH_REPORT_FUNCTION;
     _baseaddr = x;
@@ -169,7 +170,7 @@ Listener::findListener(const string &name)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    boost::uint8_t *addr = _baseaddr + LC_LISTENERS_START;
+    std::uint8_t *addr = _baseaddr + LC_LISTENERS_START;
     char *item = reinterpret_cast<char *>(addr);
     // Walk through the list to the end
     while (*item != 0) {
@@ -195,7 +196,7 @@ Listener::addListener(const string &name)
 {
     GNASH_REPORT_FUNCTION;
 
-    boost::uint8_t *addr = _baseaddr + LC_LISTENERS_START;
+    std::uint8_t *addr = _baseaddr + LC_LISTENERS_START;
     char *item = reinterpret_cast<char *>(addr);
 
 	 if (findListener(name)) {
@@ -209,7 +210,7 @@ Listener::addListener(const string &name)
     }
     
     // Add ourselves to the list
-    if (memcpy(item, name.c_str(), name.size()) == 0) {
+    if (memcpy(item, name.c_str(), name.size()) == nullptr) {
         return false;
     }
 
@@ -253,7 +254,7 @@ Listener::removeListener(const string &name)
 {
     GNASH_REPORT_FUNCTION;
 
-    boost::uint8_t *addr = _baseaddr + LC_LISTENERS_START;
+    std::uint8_t *addr = _baseaddr + LC_LISTENERS_START;
 
     int len = 0;
 	int dest= 0;	
@@ -299,13 +300,13 @@ Listener::removeListener(const string &name)
 /// @return A smart pointer to a vector of Listener names.
 ///
 /// @remarks This is only used for debugging
-std::auto_ptr< vector<string> >
+std::unique_ptr< vector<string> >
 Listener::listListeners()
 {
 //    GNASH_REPORT_FUNCTION;    
-    std::auto_ptr< vector<string> > listeners ( new vector<string> );
-    if (_baseaddr != 0) {
-        boost::uint8_t *addr = _baseaddr + LC_LISTENERS_START;
+    std::unique_ptr< vector<string> > listeners ( new vector<string> );
+    if (_baseaddr != nullptr) {
+        std::uint8_t *addr = _baseaddr + LC_LISTENERS_START;
         
         const char *item = reinterpret_cast<const char *>(addr);
         while (*item != 0) {
@@ -362,15 +363,15 @@ LcShm::close()
 /// @return A real pointer to the data after the headers has been parsed.
 ///
 /// @remarks May throw a ParserException
-boost::uint8_t *
-LcShm::parseHeader(boost::uint8_t *data, boost::uint8_t* tooFar)
+std::uint8_t *
+LcShm::parseHeader(std::uint8_t *data, std::uint8_t* tooFar)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::uint8_t *ptr = data;
+    std::uint8_t *ptr = data;
 
-    if (data == 0) {
+    if (data == nullptr) {
         log_debug(_("No data pointer to parse!"));
-        return 0;
+        return nullptr;
     }
 
 #ifndef GNASH_TRUST_AMF
@@ -386,15 +387,15 @@ LcShm::parseHeader(boost::uint8_t *data, boost::uint8_t* tooFar)
     ptr += LC_HEADER_SIZE;
     
     AMF amf;
-    boost::shared_ptr<Element> el = amf.extractAMF(ptr, tooFar);
-    if (el == 0) {
+    std::shared_ptr<Element> el = amf.extractAMF(ptr, tooFar);
+    if (el == nullptr) {
         log_debug(_("Didn't extract an element from the byte stream!"));
-        return 0;
+        return nullptr;
     }
     _object.connection_name = el->to_string();
     
     el = amf.extractAMF(ptr, tooFar);
-    if (ptr != 0) {
+    if (ptr != nullptr) {
         _object.hostname = el->to_string();
     }
     
@@ -433,22 +434,22 @@ LcShm::parseHeader(boost::uint8_t *data, boost::uint8_t* tooFar)
 /// @param domain The domain the hostname is in.
 ///
 /// @return A real pointer to a header for a memory segment.
-boost::uint8_t *
+std::uint8_t *
 LcShm::formatHeader(const std::string &con, const std::string &host, bool /* domain */ )
 {
 //  GNASH_REPORT_FUNCTION;
-//  boost::uint8_t *ptr = data + LC_HEADER_SIZE;
+//  std::uint8_t *ptr = data + LC_HEADER_SIZE;
     int size = con.size() + host.size() + 9;
 
 //    Buffer *buf;
     
 //    Si:
 //    Assign the value of header and ptr directly.
-//    boost::uint8_t *header = new boost::uint8_t[size + 1];
-//    boost::uint8_t *ptr = header;
+//    std::uint8_t *header = new std::uint8_t[size + 1];
+//    std::uint8_t *ptr = header;
 
-    boost::uint8_t *header    = Listener::getBaseAddress();
-    boost::uint8_t *ptr_FH    = Listener::getBaseAddress();
+    std::uint8_t *header    = Listener::getBaseAddress();
+    std::uint8_t *ptr_FH    = Listener::getBaseAddress();
 //	log_debug("Base address in 'formatHeader' is: 0x%x, 0x%x",(unsigned int) header, (unsigned int) ptr_FH);
 
     // This is the initial 16 bytes of the header
@@ -465,17 +466,17 @@ LcShm::formatHeader(const std::string &con, const std::string &host, bool /* dom
 //  Make sure it is always right. Probably wrong.
 
     // Which is then always followed by 3 AMF objects.
-    boost::shared_ptr<cygnal::Buffer> buf1 = AMF::encodeString(con);
+    std::shared_ptr<cygnal::Buffer> buf1 = AMF::encodeString(con);
     memcpy(ptr_FH, buf1->begin(), buf1->size());
     ptr_FH += buf1->size();
 
     const std::string protocol="localhost";
 	// This could equal to the domain name.
-    boost::shared_ptr<cygnal::Buffer> buf2 = AMF::encodeString(protocol);
+    std::shared_ptr<cygnal::Buffer> buf2 = AMF::encodeString(protocol);
     memcpy(ptr_FH, buf2->begin(), buf2->size());
     ptr_FH += buf2->size();
 
-    boost::shared_ptr<cygnal::Buffer> buf3 = AMF::encodeString(host);
+    std::shared_ptr<cygnal::Buffer> buf3 = AMF::encodeString(host);
     memcpy(ptr_FH, buf3->begin(), buf3->size());
     ptr_FH += buf3->size();
     
@@ -516,19 +517,19 @@ LcShm::connect(const string& names)
         return false;
     }
 
-    if (SharedMem::begin() <= static_cast<unsigned char *>(0)) {
+    if (SharedMem::begin() <= static_cast<unsigned char *>(nullptr)) {
         log_error(_("Failed to open shared memory segment: \"%s\""), names.c_str());
         return false; 
     }
     
-	boost::uint8_t* baseAddress = reinterpret_cast<boost::uint8_t *>(SharedMem::begin());
+	std::uint8_t* baseAddress = reinterpret_cast<std::uint8_t *>(SharedMem::begin());
 	
-	boost::uint8_t* tooFar = SharedMem::end();
+	std::uint8_t* tooFar = SharedMem::end();
     Listener::setBaseAddress(baseAddress);
     _baseaddr = baseAddress;
     parseHeader(baseAddress, tooFar);
 //	log_debug("Base address in 'connect' is: 0x%x, 0x%x",(unsigned int) SharedMem::begin(), (unsigned int) _baseaddr);
-//  vector<boost::shared_ptr<Element> > ellist = parseBody(ptr);
+//  vector<std::shared_ptr<Element> > ellist = parseBody(ptr);
 //  log_debug("Base address is: 0x%x, 0x%x",
 //               (unsigned int)Listener::getBaseAddress(), (unsigned int)_baseaddr);
 
@@ -550,24 +551,24 @@ LcShm::connect(const string& names)
 bool
 LcShm::connect(key_t key)
 {
-	boost::mutex::scoped_lock lock(_localconnection_mutex);
-   // GNASH_REPORT_FUNCTION;
+    std::lock_guard<std::mutex> lock(_localconnection_mutex);
+    // GNASH_REPORT_FUNCTION;
     
     if (SharedMem::attach() == false) {
         return false;
     }
 
-    if (SharedMem::begin() <= static_cast<unsigned char *>(0)) {
+    if (SharedMem::begin() <= static_cast<unsigned char *>(nullptr)) {
         log_error(_("Failed to open shared memory segment: 0x%x"), key);
         return false; 
     }
     
-	boost::uint8_t* baseAddress = reinterpret_cast<boost::uint8_t *>(SharedMem::begin());
-	boost::uint8_t* tooFar = SharedMem::end();
+	std::uint8_t* baseAddress = reinterpret_cast<std::uint8_t *>(SharedMem::begin());
+	std::uint8_t* tooFar = SharedMem::end();
     Listener::setBaseAddress(baseAddress);
     _baseaddr = baseAddress;
     parseHeader(baseAddress, tooFar);
-//    vector<boost::shared_ptr<Element> > ellist = parseBody(ptr);
+//    vector<std::shared_ptr<Element> > ellist = parseBody(ptr);
 //     log_debug("Base address is: 0x%x, 0x%x",
 //               (unsigned int)Listener::getBaseAddress(), (unsigned int)_baseaddr);
     
@@ -595,15 +596,15 @@ LcShm::send(const string&  name , const string&  domainname ,
             vector<cygnal::Element* >& data )
 {
     //GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_localconnection_mutex);
+    std::lock_guard<std::mutex> lock(_localconnection_mutex);
 	
 	std::vector<cygnal::Element* >::iterator iter;
 		   
 	if (!Listener::getBaseAddress()) return;
 
     //The base address
-     boost::uint8_t *baseptr = Listener::getBaseAddress();  	   
-     boost::uint8_t *ptr = baseptr;     
+     std::uint8_t *baseptr = Listener::getBaseAddress();
+     std::uint8_t *ptr = baseptr;
 
 // Compute the time
 // Please check before use.
@@ -616,7 +617,7 @@ LcShm::send(const string&  name , const string&  domainname ,
       int message_size=0;
       if (data.size()!=0){	
 		   for(iter = data.begin(); iter != data.end(); ++iter){
-			    boost::shared_ptr<Buffer> buf = AMF::encodeElement(*iter);									
+			    std::shared_ptr<Buffer> buf = AMF::encodeElement(*iter);
 				message_size+=buf->size();
 			}
 	}	
@@ -642,16 +643,16 @@ LcShm::send(const string&  name , const string&  domainname ,
 //  Make sure it is right later.
 
     // Which is then always followed by 3 AMF objects.
-    boost::shared_ptr<cygnal::Buffer> buf1 = AMF::encodeString(name);
+    std::shared_ptr<cygnal::Buffer> buf1 = AMF::encodeString(name);
     memcpy(ptr, buf1->begin(), buf1->size());
     ptr += buf1->size();
 	
     const std::string protocol="localhostf";
-    boost::shared_ptr<cygnal::Buffer> buf2 = AMF::encodeString(protocol);
+    std::shared_ptr<cygnal::Buffer> buf2 = AMF::encodeString(protocol);
     memcpy(ptr, buf2->begin(), buf2->size());
     ptr += buf2->size();
 
-    boost::shared_ptr<cygnal::Buffer> buf3 = AMF::encodeString(domainname);
+    std::shared_ptr<cygnal::Buffer> buf3 = AMF::encodeString(domainname);
     memcpy(ptr, buf3->begin(), buf3->size());
     ptr += buf3->size();
 	
@@ -661,7 +662,7 @@ LcShm::send(const string&  name , const string&  domainname ,
       if (data.size()==0){	    	  
 		   for(iter = data.begin(); iter != data.end(); ++iter){
 				// temporary buf for element
-				boost::shared_ptr<Buffer> buf = AMF::encodeElement(*iter);		
+				std::shared_ptr<Buffer> buf = AMF::encodeElement(*iter);
 				memcpy(ptr, buf->begin(), buf->size() );
 				ptr+= buf->size();		
 			}
@@ -670,7 +671,7 @@ LcShm::send(const string&  name , const string&  domainname ,
 // Update the connection name
 	   
 #if 0
-//     boost::uint8_t *tmp = AMF::encodeElement(name.c_str());
+//     std::uint8_t *tmp = AMF::encodeElement(name.c_str());
 //     memcpy(ptr, tmp, name.size());
 //     ptr +=  name.size() + AMF_HEADER_SIZE;
 //     delete[] tmp;
@@ -680,7 +681,7 @@ LcShm::send(const string&  name , const string&  domainname ,
 //     ptr +=  domainname.size() + AMF_HEADER_SIZE;
 
 //    ptr += LC_HEADER_SIZE;
-//    boost::uint8_t *x = ptr;    // just for debugging from gdb. temporary
+//    std::uint8_t *x = ptr;    // just for debugging from gdb. temporary
 
     // This is the initial 16 bytes of the header
     memset(ptr, 0, LC_HEADER_SIZE + 200);
@@ -713,8 +714,8 @@ LcShm::send(const string&  name , const string&  domainname ,
     
 //     ptr += AMF_BOOLEAN_SIZE;
     
-    vector<boost::uint8_t> *vec = AMF::encodeElement(data);
-    vector<boost::uint8_t>::iterator vit;
+    vector<std::uint8_t> *vec = AMF::encodeElement(data);
+    vector<std::uint8_t>::iterator vit;
     // Can't do a memcpy with a std::vector
 //    log_debug("Number of bytes in the vector: %x", vec->size());
     for (vit = vec->begin(); vit != vec->end(); vit++) {
@@ -748,7 +749,7 @@ LcShm::send(const string&  name , const string&  domainname ,
 ///
 /// @return nothing.
 /// We may only need a connection name for the receive function.
-///void recv(std::string &name, std::string &dataname, boost::shared_ptr<cygnal::Element> data)
+///void recv(std::string &name, std::string &dataname, std::shared_ptr<cygnal::Element> data)
 //{
 	 //GNASH_REPORT_FUNCTION;
 
@@ -757,15 +758,15 @@ LcShm::send(const string&  name , const string&  domainname ,
 ///  TODO:
 ///  This function should at do the following work:
 ///  1: Lock the shared memory
-///			boost::mutex::scoped_lock lock(_localconnection_mutex);
+///			std::lock_guard<std::mutex> lock(_localconnection_mutex);
 ///  2: Check if the current object is the listener
 ///         if findListener()
 ///         	Make sure the object is the listener for certain connection name
 ///  2: Parse the header
-///         boost::uint8_t *parseHeader(boost::uint8_t *data, boost::uint8_t* tooFar);
+///         std::uint8_t *parseHeader(std::uint8_t *data, std::uint8_t* tooFar);
 ///         	This should be easy if parseHeader function has been finished.
 ///  3: Parse the body of the shared memory
-/// 	    std::vector<boost::shared_ptr<cygnal::Element> > parseBody(boost::uint8_t *data);
+/// 	    std::vector<std::shared_ptr<cygnal::Element> > parseBody(std::uint8_t *data);
 ///         	This should be easy if parseHeader function has been finished.
 ///  4: The listened should implement these commands somehow automatically .
 ///         Handler?
@@ -787,15 +788,15 @@ LcShm::dump()
     cerr << "Connection Name:\t" << _object.connection_name << endl;
     cerr << "Hostname Name:\t\t" << _object.hostname << endl;
     cerr << "Domain Allowed:\t\t" << ((_object.domain) ? "true" : "false") << endl;
-    vector<boost::shared_ptr<Element> >::iterator ait;
+    vector<std::shared_ptr<Element> >::iterator ait;
     cerr << "# of Elements in file: " << _amfobjs.size() << endl;
     for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ++ait) {
-	boost::shared_ptr<Element> el = (*(ait));
+	std::shared_ptr<Element> el = (*(ait));
         el->dump();
     }
 
     vector<string>::const_iterator lit;
-    auto_ptr< vector<string> > listeners ( listListeners() );
+    unique_ptr< vector<string> > listeners ( listListeners() );
     cerr << "# of Listeners in file: " << listeners->size() << endl;
     for (lit=listeners->begin(); lit!=listeners->end(); ++lit) {
         string str = *lit;
diff --git a/cygnal/libamf/lcshm.h b/cygnal/libamf/lcshm.h
index affc748..e3583dd 100644
--- a/cygnal/libamf/lcshm.h
+++ b/cygnal/libamf/lcshm.h
@@ -19,10 +19,10 @@
 #ifndef __LCSHM_H__
 #define __LCSHM_H__
 
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 #include <string>
 #include <vector>
+#include <mutex>
 
 #include "amf.h"
 #include "element.h"
@@ -50,7 +50,7 @@ public:
     ///
     /// @param baseaddr The address to use for the block of
     ///		Listeners.
-    Listener(boost::uint8_t *baseaddr);
+    Listener(std::uint8_t *baseaddr);
 
     /// \brief Delete the Listener block
     ~Listener();
@@ -83,20 +83,20 @@ public:
     /// @return A smart pointer to a vector of Listener names.
     ///
     /// @remarks This is only used for debugging
-    std::auto_ptr< std::vector<std::string> > listListeners();
+    std::unique_ptr< std::vector<std::string> > listListeners();
 
     /// \brief Set the base address for the block of Listeners.
     ///
     /// @param addr The address for the block of Listeners.
     ///
     /// @return nothing.
-    void setBaseAddress(boost::uint8_t *addr) { _baseaddr = addr; };
+    void setBaseAddress(std::uint8_t *addr) { _baseaddr = addr; };
 
     /// \brief Set the base address for the block of Listeners.
     ///
     /// @return A real pointer to the base address of the block of
     ///		Listeners in the memory segment.
-    boost::uint8_t *getBaseAddress() { return _baseaddr; };
+    std::uint8_t *getBaseAddress() { return _baseaddr; };
     
 protected:
     /// \var LcShm::_name
@@ -105,7 +105,7 @@ protected:
 
     /// \var LcShm::_baseaddr
     ///		The base address of the block of Listeners.
-    boost::uint8_t *_baseaddr;
+    std::uint8_t *_baseaddr;
     
 //    std::vector<std::string> _listeners;
 };
@@ -117,11 +117,11 @@ public:
     /// \struct LcShm::lc_header_t
     ///		Hold the data in the memory segment's header.
     typedef struct {
-		boost::uint32_t unknown1;
-		boost::uint32_t unknown2;
-		boost::uint32_t timestamp;	// number of milliseconds that have
+		std::uint32_t unknown1;
+		std::uint32_t unknown2;
+		std::uint32_t timestamp;	// number of milliseconds that have
 				// elapsed since the system was started
-		boost::uint32_t length;
+		std::uint32_t length;
     } lc_header_t;
     /// \struct LcShm::lc_message_t
     ///		Hold the data for a single message in the memory segment.
@@ -129,7 +129,7 @@ public:
         std::string connection_name;
         std::string protocol;
         std::string method_name;
-        std::vector<boost::shared_ptr<cygnal::Element> > data; // this can be any AMF data type
+        std::vector<std::shared_ptr<cygnal::Element> > data; // this can be any AMF data type
     } lc_message_t;
     /// \struct LcShm::lc_object.t
     ///		Hold the data for each connection to the memory segment.
@@ -150,7 +150,7 @@ public:
     /// \brief Construct an initialized shared memory segment.
     ///
     /// @param baseaddr The address to use for the memory segment.
-    LcShm(boost::uint8_t *baseaddr);
+    LcShm(std::uint8_t *baseaddr);
     
     /// \brief Construct an initialized shared memory segment.
     ///
@@ -203,7 +203,7 @@ public:
     ///
     /// @return nothing.
 	/// We may only need a connection name for the receive function.
-    void recv(std::string &name, std::string &dataname, boost::shared_ptr<cygnal::Element> data);
+    void recv(std::string &name, std::string &dataname, std::shared_ptr<cygnal::Element> data);
 
     /// \brief Parse the body of a memory segment.
     ///
@@ -211,7 +211,7 @@ public:
     ///
     /// @return A vector of smart pointers to the AMF0 Elements in
     ///		this memopry segment.
-    std::vector<boost::shared_ptr<cygnal::Element> > parseBody(boost::uint8_t *data);
+    std::vector<std::shared_ptr<cygnal::Element> > parseBody(std::uint8_t *data);
 
     /// \brief Parse the header of the memory segment.
     ///
@@ -223,7 +223,7 @@ public:
     /// @return A real pointer to the data after the headers has been parsed.
     ///
     /// @remarks May throw a ParserException 
-    boost::uint8_t *parseHeader(boost::uint8_t *data, boost::uint8_t* tooFar);
+    std::uint8_t *parseHeader(std::uint8_t *data, std::uint8_t* tooFar);
 
     /// \brief Format the header for the memory segment.
     ///
@@ -234,7 +234,7 @@ public:
     /// @param domain The domain the hostname is in.
     ///
     /// @return A real pointer to a header for a memory segment.
-    boost::uint8_t *formatHeader(const std::string &con, const std::string &host, bool domain);
+    std::uint8_t *formatHeader(const std::string &con, const std::string &host, bool domain);
 
     /// \brief Set the name for this connection to the memory segment.
     ///
@@ -253,7 +253,7 @@ public:
     /// \brief Add an AMF0 Element array of data for this memory segment.
     ///
     /// @return 
-    void addObject(boost::shared_ptr<cygnal::Element> el) { _amfobjs.push_back(el); };
+    void addObject(std::shared_ptr<cygnal::Element> el) { _amfobjs.push_back(el); };
 
     /// \brief Get the number of AMF0 Elements stored in this class.
     ///
@@ -263,14 +263,14 @@ public:
     /// \brief Get the array of AMF0 objects stored by this class.
     ///
     /// @return A vector of smart pointers to AMF0 Elements.
-    std::vector<boost::shared_ptr<cygnal::Element> > getElements() { return _amfobjs; };
+    std::vector<std::shared_ptr<cygnal::Element> > getElements() { return _amfobjs; };
 
     /// \brief Set the base address to be used for the memory segment.
     ///
     /// @param addr The address to use for opening the memory segment.
     ///
     /// @return nothing.
-    void setBaseAddr(boost::uint8_t *addr) { _baseaddr = addr; };
+    void setBaseAddr(std::uint8_t *addr) { _baseaddr = addr; };
 
     ///  \brief Dump the internal data of this class in a human readable form.
     /// @remarks This should only be used for debugging purposes.
@@ -284,7 +284,7 @@ public:
 private:
     /// \var LcShm::_baseaddr.
     ///		The base address of the memory segment.
-    boost::uint8_t *_baseaddr;
+    std::uint8_t *_baseaddr;
 
     /// \var LcShm::_header
     ///		A stored copy of the header for the memory segment.
@@ -297,11 +297,11 @@ private:
     /// \var LcShm::_amfobjs
     ///		A vector of AMF0 Elements in the memory segment.
 	/// Is this necessary if we have put all the things to pass in the memory?
-    std::vector<boost::shared_ptr<cygnal::Element> > _amfobjs;
+    std::vector<std::shared_ptr<cygnal::Element> > _amfobjs;
 	
 	///Si added
 	/// This is the mutex that controls access to the sharedmemory
-    boost::mutex        _localconnection_mutex;
+    std::mutex        _localconnection_mutex;
 
     ///Si 
 	///Moved from LocalConnectoin class to here.
diff --git a/cygnal/libamf/sol.cpp b/cygnal/libamf/sol.cpp
index e591de8..4b7be14 100644
--- a/cygnal/libamf/sol.cpp
+++ b/cygnal/libamf/sol.cpp
@@ -25,9 +25,7 @@
 #include "log.h"
 #include "GnashException.h"
 
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 #include <cerrno>
 #include <string>
 #include <vector>
@@ -51,10 +49,10 @@ using gnash::log_error;
 // Object Name  - variable (the name of the object as an AMF encoded string)
 // Padding      - 4 bytes
 // After this is a series of AMF objects
-const boost::uint16_t SOL_MAGIC = 0x00bf;	// is in big-endian format, this is the first
+const std::uint16_t SOL_MAGIC = 0x00bf;	// is in big-endian format, this is the first
 				// two bytes. of the .sol file.
 //char *SOL_FILETYPE = "TCSO";
-const boost::uint16_t SOL_BLOCK_MARK = 0x0004;
+const std::uint16_t SOL_BLOCK_MARK = 0x0004;
 
 /// \define ENSUREBYTES
 ///
@@ -118,7 +116,7 @@ SOL::extractHeader(const vector<unsigned char> & /*data*/)
 ///
 /// @return nothing.
 void
-SOL::addObj(boost::shared_ptr<cygnal::Element> el)
+SOL::addObj(std::shared_ptr<cygnal::Element> el)
 {
 //    GNASH_REPORT_FUNCTION;
     _amfobjs.push_back(el);
@@ -151,10 +149,10 @@ SOL::formatHeader(const std::string &name)
 
 template <typename T>
 void
-appendSwapped(std::vector<boost::uint8_t>& container, T val)
+appendSwapped(std::vector<std::uint8_t>& container, T val)
 {
-    boost::uint8_t *ptr = 
-        static_cast<boost::uint8_t*>(swapBytes(&val, sizeof(val)));
+    std::uint8_t *ptr =
+        static_cast<std::uint8_t*>(swapBytes(&val, sizeof(val)));
     container.insert(container.end(), ptr, ptr+sizeof(val));
 }
 
@@ -178,7 +176,7 @@ SOL::formatHeader(const std::string &name, int filesize)
     // includes the padding in the header, the mystery bytes, and the
     // padding, plus the length of the name itself.
     filesize += name.size() + 16;
-    boost::uint32_t len = filesize;
+    std::uint32_t len = filesize;
     appendSwapped(_header, len);
 
     // Then the mystery block, but as the value never seems to every change,
@@ -190,19 +188,19 @@ SOL::formatHeader(const std::string &name, int filesize)
     // then the 0x0004 bytes, also a mystery
     appendSwapped(_header, SOL_BLOCK_MARK);
     // finally a bunch of zeros to pad things for this field
-    _header.insert(_header.end(), '\0', sizeof(boost::uint32_t));
+    _header.insert(_header.end(), '\0', sizeof(std::uint32_t));
 
     // Encode the name. This is not a string object, which has a type field
     // one byte field precedding the length as a file type of AMF::STRING.
     //  First the length in two bytes
-    boost::uint16_t size = name.size();
+    std::uint16_t size = name.size();
     appendSwapped(_header, size);
 
     // then the string itself
     _header.insert(_header.end(), name.begin(), name.end());
     
     // finally a bunch of zeros to pad things at the end of the header
-    _header.insert(_header.end(), '\0', sizeof(boost::uint32_t));
+    _header.insert(_header.end(), '\0', sizeof(std::uint32_t));
 
 #if 0
     unsigned char *hexint;
@@ -233,8 +231,8 @@ SOL::writeFile(const std::string &filespec, const std::string &name)
         return false;
     }
     
-    vector<boost::uint8_t>::iterator it;
-    vector<boost::shared_ptr<cygnal::Element> >::iterator ita; 
+    vector<std::uint8_t>::iterator it;
+    vector<std::shared_ptr<cygnal::Element> >::iterator ita;
     AMF amf_obj;
     char *ptr;
     int size = 0;
@@ -244,20 +242,20 @@ SOL::writeFile(const std::string &filespec, const std::string &name)
     }
 
     for (ita = _amfobjs.begin(); ita != _amfobjs.end(); ++ita) {
-        boost::shared_ptr<cygnal::Element> el = (*(ita));
+        std::shared_ptr<cygnal::Element> el = (*(ita));
 	size += el->getNameSize() + el->getDataSize() + 7;
     }
     _filesize = size;
     
-    boost::scoped_array<char> body ( new char[size + 20] );
+    std::unique_ptr<char[]> body ( new char[size + 20] );
     std::fill_n(body.get(), size, 0);
     ptr = body.get();
     char* endPtr = ptr+size+20; // that's the amount we allocated..
 
     for (ita = _amfobjs.begin(); ita != _amfobjs.end(); ++ita) {
-        boost::shared_ptr<Element> el = (*(ita));
-        boost::shared_ptr<cygnal::Buffer> var = amf_obj.encodeProperty(el); 
-        //  boost::uint8_t *var = amf_obj.encodeProperty(el, outsize); 
+        std::shared_ptr<Element> el = (*(ita));
+        std::shared_ptr<cygnal::Buffer> var = amf_obj.encodeProperty(el);
+        //  std::uint8_t *var = amf_obj.encodeProperty(el, outsize);
         if (!var) {
             continue;
         }
@@ -305,8 +303,8 @@ SOL::writeFile(const std::string &filespec, const std::string &name)
     }
     
     _filesize = ptr - body.get();
-	int len = name.size() + sizeof(boost::uint16_t) + 16;
-    boost::scoped_array<char> head ( new char[len + 4] );
+	int len = name.size() + sizeof(std::uint16_t) + 16;
+    std::unique_ptr<char[]> head ( new char[len + 4] );
     memset(head.get(), 0, len);
     ptr = head.get();
     formatHeader(name);
@@ -342,7 +340,7 @@ SOL::readFile(const std::string &filespec)
 {
 //    GNASH_REPORT_FUNCTION;
     struct stat st;
-    boost::uint16_t size;
+    std::uint16_t size;
     size_t bodysize;
 
     // Make sure it's an SOL file
@@ -350,16 +348,16 @@ SOL::readFile(const std::string &filespec)
 
 	try {
 
-        boost::uint8_t *ptr = 0;
+        std::uint8_t *ptr = nullptr;
 
 	    std::ifstream ifs(filespec.c_str(), std::ios::binary);
 
         _filesize = st.st_size;
-        boost::scoped_array<boost::uint8_t> buf(
-                new boost::uint8_t[_filesize + sizeof(int)]);
+        std::unique_ptr<std::uint8_t[]> buf(
+                new std::uint8_t[_filesize + sizeof(int)]);
 
 	    ptr = buf.get();
-	    boost::uint8_t* tooFar = buf.get() + _filesize;
+	    std::uint8_t* tooFar = buf.get() + _filesize;
 	    
 	    bodysize = st.st_size - 6;
 	    _filespec = filespec;
@@ -373,7 +371,7 @@ SOL::readFile(const std::string &filespec)
 	    ptr += 2;
 	    
 	    // extract the file size
-	    boost::uint32_t length = *(reinterpret_cast<boost::uint32_t *>(ptr));
+	    std::uint32_t length = *(reinterpret_cast<std::uint32_t *>(ptr));
 	    length = ntohl(length);
 	    ptr += 4;
 	    
@@ -401,7 +399,7 @@ SOL::readFile(const std::string &filespec)
 	    
 	    // 2 bytes for the length of the object name, but it's also 
         // null terminated
-	    size = *(reinterpret_cast<boost::uint16_t *>(ptr));
+	    size = *(reinterpret_cast<std::uint16_t *>(ptr));
 	    size = ntohs(size);
 	    ptr += 2;
 	    
@@ -418,11 +416,11 @@ SOL::readFile(const std::string &filespec)
 	    ptr += 4;
 	    
 	    AMF amf_obj;
-	    boost::shared_ptr<cygnal::Element> el;
+	    std::shared_ptr<cygnal::Element> el;
 	    while ( ptr < tooFar) {
             if (ptr) {
                 el = amf_obj.extractProperty(ptr, tooFar);
-                if (el != 0) {
+                if (el != nullptr) {
                     ptr += amf_obj.totalsize() + 1;
                     _amfobjs.push_back(el);
                 }
@@ -441,12 +439,12 @@ SOL::readFile(const std::string &filespec)
 }
 
 bool 
-SOL::updateSO(boost::shared_ptr<cygnal::Element> &newel)
+SOL::updateSO(std::shared_ptr<cygnal::Element> &newel)
 {
 //    GNASH_REPORT_FUNCTION;
-    vector<boost::shared_ptr<cygnal::Element> >::iterator ita; 
+    vector<std::shared_ptr<cygnal::Element> >::iterator ita;
     for (ita = _amfobjs.begin(); ita != _amfobjs.end(); ++ita) {
-        boost::shared_ptr<cygnal::Element> oldel = (*(ita));
+        std::shared_ptr<cygnal::Element> oldel = (*(ita));
 	if (oldel == newel) {
 	    oldel = newel;
 	}
@@ -455,7 +453,7 @@ SOL::updateSO(boost::shared_ptr<cygnal::Element> &newel)
 }
 
 bool
-SOL::updateSO(int index, boost::shared_ptr<cygnal::Element> &el)
+SOL::updateSO(int index, std::shared_ptr<cygnal::Element> &el)
 {
 //    GNASH_REPORT_FUNCTION;
     _amfobjs[index] = el;    
@@ -469,14 +467,14 @@ void
 SOL::dump()
 {
     using namespace std;
-    vector<boost::shared_ptr<cygnal::Element> >::iterator it;
+    vector<std::shared_ptr<cygnal::Element> >::iterator it;
 
     cerr << "Dumping SOL file" << endl;
     cerr << "The file name is: " << _filespec << endl;
     cerr << "The size of the file is: " << _filesize << endl;
     cerr << "The name of the object is: " << _objname << endl;
     for (it = _amfobjs.begin(); it != _amfobjs.end(); ++it) {
-	boost::shared_ptr<cygnal::Element> el = (*(it));
+	std::shared_ptr<cygnal::Element> el = (*(it));
         cerr << el->getName() << ": ";
         if (el->getType() == Element::STRING_AMF0) {
             if (el->getDataSize() != 0) {
diff --git a/cygnal/libamf/sol.h b/cygnal/libamf/sol.h
index 7f5b634..2d4e46d 100644
--- a/cygnal/libamf/sol.h
+++ b/cygnal/libamf/sol.h
@@ -19,7 +19,8 @@
 #ifndef GNASH_SOL_H
 #define GNASH_SOL_H
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
+#include <cassert>
 #include <string>
 #include <vector>
 
@@ -69,7 +70,7 @@ public:
     ///		.sol file data.
     ///
     /// @return true if this succeeded. false if it doesn't.
-    bool extractHeader(const std::vector<boost::uint8_t> &data);
+    bool extractHeader(const std::vector<std::uint8_t> &data);
 
     /// \brief Extract the header from the file.
     ///
@@ -84,7 +85,7 @@ public:
     ///		.sol file data.
     ///
     /// @return true if this succeeded. false if it doesn't.
-    bool formatHeader(const std::vector<boost::uint8_t> &data);
+    bool formatHeader(const std::vector<std::uint8_t> &data);
 
     /// \brief Create the file header.
     ///
@@ -126,27 +127,27 @@ public:
     /// \brief Get the stored copy of the header
     ///
     /// @return A vector of raw bytes that is a binary form of the header.
-    std::vector<boost::uint8_t> getHeader() { return _header; };
+    std::vector<std::uint8_t> getHeader() { return _header; };
 
     /// \brief Add the AMF objects that are the data of the file
     //
     /// @param el A smart pointer to the Element to add to the .sol file.
     ///
     /// @return nothing.
-    void addObj(boost::shared_ptr<Element> el);
+    void addObj(std::shared_ptr<Element> el);
 
     /// \brief Return a reference to the elements in this object
     ///
     /// @return A smart pointer to the array of properities for this
     ///		.sol file.
-    std::vector<boost::shared_ptr<cygnal::Element> > &getElements() { return _amfobjs; }
+    std::vector<std::shared_ptr<cygnal::Element> > &getElements() { return _amfobjs; }
 
     /// \brief Get an element referenced by index in the array
     ///
     /// @param size The index of the property to retrieve.
     ///
     /// @return A smart pointer to the element at the specified location.
-    boost::shared_ptr<Element> getElement(size_t size)
+    std::shared_ptr<Element> getElement(size_t size)
     {
         assert(size<_amfobjs.size());
         return _amfobjs[size];
@@ -180,8 +181,8 @@ public:
     ///		in the .sol file.
     const std::string &getObjectName() const { return _objname; };
         
-    bool updateSO(boost::shared_ptr<cygnal::Element> &el);
-    bool updateSO(int index, boost::shared_ptr<cygnal::Element> &el);
+    bool updateSO(std::shared_ptr<cygnal::Element> &el);
+    bool updateSO(int index, std::shared_ptr<cygnal::Element> &el);
     
     ///  \brief Dump the internal data of this class in a human readable form.
     ///
@@ -191,11 +192,11 @@ public:
  private:
     /// \var SOL::_header
     ///		A stored copy of the SOL file header.
-    std::vector<boost::uint8_t> _header;
+    std::vector<std::uint8_t> _header;
 
     /// \var SOL::_data
     ///		The vector that contains the raw dats for this .sol file.
-    std::vector<boost::uint8_t> _data;
+    std::vector<std::uint8_t> _data;
 
     /// \var SOL::_objname
     ///		The name of the SharedObject in the .sol file.
@@ -212,7 +213,7 @@ public:
  protected:
     /// \var SOL::_amfobjs
     ///		The array of elements in this SharedObject.
-    std::vector<boost::shared_ptr<Element> > _amfobjs;
+    std::vector<std::shared_ptr<Element> > _amfobjs;
     
   };
 
diff --git a/cygnal/libnet/Makefile.am b/cygnal/libnet/Makefile.am
index e5a27a6..a99d195 100644
--- a/cygnal/libnet/Makefile.am
+++ b/cygnal/libnet/Makefile.am
@@ -39,7 +39,7 @@ libgnashnet_la_LDFLAGS =  -release $(VERSION) $(AM_LDFLAGS)
 
 localedir = $(datadir)/locale
 
-INCLUDES = \
+AM_CPPFLAGS = \
 	-I$(top_srcdir)/cygnal/libamf \
 	-I$(top_srcdir)/cygnal/libnet \
         -I$(top_srcdir)/libbase \
diff --git a/cygnal/libnet/cache.cpp b/cygnal/libnet/cache.cpp
index 2a273ab..d7411ed 100644
--- a/cygnal/libnet/cache.cpp
+++ b/cygnal/libnet/cache.cpp
@@ -22,10 +22,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
+#include <mutex>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <string>
@@ -41,22 +38,20 @@ using std::string;
 using std::map;
 using std::endl;
 
-static boost::mutex cache_mutex;
+static std::mutex cache_mutex;
 
 namespace gnash
 {
 
 Cache::Cache() 
-    : _max_size(0),
 #ifdef USE_STATS_CACHE
-      _pathname_lookups(0),
+    : _pathname_lookups(0),
       _pathname_hits(0),
       _response_lookups(0),
       _response_hits(0),
       _file_lookups(0),
-      _file_hits(0),
+      _file_hits(0)
 #endif
-      _pagesize(0)
 {
 //    GNASH_REPORT_FUNCTION;
     log_error(_("using this constructor is only allowed for testing purposes."));
@@ -83,7 +78,7 @@ void
 Cache::addPath(const std::string &name, const std::string &fullpath)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
     _pathnames[name] = fullpath;
 }
 
@@ -91,17 +86,17 @@ void
 Cache::addResponse(const std::string &name, const std::string &response)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
 
     _responses[name] = response;
 }
 
 void
-Cache::addFile(const std::string &name, boost::shared_ptr<DiskStream> &file)
+Cache::addFile(const std::string &name, std::shared_ptr<DiskStream> &file)
 {
     // GNASH_REPORT_FUNCTION;
 
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
     log_network(_("Adding file %s to cache."), name);
     _files[name] = file;
 }
@@ -110,7 +105,7 @@ string &
 Cache::findPath(const std::string &name)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
 #ifdef USE_STATS_CACHE
     clock_gettime (CLOCK_REALTIME, &_last_access);
     _pathname_lookups++;
@@ -127,7 +122,7 @@ string &
 Cache::findResponse(const std::string &name)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
 #ifdef USE_STATS_CACHE
     clock_gettime (CLOCK_REALTIME, &_last_access);
     _response_lookups++;
@@ -140,17 +135,17 @@ Cache::findResponse(const std::string &name)
     return _responses[name];
 }
 
-boost::shared_ptr<DiskStream> &
+std::shared_ptr<DiskStream> &
 Cache::findFile(const std::string &name)
 {
 //    GNASH_REPORT_FUNCTION;
 
     log_network(_("Trying to find %s in the cache."), name);
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
 #ifdef USE_STATS_CACHE
     clock_gettime (CLOCK_REALTIME, &_last_access);
     _file_lookups++;
-    map<string, boost::shared_ptr<DiskStream> >::const_iterator it;
+    map<string, std::shared_ptr<DiskStream> >::const_iterator it;
     it = _files.find(name);
     if (it != _files.end()) {
         _file_hits++;
@@ -163,7 +158,7 @@ void
 Cache::removePath(const std::string &name)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
     _pathnames.erase(name);
 }
 
@@ -171,7 +166,7 @@ void
 Cache::removeResponse(const std::string &name)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
     _responses.erase(name);
 }
 
@@ -179,7 +174,7 @@ void
 Cache::removeFile(const std::string &name)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
     _files.erase(name);
 }
 
@@ -226,7 +221,7 @@ Cache::stats(bool xml) const
 	text << "	File hits from cache: " << _file_hits << endl;
     }
     
-    map<std::string, boost::shared_ptr<DiskStream> >::const_iterator data;
+    map<std::string, std::shared_ptr<DiskStream> >::const_iterator data;
     for (data = _files.begin(); data != _files.end(); ++data) {
 	const struct timespec *last = data->second->getLastAccessTime();
 	time = ((now.tv_sec - last->tv_sec) + ((now.tv_nsec - last->tv_nsec)/1e9));
@@ -256,7 +251,7 @@ void
 Cache::dump(std::ostream& os) const
 {    
     GNASH_REPORT_FUNCTION;    
-    boost::mutex::scoped_lock lock(cache_mutex);
+    std::lock_guard<std::mutex> lock(cache_mutex);
 
     // Dump all the pathnames
     os << "Pathname cache has " << _pathnames.size() << " files." << endl;
@@ -273,9 +268,9 @@ Cache::dump(std::ostream& os) const
     
     os << "DiskStream cache has " << _files.size() << " files." << endl;
     
-    map<std::string, boost::shared_ptr<DiskStream> >::const_iterator data;
+    map<std::string, std::shared_ptr<DiskStream> >::const_iterator data;
     for (data = _files.begin(); data != _files.end(); ++data) {
-        boost::shared_ptr<DiskStream> filedata = data->second;
+        std::shared_ptr<DiskStream> filedata = data->second;
         os << "file info for \"" << data->first << "\" is: " << endl;
         filedata->dump();
         os << "-----------------------------" << endl;
diff --git a/cygnal/libnet/cache.h b/cygnal/libnet/cache.h
index e07bef7..0d5c36c 100644
--- a/cygnal/libnet/cache.h
+++ b/cygnal/libnet/cache.h
@@ -26,7 +26,6 @@
 #include <string>
 #include <map> 
 #include <iostream>
-#include <boost/shared_ptr.hpp>
 
 #include "statistics.h"
 #include "diskstream.h"
@@ -59,8 +58,8 @@ public:
     std::string &findResponse(const std::string &name);
     void removeResponse(const std::string &name);
     
-    void addFile(const std::string &name, boost::shared_ptr<DiskStream > &file);
-    boost::shared_ptr<DiskStream> & findFile(const std::string &name);
+    void addFile(const std::string &name, std::shared_ptr<DiskStream > &file);
+    std::shared_ptr<DiskStream> & findFile(const std::string &name);
     void removeFile(const std::string &name);
     
     ///  \brief Dump the internal data of this class in a human readable form.
@@ -81,11 +80,7 @@ private:
     std::map<std::string, std::string> _responses;
     /// \var Cache::_responses
     ///		The cache of Distream handles to often played files.
-    std::map<std::string, boost::shared_ptr<DiskStream> > _files;
-
-    /// \var Cache::_max_size
-    ///		The maximum amount of memory the cache is allowed to use.
-    size_t _max_size;
+    std::map<std::string, std::shared_ptr<DiskStream> > _files;
 
     /// \brief Cache file statistics variables are defined here.
 #ifdef USE_STATS_CACHE
@@ -97,11 +92,6 @@ private:
     long	_file_lookups;
     long	_file_hits;
 #endif
-    /// \var Cache::_pagesize
-    ///		The memory page size.
-    size_t	_pagesize;    
-
-cygnal::AMF::filetype_e  _filetype; // FIXME: this shouldn't be here still
 };
 
 /// \brief Dump to the specified output stream.
diff --git a/cygnal/libnet/cque.cpp b/cygnal/libnet/cque.cpp
index baba956..d341d06 100644
--- a/cygnal/libnet/cque.cpp
+++ b/cygnal/libnet/cque.cpp
@@ -51,9 +51,9 @@ CQue::~CQue()
 //    GNASH_REPORT_FUNCTION;
 //    clear();
     que_t::iterator it;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 //     for (it = _que.begin(); it != _que.end(); it++) {
-// 	boost::shared_ptr<cygnal::Buffer> ptr = *(it);
+// 	std::shared_ptr<cygnal::Buffer> ptr = *(it);
 // 	if (ptr->size()) {	// FIXME: we probably want to delete ptr anyway,
 // 	    delete ptr;		// but if we do, this will core dump.
 // 	}
@@ -65,7 +65,7 @@ void
 CQue::wait()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lk(_cond_mutex);
+    std::unique_lock<std::mutex> lk(_cond_mutex);
 #ifndef _WIN32
     _cond.wait(lk);
     log_unimpl(_("CQue::wait(win32)"));
@@ -89,15 +89,15 @@ size_t
 CQue::size()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return _que.size();
 }
 
 bool
-CQue::push(boost::shared_ptr<cygnal::Buffer> data)
+CQue::push(std::shared_ptr<cygnal::Buffer> data)
 {
 //     GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     _que.push_back(data);
 #ifdef USE_STATS_QUEUE
     _stats.totalbytes += data->size();
@@ -108,22 +108,22 @@ CQue::push(boost::shared_ptr<cygnal::Buffer> data)
 
 // Push data
 bool
-CQue::push(boost::uint8_t *data, int nbytes)
+CQue::push(std::uint8_t *data, int nbytes)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer);
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer);
     std::copy(data, data + nbytes, buf->reference());
     return push(buf);
 }
 
 
 // Pop the first date element off the FIFO
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 CQue::pop()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::shared_ptr<cygnal::Buffer> buf;
+    std::lock_guard<std::mutex> lock(_mutex);
     if (_que.size()) {
         buf = _que.front();
         _que.pop_front();
@@ -135,15 +135,15 @@ CQue::pop()
 }
 
 // Peek at the first data element without removing it
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 CQue::peek()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     if (_que.size()) {
         return _que.front();
     }
-    return boost::shared_ptr<cygnal::Buffer>();
+    return std::shared_ptr<cygnal::Buffer>();
 }
 
 // Return the size of the queues
@@ -151,20 +151,20 @@ void
 CQue::clear()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     _que.clear();
 }
 
 // Remove a range of elements
 void
-CQue::remove(boost::shared_ptr<cygnal::Buffer> begin, boost::shared_ptr<cygnal::Buffer> end)
+CQue::remove(std::shared_ptr<cygnal::Buffer> begin, std::shared_ptr<cygnal::Buffer> end)
 {
     GNASH_REPORT_FUNCTION;
-    deque<boost::shared_ptr<cygnal::Buffer> >::iterator it;
-    deque<boost::shared_ptr<cygnal::Buffer> >::iterator start;
-    deque<boost::shared_ptr<cygnal::Buffer> >::iterator stop;
-    boost::mutex::scoped_lock lock(_mutex);
-    boost::shared_ptr<cygnal::Buffer> ptr;
+    deque<std::shared_ptr<cygnal::Buffer> >::iterator it;
+    deque<std::shared_ptr<cygnal::Buffer> >::iterator start;
+    deque<std::shared_ptr<cygnal::Buffer> >::iterator stop;
+    std::lock_guard<std::mutex> lock(_mutex);
+    std::shared_ptr<cygnal::Buffer> ptr;
     for (it = _que.begin(); it != _que.end(); ++it) {
 	ptr = *(it);
 	if (ptr->reference() == begin->reference()) {
@@ -180,13 +180,13 @@ CQue::remove(boost::shared_ptr<cygnal::Buffer> begin, boost::shared_ptr<cygnal::
 
 // Remove an element
 void
-CQue::remove(boost::shared_ptr<cygnal::Buffer> element)
+CQue::remove(std::shared_ptr<cygnal::Buffer> element)
 {
     GNASH_REPORT_FUNCTION;
-    deque<boost::shared_ptr<cygnal::Buffer> >::iterator it;
-    boost::mutex::scoped_lock lock(_mutex);
+    deque<std::shared_ptr<cygnal::Buffer> >::iterator it;
+    std::lock_guard<std::mutex> lock(_mutex);
     for (it = _que.begin(); it != _que.end(); ) {
-	boost::shared_ptr<cygnal::Buffer> ptr = *(it);
+	std::shared_ptr<cygnal::Buffer> ptr = *(it);
 	if (ptr->reference() == element->reference()) {
 	    it = _que.erase(it);
 	} else {
@@ -197,7 +197,7 @@ CQue::remove(boost::shared_ptr<cygnal::Buffer> element)
 
 // Merge sucessive buffers into one single larger buffer. This is for some
 // protocols, than have very long headers.
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 CQue::merge()
 {
 //     GNASH_REPORT_FUNCTION;
@@ -205,8 +205,8 @@ CQue::merge()
     return merge(_que.front());
 }
 
-boost::shared_ptr<cygnal::Buffer> 
-CQue::merge(boost::shared_ptr<cygnal::Buffer> start)
+std::shared_ptr<cygnal::Buffer>
+CQue::merge(std::shared_ptr<cygnal::Buffer> start)
 {
 //     GNASH_REPORT_FUNCTION;
     // Find iterator to first element to merge
@@ -232,7 +232,7 @@ CQue::merge(boost::shared_ptr<cygnal::Buffer> start)
 //     log_debug("%s: Final Totalsize is %s", __PRETTY_FUNCTION__, totalsize);
     
     // Merge all elements in a single buffer. We have totalsize now.
-    boost::shared_ptr<cygnal::Buffer> newbuf(new cygnal::Buffer(totalsize));
+    std::shared_ptr<cygnal::Buffer> newbuf(new cygnal::Buffer(totalsize));
     for (que_t::iterator i=from; i!=to; ++i) {
 //  	log_debug("%s: copying %d bytes, space left is %d, totalsize is %d", __PRETTY_FUNCTION__,
 //  		  (*i)->allocated(), newbuf->spaceLeft(), totalsize);
@@ -253,7 +253,7 @@ CQue::merge(boost::shared_ptr<cygnal::Buffer> start)
     //que_t::iterator nextIter = _que.erase(from, to);
 //    _que.insert(nextIter, newbuf.get()); FIXME:
 
-    return newbuf; //->release(); // ownership is transferred. TODO: return auto_ptr
+    return newbuf; //->release(); // ownership is transferred. TODO: return unique_ptr
 }
 
 // Dump internal data.
@@ -261,12 +261,12 @@ void
 CQue::dump()
 {
 //    GNASH_REPORT_FUNCTION;
-    deque<boost::shared_ptr<cygnal::Buffer> >::iterator it;
-    boost::mutex::scoped_lock lock(_mutex);
+    deque<std::shared_ptr<cygnal::Buffer> >::iterator it;
+    std::lock_guard<std::mutex> lock(_mutex);
     std::cerr << std::endl << "CQue \"" << _name << "\" has "<< _que.size()
               << " buffers." << std::endl;
     for (it = _que.begin(); it != _que.end(); ++it) {
-	boost::shared_ptr<cygnal::Buffer> ptr = *(it);
+	std::shared_ptr<cygnal::Buffer> ptr = *(it);
         ptr->dump();
     }
 #ifdef USE_STATS_QUEUE
diff --git a/cygnal/libnet/cque.h b/cygnal/libnet/cque.h
index b7ca12f..02e4178 100644
--- a/cygnal/libnet/cque.h
+++ b/cygnal/libnet/cque.h
@@ -20,9 +20,9 @@
 #define __CQUE_H__
 
 #include <string>
-#include <boost/cstdint.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/condition.hpp>
+#include <cstdint>
+#include <mutex>
+#include <condition_variable>
 #include <deque>
 
 #include "getclocktime.hpp"
@@ -36,7 +36,7 @@ namespace gnash
 
 class CQue {
 public:
-    typedef std::deque<boost::shared_ptr<cygnal::Buffer> > que_t;
+    typedef std::deque<std::shared_ptr<cygnal::Buffer> > que_t;
 #ifdef USE_STATS_QUEUE
     typedef struct {
 	struct timespec start;
@@ -49,12 +49,12 @@ public:
     CQue(const std::string &str) { _name = str; };
     ~CQue();
     // Push data onto the que
-    bool push(boost::uint8_t *data, int nbytes);
-    bool push(boost::shared_ptr<cygnal::Buffer> data);
+    bool push(std::uint8_t *data, int nbytes);
+    bool push(std::shared_ptr<cygnal::Buffer> data);
     // Pop the first date element off the que
-    boost::shared_ptr<cygnal::Buffer> DSOEXPORT pop();
+    std::shared_ptr<cygnal::Buffer> DSOEXPORT pop();
     // Peek at the first date element witjhout removing it from the que
-    boost::shared_ptr<cygnal::Buffer> DSOEXPORT peek();
+    std::shared_ptr<cygnal::Buffer> DSOEXPORT peek();
     // Get the number of elements in the que
     size_t DSOEXPORT size();
     // Wait for a condition variable to trigger
@@ -64,16 +64,16 @@ public:
     // Empty the que of all data. 
     void clear();
     // Remove a range of elements
-    void remove(boost::shared_ptr<cygnal::Buffer> begin, boost::shared_ptr<cygnal::Buffer> end);
+    void remove(std::shared_ptr<cygnal::Buffer> begin, std::shared_ptr<cygnal::Buffer> end);
 //     // Remove an element
-//    void remove(boost::shared_ptr<cygnal::Buffer> it);
-    void remove(boost::shared_ptr<cygnal::Buffer> it);
+//    void remove(std::shared_ptr<cygnal::Buffer> it);
+    void remove(std::shared_ptr<cygnal::Buffer> it);
     // Merge sucessive buffers into one single larger buffer. This is for some
     // protocols, than have very long headers.
-    boost::shared_ptr<cygnal::Buffer> DSOEXPORT merge(boost::shared_ptr<cygnal::Buffer> begin);
-    boost::shared_ptr<cygnal::Buffer> DSOEXPORT merge();
+    std::shared_ptr<cygnal::Buffer> DSOEXPORT merge(std::shared_ptr<cygnal::Buffer> begin);
+    std::shared_ptr<cygnal::Buffer> DSOEXPORT merge();
 
-    boost::shared_ptr<cygnal::Buffer> operator[] (int index) { return _que[index]; };
+    std::shared_ptr<cygnal::Buffer> operator[] (int index) { return _que[index]; };
     
     // Dump the data to the terminal
     void dump();
@@ -84,19 +84,19 @@ public:
     const std::string &getName() { return _name; }
 private:
     // an optional name for the queue, only used for debugging messages to make them unique
-    std::string		_name;
+    std::string			_name;
     // The queue itself
-    que_t		_que;
+    que_t			_que;
 
     // A condition variable used to signal the other thread when the que has data
-    boost::condition	_cond;
+    std::condition_variable	_cond;
     // This is the mutex used by the condition variable. It needs to be separate from the
     // one used to lock access to the que.
-    boost::mutex	_cond_mutex;
+    std::mutex			_cond_mutex;
     // This is the mutex that controls access to the que.
-    boost::mutex	_mutex;
+    std::mutex			_mutex;
 #ifdef USE_STATS_QUEUE
-    que_stats_t		_stats;
+    que_stats_t			_stats;
 #endif
 };
     
diff --git a/cygnal/libnet/cqueue.cpp b/cygnal/libnet/cqueue.cpp
index eec6901..3a1b0e9 100644
--- a/cygnal/libnet/cqueue.cpp
+++ b/cygnal/libnet/cqueue.cpp
@@ -18,7 +18,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 #include <boost/date_time/gregorian/gregorian.hpp>
 //#include <boost/date_time/local_time/local_time.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
@@ -47,7 +47,7 @@ CQueue::~CQueue()
 
 #if 0
 void
-memcpy(boost::uint8_t *data, size_t size,
+memcpy(std::uint8_t *data, size_t size,
                  vector<uint8_t> *ptr)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -70,7 +70,7 @@ bool
 CQueue::push(uint8_t *data, int nbytes)
 {
 //    GNASH_REPORT_FUNCTION;
-    vector<boost::uint8_t> *ptr = new vector<boost::uint8_t>;
+    vector<std::uint8_t> *ptr = new vector<std::uint8_t>;
     ptr->reserve(nbytes);
     std::copy(data, data + nbytes, ptr->begin());
     _queue.push_back(ptr);
diff --git a/cygnal/libnet/cqueue.h b/cygnal/libnet/cqueue.h
index 3d58a81..671fe5a 100644
--- a/cygnal/libnet/cqueue.h
+++ b/cygnal/libnet/cqueue.h
@@ -22,8 +22,8 @@
 #define __CQUEUE_H__ 1
 
 
-#include <boost/cstdint.hpp>
-#include <boost/thread/mutex.hpp>
+#include <cstdint>
+#include <mutex>
 #include <boost/date_time/gregorian/gregorian.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <iostream>
@@ -40,21 +40,21 @@ public:
     ~CQueue();
 
     // Push bytes on the FIFO
-    bool push(boost::uint8_t *data, int nbytes);
-    bool push(std::vector<boost::uint8_t> *data);
+    bool push(std::uint8_t *data, int nbytes);
+    bool push(std::vector<std::uint8_t> *data);
     // Pop the first date element off the FIFO
     std::vector<uint8_t> *pop();
     // Peek at the first data element without removing it
     std::vector<uint8_t> *peek();
-//     void memcpy(boost::uint8_t *data, size_t size,
-//                  std::vector<boost::uint8_t> *ptr);
-//     void memcpy(std::vector<boost::uint8_t> *ptr,
-//                  boost::uint8_t *data, size_t size);
+//     void memcpy(std::uint8_t *data, size_t size,
+//                  std::vector<std::uint8_t> *ptr);
+//     void memcpy(std::vector<std::uint8_t> *ptr,
+//                  std::uint8_t *data, size_t size);
     size_t size() { return _queue.size(); };
     // Dump internal data.
     void dump();
 private:
-    std::vector<std::vector<boost::uint8_t> *> _queue;
+    std::vector<std::vector<std::uint8_t> *> _queue;
 };
 
 
diff --git a/cygnal/libnet/diskstream.cpp b/cygnal/libnet/diskstream.cpp
index 4a5e515..ec2a5df 100644
--- a/cygnal/libnet/diskstream.cpp
+++ b/cygnal/libnet/diskstream.cpp
@@ -23,7 +23,7 @@
 #endif
 
 #include <sys/types.h>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <iostream>
@@ -55,9 +55,9 @@
 # include <sys/sendfile.h>
 #endif
 
-#include <boost/thread/mutex.hpp>
-static boost::mutex io_mutex;
-static boost::mutex mem_mutex;
+#include <mutex>
+static std::mutex io_mutex;
+static std::mutex mem_mutex;
 
 using std::string;
 
@@ -86,7 +86,7 @@ DiskStream::DiskStream()
     : _state(DiskStream::NO_STATE),
       _filefd(0),
       _netfd(0),
-      _dataptr(0),
+      _dataptr(nullptr),
       _max_memload(0),
       _filesize(0),
       _pagesize(0),
@@ -126,7 +126,7 @@ DiskStream::DiskStream(const string &str)
     : _state(DiskStream::NO_STATE),
       _filefd(0),
       _netfd(0),
-      _dataptr(0),
+      _dataptr(nullptr),
       _max_memload(0),
       _filesize(0),
       _pagesize(0),
@@ -163,11 +163,11 @@ DiskStream::DiskStream(const string &str)
 #endif
 }
 
-DiskStream::DiskStream(const string &str, boost::uint8_t *data, size_t size)
+DiskStream::DiskStream(const string &str, std::uint8_t *data, size_t size)
     : _state(DiskStream::NO_STATE),
       _filefd(0),
       _netfd(0),
-      _dataptr(0),
+      _dataptr(nullptr),
       _max_memload(0),
       _pagesize(0),
       _offset(0)
@@ -197,7 +197,7 @@ DiskStream::DiskStream(const string &str, boost::uint8_t *data, size_t size)
 #endif
 #endif
 
-    _dataptr = new boost::uint8_t[size];
+    _dataptr = new std::uint8_t[size];
     // Note that this is a copy operation, which may effect performance. We do this for now
     // incase the top level pointer gets deleted. This should really be using
     // boost::scoped_array, but we don't want that complexity till this code stabalizes.
@@ -215,7 +215,7 @@ DiskStream::DiskStream(const string &str, cygnal::Buffer &buf)
     : _state(DiskStream::NO_STATE),
       _filefd(0),
       _netfd(0),
-      _dataptr(0),
+      _dataptr(nullptr),
       _max_memload(0),
       _pagesize(0),
       _offset(0)
@@ -245,7 +245,7 @@ DiskStream::DiskStream(const string &str, cygnal::Buffer &buf)
 #endif
 #endif
 
-    _dataptr = new boost::uint8_t[buf.size()];
+    _dataptr = new std::uint8_t[buf.size()];
     // Note that this is a copy operation, which may effect performance. We do this for now
     // incase the top level pointer gets deleted. This should really be using
     // boost::scoped_array, but we don't want that complexity till this code stabalizes.
@@ -262,8 +262,8 @@ DiskStream::DiskStream(const string &str, cygnal::Buffer &buf)
 DiskStream::DiskStream(const string &str, int netfd)
     : _state(DiskStream::NO_STATE),
       _filefd(0),
-      _filespec(0),
-      _dataptr(0),
+      _filespec(nullptr),
+      _dataptr(nullptr),
       _max_memload(0),
       _filesize(0),
       _pagesize(0),
@@ -336,7 +336,7 @@ DiskStream::fullyPopulated()
 {
     // GNASH_REPORT_FUNCTION;
     
-    if ((_filesize < _max_memload) && (_dataptr != 0)) {
+    if ((_filesize < _max_memload) && (_dataptr != nullptr)) {
 	return true;
     }
     return false;
@@ -388,7 +388,7 @@ DiskStream::close()
 ///
 /// @return A real pointer to the location of the data at the
 ///	location pointed to by the offset.
-boost::uint8_t *
+std::uint8_t *
 DiskStream::loadToMem(off_t offset)
 {
     // GNASH_REPORT_FUNCTION;
@@ -396,7 +396,7 @@ DiskStream::loadToMem(off_t offset)
     return loadToMem(_filesize, offset);
 }
 
-boost::uint8_t *
+std::uint8_t *
 DiskStream::loadToMem(size_t filesize, off_t offset)
 {
     GNASH_REPORT_FUNCTION;
@@ -443,13 +443,13 @@ DiskStream::loadToMem(size_t filesize, off_t offset)
 	return _dataptr + offset;
     }
     
-    boost::uint8_t *dataptr = 0;
+    std::uint8_t *dataptr = nullptr;
     
     if (_filefd) {
 	/// If the data pointer is legit, then we need to unmap that page
 	/// to mmap() a new one. If we're still in the current mapped
 	/// page, then just return the existing data pointer.
-	if (dataptr != 0) {
+	if (dataptr != nullptr) {
 #ifdef _WIN32
 	    UnmapViewOfFile(_dataptr);
 #elif defined(__amigaos4__)
@@ -472,32 +472,32 @@ DiskStream::loadToMem(size_t filesize, off_t offset)
 
 	// lock in case two threads try to load the same file at the
 	// same time.
-	boost::mutex::scoped_lock lock(mem_mutex);
+	std::lock_guard<std::mutex> lock(mem_mutex);
 	
 #ifdef _WIN32
 	HANDLE handle = CreateFileMapping((HANDLE)_get_osfhandle(_filefd), NULL,
 					  PAGE_WRITECOPY, 0, 0, NULL);
 	if (handle != NULL) {
-	    dataptr = static_cast<boost::uint8_t *>(MapViewOfFile(handle, FILE_MAP_COPY, 0, offset, page));
+	    dataptr = static_cast<std::uint8_t *>(MapViewOfFile(handle, FILE_MAP_COPY, 0, offset, page));
 	    CloseHandle(handle);
 
 	}
 #elif defined(__amigaos4__)
-	dataptr = static_cast<boost::uint8_t *>(malloc(loadsize));
+	dataptr = static_cast<std::uint8_t *>(malloc(loadsize));
 #else
-	dataptr = static_cast<boost::uint8_t *>(mmap(0, loadsize,
+	dataptr = static_cast<std::uint8_t *>(mmap(nullptr, loadsize,
 						     PROT_READ, MAP_SHARED,
 						     _filefd, page));
 #endif
     } else {
 	log_error(_("Couldn't load file %s"), _filespec);
-	return 0;
+	return nullptr;
     }
     
     if (dataptr == MAP_FAILED) {
 	log_error(_("Couldn't map file %s into memory: %s"),
 		   _filespec, strerror(errno));
-	return 0;
+	return nullptr;
     } else {
 	log_debug(_("File %s a offset %d mapped to: %p"), _filespec, offset, (void *)dataptr);
 	clock_gettime (CLOCK_REALTIME, &_last_access);
@@ -508,18 +508,18 @@ DiskStream::loadToMem(size_t filesize, off_t offset)
 	_offset = 0;
     }
 
-    boost::uint8_t *ptr = dataptr;
+    std::uint8_t *ptr = dataptr;
     if (_filetype == FILETYPE_FLV) {
 	// FIXME: for now, assume all media files are in FLV format
 	_flv.reset(new cygnal::Flv);
-	boost::shared_ptr<cygnal::Flv::flv_header_t> head = _flv->decodeHeader(ptr);
+	std::shared_ptr<cygnal::Flv::flv_header_t> head = _flv->decodeHeader(ptr);
 	ptr += sizeof(cygnal::Flv::flv_header_t);
 	ptr += sizeof(cygnal::Flv::previous_size_t);
-	boost::shared_ptr<cygnal::Flv::flv_tag_t> tag  = _flv->decodeTagHeader(ptr);
+	std::shared_ptr<cygnal::Flv::flv_tag_t> tag  = _flv->decodeTagHeader(ptr);
 	ptr += sizeof(cygnal::Flv::flv_tag_t);
 	size_t bodysize = _flv->convert24(tag->bodysize);	    
 	if (tag->type == cygnal::Flv::TAG_METADATA) {
-	    boost::shared_ptr<cygnal::Element> metadata = _flv->decodeMetaData(ptr, bodysize);
+	    std::shared_ptr<cygnal::Element> metadata = _flv->decodeMetaData(ptr, bodysize);
 	    if (metadata) {
 		metadata->dump();
 	    }
@@ -575,7 +575,7 @@ DiskStream::writeToDisk(const std::string &filespec, cygnal::Buffer &data)
 }
 
 bool
-DiskStream::writeToDisk(const std::string &filespec, boost::uint8_t *data, size_t size)
+DiskStream::writeToDisk(const std::string &filespec, std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
@@ -662,11 +662,11 @@ DiskStream::open(const string &filespec, int netfd, Statistics &statistics)
     log_debug(_("Trying to open %s"), filespec);
     
     if (getFileStats(filespec)) {
-	boost::mutex::scoped_lock lock(io_mutex);
+	std::lock_guard<std::mutex> lock(io_mutex);
 	_filefd = ::open(_filespec.c_str(), O_RDONLY);
 	log_debug (_("Opening file %s (fd #%d), %lld bytes in size."),
 		   _filespec, _filefd,
-		   (boost::int64_t) _filesize);
+		   (std::int64_t) _filesize);
 	_state = OPEN;
 	_filetype = determineFileType(filespec);
 	loadToMem(0); // load the first page into memory
@@ -891,7 +891,7 @@ DiskStream::pause()
 ///	seek to.
 ///
 /// @return A real pointer to the location of the data seeked to.
-boost::uint8_t *
+std::uint8_t *
 DiskStream::seek(off_t offset)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -1044,46 +1044,46 @@ DiskStream::determineFileType(const string &filespec)
 }
 
 DiskStream::filetype_e 
-DiskStream::determineFileType( boost::uint8_t *data)
+DiskStream::determineFileType( std::uint8_t *data)
 {
 //    GNASH_REPORT_FUNCTION;
 
-  if (data == 0) {
+  if (data == nullptr) {
     return FILETYPE_NONE;
   }
  
   // JPEG, offset 6 bytes, read the string JFIF
-  if (memcpy(data + 6, "JFIF", 4) == 0) {
+  if (memcpy(data + 6, "JFIF", 4) == nullptr) {
     return FILETYPE_NONE;
   }
   // SWF, offset 0, read the string FWS
-  if (memcpy(data, "SWF", 3) == 0) {
+  if (memcpy(data, "SWF", 3) == nullptr) {
     return FILETYPE_SWF;
   }
   // compressed SWF, offset 0, read the string CWS
   // FLV, offset 0, read the string FLV
   // PNG, offset 0, read the string PNG
-  if (memcpy(data, "PNG", 3) == 0) {
+  if (memcpy(data, "PNG", 3) == nullptr) {
     return FILETYPE_PNG;
   }
   // Ogg, offset 0, read the string OggS
-  if (memcpy(data, "OggS", 4) == 0) {
+  if (memcpy(data, "OggS", 4) == nullptr) {
     return FILETYPE_OGG;
   }
   // Theora, offset 28, read string theora
-  if (memcpy(data + 28, "theora", 6) == 0) {
+  if (memcpy(data + 28, "theora", 6) == nullptr) {
     return FILETYPE_THEORA;
   }
   // FLAC, offset 28, read string FLAC
-  if (memcpy(data + 28, "FLAC", 4) == 0) {
+  if (memcpy(data + 28, "FLAC", 4) == nullptr) {
     return FILETYPE_FLAC;
   }
   // Vorbis, offset 28, read string vorbis
-  if (memcpy(data + 28, "vorbis", 6) == 0) {
+  if (memcpy(data + 28, "vorbis", 6) == nullptr) {
     return FILETYPE_VORBIS;
   }
   // MP3, offset 0, read string ID3
-  if (memcpy(data, "ID3", 3) == 0) {
+  if (memcpy(data, "ID3", 3) == nullptr) {
     return FILETYPE_MP3;
   }
 
@@ -1092,12 +1092,12 @@ DiskStream::determineFileType( boost::uint8_t *data)
   //   offset 0, read string "\<head"
   //   offset 0, read string "\<title"
   //   offset 0, read string "\<html"
-  if (memcpy(data, "ID3", 3) == 0) {
+  if (memcpy(data, "ID3", 3) == nullptr) {
     return FILETYPE_HTML;
   }
 
   // XML, offset 0, read string "\<?xml"
-  if (memcpy(data, "<?xml", 5) == 0) {
+  if (memcpy(data, "<?xml", 5) == nullptr) {
     return FILETYPE_XML;
   }
   
diff --git a/cygnal/libnet/diskstream.h b/cygnal/libnet/diskstream.h
index af221c8..5eed482 100644
--- a/cygnal/libnet/diskstream.h
+++ b/cygnal/libnet/diskstream.h
@@ -34,7 +34,7 @@
 #include "statistics.h"
 #include "getclocktime.hpp"
 #include "dsodefs.h"
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 /// \namespace gnash
 ///	This is the main namespace for Gnash and it's libraries.
@@ -90,7 +90,7 @@ public:
     DSOEXPORT DiskStream();
     DSOEXPORT DiskStream(const std::string &filespec);
     DSOEXPORT DiskStream(const std::string &filespec, cygnal::Buffer &buf);
-    DSOEXPORT DiskStream(const std::string &filespec, boost::uint8_t *data, size_t size);
+    DSOEXPORT DiskStream(const std::string &filespec, std::uint8_t *data, size_t size);
     DSOEXPORT DiskStream(const std::string &filespec, int netfd);
     DSOEXPORT ~DiskStream();
 
@@ -160,7 +160,7 @@ public:
     ///		seek to.
     ///
     /// @return A real pointer to the location of the data seeked to.
-    boost::uint8_t * seek(off_t offset);
+    std::uint8_t * seek(off_t offset);
     
     /// \brief Upload a file into a sandbox.
     ///		The sandbox is an area where uploaded files can get
@@ -186,9 +186,9 @@ public:
     ///
     /// @return A real pointer to the location of the data at the
     ///		location pointed to by the offset.
-    DSOEXPORT boost::uint8_t *loadToMem(size_t filesize, off_t offset);
-    DSOEXPORT boost::uint8_t *loadToMem(off_t offset);
-    DSOEXPORT boost::uint8_t *loadToMem() { return loadToMem(_offset); };
+    DSOEXPORT std::uint8_t *loadToMem(size_t filesize, off_t offset);
+    DSOEXPORT std::uint8_t *loadToMem(off_t offset);
+    DSOEXPORT std::uint8_t *loadToMem() { return loadToMem(_offset); };
 
     /// \brief Write the data in memory to disk
     ///
@@ -200,7 +200,7 @@ public:
     /// @param size The amount of data in bytes to be written
     ///
     /// @return true if the operation suceeded, false if it failed.
-    DSOEXPORT bool writeToDisk(const std::string &filespec, boost::uint8_t *data, size_t size);
+    DSOEXPORT bool writeToDisk(const std::string &filespec, std::uint8_t *data, size_t size);
     DSOEXPORT bool writeToDisk(const std::string &filespec, cygnal::Buffer &data);
     DSOEXPORT bool writeToDisk(const std::string &filespec);
     DSOEXPORT bool writeToDisk();
@@ -239,7 +239,7 @@ public:
     ///
     /// @return A real pointer to the base address data in the file, but after
     /// the header bytes.
-    boost::uint8_t *get() { return _dataptr; };
+    std::uint8_t *get() { return _dataptr; };
     bool fullyPopulated();
 //    bool fullyPopulated() { return ((_seekptr - _filesize) == _dataptr); };
     
@@ -304,7 +304,7 @@ private:
 
     /// \var DiskStream::_dataptr
     ///		The base address of the memory page.
-    boost::uint8_t *_dataptr;
+    std::uint8_t *_dataptr;
 
     /// \var DiskStream::_max_memload
     ///		The maximum amount of data to load into memory
@@ -313,7 +313,7 @@ private:
     /// \var DiskStream::_seekptr
     ///		The current location within the current memory page where
     ///		the data ends, which is in increments of the empry page size.
-    boost::uint8_t *_seekptr;
+    std::uint8_t *_seekptr;
 
     /// \var DiskStream::_filesize
     ///		The size of the disk file to stream.
@@ -334,7 +334,7 @@ private:
     ///
     /// @return an AMF filetype
     filetype_e determineFileType();
-    filetype_e determineFileType( boost::uint8_t *data);
+    filetype_e determineFileType( std::uint8_t *data);
     filetype_e determineFileType(const std::string &filespec);
 
     // Get the file stats, so we know how to set the
@@ -354,7 +354,7 @@ private:
 #endif
 
     // The header, tag, and onMetaData from the FLV file.
-    boost::shared_ptr<cygnal::Flv>    _flv;
+    std::shared_ptr<cygnal::Flv>    _flv;
 };
 
 /// \brief Dump to the specified output stream.
diff --git a/cygnal/libnet/http.cpp b/cygnal/libnet/http.cpp
index ba9e3f0..14a9e00 100644
--- a/cygnal/libnet/http.cpp
+++ b/cygnal/libnet/http.cpp
@@ -18,10 +18,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
+#include <mutex>
 #include <boost/tokenizer.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/date_time/gregorian/gregorian.hpp>
@@ -65,15 +62,17 @@
 
 using std::string;
 
-static boost::mutex stl_mutex;
+static std::mutex stl_mutex;
 
 namespace gnash
 {
 
 // extern map<int, Handler *> handlers;
 
+#if 0
 // FIXME, this seems too small to me.  --gnu
 static const int readsize = 1024;
+#endif
 
 static Cache& cache = Cache::getDefaultInstance();
 
@@ -139,7 +138,7 @@ HTTP::operator = (HTTP& /*obj*/)
 }
 
 
-boost::uint8_t *
+std::uint8_t *
 HTTP::processHeaderFields(cygnal::Buffer *buf)
 {
   //    GNASH_REPORT_FUNCTION;
@@ -162,7 +161,7 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
 	    if (name == "keep-alive") {
 		_keepalive = true;
 		if ((value != "on") && (value != "off")) {
-		    _max_requests = strtol(value.c_str(), NULL, 0);
+		    _max_requests = strtol(value.c_str(), nullptr, 0);
 		    // log_debug("Setting Max Requests for Keep-Alive to %d", _max_requests);
 		}
 	    }
@@ -172,7 +171,7 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
 		}
 	    }
 	    if (name == "content-length") {
-		_filesize = strtol(value.c_str(), NULL, 0);
+		_filesize = strtol(value.c_str(), nullptr, 0);
 		log_debug(_("Setting Content Length to %d"), _filesize);
 	    }
 	    if (name == "content-type") {
@@ -191,8 +190,8 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
 	    
 //	    cerr << "FIXME: " << (void *)i << " : " << dec <<  end << endl;
 	} else {
-	    const boost::uint8_t *cmd = reinterpret_cast<const boost::uint8_t *>(i->c_str());
-	    if (extractCommand(const_cast<boost::uint8_t *>(cmd)) == HTTP::HTTP_NONE) {
+	    const std::uint8_t *cmd = reinterpret_cast<const std::uint8_t *>(i->c_str());
+	    if (extractCommand(const_cast<std::uint8_t *>(cmd)) == HTTP::HTTP_NONE) {
 		break;
 #if 1
 	    } else {
@@ -236,28 +235,28 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
 
 // // Parse an Echo Request message coming from the Red5 echo_test. This
 // // method should only be used for testing purposes.
-// vector<boost::shared_ptr<cygnal::Element > >
-// HTTP::parseEchoRequest(boost::uint8_t *data, size_t size)
+// vector<std::shared_ptr<cygnal::Element > >
+// HTTP::parseEchoRequest(std::uint8_t *data, size_t size)
 // {
 // //    GNASH_REPORT_FUNCTION;
     
-//     vector<boost::shared_ptr<cygnal::Element > > headers;
+//     vector<std::shared_ptr<cygnal::Element > > headers;
 	
 //     // skip past the header bytes, we don't care about them.
-//     boost::uint8_t *tmpptr = data + 6;
+//     std::uint8_t *tmpptr = data + 6;
     
-//     boost::uint16_t length;
-//     length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-//     tmpptr += sizeof(boost::uint16_t);
+//     std::uint16_t length;
+//     length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+//     tmpptr += sizeof(std::uint16_t);
 
 //     // Get the first name, which is a raw string, and not preceded by
 //     // a type byte.
-//     boost::shared_ptr<cygnal::Element > el1(new cygnal::Element);
+//     std::shared_ptr<cygnal::Element > el1(new cygnal::Element);
     
 //     // If the length of the name field is corrupted, then we get out of
 //     // range quick, and corrupt memory. This is a bit of a hack, but
 //     // reduces memory errors caused by some of the corrupted tes cases.
-//     boost::uint8_t *endstr = std::find(tmpptr, tmpptr+length, '\0');
+//     std::uint8_t *endstr = std::find(tmpptr, tmpptr+length, '\0');
 //     if (endstr != tmpptr+length) {
 // 	log_debug("Caught corrupted string! length was %d, null at %d",
 // 		  length,  endstr-tmpptr);
@@ -269,9 +268,9 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
     
 //     // Get the second name, which is a raw string, and not preceded by
 //     // a type byte.
-//     length = ntohs((*(boost::uint16_t *)tmpptr) & 0xffff);
-//     tmpptr += sizeof(boost::uint16_t);
-//     boost::shared_ptr<cygnal::Element > el2(new cygnal::Element);
+//     length = ntohs((*(std::uint16_t *)tmpptr) & 0xffff);
+//     tmpptr += sizeof(std::uint16_t);
+//     std::shared_ptr<cygnal::Element > el2(new cygnal::Element);
 
 // //     std::string name2(reinterpret_cast<const char *>(tmpptr), length);
 // //     el2->setName(name2.c_str(), name2.size());
@@ -291,11 +290,11 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
 //     // Get the last two pieces of data, which are both AMF encoded
 //     // with a type byte.
 //     amf::AMF amf;
-//     boost::shared_ptr<cygnal::Element> el3 = amf.extractAMF(tmpptr, tmpptr + size);
+//     std::shared_ptr<cygnal::Element> el3 = amf.extractAMF(tmpptr, tmpptr + size);
 //     headers.push_back(el3);
 //     tmpptr += amf.totalsize();
     
-//     boost::shared_ptr<cygnal::Element> el4 = amf.extractAMF(tmpptr, tmpptr + size);
+//     std::shared_ptr<cygnal::Element> el4 = amf.extractAMF(tmpptr, tmpptr + size);
 //     headers.push_back(el4);
 
 //      return headers;
@@ -308,7 +307,7 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
 // HTTP::formatEchoResponse(const std::string &num, cygnal::Element &el)
 // {
 // //    GNASH_REPORT_FUNCTION;
-//     boost::shared_ptr<cygnal::Buffer> data;
+//     std::shared_ptr<cygnal::Buffer> data;
 
 //     cygnal::Element nel;
 //     if (el.getType() == cygnal::Element::TYPED_OBJECT_AMF0) {
@@ -319,7 +318,7 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
 // 	    // FIXME: see about using std::reverse() instead.
 // 	    for (int i=el.propertySize()-1; i>=0; i--) {
 // // 	    for (int i=0 ; i<el.propertySize(); i++) {
-// 		boost::shared_ptr<cygnal::Element> child = el.getProperty(i);
+// 		std::shared_ptr<cygnal::Element> child = el.getProperty(i);
 // 		nel.addProperty(child);
 // 	    }
 // 	    data = nel.encode();
@@ -335,12 +334,12 @@ HTTP::processHeaderFields(cygnal::Buffer *buf)
 
 #if 0				// FIXME:
 // Client side parsing of response message codes
-boost::shared_ptr<HTTP::http_response_t> 
+std::shared_ptr<HTTP::http_response_t>
 HTTP::parseStatus(const std::string &line)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    boost::shared_ptr<http_response_t> status;
+    std::shared_ptr<http_response_t> status;
     // The respnse is a number followed by the error message.
     string::size_type pos = line.find(" ", 0);
     if (pos != string::npos) {
@@ -358,7 +357,7 @@ HTTP::processClientRequest(int fd)
 //    GNASH_REPORT_FUNCTION;
     bool result = false;
     
-    boost::shared_ptr<cygnal::Buffer> buf(_que.peek());
+    std::shared_ptr<cygnal::Buffer> buf(_que.peek());
     if (buf) {
 	_cmd = extractCommand(buf->reference());
 	switch (_cmd) {
@@ -400,7 +399,7 @@ HTTP::processGetRequest(int fd)
 {
     GNASH_REPORT_FUNCTION;
 
-//     boost::uint8_t buffer[readsize+1];
+//     std::uint8_t buffer[readsize+1];
 //     const char *ptr = reinterpret_cast<const char *>(buffer);
 //     memset(buffer, 0, readsize+1);
     
@@ -413,7 +412,7 @@ HTTP::processGetRequest(int fd)
 	return false;
     }
     
-    boost::shared_ptr<cygnal::Buffer> buf(_que.pop());
+    std::shared_ptr<cygnal::Buffer> buf(_que.pop());
 //    cerr << "YYYYYYY: " << (char *)buf->reference() << endl;
 //    cerr << hexify(buf->reference(), buf->allocated(), false) << endl;
     
@@ -428,7 +427,7 @@ HTTP::processGetRequest(int fd)
 
     string url = _docroot + _filespec;
     // See if the file is in the cache and already opened.
-    boost::shared_ptr<DiskStream> filestream(cache.findFile(url));
+    std::shared_ptr<DiskStream> filestream(cache.findFile(url));
     if (filestream) {
 	log_network(_("FIXME: found file in cache!"));
     } else {
@@ -516,7 +515,7 @@ HTTP::processPostRequest(int fd)
 	return false;
     }
     
-    boost::shared_ptr<cygnal::Buffer> buf(_que.pop());
+    std::shared_ptr<cygnal::Buffer> buf(_que.pop());
     if (buf == 0) {
 	log_debug(_("Que empty, net connection dropped for fd #%d"), getFileFd());
 	return false;
@@ -524,9 +523,9 @@ HTTP::processPostRequest(int fd)
 //    cerr << __FUNCTION__ << buf->allocated() << " : " << hexify(buf->reference(), buf->allocated(), true) << endl;
     
     clearHeader();
-    boost::uint8_t *data = processHeaderFields(*buf);
+    std::uint8_t *data = processHeaderFields(*buf);
     size_t length = strtol(getField("content-length").c_str(), NULL, 0);
-    boost::shared_ptr<cygnal::Buffer> content(new cygnal::Buffer(length));
+    std::shared_ptr<cygnal::Buffer> content(new cygnal::Buffer(length));
     int ret = 0;
     if (buf->allocated() - (data - buf->reference()) ) {
 //	cerr << "Don't need to read more data: have " << buf->allocated() << " bytes" << endl;
@@ -549,7 +548,7 @@ HTTP::processPostRequest(int fd)
 	log_debug(_("Got AMF data in POST"));
 #if 0
 	amf::AMF amf;
-	boost::shared_ptr<cygnal::Element> el = amf.extractAMF(content.reference(), content.end());
+	std::shared_ptr<cygnal::Element> el = amf.extractAMF(content.reference(), content.end());
 	el->dump();		// FIXME: do something intelligent
 				// with this Element
 #endif
@@ -564,10 +563,10 @@ HTTP::processPostRequest(int fd)
 	log_debug(_("Got CGI echo request in POST"));
 //	cerr << "FIXME 2: " << hexify(content->reference(), content->allocated(), true) << endl;
 
-	vector<boost::shared_ptr<cygnal::Element> > headers = parseEchoRequest(*content);
-  	//boost::shared_ptr<cygnal::Element> &el0 = headers[0];
-  	//boost::shared_ptr<cygnal::Element> &el1 = headers[1];
-  	//boost::shared_ptr<cygnal::Element> &el3 = headers[3];
+	vector<std::shared_ptr<cygnal::Element> > headers = parseEchoRequest(*content);
+  	//std::shared_ptr<cygnal::Element> &el0 = headers[0];
+  	//std::shared_ptr<cygnal::Element> &el1 = headers[1];
+  	//std::shared_ptr<cygnal::Element> &el3 = headers[3];
 	
     if (headers.size() >= 4) {
 	    if (headers[3]) {
@@ -642,7 +641,7 @@ HTTP::getContentLength()
     //    GNASH_REPORT_FUNCTION;
     std::string length = getField("content-length");
     if (length.size() > 0) {
-	return static_cast<size_t>(strtol(length.c_str(), NULL, 0));
+	return static_cast<size_t>(strtol(length.c_str(), nullptr, 0));
     }
 
     return 0;
@@ -732,11 +731,11 @@ HTTP::checkGeneralFields(cygnal::Buffer & /* buf */)
     return false;
 }
 
-boost::shared_ptr<std::vector<std::string> >
+std::shared_ptr<std::vector<std::string> >
 HTTP::getFieldItem(const std::string &name)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<std::vector<std::string> > ptr(new std::vector<std::string>);
+    std::shared_ptr<std::vector<std::string> > ptr(new std::vector<std::string>);
     Tok t(_fields[name], Sep(", "));
     for (Tok::iterator i = t.begin(), e = t.end(); i != e; ++i) {
 	ptr->push_back(*i);
@@ -1021,7 +1020,7 @@ HTTP::formatContentLength()
 }
 
 cygnal::Buffer &
-HTTP::formatContentLength(boost::uint32_t filesize)
+HTTP::formatContentLength(std::uint32_t filesize)
 {
 //    GNASH_REPORT_FUNCTION;
 //    _header << "Content-Length: " << filesize << "\r\n";
@@ -1140,11 +1139,11 @@ HTTP::formatEchoResponse(const std::string &num, cygnal::Buffer &data)
 }
 
 cygnal::Buffer &
-HTTP::formatEchoResponse(const std::string &num, boost::uint8_t *data, size_t size)
+HTTP::formatEchoResponse(const std::string &num, std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    //boost::uint8_t *tmpptr  = data;
+    //std::uint8_t *tmpptr  = data;
     
     // FIXME: temporary hacks while debugging
     cygnal::Buffer fixme("00 00 00 00 00 01");
@@ -1169,11 +1168,11 @@ HTTP::formatEchoResponse(const std::string &num, boost::uint8_t *data, size_t si
     // the request, a slash followed by a number like "/2".
     string result = num;
     result += "/onResult";
-    boost::shared_ptr<cygnal::Buffer> res = cygnal::AMF::encodeString(result);
+    std::shared_ptr<cygnal::Buffer> res = cygnal::AMF::encodeString(result);
     _buffer.append(res->begin()+1, res->size()-1);
 
     // Add the null data item
-    boost::shared_ptr<cygnal::Buffer> null = cygnal::AMF::encodeString("null");
+    std::shared_ptr<cygnal::Buffer> null = cygnal::AMF::encodeString("null");
     _buffer.append(null->begin()+1, null->size()-1);
 
     // Add the other binary blob
@@ -1251,7 +1250,7 @@ HTTP::formatRequest(const string &url, http_method_e cmd)
 
 
 HTTP::http_method_e
-HTTP::extractCommand(boost::uint8_t *data)
+HTTP::extractCommand(std::uint8_t *data)
 {
     // GNASH_REPORT_FUNCTION;
 
@@ -1286,9 +1285,9 @@ HTTP::extractCommand(boost::uint8_t *data)
     // For valid requests, the second argument, delimited by spaces
     // is the filespec of the file being requested or transmitted.
     if (cmd != HTTP::HTTP_NONE) {
-	boost::uint8_t *start = std::find(data, data+7, ' ') + 1;
-	boost::uint8_t *end   = std::find(start + 2, data+PATH_MAX, ' ');
-	boost::uint8_t *params = std::find(start, end, '?');
+	std::uint8_t *start = std::find(data, data+7, ' ') + 1;
+	std::uint8_t *end   = std::find(start + 2, data+PATH_MAX, ' ');
+	std::uint8_t *params = std::find(start, end, '?');
 	if (params != end) {
 	    _params = std::string(params+1, end);
 	    _filespec = std::string(start, params);
@@ -1349,7 +1348,7 @@ HTTP::sendMsg(int /* fd */)
 ///
 /// @return The number of bytes sent
 int DSOEXPORT
-HTTP::sendMsg(const boost::uint8_t *data, size_t size)
+HTTP::sendMsg(const std::uint8_t *data, size_t size)
 {
     GNASH_REPORT_FUNCTION;
 //    _header
@@ -1358,7 +1357,7 @@ HTTP::sendMsg(const boost::uint8_t *data, size_t size)
 }
 
 size_t
-HTTP::recvChunked(boost::uint8_t *data, size_t size)
+HTTP::recvChunked(std::uint8_t *data, size_t size)
 {
 //     GNASH_REPORT_FUNCTION;
     bool done = false;
@@ -1375,13 +1374,13 @@ HTTP::recvChunked(boost::uint8_t *data, size_t size)
     // line number. There is supposed to be a ';' before the \r\n, as this
     // field can have other attributes, but the OpenStreetMap server doesn't
     // use the semi-colon, as it's optional, and rarely used anyway.
-    boost::shared_ptr<cygnal::Buffer> buf;
-    boost::uint8_t *start = std::find(data, data+size, '\r') + 2;
+    std::shared_ptr<cygnal::Buffer> buf;
+    std::uint8_t *start = std::find(data, data+size, '\r') + 2;
     if (start != data+size) {
 	// extract the total size of the chunk
 	std::string bytes(data, start-2);
 	size_t sizesize = start-data;
-	total = static_cast<size_t>(strtol(bytes.c_str(), NULL, 16));
+	total = static_cast<size_t>(strtol(bytes.c_str(), nullptr, 16));
 	log_debug(_("%s: Total size for first chunk is: %d, data size %d (%d)"),
 		  __PRETTY_FUNCTION__, total, size, sizesize);
 	buf.reset(new cygnal::Buffer(total+2));
@@ -1430,7 +1429,7 @@ HTTP::recvChunked(boost::uint8_t *data, size_t size)
 		    if (start != buf->reference()+ret) {
 			// extract the total size of the chunk
 			std::string bytes(buf->reference(), start-2);
-			total = static_cast<size_t>(strtol(bytes.c_str(), NULL, 16));
+			total = static_cast<size_t>(strtol(bytes.c_str(), nullptr, 16));
 			// The total size of the last chunk is always "0"
 			if (total == 0) {
 			    log_debug(_("%s: end of chunks!"), __PRETTY_FUNCTION__);
@@ -1503,7 +1502,7 @@ HTTP::recvMsg(int fd, size_t size)
     Network net;
 
     do {
-	boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(size));
+	std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(size));
 	ret = net.readNet(fd, *buf, 5);
 //	cerr << __PRETTY_FUNCTION__ << ret << " : " << (char *)buf->reference() << endl;
 
@@ -1555,7 +1554,7 @@ void
 HTTP::dump() {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::mutex::scoped_lock lock(stl_mutex);
+    std::lock_guard<std::mutex> lock(stl_mutex);
         
     log_debug (_("==== The HTTP header breaks down as follows: ===="));
     log_debug (_("Filespec: %s"), _filespec.c_str());
diff --git a/cygnal/libnet/http.h b/cygnal/libnet/http.h
index 74b3417..f7a396a 100644
--- a/cygnal/libnet/http.h
+++ b/cygnal/libnet/http.h
@@ -23,9 +23,6 @@
 #include <string>
 #include <map>
 #include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
 #include <sstream>
 
 #ifdef HAVE_CONFIG_H
@@ -137,8 +134,8 @@ public:
     bool checkGeneralFields(cygnal::Buffer &buf);
 
 //     // Parse an Echo Request message coming from the Red5 echo_test.
-    std::vector<boost::shared_ptr<cygnal::Element > > parseEchoRequest(cygnal::Buffer &buf) { return parseEchoRequest(buf.reference(), buf.size()); };
-    std::vector<boost::shared_ptr<cygnal::Element > > parseEchoRequest(boost::uint8_t *buf, size_t size);
+    std::vector<std::shared_ptr<cygnal::Element > > parseEchoRequest(cygnal::Buffer &buf) { return parseEchoRequest(buf.reference(), buf.size()); };
+    std::vector<std::shared_ptr<cygnal::Element > > parseEchoRequest(std::uint8_t *buf, size_t size);
     
     // Convert the Content-Length field to a number we can use
     size_t getContentLength();
@@ -146,7 +143,7 @@ public:
     // process all the header fields in the Buffer, storing them internally
     // in _fields. The address returned is the address where the Content data
     // starts, and is "Content-Length" bytes long, of "Content-Type" data.
-    boost::uint8_t *processHeaderFields(cygnal::Buffer *buf);
+    std::uint8_t *processHeaderFields(cygnal::Buffer *buf);
     
     // Get the field for header 'name' that was stored by processHeaderFields()
     std::string &getField(const std::string &name) { return _fields[name]; };
@@ -155,13 +152,13 @@ public:
     std::map<std::string, std::string> &getFields() { return _fields; };
 
     // Get an array of values for header field 'name'.
-    boost::shared_ptr<std::vector<std::string> > getFieldItem(const std::string &name);
+    std::shared_ptr<std::vector<std::string> > getFieldItem(const std::string &name);
 
     // Client side parsing of response message codes
-    boost::shared_ptr<http_response_t> parseStatus(const std::string &line);
+    std::shared_ptr<http_response_t> parseStatus(const std::string &line);
 
     // Handle the response for the request.
-    boost::shared_ptr<cygnal::Buffer> formatServerReply(http_status_e code);
+    std::shared_ptr<cygnal::Buffer> formatServerReply(http_status_e code);
     cygnal::Buffer &formatGetReply(DiskStream::filetype_e type, size_t size, http_status_e code); 
     cygnal::Buffer &formatGetReply(size_t size, http_status_e code); 
     cygnal::Buffer &formatGetReply(http_status_e code); 
@@ -196,7 +193,7 @@ public:
     // format a response to the 'echo' test used for testing Gnash.
     cygnal::Buffer &formatEchoResponse(const std::string &num, cygnal::Element &el);
     cygnal::Buffer &formatEchoResponse(const std::string &num, cygnal::Buffer &data);
-    cygnal::Buffer &formatEchoResponse(const std::string &num, boost::uint8_t *data, size_t size);
+    cygnal::Buffer &formatEchoResponse(const std::string &num, std::uint8_t *data, size_t size);
 
     cygnal::Buffer &formatMethod(const std::string &data)
  	{return formatCommon("Method: " + data); };
@@ -210,7 +207,7 @@ public:
     cygnal::Buffer &formatKeepAlive(const std::string &data)
  	{return formatCommon("Keep-Alive: " + data); };
     cygnal::Buffer &formatContentLength();
-    cygnal::Buffer &formatContentLength(boost::uint32_t filesize);
+    cygnal::Buffer &formatContentLength(std::uint32_t filesize);
     cygnal::Buffer &formatContentType();
     cygnal::Buffer &formatContentType(DiskStream::filetype_e type);
     cygnal::Buffer &formatHost(const std::string &data)
@@ -238,7 +235,7 @@ public:
 //     cygnal::Buffer &formatErrorResponse(http_status_e err);
     
     // Return the header that's been built up.
-    boost::uint8_t *getHeader() { return _buffer.reference(); };
+    std::uint8_t *getHeader() { return _buffer.reference(); };
 
     // Return the header that's been built up.
     cygnal::Buffer &getBuffer() { return _buffer; };
@@ -260,7 +257,7 @@ public:
     int recvMsg(int fd);
     int recvMsg(int fd, size_t size);
 
-    size_t recvChunked(boost::uint8_t *data, size_t size);
+    size_t recvChunked(std::uint8_t *data, size_t size);
     
     /// \brief Send a message to the other end of the network connection.
     ///
@@ -274,11 +271,11 @@ public:
     /// @return The number of bytes sent
     int sendMsg();
     int sendMsg(int fd);
-    int sendMsg(const boost::uint8_t *data, size_t size);
-    int sendMsg(boost::shared_ptr<cygnal::Buffer> &buf)
+    int sendMsg(const std::uint8_t *data, size_t size);
+    int sendMsg(std::shared_ptr<cygnal::Buffer> &buf)
 	{ return sendMsg(buf->reference(), buf->size()); };
     int sendMsg(std::stringstream &sstr)
-	{ return sendMsg(reinterpret_cast<const boost::uint8_t *>(sstr.str().c_str()), sstr.str().size()); };
+	{ return sendMsg(reinterpret_cast<const std::uint8_t *>(sstr.str().c_str()), sstr.str().size()); };
     
     // These accessors are used mostly just for debugging.
     bool keepAlive() { return _keepalive; }
@@ -298,20 +295,20 @@ public:
     std::string &getDocRoot() { return _docroot; };
     
     // Pop the first date element off the que
-    boost::shared_ptr<cygnal::Buffer> DSOEXPORT popChunk() { return _que.pop(); };
+    std::shared_ptr<cygnal::Buffer> DSOEXPORT popChunk() { return _que.pop(); };
     // Peek at the first date element witjhout removing it from the que
-    boost::shared_ptr<cygnal::Buffer> DSOEXPORT peekChunk() { return _que.peek(); };
+    std::shared_ptr<cygnal::Buffer> DSOEXPORT peekChunk() { return _que.peek(); };
     // Get the number of elements in the que
     size_t DSOEXPORT sizeChunks() { return _que.size(); };
 
-    boost::shared_ptr<cygnal::Buffer> DSOEXPORT mergeChunks() { return _que.merge(); };
+    std::shared_ptr<cygnal::Buffer> DSOEXPORT mergeChunks() { return _que.merge(); };
 
     http_method_e getOperation() { return _cmd; };
     
 protected:
     // Examine the beginning of the data for an HTTP request command
     // like GET or POST, etc...
-    http_method_e extractCommand(boost::uint8_t *data);
+    http_method_e extractCommand(std::uint8_t *data);
     http_method_e extractCommand(cygnal::Buffer &data)
 	{ return extractCommand(data.reference()); };    
 
@@ -325,7 +322,7 @@ protected:
     DiskStream::filetype_e  _filetype;
     std::string		_filespec;
     std::string		_params;
-    boost::uint32_t     _filesize;
+    std::uint32_t     _filesize;
     std::map<int, struct status_codes *> _status_codes;
     
     std::map<std::string, std::string> _fields;
diff --git a/cygnal/libnet/lirc.cpp b/cygnal/libnet/lirc.cpp
index 3d2b8b0..c0a8bc0 100644
--- a/cygnal/libnet/lirc.cpp
+++ b/cygnal/libnet/lirc.cpp
@@ -36,7 +36,7 @@ const int TIMEOUT = 10;
 const int BUTTONSIZE = 10;
 
 Lirc::Lirc() 
-    : _sockname("/tmp/lircd"), _button(0)
+    : _sockname("/tmp/lircd"), _button(nullptr)
 {
 //    GNASH_REPORT_FUNCTION;
     _button = new char[BUTTONSIZE];
@@ -45,7 +45,7 @@ Lirc::Lirc()
 Lirc::~Lirc()
 {
 //    GNASH_REPORT_FUNCTION;
-    if (_button != 0) {
+    if (_button != nullptr) {
 	delete _button;
     }
     closeNet();
diff --git a/cygnal/libnet/network.cpp b/cygnal/libnet/network.cpp
index e6cb1d9..7925136 100644
--- a/cygnal/libnet/network.cpp
+++ b/cygnal/libnet/network.cpp
@@ -21,8 +21,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
+#include <mutex>
 #include <vector>
 
 #include "utility.h"
@@ -197,7 +196,7 @@ Network::createServer(std::string hostname, short port)
                     clientservice, sizeof(clientservice),
                     NI_NUMERICHOST);
         
-        boost::shared_ptr<char> straddr = getIPString(ot);
+        std::shared_ptr<char> straddr = getIPString(ot);
         
         if (ot->ai_family == AF_INET6) {
             log_debug("%s has IPV6 address of: %s", hostname, straddr.get());
@@ -220,14 +219,14 @@ Network::createServer(std::string hostname, short port)
             // Try the next IP number
             it = it->ai_next;
         } else {
-            boost::shared_ptr<char> straddr = getIPString(it);
+            std::shared_ptr<char> straddr = getIPString(it);
             log_debug("Socket created for %s", straddr); 
             break;
         }
     }
 
     // error, wasn't able to create a socket
-    if (it == 0) {
+    if (it == nullptr) {
         log_error(_("unable to create socket: %s"), strerror(errno));
         return -1;
     }
@@ -339,9 +338,9 @@ Network::newConnection(bool block, int fd)
 	tval.tv_sec = _timeout;
 	tval.tv_nsec = 0;
         if (block) {
-	    ret = pselect(fd+1, &fdset, NULL, NULL, NULL, &blockset);
+	    ret = pselect(fd+1, &fdset, nullptr, nullptr, nullptr, &blockset);
 	} else {
-	    ret = pselect(fd+1, &fdset, NULL, NULL, &tval, &blockset);
+	    ret = pselect(fd+1, &fdset, nullptr, nullptr, &tval, &blockset);
 	}
 	if (sig_number) {
 	    log_debug("Have a SIGINT interrupt waiting!");
@@ -460,7 +459,7 @@ Network::connectSocket(const string &sockname)
         tval.tv_sec = 5;
         tval.tv_usec = 0;
 
-        ret = ::select(_sockfd+1, &fdset, NULL, NULL, &tval);
+        ret = ::select(_sockfd+1, &fdset, nullptr, nullptr, &tval);
 
         // If interrupted by a system call, try again
         if (ret == -1 && errno == EINTR) {
@@ -576,7 +575,7 @@ Network::createClient(const string &hostname, short port)
     req.ai_family = AF_UNSPEC;  // Allow IPv4 or IPv6
     req.ai_socktype = SOCK_STREAM;
     
-    if ((code = getaddrinfo(hostname.c_str(), 0, &req, &ans)) != 0) {
+    if ((code = getaddrinfo(hostname.c_str(), nullptr, &req, &ans)) != 0) {
         log_error(_("getaddrinfo() failed with code: #%d - %s\n"),
                   code, gai_strerror(code));
         return false;
@@ -600,7 +599,7 @@ Network::createClient(const string &hostname, short port)
                     clientservice, sizeof(clientservice),
                     NI_NUMERICHOST);
         
-        boost::shared_ptr<char> straddr = getIPString(ot);
+        std::shared_ptr<char> straddr = getIPString(ot);
         
         if (ot->ai_family == AF_INET6) {
             log_debug("%s has IPV6 address of: %s", hostname, straddr.get());
@@ -638,7 +637,7 @@ Network::createClient(const string &hostname, short port)
     struct sockaddr *saddr = it->ai_addr;
 
     const int addrlen = it->ai_addrlen;
-    boost::shared_ptr<char> straddr = getIPString(it);
+    std::shared_ptr<char> straddr = getIPString(it);
 
     freeaddrinfo(ans);          // free the response data
     
@@ -654,7 +653,7 @@ Network::createClient(const string &hostname, short port)
         tval.tv_sec = 5;
         tval.tv_usec = 0;
 
-        ret = ::select(_sockfd+1, &fdset, NULL, NULL, &tval);
+        ret = ::select(_sockfd+1, &fdset, nullptr, nullptr, &tval);
 
         // If interrupted by a system call, try again
         if (ret == -1 && errno == EINTR) {
@@ -821,11 +820,11 @@ Network::closeConnection(int fd)
     return false;
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 Network::readNet()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buffer(new cygnal::Buffer);
+    std::shared_ptr<cygnal::Buffer> buffer(new cygnal::Buffer);
     int ret = readNet(*buffer);
     if (ret > 0) {
 	buffer->resize(ret);
@@ -923,7 +922,7 @@ Network::readNet(int fd, byte_t *buffer, int nbytes, int timeout)
     fd_set              fdset;
     int                 ret = -1;
 
-//     boost::mutex::scoped_lock lock(_net_mutex);
+//     std::lock_guard<std::mutex> lock(_net_mutex);
 
     if (_debug) {
 	log_debug(_("Trying to read %d bytes from fd #%d"), nbytes, fd);
@@ -946,7 +945,7 @@ Network::readNet(int fd, byte_t *buffer, int nbytes, int timeout)
 	sigemptyset(&blockset);        
         // sigaddset(&blockset, SIGINT); /* Block SIGINT */
 //        sigaddset(&blockset, SIGPIPE); /* Block SIGPIPE */
-        sigprocmask(SIG_BLOCK, &blockset, NULL);
+        sigprocmask(SIG_BLOCK, &blockset, nullptr);
 
 	// Trap ^C (SIGINT) so we can kill all the threads
 // 	struct sigaction  act;
@@ -959,7 +958,7 @@ Network::readNet(int fd, byte_t *buffer, int nbytes, int timeout)
 #endif
         if (timeout == 0) {
 #ifdef HAVE_PSELECT
-	    ret = pselect(fd+1, &fdset, NULL, NULL, NULL, &blockset);
+	    ret = pselect(fd+1, &fdset, nullptr, nullptr, nullptr, &blockset);
 #else
 	    ret = select(fd+1, &fdset, NULL, NULL, NULL);
 #endif
@@ -967,7 +966,7 @@ Network::readNet(int fd, byte_t *buffer, int nbytes, int timeout)
 #ifdef HAVE_PSELECT
 	    tval.tv_sec = timeout;
 	    tval.tv_nsec = 0;
-	    ret = pselect(fd+1, &fdset, NULL, NULL, &tval, &blockset);
+	    ret = pselect(fd+1, &fdset, nullptr, nullptr, &tval, &blockset);
 	    sigpending(&pending);
 	    if (sigismember(&pending, SIGINT)) {
 		log_debug("Have a pending SIGINT interrupt waiting!");
@@ -1115,7 +1114,7 @@ Network::writeNet(int fd, const byte_t *buffer, int nbytes, int timeout)
     fd_set              fdset;
     int                 ret = -1;
 
-    boost::mutex::scoped_lock lock(_net_mutex);
+    std::lock_guard<std::mutex> lock(_net_mutex);
     
     // We need a writable, and not const point for byte arithmetic.
     byte_t *bufptr = const_cast<byte_t *>(buffer);
@@ -1137,7 +1136,7 @@ Network::writeNet(int fd, const byte_t *buffer, int nbytes, int timeout)
 	sigemptyset(&blockset);        
         // sigaddset(&blockset, SIGINT); /* Block SIGINT */
         sigaddset(&blockset, SIGPIPE);
-        sigprocmask(SIG_BLOCK, &blockset, NULL);
+        sigprocmask(SIG_BLOCK, &blockset, nullptr);
 #else
 	struct timeval tval;
 #endif
@@ -1148,7 +1147,7 @@ Network::writeNet(int fd, const byte_t *buffer, int nbytes, int timeout)
 #ifdef HAVE_PSELECT
 	tval.tv_sec = timeout;
 	tval.tv_nsec = 0;
-	ret = pselect(fd+1, NULL, &fdset, NULL, &tval, &blockset);
+	ret = pselect(fd+1, nullptr, &fdset, nullptr, &tval, &blockset);
 	sigpending(&pending);
 	if (sigismember(&pending, SIGINT)) {
 	    log_debug("Have a pending SIGINT interrupt waiting!");
@@ -1242,7 +1241,7 @@ Network::addPollFD(struct pollfd &fd, Network::entry_t *func)
 //    GNASH_REPORT_FUNCTION;
 
     log_debug(_("%s: adding fd #%d to pollfds"), __PRETTY_FUNCTION__, fd.fd);
-    boost::mutex::scoped_lock lock(_poll_mutex);
+    std::lock_guard<std::mutex> lock(_poll_mutex);
     _handlers[fd.fd] = func;
      _pollfds.push_back(fd);
 //     notify();
@@ -1253,7 +1252,7 @@ Network::addPollFD(struct pollfd &fd)
 {
 //    GNASH_REPORT_FUNCTION;
     log_debug(_("%s: adding fd #%d to pollfds"), __PRETTY_FUNCTION__, fd.fd);
-    boost::mutex::scoped_lock lock(_poll_mutex);
+    std::lock_guard<std::mutex> lock(_poll_mutex);
      _pollfds.push_back(fd);
 //     notify();
 }
@@ -1262,7 +1261,7 @@ struct pollfd
 &Network::getPollFD(int index)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_poll_mutex);
+    std::lock_guard<std::mutex> lock(_poll_mutex);
     return _pollfds[index];
 }
 
@@ -1270,7 +1269,7 @@ struct pollfd *
 Network::getPollFDPtr()
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_poll_mutex);
+    std::lock_guard<std::mutex> lock(_poll_mutex);
     return &_pollfds[0];
 }
 
@@ -1279,7 +1278,7 @@ Network::erasePollFD(int fd)
 {
 //    GNASH_REPORT_FUNCTION;
     log_debug(_("%s: erasing fd #%d from pollfds"), __PRETTY_FUNCTION__, fd);
-    boost::mutex::scoped_lock lock(_poll_mutex);
+    std::lock_guard<std::mutex> lock(_poll_mutex);
     if (_pollfds.size() > 0) {
 	vector<struct pollfd>::iterator it;
 	for (it=_pollfds.begin(); it<_pollfds.end(); ++it) {
@@ -1295,7 +1294,7 @@ void
 Network::erasePollFD(vector<struct pollfd>::iterator &itt)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_poll_mutex);
+    std::lock_guard<std::mutex> lock(_poll_mutex);
     if (_pollfds.size() == 1) {
  	_pollfds.clear();
      } else {
@@ -1307,7 +1306,7 @@ void
 Network::addEntry(int fd, Network::entry_t *func)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_poll_mutex);
+    std::lock_guard<std::mutex> lock(_poll_mutex);
     _handlers[fd] = func;
 }
 
@@ -1315,20 +1314,20 @@ Network::entry_t *
 Network::getEntry(int fd)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_poll_mutex);
+    std::lock_guard<std::mutex> lock(_poll_mutex);
     return _handlers[fd];
 }
 
-boost::shared_ptr<std::vector<struct pollfd> >
+std::shared_ptr<std::vector<struct pollfd> >
 Network::waitForNetData(int limit, struct pollfd *fds)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    boost::shared_ptr<vector<struct pollfd> > hits(new vector<struct pollfd>);
+    std::shared_ptr<vector<struct pollfd> > hits(new vector<struct pollfd>);
 
     log_debug(_("%s: waiting for %d fds"), __FUNCTION__, limit);
 
-    if ((fds == 0) || (limit == 0)) {
+    if ((fds == nullptr) || (limit == 0)) {
 	return hits;
     }
     
@@ -1342,7 +1341,7 @@ Network::waitForNetData(int limit, struct pollfd *fds)
 	sigemptyset(&blockset);         /* Block SIGINT */
 //        sigaddset(&blockset, SIGINT);
 //        sigaddset(&blockset, SIGPIPE);
-        sigprocmask(SIG_BLOCK, &blockset, NULL);
+        sigprocmask(SIG_BLOCK, &blockset, nullptr);
 
 	tval.tv_sec = 5; // FIXME: was _timeout;
 	tval.tv_nsec = 0;
@@ -1492,7 +1491,7 @@ Network::waitForNetData(int limit, fd_set files)
     struct timeval tval;
     tval.tv_sec = 0;
     tval.tv_usec = timeout * 1000; // was 1000000
-    int ret = select(limit+1, &fdset, NULL, NULL, &tval);
+    int ret = select(limit+1, &fdset, nullptr, nullptr, &tval);
 #endif
     // If interrupted by a system call, try again
     if (ret == -1 && errno == EINTR) {
@@ -1657,7 +1656,7 @@ Network::sniffBytesReady(int fd)
     struct timeval tval;
     tval.tv_sec = 0;
     tval.tv_usec = 10;
-    if (select(fd+1, &fdset, NULL, NULL, &tval)) {
+    if (select(fd+1, &fdset, nullptr, nullptr, &tval)) {
  	if (FD_ISSET(fd, &fdset)) {
 #ifndef _WIN32
 	    ioctl(fd, FIONREAD, &bytes);
@@ -1673,10 +1672,10 @@ Network::sniffBytesReady(int fd)
 }
 
 // Return the string representation of the IPV4 or IPV6 number
-boost::shared_ptr<char>
+std::shared_ptr<char>
 Network::getIPString(struct addrinfo *ai)
 {
-    boost::shared_ptr<char> straddr(new char[INET6_ADDRSTRLEN]);
+    std::shared_ptr<char> straddr(new char[INET6_ADDRSTRLEN]);
     std::memset(straddr.get(), 0, INET6_ADDRSTRLEN);    
     if (ai->ai_family == AF_INET6) {
         struct sockaddr_in6 *sock6 = reinterpret_cast<struct sockaddr_in6 *>(ai->ai_addr);
diff --git a/cygnal/libnet/network.h b/cygnal/libnet/network.h
index 1e0ecc8..3727c73 100644
--- a/cygnal/libnet/network.h
+++ b/cygnal/libnet/network.h
@@ -45,10 +45,9 @@
 # include <io.h>
 #endif
 
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/thread/mutex.hpp>
+#include <memory>
+#include <cstdint>
+#include <mutex>
 #include <vector>
 #include <cassert>
 #include <string>
@@ -133,7 +132,7 @@ public:
 	RTMPS,
 	DTN
     } protocols_supported_e;
-    // This is used to pass parameters to a thread using boost::bind
+    // This is used to pass parameters to a thread using std::bind
     typedef struct {
 	int tid;
 	int port;
@@ -145,7 +144,7 @@ public:
         std::string hostname;
 	protocols_supported_e protocol;
     } thread_params_t;
-    typedef boost::uint8_t byte_t;
+    typedef std::uint8_t byte_t;
     typedef bool entry_t (thread_params_t *);
 
     Network();
@@ -208,7 +207,7 @@ public:
     /// @param nbytes The number of bytes to try to read.
     ///
     /// @return The number of bytes read.
-    boost::shared_ptr<cygnal::Buffer> readNet();
+    std::shared_ptr<cygnal::Buffer> readNet();
     int readNet(cygnal::Buffer &buffer);
     int readNet(int fd, cygnal::Buffer &buffer);
     int readNet(int fd, cygnal::Buffer *buffer);
@@ -245,7 +244,7 @@ public:
     /// @param limit The max number of file descriptors to wait for.
     ///
     /// @return A vector of the file descriptors that have activity.
-    boost::shared_ptr<std::vector<struct pollfd> > waitForNetData(int limit, struct pollfd *fds);
+    std::shared_ptr<std::vector<struct pollfd> > waitForNetData(int limit, struct pollfd *fds);
     fd_set waitForNetData(int limit, fd_set data);
     fd_set waitForNetData(std::vector<int> &data);
 	
@@ -333,7 +332,7 @@ public:
     
  protected:
     // Return the string representation of the IPV4 or IPV6 number
-    boost::shared_ptr<char> getIPString(struct addrinfo *ai);
+    std::shared_ptr<char> getIPString(struct addrinfo *ai);
 
     in_addr_t   _ipaddr;
     int         _sockfd;	// the file descriptor used for reading and writing
@@ -353,13 +352,13 @@ public:
     std::map<int, entry_t *> _handlers;
     std::vector<struct pollfd> _pollfds;
     // This is the mutex that controls access to the que.
-    boost::mutex	_poll_mutex;
-    boost::mutex	_net_mutex;
+    std::mutex	_poll_mutex;
+    std::mutex	_net_mutex;
 #ifdef USE_SSL
-    boost::scoped_ptr<SSLClient> _ssl;
+    std::unique_ptr<SSLClient> _ssl;
 #endif
 #ifdef USE_SSH
-    boost::scoped_ptr<SSHClient> _ssh;
+    std::unique_ptr<SSHClient> _ssh;
 #endif
 };
 
diff --git a/cygnal/libnet/rtmp.cpp b/cygnal/libnet/rtmp.cpp
index aa29b1d..5c87fda 100644
--- a/cygnal/libnet/rtmp.cpp
+++ b/cygnal/libnet/rtmp.cpp
@@ -28,7 +28,6 @@
 #include <vector>
 #include <cerrno>
 #include <boost/detail/endian.hpp>
-#include <boost/shared_ptr.hpp>
 #include <boost/format.hpp>
 
 #if ! (defined(_WIN32) || defined(WIN32))
@@ -167,7 +166,7 @@ const char *response_str[] = {
 };
 
 int
-RTMP::headerSize(boost::uint8_t header)
+RTMP::headerSize(std::uint8_t header)
 {
     // GNASH_REPORT_FUNCTION;    
     int headersize = header & RTMP_HEADSIZE_MASK;
@@ -190,7 +189,7 @@ RTMP::headerSize(boost::uint8_t header)
 }
 
 RTMP::RTMP() 
-    : _handshake(0),
+    : _handshake(nullptr),
       _packet_size(0),
       _mystery_word(0),
       _timeout(1)
@@ -253,20 +252,20 @@ RTMP::getProperty(const std::string &name)
     return it->second;
 }
 
-boost::shared_ptr<RTMP::rtmp_head_t>
+std::shared_ptr<RTMP::rtmp_head_t>
 RTMP::decodeHeader(cygnal::Buffer &buf)
 {
 //    GNASH_REPORT_FUNCTION;
     return decodeHeader(buf.reference());
 }
 
-boost::shared_ptr<RTMP::rtmp_head_t>
-RTMP::decodeHeader(boost::uint8_t *in)
+std::shared_ptr<RTMP::rtmp_head_t>
+RTMP::decodeHeader(std::uint8_t *in)
 {
     // GNASH_REPORT_FUNCTION;
 
-    boost::shared_ptr<RTMP::rtmp_head_t> head(new RTMP::rtmp_head_t);
-    boost::uint8_t *tmpptr = in;
+    std::shared_ptr<RTMP::rtmp_head_t> head(new RTMP::rtmp_head_t);
+    std::uint8_t *tmpptr = in;
 
     head->channel = *tmpptr & RTMP_INDEX_MASK;
     // log_network (_("The AMF channel index is %d"), head->channel);
@@ -332,7 +331,7 @@ RTMP::decodeHeader(boost::uint8_t *in)
     }
 
     if (head->head_size >= 8) {
-	boost::uint8_t byte = *tmpptr;
+	std::uint8_t byte = *tmpptr;
         head->type = (content_types_e)byte;
 	_type[head->channel] = head->type;
         tmpptr++;
@@ -374,13 +373,13 @@ RTMP::decodeHeader(boost::uint8_t *in)
 /// * Routing - The source/destination of the message
 //
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeHeader(int amf_index, rtmp_headersize_e head_size)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(1));
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(1));
     buf->clear();
-    boost::uint8_t *ptr = buf->reference();
+    std::uint8_t *ptr = buf->reference();
     
     // Make the channel index & header size byte
     *ptr = head_size & RTMP_HEADSIZE_MASK;  
@@ -390,14 +389,14 @@ RTMP::encodeHeader(int amf_index, rtmp_headersize_e head_size)
 }
 
 // There are 3 size of RTMP headers, 1, 4, 8, and 12.
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeHeader(int amf_index, rtmp_headersize_e head_size,
 		       size_t total_size, content_types_e type,
 		       RTMPMsg::rtmp_source_e routing)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     switch(head_size) {
       case HEADER_1:
 	  buf.reset(new cygnal::Buffer(1));
@@ -412,7 +411,7 @@ RTMP::encodeHeader(int amf_index, rtmp_headersize_e head_size,
 	  buf.reset(new cygnal::Buffer(12));
 	  break;
     }
-    boost::uint8_t *ptr = buf->reference();
+    std::uint8_t *ptr = buf->reference();
     
     // Make the channel index & header size byte
 //    *ptr = head_size & RTMP_HEADSIZE_MASK;
@@ -442,13 +441,13 @@ RTMP::encodeHeader(int amf_index, rtmp_headersize_e head_size,
 	if (head_size == HEADER_12 && type != RTMP::USER) {
 	    if (type != RTMP::AUDIO_DATA && type != RTMP::VIDEO_DATA) {
 		// log_network(_("The routing is: 0x%x"), routing);
-		boost::uint32_t swapped = htonl(routing);
+		std::uint32_t swapped = htonl(routing);
 		memcpy(ptr, &swapped, 4);
 	    } else {
 		// FIXME: I have no idea why these two empty messages
 		// don't handle the routing field for 12 byte headers
 		// the same as all the other types.
-		boost::uint8_t swapped = 0x1;
+		std::uint8_t swapped = 0x1;
 		*ptr = swapped;
 	    }
 	    ptr += 4;
@@ -471,8 +470,8 @@ RTMP::packetRead(cygnal::Buffer &buf)
 
 //    int packetsize = 0;
     size_t amf_index, headersize;
-    boost::uint8_t *ptr = buf.reference();
-    boost::uint8_t *tooFar = ptr+buf.size();
+    std::uint8_t *ptr = buf.reference();
+    std::uint8_t *tooFar = ptr+buf.size();
     AMF amf;
 
     ptr += 1;			// skip past the RTMP header byte
@@ -493,9 +492,9 @@ RTMP::packetRead(cygnal::Buffer &buf)
      }
 
 #if 1
-    boost::uint8_t *end = buf.remove(0xc3);
+    std::uint8_t *end = buf.remove(0xc3);
 #else
-    boost::uint8_t *end = buf.find(0xc3);
+    std::uint8_t *end = buf.find(0xc3);
     log_network(_("END is %x"), (void *)end);
     *end = '*';
 #endif
@@ -503,14 +502,14 @@ RTMP::packetRead(cygnal::Buffer &buf)
 //    ptr = decodeHeader(ptr);
 //    ptr += headersize;
     
-    boost::shared_ptr<cygnal::Element> el = amf.extractAMF(ptr, tooFar);
+    std::shared_ptr<cygnal::Element> el = amf.extractAMF(ptr, tooFar);
 //    el->dump();
     el = amf.extractAMF(ptr, tooFar); // @@strk@@ : what's the +1 for ?
 //    el->dump();
     log_network(_("Reading AMF packets till we're done..."));
 //    buf->dump();
     while (ptr < end) {
-	boost::shared_ptr<cygnal::Element> el = amf.extractProperty(ptr, tooFar);
+	std::shared_ptr<cygnal::Element> el = amf.extractProperty(ptr, tooFar);
 	addProperty(el);
 //	el->dump();
     }
@@ -524,16 +523,16 @@ RTMP::packetRead(cygnal::Buffer &buf)
 //	buf = _handler->merge(buf); FIXME needs to use shared_ptr
     }
     while ((ptr - buf.begin()) < static_cast<int>(actual_size)) {
-	boost::shared_ptr<cygnal::Element> el = amf.extractProperty(ptr, tooFar);
+	std::shared_ptr<cygnal::Element> el = amf.extractProperty(ptr, tooFar);
 	addProperty(el);
 //	el->dump();		// FIXME: dump the AMF objects as they are read in
     }
 
 //    dump();
     
-    boost::shared_ptr<cygnal::Element> url = getProperty("tcUrl");
-    boost::shared_ptr<cygnal::Element> file = getProperty("swfUrl");
-    boost::shared_ptr<cygnal::Element> app = getProperty("app");
+    std::shared_ptr<cygnal::Element> url = getProperty("tcUrl");
+    std::shared_ptr<cygnal::Element> file = getProperty("swfUrl");
+    std::shared_ptr<cygnal::Element> app = getProperty("app");
     
     if (file) {
 	log_network(_("SWF file %s"), file->to_string());
@@ -591,61 +590,61 @@ RTMP::dump()
 // are required. This seems to be a ping message, 12 byte header,
 // system channel 2 
 // 02 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 00 00
-boost::shared_ptr<RTMP::rtmp_ping_t>
-RTMP::decodePing(boost::uint8_t *data)
+std::shared_ptr<RTMP::rtmp_ping_t>
+RTMP::decodePing(std::uint8_t *data)
 {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(data);
-    boost::shared_ptr<rtmp_ping_t> ping(new rtmp_ping_t);
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(data);
+    std::shared_ptr<rtmp_ping_t> ping(new rtmp_ping_t);
 
     // All the data fields in a ping message are 2 bytes long.
-    boost::uint16_t type = ntohs(*reinterpret_cast<boost::uint16_t *>(ptr));
+    std::uint16_t type = ntohs(*reinterpret_cast<std::uint16_t *>(ptr));
     ping->type = static_cast<rtmp_ping_e>(type);
-    ptr += sizeof(boost::uint16_t);
+    ptr += sizeof(std::uint16_t);
 
-    ping->target = ntohs(*reinterpret_cast<boost::uint16_t *>(ptr));
-    ptr += sizeof(boost::uint16_t);
+    ping->target = ntohs(*reinterpret_cast<std::uint16_t *>(ptr));
+    ptr += sizeof(std::uint16_t);
     
-    ping->param1 = ntohs(*reinterpret_cast<boost::uint16_t *>(ptr));
-    ptr += sizeof(boost::uint16_t);
+    ping->param1 = ntohs(*reinterpret_cast<std::uint16_t *>(ptr));
+    ptr += sizeof(std::uint16_t);
     
-//     ping->param2 = ntohs(*reinterpret_cast<boost::uint16_t *>(ptr));
-//     ptr += sizeof(boost::uint16_t);
+//     ping->param2 = ntohs(*reinterpret_cast<std::uint16_t *>(ptr));
+//     ptr += sizeof(std::uint16_t);
 
-//    ping->param3 = ntohs(*reinterpret_cast<boost::uint16_t *>(ptr));
+//    ping->param3 = ntohs(*reinterpret_cast<std::uint16_t *>(ptr));
     ping->param3 = 0;
 
     return ping;    
 }
-boost::shared_ptr<RTMP::rtmp_ping_t>
+std::shared_ptr<RTMP::rtmp_ping_t>
 RTMP::decodePing(cygnal::Buffer &buf)
 {
 //    GNASH_REPORT_FUNCTION;
     return decodePing(buf.reference());
 }
 
-boost::shared_ptr<RTMP::user_event_t>
+std::shared_ptr<RTMP::user_event_t>
 RTMP::decodeUserControl(cygnal::Buffer &buf)
 {
 //    GNASH_REPORT_FUNCTION;
     return decodeUserControl(buf.reference());
 }
 
-boost::shared_ptr<RTMP::user_event_t>
-RTMP::decodeUserControl(boost::uint8_t *data)
+std::shared_ptr<RTMP::user_event_t>
+RTMP::decodeUserControl(std::uint8_t *data)
 {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::uint8_t *ptr = reinterpret_cast<boost::uint8_t *>(data);
-    boost::shared_ptr<user_event_t> user(new RTMP::user_event_t);
+    std::uint8_t *ptr = reinterpret_cast<std::uint8_t *>(data);
+    std::shared_ptr<user_event_t> user(new RTMP::user_event_t);
 
-    boost::uint16_t type = ntohs(*reinterpret_cast<boost::uint16_t *>(ptr));
-    boost::uint16_t eventid = static_cast<user_control_e>(type);
-    ptr += sizeof(boost::uint16_t);
+    std::uint16_t type = ntohs(*reinterpret_cast<std::uint16_t *>(ptr));
+    std::uint16_t eventid = static_cast<user_control_e>(type);
+    ptr += sizeof(std::uint16_t);
 
-    boost::uint32_t param1 = ntohl(*reinterpret_cast<boost::uint32_t *>(ptr));
-    ptr += sizeof(boost::uint32_t);
+    std::uint32_t param1 = ntohl(*reinterpret_cast<std::uint32_t *>(ptr));
+    ptr += sizeof(std::uint32_t);
 
     user->type = static_cast<user_control_e>(type);
     user->param1 = param1;
@@ -661,8 +660,8 @@ RTMP::decodeUserControl(boost::uint8_t *data)
       case STREAM_NODATA:
       case STREAM_BUFFER:
       {
-	  boost::uint32_t param2 = ntohl(*reinterpret_cast<boost::uint32_t *>(ptr));
-	  ptr += sizeof(boost::uint32_t);
+	  std::uint32_t param2 = ntohl(*reinterpret_cast<std::uint32_t *>(ptr));
+	  ptr += sizeof(std::uint32_t);
 	  user->param2 = param2;
 	  break;
       }
@@ -682,21 +681,21 @@ RTMP::decodeUserControl(boost::uint8_t *data)
 //   02 00 00 00 00 00 06 04 00 00 00 00   00 04 00 00 00 01
 // Stream Start -
 //   02 00 00 00 00 00 06 04 00 00 00 00   00 00 00 00 00 01
-boost::shared_ptr<cygnal::Buffer>
-RTMP::encodeUserControl(user_control_e eventid, boost::uint32_t data)
+std::shared_ptr<cygnal::Buffer>
+RTMP::encodeUserControl(user_control_e eventid, std::uint32_t data)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    boost::uint32_t swapped = 0;
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::uint32_t swapped = 0;
+    std::shared_ptr<cygnal::Buffer> buf;
     if (eventid == STREAM_BUFFER) {
-	buf.reset(new cygnal::Buffer(sizeof(boost::uint16_t) * 5));
+	buf.reset(new cygnal::Buffer(sizeof(std::uint16_t) * 5));
     } else {
-	buf.reset(new cygnal::Buffer(sizeof(boost::uint16_t) * 3));
+	buf.reset(new cygnal::Buffer(sizeof(std::uint16_t) * 3));
     }
 
     // Set the type of this ping message
-    boost::uint16_t typefield = htons(eventid);
+    std::uint16_t typefield = htons(eventid);
     *buf = typefield;
     
     // All events have only 4 bytes of data, except Set Buffer, which
@@ -708,17 +707,17 @@ RTMP::encodeUserControl(user_control_e eventid, boost::uint32_t data)
       case STREAM_EOF:
       case STREAM_NODATA:
 	  swapped = data;
-	  cygnal::swapBytes(&swapped, sizeof(boost::uint32_t));
+	  cygnal::swapBytes(&swapped, sizeof(std::uint32_t));
 	  *buf += swapped;
 	  break;
       case STREAM_BUFFER:
-	  buf.reset(new cygnal::Buffer(sizeof(boost::uint16_t) * 5));
+	  buf.reset(new cygnal::Buffer(sizeof(std::uint16_t) * 5));
 	  break;
       case STREAM_LIVE:
       case STREAM_PING:
       case STREAM_PONG:
 	  swapped = data;
-	  cygnal::swapBytes(&swapped, sizeof(boost::uint32_t));
+	  cygnal::swapBytes(&swapped, sizeof(std::uint32_t));
 	  *buf += swapped;
 	  break;
       default:
@@ -728,18 +727,18 @@ RTMP::encodeUserControl(user_control_e eventid, boost::uint32_t data)
     return buf;
 }
 
-boost::shared_ptr<RTMPMsg>
-RTMP::decodeMsgBody(boost::uint8_t *data, size_t size)
+std::shared_ptr<RTMPMsg>
+RTMP::decodeMsgBody(std::uint8_t *data, size_t size)
 {
 //     GNASH_REPORT_FUNCTION;
     cygnal::AMF amf_obj;
-    boost::uint8_t *ptr = data;
-    boost::uint8_t* tooFar = data + size;
+    std::uint8_t *ptr = data;
+    std::uint8_t* tooFar = data + size;
     bool status = false;
-    boost::shared_ptr<RTMPMsg> msg(new RTMPMsg);
+    std::shared_ptr<RTMPMsg> msg(new RTMPMsg);
 
     // The first data object is the method name of this object.
-    boost::shared_ptr<cygnal::Element> name = amf_obj.extractAMF(ptr, tooFar);
+    std::shared_ptr<cygnal::Element> name = amf_obj.extractAMF(ptr, tooFar);
     if (name) {
 	ptr += name->getDataSize() + cygnal::AMF_HEADER_SIZE; // skip the length bytes too
     } else {
@@ -750,7 +749,7 @@ RTMP::decodeMsgBody(boost::uint8_t *data, size_t size)
 
     // The stream ID is the second data object. All messages have
     // these two objects at the minimum.
-    boost::shared_ptr<cygnal::Element> streamid = amf_obj.extractAMF(ptr, tooFar);
+    std::shared_ptr<cygnal::Element> streamid = amf_obj.extractAMF(ptr, tooFar);
     if (streamid) {
 	// Most onStatus messages have the stream ID, but the Data
 	// Start onStatus message is basically just a marker that an
@@ -764,7 +763,7 @@ RTMP::decodeMsgBody(boost::uint8_t *data, size_t size)
 	return msg;
     }
 
-    if (name->to_string() != 0) {
+    if (name->to_string() != nullptr) {
 	msg->setMethodName(name->to_string());
     }
     
@@ -781,9 +780,9 @@ RTMP::decodeMsgBody(boost::uint8_t *data, size_t size)
     while (ptr < tooFar) {
 	// These pointers get deleted automatically when the msg
 	// object is deleted 
-        boost::shared_ptr<cygnal::Element> el = amf_obj.extractAMF(ptr, tooFar);
+        std::shared_ptr<cygnal::Element> el = amf_obj.extractAMF(ptr, tooFar);
 	ptr += amf_obj.totalsize();
-        if (el == 0) {
+        if (el == nullptr) {
 	    break;
 	}
 	msg->addObject(el);
@@ -795,7 +794,7 @@ RTMP::decodeMsgBody(boost::uint8_t *data, size_t size)
     return msg;
 }
 
-boost::shared_ptr<RTMPMsg> 
+std::shared_ptr<RTMPMsg>
 RTMP::decodeMsgBody(cygnal::Buffer &buf)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -805,13 +804,13 @@ RTMP::decodeMsgBody(cygnal::Buffer &buf)
 // 02 00 00 00 00 00 04 01 00 00 00 00 00 00 10 00
 // id=2 timestamp=0 body_size=4 content_type=0x01 dest=0 	
 // Set chunk size 4096
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeChunkSize(int size)
 {
     GNASH_REPORT_FUNCTION;
 
-    boost::uint32_t swapped = htonl(size);
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(sizeof(boost::uint32_t)));
+    std::uint32_t swapped = htonl(size);
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(sizeof(std::uint32_t)));
     *buf += swapped;
 
     return buf;
@@ -821,17 +820,17 @@ void
 RTMP::decodeChunkSize()
 {
     GNASH_REPORT_FUNCTION;
-    // _chunksize[rthead->channel] = ntohl(*reinterpret_cast<boost::uint32_t *>(ptr + rthead->head_size));
+    // _chunksize[rthead->channel] = ntohl(*reinterpret_cast<std::uint32_t *>(ptr + rthead->head_size));
     // log_network("Setting packet chunk size to %d.", _chunksize);
     log_unimpl(__PRETTY_FUNCTION__);
 }
     
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeBytesRead()
 {
     GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    return boost::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)0);
+    return std::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)nullptr);
 }
 
 void
@@ -841,12 +840,12 @@ RTMP::decodeBytesRead()
     log_unimpl(__PRETTY_FUNCTION__);
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeServer()
 {
     GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    return boost::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)0);
+    return std::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)nullptr);
 }
 
 void 
@@ -856,12 +855,12 @@ RTMP::decodeServer()
     log_unimpl(__PRETTY_FUNCTION__);
 }
     
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeClient()
 {
     GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    return boost::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)0);
+    return std::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)nullptr);
 }
 
 void 
@@ -871,12 +870,12 @@ RTMP::decodeClient()
     log_unimpl(__PRETTY_FUNCTION__);
 }
     
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeAudioData()
 {
     GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    return boost::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)0);
+    return std::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)nullptr);
 }
 
 void 
@@ -886,12 +885,12 @@ RTMP::decodeAudioData()
     log_unimpl(__PRETTY_FUNCTION__);
 }
     
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeVideoData()
 {
     GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    return boost::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)0);
+    return std::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)nullptr);
 }
 
 void 
@@ -901,12 +900,12 @@ RTMP::decodeVideoData()
     log_unimpl(__PRETTY_FUNCTION__);
 }
     
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeNotify()
 {
     GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    return boost::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)0);
+    return std::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)nullptr);
 }
 
 void 
@@ -916,12 +915,12 @@ RTMP::decodeNotify()
     log_unimpl(__PRETTY_FUNCTION__);
 }
     
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeSharedObj()
 {
     GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    return boost::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)0);
+    return std::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)nullptr);
 }
 
 void 
@@ -931,12 +930,12 @@ RTMP::decodeSharedObj()
     log_unimpl(__PRETTY_FUNCTION__);
 }
     
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::encodeInvoke()
 {
     GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    return boost::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)0);
+    return std::shared_ptr<cygnal::Buffer>((cygnal::Buffer*)nullptr);
 }
 void 
 RTMP::decodeInvoke()
@@ -971,7 +970,7 @@ RTMP::sendMsg(int fd, int channel, rtmp_headersize_e head_size,
 bool
 RTMP::sendMsg(int channel, rtmp_headersize_e head_size,
 	      size_t total_size, content_types_e type,
-	      RTMPMsg::rtmp_source_e routing, boost::uint8_t *data, size_t size)
+	      RTMPMsg::rtmp_source_e routing, std::uint8_t *data, size_t size)
 {
 //  GNASH_REPORT_FUNCTION;
     return sendMsg(getFileFd(), channel, head_size, total_size, type, routing, data, size);
@@ -980,7 +979,7 @@ RTMP::sendMsg(int channel, rtmp_headersize_e head_size,
 bool
 RTMP::sendMsg(int fd, int channel, rtmp_headersize_e head_size,
 	      size_t total_size, content_types_e type,
-	      RTMPMsg::rtmp_source_e routing, boost::uint8_t *data, size_t size)
+	      RTMPMsg::rtmp_source_e routing, std::uint8_t *data, size_t size)
 {
 // GNASH_REPORT_FUNCTION;
     int ret = 0;
@@ -1000,20 +999,20 @@ RTMP::sendMsg(int fd, int channel, rtmp_headersize_e head_size,
     
     // Figure out how many packets it'll take to send this data.
     int pkts = size/_chunksize[channel];
-    boost::shared_ptr<cygnal::Buffer> bigbuf(new cygnal::Buffer(size+pkts+100));
+    std::shared_ptr<cygnal::Buffer> bigbuf(new cygnal::Buffer(size+pkts+100));
 	
     // This builds the full header, which is required as the first part
     // of the packet.
-    boost::shared_ptr<cygnal::Buffer> head = encodeHeader(channel, head_size,
+    std::shared_ptr<cygnal::Buffer> head = encodeHeader(channel, head_size,
 					total_size, type, routing);
     // When more data is sent than fits in the chunksize for this
     // channel, it gets broken into chunksize pieces, and each piece
     // after the first packet is sent gets a one byte header instead.
 #if 0
-    boost::shared_ptr<cygnal::Buffer> cont_head = encodeHeader(channel, RTMP::HEADER_1);
+    std::shared_ptr<cygnal::Buffer> cont_head = encodeHeader(channel, RTMP::HEADER_1);
 #else
-    boost::shared_ptr<cygnal::Buffer> cont_head(new cygnal::Buffer(1));
-    boost::uint8_t foo = 0xc3;
+    std::shared_ptr<cygnal::Buffer> cont_head(new cygnal::Buffer(1));
+    std::uint8_t foo = 0xc3;
     *cont_head = foo;
 #endif
     
@@ -1070,7 +1069,7 @@ RTMP::sendMsg(int fd, int channel, rtmp_headersize_e head_size,
 			ret, size-nbytes);
 	}
 #else
-	if (data != 0) {
+	if (data != nullptr) {
 	    bigbuf->append(data + nbytes, partial);
 	}
 #endif
@@ -1100,7 +1099,7 @@ RTMP::sendRecvMsg(cygnal::Buffer &bufin)
 {
     GNASH_REPORT_FUNCTION;
 //    size_t total_size = buf2->size() - 6; // FIXME: why drop 6 bytes ?
-    boost::shared_ptr<cygnal::Buffer> head = encodeHeader(amf_index, head_size, total_size,
+    std::shared_ptr<cygnal::Buffer> head = encodeHeader(amf_index, head_size, total_size,
 				type, routing);
 //    int ret = 0;
     int ret = writeNet(head->reference(), head->size()); // send the header first
@@ -1112,8 +1111,8 @@ RTMP::sendRecvMsg(cygnal::Buffer &bufin)
 
     RTMP::rtmp_head_t *rthead = 0;
     RTMPMsg *msg = 0;
-    boost::shared_ptr<cygnal::Buffer> buf;
-    boost::uint8_t *ptr = 0;
+    std::shared_ptr<cygnal::Buffer> buf;
+    std::uint8_t *ptr = 0;
 
 
     buf = recvMsg(1);	// use a 1 second timeout
@@ -1145,7 +1144,7 @@ RTMP::sendRecvMsg(cygnal::Buffer &bufin)
 	    switch (rthead->type) {
 	      case CHUNK_SIZE:
 		  log_networ(_("Got CHUNK_SIZE packet!!!"));
-		  _chunksize[rthead->channel] = ntohl(*reinterpret_cast<boost::uint32_t *>(ptr + rthead->head_size));
+		  _chunksize[rthead->channel] = ntohl(*reinterpret_cast<std::uint32_t *>(ptr + rthead->head_size));
 		  log_network(_("Setting packet chunk size to %d."), _chunksize);
 //		  decodeChunkSize();
 		  break;
@@ -1195,7 +1194,7 @@ RTMP::sendRecvMsg(cygnal::Buffer &bufin)
 	      case VIDEO_DATA:
 	      {
 		  log_network(_("Got VIDEO packets!!!"));
-		  boost::shared_ptr<cygnal::Buffer> frame;
+		  std::shared_ptr<cygnal::Buffer> frame;
 		  do {
 		      frame = recvMsg(1);	// use a 1 second timeout
 		      if (frame) {
@@ -1251,7 +1250,7 @@ RTMP::sendRecvMsg(cygnal::Buffer &bufin)
 // Receive a message, which is a series of AMF elements, seperated
 // by a one byte header at regular byte intervals. (128 bytes for
 // video data by default). Each message main contain multiple packets.
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::recvMsg()
 {
 //    GNASH_REPORT_FUNCTION;
@@ -1262,7 +1261,7 @@ RTMP::recvMsg()
 // more efficient. As these reads may cross packet boundaries, and they may
 // also include the RTMP header every _chunksize bytes, this raw data will
 // need to be processed later on.
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMP::recvMsg(int fd)
 {
 //     GNASH_REPORT_FUNCTION;
@@ -1271,7 +1270,7 @@ RTMP::recvMsg(int fd)
     //bool nopacket = true;
 
     // Read really big packets, they get split into the smaller ones when 'split'
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(3074));
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(3074));
     do {
 	ret = readNet(fd, buf->reference()+ret, buf->size()-ret, _timeout);
 	// We got data. Resize the buffer if necessary.
@@ -1313,32 +1312,32 @@ RTMP::recvMsg(int fd)
 // but RTMP uses a weird scheme of a standard header, and then every chunksize
 // bytes another 1 byte RTMP header. The header itself is not part of the byte
 // count.
-boost::shared_ptr<RTMP::queues_t>
+std::shared_ptr<RTMP::queues_t>
 RTMP::split(cygnal::Buffer &buf)
 {
 //     GNASH_REPORT_FUNCTION;
     return split(buf.reference(), buf.allocated());
 }
 
-boost::shared_ptr<RTMP::queues_t>
-RTMP::split(boost::uint8_t *data, size_t size)
+std::shared_ptr<RTMP::queues_t>
+RTMP::split(std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
-    if (data == 0) {
+    if (data == nullptr) {
 	log_error(_("Buffer pointer is invalid."));
     }
 
-    boost::shared_ptr<RTMP::queues_t> channels(new RTMP::queues_t);
+    std::shared_ptr<RTMP::queues_t> channels(new RTMP::queues_t);
 	
     // split the buffer at the chunksize boundary
-    boost::uint8_t *ptr = 0;
-    boost::shared_ptr<rtmp_head_t> rthead(new rtmp_head_t);
+    std::uint8_t *ptr = nullptr;
+    std::shared_ptr<rtmp_head_t> rthead(new rtmp_head_t);
     size_t pktsize = 0;
     //size_t nbytes = 0;
     
     ptr = data;
-    boost::shared_ptr<cygnal::Buffer> chunk;
+    std::shared_ptr<cygnal::Buffer> chunk;
     // There may be multiple messages in this Buffer, so we walk a
     // temp pointer through the contents of the Buffer.
     while ((ptr - data) < static_cast<int>(size)) {
@@ -1386,7 +1385,7 @@ RTMP::split(boost::uint8_t *data, size_t size)
 #if 1
 	    // Red5 version 5 sends out PING messages with a 1 byte header. I think this
 	    // may be a bug in Red5, but we should handle it anyway.
-	    if (chunk == 0) {
+	    if (chunk == nullptr) {
  		cerr << "Chunk wasn't allocated! " << (rthead->bodysize + rthead->head_size) 
                      << std::endl;
 		chunk.reset(new cygnal::Buffer(rthead->bodysize + rthead->head_size));
diff --git a/cygnal/libnet/rtmp.h b/cygnal/libnet/rtmp.h
index 8e44027..f8f816a 100644
--- a/cygnal/libnet/rtmp.h
+++ b/cygnal/libnet/rtmp.h
@@ -20,9 +20,8 @@
 #define GNASH_LIBNET_RTMP_H
 
 #include <deque>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <cstdint>
+#include <memory>
 #include <boost/lexical_cast.hpp>
 #include <string>
 #include <vector>
@@ -70,7 +69,7 @@ namespace gnash
 const int  RTMP_HANDSHAKE_VERSION_SIZE = 1;
 /// \var RTMP_VERSION
 ///     The RTMP version number for now is always a 3.
-const boost::uint8_t RTMP_VERSION = 0x3;
+const std::uint8_t RTMP_VERSION = 0x3;
 /// \var
 ///    This is the total size of an RTMP packet, not including the
 ///    version field.
@@ -129,9 +128,9 @@ const char TERMINATOR = 0x09;
 // The third and fourth bytes form an integer value that specifies the
 // number of headers.
 typedef struct {
-    boost::uint8_t version;
-    boost::uint8_t source;
-    boost::uint32_t  count;
+    std::uint8_t version;
+    std::uint8_t source;
+    std::uint32_t  count;
 } amfpacket_t;
 
 typedef enum {
@@ -243,15 +242,15 @@ public:
     } rtmp_op_e;
     typedef struct {
 	rtmp_ping_e type;	// the type of the ping message
-	boost::uint16_t target; // all Ping message data fields
-	boost::uint16_t param1; // are 2 bytes long
-	boost::uint16_t param2;
-	boost::uint16_t param3;
+	std::uint16_t target; // all Ping message data fields
+	std::uint16_t param1; // are 2 bytes long
+	std::uint16_t param2;
+	std::uint16_t param3;
     } rtmp_ping_t;
     typedef struct {
 	user_control_e type;
-	boost::uint32_t param1;
-	boost::uint32_t param2;	// only used by 
+	std::uint32_t param1;
+	std::uint32_t param2;	// only used by
     } user_event_t;
     typedef enum {
         RTMP_STATE_HANDSHAKE_SEND,
@@ -267,7 +266,7 @@ public:
 // 	rtmp_status_e status;
 // 	std::string   method;
 // 	double        streamid;
-// 	std::vector<boost::shared_ptr<cygnal::Element> > objs;
+// 	std::vector<std::shared_ptr<cygnal::Element> > objs;
 //     } rtmp_msg_t;
     typedef enum {
         RTMP_ERR_UNDEF,
@@ -296,8 +295,8 @@ public:
 	content_types_e type;
     } rtmp_head_t;
     typedef struct {
-	boost::uint32_t uptime;
-	boost::uint8_t version[4];
+	std::uint32_t uptime;
+	std::uint8_t version[4];
     } rtmp_handshake_head_t;
     typedef enum {
         HEADER_12 = 0x0,
@@ -315,7 +314,7 @@ public:
 //     typedef struct {
 //         amf::amfutf8_t target;
 //         amf::amfutf8_t response;
-// 	boost::uint32_t length;
+// 	std::uint32_t length;
 //         void *data;
 //     } rtmp_body_t;
     
@@ -323,14 +322,14 @@ public:
     virtual ~RTMP();
 
     // Decode
-    boost::shared_ptr<rtmp_head_t> decodeHeader(boost::uint8_t *header);
-    boost::shared_ptr<rtmp_head_t> decodeHeader(cygnal::Buffer &data);
+    std::shared_ptr<rtmp_head_t> decodeHeader(std::uint8_t *header);
+    std::shared_ptr<rtmp_head_t> decodeHeader(cygnal::Buffer &data);
     
-    boost::shared_ptr<cygnal::Buffer> encodeHeader(int amf_index,
+    std::shared_ptr<cygnal::Buffer> encodeHeader(int amf_index,
 					rtmp_headersize_e head_size,
 					size_t total_size, content_types_e type,
 					RTMPMsg::rtmp_source_e routing);
-    boost::shared_ptr<cygnal::Buffer> encodeHeader(int amf_index,
+    std::shared_ptr<cygnal::Buffer> encodeHeader(int amf_index,
 						rtmp_headersize_e head_size);
     
     void addProperty(cygnal::Element &el);
@@ -338,7 +337,7 @@ public:
     void addProperty(std::string &name, cygnal::Element &el);
     cygnal::Element &getProperty(const std::string &name);
 //     void setHandler(Handler *hand) { _handler = hand; };
-    int headerSize(boost::uint8_t header);
+    int headerSize(std::uint8_t header);
 
     rtmp_head_t *getHeader()    { return &_header; };
     int getHeaderSize()         { return _header.head_size; }; 
@@ -349,49 +348,49 @@ public:
     int getMysteryWord()        { return _mystery_word; };
 
     // Decode an RTMP message
-    boost::shared_ptr<RTMPMsg> decodeMsgBody(boost::uint8_t *data, size_t size);
-    boost::shared_ptr<RTMPMsg> decodeMsgBody(cygnal::Buffer &buf);
+    std::shared_ptr<RTMPMsg> decodeMsgBody(std::uint8_t *data, size_t size);
+    std::shared_ptr<RTMPMsg> decodeMsgBody(cygnal::Buffer &buf);
     
-    virtual boost::shared_ptr<rtmp_ping_t> decodePing(boost::uint8_t *data);
-    boost::shared_ptr<rtmp_ping_t> decodePing(cygnal::Buffer &buf);
+    virtual std::shared_ptr<rtmp_ping_t> decodePing(std::uint8_t *data);
+    std::shared_ptr<rtmp_ping_t> decodePing(cygnal::Buffer &buf);
     
-    virtual boost::shared_ptr<user_event_t> decodeUserControl(boost::uint8_t *data);
-    boost::shared_ptr<user_event_t> decodeUserControl(cygnal::Buffer &buf);
-    virtual boost::shared_ptr<cygnal::Buffer> encodeUserControl(user_control_e, boost::uint32_t data);
+    virtual std::shared_ptr<user_event_t> decodeUserControl(std::uint8_t *data);
+    std::shared_ptr<user_event_t> decodeUserControl(cygnal::Buffer &buf);
+    virtual std::shared_ptr<cygnal::Buffer> encodeUserControl(user_control_e, std::uint32_t data);
     
     
     // These are handlers for the various types
-    virtual boost::shared_ptr<cygnal::Buffer> encodeChunkSize(int size);
+    virtual std::shared_ptr<cygnal::Buffer> encodeChunkSize(int size);
     virtual void decodeChunkSize();
 
-    virtual boost::shared_ptr<cygnal::Buffer> encodeBytesRead();
+    virtual std::shared_ptr<cygnal::Buffer> encodeBytesRead();
     virtual void decodeBytesRead();
-    virtual boost::shared_ptr<cygnal::Buffer> encodeServer();
+    virtual std::shared_ptr<cygnal::Buffer> encodeServer();
     virtual void decodeServer();
     
-    virtual boost::shared_ptr<cygnal::Buffer> encodeClient();
+    virtual std::shared_ptr<cygnal::Buffer> encodeClient();
     virtual void decodeClient();
     
-    virtual boost::shared_ptr<cygnal::Buffer> encodeAudioData();
+    virtual std::shared_ptr<cygnal::Buffer> encodeAudioData();
     virtual void decodeAudioData();
     
-    virtual boost::shared_ptr<cygnal::Buffer> encodeVideoData();
+    virtual std::shared_ptr<cygnal::Buffer> encodeVideoData();
     virtual void decodeVideoData();
     
-    virtual boost::shared_ptr<cygnal::Buffer> encodeNotify();
+    virtual std::shared_ptr<cygnal::Buffer> encodeNotify();
     virtual void decodeNotify();
     
-    virtual boost::shared_ptr<cygnal::Buffer> encodeSharedObj();
+    virtual std::shared_ptr<cygnal::Buffer> encodeSharedObj();
     virtual void decodeSharedObj();
     
-    virtual boost::shared_ptr<cygnal::Buffer> encodeInvoke();
+    virtual std::shared_ptr<cygnal::Buffer> encodeInvoke();
     virtual void decodeInvoke();
 
     // Receive a message, which is a series of AMF elements, seperated
     // by a one byte header at regular byte intervals. (128 bytes for
     // video data by default). Each message may contain multiple packets.
-    boost::shared_ptr<cygnal::Buffer> recvMsg();
-    boost::shared_ptr<cygnal::Buffer> recvMsg(int fd);
+    std::shared_ptr<cygnal::Buffer> recvMsg();
+    std::shared_ptr<cygnal::Buffer> recvMsg(int fd);
 
     // Send a message, usually a single ActionScript object. This message
     // may be broken down into a series of packets on a regular byte
@@ -406,10 +405,10 @@ public:
 	      RTMPMsg::rtmp_source_e routing, cygnal::Buffer &data);
     bool sendMsg(int channel, rtmp_headersize_e head_size,
 		 size_t total_size, content_types_e type,
-		 RTMPMsg::rtmp_source_e routing, boost::uint8_t *data, size_t size);
+		 RTMPMsg::rtmp_source_e routing, std::uint8_t *data, size_t size);
     bool sendMsg(int fd, int channel, rtmp_headersize_e head_size,
 		 size_t total_size, content_types_e type,
-		 RTMPMsg::rtmp_source_e routing, boost::uint8_t *data, size_t size);
+		 RTMPMsg::rtmp_source_e routing, std::uint8_t *data, size_t size);
     
 #if 0
     // Send a Msg, and expect a response back of some kind.
@@ -422,8 +421,8 @@ public:
     // but RTMP uses a weird scheme of a standard header, and then every chunksize
     // bytes another 1 byte RTMP header. The header itself is not part of the byte
     // count.
-    boost::shared_ptr<queues_t> split(cygnal::Buffer &buf);
-    boost::shared_ptr<queues_t> split(boost::uint8_t *data, size_t size);
+    std::shared_ptr<queues_t> split(cygnal::Buffer &buf);
+    std::shared_ptr<queues_t> split(std::uint8_t *data, size_t size);
 
     CQue &operator[] (size_t x) { return _queues[x]; }
 
@@ -431,10 +430,10 @@ public:
     ///    The time on most systems these days is a 64 bit long, but swf
     ///    is old, so it only uses a 32 bit integer instead. We know casting
     ///    looses precision, but that's just the way it is in RTMP.
-    boost::uint32_t getTime() {
+    std::uint32_t getTime() {
 	time_t t;
 	time(&t);
-	return boost::lexical_cast<boost::uint32_t>(t);
+	return boost::lexical_cast<std::uint32_t>(t);
     };
 
     void dump();
diff --git a/cygnal/libnet/rtmp_client.cpp b/cygnal/libnet/rtmp_client.cpp
index 7b3f693..99e3d72 100644
--- a/cygnal/libnet/rtmp_client.cpp
+++ b/cygnal/libnet/rtmp_client.cpp
@@ -31,7 +31,6 @@
 #	include <netinet/in.h>
 #endif
 
-#include <boost/shared_ptr.hpp>
 #include <boost/lexical_cast.hpp>
 #include "log.h"
 #include "rc.h"
@@ -46,7 +45,7 @@
 #include "GnashSleep.h"
 #include "URL.h"
 
-typedef boost::shared_ptr<cygnal::Element> ElementSharedPtr;
+typedef std::shared_ptr<cygnal::Element> ElementSharedPtr;
 
 namespace gnash
 {
@@ -79,7 +78,7 @@ RTMPClient::~RTMPClient()
 
 // Make the NetConnection object that is used to connect to the
 // server.
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeConnect()
 {
 //     GNASH_REPORT_FUNCTION;
@@ -87,7 +86,7 @@ RTMPClient::encodeConnect()
     return encodeConnect(_path.c_str());
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeConnect(const char *uri)
 {
 //     GNASH_REPORT_FUNCTION;
@@ -97,7 +96,7 @@ RTMPClient::encodeConnect(const char *uri)
 			 RTMPClient::SEEK);
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeConnect(const char *uri,
 			  double audioCodecs, double videoCodecs,
 			  double videoFunction)
@@ -133,7 +132,7 @@ RTMPClient::encodeConnect(const char *uri,
             port = RTMP_PORT;
         }
     } else {
-        port = strtol(portstr.c_str(), NULL, 0) & 0xffff;
+        port = strtol(portstr.c_str(), nullptr, 0) & 0xffff;
     }
 
 
@@ -166,7 +165,7 @@ RTMPClient::encodeConnect(const char *uri,
 			 pageUrl.c_str());
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeConnect(const char *app, const char *swfUrl, const char *tcUrl,
                           double audioCodecs, double videoCodecs, double videoFunction,
                           const char *pageUrl)
@@ -192,7 +191,7 @@ RTMPClient::encodeConnect(const char *app, const char *swfUrl, const char *tcUrl
     appnode->makeString("app", app);
     obj->addProperty(appnode);
 
-    const char *version = 0;
+    const char *version = nullptr;
     if (rcfile.getFlashVersionString().size() > 0) {
         version = rcfile.getFlashVersionString().c_str();
     } else {
@@ -247,11 +246,11 @@ RTMPClient::encodeConnect(const char *app, const char *swfUrl, const char *tcUrl
 //                                      RTMP::INVOKE, RTMP::FROM_CLIENT);
 //     const char *rtmpStr = "03 00 00 04 00 01 1f 14 00 00 00 00";
 //     Buffer *rtmpBuf = hex2mem(rtmpStr);
-    boost::shared_ptr<cygnal::Buffer> conobj = connect->encode();
-    boost::shared_ptr<cygnal::Buffer> numobj = connum->encode();
-    boost::shared_ptr<cygnal::Buffer> encobj = obj->encode();
+    std::shared_ptr<cygnal::Buffer> conobj = connect->encode();
+    std::shared_ptr<cygnal::Buffer> numobj = connum->encode();
+    std::shared_ptr<cygnal::Buffer> encobj = obj->encode();
 
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(conobj->size() + numobj->size() + encobj->size()));
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(conobj->size() + numobj->size() + encobj->size()));
     *buf += conobj;
     *buf += numobj;
     *buf += encobj;
@@ -269,7 +268,7 @@ RTMPClient::connectToServer(const std::string &url)
     // If we're currently not connected, build and send the
     // initial handshake packet.
     if (connected() == false) {
-	short port = strtol(uri.port().c_str(), NULL, 0) & 0xffff;
+	short port = strtol(uri.port().c_str(), nullptr, 0) & 0xffff;
 	if (!createClient(uri.hostname(), port)) {
 	    return false;
 	}
@@ -278,7 +277,7 @@ RTMPClient::connectToServer(const std::string &url)
 	// to be on the end of the second block of handshake data.
 	// We build this here so we can get the total encoded
 	// size of the object.
-	boost::shared_ptr<cygnal::Buffer> ncbuf = encodeConnect();
+	std::shared_ptr<cygnal::Buffer> ncbuf = encodeConnect();
 
 	// As at this point we don't have an RTMP connection,
 	// we can't use the regular sendMsg(), that handles the RTMP
@@ -286,7 +285,7 @@ RTMPClient::connectToServer(const std::string &url)
 	// always one by, so we just add it by hand. It doesn't matter
 	// as long as the channel number matches the one used to
 	// create the initial RTMP packet header.
-	boost::scoped_ptr<cygnal::Buffer> newbuf(new cygnal::Buffer(ncbuf->size() + 5));
+	std::unique_ptr<cygnal::Buffer> newbuf(new cygnal::Buffer(ncbuf->size() + 5));
 	size_t nbytes = 0;
 	size_t chunk = RTMP_VIDEO_PACKET_SIZE;
 	do {
@@ -297,24 +296,24 @@ RTMPClient::connectToServer(const std::string &url)
 	    newbuf->append(ncbuf->reference() + nbytes, chunk);
  	    nbytes  += chunk;
 	    if (chunk == static_cast<size_t>(RTMP_VIDEO_PACKET_SIZE)) {
-		boost::uint8_t headone = 0xc3;
+		std::uint8_t headone = 0xc3;
 		*newbuf += headone;
 	    }
 	} while (nbytes < ncbuf->allocated());
 
-	boost::shared_ptr<cygnal::Buffer> head = encodeHeader(0x3,
+	std::shared_ptr<cygnal::Buffer> head = encodeHeader(0x3,
 			    RTMP::HEADER_12, ncbuf->allocated(),
 			    RTMP::INVOKE, RTMPMsg::FROM_CLIENT);
 
 	// Build the first handshake packet, and send it to the
 	// server.
-	boost::shared_ptr<cygnal::Buffer> handshake1 = handShakeRequest();
+	std::shared_ptr<cygnal::Buffer> handshake1 = handShakeRequest();
 	if (!handshake1) {
 	    log_error(_("RTMP handshake request failed"));
 	    return false;
 	}
 	
-	boost::scoped_ptr<cygnal::Buffer> handshake2(new cygnal::Buffer
+	std::unique_ptr<cygnal::Buffer> handshake2(new cygnal::Buffer
 		  ((RTMP_HANDSHAKE_SIZE * 2) + newbuf->allocated()
 		   + RTMP_MAX_HEADER_SIZE));
 
@@ -338,13 +337,13 @@ RTMPClient::connectToServer(const std::string &url)
 	}
 	
 	// give the server time to process our NetConnection::connect() request	
-	boost::shared_ptr<cygnal::Buffer> response;
-	boost::shared_ptr<RTMP::rtmp_head_t> rthead;
-	boost::shared_ptr<RTMP::queues_t> que;
+	std::shared_ptr<cygnal::Buffer> response;
+	std::shared_ptr<RTMP::rtmp_head_t> rthead;
+	std::shared_ptr<RTMP::queues_t> que;
 	
 	RTMPClient::msgque_t msgque = recvResponse();
 	while (msgque.size()) {
-	    boost::shared_ptr<RTMPMsg> msg = msgque.front();
+	    std::shared_ptr<RTMPMsg> msg = msgque.front();
 	    msgque.pop_front();
 	    if (msg->getStatus() ==  RTMPMsg::NC_CONNECT_SUCCESS) {
 		log_network(_("Sent NetConnection Connect message successfully"));
@@ -358,29 +357,29 @@ RTMPClient::connectToServer(const std::string &url)
     return true;
 }
     
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeEchoRequest(const std::string &method, double id, cygnal::Element &el)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Element> str(new cygnal::Element);
+    std::shared_ptr<cygnal::Element> str(new cygnal::Element);
     str->makeString(method);
-    boost::shared_ptr<cygnal::Buffer> strobj = str->encode();
+    std::shared_ptr<cygnal::Buffer> strobj = str->encode();
 
     // Encod ethe stream ID
-    boost::shared_ptr<cygnal::Element>  num(new cygnal::Element);
+    std::shared_ptr<cygnal::Element>  num(new cygnal::Element);
     num->makeNumber(id);
-    boost::shared_ptr<cygnal::Buffer> numobj = num->encode();
+    std::shared_ptr<cygnal::Buffer> numobj = num->encode();
 
     // Set the NULL object element that follows the stream ID
-    boost::shared_ptr<cygnal::Element> null(new cygnal::Element);
+    std::shared_ptr<cygnal::Element> null(new cygnal::Element);
     null->makeNull();
-    boost::shared_ptr<cygnal::Buffer> nullobj = null->encode();
+    std::shared_ptr<cygnal::Buffer> nullobj = null->encode();
 
-    boost::shared_ptr<cygnal::Buffer> elobj = el.encode();
+    std::shared_ptr<cygnal::Buffer> elobj = el.encode();
 
     size_t totalsize = strobj->size() + numobj->size() + nullobj->size() + elobj->size();
 
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(totalsize));
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(totalsize));
     
     *buf += strobj;
     *buf += numobj;
@@ -393,7 +392,7 @@ RTMPClient::encodeEchoRequest(const std::string &method, double id, cygnal::Elem
 // 43 00 1a 21 00 00 19 14 02 00 0c 63 72 65 61 74  C..!.......creat
 // 65 53 74 72 65 61 6d 00 40 08 00 00 00 00 00 00  eStream. at .......
 // 05                                                    .               
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeStream(double id)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -401,22 +400,22 @@ RTMPClient::encodeStream(double id)
     struct timespec now;
     clock_gettime (CLOCK_REALTIME, &now);
 
-    boost::shared_ptr<cygnal::Element> str(new cygnal::Element);
+    std::shared_ptr<cygnal::Element> str(new cygnal::Element);
     str->makeString("createStream");
-    boost::shared_ptr<cygnal::Buffer> strobj = str->encode();
+    std::shared_ptr<cygnal::Buffer> strobj = str->encode();
   
-    boost::shared_ptr<cygnal::Element>  num(new cygnal::Element);
+    std::shared_ptr<cygnal::Element>  num(new cygnal::Element);
     num->makeNumber(id);
-    boost::shared_ptr<cygnal::Buffer> numobj = num->encode();
+    std::shared_ptr<cygnal::Buffer> numobj = num->encode();
 
     // Set the NULL object element that follows the stream ID
-    boost::shared_ptr<cygnal::Element> null(new cygnal::Element);
+    std::shared_ptr<cygnal::Element> null(new cygnal::Element);
     null->makeNull();
-    boost::shared_ptr<cygnal::Buffer> nullobj = null->encode();    
+    std::shared_ptr<cygnal::Buffer> nullobj = null->encode();
 
     size_t totalsize = strobj->size() + numobj->size() + nullobj->size();
 
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(totalsize));
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(totalsize));
 
     *buf += strobj;
     *buf += numobj;
@@ -431,21 +430,21 @@ RTMPClient::encodeStream(double id)
 // 6f 6e 32 5f 66 6c 61 73 68 38 5f 77 5f 61 75 64  on2_flash8_w_aud
 // 69 6f 2e 66 6c 76 c2 00 03 00 00 00 01 00 00 27  io.flv.........'
 // 10
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag)
 {
 //    GNASH_REPORT_FUNCTION;
     return encodeStreamOp(id, op, flag, "", 0);
 }    
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, double pos)
 {
 //    GNASH_REPORT_FUNCTION;
     return encodeStreamOp(id, op, flag, "", pos);
 }    
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string &name)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -458,7 +457,7 @@ RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string
 // A pause packet is the operation name "pause", followed by the stream ID,
 // then a NULL object, a boolean (always true from what I can tell), and then
 // a location, which appears to always be 0.
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string &name, double pos)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -482,25 +481,25 @@ RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string
 	  str.makeString("seek");
 	  break;
       default:
-	  boost::shared_ptr<cygnal::Buffer> foo;
+	  std::shared_ptr<cygnal::Buffer> foo;
 	  return foo;
     };
 
-    boost::shared_ptr<cygnal::Buffer> strobj = str.encode();
+    std::shared_ptr<cygnal::Buffer> strobj = str.encode();
 
     // Set the stream ID, which follows the command
     cygnal::Element strid;
     strid.makeNumber(id);
-    boost::shared_ptr<cygnal::Buffer> stridobj = strid.encode();
+    std::shared_ptr<cygnal::Buffer> stridobj = strid.encode();
 
     // Set the NULL object element that follows the stream ID
     cygnal::Element null;
     null.makeNull();
-    boost::shared_ptr<cygnal::Buffer> nullobj = null.encode();    
+    std::shared_ptr<cygnal::Buffer> nullobj = null.encode();
 
     // Set the BOOLEAN object element that is the last field in the packet
     // (SEEK and PLAY don't use the boolean flag)
-    boost::shared_ptr<cygnal::Buffer> boolobj;
+    std::shared_ptr<cygnal::Buffer> boolobj;
     if ((op != STREAM_SEEK) && (op != STREAM_PLAY)) {
         cygnal::Element boolean;
         boolean.makeBoolean(flag);
@@ -508,7 +507,7 @@ RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string
     }
 
     // The seek command also may have an optional location to seek to
-    boost::shared_ptr<cygnal::Buffer> posobj;
+    std::shared_ptr<cygnal::Buffer> posobj;
     if ((op == STREAM_PAUSE) || (op == STREAM_SEEK)) {
         cygnal::Element seek;
         seek.makeNumber(pos);
@@ -518,7 +517,7 @@ RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string
     // The play command has an optional field, which is the name of the file
     // used for the stream. A Play command without this name set play an
     // existing stream that is already open.
-    boost::shared_ptr<cygnal::Buffer> fileobj; 
+    std::shared_ptr<cygnal::Buffer> fileobj;
     if (!name.empty()) {
         cygnal::Element filespec;
         filespec.makeString(name);
@@ -533,7 +532,7 @@ RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string
     if ( fileobj ) pktsize += fileobj->size();
     if ( posobj ) pktsize += posobj->size();
 
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(pktsize));    
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(pktsize));
     *buf += strobj;
     *buf += stridobj;
     *buf += nullobj;
@@ -546,14 +545,14 @@ RTMPClient::encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string
 
 // A request for a handshake is initiated by sending a byte with a
 // value of 0x3, followed by a message body of unknown format.
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::handShakeRequest()
 {
     GNASH_REPORT_FUNCTION;
-    boost::uint32_t zero = 0;
+    std::uint32_t zero = 0;
 
     // Make a buffer to hold the handshake data.
-    boost::shared_ptr<cygnal::Buffer> handshake(new cygnal::Buffer(RTMP_HANDSHAKE_SIZE+1));
+    std::shared_ptr<cygnal::Buffer> handshake(new cygnal::Buffer(RTMP_HANDSHAKE_SIZE+1));
     if (!handshake) {
 	return handshake;
     }
@@ -569,7 +568,7 @@ RTMPClient::handShakeRequest()
 
     // The handshake contains random data after the initial header
     for (int i=0; i<RTMP_RANDOM_SIZE; i++) {
-	boost::uint8_t pad = i^256;
+	std::uint8_t pad = i^256;
         *handshake += pad;
     }
     
@@ -584,7 +583,7 @@ RTMPClient::handShakeRequest()
 // The client finishes the handshake process by sending the second
 // data block we get from the server as the response
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::clientFinish()
 {
 //     GNASH_REPORT_FUNCTION;
@@ -593,7 +592,7 @@ RTMPClient::clientFinish()
     return clientFinish(data);
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 RTMPClient::clientFinish(cygnal::Buffer &data)
 {
     GNASH_REPORT_FUNCTION;
@@ -607,7 +606,7 @@ RTMPClient::clientFinish(cygnal::Buffer &data)
     // The handhake for this phase is twice the size of the initial handshake
     // we sent previously, plus one byte for the RTMP version header.
     int max_size = (RTMP_HANDSHAKE_SIZE*2) + 1;
-    boost::shared_ptr<cygnal::Buffer> handshake1(new cygnal::Buffer(
+    std::shared_ptr<cygnal::Buffer> handshake1(new cygnal::Buffer(
 			      max_size + data.allocated()));
     do {
 	ret = readNet(handshake1->end(), max_size - offset);
@@ -639,7 +638,7 @@ RTMPClient::clientFinish(cygnal::Buffer &data)
 		  handshake1->allocated());
     }    
 
-    _handshake_header.uptime = ntohl(*reinterpret_cast<boost::uint32_t *>
+    _handshake_header.uptime = ntohl(*reinterpret_cast<std::uint32_t *>
 				     (handshake1->reference() + 1));
 
     log_network(_("RTMP Handshake header: Uptime: %u"),
@@ -656,29 +655,29 @@ RTMPClient::clientFinish(cygnal::Buffer &data)
 #endif
 
     // Make a new buffer big enough to hold the handshake, data, and header byte
-    boost::shared_ptr<cygnal::Buffer> handshake2(new cygnal::Buffer(
+    std::shared_ptr<cygnal::Buffer> handshake2(new cygnal::Buffer(
 			     RTMP_HANDSHAKE_SIZE + data.allocated()));
     
     // Copy the timestamp from the message we just received.
-    handshake2->copy(handshake1->reference()+1, sizeof(boost::uint32_t));
+    handshake2->copy(handshake1->reference()+1, sizeof(std::uint32_t));
 
 #if 1
     // The next timestamp is the one we just received bumped up a tiny bit.
     // I have no clue if this is correct, but fom hex dumps the previous
     // timestamp should be the baseline, and this is just that time plus
     // whatever it took to get the message. The 7 is a bit randomly chosen.
-    boost::uint32_t tt = htonl(_handshake_header.uptime + 7);
+    std::uint32_t tt = htonl(_handshake_header.uptime + 7);
 #else
     // Get the uptime for the header
     // yes, we loose precision here but it's only a 4 byte field
     time_t t;
     time(&t);
-    boost::uint32_t tt = t;
+    std::uint32_t tt = t;
 #endif
     *handshake2 += tt;
 
     // Add the handshake data
-    boost::uint8_t *start = handshake1->reference() + RTMP_HANDSHAKE_SIZE
+    std::uint8_t *start = handshake1->reference() + RTMP_HANDSHAKE_SIZE
 	+ 1 + 8;
     handshake2->append(start, RTMP_RANDOM_SIZE);
     // Add the NetConnection::connect() packet
@@ -724,7 +723,7 @@ RTMPClient::recvResponse()
     
     // Read the responses back from the server.  This is usually a series of system
     // messages on channel 2, and the response message on channel 3 from our request.
-    boost::shared_ptr<cygnal::Buffer> response = recvMsg();
+    std::shared_ptr<cygnal::Buffer> response = recvMsg();
     if (!response) {
 	log_error(_("Got no response from the RTMP server"));
 	return msgque;
@@ -732,7 +731,7 @@ RTMPClient::recvResponse()
 
     // when doing remoting calls I don't see this problem with an empty packet from Red5,
     // but when I do streaming, it's always there, so we need to remove it.
-    boost::uint8_t *pktstart = response->reference();
+    std::uint8_t *pktstart = response->reference();
     if (*pktstart == 0xff) {
 	log_network(_("Got empty packet in buffer."));
 	pktstart++;
@@ -740,8 +739,8 @@ RTMPClient::recvResponse()
 
     // The response packet contains multiple messages for multiple channels, so we
     // we have to split the Buffer into seperate messages on a chunksize boundary.
-    boost::shared_ptr<RTMP::rtmp_head_t> rthead;
-    boost::shared_ptr<RTMP::queues_t> que = split(pktstart, response->allocated()-1);
+    std::shared_ptr<RTMP::rtmp_head_t> rthead;
+    std::shared_ptr<RTMP::queues_t> que = split(pktstart, response->allocated()-1);
 
     // If we got no responses, something obviously went wrong.
     if (!que->size()) {
@@ -760,7 +759,7 @@ RTMPClient::recvResponse()
 
 	while (channel_q->size()) {
 	    // Get the first message in the channel queue
-	    boost::shared_ptr<cygnal::Buffer> ptr = channel_q->pop();
+	    std::shared_ptr<cygnal::Buffer> ptr = channel_q->pop();
   	    ptr->dump();
 	    if (ptr) {		// If there is legit data
 		rthead = decodeHeader(ptr->reference());
@@ -785,7 +784,7 @@ RTMPClient::recvResponse()
 		      break;
 		  case RTMP::USER:
 		  {
-		      boost::shared_ptr<RTMP::rtmp_ping_t> ping = decodePing(ptr->reference() + rthead->head_size);
+		      std::shared_ptr<RTMP::rtmp_ping_t> ping = decodePing(ptr->reference() + rthead->head_size);
 		      log_network(_("Got a Ping type %s"), ping_str[ping->type]);
 		      break;
 		  }
@@ -800,7 +799,7 @@ RTMPClient::recvResponse()
 		      break;
 		  case RTMP::AUDIO_DATA:
 		  {
-		      boost::shared_ptr<RTMPMsg> msg = decodeMsgBody(ptr->reference() + rthead->head_size, rthead->bodysize);
+		      std::shared_ptr<RTMPMsg> msg = decodeMsgBody(ptr->reference() + rthead->head_size, rthead->bodysize);
 		      if (msg) {
 			  msgque.push_back(msg);
 		      }
@@ -808,7 +807,7 @@ RTMPClient::recvResponse()
 		  }
 		  case RTMP::VIDEO_DATA:
 		  {
-		      boost::shared_ptr<RTMPMsg> msg = decodeMsgBody(ptr->reference() + rthead->head_size, rthead->bodysize);
+		      std::shared_ptr<RTMPMsg> msg = decodeMsgBody(ptr->reference() + rthead->head_size, rthead->bodysize);
 		      if (msg) {
 			  msgque.push_back(msg);
 		      }
@@ -831,7 +830,7 @@ RTMPClient::recvResponse()
 		      break;
 		  case RTMP::INVOKE:
 		  {
-		      boost::shared_ptr<RTMPMsg> msg = decodeMsgBody(ptr->reference() + rthead->head_size, rthead->bodysize);
+		      std::shared_ptr<RTMPMsg> msg = decodeMsgBody(ptr->reference() + rthead->head_size, rthead->bodysize);
 		      if (msg) {
 			  msgque.push_back(msg);
 		      }
diff --git a/cygnal/libnet/rtmp_client.h b/cygnal/libnet/rtmp_client.h
index 6378149..d09377b 100644
--- a/cygnal/libnet/rtmp_client.h
+++ b/cygnal/libnet/rtmp_client.h
@@ -19,8 +19,7 @@
 #define _RTMP_CLIENT_H_
 
 #include <deque>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 #include <string>
 #include <time.h>
 
@@ -45,18 +44,18 @@ public:
 
     bool handShakeWait();
 //    bool handShakeResponse();
-    boost::shared_ptr<cygnal::Buffer> clientFinish();
-    DSOEXPORT  boost::shared_ptr<cygnal::Buffer> clientFinish(cygnal::Buffer &data);
-    DSOEXPORT boost::shared_ptr<cygnal::Buffer> handShakeRequest();
+    std::shared_ptr<cygnal::Buffer> clientFinish();
+    DSOEXPORT  std::shared_ptr<cygnal::Buffer> clientFinish(cygnal::Buffer &data);
+    DSOEXPORT std::shared_ptr<cygnal::Buffer> handShakeRequest();
     
     // These are used for creating the primary objects
     // Create the initial object sent to the server, which
     // is NetConnection::connect()
-    DSOEXPORT boost::shared_ptr<cygnal::Buffer> encodeConnect();
-    DSOEXPORT boost::shared_ptr<cygnal::Buffer> encodeConnect(const char *uri);
-    DSOEXPORT boost::shared_ptr<cygnal::Buffer> encodeConnect(const char *uri, double audioCodecs, double videoCodecs,
+    DSOEXPORT std::shared_ptr<cygnal::Buffer> encodeConnect();
+    DSOEXPORT std::shared_ptr<cygnal::Buffer> encodeConnect(const char *uri);
+    DSOEXPORT std::shared_ptr<cygnal::Buffer> encodeConnect(const char *uri, double audioCodecs, double videoCodecs,
 		   double videoFunction);
-    DSOEXPORT boost::shared_ptr<cygnal::Buffer> encodeConnect(const char *app,
+    DSOEXPORT std::shared_ptr<cygnal::Buffer> encodeConnect(const char *app,
 		   const char *swfUrl, const char *tcUrl,
                    double audioCodecs, double videoCodecs, double videoFunction,
                     const char *pageUrl);
@@ -64,20 +63,20 @@ public:
     DSOEXPORT bool connectToServer(const std::string &url);
 
     // Create the second object sent to the server, which is NetStream():;NetStream()
-    DSOEXPORT boost::shared_ptr<cygnal::Buffer> encodeStream(double id);
-    boost::shared_ptr<cygnal::Buffer> encodeStreamOp(double id, rtmp_op_e op, bool flag);
-    boost::shared_ptr<cygnal::Buffer> encodeStreamOp(double id, rtmp_op_e op, bool flag, double pos);
-    DSOEXPORT boost::shared_ptr<cygnal::Buffer> encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string &name);
-    boost::shared_ptr<cygnal::Buffer> encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string &name, double pos);
+    DSOEXPORT std::shared_ptr<cygnal::Buffer> encodeStream(double id);
+    std::shared_ptr<cygnal::Buffer> encodeStreamOp(double id, rtmp_op_e op, bool flag);
+    std::shared_ptr<cygnal::Buffer> encodeStreamOp(double id, rtmp_op_e op, bool flag, double pos);
+    DSOEXPORT std::shared_ptr<cygnal::Buffer> encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string &name);
+    std::shared_ptr<cygnal::Buffer> encodeStreamOp(double id, rtmp_op_e op, bool flag, const std::string &name, double pos);
 
     bool isConnected() { return _connected; };
 
     std::string &getPath() { return _path; };
     void setPath(std::string &x) { _path = x; };
 
-    DSOEXPORT boost::shared_ptr<cygnal::Buffer> encodeEchoRequest(const std::string &method, double id, cygnal::Element &el);
+    DSOEXPORT std::shared_ptr<cygnal::Buffer> encodeEchoRequest(const std::string &method, double id, cygnal::Element &el);
 
-    typedef std::deque<boost::shared_ptr<RTMPMsg> > msgque_t;
+    typedef std::deque<std::shared_ptr<RTMPMsg> > msgque_t;
     msgque_t recvResponse();
 
     void dump();
diff --git a/cygnal/libnet/rtmp_msg.cpp b/cygnal/libnet/rtmp_msg.cpp
index 5ed624c..2f7f3dc 100644
--- a/cygnal/libnet/rtmp_msg.cpp
+++ b/cygnal/libnet/rtmp_msg.cpp
@@ -114,7 +114,7 @@ static RTMPStatusMsgCode rtmp_msg_code_list[] = {
     { "SharedObject.No.Read.Access",             RTMPMsg::SO_NO_READ_ACCESS },
     { "SharedObject.No.Write.Access",            RTMPMsg::SO_NO_WRITE_ACCESS },
     { "SharedObject.Persistence.Mismatch",       RTMPMsg::SO_PERSISTENCE_MISMATCH },
-    { 0, RTMPMsg::NC_CONNECT_FAILED }
+    { nullptr, RTMPMsg::NC_CONNECT_FAILED }
 };
 
 // All the result messages from the server are ASCII text, so they have to be parsed to
@@ -122,21 +122,21 @@ static RTMPStatusMsgCode rtmp_msg_code_list[] = {
 // error, or onStatus message, the actual data can be obtained from the Element.
 // 
 RTMPMsg::rtmp_status_e
-RTMPMsg::checkStatus(boost::shared_ptr<cygnal::Element>  /* el */)
+RTMPMsg::checkStatus(std::shared_ptr<cygnal::Element>  /* el */)
 {
 //    GNASH_REPORT_FUNCTION;
     if (_amfobjs.size() > 0) {
-	vector<boost::shared_ptr<cygnal::Element> >::iterator pit;
-	vector<boost::shared_ptr<cygnal::Element> >::iterator cit;
+	vector<std::shared_ptr<cygnal::Element> >::iterator pit;
+	vector<std::shared_ptr<cygnal::Element> >::iterator cit;
 //	cerr << "# of Properties in object" << _amfobjs.size() << endl;
 	for (pit = _amfobjs.begin(); pit != _amfobjs.end(); ++pit) {
-	    boost::shared_ptr<cygnal::Element> el = (*(pit));
-	    std::vector<boost::shared_ptr<cygnal::Element> > props = el->getProperties();
+	    std::shared_ptr<cygnal::Element> el = (*(pit));
+	    std::vector<std::shared_ptr<cygnal::Element> > props = el->getProperties();
 //  	    printf("FIXME2: %d, %s:%s\n", props.size(),
 //  		   props[2]->getName(), props[2]->to_string());
 	    if (el->getType() == Element::OBJECT_AMF0) {
 		for (cit = props.begin(); cit != props.end(); ++cit) {
-		    boost::shared_ptr<cygnal::Element> child = (*(cit));
+		    std::shared_ptr<cygnal::Element> child = (*(cit));
 //		    child->dump();
 		    std::string name = child->getName();
 		    std::string value;
@@ -165,7 +165,7 @@ RTMPMsg::checkStatus(boost::shared_ptr<cygnal::Element>  /* el */)
     
 // }
 
-boost::shared_ptr<cygnal::Element>
+std::shared_ptr<cygnal::Element>
 RTMPMsg::operator[](size_t index)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -173,7 +173,7 @@ RTMPMsg::operator[](size_t index)
 	return _amfobjs[index];
     }
     
-    boost::shared_ptr<cygnal::Element> el;
+    std::shared_ptr<cygnal::Element> el;
     return el;
 }
 
@@ -183,21 +183,21 @@ RTMPMsg::operator[](size_t index)
 ///	search for.
 ///
 /// @return A smart pointer to the Element for this property.
-boost::shared_ptr<cygnal::Element> 
+std::shared_ptr<cygnal::Element>
 RTMPMsg::findProperty(const std::string &name)
 {
     if (_amfobjs.size() > 0) {
-	vector<boost::shared_ptr<Element> >::iterator ait;
+	vector<std::shared_ptr<Element> >::iterator ait;
 //	cerr << "# of Properties in object: " << _properties.size() << endl;
 	for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ++ait) {
-	    boost::shared_ptr<cygnal::Element> el = (*(ait));
-	    boost::shared_ptr<cygnal::Element> prop = el->findProperty(name);
+	    std::shared_ptr<cygnal::Element> el = (*(ait));
+	    std::shared_ptr<cygnal::Element> prop = el->findProperty(name);
 	    if (prop) {
 		return prop;
 	    }
 	}
     }
-    boost::shared_ptr<Element> el;
+    std::shared_ptr<Element> el;
     return el;
 }
 
@@ -215,10 +215,10 @@ RTMPMsg::dump()
 //    cerr << "Transaction ID:\t" << hexify((const unsigned char *)&_transid, 8, false) << endl;
     cerr << "Transaction ID:\t" << _transid << endl;
 
-    vector<boost::shared_ptr<cygnal::Element> >::iterator ait;
+    vector<std::shared_ptr<cygnal::Element> >::iterator ait;
     cerr << "# of Elements in file: " << _amfobjs.size() << endl;
     for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ++ait) {
-	boost::shared_ptr<cygnal::Element> el = (*(ait));
+	std::shared_ptr<cygnal::Element> el = (*(ait));
         el->dump();
     }
 }
diff --git a/cygnal/libnet/rtmp_msg.h b/cygnal/libnet/rtmp_msg.h
index fb8c5f6..8cac71a 100644
--- a/cygnal/libnet/rtmp_msg.h
+++ b/cygnal/libnet/rtmp_msg.h
@@ -19,7 +19,7 @@
 #ifndef _RTMPMSG_H_
 #define _RTMPMSG_H_
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <string>
 #include <vector>
 
@@ -92,9 +92,9 @@ public:
     RTMPMsg();
     ~RTMPMsg();
     
-    void addObject(boost::shared_ptr<cygnal::Element> el) { _amfobjs.push_back(el); };
+    void addObject(std::shared_ptr<cygnal::Element> el) { _amfobjs.push_back(el); };
     size_t size() { return _amfobjs.size(); };
-    std::vector<boost::shared_ptr<cygnal::Element> > getElements() { return _amfobjs; };
+    std::vector<std::shared_ptr<cygnal::Element> > getElements() { return _amfobjs; };
 
     void setMethodName(const std::string &name) { _method = name; } ;
     std::string &getMethodName()         { return _method; };
@@ -102,15 +102,15 @@ public:
     void setTransactionID(double num)         { _transid = num; };
     double getTransactionID()	         { return _transid; };
 
-    rtmp_status_e checkStatus(boost::shared_ptr<cygnal::Element> el);
+    rtmp_status_e checkStatus(std::shared_ptr<cygnal::Element> el);
     void setStatus(rtmp_status_e st)     { _status = st; };
     rtmp_status_e getStatus()	         { return _status; };
 
-    void setChannel(boost::uint8_t num) { _channel = num; };
-    boost::uint8_t getChannel()         { return _channel; } ;
+    void setChannel(std::uint8_t num) { _channel = num; };
+    std::uint8_t getChannel()         { return _channel; } ;
 
-    boost::shared_ptr<cygnal::Element> operator[](size_t x);
-    boost::shared_ptr<cygnal::Element> at(size_t x) { return _amfobjs[x]; };
+    std::shared_ptr<cygnal::Element> operator[](size_t x);
+    std::shared_ptr<cygnal::Element> at(size_t x) { return _amfobjs[x]; };
 
     /// \brief Find the named property for this Object.
     ///
@@ -118,7 +118,7 @@ public:
     ///		search for.
     ///
     /// @return A smart pointer to the Element for this property.
-    DSOEXPORT boost::shared_ptr<cygnal::Element> findProperty(const std::string &name);
+    DSOEXPORT std::shared_ptr<cygnal::Element> findProperty(const std::string &name);
 
 //    void setHeaderData(RTMP::rtmp_head_t &qhead);
 			
@@ -130,8 +130,8 @@ public:
     rtmp_status_e	  _status;
     std::string           _method;
     double                _transid;
-    std::vector<boost::shared_ptr<cygnal::Element> > _amfobjs;
-    boost::uint8_t       _channel;
+    std::vector<std::shared_ptr<cygnal::Element> > _amfobjs;
+    std::uint8_t       _channel;
 };
 
 } // end of gnash namespace
diff --git a/cygnal/libnet/sshclient.cpp b/cygnal/libnet/sshclient.cpp
index fa6cdca..a091c7f 100644
--- a/cygnal/libnet/sshclient.cpp
+++ b/cygnal/libnet/sshclient.cpp
@@ -17,12 +17,8 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/array.hpp>
+#include <mutex>
+#include <cstdint>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -65,7 +61,7 @@ extern "C" {
 using namespace gnash;
 using namespace std;
 
-static boost::mutex stl_mutex;
+static std::mutex stl_mutex;
 
 namespace gnash
 {
@@ -111,7 +107,7 @@ SSHClient::sshRead(cygnal::Buffer &buf)
 }
 
 int
-SSHClient::sshRead(boost::uint8_t *buf, size_t size)
+SSHClient::sshRead(std::uint8_t *buf, size_t size)
 {
     GNASH_REPORT_FUNCTION;
     
@@ -133,7 +129,7 @@ SSHClient::sshWrite(cygnal::Buffer &buf)
 }
 
 int
-SSHClient::sshWrite(const boost::uint8_t *buf, size_t size)
+SSHClient::sshWrite(const std::uint8_t *buf, size_t size)
 {
     GNASH_REPORT_FUNCTION;
     
@@ -454,7 +450,7 @@ void
 SSHClient::dump() {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::mutex::scoped_lock lock(stl_mutex);
+    std::lock_guard<std::mutex> lock(stl_mutex);
   
     log_debug (_("==== The SSH header breaks down as follows: ===="));
 
diff --git a/cygnal/libnet/sshclient.h b/cygnal/libnet/sshclient.h
index 4908bfc..4c0f5e7 100644
--- a/cygnal/libnet/sshclient.h
+++ b/cygnal/libnet/sshclient.h
@@ -20,11 +20,7 @@
 #define GNASH_SSH_CLIENT_H
 
 #include <string>
-#include <boost/array.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <sstream>
 
 extern "C" {
@@ -57,12 +53,12 @@ public:
 
     // Read bytes from the already opened SSH connection
     int sshRead(cygnal::Buffer &buf);
-    int sshRead(boost::uint8_t *buf, size_t length);
+    int sshRead(std::uint8_t *buf, size_t length);
     int sshRead(std::string &buf);
 
     // Write bytes to the already opened SSH connection
     int sshWrite(cygnal::Buffer &buf);
-    int sshWrite(const boost::uint8_t *buf, size_t length);
+    int sshWrite(const std::uint8_t *buf, size_t length);
     int sshWrite(std::string &buf);
 
     // Shutdown the Context for this connection
@@ -104,7 +100,7 @@ public:
     // Accessors
     ssh_channel getChannel() { return _channel; };
     ssh_session getSession() { return _session; };
-    boost::shared_ptr<cygnal::Buffer> &getBuffer()  { return _buffer; };
+    std::shared_ptr<cygnal::Buffer> &getBuffer()  { return _buffer; };
 
     // Dump internal data to the screen for debugging
     void dump();
@@ -120,13 +116,13 @@ public:
     transport_type_t	_transporttype;
     int			_state;
 #if 0
-    boost::shared_ptr<ssh_session> _session;
-    boost::shared_ptr<SSH_OPTIONS> _options;
+    std::shared_ptr<ssh_session> _session;
+    std::shared_ptr<SSH_OPTIONS> _options;
 #else
     ssh_session _session;
     ssh_channel	_channel;
 #endif
-    boost::shared_ptr<cygnal::Buffer> _buffer;
+    std::shared_ptr<cygnal::Buffer> _buffer;
 };
     
 } // end of gnash namespace
diff --git a/cygnal/libnet/sshserver.cpp b/cygnal/libnet/sshserver.cpp
index d9df04f..2fdd847 100644
--- a/cygnal/libnet/sshserver.cpp
+++ b/cygnal/libnet/sshserver.cpp
@@ -17,12 +17,8 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/array.hpp>
+#include <mutex>
+#include <cstdint>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -67,7 +63,7 @@ extern "C" {
 using namespace gnash;
 using namespace std;
 
-static boost::mutex stl_mutex;
+static std::mutex stl_mutex;
 
 namespace gnash
 {
@@ -195,7 +191,7 @@ void
 SSHServer::dump() {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::mutex::scoped_lock lock(stl_mutex);
+    std::lock_guard<std::mutex> lock(stl_mutex);
   
     log_debug (_("==== The SSH header breaks down as follows: ===="));
 
diff --git a/cygnal/libnet/sshserver.h b/cygnal/libnet/sshserver.h
index 9b226c5..a58d4cf 100644
--- a/cygnal/libnet/sshserver.h
+++ b/cygnal/libnet/sshserver.h
@@ -20,11 +20,7 @@
 #define GNASH_SSH_SERVER_H
 
 #include <string>
-#include <boost/array.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <sstream>
 
 extern "C" {
diff --git a/cygnal/libnet/sslclient.cpp b/cygnal/libnet/sslclient.cpp
index 8f41b6e..e23138a 100644
--- a/cygnal/libnet/sslclient.cpp
+++ b/cygnal/libnet/sslclient.cpp
@@ -21,12 +21,8 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/array.hpp>
+#include <mutex>
+#include <cstdint>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -69,7 +65,7 @@
 using namespace gnash;
 using namespace std;
 
-static boost::mutex stl_mutex;
+static std::mutex stl_mutex;
 // The debug log used by all the gnash libraries.
 
 static LogFile& dbglogfile = LogFile::getDefaultInstance();
@@ -127,7 +123,7 @@ SSLClient::sslRead(cygnal::Buffer &buf)
 }
 
 int
-SSLClient::sslRead(boost::uint8_t *buf, size_t size)
+SSLClient::sslRead(std::uint8_t *buf, size_t size)
 {
     GNASH_REPORT_FUNCTION;
     
@@ -151,7 +147,7 @@ SSLClient::sslWrite(cygnal::Buffer &buf)
 }
 
 int
-SSLClient::sslWrite(const boost::uint8_t *buf, size_t length)
+SSLClient::sslWrite(const std::uint8_t *buf, size_t length)
 {
     GNASH_REPORT_FUNCTION;
     
@@ -381,7 +377,7 @@ void
 SSLClient::dump() {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::mutex::scoped_lock lock(stl_mutex);
+    std::lock_guard<std::mutex> lock(stl_mutex);
         
     log_debug(_("==== The SSL header breaks down as follows: ===="));
 }
diff --git a/cygnal/libnet/sslclient.h b/cygnal/libnet/sslclient.h
index 3c3b6f5..2d071ba 100644
--- a/cygnal/libnet/sslclient.h
+++ b/cygnal/libnet/sslclient.h
@@ -24,11 +24,7 @@
 #endif
 
 #include <string>
-#include <boost/array.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <sstream>
 
 #ifdef HAVE_OPENSSL_SSL_H
@@ -60,12 +56,12 @@ public:
 
     // Read bytes from the already opened SSL connection
     int sslRead(cygnal::Buffer &buf);
-    int sslRead(boost::uint8_t *buf, size_t length);
+    int sslRead(std::uint8_t *buf, size_t length);
     int sslRead(std::string &buf);
 
     // Write bytes to the already opened SSL connection
     int sslWrite(cygnal::Buffer &buf);
-    int sslWrite(const boost::uint8_t *buf, size_t length);
+    int sslWrite(const std::uint8_t *buf, size_t length);
     int sslWrite(std::string &buf);
 
     // Setup the Context for this connection
@@ -109,10 +105,10 @@ public:
 
     void dump();
  protected:
-    boost::scoped_ptr<SSL> _ssl;
-    boost::scoped_ptr<SSL_CTX> _ctx;
-    boost::scoped_ptr<BIO> _bio;
-    boost::scoped_ptr<BIO> _bio_error;
+    std::unique_ptr<SSL> _ssl;
+    std::unique_ptr<SSL_CTX> _ctx;
+    std::unique_ptr<BIO> _bio;
+    std::unique_ptr<BIO> _bio_error;
     std::string		_hostname;
     std::string		_calist;
     std::string		_keyfile;
diff --git a/cygnal/libnet/sslserver.cpp b/cygnal/libnet/sslserver.cpp
index 6a37acb..c773db3 100644
--- a/cygnal/libnet/sslserver.cpp
+++ b/cygnal/libnet/sslserver.cpp
@@ -21,12 +21,8 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/thread/mutex.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/array.hpp>
+#include <mutex>
+#include <cstdint>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -72,7 +68,7 @@
 using namespace gnash;
 using namespace std;
 
-static boost::mutex stl_mutex;
+static std::mutex stl_mutex;
 
 namespace gnash
 {
@@ -133,7 +129,7 @@ SSLServer::loadDhParams(SSL_CTX *ctx, char *file)
 
     if (dh && ctx) {
 	if (SSL_CTX_set_tmp_dh(ctx, dh) < 0) {
-	    log_error(_("SSL!!", "Couldn't set DH parameters: %s "),
+	    log_error(_("Couldn't set DH parameters: %s "),
 		      ERR_reason_error_string(ERR_get_error()));
 	    return false;
 	}
@@ -177,7 +173,7 @@ void
 SSLServer::dump() {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::mutex::scoped_lock lock(stl_mutex);
+    std::lock_guard<std::mutex> lock(stl_mutex);
   
     log_debug (_("==== The SSL header breaks down as follows: ===="));
 }
diff --git a/cygnal/libnet/sslserver.h b/cygnal/libnet/sslserver.h
index edf7d80..548ae1a 100644
--- a/cygnal/libnet/sslserver.h
+++ b/cygnal/libnet/sslserver.h
@@ -23,11 +23,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/array.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <sstream>
 
 #ifdef HAVE_OPENSSL_SSL_H
diff --git a/cygnal/libnet/statistics.cpp b/cygnal/libnet/statistics.cpp
index 58b6a94..acc685d 100644
--- a/cygnal/libnet/statistics.cpp
+++ b/cygnal/libnet/statistics.cpp
@@ -18,7 +18,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 #include <string>
 #include <list>
 #include <iostream>
@@ -27,7 +27,7 @@
 #include "netstats.h"
 #include "statistics.h"
 
-static boost::mutex io_mutex;
+static std::mutex io_mutex;
 
 // The string versions of the codec, used for debugging. If you add
 // another enum type to codec_e, you have to add the string
@@ -96,7 +96,7 @@ Statistics::addStats() {
     st->setBytes(getBytes());
     st->setFileType(getFileType());
     
-    boost::mutex::scoped_lock lock(io_mutex);
+    std::lock_guard<std::mutex> lock(io_mutex);
     _netstats.push_back(st);
     
     return _netstats.size();
@@ -104,7 +104,7 @@ Statistics::addStats() {
 
 void
 Statistics::dump() {   
-    boost::mutex::scoped_lock lock(io_mutex);
+    std::lock_guard<std::mutex> lock(io_mutex);
     std::list<NetStats *>::iterator it;
 
     for (it = _netstats.begin(); it != _netstats.end(); ++it) {
diff --git a/cygnal/libnet/statistics.h b/cygnal/libnet/statistics.h
index 9030437..42a7658 100644
--- a/cygnal/libnet/statistics.h
+++ b/cygnal/libnet/statistics.h
@@ -79,7 +79,7 @@ private:
     browser_e           _browser;
     ostype_e            _os;
     std::list<NetStats *> _netstats;
-    boost::uint32_t     _msg_count;
+    std::uint32_t     _msg_count;
     std::vector<std::string> _filespec;
 };
  
diff --git a/cygnal/proc.cpp b/cygnal/proc.cpp
index f36fa43..5372744 100644
--- a/cygnal/proc.cpp
+++ b/cygnal/proc.cpp
@@ -70,7 +70,7 @@ Proc::getDefaultInstance()
 
 
 bool
-Proc::startCGI(const string &filespec, boost::uint16_t port)
+Proc::startCGI(const string &filespec, std::uint16_t port)
 {
 //    GNASH_REPORT_FUNCTION;
     return startCGI(filespec, false, port);
@@ -91,7 +91,7 @@ Proc::startCGI(const string &filespec, bool outflag)
 }
 
 bool
-Proc::startCGI(const string &filespec, bool outflag, boost::uint16_t port)
+Proc::startCGI(const string &filespec, bool outflag, std::uint16_t port)
 {
 //    GNASH_REPORT_FUNCTION;
     struct stat procstats;
@@ -131,7 +131,7 @@ Proc::startCGI(const string &filespec, bool outflag, boost::uint16_t port)
     strcpy(cmd_line[1], "-n");
     cmd_line[2] = new char[4];
     strcpy(cmd_line[2], "-vv");
-    cmd_line[3] = 0;
+    cmd_line[3] = nullptr;
 //     }
     
     // When running multiple cgis, we prefer to specify the port it's using.
@@ -140,14 +140,14 @@ Proc::startCGI(const string &filespec, bool outflag, boost::uint16_t port)
         strcpy(cmd_line[3], "-p");
         cmd_line[4] = new char[10];
         sprintf(cmd_line[4], "%d", port);
-        cmd_line[5] = 0;
+        cmd_line[5] = nullptr;
     }
 
 
     // fork ourselves silly
     childpid = fork();
     
-//    boost::mutex::scoped_lock lock(_mutex);
+//    std::lock_guard<std::mutex> lock(_mutex);
     
     // childpid is a positive integer, if we are the parent, and fork() worked
     if (childpid > 0) {
@@ -185,7 +185,7 @@ Proc::findCGI(const string &filespec)
 {
 //    GNASH_REPORT_FUNCTION;
     log_debug("Finding \"%s\"", filespec);
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
     return _pids[filespec];
 }
@@ -195,7 +195,7 @@ Proc::stopCGI(void)
 {
 //    GNASH_REPORT_FUNCTION;
     log_unimpl(__PRETTY_FUNCTION__);
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
     return false;
 }
@@ -206,7 +206,7 @@ Proc::stopCGI(const string &filespec)
 //    GNASH_REPORT_FUNCTION;
     log_debug("Stopping \"%s\"", filespec);
 
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     pid_t pid = _pids[filespec];
     
     if (kill (pid, SIGQUIT) == -1) {
@@ -220,7 +220,7 @@ bool
 Proc::setOutput(const string &filespec, bool outflag)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     _output[filespec] = outflag;
     
     return (true);
@@ -230,13 +230,13 @@ bool
 Proc::getOutput(const string &filespec)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     
     return _output[filespec];
 }
 
 bool
-Proc::connectCGI (const string &host, boost::uint16_t port)
+Proc::connectCGI (const string &host, std::uint16_t port)
 {
 //    GNASH_REPORT_FUNCTION;
     return createClient(host, port);
diff --git a/cygnal/proc.h b/cygnal/proc.h
index 1cd2105..5799f6b 100644
--- a/cygnal/proc.h
+++ b/cygnal/proc.h
@@ -23,8 +23,7 @@
 #include <string>
 #include <map>
 
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/condition.hpp>
+#include <mutex>
 
 #include "network.h"
 #include "dsodefs.h"
@@ -45,15 +44,15 @@ public:
     // This starts the process running via the usual fork() & exec()
     bool startCGI (void);
     bool startCGI (const std::string &filespec);
-    bool startCGI (const std::string &filespec, boost::uint16_t port);
+    bool startCGI (const std::string &filespec, std::uint16_t port);
     bool startCGI (const std::string &filespec, bool output);
-    bool startCGI (const std::string &filespec, bool output, boost::uint16_t port);
+    bool startCGI (const std::string &filespec, bool output, std::uint16_t port);
 
     void setDocroot(const std::string &path) { _docroot = path; } ;
     std::string &getDocroot() { return _docroot; };
     
     // This opens a network connection to the process
-    bool connectCGI (const std::string &host, boost::uint16_t port);
+    bool connectCGI (const std::string &host, std::uint16_t port);
 
     // This finds the process
     int findCGI (const std::string &filespec);
@@ -67,7 +66,7 @@ private:
     std::map<std::string, int>  _cons;
     std::string                 _docroot;
     
-    boost::mutex	_mutex;
+    std::mutex	_mutex;
 };
 
 } // end of cygnal namespace
diff --git a/cygnal/rtmp_server.cpp b/cygnal/rtmp_server.cpp
index 553dcd8..3bf672f 100644
--- a/cygnal/rtmp_server.cpp
+++ b/cygnal/rtmp_server.cpp
@@ -28,8 +28,7 @@
 #include <cstdlib>
 #include <cstdio>
 
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 #include <boost/detail/endian.hpp>
 #include <boost/random/uniform_real.hpp>
 #include <boost/random/uniform_int.hpp>
@@ -91,7 +90,7 @@ RTMPServer::~RTMPServer()
 }
 
 
-boost::shared_ptr<cygnal::Element>
+std::shared_ptr<cygnal::Element>
 RTMPServer::processClientHandShake(int fd)
 {
     GNASH_REPORT_FUNCTION;
@@ -108,17 +107,17 @@ RTMPServer::processClientHandShake(int fd)
     
     // These store the information we need from the initial
     /// NetConnection object.
-    boost::scoped_ptr<cygnal::Element> nc;
-    boost::shared_ptr<cygnal::Buffer>  pkt;
-    boost::shared_ptr<cygnal::Element> tcurl;
-    boost::shared_ptr<cygnal::Element> swfurl;
-    boost::shared_ptr<cygnal::Element> encoding;
+    std::unique_ptr<cygnal::Element> nc;
+    std::shared_ptr<cygnal::Buffer>  pkt;
+    std::shared_ptr<cygnal::Element> tcurl;
+    std::shared_ptr<cygnal::Element> swfurl;
+    std::shared_ptr<cygnal::Element> encoding;
 
 //     RTMP::rtmp_headersize_e response_head_size = RTMP::HEADER_12;
     
     // Read the handshake bytes sent by the client when requesting
     // a connection.
-    boost::shared_ptr<cygnal::Buffer> handshake1 = RTMP::recvMsg(fd);
+    std::shared_ptr<cygnal::Buffer> handshake1 = RTMP::recvMsg(fd);
     // See if we have data in the handshake, we should have 1537 bytes
     if (!handshake1) {
 	log_error(_("Failed to read the handshake from the client."));
@@ -133,9 +132,9 @@ RTMPServer::processClientHandShake(int fd)
     
     // Read the response from the client from the handshale reponse we
     // just sent.
-    boost::shared_ptr<cygnal::Buffer> handshake2 = RTMP::recvMsg(fd);
+    std::shared_ptr<cygnal::Buffer> handshake2 = RTMP::recvMsg(fd);
     // See if we have data in the handshake, we should have 1536 bytes
-    if (handshake2 == 0) {
+    if (handshake2 == nullptr) {
 	log_error(_("failed to read the handshake from the client."));
 	return tcurl;		// nc is empty
     } else {
@@ -154,7 +153,7 @@ RTMPServer::processClientHandShake(int fd)
     // the packet is a raw RTMP message. Since the header can be a
     // variety of sizes, and this effects the data size, we need to
     // decode that first.
-    boost::shared_ptr<RTMP::rtmp_head_t> qhead = RTMP::decodeHeader(pkt->reference());
+    std::shared_ptr<RTMP::rtmp_head_t> qhead = RTMP::decodeHeader(pkt->reference());
 
     if (!qhead) {
 	log_error(_("RTMP header had parsing error!"));
@@ -169,7 +168,7 @@ RTMPServer::processClientHandShake(int fd)
     }
 
     // Get the actual start of the data
-    boost::uint8_t *ptr = pkt->reference() + qhead->head_size;
+    std::uint8_t *ptr = pkt->reference() + qhead->head_size;
 
     // See if we have enough data to go past the chunksize, which is
     // probable. If so, all chunks are the default size of 128, the
@@ -180,7 +179,7 @@ RTMPServer::processClientHandShake(int fd)
     // now build a copy of the data but skip over the RTMP header
     // bytes every chunk size biundary. All RTMP headers at this stage
     // are 1 byte ones.
-    boost::scoped_ptr<cygnal::Buffer> newptr(new cygnal::Buffer(qhead->bodysize));
+    std::unique_ptr<cygnal::Buffer> newptr(new cygnal::Buffer(qhead->bodysize));
     if (qhead->bodysize > RTMP_VIDEO_PACKET_SIZE) {
 	log_network("De chunkifying the NetConnection packet.");
 	int nbytes = 0;
@@ -226,7 +225,7 @@ RTMPServer::processClientHandShake(int fd)
     // causes Async I/O errors in the client.
     if (!encoding) {
 	// Send a onBWDone to the client to start the new NetConnection,
-	boost::shared_ptr<cygnal::Buffer> bwdone = encodeBWDone(2.0);
+	std::shared_ptr<cygnal::Buffer> bwdone = encodeBWDone(2.0);
 	if (RTMP::sendMsg(fd, qhead->channel, RTMP::HEADER_8,
 			  bwdone->size(), RTMP::INVOKE, RTMPMsg::FROM_SERVER, *bwdone)) {
 	    log_network("Sent onBWDone to client");
@@ -238,9 +237,9 @@ RTMPServer::processClientHandShake(int fd)
     }
     
     // Send a Set Client Window Size to the client
-    boost::shared_ptr<cygnal::Buffer> winsize(new cygnal::Buffer(sizeof(boost::uint32_t)));
-    boost::uint32_t swapped = 0x20000;
-    swapBytes(&swapped, sizeof(boost::uint32_t));
+    std::shared_ptr<cygnal::Buffer> winsize(new cygnal::Buffer(sizeof(std::uint32_t)));
+    std::uint32_t swapped = 0x20000;
+    swapBytes(&swapped, sizeof(std::uint32_t));
     *winsize += swapped;
     if (RTMP::sendMsg(fd, RTMP_SYSTEM_CHANNEL, RTMP::HEADER_12,
 		      winsize->size(), RTMP::WINDOW_SIZE, RTMPMsg::FROM_CLIENT, *winsize)) {
@@ -252,7 +251,7 @@ RTMPServer::processClientHandShake(int fd)
     }
 
     // Send a ping to the client to reset the new NetConnection,
-    boost::shared_ptr<cygnal::Buffer> ping_reset =
+    std::shared_ptr<cygnal::Buffer> ping_reset =
 	encodePing(RTMP::PING_RESET, 0);
     if (RTMP::sendMsg(fd, RTMP_SYSTEM_CHANNEL, RTMP::HEADER_8,
 		      ping_reset->size(), RTMP::USER, RTMPMsg::FROM_SERVER, *ping_reset)) {
@@ -266,7 +265,7 @@ RTMPServer::processClientHandShake(int fd)
     // Send the packet to notify the client that the
     // NetConnection::connect() was sucessful. After the client
     // receives this, the handhsake is completed.
-    boost::shared_ptr<cygnal::Buffer> response =
+    std::shared_ptr<cygnal::Buffer> response =
 	encodeResult(RTMPMsg::NC_CONNECT_SUCCESS);
     if (RTMP::sendMsg(fd, 3, RTMP::HEADER_8, response->allocated(),
 		      RTMP::INVOKE, RTMPMsg::FROM_SERVER, *response)) {
@@ -289,16 +288,16 @@ RTMPServer::handShakeResponse(int fd, cygnal::Buffer &handshake)
 {
     GNASH_REPORT_FUNCTION;
 
-    // boost::uint8_t byte;
+    // std::uint8_t byte;
     // byte = RTMP_VERSION;
 
     // the response handshake is twice the size of the one we just
     // received for a total of 3072 bytes, plus room for the version.
-    boost::scoped_ptr<cygnal::Buffer> zeros(new cygnal::Buffer(RTMP_HANDSHAKE_SIZE*2
+    std::unique_ptr<cygnal::Buffer> zeros(new cygnal::Buffer(RTMP_HANDSHAKE_SIZE*2
 					 + RTMP_HANDSHAKE_VERSION_SIZE));
     zeros->clear();		// set entire buffer to zeros
 
-    boost::uint8_t *ptr = zeros->reference();
+    std::uint8_t *ptr = zeros->reference();
 
     // the first byte of the handshake response is the RTMP version
     // number.
@@ -314,13 +313,13 @@ RTMPServer::handShakeResponse(int fd, cygnal::Buffer &handshake)
     // timestamp, followed by another field that appears to be another
     // timestamp or version number, which is probably ignored.
     // the first field of the header is the timestamp
-    boost::uint32_t timestamp;
+    std::uint32_t timestamp;
     // Get the timestamp of when this message was read
     timestamp = RTMP::getTime();
     *zeros += timestamp;
 
     // the second field is always zero
-    boost::uint32_t pad = 0;
+    std::uint32_t pad = 0;
     *zeros += pad;
 
     // the data starts after the vesion and header bytes
@@ -341,11 +340,11 @@ RTMPServer::handShakeResponse(int fd, cygnal::Buffer &handshake)
     return true;    
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 RTMPServer::serverFinish(int fd, cygnal::Buffer &handshake1, cygnal::Buffer &handshake2)
 {
     GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
 
     // sanity check our input data. We do this seperately as an empty
     // buffer means data wasn't read correctly from the network. We
@@ -362,13 +361,13 @@ RTMPServer::serverFinish(int fd, cygnal::Buffer &handshake1, cygnal::Buffer &han
 
     // the first field of the header is the timestamp of the original
     // packet sent by this server.
-    boost::uint32_t timestamp1 = *reinterpret_cast<boost::uint32_t *>
+    std::uint32_t timestamp1 = *reinterpret_cast<std::uint32_t *>
 	(handshake1.reference() + RTMP_HANDSHAKE_VERSION_SIZE);
 
     // the second field of the header is the timestamp of the previous
     // packet sent by this server.
-    boost::uint32_t timestamp2 = *reinterpret_cast<boost::uint32_t *>
-	(handshake1.reference() + RTMP_HANDSHAKE_VERSION_SIZE + sizeof(boost::uint32_t));
+    std::uint32_t timestamp2 = *reinterpret_cast<std::uint32_t *>
+	(handshake1.reference() + RTMP_HANDSHAKE_VERSION_SIZE + sizeof(std::uint32_t));
 
     log_network("The timestamp delta is %d", timestamp2 - timestamp1);
 
@@ -398,7 +397,7 @@ RTMPServer::serverFinish(int fd, cygnal::Buffer &handshake1, cygnal::Buffer &han
 		    amf_size, fd);
 	buf.reset(new Buffer(amf_size));
 	// populate the buffer with the AMF data
-	boost::uint8_t *ptr = handshake2.reference() + RTMP_HANDSHAKE_SIZE;
+	std::uint8_t *ptr = handshake2.reference() + RTMP_HANDSHAKE_SIZE;
 	buf->copy(ptr, amf_size);
     }
     
@@ -418,11 +417,11 @@ RTMPServer::packetRead(cygnal::Buffer &buf)
 {
     GNASH_REPORT_FUNCTION;
 
-    boost::uint8_t amf_index, headersize;
-    boost::uint8_t *ptr = buf.reference();
+    std::uint8_t amf_index, headersize;
+    std::uint8_t *ptr = buf.reference();
     AMF amf;
     
-    if (ptr == 0) {
+    if (ptr == nullptr) {
 	return false;
     }
 
@@ -446,28 +445,28 @@ RTMPServer::packetRead(cygnal::Buffer &buf)
 //     }
 
 // #if 1
-//     boost::uint8_t *end = buf->remove(0xc3);
+//     std::uint8_t *end = buf->remove(0xc3);
 // #else
-//     boost::uint8_t *end = buf->find(0xc3);
+//     std::uint8_t *end = buf->find(0xc3);
 //     log_network("END is %x", (void *)end);
 //     *end = '*';
 // #endif
     decodeHeader(ptr);
     ptr += headersize;
 
-    boost::uint8_t* tooFar = ptr+300+sizeof(int); // FIXME:
+    std::uint8_t* tooFar = ptr+300+sizeof(int); // FIXME:
     
     AMF amf_obj;
-    boost::shared_ptr<cygnal::Element> el1 = amf_obj.extractAMF(ptr, tooFar);
+    std::shared_ptr<cygnal::Element> el1 = amf_obj.extractAMF(ptr, tooFar);
     ptr += amf_obj.totalsize();
-    boost::shared_ptr<cygnal::Element> el2 = amf_obj.extractAMF(ptr, tooFar);
+    std::shared_ptr<cygnal::Element> el2 = amf_obj.extractAMF(ptr, tooFar);
 
     int size = 0;
-    boost::shared_ptr<cygnal::Element> el;
-    while ( size < static_cast<boost::uint16_t>(_header.bodysize) - 24 ) {
+    std::shared_ptr<cygnal::Element> el;
+    while ( size < static_cast<std::uint16_t>(_header.bodysize) - 24 ) {
 	if (ptr) {
 	    el = amf_obj.extractProperty(ptr, tooFar);
-	    if (el != 0) {
+	    if (el != nullptr) {
 		size += amf_obj.totalsize();
 		ptr += amf_obj.totalsize();
 //		_properties[el->getName()] = el;
@@ -489,7 +488,7 @@ RTMPServer::packetRead(cygnal::Buffer &buf)
     log_network("Reading AMF packets till we're done...");
     // buf->dump();
     while (ptr < end) {
-	boost::shared_ptr<cygnal::Element> el(new cygnal::Element);
+	std::shared_ptr<cygnal::Element> el(new cygnal::Element);
 	ptr = amf.extractProperty(el, ptr);
 	addProperty(el);
 	// el->dump();
@@ -504,7 +503,7 @@ RTMPServer::packetRead(cygnal::Buffer &buf)
 	buf = _que->merge(buf);
     }
     while ((ptr - buf->begin()) < static_cast<int>(actual_size)) {
-	boost::shared_ptr<cygnal::Element> el(new cygnal::Element);
+	std::shared_ptr<cygnal::Element> el(new cygnal::Element);
 	if (ptr) {
 	    ptr = amf.extractProperty(el, ptr);
 	    addProperty(el);
@@ -525,7 +524,7 @@ RTMPServer::packetRead(cygnal::Buffer &buf)
 	  break;
       case USER:
       {
-	  boost::shared_ptr<rtmp_ping_t> ping = decodePing(ptr);
+	  std::shared_ptr<rtmp_ping_t> ping = decodePing(ptr);
 	  switch (ping->type) {
 	    case PING_CLEAR:
 		break;
@@ -603,14 +602,14 @@ RTMPServer::packetRead(cygnal::Buffer &buf)
 //
 // _result(double ClientStream, NULL, double ServerStream)
 // These are handlers for the various types
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 RTMPServer::encodeResult(RTMPMsg::rtmp_status_e status)
 {
 //    GNASH_REPORT_FUNCTION;
     return encodeResult(status, _filespec, _streamid);
 }
     
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -618,14 +617,14 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
     return encodeResult(status, filename, _streamid, clientid);
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename, double &clientid)
 {
 //    GNASH_REPORT_FUNCTION;
     return encodeResult(status, filename, _streamid, clientid);
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, double &transid)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -633,14 +632,14 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, double &transid)
     return encodeResult(status, "", transid, clientid);
 }
 
-boost::shared_ptr<cygnal::Buffer> 
+std::shared_ptr<cygnal::Buffer>
 RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename, double &transid, double &clientid)
 {
 //    GNASH_REPORT_FUNCTION;
 //    Buffer *buf = new Buffer;
-//     boost::uint8_t *ptr = buf->reference();
+//     std::uint8_t *ptr = buf->reference();
 //     buf->clear();		// default everything to zeros, real data gets optionally added.
-//    ptr += sizeof(boost::uint16_t); // go past the first short
+//    ptr += sizeof(std::uint16_t); // go past the first short
 //     const char *capabilities = 0;
 //     const char *description = 0;
 //     const char *code = 0;
@@ -674,15 +673,15 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
       {
 // 	  errstr = new Element;
 // 	  errstr->makeString("error");
-	  boost::shared_ptr<cygnal::Element> level(new Element);
+	  std::shared_ptr<cygnal::Element> level(new Element);
 	  level->makeString("level", "error");
 	  top.addProperty(level);
 
-	  boost::shared_ptr<cygnal::Element> description(new Element);
+	  std::shared_ptr<cygnal::Element> description(new Element);
 	  description->makeString("description", "Connection Failed.");
 	  top.addProperty(description);
 	  
-	  boost::shared_ptr<cygnal::Element> code(new Element);
+	  std::shared_ptr<cygnal::Element> code(new Element);
 	  code->makeString("code", "Connection.Connect.Failed");
 	  top.addProperty(code);
       }
@@ -692,29 +691,29 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
 // 	  delete str;
 // 	  str = new Element;
 // 	  str->makeString("error");
-	  boost::shared_ptr<cygnal::Element> level(new Element);
+	  std::shared_ptr<cygnal::Element> level(new Element);
 	  level->makeString("level", "error");
 	  top.addProperty(level);
 
-	  boost::shared_ptr<cygnal::Element> description(new Element);
+	  std::shared_ptr<cygnal::Element> description(new Element);
 	  description->makeString("description", "Connection Rejected.");
 	  top.addProperty(description);
 	  
-	  boost::shared_ptr<cygnal::Element> code(new Element);
+	  std::shared_ptr<cygnal::Element> code(new Element);
 	  code->makeString("code", "NetConnection.Connect.Rejected");
 	  top.addProperty(code);
       }
       case RTMPMsg::NC_CONNECT_SUCCESS:
       {
-	  boost::shared_ptr<cygnal::Element> level(new Element);
+	  std::shared_ptr<cygnal::Element> level(new Element);
 	  level->makeString("level", "status");
 	  top.addProperty(level);
 	  
-	  boost::shared_ptr<cygnal::Element> code(new Element);
+	  std::shared_ptr<cygnal::Element> code(new Element);
 	  code->makeString("code", "NetConnection.Connect.Success");
 	  top.addProperty(code);
 
-	  boost::shared_ptr<cygnal::Element> description(new Element);
+	  std::shared_ptr<cygnal::Element> description(new Element);
 	  description->makeString("description", "Connection succeeded.");
 	  top.addProperty(description);
       }
@@ -732,15 +731,15 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
       {
 	  str->makeString("onStatus");
 
-	  boost::shared_ptr<cygnal::Element> level(new Element);
+	  std::shared_ptr<cygnal::Element> level(new Element);
 	  level->makeString("level", "status");
 	  top.addProperty(level);
 
-	  boost::shared_ptr<cygnal::Element> code(new Element);
+	  std::shared_ptr<cygnal::Element> code(new Element);
 	  code->makeString("code", "NetStream.Pause.Notify");
 	  top.addProperty(code);
 
-	  boost::shared_ptr<cygnal::Element> description(new Element);
+	  std::shared_ptr<cygnal::Element> description(new Element);
 	  string field = "Pausing ";
 	  if (!filename.empty()) {
 	      field += filename;
@@ -748,11 +747,11 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
 	  description->makeString("description", field);
 	  top.addProperty(description);
 	  
-	  boost::shared_ptr<cygnal::Element> details(new Element);
+	  std::shared_ptr<cygnal::Element> details(new Element);
 	  details->makeString("details", filename);
 	  top.addProperty(details);
   
-	  boost::shared_ptr<cygnal::Element> cid(new Element);
+	  std::shared_ptr<cygnal::Element> cid(new Element);
 	  cid->makeNumber("clientid", clientid);
 	  top.addProperty(cid);
 
@@ -771,15 +770,15 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
       {
 	  str->makeString("onStatus");
 //	  "clientid"
-	  boost::shared_ptr<cygnal::Element> level(new Element);
+	  std::shared_ptr<cygnal::Element> level(new Element);
 	  level->makeString("level", "status");
 	  top.addProperty(level);
 
-	  boost::shared_ptr<cygnal::Element> code(new Element);
+	  std::shared_ptr<cygnal::Element> code(new Element);
 	  code->makeString("code", "NetStream.Play.Reset");
 	  top.addProperty(code);
 
-	  boost::shared_ptr<cygnal::Element> description(new Element);
+	  std::shared_ptr<cygnal::Element> description(new Element);
 	  string field = "Playing and resetting ";
 	  if (!filename.empty()) {
 	      field += filename;
@@ -787,11 +786,11 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
 	  description->makeString("description", field);
 	  top.addProperty(description);
 	  
-	  boost::shared_ptr<cygnal::Element> details(new Element);
+	  std::shared_ptr<cygnal::Element> details(new Element);
 	  details->makeString("details", filename);
 	  top.addProperty(details);
 	  
-	  boost::shared_ptr<cygnal::Element> cid(new Element);
+	  std::shared_ptr<cygnal::Element> cid(new Element);
 #ifdef CLIENT_ID_NUMERIC
 	  double clientid = createClientID();
 	  cid->makeNumber("clientid", clientid);
@@ -813,15 +812,15 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
       {
 	  str->makeString("onStatus");
 
-	  boost::shared_ptr<cygnal::Element> level(new Element);
+	  std::shared_ptr<cygnal::Element> level(new Element);
 	  level->makeString("level", "status");
 	  top.addProperty(level);
 
-	  boost::shared_ptr<cygnal::Element> code(new Element);
+	  std::shared_ptr<cygnal::Element> code(new Element);
 	  code->makeString("code", "NetStream.Play.Start");
 	  top.addProperty(code);
 
-	  boost::shared_ptr<cygnal::Element> description(new Element);
+	  std::shared_ptr<cygnal::Element> description(new Element);
 	  string field = "Started playing ";
 	  if (!filename.empty()) {
 	      field += filename;
@@ -829,11 +828,11 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
 	  description->makeString("description", field);
 	  top.addProperty(description);
 	  
-	  boost::shared_ptr<cygnal::Element> details(new Element);
+	  std::shared_ptr<cygnal::Element> details(new Element);
 	  details->makeString("details", filename);
 	  top.addProperty(details);
   
-	  boost::shared_ptr<cygnal::Element> cid(new Element);
+	  std::shared_ptr<cygnal::Element> cid(new Element);
 #ifdef CLIENT_ID_NUMERIC
 	  double clientid = createClientID();
 	  cid->makeNumber("clientid", clientid);
@@ -854,15 +853,15 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
       case RTMPMsg::NS_PLAY_STOP:
       case RTMPMsg::NS_PLAY_STREAMNOTFOUND:
       {
-	  boost::shared_ptr<cygnal::Element> level(new Element);
+	  std::shared_ptr<cygnal::Element> level(new Element);
 	  level->makeString("level", "error");
 	  top.addProperty(level);
 
-	  boost::shared_ptr<cygnal::Element> description(new Element);
+	  std::shared_ptr<cygnal::Element> description(new Element);
 	  description->makeString("description", "NetStream.Play.StreamNotFound.");
 	  top.addProperty(description);
 	  
-	  boost::shared_ptr<cygnal::Element> code(new Element);
+	  std::shared_ptr<cygnal::Element> code(new Element);
 	  code->makeString("code", "NetStream.Play.StreamNotFound");
 	  top.addProperty(code);
 	  break;
@@ -898,7 +897,7 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
 	  // Don't encode as an object, just the properties
 	  notobject = true;
 
-	  boost::shared_ptr<cygnal::Element> id2(new Element);
+	  std::shared_ptr<cygnal::Element> id2(new Element);
 	  
 	  double sid = createStreamID();
 	  id2->makeNumber(sid);
@@ -912,14 +911,14 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
 	  break;
     };
     
-    boost::shared_ptr<cygnal::Buffer> strbuf = str->encode();
-    boost::shared_ptr<cygnal::Buffer> numbuf = number->encode();
-    boost::shared_ptr<cygnal::Buffer> topbuf = top.encode(notobject);
+    std::shared_ptr<cygnal::Buffer> strbuf = str->encode();
+    std::shared_ptr<cygnal::Buffer> numbuf = number->encode();
+    std::shared_ptr<cygnal::Buffer> topbuf = top.encode(notobject);
 
-    boost::shared_ptr<cygnal::Buffer> buf(new Buffer(strbuf->size() + numbuf->size() + topbuf->size()));
+    std::shared_ptr<cygnal::Buffer> buf(new Buffer(strbuf->size() + numbuf->size() + topbuf->size()));
     *buf += strbuf;
     *buf += numbuf;
-    boost::uint8_t byte = static_cast<boost::uint8_t>(RTMP::WINDOW_SIZE & 0x000000ff);
+    std::uint8_t byte = static_cast<std::uint8_t>(RTMP::WINDOW_SIZE & 0x000000ff);
     *buf += byte;
     *buf += topbuf;
 
@@ -948,30 +947,30 @@ RTMPServer::encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string
 // A RTMP Ping packet looks like this: "02 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 00 0",
 // which is the Ping type byte, followed by two shorts that are the parameters. Only the first
 // two paramters are required.
-boost::shared_ptr<Buffer>
+std::shared_ptr<Buffer>
 RTMPServer::encodePing(rtmp_ping_e type)
 {
 //    GNASH_REPORT_FUNCTION;
     return encodePing(type, 0);
 }
 
-boost::shared_ptr<Buffer>
-RTMPServer::encodePing(rtmp_ping_e type, boost::uint32_t milliseconds)
+std::shared_ptr<Buffer>
+RTMPServer::encodePing(rtmp_ping_e type, std::uint32_t milliseconds)
 {
 //    GNASH_REPORT_FUNCTION;
 
     // An encoded ping message 
-    boost::shared_ptr<cygnal::Buffer> buf(new Buffer(sizeof(boost::uint16_t) * 3));
-//    boost::uint8_t *ptr = buf->reference();
+    std::shared_ptr<cygnal::Buffer> buf(new Buffer(sizeof(std::uint16_t) * 3));
+//    std::uint8_t *ptr = buf->reference();
 
     // Set the type of this ping message
-    boost::uint16_t typefield = htons(type);
+    std::uint16_t typefield = htons(type);
     *buf = typefield;
     
 //     // go past the first short, which is the type field
-//    ptr += sizeof(boost::uint16_t);
+//    ptr += sizeof(std::uint16_t);
 
-    boost::uint32_t swapped = 0;
+    std::uint32_t swapped = 0;
     switch (type) {
         // These two don't appear to have any paramaters
       case PING_CLEAR:
@@ -980,16 +979,16 @@ RTMPServer::encodePing(rtmp_ping_e type, boost::uint32_t milliseconds)
 	  // the third parameter is the buffer time in milliseconds
       case PING_TIME:
       {
-//	  ptr += sizeof(boost::uint16_t); // go past the second short
+//	  ptr += sizeof(std::uint16_t); // go past the second short
 	  swapped = milliseconds;
-	  swapBytes(&swapped, sizeof(boost::uint32_t));
+	  swapBytes(&swapped, sizeof(std::uint32_t));
 	  *buf += swapped;
 	  break;
       }
       // reset doesn't have any parameters but zeros
       case PING_RESET:
       {
-	  boost::uint16_t zero = 0;
+	  std::uint16_t zero = 0;
 	  *buf += zero;
 	  *buf += zero;
 	  break;
@@ -1000,7 +999,7 @@ RTMPServer::encodePing(rtmp_ping_e type, boost::uint32_t milliseconds)
       {
 //	  swapped = htonl(milliseconds);
 	  swapped = milliseconds;
-	  swapBytes(&swapped, sizeof(boost::uint32_t));
+	  swapBytes(&swapped, sizeof(std::uint32_t));
 	  *buf += swapped;
 	  break;
       }
@@ -1017,7 +1016,7 @@ RTMPServer::encodePing(rtmp_ping_e type, boost::uint32_t milliseconds)
 }
 
 // Encode a onBWDone message for the client. These are of a fixed size.
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 RTMPServer::encodeBWDone(double id)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -1032,11 +1031,11 @@ RTMPServer::encodeBWDone(double id)
     Element null;
     null.makeNull();
 
-    boost::shared_ptr<cygnal::Buffer> enccmd  = cmd.encode();
-    boost::shared_ptr<cygnal::Buffer> encnum  = num.encode();
-    boost::shared_ptr<cygnal::Buffer> encnull  = null.encode();
+    std::shared_ptr<cygnal::Buffer> enccmd  = cmd.encode();
+    std::shared_ptr<cygnal::Buffer> encnum  = num.encode();
+    std::shared_ptr<cygnal::Buffer> encnull  = null.encode();
 
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(enccmd->size()
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(enccmd->size()
 						       + encnum->size()
 						       + encnull->size()));
 
@@ -1047,12 +1046,12 @@ RTMPServer::encodeBWDone(double id)
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer>
-RTMPServer::encodeAudio(boost::uint8_t *data, size_t size)
+std::shared_ptr<cygnal::Buffer>
+RTMPServer::encodeAudio(std::uint8_t *data, size_t size)
 {
     GNASH_REPORT_FUNCTION;
     
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     
     if (size) {
 	if (data) {
@@ -1064,12 +1063,12 @@ RTMPServer::encodeAudio(boost::uint8_t *data, size_t size)
     return buf;
 }
 
-boost::shared_ptr<cygnal::Buffer>
-RTMPServer::encodeVideo(boost::uint8_t * /* data */, size_t /* size */)
+std::shared_ptr<cygnal::Buffer>
+RTMPServer::encodeVideo(std::uint8_t * /* data */, size_t /* size */)
 {
     GNASH_REPORT_FUNCTION;
 
-    boost::shared_ptr<cygnal::Buffer> buf;
+    std::shared_ptr<cygnal::Buffer> buf;
     
     return buf;
 }
@@ -1077,30 +1076,30 @@ RTMPServer::encodeVideo(boost::uint8_t * /* data */, size_t /* size */)
 #if 0
 // Parse an Echo Request message coming from the Red5 echo_test. This
 // method should only be used for testing purposes.
-vector<boost::shared_ptr<cygnal::Element > >
-RTMPServer::parseEchoRequest(boost::uint8_t *ptr, size_t size)
+vector<std::shared_ptr<cygnal::Element > >
+RTMPServer::parseEchoRequest(std::uint8_t *ptr, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
     AMF amf;
-    vector<boost::shared_ptr<cygnal::Element > > headers;
+    vector<std::shared_ptr<cygnal::Element > > headers;
 
     // The first element is the name of the test, 'echo'
-    boost::shared_ptr<cygnal::Element> el1 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el1 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el1);
 
     // The second element is the number of the test,
-    boost::shared_ptr<cygnal::Element> el2 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el2 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el2);
 
     // This one has always been a NULL object from my tests
-    boost::shared_ptr<cygnal::Element> el3 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el3 = amf.extractAMF(ptr, ptr+size);
     ptr += amf.totalsize();
     headers.push_back(el3);
 
     // This one has always been an NULL or Undefined object from my tests
-    boost::shared_ptr<cygnal::Element> el4 = amf.extractAMF(ptr, ptr+size);
+    std::shared_ptr<cygnal::Element> el4 = amf.extractAMF(ptr, ptr+size);
     if (!el4) {
 	log_error(_("Couldn't reliably extract the echo data!"));
     }
@@ -1114,23 +1113,23 @@ RTMPServer::parseEchoRequest(boost::uint8_t *ptr, size_t size)
 // is only used for testing by developers. The format appears to be
 // a string '_result', followed by the number of the test, and then two
 // NULL objects.
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 RTMPServer::formatEchoResponse(double num, cygnal::Element &el)
 {
 //    GNASH_REPORT_FUNCTION;
-    boost::shared_ptr<cygnal::Buffer> data = amf::AMF::encodeElement(el);
+    std::shared_ptr<cygnal::Buffer> data = amf::AMF::encodeElement(el);
     return formatEchoResponse(num, data->reference(), data->allocated());
 }
 
-boost::shared_ptr<cygnal::Buffer>
+std::shared_ptr<cygnal::Buffer>
 RTMPServer::formatEchoResponse(double num, cygnal::Buffer &data)
 {
 //    GNASH_REPORT_FUNCTION;
     return formatEchoResponse(num, data.reference(), data.allocated());
 }
 
-boost::shared_ptr<cygnal::Buffer>
-RTMPServer::formatEchoResponse(double num, boost::uint8_t *data, size_t size)
+std::shared_ptr<cygnal::Buffer>
+RTMPServer::formatEchoResponse(double num, std::uint8_t *data, size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
 
@@ -1144,11 +1143,11 @@ RTMPServer::formatEchoResponse(double num, boost::uint8_t *data, size_t size)
     Element null;
     null.makeNull();
 
-    boost::shared_ptr<cygnal::Buffer> encecho = echo.encode();
-    boost::shared_ptr<cygnal::Buffer> encidx  = index.encode();   
-    boost::shared_ptr<cygnal::Buffer> encnull  = null.encode();   
+    std::shared_ptr<cygnal::Buffer> encecho = echo.encode();
+    std::shared_ptr<cygnal::Buffer> encidx  = index.encode();
+    std::shared_ptr<cygnal::Buffer> encnull  = null.encode();
 
-    boost::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(encecho->size()
+    std::shared_ptr<cygnal::Buffer> buf(new cygnal::Buffer(encecho->size()
 						       + encidx->size()
 						       + encnull->size() + size));
 
@@ -1197,17 +1196,17 @@ RTMPServer::createClientID()
 #else
     char letters[] =
 	"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-    boost::uint64_t random_time_bits = 0;
-    boost::uint64_t value = 0;
+    std::uint64_t random_time_bits = 0;
+    std::uint64_t value = 0;
 # ifdef HAVE_GETTIMEOFDAY
     timeval tv;
-    gettimeofday(&tv, NULL);
+    gettimeofday(&tv, nullptr);
     random_time_bits = ((uint64_t)tv.tv_usec << 16) ^ tv.tv_sec;
 # else
     random_time_bits = time(NULL);
 # endif
     value += random_time_bits ^ getpid();
-    boost::uint64_t v = value; 
+    std::uint64_t v = value;
     id = letters[v % 62];
     v /= 62;
     id += letters[v % 62];
@@ -1241,7 +1240,7 @@ RTMPServer::sendFile(int fd, const std::string &filespec)
 {
     GNASH_REPORT_FUNCTION;
     // See if the file is in the cache and already opened.
-    boost::shared_ptr<DiskStream> filestream(cache.findFile(filespec));
+    std::shared_ptr<DiskStream> filestream(cache.findFile(filespec));
     if (filestream) {
 	cerr << "FIXME: found file in cache!" << endl;
     } else {
@@ -1329,7 +1328,7 @@ RTMPServer::sendToClient(std::vector<int> &fds, cygnal::Buffer &data)
 }
 
 size_t
-RTMPServer::sendToClient(std::vector<int> &fds, boost::uint8_t *data,
+RTMPServer::sendToClient(std::vector<int> &fds, std::uint8_t *data,
 		      size_t size)
 {
 //    GNASH_REPORT_FUNCTION;
@@ -1357,7 +1356,7 @@ rtmp_handler(Network::thread_params_t *args)
     string url, filespec;
     url = docroot;
     bool done = false;
-    boost::shared_ptr<RTMPMsg> body;
+    std::shared_ptr<RTMPMsg> body;
     // static bool initialize = true;
 //     bool sendfile = false;
     log_network("Starting RTMP Handler for fd #%d, cgi-bin is \"%s\"",
@@ -1371,10 +1370,10 @@ rtmp_handler(Network::thread_params_t *args)
     // Adjust the timeout
     rtmp->setTimeout(10);
     
-    boost::shared_ptr<cygnal::Buffer>  pkt;
-    boost::shared_ptr<cygnal::Element> tcurl;
-    boost::shared_ptr<cygnal::Element> swfurl;
-    boost::shared_ptr<cygnal::Buffer> response;
+    std::shared_ptr<cygnal::Buffer>  pkt;
+    std::shared_ptr<cygnal::Element> tcurl;
+    std::shared_ptr<cygnal::Element> swfurl;
+    std::shared_ptr<cygnal::Buffer> response;
 
     // Keep track of the network statistics
     // See if we have any messages waiting. After the initial connect, this is
@@ -1382,7 +1381,7 @@ rtmp_handler(Network::thread_params_t *args)
     
     // Adjust the timeout
     rtmp->setTimeout(30);
-//    boost::shared_ptr<cygnal::Buffer> buf;
+//    std::shared_ptr<cygnal::Buffer> buf;
 
     // If we have active disk streams, send those packets first.
     // 0 is a reserved stream, so we start with 1, as the reserved
@@ -1391,7 +1390,7 @@ rtmp_handler(Network::thread_params_t *args)
     for (int i=1; i <= hand->getActiveDiskStreams(); i++) {
 	hand->getDiskStream(i)->dump();
 	if (hand->getDiskStream(i)->getState() == DiskStream::PLAY) {
-	    boost::uint8_t *ptr = hand->getDiskStream(i)->get();
+	    std::uint8_t *ptr = hand->getDiskStream(i)->get();
 	    if (ptr) {
 		if (rtmp->sendMsg(hand->getClient(i), 8,
 			RTMP::HEADER_8, 4096,
@@ -1409,23 +1408,23 @@ rtmp_handler(Network::thread_params_t *args)
     do {
 	// If there is no data left from the previous chunk, process
 	// that before reading more data.
-	if (pkt != 0) {
+	if (pkt != nullptr) {
 	    log_network("data left from previous packet");
 	} else {
 	    pkt = rtmp->recvMsg(args->netfd);
 	}
 	
-	if (pkt != 0) {
-	    boost::uint8_t *tmpptr = 0;
+	if (pkt != nullptr) {
+	    std::uint8_t *tmpptr = nullptr;
 	    if (pkt->allocated()) {
-		boost::shared_ptr<RTMP::queues_t> que = rtmp->split(*pkt);
+		std::shared_ptr<RTMP::queues_t> que = rtmp->split(*pkt);
 		if (!que) {
 		    // FIXME: send _error result
 		    return false;
 		}
-		boost::shared_ptr<RTMP::rtmp_head_t> qhead;
+		std::shared_ptr<RTMP::rtmp_head_t> qhead;
 		for (size_t i=0; i<que->size(); i++) {
-		    boost::shared_ptr<cygnal::Buffer> bufptr = que->at(i)->pop();
+		    std::shared_ptr<cygnal::Buffer> bufptr = que->at(i)->pop();
 		    // que->at(i)->dump();
 		    if (bufptr) {
 			// bufptr->dump();
@@ -1437,7 +1436,7 @@ rtmp_handler(Network::thread_params_t *args)
 			tmpptr = bufptr->reference() + qhead->head_size;
 			if (qhead->channel == RTMP_SYSTEM_CHANNEL) {
 			    if (qhead->type == RTMP::USER) {
-				boost::shared_ptr<RTMP::user_event_t> user
+				std::shared_ptr<RTMP::user_event_t> user
 				    = rtmp->decodeUserControl(tmpptr);
 				switch (user->type) {
 				  case RTMP::STREAM_START:
@@ -1457,7 +1456,7 @@ rtmp_handler(Network::thread_params_t *args)
 				      break;
 				  case RTMP::STREAM_PING:
 				  {
-				      boost::shared_ptr<RTMP::rtmp_ping_t> ping
+				      std::shared_ptr<RTMP::rtmp_ping_t> ping
 					  = rtmp->decodePing(tmpptr);
 				      log_network("Processed Ping message from client, type %d",
 						  ping->type);
@@ -1547,8 +1546,8 @@ rtmp_handler(Network::thread_params_t *args)
 			      }
 			  } else if (body->getMethodName() == "play") {
 			      string filespec;
-			      boost::shared_ptr<gnash::RTMPMsg> nc = rtmp->getNetConnection();
-			      boost::shared_ptr<cygnal::Element> tcurl = nc->findProperty("tcUrl");
+			      std::shared_ptr<gnash::RTMPMsg> nc = rtmp->getNetConnection();
+			      std::shared_ptr<cygnal::Element> tcurl = nc->findProperty("tcUrl");
 			      URL url(tcurl->to_string());
 			      filespec += url.hostname() + url.path();
 			      filespec += '/';
@@ -1600,14 +1599,14 @@ rtmp_handler(Network::thread_params_t *args)
 			      if (rtmp->sendMsg(args->netfd, 6,
 					RTMP::HEADER_12, 0,
 					RTMP::AUDIO_DATA, RTMPMsg::FROM_SERVER,
-					0, 0)) {
+					nullptr, 0)) {
 			      }
 			      // Send an empty Video packet to get
 			      // things started.
 			      if (rtmp->sendMsg(args->netfd, 5,
 					RTMP::HEADER_12, 0,
 					RTMP::VIDEO_DATA, RTMPMsg::FROM_SERVER,
-					0, 0)) {
+					nullptr, 0)) {
 			      }
 			      sleep(1); // FIXME: debugging crap
 			      // Send the User Control - Stream Start
@@ -1618,7 +1617,7 @@ rtmp_handler(Network::thread_params_t *args)
 					*response)) {
 			      }			      
 			      int active_stream = hand->getActiveDiskStreams();
-			      boost::uint8_t *ptr = hand->getDiskStream(active_stream)->get();
+			      std::uint8_t *ptr = hand->getDiskStream(active_stream)->get();
 			      if (ptr) {
 				  log_network("Sending %s to client",
 					      hand->getDiskStream(active_stream)->getFilespec());
@@ -1650,7 +1649,7 @@ rtmp_handler(Network::thread_params_t *args)
 			      log_error(_("Received an _error message from the client!"));
 			  } else {
 			      /* size_t ret = */ hand->writeToPlugin(tmpptr, qhead->bodysize);
-			      boost::shared_ptr<cygnal::Buffer> result = hand->readFromPlugin();
+			      std::shared_ptr<cygnal::Buffer> result = hand->readFromPlugin();
 			      if (result) {
 				  if (rtmp->sendMsg(args->netfd, qhead->channel,
 						    RTMP::HEADER_8, result->allocated(),
@@ -1675,7 +1674,7 @@ rtmp_handler(Network::thread_params_t *args)
 
 		    // size_t ret = hand->writeToPlugin(tmpptr, qhead->bodysize);
 #if 0
-		    boost::shared_ptr<cygnal::Buffer> result = hand->readFromPlugin();
+		    std::shared_ptr<cygnal::Buffer> result = hand->readFromPlugin();
  		    if (result) { // FIXME: this needs a real channel number
 			if (rtmp->sendMsg(args->netfd, 0x3, RTMP::HEADER_8, ret,
 					  RTMP::INVOKE, RTMPMsg::FROM_SERVER, *result)) {
@@ -1694,7 +1693,7 @@ rtmp_handler(Network::thread_params_t *args)
 		log_network("Never read any data from fd #%d", args->netfd);
 #if 0
 		// Send a ping to reset the new stream
-		boost::shared_ptr<cygnal::Buffer> ping_reset =
+		std::shared_ptr<cygnal::Buffer> ping_reset =
 		    rtmp->encodePing(RTMP::PING_CLEAR, 0);
 		if (rtmp->sendMsg(args->netfd, RTMP_SYSTEM_CHANNEL,
 			  RTMP::HEADER_12, ping_reset->size(),
diff --git a/cygnal/rtmp_server.h b/cygnal/rtmp_server.h
index 362c1e9..647d0a3 100644
--- a/cygnal/rtmp_server.h
+++ b/cygnal/rtmp_server.h
@@ -20,9 +20,8 @@
 #define _RTMP_SERVER_H_
 
 #include <vector>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/array.hpp>
+#include <cstdint>
+#include <array>
 #include <string>
 #include <map>
 
@@ -56,37 +55,37 @@ public:
     ///     INVOKE operation of ::connect(). serverFinish() is
     ///     actually used to extract the AMF data from the packet, and
     ///     handShakeResponse() is used to construct the response packet.
-    boost::shared_ptr<cygnal::Element> processClientHandShake(int fd);
+    std::shared_ptr<cygnal::Element> processClientHandShake(int fd);
 
     bool packetSend(cygnal::Buffer &buf);
     bool packetRead(cygnal::Buffer &buf);
     
     // These are handlers for the various types
-    boost::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status);
-    boost::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename);
-    boost::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename, double &transid);
-    boost::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status, double &transid);
-    boost::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename, double &transid, double &clientid);
+    std::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status);
+    std::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename);
+    std::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename, double &transid);
+    std::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status, double &transid);
+    std::shared_ptr<cygnal::Buffer> encodeResult(gnash::RTMPMsg::rtmp_status_e status, const std::string &filename, double &transid, double &clientid);
 
     // Encode a Ping for the client
-    boost::shared_ptr<cygnal::Buffer> encodePing(rtmp_ping_e type, boost::uint32_t milliseconds);
-    boost::shared_ptr<cygnal::Buffer> encodePing(rtmp_ping_e type);
-    // boost::shared_ptr<cygnal::Buffer> encodeUser(user_control_e type, boost::uint32_t milliseconds);
-    boost::shared_ptr<cygnal::Buffer> encodeAudio(boost::uint8_t *data, size_t size);
-    boost::shared_ptr<cygnal::Buffer> encodeVideo(boost::uint8_t *data, size_t size);
+    std::shared_ptr<cygnal::Buffer> encodePing(rtmp_ping_e type, std::uint32_t milliseconds);
+    std::shared_ptr<cygnal::Buffer> encodePing(rtmp_ping_e type);
+    // std::shared_ptr<cygnal::Buffer> encodeUser(user_control_e type, std::uint32_t milliseconds);
+    std::shared_ptr<cygnal::Buffer> encodeAudio(std::uint8_t *data, size_t size);
+    std::shared_ptr<cygnal::Buffer> encodeVideo(std::uint8_t *data, size_t size);
 
     // Encode a onBWDone message for the client
-    boost::shared_ptr<cygnal::Buffer> encodeBWDone(double id);
+    std::shared_ptr<cygnal::Buffer> encodeBWDone(double id);
 
     // Parse an Echo Request message coming from the Red5 echo_test.
-    std::vector<boost::shared_ptr<cygnal::Element > > parseEchoRequest(cygnal::Buffer &buf) { return parseEchoRequest(buf.reference(), buf.size()); };
-    std::vector<boost::shared_ptr<cygnal::Element > > parseEchoRequest(boost::uint8_t *buf, size_t size);
+    std::vector<std::shared_ptr<cygnal::Element > > parseEchoRequest(cygnal::Buffer &buf) { return parseEchoRequest(buf.reference(), buf.size()); };
+    std::vector<std::shared_ptr<cygnal::Element > > parseEchoRequest(std::uint8_t *buf, size_t size);
     // format a response to the 'echo' test used for testing Gnash.
-    boost::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, cygnal::Element &el);
-    boost::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, cygnal::Buffer &data);
-    boost::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, boost::uint8_t *data, size_t size);    
-    void addReference(boost::uint16_t index, cygnal::Element &el) { _references[index] = el; };
-    cygnal::Element &getReference(boost::uint16_t index) { return _references[index]; };
+    std::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, cygnal::Element &el);
+    std::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, cygnal::Buffer &data);
+    std::shared_ptr<cygnal::Buffer> formatEchoResponse(double num, std::uint8_t *data, size_t size);
+    void addReference(std::uint16_t index, cygnal::Element &el) { _references[index] = el; };
+    cygnal::Element &getReference(std::uint16_t index) { return _references[index]; };
 
     bool sendFile(int fd, const std::string &filespec);
 
@@ -103,13 +102,13 @@ public:
     void setStreamID(double id) { _streamid = id; };
     double getStreamID() { return _streamid; };
 
-    size_t sendToClient(std::vector<int> &fds, boost::uint8_t *data,
+    size_t sendToClient(std::vector<int> &fds, std::uint8_t *data,
 			size_t size);
     size_t sendToClient(std::vector<int> &fds,cygnal::Buffer &data);
 
     void setNetConnection(gnash::RTMPMsg *msg) { _netconnect.reset(msg); };
-    void setNetConnection(boost::shared_ptr<gnash::RTMPMsg> msg) { _netconnect = msg; };
-    boost::shared_ptr<gnash::RTMPMsg> getNetConnection() { return _netconnect;};
+    void setNetConnection(std::shared_ptr<gnash::RTMPMsg> msg) { _netconnect = msg; };
+    std::shared_ptr<gnash::RTMPMsg> getNetConnection() { return _netconnect;};
     void dump();
 
 private:
@@ -117,7 +116,7 @@ private:
     ///     This is only called by processClientHandshake() to compare
     ///     the handshakes to make sure they match, and to extract the
     ///     initial AMF data from packet.
-    boost::shared_ptr<cygnal::Buffer> serverFinish(int fd,
+    std::shared_ptr<cygnal::Buffer> serverFinish(int fd,
 			cygnal::Buffer &handshake1, cygnal::Buffer &handshake2);
     /// \method handShakeResponse
     ///     This is only called by processClientHandshake() to
@@ -133,12 +132,12 @@ private:
     gnash::DiskStream::filetype_e  _filetype;
     std::string		_docroot;
     std::string		_filespec;
-    boost::uint32_t     _filesize;
-    std::map<boost::uint16_t, cygnal::Element> _references;
+    std::uint32_t     _filesize;
+    std::map<std::uint16_t, cygnal::Element> _references;
 #ifdef CLIENT_ID_NUMERIC
     std::array<double>	_clientids;
 #else
-    boost::array<std::string, 1000>	_clientids;
+    std::array<std::string, 1000>	_clientids;
 #endif
     double		_streamid;
     /// \var _netconnect
@@ -146,7 +145,7 @@ private:
     ///    object we get as the final part of the handshake process
     ///    that is used to set up the connection. This has all the
     ///    file paths and other information needed by the server.
-    boost::shared_ptr<gnash::RTMPMsg>	_netconnect;
+    std::shared_ptr<gnash::RTMPMsg>	_netconnect;
 };
 
 // This is the thread for all incoming RTMP connections
diff --git a/cygnal/serverSO.cpp b/cygnal/serverSO.cpp
index ff3c48d..53b8ba5 100644
--- a/cygnal/serverSO.cpp
+++ b/cygnal/serverSO.cpp
@@ -32,7 +32,7 @@
 #endif
 
 #include <sys/types.h>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include <cctype>  // for toupper
 #include <string>
diff --git a/cygnal/testsuite/cygnal.all/Makefile.am b/cygnal/testsuite/cygnal.all/Makefile.am
index 3950d6c..a6d1dd5 100644
--- a/cygnal/testsuite/cygnal.all/Makefile.am
+++ b/cygnal/testsuite/cygnal.all/Makefile.am
@@ -28,8 +28,6 @@ libcygnal_la_SOURCES = \
 libcygnal_la_LDFLAGS = \
 	$(top_builddir)/cygnal/libamf/libgnashamf.la
 
-AM_CPPFLAGS = # -Wall
-
 AM_LDFLAGS = \
 	$(top_builddir)/libbase/libgnashbase.la \
 	$(top_builddir)/cygnal/libamf/libgnashamf.la \
@@ -40,7 +38,7 @@ AM_LDFLAGS = \
 
 localedir = $(datadir)/locale
 
-INCLUDES = \
+AM_CPPFLAGS = \
         -I$(top_srcdir)/cygnal/libamf \
         -I$(top_srcdir)/cygnal/libnet \
         -I$(top_srcdir)/libbase \
diff --git a/cygnal/testsuite/libamf.all/Makefile.am b/cygnal/testsuite/libamf.all/Makefile.am
index 2318ad2..2a0dd9e 100644
--- a/cygnal/testsuite/libamf.all/Makefile.am
+++ b/cygnal/testsuite/libamf.all/Makefile.am
@@ -30,14 +30,13 @@ AM_LDFLAGS = \
 	$(DEJAGNU_CFLAGS) \
 	$(NULL)
 
-AM_CPPFLAGS = -DSRCDIR=\"$(srcdir)\"
-
-INCLUDES = \
+AM_CPPFLAGS = \
         -I$(top_srcdir)/cygnal/libamf \
         -I$(top_srcdir)/cygnal/libnet \
         -I$(top_srcdir)/libbase \
         -I$(top_srcdir)/libcore \
 	-I$(top_srcdir)/testsuite \
+	-DSRCDIR=\"$(srcdir)\" \
 	$(CURL_CFLAGS) \
 	$(BOOST_CFLAGS) \
 	$(DEJAGNU_CFLAGS) \
diff --git a/cygnal/testsuite/libamf.all/test_amf.cpp b/cygnal/testsuite/libamf.all/test_amf.cpp
index 7ebf1be..5dea56f 100644
--- a/cygnal/testsuite/libamf.all/test_amf.cpp
+++ b/cygnal/testsuite/libamf.all/test_amf.cpp
@@ -31,7 +31,6 @@
 #include <log.h>
 #include <iostream>
 #include <string>
-#include <boost/shared_ptr.hpp>
 #include "GnashException.h"
 #include "check.h"
 //#include "dejagnu.h"
@@ -161,7 +160,7 @@ void
 test_encoding()
 {
     // This is a 8 byte wide double data type in hex
-    boost::shared_ptr<Buffer> buf1(new Buffer("40 83 38 00 00 00 00 00"));
+    std::shared_ptr<Buffer> buf1(new Buffer("40 83 38 00 00 00 00 00"));
     double num = *(reinterpret_cast<double *>(buf1->reference()));
     swapBytes(&num, cygnal::AMF0_NUMBER_SIZE); // we always encode in big endian format
 
@@ -170,7 +169,7 @@ test_encoding()
         mem->addStats(__LINE__);             // take a sample
     }
 #endif    
-    boost::shared_ptr<Buffer> encnum = cygnal::AMF::encodeNumber(num);
+    std::shared_ptr<Buffer> encnum = cygnal::AMF::encodeNumber(num);
     // A number cygnal::AMF object has only one header byte, which is the type field.
 #if defined(HAVE_MALLINFO) && defined(USE_STATS_MEMORY)
     if (memdebug) {
@@ -188,15 +187,15 @@ test_encoding()
     // it's actually a two byte short instead.
     {
         bool flag = true;
-        boost::shared_ptr<Buffer> buf2(new Buffer("01 01"));
-        boost::uint16_t sht = *(boost::uint16_t *)buf2->reference();
-        swapBytes(&sht, sizeof(boost::uint16_t)); // we always encode in big endian format
+        std::shared_ptr<Buffer> buf2(new Buffer("01 01"));
+        std::uint16_t sht = *(std::uint16_t *)buf2->reference();
+        swapBytes(&sht, sizeof(std::uint16_t)); // we always encode in big endian format
 #if defined(HAVE_MALLINFO) && defined(USE_STATS_MEMORY)
         if (memdebug) {
             mem->addStats(__LINE__);             // take a sample
         }
 #endif
-        boost::shared_ptr<Buffer> encbool = cygnal::AMF::encodeBoolean(flag);
+        std::shared_ptr<Buffer> encbool = cygnal::AMF::encodeBoolean(flag);
 #if defined(HAVE_MALLINFO) && defined(USE_STATS_MEMORY)
         if (memdebug) {
             mem->addStats(__LINE__);             // take a sample
@@ -208,7 +207,7 @@ test_encoding()
         // which are finally only one byte apiece.
         if ((*encbool->reference() == Element::BOOLEAN_AMF0) &&
             (encbool->size() == 2) &&
-            (memcmp(buf2->reference(), encbool->reference(), sizeof(boost::uint16_t)) == 0)) {
+            (memcmp(buf2->reference(), encbool->reference(), sizeof(std::uint16_t)) == 0)) {
             runtest.pass("Encoded cygnal::AMF Boolean");
         } else {
             runtest.fail("Encoded cygnal::AMF Boolean");
@@ -223,7 +222,7 @@ test_encoding()
             mem->addStats(__LINE__);             // take a sample
         }
 #endif
-        boost::shared_ptr<Buffer> buf = cygnal::AMF::encodeString(str);
+        std::shared_ptr<Buffer> buf = cygnal::AMF::encodeString(str);
 #if defined(HAVE_MALLINFO) && defined(USE_STATS_MEMORY)
         if (memdebug) {
             mem->addStats(__LINE__);             // take a sample
@@ -250,13 +249,13 @@ test_encoding()
             mem->addStats(__LINE__);             // take a sample
         }
 #endif
-        boost::shared_ptr<Buffer> buf = cygnal::AMF::encodeNullString();
+        std::shared_ptr<Buffer> buf = cygnal::AMF::encodeNullString();
 #if defined(HAVE_MALLINFO) && defined(USE_STATS_MEMORY)
         if (memdebug) {
             mem->addStats(__LINE__);             // take a sample
         }
 #endif
-        boost::uint16_t len = *(boost::uint16_t *)(buf->reference() + 1);
+        std::uint16_t len = *(std::uint16_t *)(buf->reference() + 1);
 
         // A NULL String cygnal::AMF object has just 3 bytes, the type, and a two byte length, which is zero.
         check_equals(*buf->reference(), Element::STRING_AMF0);
@@ -266,7 +265,7 @@ test_encoding()
         Element el;
         el.makeNullString();
         buf = cygnal::AMF::encodeElement(el);
-        len = *(boost::uint16_t *)(buf->reference() + 1);
+        len = *(std::uint16_t *)(buf->reference() + 1);
 
         // A NULL String cygnal::AMF object has just 3 bytes, the type, and a two byte length, which is zero.
         check_equals(*buf->reference(), Element::STRING_AMF0);
@@ -276,7 +275,7 @@ test_encoding()
 
     cygnal::AMF amf;
     Element el1;
-    boost::uint16_t index = 1;
+    std::uint16_t index = 1;
     el1.makeReference(index);
     if (el1.to_short() == 1) {
         runtest.pass("Made Reference");
@@ -284,7 +283,7 @@ test_encoding()
         runtest.fail("Made Reference");
     }    
 
-    boost::shared_ptr<cygnal::Buffer> buf2 = amf.encodeElement(el1);
+    std::shared_ptr<cygnal::Buffer> buf2 = amf.encodeElement(el1);
     if ((*buf2->reference() == Element::REFERENCE_AMF0)
         && (*(buf2->reference() + 1) == 0)
         && (*(buf2->reference() + 2) == 1)) {
@@ -293,8 +292,8 @@ test_encoding()
         runtest.fail("Encoded Reference");
     }    
 
-    boost::shared_ptr<Buffer> buf3(new Buffer("07 00 01"));
-    boost::shared_ptr<cygnal::Element> el3 = amf.extractAMF(buf3);
+    std::shared_ptr<Buffer> buf3(new Buffer("07 00 01"));
+    std::shared_ptr<cygnal::Element> el3 = amf.extractAMF(buf3);
     if ((el3->getType() == Element::REFERENCE_AMF0)
         && (el3->to_short() == 1)) {
         runtest.pass("Extracted Reference");
@@ -311,8 +310,8 @@ test_array()
     cygnal::AMF amf;
     top.makeObject();
 
-    boost::shared_ptr<Buffer> hex1(new Buffer("08 00 00 00 0a 00 08 64 75 72 61 74 69 6f 6e 00 40 ad 04 14 7a e1 47 ae 00 05 77 69 64 74 68 00 40 74 00 00 00 00 00 00 00 06 68 65 69 67 68 74 00 40 6e 00 00 00 00 00 00 00 0d 76 69 64 65 6f 64 61 74 61 72 61 74 65 00 40 72 c0 00 00 00 00 00 00 09 66 72 61 6d 65 72 61 74 65 00 40 39 00 00 00 00 00 00 00 0c 76 69 64 65 6f 63 6f 64 65 63 69 64 00 40 10 00 00 00 00 00 00 00 0d 61 75 64 69 6f 64 61 74 61 72 61 74 65 00 40 58 00 00 00 00 00 00 00 0a 61 75 64 69 6f 64 65 6c 61 79 00 3f a3 74 bc 6a 7e f9 db 00 0c 61 75 64 69 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 63 61 6e 53 65 65 6b 54 6f 45 6e 64 01 01 00 00 09"));
-    boost::shared_ptr<cygnal::Element> el1 = amf.extractAMF(hex1);
+    std::shared_ptr<Buffer> hex1(new Buffer("08 00 00 00 0a 00 08 64 75 72 61 74 69 6f 6e 00 40 ad 04 14 7a e1 47 ae 00 05 77 69 64 74 68 00 40 74 00 00 00 00 00 00 00 06 68 65 69 67 68 74 00 40 6e 00 00 00 00 00 00 00 0d 76 69 64 65 6f 64 61 74 61 72 61 74 65 00 40 72 c0 00 00 00 00 00 00 09 66 72 61 6d 65 72 61 74 65 00 40 39 00 00 00 00 00 00 00 0c 76 69 64 65 6f 63 6f 64 65 63 69 64 00 40 10 00 00 00 00 00 00 00 0d 61 75 64 69 6f 64 61 74 61 72 61 74 65 00 40 58 00 00 00 00 00 00 00 0a 61 75 64 69 6f 64 65 6c 61 79 00 3f a3 74 bc 6a 7e f9 db 00 0c 61 75 64 69 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 63 61 6e 53 65 65 6b 54 6f 45 6e 64 01 01 00 00 09"));
+    std::shared_ptr<cygnal::Element> el1 = amf.extractAMF(hex1);
     if ((el1->getType() == Element::ECMA_ARRAY_AMF0)
         && (el1->propertySize() == 10)) {
         runtest.pass("Extracted ECMA Array");
@@ -320,8 +319,8 @@ test_array()
         runtest.fail("Extracted ECMA Array");
     }
 
-    boost::shared_ptr<Buffer> hex2(new Buffer("0a 00 00 00 c8 00 3f a4 7a e1 47 ae 14 7b 00 40 03 d7 0a 3d 70 a3 d7 00 40 13 85 1e b8 51 eb 85 00 40 1d 1e b8 51 eb 85 1f 00 40 23 5c 28 f5 c2 8f 5c 00 40 28 28 f5 c2 8f 5c 29 00 40 2c f5 c2 8f 5c 28 f6 00 40 30 e1 47 ae 14 7a e1 00 40 33 47 ae 14 7a e1 48 00 40 35 ae 14 7a e1 47 ae 00 40 38 14 7a e1 47 ae 14 00 40 3a 7a e1 47 ae 14 7b 00 40 3c e1 47 ae 14 7a e1 00 40 3f 47 ae 14 7a e1 48 00 40 40 d7 0a 3d 70 a3 d7 00 40 42 0a 3d 70 a3 d7 0a 00 40 43 3d 70 a3 d7 0a 3d 00 40 44 70 a3 d7 0a 3d 71 00 40 45 a3 d7 0a 3d 70 a4 00 40 46 d7 0a 3d 70 a3 d7 00 40 48 0a 3d 70 a3 d7 0a 00 40 49 3d 70 a3 d7 0a 3d 00 40 4a 70 a3 d7 0a 3d 71 00 40 4b a3 d7 0a 3d 70 a4 00 40 4c d7 0a 3d 70 a3 d7 00 40 4e 0a 3d 70 a3 d7 0a 00 40 4f 3d 70 a3 d7 0a 3d 00 40 50 38 51 eb 85 1e b8 00 40 50 d1 eb 85 1e b8 52 00 40 51 6b 85 1e b8 51 ec 00 40 52 05 1e b8 51 eb 85 00 40 52 9e b8 51 eb 85 1f 00 40 53 38 51 eb 85 1e b8 00 40 53 d1 eb 85 1e b8 52 00 40 54 6b 85 1e b8 51 ec 00 40 55 05 1e b8 51 eb 85 00 40 55 9e b8 51 eb 85 1f 00 40 56 38 51 eb 85 1e b8 00 40 56 d1 eb 85 1e b8 52 00 40 57 6b 85 1e b8 51 ec 00 40 58 05 1e b8 51 eb 85 00 40 58 9e b8 51 eb 85 1f 00 40 59 38 51 eb 85 1e b8 00 40 59 d1 eb 85 1e b8 52 00 40 5a 6b 85 1e b8 51 ec 00 40 5b 05 1e b8 51 eb 85 00 40 5b 9e b8 51 eb 85 1f 00 40 5c 38 51 eb 85 1e b8 00 40 5c d1 eb 85 1e b8 52 00 40 5d 6b 85 1e b8 51 ec 00 40 5e 05 1e b8 51 eb 85 00 40 5e 9e b8 51 eb 85 1f 00 40 5f 38 51 eb 85 1e b8 00 40 5f d1 eb 85 1e b8 52 00 40 60 35 c2 8f 5c 28 f6 00 40 60 82 8f 5c 28 f5 c3 00 40 60 cf 5c 28 f5 c2 8f 00 40 61 1c 28 f5 c2 8f 5c 00 40 61 68 f5 c2 8f 5c 29 00 40 61 b5 c2 8f 5c 28 f6 00 40 62 02 8f 5c 28 f5 c3 00 40 62 4f 5c 28 f5 c2 8f 00 40 62 9c 28 f5 c2 8f 5c 00 40 62 e8 f5 c2 8f 5c 29 00 40 63 35 c2 8f 5c 28 f6 00 40 63 82 8f 5c 28 f5 c3 00 40 63 cf 5c 28 f5 c2 8f 00 40 64 1c 28 f5 c2 8f 5c 00 40 64 68 f5 c2 8f 5c 29 00 40 64 b5 c2 8f 5c 28 f6 00 40 65 02 8f 5c 28 f5 c3 00 40 65 4f 5c 28 f5 c2 8f 00 40 65 9c 28 f5 c2 8f 5c 00 40 65 e8 f5 c2 8f 5c 29 00 40 66 35 c2 8f 5c 28 f6 00 40 66 82 8f 5c 28 f5 c3 00 40 66 cf 5c 28 f5 c2 8f 00 40 67 1c 28 f5 c2 8f 5c 00 40 67 68 f5 c2 8f 5c 29 00 40 67 b5 c2 8f 5c 28 f6 00 40 68 02 8f 5c 28 f5 c3 00 40 68 4f 5c 28 f5 c2 8f 00 40 68 9c 28 f5 c2 8f 5c 00 40 68 e8 f5 c2 8f 5c 29 00 40 69 35 c2 8f 5c 28 f6 00 40 69 82 8f 5c 28 f5 c3 00 40 69 cf 5c 28 f5 c2 8f 00 40 6a 1c 28 f5 c2 8f 5c 00 40 6a 68 f5 c2 8f 5c 29 00 40 6a b5 c2 8f 5c 28 f6 00 40 6b 02 8f 5c 28 f5 c3 00 40 6b 4f 5c 28 f5 c2 8f 00 40 6b 9c 28 f5 c2 8f 5c 00 40 6b e8 f5 c2 8f 5c 29 00 40 6c 35 c2 8f 5c 28 f6 00 40 6c 82 8f 5c 28 f5 c3 00 40 6c cf 5c 28 f5 c2 8f 00 40 6d 1c 28 f5 c2 8f 5c 00 40 6d 68 f5 c2 8f 5c 29 00 40 6d b5 c2 8f 5c 28 f6 00 40 6e 02 8f 5c 28 f5 c3 00 40 6e 4f 5c 28 f5 c2 8f 00 40 6e 9c 28 f5 c2 8f 5c 00 40 6e e8 f5 c2 8f 5c 29 00 40 6f 35 c2 8f 5c 28 f6 00 40 6f 82 8f 5c 28 f5 c3 00 40 6f cf 5c 28 f5 c2 8f 00 40 70 0e 14 7a e1 47 ae 00 40 70 34 7a e1 47 ae 14 00 40 70 5a e1 47 ae 14 7b 00 40 70 81 47 ae 14 7a e1 00 40 70 a7 ae 14 7a e1 48 00 40 70 ce 14 7a e1 47 ae 00 40 70 f4 7a e1 47 ae 14 00 40 71 1a e1 47 ae 14 7b 00 40 71 41 47 ae 14 7a e1 00 40 71 67 ae 14 7a e1 48 00 40 71 8e 14 7a e1 47 ae 00 40 71 b4 7a e1 47 ae 14 00 40 71 da e1 47 ae 14 7b 00 40 72 01 47 ae 14 7a e1 00 40 72 27 ae 14 7a e1 48 00 40 72 4e 14 7a e1 47 ae 00 40 72 74 7a e1 47 ae 14 00 40 72 9a e1 47 ae 14 7b 00 40 72 c1 47 ae 14 7a e1 00 40 72 e7 ae 14 7a e1 48 00 40 73 0e 14 7a e1 47 ae 00 40 73 34 7a e1 47 ae 14 00 40 73 5a e1 47 ae 14 7b 00 40 73 81 47 ae 14 7a e1 00 40 73 a7 ae 14 7a e1 48 00 40 73 ce 14 7a e1 47 ae 00 40 73 f4 7a e1 47 ae 14 00 40 74 1a e1 47 ae 14 7b 00 40 74 41 47 ae 14 7a e1 00 40 74 67 ae 14 7a e1 48 00 40 74 8e 14 7a e1 47 ae 00 40 74 b4 7a e1 47 ae 14 00 40 74 da e1 47 ae 14 7b 00 40 75 01 47 ae 14 7a e1 00 40 75 27 ae 14 7a e1 48 00 40 75 4e 14 7a e1 47 ae 00 40 75 74 7a e1 47 ae 14 00 40 75 9a e1 47 ae 14 7b 00 40 75 c1 47 ae 14 7a e1 00 40 75 e7 ae 14 7a e1 48 00 40 76 0e 14 7a e1 47 ae 00 40 76 34 7a e1 47 ae 14 00 40 76 5a e1 47 ae 14 7b 00 40 76 81 47 ae 14 7a e1 00 40 76 a7 ae 14 7a e1 48 00 40 76 ce 14 7a e1 47 ae 00 40 76 f4 7a e1 47 ae 14 00 40 77 1a e1 47 ae 14 7b 00 40 77 41 47 ae 14 7a e1 00 40 77 67 ae 14 7a e1 48 00 40 77 8e 14 7a e1 47 ae 00 40 77 b4 7a e1 47 ae 14 00 40 77 da e1 47 ae 14 7b 00 40 78 01 47 ae 14 7a e1 00 40 78 27 ae 14 7a e1 48 00 40 78 4e 14 7a e1 47 ae 00 40 78 74 7a e1 47 ae 14 00 40 78 9a e1 47 ae 14 7b 00 40 78 c1 47 ae 14 7a e1 00 40 78 e7 ae 14 7a e1 48 00 40 79 0e 14 7a e1 47 ae 00 40 79 34 7a e1 47 ae 14 00 40 79 5a e1 47 ae 14 7b 00 40 79 81 47 ae 14 7a e1 00 40 79 a7 ae 14 7a e1 48 00 40 79 ce 14 7a e1 47 ae 00 40 79 f4 7a e1 47 ae 14 00 40 7a 1a e1 47 ae 14 7b 00 40 7a 41 47 ae 14 7a e1 00 40 7a 67 ae 14 7a e1 48 00 40 7a 8e 14 7a e1 47 ae 00 40 7a b4 7a e1 47 ae 14 00 40 7a da e1 47 ae 14 7b 00 40 7b 01 47 ae 14 7a e1 00 40 7b 27 ae 14 7a e1 48 00 40 7b 4e 14 7a e1 47 ae 00 40 7b 74 7a e1 47 ae 14 00 40 7b 9a e1 47 ae 14 7b 00 40 7b c1 47 ae 14 7a e1 00 40 7b e7 ae 14 7a e1 48 00 40 7c 0e 14 7a e1 47 ae 00 40 7c 34 7a e1 47 ae 14 00 40 7c 5a e1 47 ae 14 7b 00 40 7c 81 47 ae 14 7a e1 00 40 7c a7 ae 14 7a e1 48 00 40 7c ce 14 7a e1 47 ae 00 40 7c f4 7a e1 47 ae 14 00 40 7d 1a e1 47 ae 14 7b 00 40 7d 41 47 ae 14 7a e1 00 40 7d 67 ae 14 7a e1 48 00 40 7d 82 8f 5c 28 f5 c3 00 40 7d 83 33 33 33 33 33 00 40 7d a9 99 99 99 99 9a"));
-    boost::shared_ptr<cygnal::Element> el2 = amf.extractAMF(hex2);
+    std::shared_ptr<Buffer> hex2(new Buffer("0a 00 00 00 c8 00 3f a4 7a e1 47 ae 14 7b 00 40 03 d7 0a 3d 70 a3 d7 00 40 13 85 1e b8 51 eb 85 00 40 1d 1e b8 51 eb 85 1f 00 40 23 5c 28 f5 c2 8f 5c 00 40 28 28 f5 c2 8f 5c 29 00 40 2c f5 c2 8f 5c 28 f6 00 40 30 e1 47 ae 14 7a e1 00 40 33 47 ae 14 7a e1 48 00 40 35 ae 14 7a e1 47 ae 00 40 38 14 7a e1 47 ae 14 00 40 3a 7a e1 47 ae 14 7b 00 40 3c e1 47 ae 14 7a e1 00 40 3f 47 ae 14 7a e1 48 00 40 40 d7 0a 3d 70 a3 d7 00 40 42 0a 3d 70 a3 d7 0a 00 40 43 3d 70 a3 d7 0a 3d 00 40 44 70 a3 d7 0a 3d 71 00 40 45 a3 d7 0a 3d 70 a4 00 40 46 d7 0a 3d 70 a3 d7 00 40 48 0a 3d 70 a3 d7 0a 00 40 49 3d 70 a3 d7 0a 3d 00 40 4a 70 a3 d7 0a 3d 71 00 40 4b a3 d7 0a 3d 70 a4 00 40 4c d7 0a 3d 70 a3 d7 00 40 4e 0a 3d 70 a3 d7 0a 00 40 4f 3d 70 a3 d7 0a 3d 00 40 50 38 51 eb 85 1e b8 00 40 50 d1 eb 85 1e b8 52 00 40 51 6b 85 1e b8 51 ec 00 40 52 05 1e b8 51 eb 85 00 40 52 9e b8 51 eb 85 1f 00 40 53 38 51 eb 85 1e b8 00 40 53 d1 eb 85 1e b8 52 00 40 54 6b 85 1e b8 51 ec 00 40 55 05 1e b8 51 eb 85 00 40 55 9e b8 51 eb 85 1f 00 40 56 38 51 eb 85 1e b8 00 40 56 d1 eb 85 1e b8 52 00 40 57 6b 85 1e b8 51 ec 00 40 58 05 1e b8 51 eb 85 00 40 58 9e b8 51 eb 85 1f 00 40 59 38 51 eb 85 1e b8 00 40 59 d1 eb 85 1e b8 52 00 40 5a 6b 85 1e b8 51 ec 00 40 5b 05 1e b8 51 eb 85 00 40 5b 9e b8 51 eb 85 1f 00 40 5c 38 51 eb 85 1e b8 00 40 5c d1 eb 85 1e b8 52 00 40 5d 6b 85 1e b8 51 ec 00 40 5e 05 1e b8 51 eb 85 00 40 5e 9e b8 51 eb 85 1f 00 40 5f 38 51 eb 85 1e b8 00 40 5f d1 eb 85 1e b8 52 00 40 60 35 c2 8f 5c 28 f6 00 40 60 82 8f 5c 28 f5 c3 00 40 60 cf 5c 28 f5 c2 8f 00 40 61 1c 28 f5 c2 8f 5c 00 40 61 68 f5 c2 8f 5c 29 00 40 61 b5 c2 8f 5c 28 f6 00 40 62 02 8f 5c 28 f5 c3 00 40 62 4f 5c 28 f5 c2 8f 00 40 62 9c 28 f5 c2 8f 5c 00 40 62 e8 f5 c2 8f 5c 29 00 40 63 35 c2 8f 5c 28 f6 00 40 63 82 8f 5c 28 f5 c3 00 40 63 cf 5c 28 f5 c2 8f 00 40 64 1c 28 f5 c2 8f 5c 00 40 64 68 f5 c2 8f 5c 29 00 40 64 b5 c2 8f 5c 28 f6 00 40 65 02 8f 5c 28 f5 c3 00 40 65 4f 5c 28 f5 c2 8f 00 40 65 9c 28 f5 c2 8f 5c 00 40 65 e8 f5 c2 8f 5c 29 00 40 66 35 c2 8f 5c 28 f6 00 40 66 82 8f 5c 28 f5 c3 00 40 66 cf 5c 28 f5 c2 8f 00 40 67 1c 28 f5 c2 8f 5c 00 40 67 68 f5 c2 8f 5c 29 00 40 67 b5 c2 8f 5c 28 f6 00 40 68 02 8f 5c 28 f5 c3 00 40 68 4f 5c 28 f5 c2 8f 00 40 68 9c 28 f5 c2 8f 5c 00 40 68 e8 f5 c2 8f 5c 29 00 40 69 35 c2 8f 5c 28 f6 00 40 69 82 8f 5c 28 f5 c3 00 40 69 cf 5c 28 f5 c2 8f 00 40 6a 1c 28 f5 c2 8f 5c 00 40 6a 68 f5 c2 8f 5c 29 00 40 6a b5 c2 8f 5c 28 f6 00 40 6b 02 8f 5c 28 f5 c3 00 40 6b 4f 5c 28 f5 c2 8f 00 40 6b 9c 28 f5 c2 8f 5c 00 40 6b e8 f5 c2 8f 5c 29 00 40 6c 35 c2 8f 5c 28 f6 00 40 6c 82 8f 5c 28 f5 c3 00 40 6c cf 5c 28 f5 c2 8f 00 40 6d 1c 28 f5 c2 8f 5c 00 40 6d 68 f5 c2 8f 5c 29 00 40 6d b5 c2 8f 5c 28 f6 00 40 6e 02 8f 5c 28 f5 c3 00 40 6e 4f 5c 28 f5 c2 8f 00 40 6e 9c 28 f5 c2 8f 5c 00 40 6e e8 f5 c2 8f 5c 29 00 40 6f 35 c2 8f 5c 28 f6 00 40 6f 82 8f 5c 28 f5 c3 00 40 6f cf 5c 28 f5 c2 8f 00 40 70 0e 14 7a e1 47 ae 00 40 70 34 7a e1 47 ae 14 00 40 70 5a e1 47 ae 14 7b 00 40 70 81 47 ae 14 7a e1 00 40 70 a7 ae 14 7a e1 48 00 40 70 ce 14 7a e1 47 ae 00 40 70 f4 7a e1 47 ae 14 00 40 71 1a e1 47 ae 14 7b 00 40 71 41 47 ae 14 7a e1 00 40 71 67 ae 14 7a e1 48 00 40 71 8e 14 7a e1 47 ae 00 40 71 b4 7a e1 47 ae 14 00 40 71 da e1 47 ae 14 7b 00 40 72 01 47 ae 14 7a e1 00 40 72 27 ae 14 7a e1 48 00 40 72 4e 14 7a e1 47 ae 00 40 72 74 7a e1 47 ae 14 00 40 72 9a e1 47 ae 14 7b 00 40 72 c1 47 ae 14 7a e1 00 40 72 e7 ae 14 7a e1 48 00 40 73 0e 14 7a e1 47 ae 00 40 73 34 7a e1 47 ae 14 00 40 73 5a e1 47 ae 14 7b 00 40 73 81 47 ae 14 7a e1 00 40 73 a7 ae 14 7a e1 48 00 40 73 ce 14 7a e1 47 ae 00 40 73 f4 7a e1 47 ae 14 00 40 74 1a e1 47 ae 14 7b 00 40 74 41 47 ae 14 7a e1 00 40 74 67 ae 14 7a e1 48 00 40 74 8e 14 7a e1 47 ae 00 40 74 b4 7a e1 47 ae 14 00 40 74 da e1 47 ae 14 7b 00 40 75 01 47 ae 14 7a e1 00 40 75 27 ae 14 7a e1 48 00 40 75 4e 14 7a e1 47 ae 00 40 75 74 7a e1 47 ae 14 00 40 75 9a e1 47 ae 14 7b 00 40 75 c1 47 ae 14 7a e1 00 40 75 e7 ae 14 7a e1 48 00 40 76 0e 14 7a e1 47 ae 00 40 76 34 7a e1 47 ae 14 00 40 76 5a e1 47 ae 14 7b 00 40 76 81 47 ae 14 7a e1 00 40 76 a7 ae 14 7a e1 48 00 40 76 ce 14 7a e1 47 ae 00 40 76 f4 7a e1 47 ae 14 00 40 77 1a e1 47 ae 14 7b 00 40 77 41 47 ae 14 7a e1 00 40 77 67 ae 14 7a e1 48 00 40 77 8e 14 7a e1 47 ae 00 40 77 b4 7a e1 47 ae 14 00 40 77 da e1 47 ae 14 7b 00 40 78 01 47 ae 14 7a e1 00 40 78 27 ae 14 7a e1 48 00 40 78 4e 14 7a e1 47 ae 00 40 78 74 7a e1 47 ae 14 00 40 78 9a e1 47 ae 14 7b 00 40 78 c1 47 ae 14 7a e1 00 40 78 e7 ae 14 7a e1 48 00 40 79 0e 14 7a e1 47 ae 00 40 79 34 7a e1 47 ae 14 00 40 79 5a e1 47 ae 14 7b 00 40 79 81 47 ae 14 7a e1 00 40 79 a7 ae 14 7a e1 48 00 40 79 ce 14 7a e1 47 ae 00 40 79 f4 7a e1 47 ae 14 00 40 7a 1a e1 47 ae 14 7b 00 40 7a 41 47 ae 14 7a e1 00 40 7a 67 ae 14 7a e1 48 00 40 7a 8e 14 7a e1 47 ae 00 40 7a b4 7a e1 47 ae 14 00 40 7a da e1 47 ae 14 7b 00 40 7b 01 47 ae 14 7a e1 00 40 7b 27 ae 14 7a e1 48 00 40 7b 4e 14 7a e1 47 ae 00 40 7b 74 7a e1 47 ae 14 00 40 7b 9a e1 47 ae 14 7b 00 40 7b c1 47 ae 14 7a e1 00 40 7b e7 ae 14 7a e1 48 00 40 7c 0e 14 7a e1 47 ae 00 40 7c 34 7a e1 47 ae 14 00 40 7c 5a e1 47 ae 14 7b 00 40 7c 81 47 ae 14 7a e1 00 40 7c a7 ae 14 7a e1 48 00 40 7c ce 14 7a e1 47 ae 00 40 7c f4 7a e1 47 ae 14 00 40 7d 1a e1 47 ae 14 7b 00 40 7d 41 47 ae 14 7a e1 00 40 7d 67 ae 14 7a e1 48 00 40 7d 82 8f 5c 28 f5 c3 00 40 7d 83 33 33 33 33 33 00 40 7d a9 99 99 99 99 9a"));
+    std::shared_ptr<cygnal::Element> el2 = amf.extractAMF(hex2);
     if ((el2->getType() == Element::STRICT_ARRAY_AMF0)
         && (el2->propertySize() == 200)) {
         runtest.pass("Extracted Strict Array");
@@ -337,15 +336,15 @@ test_object()
     Element top;
     top.makeObject();
 
-    boost::shared_ptr<cygnal::Element> prop1(new Element);
+    std::shared_ptr<cygnal::Element> prop1(new Element);
     prop1->makeString("app", "oflaDemo");
     top.addProperty(prop1);
     
-    boost::shared_ptr<cygnal::Element> prop2(new Element);
+    std::shared_ptr<cygnal::Element> prop2(new Element);
     prop2->makeString("flashVer", "LNX 9,0,31,0");
     top.addProperty(prop2);
 
-    boost::shared_ptr<cygnal::Element> prop3(new Element);
+    std::shared_ptr<cygnal::Element> prop3(new Element);
     prop3->makeString("swfUrl", "http://www.red5.nl/tools/publisher/publisher.swf");
     top.addProperty(prop3);
 
@@ -361,8 +360,8 @@ test_object()
         mem->addStats(__LINE__);             // take a sample
     }
 #endif
-    boost::shared_ptr<Buffer> encobj = top.encode();
-//    boost::shared_ptr<Buffer> encobj;
+    std::shared_ptr<Buffer> encobj = top.encode();
+//    std::shared_ptr<Buffer> encobj;
 #if defined(HAVE_MALLINFO) && defined(USE_STATS_MEMORY)
     if (memdebug) {
         mem->addStats(__LINE__);             // take a sample
@@ -374,7 +373,7 @@ test_object()
     }
 
 //    encobj->dump();
-    boost::shared_ptr<Buffer> buf1(new Buffer("03 00 03 61 70 70 02 00 08 6f 66 6c 61 44 65 6d 6f 00 08 66 6c 61 73 68 56 65 72 02 00 0c 4c 4e 58 20 39 2c 30 2c 33 31 2c 30 00 06 73 77 66 55 72 6c 02 00 30 68 74 74 70 3a 2f 2f 77 77 77 2e 72 65 64 35 2e 6e 6c 2f 74 6f 6f 6c 73 2f 70 75 62 6c 69 73 68 65 72 2f 70 75 62 6c 69 73 68 65 72 2e 73 77 66 00 00 09"));
+    std::shared_ptr<Buffer> buf1(new Buffer("03 00 03 61 70 70 02 00 08 6f 66 6c 61 44 65 6d 6f 00 08 66 6c 61 73 68 56 65 72 02 00 0c 4c 4e 58 20 39 2c 30 2c 33 31 2c 30 00 06 73 77 66 55 72 6c 02 00 30 68 74 74 70 3a 2f 2f 77 77 77 2e 72 65 64 35 2e 6e 6c 2f 74 6f 6f 6c 73 2f 70 75 62 6c 69 73 68 65 72 2f 70 75 62 6c 69 73 68 65 72 2e 73 77 66 00 00 09"));
     if ((*encobj->reference() == Element::OBJECT_AMF0) &&
         (memcmp(buf1->reference(), encobj->reference(), 101) == 0)) {
         runtest.pass("Encoded Object");
@@ -390,7 +389,7 @@ test_object()
         mem->addStats(__LINE__);             // take a sample
     }
 #endif
-    boost::shared_ptr<cygnal::Element> newtop = amf_obj.extractAMF(buf1);
+    std::shared_ptr<cygnal::Element> newtop = amf_obj.extractAMF(buf1);
 #if defined(HAVE_MALLINFO) && defined(USE_STATS_MEMORY)
     if (memdebug) {
         mem->addStats(__LINE__);             // take a sample
diff --git a/cygnal/testsuite/libamf.all/test_amfmsg.cpp b/cygnal/testsuite/libamf.all/test_amfmsg.cpp
index a037da2..f08a1eb 100644
--- a/cygnal/testsuite/libamf.all/test_amfmsg.cpp
+++ b/cygnal/testsuite/libamf.all/test_amfmsg.cpp
@@ -31,7 +31,6 @@
 #include <log.h>
 #include <iostream>
 #include <string>
-#include <boost/shared_ptr.hpp>
 
 #include "GnashException.h"
 #include "check.h"
@@ -152,12 +151,12 @@ test_encoding()
 //  00 00 00 0e				   <- byte length of message
 //     0a 00 00 00 01			   <- array, 1 item
 //        00 41 70 43 ac e0 00 00 00
-    boost::shared_ptr<Buffer> buf1(new Buffer("00 00 00 00 00 03 00 06 67 65 74 77 61 79 00 04 2f 32 32 39 00 00 00 0e 0a 00 00 00 01 00 41 70 43 87 20 00 00 00 00 06 67 65 74 77 61 79 00 04 2f 32 33 30 00 00 00 0e 0a 00 00 00 01 00 41 70 43 ba 00 00 00 00 00 06 67 65 74 77 61 79 00 04 2f 32 33 31 00 00 00 0e 0a 00 00 00 01 00 41 70 43 ac e0 00 00 00"));
+    std::shared_ptr<Buffer> buf1(new Buffer("00 00 00 00 00 03 00 06 67 65 74 77 61 79 00 04 2f 32 32 39 00 00 00 0e 0a 00 00 00 01 00 41 70 43 87 20 00 00 00 00 06 67 65 74 77 61 79 00 04 2f 32 33 30 00 00 00 0e 0a 00 00 00 01 00 41 70 43 ba 00 00 00 00 00 06 67 65 74 77 61 79 00 04 2f 32 33 31 00 00 00 0e 0a 00 00 00 01 00 41 70 43 ac e0 00 00 00"));
     double num = *(reinterpret_cast<double *>(buf1->reference()));
     swapBytes(&num, cygnal::AMF0_NUMBER_SIZE); // we always encode in big endian format
 
     AMF_msg amsg;
-    boost::shared_ptr<AMF_msg::context_header_t> head1 =
+    std::shared_ptr<AMF_msg::context_header_t> head1 =
         amsg.parseAMFPacket(buf1->reference(), buf1->size());
 
 //    amsg.dump(*head1);
@@ -180,44 +179,44 @@ test_encoding()
     // Build a new message packet from scratch and make sure it matches the real one
     AMF_msg top;
     
-    boost::shared_ptr<cygnal::Element> getway1(new Element);
+    std::shared_ptr<cygnal::Element> getway1(new Element);
     getway1->makeStrictArray();
-    boost::shared_ptr<cygnal::Element> data1(new Element);
+    std::shared_ptr<cygnal::Element> data1(new Element);
     data1->makeNumber(dub1);
     getway1->addProperty(data1);
-    boost::shared_ptr<AMF_msg::amf_message_t> msg1(new AMF_msg::amf_message_t);
+    std::shared_ptr<AMF_msg::amf_message_t> msg1(new AMF_msg::amf_message_t);
     msg1->header.target = "getway";
     msg1->header.response = "/229";
     msg1->header.size = 14;
     msg1->data = getway1;
     top.addMessage(msg1);
     
-    boost::shared_ptr<cygnal::Element> getway2(new Element);
+    std::shared_ptr<cygnal::Element> getway2(new Element);
     getway2->makeStrictArray();
-    boost::shared_ptr<cygnal::Element> data2(new Element);
+    std::shared_ptr<cygnal::Element> data2(new Element);
     data2->makeNumber(dub2);
     getway2->addProperty(data2);
-    boost::shared_ptr<AMF_msg::amf_message_t> msg2(new AMF_msg::amf_message_t);
+    std::shared_ptr<AMF_msg::amf_message_t> msg2(new AMF_msg::amf_message_t);
     msg2->header.target = "getway";
     msg2->header.response = "/230";
     msg2->header.size = 14;
     msg2->data = getway2;
     top.addMessage(msg2);
     
-    boost::shared_ptr<cygnal::Element> getway3(new Element);
+    std::shared_ptr<cygnal::Element> getway3(new Element);
     getway3->makeStrictArray();
-    boost::shared_ptr<cygnal::Element> data3(new Element);
+    std::shared_ptr<cygnal::Element> data3(new Element);
     data3->makeNumber(dub3);
     getway3->addProperty(data3);
-    boost::shared_ptr<AMF_msg::amf_message_t> msg3(new AMF_msg::amf_message_t);
+    std::shared_ptr<AMF_msg::amf_message_t> msg3(new AMF_msg::amf_message_t);
     msg3->header.target = "getway";
     msg3->header.response = "/231";
     msg3->header.size = 14;
     msg3->data = getway3;
     top.addMessage(msg3);
 
-    boost::shared_ptr<cygnal::Buffer> buf2 = top.encodeMsgHeader("getway", "/229", 14);
-    boost::uint8_t *ptr1 = buf1->reference() + sizeof(AMF_msg::context_header_t);
+    std::shared_ptr<cygnal::Buffer> buf2 = top.encodeMsgHeader("getway", "/229", 14);
+    std::uint8_t *ptr1 = buf1->reference() + sizeof(AMF_msg::context_header_t);
 
 
     if (memcmp(ptr1, buf2->reference(), buf2->size()) == 0) {
@@ -226,7 +225,7 @@ test_encoding()
         runtest.fail("AMF_msg::encodeMsgHeader()");
     }
     
-    boost::shared_ptr<cygnal::Buffer> buf3 = top.encodeAMFPacket();
+    std::shared_ptr<cygnal::Buffer> buf3 = top.encodeAMFPacket();
     if (memcmp(buf1->reference(), buf3->reference(), buf3->allocated()) == 0) {
         runtest.pass("AMF_msg::encodeAMFPacket()");
     } else {
diff --git a/cygnal/testsuite/libamf.all/test_buffer.cpp b/cygnal/testsuite/libamf.all/test_buffer.cpp
index e7f013d..8a9704b 100644
--- a/cygnal/testsuite/libamf.all/test_buffer.cpp
+++ b/cygnal/testsuite/libamf.all/test_buffer.cpp
@@ -29,7 +29,7 @@
 #include <fstream>
 #include <cstring>
 #include <vector>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "dejagnu.h"
 #include "log.h"
@@ -255,15 +255,15 @@ test_copy()
          runtest.fail ("Buffer::operator=(const char *)");
     }
 
-    boost::uint16_t length = 12;
+    std::uint16_t length = 12;
     Buffer buf3;
     buf3 = length;
     Network::byte_t *ptr3 = buf3.reference();
-    boost::uint16_t newlen = *(reinterpret_cast<boost::uint16_t *>(ptr3));
+    std::uint16_t newlen = *(reinterpret_cast<std::uint16_t *>(ptr3));
     if (length == newlen) {
-         runtest.pass ("Buffer::operator=(boost::uint16_t)");
+         runtest.pass ("Buffer::operator=(std::uint16_t)");
     } else {
-         runtest.fail ("Buffer::operator=(boost::uint16_t)");
+         runtest.fail ("Buffer::operator=(std::uint16_t)");
     }
 
     double num = 1.2345;
@@ -423,20 +423,20 @@ test_append()
         runtest.fail ("Buffer::operator+=(const string &)");
     }
 
-    boost::uint16_t length = 1047;
+    std::uint16_t length = 1047;
     Buffer buf7(70);
     buf7.copy(data1, 10);
     buf7 += length;
-    if (memcmp(buf7.reference() + 10, &length, sizeof(boost::uint16_t)) == 0) {
-        runtest.pass ("Buffer::operator+=(boost::uint16_t)");
+    if (memcmp(buf7.reference() + 10, &length, sizeof(std::uint16_t)) == 0) {
+        runtest.pass ("Buffer::operator+=(std::uint16_t)");
     } else {
-        runtest.fail ("Buffer::operator+=(boost::uint16_t)");
+        runtest.fail ("Buffer::operator+=(std::uint16_t)");
     }
 
     buf7 += buf6;
-    // Network::byte_t *ptr1 = buf7.reference() + 10 + sizeof(boost::uint16_t);
+    // Network::byte_t *ptr1 = buf7.reference() + 10 + sizeof(std::uint16_t);
     // Network::byte_t *ptr2 = buf6.reference();
-    if (memcmp(buf7.reference() + 10 + sizeof(boost::uint16_t), buf6.reference(), 30) == 0) {
+    if (memcmp(buf7.reference() + 10 + sizeof(std::uint16_t), buf6.reference(), 30) == 0) {
         runtest.pass ("Buffer::operator+=(Buffer &)");
     } else {
         runtest.fail ("Buffer::operator+=(Buffer &)");
@@ -613,7 +613,7 @@ test_operators()
     buf1.clear();
     buf2.clear();
 
-    boost::uint8_t *ptr1 = buf1.reference();
+    std::uint8_t *ptr1 = buf1.reference();
     for (size_t i=1; i< buf1.size(); i++) {
         ptr1[i] = i;
     }
@@ -638,7 +638,7 @@ test_operators()
 
     Buffer *buf3, *buf4;
     buf3 = new Buffer;
-    boost::uint8_t *ptr2 = buf3->reference();
+    std::uint8_t *ptr2 = buf3->reference();
     for (size_t i=1; i< buf3->size(); i++) {
         ptr2[i] = i + 'a';
     }
@@ -662,7 +662,7 @@ test_operators()
     
     Buffer buf5(10);
     buf5.clear();
-    boost::uint8_t *ptr3 = buf5.reference();
+    std::uint8_t *ptr3 = buf5.reference();
     buf5 += 'a';
     buf5 += 'b';
     buf5 += 'c';
diff --git a/cygnal/testsuite/libamf.all/test_el.cpp b/cygnal/testsuite/libamf.all/test_el.cpp
index febb831..d900c89 100644
--- a/cygnal/testsuite/libamf.all/test_el.cpp
+++ b/cygnal/testsuite/libamf.all/test_el.cpp
@@ -119,21 +119,21 @@ main(int argc, char *argv[])
 void
 test_properties()
 {
-    std::vector<boost::shared_ptr<cygnal::Element> > data1;
+    std::vector<std::shared_ptr<cygnal::Element> > data1;
 
     const char *str1 = "property one";
-    boost::shared_ptr<cygnal::Element> prop1(new Element(str1));
+    std::shared_ptr<cygnal::Element> prop1(new Element(str1));
     data1.push_back(prop1);
 
     string str2 = "property two";
-    boost::shared_ptr<cygnal::Element> prop2(new Element(str2));
+    std::shared_ptr<cygnal::Element> prop2(new Element(str2));
     data1.push_back(prop2);
 
-    boost::shared_ptr<cygnal::Element> prop3(new Element("property three"));
+    std::shared_ptr<cygnal::Element> prop3(new Element("property three"));
     data1.push_back(prop3);
 
     double num = 123.456;
-    boost::shared_ptr<cygnal::Element> prop4(new Element(num));
+    std::shared_ptr<cygnal::Element> prop4(new Element(num));
     data1.push_back(prop4);
     
     Element top;
diff --git a/cygnal/testsuite/libamf.all/test_flv.cpp b/cygnal/testsuite/libamf.all/test_flv.cpp
index a60bed2..88a18fc 100644
--- a/cygnal/testsuite/libamf.all/test_flv.cpp
+++ b/cygnal/testsuite/libamf.all/test_flv.cpp
@@ -132,8 +132,8 @@ test_headers()
 //  00 0c 63 72 65 61 74 69 6f 6e 64 61 74 65	creationdate
 //     02 00 18 54 75 65 20 4a 75 6e 20 32 34 20 30 38 3a 30 33 3a 34 38 20 32 30 30 38
 //  00 00 09					Tue Jun 24 08:03:48 2008
-    boost::shared_ptr<cygnal::Buffer> hex1(new Buffer("46 4c 56 01 0d 00 00 00 09 00 00 00 00"));
-    boost::shared_ptr<Flv::flv_header_t> head = flv.decodeHeader(hex1);
+    std::shared_ptr<cygnal::Buffer> hex1(new Buffer("46 4c 56 01 0d 00 00 00 09 00 00 00 00"));
+    std::shared_ptr<Flv::flv_header_t> head = flv.decodeHeader(hex1);
     if (!head) {
         notest = true;
     }
@@ -141,7 +141,7 @@ test_headers()
     if (notest) {
         runtest.untested("Decoded FLV header");
     } else {
-        boost::uint32_t size = *(reinterpret_cast<boost::uint32_t *>(head->head_size));
+        std::uint32_t size = *(reinterpret_cast<std::uint32_t *>(head->head_size));
         if ((memcmp(head->sig, "FLV", 3) == 0)
             && (head->version == 1)
             && (size == 9)) {
@@ -151,7 +151,7 @@ test_headers()
         }
     }
     
-    boost::shared_ptr<cygnal::Buffer> enc1 = flv.encodeHeader(Flv::FLV_AUDIO | Flv::FLV_VIDEO);
+    std::shared_ptr<cygnal::Buffer> enc1 = flv.encodeHeader(Flv::FLV_AUDIO | Flv::FLV_VIDEO);
     Network::byte_t *ptr = enc1->reference();
     if ((enc1->size() == sizeof(Flv::flv_header_t))
         && (ptr[3] == 0x1)
@@ -164,8 +164,8 @@ test_headers()
 
     // Test converting 3 byte "integers" to a real 4 byte one. The
     // 0xf on each end should be ignore to be correct.
-    boost::shared_ptr<cygnal::Buffer> hex2(new Buffer("0f 00 00 a4 0f"));
-    boost::uint32_t num = flv.convert24(hex2->reference()+1);
+    std::shared_ptr<cygnal::Buffer> hex2(new Buffer("0f 00 00 a4 0f"));
+    std::uint32_t num = flv.convert24(hex2->reference()+1);
     if (num == 0xa4) {
         runtest.pass("Flv::convert24()");
     } else {
@@ -173,9 +173,9 @@ test_headers()
         notest = true;
     }
     
-    boost::shared_ptr<cygnal::Buffer> hex3(new Buffer("12 00 00 a4 00 00 00 00 00 00 00"));
+    std::shared_ptr<cygnal::Buffer> hex3(new Buffer("12 00 00 a4 00 00 00 00 00 00 00"));
 
-    boost::shared_ptr<Flv::flv_tag_t> tag3 = flv.decodeTagHeader(hex3);
+    std::shared_ptr<Flv::flv_tag_t> tag3 = flv.decodeTagHeader(hex3);
     if ((tag3->type == Flv::TAG_METADATA)
         && (flv.convert24(tag3->bodysize) == 0xa40000)) {
         runtest.pass("Decoded FLV MetaData Tag header");
@@ -190,8 +190,8 @@ test_tags()
     Flv flv;
     bool notest = false;
 
-    boost::shared_ptr<cygnal::Buffer> hex1(new Buffer("02 00 0a 6f 6e 4d 65 74 61 44 61 74 61 08 00 00 00 00 00 08 64 75 72 61 74 69 6f 6e 00 40 6d 6e 24 dd 2f 1a a0 00 0c 76 69 64 65 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 61 75 64 69 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 63 61 6e 53 65 65 6b 54 6f 45 6e 64 01 00 00 09 63 72 65 61 74 65 64 62 79 02 00 07 46 4d 53 20 33 2e 30 00 0c 63 72 65 61 74 69 6f 6e 64 61 74 65 02 00 18 54 75 65 20 4a 75 6e 20 32 34 20 30 38 3a 30 33 3a 34 38 20 32 30 30 38 00 00 09"));
-    boost::shared_ptr<cygnal::Element> el1 = flv.decodeMetaData(hex1);
+    std::shared_ptr<cygnal::Buffer> hex1(new Buffer("02 00 0a 6f 6e 4d 65 74 61 44 61 74 61 08 00 00 00 00 00 08 64 75 72 61 74 69 6f 6e 00 40 6d 6e 24 dd 2f 1a a0 00 0c 76 69 64 65 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 61 75 64 69 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 63 61 6e 53 65 65 6b 54 6f 45 6e 64 01 00 00 09 63 72 65 61 74 65 64 62 79 02 00 07 46 4d 53 20 33 2e 30 00 0c 63 72 65 61 74 69 6f 6e 64 61 74 65 02 00 18 54 75 65 20 4a 75 6e 20 32 34 20 30 38 3a 30 33 3a 34 38 20 32 30 30 38 00 00 09"));
+    std::shared_ptr<cygnal::Element> el1 = flv.decodeMetaData(hex1);
     el1->dump();
     if (!el1) {
         notest = true;
@@ -209,9 +209,9 @@ test_tags()
     }
 
     // Test decoding Audio tags
-    boost::shared_ptr<cygnal::Buffer> hex2(new Buffer("09 00 00 00 00 00 00 00 00 00 00 00"));
-    boost::shared_ptr<Flv::flv_tag_t> tag2 = flv.decodeTagHeader(hex2);
-    boost::shared_ptr<Flv::flv_audio_t> data2 = flv.decodeAudioData(*(hex2->reference() + 11));
+    std::shared_ptr<cygnal::Buffer> hex2(new Buffer("09 00 00 00 00 00 00 00 00 00 00 00"));
+    std::shared_ptr<Flv::flv_tag_t> tag2 = flv.decodeTagHeader(hex2);
+    std::shared_ptr<Flv::flv_audio_t> data2 = flv.decodeAudioData(*(hex2->reference() + 11));
     if ((tag2->type && Flv::TAG_AUDIO)
         && (data2->type == Flv::AUDIO_MONO)
         && (data2->size == Flv::AUDIO_8BIT)
@@ -222,9 +222,9 @@ test_tags()
         runtest.fail("Decoded FLV Audio Data flags");
     }
 
-    boost::shared_ptr<cygnal::Buffer> hex3(new Buffer("08 00 00 1b 00 00 00 00 00 00 00 2a"));
-    boost::shared_ptr<Flv::flv_tag_t> tag3 = flv.decodeTagHeader(hex3);
-    boost::shared_ptr<Flv::flv_video_t> data3 = flv.decodeVideoData(*(hex3->reference() + 11));
+    std::shared_ptr<cygnal::Buffer> hex3(new Buffer("08 00 00 1b 00 00 00 00 00 00 00 2a"));
+    std::shared_ptr<Flv::flv_tag_t> tag3 = flv.decodeTagHeader(hex3);
+    std::shared_ptr<Flv::flv_video_t> data3 = flv.decodeVideoData(*(hex3->reference() + 11));
     if ((tag3->type && Flv::TAG_VIDEO)
         && (data3->codecID == Flv::VIDEO_H263)
         && (data3->type == Flv::KEYFRAME)) {
@@ -233,8 +233,8 @@ test_tags()
         runtest.fail("Decoded FLV Video Data flags");
     }
 
-    boost::shared_ptr<cygnal::Buffer> hex4(new Buffer("00 0a 6f 6e 4d 65 74 61 44 61 74 61 08 00 00 00 00 00 08 64 75 72 61 74 69 6f 6e 00 40 6d 6e 24 dd 2f 1a a0 00 0c 76 69 64 65 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 61 75 64 69 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 63 61 6e 53 65 65 6b 54 6f 45 6e 64 01 00 00 09 63 72 65 61 74 65 64 62 79 02 00 07 46 4d 53 20 33 2e 30 00 0c 63 72 65 61 74 69 6f 6e 64 61 74 65 02 00 18 54 75 65 20 4a 75 6e 20 32 34 20 30 38 3a 30 33 3a 34 38 20 32 30 30 38 00 00 09"));
-    boost::shared_ptr<cygnal::Element> el4 = flv.decodeMetaData(hex4);
+    std::shared_ptr<cygnal::Buffer> hex4(new Buffer("00 0a 6f 6e 4d 65 74 61 44 61 74 61 08 00 00 00 00 00 08 64 75 72 61 74 69 6f 6e 00 40 6d 6e 24 dd 2f 1a a0 00 0c 76 69 64 65 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 61 75 64 69 6f 63 6f 64 65 63 69 64 00 40 00 00 00 00 00 00 00 00 0c 63 61 6e 53 65 65 6b 54 6f 45 6e 64 01 00 00 09 63 72 65 61 74 65 64 62 79 02 00 07 46 4d 53 20 33 2e 30 00 0c 63 72 65 61 74 69 6f 6e 64 61 74 65 02 00 18 54 75 65 20 4a 75 6e 20 32 34 20 30 38 3a 30 33 3a 34 38 20 32 30 30 38 00 00 09"));
+    std::shared_ptr<cygnal::Element> el4 = flv.decodeMetaData(hex4);
     if (!el4) {
         notest = true;
     } 
@@ -252,8 +252,8 @@ test_tags()
 
 #if 0
     // These are the packets as FLVParser handes them off
-    boost::shared_ptr<cygnal::Buffer> hex5(new Buffer("00 0a 6f 6e 4d 65 74 61 44 61 74 61 08 00 00 00 0a 00 08 64 75 72 61 74 69 6f 6e 00 40 82 5c fd f3 b6 45 a2 00 0d 76 69 64 65 6f 64 61 74 61 72 61 74 65 00 40 74 8a 51 f7 27 8d c5 00 15 6c 61 73 74 6b 65 79 66 72 61 6d 65 74 69 6d 65 73 74 61 6d 70 00 40 82 53 5a 1c ac 08 31 00 14 6c 61 73 74 6b 65 79 66 72 61 6d 65 6c 6f 63 61 74 69 6f 6e 00 41 77 01 7f 10 00 00 00 00 07 63 72 65 61 74 6f 72 02 00 0d 59 6f 75 54 75 62 65 2c 20 49 6e 63 2e 00 0f 6d 65 74 61 64 61 74 61 63 72 65 61 74 6f 72 02 00 1a 59 6f 75 54 75 62 65 20 4d 65 74 61 64 61 74 61 20 49 6e 6a 65 63 74 6f 72 2e 00 09 66 6c 76 73 6f 75 72 63 65 02 00 04 63 64 62 70 00 0c 68 61 73 6b 65 79 66 72 61 6d 65 73 01 01 00 0b 68 61 73 6d 65 74 61 64 61 74 61 01 01 00 09 6b 65 79 66 72 61 6d 65 73 03 00 05 74 69 6d 65 73 0a 00 00 01 33 00 00 00 00 00 00 00 00 00 00 3f ff 5c 28 f5 c2 8f 5c 00 40 0f 5e 35 3f 7c ed 91 00 40 17 86 24 dd 2f 1a a0 00 40 1f 5d 2f 1a 9f be 77 00 40 23 9a 1c ac 08 31 27 00 40 26 1b 22 d0 e5 60 42 00 40 26 30 20 c4 9b a5 e3 00 40 2a 1c 28 f5 c2 8f 5c 00 40 2e 07 ae 14 7a e1 48 00 40 30 f9 99 99 99 99 9a 00 40 32 ef 9d b2 2d 0e 56 00 40 34 e5 60 41 89 37 4c 00 40 36 db 22 d0 e5 60 42 00 40 38 d0 e5 60 41 89 37 00 40 3a c6 e9 78 d4 fd f4 00 40 3c bc ac 08 31 26 e9 00 40 3e b2 6e 97 8d 4f df 00 40 40 54 39 58 10 62 4e 00 40 41 4f 1a 9f be 76 c9 00 40 42 49 fb e7 6c 8b 44 00 40 43 44 dd 2f 1a 9f be 00 40 44 3f df 3b 64 5a 1d 00 40 45 3a c0 83 12 6e 98 00 40 46 35 a1 ca c0 83 12 00 40 47 30 a3 d7 0a 3d 71 00 40 48 2b 85 1e b8 51 ec 00 40 49 26 66 66 66 66 66 00 40 4a 21 68 72 b0 20 c5 00 40 4b 1c 49 ba 5e 35 3f 00 40 4c 17 2b 02 0c 49 ba 00 40 4d 12 0c 49 ba 5e 35 00 40 4e 0d 0e 56 04 18 93 00 40 4f 07 ef 9d b2 2d 0e 00 40 50 01 68 72 b0 20 c5 00 40 50 7e e9 78 d4 fd f4 00 40 50 fc 5a 1c ac 08 31 00 40 51 79 ca c0 83 12 6f 00 40 51 f7 3b 64 5a 1c ac 00 40 52 74 bc 6a 7e f9 db 00 40 52 f2 2d 0e 56 04 19 00 40 53 6f 9d b2 2d 0e 56 00 40 53 ed 1e b8 51 eb 85 00 40 54 6a 8f 5c 28 f5 c3 00 40 54 ea b0 20 c4 9b a6 00 40 55 68 20 c4 9b a5 e3 00 40 55 e5 a1 ca c0 83 12 00 40 56 63 12 6e 97 8d 50 00 40 56 e0 83 12 6e 97 8d 00 40 57 5d f3 b6 45 a1 cb 00 40 57 db 74 bc 6a 7e fa 00 40 58 58 e5 60 41 89 37 00 40 58 d6 56 04 18 93 75 00 40 59 53 d7 0a 3d 70 a4 00 40 59 d1 47 ae 14 7a e1 00 40 5a 4e b8 51 eb 85 1f 00 40 5a cc 28 f5 c2 8f 5c 00 40 5b 49 a9 fb e7 6c 8b 00 40 5b c7 1a 9f be 76 c9 00 40 5c 44 8b 43 95 81 06 00 40 5c c2 0c 49 ba 5e 35 00 40 5d 3f 7c ed 91 68 73 00 40 5d bc ed 91 68 72 b0 00 40 5e 3a 5e 35 3f 7c ee 00 40 5e b7 df 3b 64 5a 1d 00 40 5f 35 4f df 3b 64 5a 00 40 5f b2 c0 83 12 6e 98 00 40 60 18 20 c4 9b a5 e3 00 40 60 56 d9 16 87 2b 02 00 40 60 95 91 68 72 b0 21 00 40 60 d4 51 eb 85 1e b8 00 40 61 13 0a 3d 70 a3 d7 00 40 61 51 c2 8f 5c 28 f6 00 40 61 90 7a e1 47 ae 14 00 40 61 cf 3b 64 5a 1c ac 00 40 62 0d f3 b6 45 a1 cb 00 40 62 4c ac 08 31 26 e9 00 40 62 8b 6c 8b 43 95 81 00 40 62 ca 24 dd 2f 1a a0 00 40 63 08 dd 2f 1a 9f be 00 40 63 47 95 81 06 24 dd 00 40 63 86 56 04 18 93 75 00 40 63 c5 0e 56 04 18 93 00 40 64 03 c6 a7 ef 9d b2 00 40 64 42 87 2b 02 0c 4a 00 40 64 81 3f 7c ed 91 68 00 40 64 bf f7 ce d9 16 87 00 40 64 fe b0 20 c4 9b a6 00 40 65 3d 70 a3 d7 0a 3d 00 40 65 7c 28 f5 c2 8f 5c 00 40 65 ba e1 47 ae 14 7b 00 40 65 f9 a1 ca c0 83 12 00 40 66 38 5a 1c ac 08 31 00 40 66 77 12 6e 97 8d 50 00 40 66 b5 ca c0 83 12 6f 00 40 66 f4 8b 43 95 81 06 00 40 67 33 43 95 81 06 25 00 40 67 71 fb e7 6c 8b 44 00 40 67 b0 bc 6a 7e f9 db 00 40 67 ef 74 bc 6a 7e fa 00 40 68 2e 2d 0e 56 04 19 00 40 68 6c ed 91 68 72 b0 00 40 68 ab a5 e3 53 f7 cf 00 40 68 ea 5e 35 3f 7c ee 00 40 69 29 16 87 2b 02 0c 00 40 69 67 d7 0a 3d 70 a4 00 40 69 a6 8f 5c 28 f5 c3 00 40 69 e5 47 ae 14 7a e1 00 40 6a 24 08 31 26 e9 79 00 40 6a 62 c0 83 12 6e 98 00 40 6a a1 78 d4 fd f3 b6 00 40 6a e0 31 26 e9 78 d5 00 40 6b 15 99 99 99 99 9a 00 40 6b 24 49 ba 5e 35 3f 00 40 6b 63 02 0c 49 ba 5e 00 40 6b a1 ba 5e 35 3f 7d 00 40 6b e0 72 b0 20 c4 9c 00 40 6c 1f 33 33 33 33 33 00 40 6c 5d eb 85 1e b8 52 00 40 6c 9c a3 d7 0a 3d 71 00 40 6c db 64 5a 1c ac 08 00 40 6d 12 1c ac 08 31 27 00 40 6d 50 d4 fd f3 b6 46 00 40 6d 8f 8d 4f df 3b 64 00 40 6d ce 4d d2 f1 a9 fc 00 40 6e 0b ae 14 7a e1 48 00 40 6e 4a 66 66 66 66 66 00 40 6e 89 26 e9 78 d4 fe 00 40 6e c7 df 3b 64 5a 1d 00 40 6f 06 97 8d 4f df 3b 00 40 6f 39 4f df 3b 64 5a 00 40 6f 78 08 31 26 e9 79 00 40 6f b6 c8 b4 39 58 10 00 40 6f bc 20 c4 9b a5 e3 00 40 6f bd 70 a3 d7 0a 3d 00 40 6f fc 31 26 e9 78 d5 00 40 70 1d 74 bc 6a 7e fa 00 40 70 3c d0 e5 60 41 89 00 40 70 5c 31 26 e9 78 d5 00 40 70 7b 8d 4f df 3b 64 00 40 70 96 e9 78 d4 fd f4 00 40 70 98 3d 70 a3 d7 0a 00 40 70 b6 45 a1 ca c0 83 00 40 70 d5 a1 ca c0 83 12 00 40 70 f5 02 0c 49 ba 5e 00 40 71 14 5e 35 3f 7c ee 00 40 71 33 ba 5e 35 3f 7d 00 40 71 53 1a 9f be 76 c9 00 40 71 72 76 c8 b4 39 58 00 40 71 91 d2 f1 a9 fb e7 00 40 71 b1 2f 1a 9f be 77 00 40 71 d0 8f 5c 28 f5 c3 00 40 71 ef eb 85 1e b8 52 00 40 72 0f 47 ae 14 7a e1 00 40 72 2e a7 ef 9d b2 2d 00 40 72 4e 04 18 93 74 bc 00 40 72 6d 60 41 89 37 4c 00 40 72 8c bc 6a 7e f9 db 00 40 72 ac 1c ac 08 31 27 00 40 72 cb 78 d4 fd f3 b6 00 40 72 ea d4 fd f3 b6 46 00 40 73 0a 35 3f 7c ed 91 00 40 73 29 91 68 72 b0 21 00 40 73 48 ed 91 68 72 b0 00 40 73 68 4d d2 f1 a9 fc 00 40 73 87 a9 fb e7 6c 8b 00 40 73 a7 06 24 dd 2f 1b 00 40 73 c6 62 4d d2 f1 aa 00 40 73 e5 c2 8f 5c 28 f6 00 40 74 05 1e b8 51 eb 85 00 40 74 24 7a e1 47 ae 14 00 40 74 43 db 22 d0 e5 60 00 40 74 63 37 4b c6 a7 f0 00 40 74 82 93 74 bc 6a 7f 00 40 74 a1 ef 9d b2 2d 0e 00 40 74 c1 4f df 3b 64 5a 00 40 74 e0 ac 08 31 26 e9 00 40 75 00 08 31 26 e9 79 00 40 75 1f 68 72 b0 20 c5 00 40 75 3e c4 9b a5 e3 54 00 40 75 5e 20 c4 9b a5 e3 00 40 75 7d 81 06 24 dd 2f 00 40 75 9c dd 2f 1a 9f be 00 40 75 bc 39 58 10 62 4e 00 40 75 db 95 81 06 24 dd 00 40 75 fa f5 c2 8f 5c 29 00 40 76 1a 51 eb 85 1e b8 00 40 76 39 ae 14 7a e1 48 00 40 76 59 0e 56 04 18 93 00 40 76 78 6a 7e f9 db 23 00 40 76 97 c6 a7 ef 9d b2 00 40 76 b7 22 d0 e5 60 42 00 40 76 d6 83 12 6e 97 8d 00 40 76 f5 df 3b 64 5a 1d 00 40 77 15 3b 64 5a 1c ac 00 40 77 34 9b a5 e3 53 f8 00 40 77 53 f7 ce d9 16 87 00 40 77 73 53 f7 ce d9 17 00 40 77 92 b0 20 c4 9b a6 00 40 77 b2 10 62 4d d2 f2 00 40 77 d1 6c 8b 43 95 81 00 40 77 f0 c8 b4 39 58 10 00 40 78 10 28 f5 c2 8f 5c 00 40 78 2f 85 1e b8 51 ec 00 40 78 4e e1 47 ae 14 7b 00 40 78 6e 3d 70 a3 d7 0a 00 40 78 8d 9d b2 2d 0e 56 00 40 78 ac f9 db 22 d0 e5 00 40 78 cc 56 04 18 93 75 00 40 78 eb b6 45 a1 ca c1 00 40 79 0b 12 6e 97 8d 50 00 40 79 2a 6e 97 8d 4f df 00 40 79 49 ce d9 16 87 2b 00 40 79 69 2b 02 0c 49 ba 00 40 79 88 87 2b 02 0c 4a 00 40 79 a7 e3 53 f7 ce d9 00 40 79 c7 43 95 81 06 25 00 40 79 e6 9f be 76 c8 b4 00 40 7a 05 fb e7 6c 8b 44 00 40 7a 25 5c 28 f5 c2 8f 00 40 7a 44 b8 51 eb 85 1f 00 40 7a 64 14 7a e1 47 ae 00 40 7a 83 70 a3 d7 0a 3d 00 40 7a a2 d0 e5 60 41 89 00 40 7a c2 2d 0e 56 04 19 00 40 7a e1 89 37 4b c6 a8 00 40 7b 00 e9 78 d4 fd f4 00 40 7b 20 45 a1 ca c0 83 00 40 7b 3f a1 ca c0 83 12 00 40 7b 5f 02 0c 49 ba 5e 00 40 7b 7e 5e 35 3f 7c ee 00 40 7b 9d ba 5e 35 3f 7d 00 40 7b bd 16 87 2b 02 0c 00 40 7b dc 76 c8 b4 39 58 00 40 7b fb d2 f1 a9 fb e7 00 40 7c 1b 2f 1a 9f be 77 00 40 7c 3a 8f 5c 28 f5 c3 00 40 7c 59 eb 85 1e b8 52 00 40 7c 79 47 ae 14 7a e1 00 40 7c 98 a3 d7 0a 3d 71 00 40 7c b8 04 18 93 74 bc 00 40 7c d7 60 41 89 37 4c 00 40 7c f6 bc 6a 7e f9 db 00 40 7d 16 1c ac 08 31 27 00 40 7d 35 78 d4 fd f3 b6 00 40 7d 54 d4 fd f3 b6 46 00 40 7d 74 31 26 e9 78 d5 00 40 7d 93 91 68 72 b0 21 00 40 7d b2 ed 91 68 72 b0 00 40 7d d2 49 ba 5e 35 3f 00 40 7d f1 a9 fb e7 6c 8b 00 40 7e 11 06 24 dd 2f 1b 00 40 7e 30 62 4d d2 f1 aa 00 40 7e 4f c2 8f 5c 28 f6 00 40 7e 55 16 87 2b 02 0c 00 40 7e 74 72 b0 20 c4 9c 00 40 7e 93 d2 f1 a9 fb e7 00 40 7e b3 2f 1a 9f be 77 00 40 7e d2 8b 43 95 81 06 00 40 7e f1 eb 85 1e b8 52 00 40 7f 11 47 ae 14 7a e1 00 40 7f 30 a3 d7 0a 3d 71 00 40 7f 50 00 00 00 00 00 00 40 7f 6f 60 41 89 37 4c 00 40 7f 8e bc 6a 7e f9 db 00 40 7f ae 18 93 74 bc 6a 00 40 7f cd 78 d4 fd f3 b6 00 40 7f ec d4 fd f3 b6 46 00 40 80 06 18 93 74 bc 6a 00 40 80 15 c8 b4 39 58 10 00 40 80 25 76 c8 b4 39 58 00 40 80 35 24 dd 2f 1a a0 00 40 80 44 d2 f1 a9 fb e7 00 40 80 54 83 12 6e 97 8d 00 40 80 64 31 26 e9 78 d5 00 40 80 73 df 3b 64 5a 1d 00 40 80 83 8f 5c 28 f5 c3 00 40 80 93 3d 70 a3 d7 0a 00 40 80 a2 eb 85 1e b8 52 00 40 80 b2 99 99 99 99 9a 00 40 80 c2 49 ba 5e 35 3f 00 40 80 d1 f7 ce d9 16 87 00 40 80 e1 a5 e3 53 f7 cf 00 40 80 f1 56 04 18 93 75 00 40 81 01 04 18 93 74 bc 00 40 81 10 b2 2d 0e 56 04 00 40 81 20 62 4d d2 f1 aa 00 40 81 30 10 62 4d d2 f2 00 40 81 3f be 76 c8 b4 39 00 40 81 4f 6c 8b 43 95 81 00 40 81 5f 1c ac 08 31 27 00 40 81 6e ca c0 83 12 6f 00 40 81 7e 78 d4 fd f3 b6 00 40 81 8e 28 f5 c2 8f 5c 00 40 81 9d d7 0a 3d 70 a4 00 40 81 ad 85 1e b8 51 ec 00 40 81 bd 33 33 33 33 33 00 40 81 cc e3 53 f7 ce d9 00 40 81 dc 91 68 72 b0 21 00 40 81 ec 3f 7c ed 91 68 00 40 81 fb ef 9d b2 2d 0e 00 40 82 0b 9d b2 2d 0e 56 00 40 82 1b 4b c6 a7 ef 9e 00 40 82 2a f9 db 22 d0 e5 00 40 82 33 fd f3 b6 45 a2 00 40 82 43 ac 08 31 26 e9 00 40 82 53 5a 1c ac 08 31 00 0d 66 69 6c 65 70 6f 73 69 74 69 6f 6e 73 0a 00 00 01 33 00 40 b6 d2 00 00 00 00 00 00 40 db 4f 80 00 00 00 00 00 40 f0 67 e0 00 00 00 00 00 40 f8 41 50 00 00 00 00 00 41 00 30 98 00 00 00 00 00 41 04 fd 28 00 00 00 00 00 41 07 a2 10 00 00 00 00 00 41 07 e6 68 00 00 00 00 00 41 11 da 7c 00 00 00 00 00 41 16 a7 dc 00 00 00 00 00 41 1b 35 6c 00 00 00 00 00 41 1f d4 bc 00 00 00 00 00 41 22 4b 5e 00 00 00 00 00 41 24 ab 78 00 00 00 00 00 41 27 20 e8 00 00 00 00 00 41 29 a7 04 00 00 00 00 00 41 2c 14 f6 00 00 00 00 00 41 2e 82 f8 00 00 00 00 00 41 30 a9 29 00 00 00 00 00 41 32 1f e6 00 00 00 00 00 41 33 69 a0 00 00 00 00 00 41 34 cb df 00 00 00 00 00 41 36 33 96 00 00 00 00 00 41 37 94 db 00 00 00 00 00 41 38 e2 54 00 00 00 00 00 41 3a 4d 10 00 00 00 00 00 41 3b a4 1e 00 00 00 00 00 41 3d 31 ba 00 00 00 00 00 41 3e b3 75 00 00 00 00 00 41 40 09 72 80 00 00 00 00 41 40 a7 34 00 00 00 00 00 41 41 1f bf 80 00 00 00 00 41 41 a1 79 80 00 00 00 00 41 42 27 3c 80 00 00 00 00 41 42 b0 11 00 00 00 00 00 41 43 3c 27 80 00 00 00 00 41 43 c6 d7 80 00 00 00 00 41 44 4e 36 80 00 00 00 00 41 44 d9 50 80 00 00 00 00 41 45 60 9f 00 00 00 00 00 41 45 c5 39 80 00 00 00 00 41 46 00 9d 00 00 00 00 00 41 46 32 5e 00 00 00 00 00 41 46 64 c6 00 00 00 00 00 41 46 c3 cc 00 00 00 00 00 41 47 5a 90 80 00 00 00 00 41 48 00 08 80 00 00 00 00 41 48 cd 6d 80 00 00 00 00 41 49 98 39 80 00 00 00 00 41 4a 5b 8b 80 00 00 00 00 41 4b 2c db 00 00 00 00 00 41 4c 0f 67 00 00 00 00 00 41 4c ed c9 80 00 00 00 00 41 4d c9 d3 80 00 00 00 00 41 4e a7 83 80 00 00 00 00 41 4f 82 e1 00 00 00 00 00 41 50 2a 2b 00 00 00 00 00 41 50 89 39 c0 00 00 00 00 41 50 df 38 40 00 00 00 00 41 51 37 93 40 00 00 00 00 41 51 9c 32 80 00 00 00 00 41 52 0b 0b c0 00 00 00 00 41 52 68 52 80 00 00 00 00 41 52 bb 21 80 00 00 00 00 41 53 08 7d c0 00 00 00 00 41 53 5a 6b c0 00 00 00 00 41 53 ab e1 00 00 00 00 00 41 53 fc d3 c0 00 00 00 00 41 54 4b b2 40 00 00 00 00 41 54 97 2d 40 00 00 00 00 41 54 dd d1 40 00 00 00 00 41 55 28 c8 40 00 00 00 00 41 55 74 d6 c0 00 00 00 00 41 55 c6 28 40 00 00 00 00 41 56 11 3a 40 00 00 00 00 41 56 5b a7 40 00 00 00 00 41 56 c2 97 80 00 00 00 00 41 57 18 d0 00 00 00 00 00 41 57 6f 38 00 00 00 00 00 41 57 c1 05 80 00 00 00 00 41 58 0e f9 40 00 00 00 00 41 58 61 d9 40 00 00 00 00 41 58 be 21 c0 00 00 00 00 41 59 1b a3 00 00 00 00 00 41 59 7d b7 80 00 00 00 00 41 59 de c4 80 00 00 00 00 41 5a 38 6f c0 00 00 00 00 41 5a 97 be 40 00 00 00 00 41 5b 06 5f 00 00 00 00 00 41 5b 7b 62 80 00 00 00 00 41 5b e8 4c c0 00 00 00 00 41 5c 59 4c 40 00 00 00 00 41 5c c6 99 00 00 00 00 00 41 5d 37 eb 00 00 00 00 00 41 5d a1 4a 00 00 00 00 00 41 5e 05 00 00 00 00 00 00 41 5e 69 d8 00 00 00 00 00 41 5e d1 e9 80 00 00 00 00 41 5f 35 61 80 00 00 00 00 41 5f 99 a3 80 00 00 00 00 41 5f f8 ea 40 00 00 00 00 41 60 2a b8 c0 00 00 00 00 41 60 5c 12 40 00 00 00 00 41 60 90 a9 60 00 00 00 00 41 60 c6 b7 c0 00 00 00 00 41 60 fe 01 00 00 00 00 00 41 61 31 40 00 00 00 00 00 41 61 5e 86 00 00 00 00 00 41 61 8a fc a0 00 00 00 00 41 61 b9 43 00 00 00 00 00 41 61 e7 16 80 00 00 00 00 41 62 17 b3 80 00 00 00 00 41 62 40 7d 40 00 00 00 00 41 62 44 d4 60 00 00 00 00 41 62 72 5d 00 00 00 00 00 41 62 a4 b7 00 00 00 00 00 41 62 e2 3d a0 00 00 00 00 41 63 1c b5 a0 00 00 00 00 41 63 59 85 c0 00 00 00 00 41 63 91 80 00 00 00 00 00 41 63 c4 75 c0 00 00 00 00 41 63 f6 d6 20 00 00 00 00 41 64 1a 9d 80 00 00 00 00 41 64 42 0c e0 00 00 00 00 41 64 66 c9 a0 00 00 00 00 41 64 86 97 80 00 00 00 00 41 64 a7 b3 e0 00 00 00 00 41 64 ca 51 a0 00 00 00 00 41 64 ed 31 60 00 00 00 00 41 65 18 18 60 00 00 00 00 41 65 42 43 00 00 00 00 00 41 65 70 d6 00 00 00 00 00 41 65 a0 a8 00 00 00 00 00 41 65 a5 0d 40 00 00 00 00 41 65 a6 30 a0 00 00 00 00 41 65 c8 96 40 00 00 00 00 41 65 e5 8e 80 00 00 00 00 41 66 05 ed 20 00 00 00 00 41 66 24 bc 40 00 00 00 00 41 66 3f a7 00 00 00 00 00 41 66 5d 8e c0 00 00 00 00 41 66 5f 95 40 00 00 00 00 41 66 85 5a c0 00 00 00 00 41 66 ac 52 20 00 00 00 00 41 66 d3 8b e0 00 00 00 00 41 66 fa e4 00 00 00 00 00 41 67 24 d0 c0 00 00 00 00 41 67 4e d9 c0 00 00 00 00 41 67 7a 55 a0 00 00 00 00 41 67 a3 1d e0 00 00 00 00 41 67 cb f9 40 00 00 00 00 41 67 f7 24 e0 00 00 00 00 41 68 23 ce a0 00 00 00 00 41 68 3c fb 00 00 00 00 00 41 68 5d f1 00 00 00 00 00 41 68 7d 50 40 00 00 00 00 41 68 9a 37 40 00 00 00 00 41 68 b6 4b a0 00 00 00 00 41 68 d6 08 c0 00 00 00 00 41 68 f7 fd e0 00 00 00 00 41 69 1a 44 c0 00 00 00 00 41 69 3a 2a 80 00 00 00 00 41 69 5c 07 20 00 00 00 00 41 69 7e ec 20 00 00 00 00 41 69 9e 44 20 00 00 00 00 41 69 b8 f3 c0 00 00 00 00 41 69 d5 ec 40 00 00 00 00 41 69 f3 d9 00 00 00 00 00 41 6a 10 74 e0 00 00 00 00 41 6a 2d 33 00 00 00 00 00 41 6a 4b 9e a0 00 00 00 00 41 6a 72 eb 00 00 00 00 00 41 6a 9b fd 40 00 00 00 00 41 6a cd 8e e0 00 00 00 00 41 6b 01 aa 60 00 00 00 00 41 6b 33 d5 a0 00 00 00 00 41 6b 64 ca a0 00 00 00 00 41 6b 8f 90 00 00 00 00 00 41 6b bf f1 00 00 00 00 00 41 6b f0 4f 20 00 00 00 00 41 6c 1d 1f c0 00 00 00 00 41 6c 47 b7 00 00 00 00 00 41 6c 72 ee e0 00 00 00 00 41 6c 9a dc 60 00 00 00 00 41 6c c0 04 a0 00 00 00 00 41 6c e1 5a a0 00 00 00 00 41 6d 03 4f e0 00 00 00 00 41 6d 28 24 60 00 00 00 00 41 6d 4c da e0 00 00 00 00 41 6d 71 93 80 00 00 00 00 41 6d 99 50 00 00 00 00 00 41 6d c0 4f e0 00 00 00 00 41 6d e5 c9 40 00 00 00 00 41 6e 08 fe c0 00 00 00 00 41 6e 2d 90 c0 00 00 00 00 41 6e 48 6a 40 00 00 00 00 41 6e 7b 65 40 00 00 00 00 41 6e ab 11 c0 00 00 00 00 41 6e e1 0e 00 00 00 00 00 41 6f 18 8b 00 00 00 00 00 41 6f 4c 1d 60 00 00 00 00 41 6f 7c 8f 00 00 00 00 00 41 6f ad 1e 20 00 00 00 00 41 6f dd 1e 60 00 00 00 00 41 70 06 b0 60 00 00 00 00 41 70 1d 3c 70 00 00 00 00 41 70 33 e5 60 00 00 00 00 41 70 49 a9 00 00 00 00 00 41 70 5d 8d f0 00 00 00 00 41 70 71 9c 80 00 00 00 00 41 70 84 c4 c0 00 00 00 00 41 70 99 79 30 00 00 00 00 41 70 ac ec 30 00 00 00 00 41 70 c0 bd f0 00 00 00 00 41 70 d5 bb 00 00 00 00 00 41 70 ea c4 a0 00 00 00 00 41 70 ff 77 10 00 00 00 00 41 71 13 be 30 00 00 00 00 41 71 28 10 40 00 00 00 00 41 71 3c e0 10 00 00 00 00 41 71 52 e4 b0 00 00 00 00 41 71 6a 7f 70 00 00 00 00 41 71 81 b6 20 00 00 00 00 41 71 97 a1 d0 00 00 00 00 41 71 ae 53 b0 00 00 00 00 41 71 c4 2a 50 00 00 00 00 41 71 d9 b0 30 00 00 00 00 41 71 ef 51 20 00 00 00 00 41 72 05 34 90 00 00 00 00 41 72 1b 83 f0 00 00 00 00 41 72 30 d1 e0 00 00 00 00 41 72 45 bc 00 00 00 00 00 41 72 5d 36 00 00 00 00 00 41 72 73 aa 30 00 00 00 00 41 72 89 37 20 00 00 00 00 41 72 9d b9 50 00 00 00 00 41 72 b1 3c 50 00 00 00 00 41 72 c6 08 40 00 00 00 00 41 72 da dc 60 00 00 00 00 41 72 ef 73 a0 00 00 00 00 41 73 05 1b c0 00 00 00 00 41 73 1a bc 80 00 00 00 00 41 73 2f fb c0 00 00 00 00 41 73 46 ff 30 00 00 00 00 41 73 5d 18 00 00 00 00 00 41 73 75 51 60 00 00 00 00 41 73 8a df 80 00 00 00 00 41 73 a0 69 d0 00 00 00 00 41 73 b6 e4 b0 00 00 00 00 41 73 ce 66 50 00 00 00 00 41 73 e5 91 b0 00 00 00 00 41 73 fa 77 50 00 00 00 00 41 74 0f 1a f0 00 00 00 00 41 74 24 e8 10 00 00 00 00 41 74 29 e9 a0 00 00 00 00 41 74 37 50 10 00 00 00 00 41 74 40 3f b0 00 00 00 00 41 74 49 41 40 00 00 00 00 41 74 53 1b 60 00 00 00 00 41 74 5e 1c 30 00 00 00 00 41 74 68 73 80 00 00 00 00 41 74 72 4d d0 00 00 00 00 41 74 7c 61 40 00 00 00 00 41 74 87 63 20 00 00 00 00 41 74 92 10 e0 00 00 00 00 41 74 9b 9a d0 00 00 00 00 41 74 a7 96 70 00 00 00 00 41 74 b0 93 20 00 00 00 00 41 74 be 44 70 00 00 00 00 41 74 c5 96 e0 00 00 00 00 41 74 d2 f4 70 00 00 00 00 41 74 e3 19 00 00 00 00 00 41 74 f3 c5 30 00 00 00 00 41 75 04 72 d0 00 00 00 00 41 75 15 c5 00 00 00 00 00 41 75 28 b8 30 00 00 00 00 41 75 3b eb 10 00 00 00 00 41 75 4f 45 40 00 00 00 00 41 75 63 1e b0 00 00 00 00 41 75 77 6e e0 00 00 00 00 41 75 8b af 50 00 00 00 00 41 75 9e ed 40 00 00 00 00 41 75 b2 1d 80 00 00 00 00 41 75 c5 66 90 00 00 00 00 41 75 d9 14 c0 00 00 00 00 41 75 ec aa 20 00 00 00 00 41 75 ff 1d 90 00 00 00 00 41 76 10 ed 90 00 00 00 00 41 76 23 32 20 00 00 00 00 41 76 38 3d 20 00 00 00 00 41 76 50 26 60 00 00 00 00 41 76 68 93 f0 00 00 00 00 41 76 7b eb d0 00 00 00 00 41 76 83 d6 d0 00 00 00 00 41 76 8f 6a 90 00 00 00 00 41 76 97 5c 00 00 00 00 00 41 76 9f 4a 40 00 00 00 00 41 76 a7 37 00 00 00 00 00 41 76 af 9f f0 00 00 00 00 41 76 c2 85 f0 00 00 00 00 41 76 cb f1 70 00 00 00 00 41 76 d5 56 00 00 00 00 00 41 76 de b9 30 00 00 00 00 41 76 e8 17 90 00 00 00 00 41 76 f4 57 c0 00 00 00 00 41 76 fb 87 20 00 00 00 00 41 77 01 7f 10 00 00 00 00"));
-//    boost::shared_ptr<cygnal::Buffer> hex5 = hex2mem("00 0a 6f 6e 4d 65 74 61 44 61 74 61 08 00 00 00 0a 00 08 64 75 72 61 74 69 6f 6e 00 40 6e 47 74 bc 6a 7e fa 00 0d 76 69 64 65 6f 64 61 74 61 72 61 74 65 00 40 67 28 32 e3 7f 02 e6 00 15 6c 61 73 74 6b 65 79 66 72 61 6d 65 74 69 6d 65 73 74 61 6d 70 00 40 6e 03 2b 02 0c 49 ba 00 14 6c 61 73 74 6b 65 79 66 72 61 6d 65 6c 6f 63 61 74 69 6f 6e 00 41 55 41 92 80 00 00 00 00 07 63 72 65 61 74 6f 72 02 00 0d 59 6f 75 54 75 62 65 2c 20 49 6e 63 2e 00 0f 6d 65 74 61 64 61 74 61 63 72 65 61 74 6f 72 02 00 1a 59 6f 75 54 75 62 65 20 4d 65 74 61 64 61 74 61 20 49 6e 6a 65 63 74 6f 72 2e 00 09 66 6c 76 73 6f 75 72 63 65 02 00 04 63 64 62 70 00 0c 68 61 73 6b 65 79 66 72 61 6d 65 73 01 01 00 0b 68 61 73 6d 65 74 61 64 61 74 61 01 01 00 09 6b 65 79 66 72 61 6d 65 73 03 00 05 74 69 6d 65 73 0a 00 00 00 7a 00 00 00 00 00 00 00 00 00 00 40 00 16 87 2b 02 0c 4a 00 40 0c be 76 c8 b4 39 58 00 40 14 92 6e 97 8d 4f df 00 40 1b 8f 5c 28 f5 c2 8f 00 40 20 49 37 4b c6 a7 f0 00 40 23 d8 93 74 bc 6a 7f 00 40 27 57 0a 3d 70 a3 d7 00 40 2a a3 53 f7 ce d9 17 00 40 2d de 35 3f 7c ed 91 00 40 30 9d 70 a3 d7 0a 3d 00 40 32 b1 26 e9 78 d4 fe 00 40 34 13 b6 45 a1 ca c1 00 40 36 05 a1 ca c0 83 12 00 40 37 ab 85 1e b8 51 ec 00 40 39 05 a1 ca c0 83 12 00 40 3a cd 4f df 3b 64 5a 00 40 3c 5a 1c ac 08 31 27 00 40 3e 21 ca c0 83 12 6f 00 40 3f c7 ae 14 7a e1 48 00 40 40 9d 91 68 72 b0 21 00 40 41 8e 14 7a e1 47 ae 00 40 42 82 d0 e5 60 41 89 00 40 43 62 6e 97 8d 4f df 00 40 44 4e b8 51 eb 85 1f 00 40 44 ef 1a 9f be 76 c9 00 40 45 ec 49 ba 5e 35 3f 00 40 46 ed b2 2d 0e 56 04 00 40 47 a7 6c 8b 43 95 81 00 40 48 8f 7c ed 91 68 73 00 40 49 80 00 00 00 00 00 00 40 4a 78 f5 c2 8f 5c 29 00 40 4b 61 06 24 dd 2f 1b 00 40 4c 99 58 10 62 4d d3 00 40 4d 5f 9d b2 2d 0e 56 00 40 4e 54 5a 1c ac 08 31 00 40 4f 44 dd 2f 1a 9f be 00 40 50 1e f9 db 22 d0 e5 00 40 50 8a 8f 5c 28 f5 c3 00 40 50 f1 eb 85 1e b8 52 00 40 51 7d 2f 1a 9f be 77 00 40 51 e0 51 eb 85 1e b8 00 40 52 84 ed 91 68 72 b0 00 40 53 01 68 72 b0 20 c5 00 40 53 82 1c ac 08 31 27 00 40 53 fa 5e 35 3f 7c ee 00 40 54 70 83 12 6e 97 8d 00 40 54 d3 b6 45 a1 ca c1 00 40 55 3d 2f 1a 9f be 77 00 40 55 ce c8 b4 39 58 10 00 40 56 3e 97 8d 4f df 3b 00 40 56 bb 12 6e 97 8d 50 00 40 57 2f 1a 9f be 76 c9 00 40 57 af ce d9 16 87 2b 00 40 58 28 10 62 4d d2 f2 00 40 58 af 1a 9f be 76 c9 00 40 59 1a c0 83 12 6e 98 00 40 59 95 1e b8 51 eb 85 00 40 5a 07 0a 3d 70 a3 d7 00 40 5a 96 87 2b 02 0c 4a 00 40 5b 21 ba 5e 35 3f 7d 00 40 5b 93 b6 45 a1 ca c1 00 40 5b ff 4b c6 a7 ef 9e 00 40 5c 88 72 b0 20 c4 9c 00 40 5c fa 5e 35 3f 7c ee 00 40 5d 76 d9 16 87 2b 02 00 40 5d e4 8b 43 95 81 06 00 40 5e 6b 95 81 06 24 dd 00 40 5e f8 f5 c2 8f 5c 29 00 40 5f 8e c8 b4 39 58 10 00 40 60 0a e9 78 d4 fd f4 00 40 60 47 0a 3d 70 a3 d7 00 40 60 89 81 06 24 dd 2f 00 40 60 c8 cc cc cc cc cd 00 40 61 00 b4 39 58 10 62 00 40 61 49 81 06 24 dd 2f 00 40 61 91 37 4b c6 a7 f0 00 40 61 e3 85 1e b8 51 ec 00 40 62 43 85 1e b8 51 ec 00 40 62 7d 89 37 4b c6 a8 00 40 62 c9 81 06 24 dd 2f 00 40 63 12 45 a1 ca c0 83 00 40 63 5c 20 c4 9b a5 e3 00 40 63 9b 6c 8b 43 95 81 00 40 63 db c6 a7 ef 9d b2 00 40 64 16 d9 16 87 2b 02 00 40 64 55 16 87 2b 02 0c 00 40 64 8e 14 7a e1 47 ae 00 40 64 d7 e7 6c 8b 43 96 00 40 65 18 41 89 37 4b c7 00 40 65 51 37 4b c6 a7 f0 00 40 65 9e 3d 70 a3 d7 0a 00 40 65 e2 d0 e5 60 41 89 00 40 66 14 62 4d d2 f1 aa 00 40 66 60 5a 1c ac 08 31 00 40 66 a1 c2 8f 5c 28 f6 00 40 66 d9 a9 fb e7 6c 8b 00 40 67 1e 3d 70 a3 d7 0a 00 40 67 67 0a 3d 70 a3 d7 00 40 67 a9 81 06 24 dd 2f 00 40 67 f7 8d 4f df 3b 64 00 40 68 43 85 1e b8 51 ec 00 40 68 89 26 e9 78 d4 fe 00 40 68 d9 4f df 3b 64 5a 00 40 69 29 81 06 24 dd 2f 00 40 69 68 cc cc cc cc cd 00 40 69 aa 35 3f 7c ed 91 00 40 69 fc 7a e1 47 ae 14 00 40 6a 31 37 4b c6 a7 f0 00 40 6a 7c 20 c4 9b a5 e3 00 40 6a d0 83 12 6e 97 8d 00 40 6b 1e 97 8d 4f df 3b 00 40 6b 70 dd 2f 1a 9f be 00 40 6b aa e9 78 d4 fd f4 00 40 6b f6 d9 16 87 2b 02 00 40 6c 40 b4 39 58 10 62 00 40 6c 80 00 00 00 00 00 00 40 6c d2 45 a1 ca c0 83 00 40 6d 20 5a 1c ac 08 31 00 40 6d 68 18 93 74 bc 6a 00 40 6d b6 24 dd 2f 1a a0 00 40 6e 03 2b 02 0c 49 ba 00 0d 66 69 6c 65 70 6f 73 69 74 69 6f 6e 73 0a 00 00 00 7a 00 40 a3 a0 00 00 00 00 00 00 40 e6 1a 40 00 00 00 00 00 40 f4 b9 40 00 00 00 00 00 40 fe 2a 10 00 00 00 00 00 41 04 6d b8 00 00 00 00 00 41 09 13 30 00 00 00 00 00 41 0e 65 48 00 00 00 00 00 41 11 ac 10 00 00 00 00 00 41 14 60 bc 00 00 00 00 00 41 17 09 38 00 00 00 00 00 41 19 ce f4 00 00 00 00 00 41 1c 7a 90 00 00 00 00 00 41 1e e9 4c 00 00 00 00 00 41 21 0d 16 00 00 00 00 00 41 22 84 dc 00 00 00 00 00 41 23 bb be 00 00 00 00 00 41 25 2d b6 00 00 00 00 00 41 26 76 5e 00 00 00 00 00 41 27 d8 50 00 00 00 00 00 41 29 44 e6 00 00 00 00 00 41 2a 90 6e 00 00 00 00 00 41 2b e5 2c 00 00 00 00 00 41 2d 27 36 00 00 00 00 00 41 2e 65 fe 00 00 00 00 00 41 2f c3 02 00 00 00 00 00 41 30 73 07 00 00 00 00 00 41 31 26 69 00 00 00 00 00 41 31 d5 84 00 00 00 00 00 41 32 67 fc 00 00 00 00 00 41 33 0f c8 00 00 00 00 00 41 33 c3 ec 00 00 00 00 00 41 34 75 9c 00 00 00 00 00 41 35 29 c6 00 00 00 00 00 41 35 f8 37 00 00 00 00 00 41 36 99 17 00 00 00 00 00 41 37 4d 7f 00 00 00 00 00 41 37 fb e3 00 00 00 00 00 41 38 a0 fc 00 00 00 00 00 41 39 46 90 00 00 00 00 00 41 39 e7 17 00 00 00 00 00 41 3a 9c dc 00 00 00 00 00 41 3b 40 c0 00 00 00 00 00 41 3c 0e ff 00 00 00 00 00 41 3c bb e0 00 00 00 00 00 41 3d 77 91 00 00 00 00 00 41 3e 26 48 00 00 00 00 00 41 3e d2 57 00 00 00 00 00 41 3f 79 f2 00 00 00 00 00 41 40 13 eb 80 00 00 00 00 41 40 6e 58 00 00 00 00 00 41 40 c1 2d 80 00 00 00 00 41 41 17 c0 80 00 00 00 00 41 41 6b 52 80 00 00 00 00 41 41 c5 2e 00 00 00 00 00 41 42 17 da 80 00 00 00 00 41 42 76 36 00 00 00 00 00 41 42 c7 be 00 00 00 00 00 41 43 25 e5 80 00 00 00 00 41 43 7a b1 00 00 00 00 00 41 43 d4 07 80 00 00 00 00 41 44 2c e0 00 00 00 00 00 41 44 7d fe 00 00 00 00 00 41 44 d0 61 80 00 00 00 00 41 45 27 55 00 00 00 00 00 41 45 7c c3 80 00 00 00 00 41 45 d4 0a 00 00 00 00 00 41 46 24 09 80 00 00 00 00 41 46 7a 64 80 00 00 00 00 41 46 d8 6d 00 00 00 00 00 41 47 39 0a 80 00 00 00 00 41 47 94 d5 00 00 00 00 00 41 47 e8 6d 00 00 00 00 00 41 48 3f f1 80 00 00 00 00 41 48 a0 5e 80 00 00 00 00 41 48 f4 7d 00 00 00 00 00 41 49 52 36 00 00 00 00 00 41 49 b4 80 00 00 00 00 00 41 4a 1b 96 80 00 00 00 00 41 4a 86 8c 00 00 00 00 00 41 4a d6 96 00 00 00 00 00 41 4b 34 06 80 00 00 00 00 41 4b 8d 4b 80 00 00 00 00 41 4b ee 20 00 00 00 00 00 41 4c 45 14 80 00 00 00 00 41 4c 9e 5b 00 00 00 00 00 41 4c fc a7 00 00 00 00 00 41 4d 56 b1 80 00 00 00 00 41 4d ac f2 00 00 00 00 00 41 4e 12 de 80 00 00 00 00 41 4e 6b 88 80 00 00 00 00 41 4e bf 7b 00 00 00 00 00 41 4f 21 e4 00 00 00 00 00 41 4f 82 04 80 00 00 00 00 41 4f d4 10 80 00 00 00 00 41 50 1a 94 80 00 00 00 00 41 50 48 ce 40 00 00 00 00 41 50 70 de 80 00 00 00 00 41 50 9f 3a 40 00 00 00 00 41 50 cf 1d 80 00 00 00 00 41 50 fc a0 80 00 00 00 00 41 51 2b a4 80 00 00 00 00 41 51 58 7d 80 00 00 00 00 41 51 86 45 40 00 00 00 00 41 51 b6 0f 80 00 00 00 00 41 51 e6 71 40 00 00 00 00 41 52 10 8d 00 00 00 00 00 41 52 3c e0 40 00 00 00 00 41 52 6d 33 c0 00 00 00 00 41 52 96 68 40 00 00 00 00 41 52 c5 8a 40 00 00 00 00 41 52 f6 6a c0 00 00 00 00 41 53 25 4e 40 00 00 00 00 41 53 58 7d 80 00 00 00 00 41 53 85 b4 00 00 00 00 00 41 53 ba 0c 40 00 00 00 00 41 53 f4 6f c0 00 00 00 00 41 54 2d 9d c0 00 00 00 00 41 54 70 96 80 00 00 00 00 41 54 a7 13 80 00 00 00 00 41 54 d8 8f 00 00 00 00 00 41 55 0f ae 80 00 00 00 00 41 55 41 92 80 00 00 00 00");
+    std::shared_ptr<cygnal::Buffer> hex5(new Buffer("00 0a 6f 6e 4d 65 74 61 44 61 74 61 08 00 00 00 0a 00 08 64 75 72 61 74 69 6f 6e 00 40 82 5c fd f3 b6 45 a2 00 0d 76 69 64 65 6f 64 61 74 61 72 61 74 65 00 40 74 8a 51 f7 27 8d c5 00 15 6c 61 73 74 6b 65 79 66 72 61 6d 65 74 69 6d 65 73 74 61 6d 70 00 40 82 53 5a 1c ac 08 31 00 14 6c 61 73 74 6b 65 79 66 72 61 6d 65 6c 6f 63 61 74 69 6f 6e 00 41 77 01 7f 10 00 00 00 00 07 63 72 65 61 74 6f 72 02 00 0d 59 6f 75 54 75 62 65 2c 20 49 6e 63 2e 00 0f 6d 65 74 61 64 61 74 61 63 72 65 61 74 6f 72 02 00 1a 59 6f 75 54 75 62 65 20 4d 65 74 61 64 61 74 61 20 49 6e 6a 65 63 74 6f 72 2e 00 09 66 6c 76 73 6f 75 72 63 65 02 00 04 63 64 62 70 00 0c 68 61 73 6b 65 79 66 72 61 6d 65 73 01 01 00 0b 68 61 73 6d 65 74 61 64 61 74 61 01 01 00 09 6b 65 79 66 72 61 6d 65 73 03 00 05 74 69 6d 65 73 0a 00 00 01 33 00 00 00 00 00 00 00 00 00 00 3f ff 5c 28 f5 c2 8f 5c 00 40 0f 5e 35 3f 7c ed 91 00 40 17 86 24 dd 2f 1a a0 00 40 1f 5d 2f 1a 9f be 77 00 40 23 9a 1c ac 08 31 27 00 40 26 1b 22 d0 e5 60 42 00 40 26 30 20 c4 9b a5 e3 00 40 2a 1c 28 f5 c2 8f 5c 00 40 2e 07 ae 14 7a e1 48 00 40 30 f9 99 99 99 99 9a 00 40 32 ef 9d b2 2d 0e 56 00 40 34 e5 60 41 89 37 4c 00 40 36 db 22 d0 e5 60 42 00 40 38 d0 e5 60 41 89 37 00 40 3a c6 e9 78 d4 fd f4 00 40 3c bc ac 08 31 26 e9 00 40 3e b2 6e 97 8d 4f df 00 40 40 54 39 58 10 62 4e 00 40 41 4f 1a 9f be 76 c9 00 40 42 49 fb e7 6c 8b 44 00 40 43 44 dd 2f 1a 9f be 00 40 44 3f df 3b 64 5a 1d 00 40 45 3a c0 83 12 6e 98 00 40 46 35 a1 ca c0 83 12 00 40 47 30 a3 d7 0a 3d 71 00 40 48 2b 85 1e b8 51 ec 00 40 49 26 66 66 66 66 66 00 40 4a 21 68 72 b0 20 c5 00 40 4b 1c 49 ba 5e 35 3f 00 40 4c 17 2b 02 0c 49 ba 00 40 4d 12 0c 49 ba 5e 35 00 40 4e 0d 0e 56 04 18 93 00 40 4f 07 ef 9d b2 2d 0e 00 40 50 01 68 72 b0 20 c5 00 40 50 7e e9 78 d4 fd f4 00 40 50 fc 5a 1c ac 08 31 00 40 51 79 ca c0 83 12 6f 00 40 51 f7 3b 64 5a 1c ac 00 40 52 74 bc 6a 7e f9 db 00 40 52 f2 2d 0e 56 04 19 00 40 53 6f 9d b2 2d 0e 56 00 40 53 ed 1e b8 51 eb 85 00 40 54 6a 8f 5c 28 f5 c3 00 40 54 ea b0 20 c4 9b a6 00 40 55 68 20 c4 9b a5 e3 00 40 55 e5 a1 ca c0 83 12 00 40 56 63 12 6e 97 8d 50 00 40 56 e0 83 12 6e 97 8d 00 40 57 5d f3 b6 45 a1 cb 00 40 57 db 74 bc 6a 7e fa 00 40 58 58 e5 60 41 89 37 00 40 58 d6 56 04 18 93 75 00 40 59 53 d7 0a 3d 70 a4 00 40 59 d1 47 ae 14 7a e1 00 40 5a 4e b8 51 eb 85 1f 00 40 5a cc 28 f5 c2 8f 5c 00 40 5b 49 a9 fb e7 6c 8b 00 40 5b c7 1a 9f be 76 c9 00 40 5c 44 8b 43 95 81 06 00 40 5c c2 0c 49 ba 5e 35 00 40 5d 3f 7c ed 91 68 73 00 40 5d bc ed 91 68 72 b0 00 40 5e 3a 5e 35 3f 7c ee 00 40 5e b7 df 3b 64 5a 1d 00 40 5f 35 4f df 3b 64 5a 00 40 5f b2 c0 83 12 6e 98 00 40 60 18 20 c4 9b a5 e3 00 40 60 56 d9 16 87 2b 02 00 40 60 95 91 68 72 b0 21 00 40 60 d4 51 eb 85 1e b8 00 40 61 13 0a 3d 70 a3 d7 00 40 61 51 c2 8f 5c 28 f6 00 40 61 90 7a e1 47 ae 14 00 40 61 cf 3b 64 5a 1c ac 00 40 62 0d f3 b6 45 a1 cb 00 40 62 4c ac 08 31 26 e9 00 40 62 8b 6c 8b 43 95 81 00 40 62 ca 24 dd 2f 1a a0 00 40 63 08 dd 2f 1a 9f be 00 40 63 47 95 81 06 24 dd 00 40 63 86 56 04 18 93 75 00 40 63 c5 0e 56 04 18 93 00 40 64 03 c6 a7 ef 9d b2 00 40 64 42 87 2b 02 0c 4a 00 40 64 81 3f 7c ed 91 68 00 40 64 bf f7 ce d9 16 87 00 40 64 fe b0 20 c4 9b a6 00 40 65 3d 70 a3 d7 0a 3d 00 40 65 7c 28 f5 c2 8f 5c 00 40 65 ba e1 47 ae 14 7b 00 40 65 f9 a1 ca c0 83 12 00 40 66 38 5a 1c ac 08 31 00 40 66 77 12 6e 97 8d 50 00 40 66 b5 ca c0 83 12 6f 00 40 66 f4 8b 43 95 81 06 00 40 67 33 43 95 81 06 25 00 40 67 71 fb e7 6c 8b 44 00 40 67 b0 bc 6a 7e f9 db 00 40 67 ef 74 bc 6a 7e fa 00 40 68 2e 2d 0e 56 04 19 00 40 68 6c ed 91 68 72 b0 00 40 68 ab a5 e3 53 f7 cf 00 40 68 ea 5e 35 3f 7c ee 00 40 69 29 16 87 2b 02 0c 00 40 69 67 d7 0a 3d 70 a4 00 40 69 a6 8f 5c 28 f5 c3 00 40 69 e5 47 ae 14 7a e1 00 40 6a 24 08 31 26 e9 79 00 40 6a 62 c0 83 12 6e 98 00 40 6a a1 78 d4 fd f3 b6 00 40 6a e0 31 26 e9 78 d5 00 40 6b 15 99 99 99 99 9a 00 40 6b 24 49 ba 5e 35 3f 00 40 6b 63 02 0c 49 ba 5e 00 40 6b a1 ba 5e 35 3f 7d 00 40 6b e0 72 b0 20 c4 9c 00 40 6c 1f 33 33 33 33 33 00 40 6c 5d eb 85 1e b8 52 00 40 6c 9c a3 d7 0a 3d 71 00 40 6c db 64 5a 1c ac 08 00 40 6d 12 1c ac 08 31 27 00 40 6d 50 d4 fd f3 b6 46 00 40 6d 8f 8d 4f df 3b 64 00 40 6d ce 4d d2 f1 a9 fc 00 40 6e 0b ae 14 7a e1 48 00 40 6e 4a 66 66 66 66 66 00 40 6e 89 26 e9 78 d4 fe 00 40 6e c7 df 3b 64 5a 1d 00 40 6f 06 97 8d 4f df 3b 00 40 6f 39 4f df 3b 64 5a 00 40 6f 78 08 31 26 e9 79 00 40 6f b6 c8 b4 39 58 10 00 40 6f bc 20 c4 9b a5 e3 00 40 6f bd 70 a3 d7 0a 3d 00 40 6f fc 31 26 e9 78 d5 00 40 70 1d 74 bc 6a 7e fa 00 40 70 3c d0 e5 60 41 89 00 40 70 5c 31 26 e9 78 d5 00 40 70 7b 8d 4f df 3b 64 00 40 70 96 e9 78 d4 fd f4 00 40 70 98 3d 70 a3 d7 0a 00 40 70 b6 45 a1 ca c0 83 00 40 70 d5 a1 ca c0 83 12 00 40 70 f5 02 0c 49 ba 5e 00 40 71 14 5e 35 3f 7c ee 00 40 71 33 ba 5e 35 3f 7d 00 40 71 53 1a 9f be 76 c9 00 40 71 72 76 c8 b4 39 58 00 40 71 91 d2 f1 a9 fb e7 00 40 71 b1 2f 1a 9f be 77 00 40 71 d0 8f 5c 28 f5 c3 00 40 71 ef eb 85 1e b8 52 00 40 72 0f 47 ae 14 7a e1 00 40 72 2e a7 ef 9d b2 2d 00 40 72 4e 04 18 93 74 bc 00 40 72 6d 60 41 89 37 4c 00 40 72 8c bc 6a 7e f9 db 00 40 72 ac 1c ac 08 31 27 00 40 72 cb 78 d4 fd f3 b6 00 40 72 ea d4 fd f3 b6 46 00 40 73 0a 35 3f 7c ed 91 00 40 73 29 91 68 72 b0 21 00 40 73 48 ed 91 68 72 b0 00 40 73 68 4d d2 f1 a9 fc 00 40 73 87 a9 fb e7 6c 8b 00 40 73 a7 06 24 dd 2f 1b 00 40 73 c6 62 4d d2 f1 aa 00 40 73 e5 c2 8f 5c 28 f6 00 40 74 05 1e b8 51 eb 85 00 40 74 24 7a e1 47 ae 14 00 40 74 43 db 22 d0 e5 60 00 40 74 63 37 4b c6 a7 f0 00 40 74 82 93 74 bc 6a 7f 00 40 74 a1 ef 9d b2 2d 0e 00 40 74 c1 4f df 3b 64 5a 00 40 74 e0 ac 08 31 26 e9 00 40 75 00 08 31 26 e9 79 00 40 75 1f 68 72 b0 20 c5 00 40 75 3e c4 9b a5 e3 54 00 40 75 5e 20 c4 9b a5 e3 00 40 75 7d 81 06 24 dd 2f 00 40 75 9c dd 2f 1a 9f be 00 40 75 bc 39 58 10 62 4e 00 40 75 db 95 81 06 24 dd 00 40 75 fa f5 c2 8f 5c 29 00 40 76 1a 51 eb 85 1e b8 00 40 76 39 ae 14 7a e1 48 00 40 76 59 0e 56 04 18 93 00 40 76 78 6a 7e f9 db 23 00 40 76 97 c6 a7 ef 9d b2 00 40 76 b7 22 d0 e5 60 42 00 40 76 d6 83 12 6e 97 8d 00 40 76 f5 df 3b 64 5a 1d 00 40 77 15 3b 64 5a 1c ac 00 40 77 34 9b a5 e3 53 f8 00 40 77 53 f7 ce d9 16 87 00 40 77 73 53 f7 ce d9 17 00 40 77 92 b0 20 c4 9b a6 00 40 77 b2 10 62 4d d2 f2 00 40 77 d1 6c 8b 43 95 81 00 40 77 f0 c8 b4 39 58 10 00 40 78 10 28 f5 c2 8f 5c 00 40 78 2f 85 1e b8 51 ec 00 40 78 4e e1 47 ae 14 7b 00 40 78 6e 3d 70 a3 d7 0a 00 40 78 8d 9d b2 2d 0e 56 00 40 78 ac f9 db 22 d0 e5 00 40 78 cc 56 04 18 93 75 00 40 78 eb b6 45 a1 ca c1 00 40 79 0b 12 6e 97 8d 50 00 40 79 2a 6e 97 8d 4f df 00 40 79 49 ce d9 16 87 2b 00 40 79 69 2b 02 0c 49 ba 00 40 79 88 87 2b 02 0c 4a 00 40 79 a7 e3 53 f7 ce d9 00 40 79 c7 43 95 81 06 25 00 40 79 e6 9f be 76 c8 b4 00 40 7a 05 fb e7 6c 8b 44 00 40 7a 25 5c 28 f5 c2 8f 00 40 7a 44 b8 51 eb 85 1f 00 40 7a 64 14 7a e1 47 ae 00 40 7a 83 70 a3 d7 0a 3d 00 40 7a a2 d0 e5 60 41 89 00 40 7a c2 2d 0e 56 04 19 00 40 7a e1 89 37 4b c6 a8 00 40 7b 00 e9 78 d4 fd f4 00 40 7b 20 45 a1 ca c0 83 00 40 7b 3f a1 ca c0 83 12 00 40 7b 5f 02 0c 49 ba 5e 00 40 7b 7e 5e 35 3f 7c ee 00 40 7b 9d ba 5e 35 3f 7d 00 40 7b bd 16 87 2b 02 0c 00 40 7b dc 76 c8 b4 39 58 00 40 7b fb d2 f1 a9 fb e7 00 40 7c 1b 2f 1a 9f be 77 00 40 7c 3a 8f 5c 28 f5 c3 00 40 7c 59 eb 85 1e b8 52 00 40 7c 79 47 ae 14 7a e1 00 40 7c 98 a3 d7 0a 3d 71 00 40 7c b8 04 18 93 74 bc 00 40 7c d7 60 41 89 37 4c 00 40 7c f6 bc 6a 7e f9 db 00 40 7d 16 1c ac 08 31 27 00 40 7d 35 78 d4 fd f3 b6 00 40 7d 54 d4 fd f3 b6 46 00 40 7d 74 31 26 e9 78 d5 00 40 7d 93 91 68 72 b0 21 00 40 7d b2 ed 91 68 72 b0 00 40 7d d2 49 ba 5e 35 3f 00 40 7d f1 a9 fb e7 6c 8b 00 40 7e 11 06 24 dd 2f 1b 00 40 7e 30 62 4d d2 f1 aa 00 40 7e 4f c2 8f 5c 28 f6 00 40 7e 55 16 87 2b 02 0c 00 40 7e 74 72 b0 20 c4 9c 00 40 7e 93 d2 f1 a9 fb e7 00 40 7e b3 2f 1a 9f be 77 00 40 7e d2 8b 43 95 81 06 00 40 7e f1 eb 85 1e b8 52 00 40 7f 11 47 ae 14 7a e1 00 40 7f 30 a3 d7 0a 3d 71 00 40 7f 50 00 00 00 00 00 00 40 7f 6f 60 41 89 37 4c 00 40 7f 8e bc 6a 7e f9 db 00 40 7f ae 18 93 74 bc 6a 00 40 7f cd 78 d4 fd f3 b6 00 40 7f ec d4 fd f3 b6 46 00 40 80 06 18 93 74 bc 6a 00 40 80 15 c8 b4 39 58 10 00 40 80 25 76 c8 b4 39 58 00 40 80 35 24 dd 2f 1a a0 00 40 80 44 d2 f1 a9 fb e7 00 40 80 54 83 12 6e 97 8d 00 40 80 64 31 26 e9 78 d5 00 40 80 73 df 3b 64 5a 1d 00 40 80 83 8f 5c 28 f5 c3 00 40 80 93 3d 70 a3 d7 0a 00 40 80 a2 eb 85 1e b8 52 00 40 80 b2 99 99 99 99 9a 00 40 80 c2 49 ba 5e 35 3f 00 40 80 d1 f7 ce d9 16 87 00 40 80 e1 a5 e3 53 f7 cf 00 40 80 f1 56 04 18 93 75 00 40 81 01 04 18 93 74 bc 00 40 81 10 b2 2d 0e 56 04 00 40 81 20 62 4d d2 f1 aa 00 40 81 30 10 62 4d d2 f2 00 40 81 3f be 76 c8 b4 39 00 40 81 4f 6c 8b 43 95 81 00 40 81 5f 1c ac 08 31 27 00 40 81 6e ca c0 83 12 6f 00 40 81 7e 78 d4 fd f3 b6 00 40 81 8e 28 f5 c2 8f 5c 00 40 81 9d d7 0a 3d 70 a4 00 40 81 ad 85 1e b8 51 ec 00 40 81 bd 33 33 33 33 33 00 40 81 cc e3 53 f7 ce d9 00 40 81 dc 91 68 72 b0 21 00 40 81 ec 3f 7c ed 91 68 00 40 81 fb ef 9d b2 2d 0e 00 40 82 0b 9d b2 2d 0e 56 00 40 82 1b 4b c6 a7 ef 9e 00 40 82 2a f9 db 22 d0 e5 00 40 82 33 fd f3 b6 45 a2 00 40 82 43 ac 08 31 26 e9 00 40 82 53 5a 1c ac 08 31 00 0d 66 69 6c 65 70 6f 73 69 74 69 6f 6e 73 0a 00 00 01 33 00 40 b6 d2 00 00 00 00 00 00 40 db 4f 80 00 00 00 00 00 40 f0 67 e0 00 00 00 00 00 40 f8 41 50 00 00 00 00 00 41 00 30 98 00 00 00 00 00 41 04 fd 28 00 00 00 00 00 41 07 a2 10 00 00 00 00 00 41 07 e6 68 00 00 00 00 00 41 11 da 7c 00 00 00 00 00 41 16 a7 dc 00 00 00 00 00 41 1b 35 6c 00 00 00 00 00 41 1f d4 bc 00 00 00 00 00 41 22 4b 5e 00 00 00 00 00 41 24 ab 78 00 00 00 00 00 41 27 20 e8 00 00 00 00 00 41 29 a7 04 00 00 00 00 00 41 2c 14 f6 00 00 00 00 00 41 2e 82 f8 00 00 00 00 00 41 30 a9 29 00 00 00 00 00 41 32 1f e6 00 00 00 00 00 41 33 69 a0 00 00 00 00 00 41 34 cb df 00 00 00 00 00 41 36 33 96 00 00 00 00 00 41 37 94 db 00 00 00 00 00 41 38 e2 54 00 00 00 00 00 41 3a 4d 10 00 00 00 00 00 41 3b a4 1e 00 00 00 00 00 41 3d 31 ba 00 00 00 00 00 41 3e b3 75 00 00 00 00 00 41 40 09 72 80 00 00 00 00 41 40 a7 34 00 00 00 00 00 41 41 1f bf 80 00 00 00 00 41 41 a1 79 80 00 00 00 00 41 42 27 3c 80 00 00 00 00 41 42 b0 11 00 00 00 00 00 41 43 3c 27 80 00 00 00 00 41 43 c6 d7 80 00 00 00 00 41 44 4e 36 80 00 00 00 00 41 44 d9 50 80 00 00 00 00 41 45 60 9f 00 00 00 00 00 41 45 c5 39 80 00 00 00 00 41 46 00 9d 00 00 00 00 00 41 46 32 5e 00 00 00 00 00 41 46 64 c6 00 00 00 00 00 41 46 c3 cc 00 00 00 00 00 41 47 5a 90 80 00 00 00 00 41 48 00 08 80 00 00 00 00 41 48 cd 6d 80 00 00 00 00 41 49 98 39 80 00 00 00 00 41 4a 5b 8b 80 00 00 00 00 41 4b 2c db 00 00 00 00 00 41 4c 0f 67 00 00 00 00 00 41 4c ed c9 80 00 00 00 00 41 4d c9 d3 80 00 00 00 00 41 4e a7 83 80 00 00 00 00 41 4f 82 e1 00 00 00 00 00 41 50 2a 2b 00 00 00 00 00 41 50 89 39 c0 00 00 00 00 41 50 df 38 40 00 00 00 00 41 51 37 93 40 00 00 00 00 41 51 9c 32 80 00 00 00 00 41 52 0b 0b c0 00 00 00 00 41 52 68 52 80 00 00 00 00 41 52 bb 21 80 00 00 00 00 41 53 08 7d c0 00 00 00 00 41 53 5a 6b c0 00 00 00 00 41 53 ab e1 00 00 00 00 00 41 53 fc d3 c0 00 00 00 00 41 54 4b b2 40 00 00 00 00 41 54 97 2d 40 00 00 00 00 41 54 dd d1 40 00 00 00 00 41 55 28 c8 40 00 00 00 00 41 55 74 d6 c0 00 00 00 00 41 55 c6 28 40 00 00 00 00 41 56 11 3a 40 00 00 00 00 41 56 5b a7 40 00 00 00 00 41 56 c2 97 80 00 00 00 00 41 57 18 d0 00 00 00 00 00 41 57 6f 38 00 00 00 00 00 41 57 c1 05 80 00 00 00 00 41 58 0e f9 40 00 00 00 00 41 58 61 d9 40 00 00 00 00 41 58 be 21 c0 00 00 00 00 41 59 1b a3 00 00 00 00 00 41 59 7d b7 80 00 00 00 00 41 59 de c4 80 00 00 00 00 41 5a 38 6f c0 00 00 00 00 41 5a 97 be 40 00 00 00 00 41 5b 06 5f 00 00 00 00 00 41 5b 7b 62 80 00 00 00 00 41 5b e8 4c c0 00 00 00 00 41 5c 59 4c 40 00 00 00 00 41 5c c6 99 00 00 00 00 00 41 5d 37 eb 00 00 00 00 00 41 5d a1 4a 00 00 00 00 00 41 5e 05 00 00 00 00 00 00 41 5e 69 d8 00 00 00 00 00 41 5e d1 e9 80 00 00 00 00 41 5f 35 61 80 00 00 00 00 41 5f 99 a3 80 00 00 00 00 41 5f f8 ea 40 00 00 00 00 41 60 2a b8 c0 00 00 00 00 41 60 5c 12 40 00 00 00 00 41 60 90 a9 60 00 00 00 00 41 60 c6 b7 c0 00 00 00 00 41 60 fe 01 00 00 00 00 00 41 61 31 40 00 00 00 00 00 41 61 5e 86 00 00 00 00 00 41 61 8a fc a0 00 00 00 00 41 61 b9 43 00 00 00 00 00 41 61 e7 16 80 00 00 00 00 41 62 17 b3 80 00 00 00 00 41 62 40 7d 40 00 00 00 00 41 62 44 d4 60 00 00 00 00 41 62 72 5d 00 00 00 00 00 41 62 a4 b7 00 00 00 00 00 41 62 e2 3d a0 00 00 00 00 41 63 1c b5 a0 00 00 00 00 41 63 59 85 c0 00 00 00 00 41 63 91 80 00 00 00 00 00 41 63 c4 75 c0 00 00 00 00 41 63 f6 d6 20 00 00 00 00 41 64 1a 9d 80 00 00 00 00 41 64 42 0c e0 00 00 00 00 41 64 66 c9 a0 00 00 00 00 41 64 86 97 80 00 00 00 00 41 64 a7 b3 e0 00 00 00 00 41 64 ca 51 a0 00 00 00 00 41 64 ed 31 60 00 00 00 00 41 65 18 18 60 00 00 00 00 41 65 42 43 00 00 00 00 00 41 65 70 d6 00 00 00 00 00 41 65 a0 a8 00 00 00 00 00 41 65 a5 0d 40 00 00 00 00 41 65 a6 30 a0 00 00 00 00 41 65 c8 96 40 00 00 00 00 41 65 e5 8e 80 00 00 00 00 41 66 05 ed 20 00 00 00 00 41 66 24 bc 40 00 00 00 00 41 66 3f a7 00 00 00 00 00 41 66 5d 8e c0 00 00 00 00 41 66 5f 95 40 00 00 00 00 41 66 85 5a c0 00 00 00 00 41 66 ac 52 20 00 00 00 00 41 66 d3 8b e0 00 00 00 00 41 66 fa e4 00 00 00 00 00 41 67 24 d0 c0 00 00 00 00 41 67 4e d9 c0 00 00 00 00 41 67 7a 55 a0 00 00 00 00 41 67 a3 1d e0 00 00 00 00 41 67 cb f9 40 00 00 00 00 41 67 f7 24 e0 00 00 00 00 41 68 23 ce a0 00 00 00 00 41 68 3c fb 00 00 00 00 00 41 68 5d f1 00 00 00 00 00 41 68 7d 50 40 00 00 00 00 41 68 9a 37 40 00 00 00 00 41 68 b6 4b a0 00 00 00 00 41 68 d6 08 c0 00 00 00 00 41 68 f7 fd e0 00 00 00 00 41 69 1a 44 c0 00 00 00 00 41 69 3a 2a 80 00 00 00 00 41 69 5c 07 20 00 00 00 00 41 69 7e ec 20 00 00 00 00 41 69 9e 44 20 00 00 00 00 41 69 b8 f3 c0 00 00 00 00 41 69 d5 ec 40 00 00 00 00 41 69 f3 d9 00 00 00 00 00 41 6a 10 74 e0 00 00 00 00 41 6a 2d 33 00 00 00 00 00 41 6a 4b 9e a0 00 00 00 00 41 6a 72 eb 00 00 00 00 00 41 6a 9b fd 40 00 00 00 00 41 6a cd 8e e0 00 00 00 00 41 6b 01 aa 60 00 00 00 00 41 6b 33 d5 a0 00 00 00 00 41 6b 64 ca a0 00 00 00 00 41 6b 8f 90 00 00 00 00 00 41 6b bf f1 00 00 00 00 00 41 6b f0 4f 20 00 00 00 00 41 6c 1d 1f c0 00 00 00 00 41 6c 47 b7 00 00 00 00 00 41 6c 72 ee e0 00 00 00 00 41 6c 9a dc 60 00 00 00 00 41 6c c0 04 a0 00 00 00 00 41 6c e1 5a a0 00 00 00 00 41 6d 03 4f e0 00 00 00 00 41 6d 28 24 60 00 00 00 00 41 6d 4c da e0 00 00 00 00 41 6d 71 93 80 00 00 00 00 41 6d 99 50 00 00 00 00 00 41 6d c0 4f e0 00 00 00 00 41 6d e5 c9 40 00 00 00 00 41 6e 08 fe c0 00 00 00 00 41 6e 2d 90 c0 00 00 00 00 41 6e 48 6a 40 00 00 00 00 41 6e 7b 65 40 00 00 00 00 41 6e ab 11 c0 00 00 00 00 41 6e e1 0e 00 00 00 00 00 41 6f 18 8b 00 00 00 00 00 41 6f 4c 1d 60 00 00 00 00 41 6f 7c 8f 00 00 00 00 00 41 6f ad 1e 20 00 00 00 00 41 6f dd 1e 60 00 00 00 00 41 70 06 b0 60 00 00 00 00 41 70 1d 3c 70 00 00 00 00 41 70 33 e5 60 00 00 00 00 41 70 49 a9 00 00 00 00 00 41 70 5d 8d f0 00 00 00 00 41 70 71 9c 80 00 00 00 00 41 70 84 c4 c0 00 00 00 00 41 70 99 79 30 00 00 00 00 41 70 ac ec 30 00 00 00 00 41 70 c0 bd f0 00 00 00 00 41 70 d5 bb 00 00 00 00 00 41 70 ea c4 a0 00 00 00 00 41 70 ff 77 10 00 00 00 00 41 71 13 be 30 00 00 00 00 41 71 28 10 40 00 00 00 00 41 71 3c e0 10 00 00 00 00 41 71 52 e4 b0 00 00 00 00 41 71 6a 7f 70 00 00 00 00 41 71 81 b6 20 00 00 00 00 41 71 97 a1 d0 00 00 00 00 41 71 ae 53 b0 00 00 00 00 41 71 c4 2a 50 00 00 00 00 41 71 d9 b0 30 00 00 00 00 41 71 ef 51 20 00 00 00 00 41 72 05 34 90 00 00 00 00 41 72 1b 83 f0 00 00 00 00 41 72 30 d1 e0 00 00 00 00 41 72 45 bc 00 00 00 00 00 41 72 5d 36 00 00 00 00 00 41 72 73 aa 30 00 00 00 00 41 72 89 37 20 00 00 00 00 41 72 9d b9 50 00 00 00 00 41 72 b1 3c 50 00 00 00 00 41 72 c6 08 40 00 00 00 00 41 72 da dc 60 00 00 00 00 41 72 ef 73 a0 00 00 00 00 41 73 05 1b c0 00 00 00 00 41 73 1a bc 80 00 00 00 00 41 73 2f fb c0 00 00 00 00 41 73 46 ff 30 00 00 00 00 41 73 5d 18 00 00 00 00 00 41 73 75 51 60 00 00 00 00 41 73 8a df 80 00 00 00 00 41 73 a0 69 d0 00 00 00 00 41 73 b6 e4 b0 00 00 00 00 41 73 ce 66 50 00 00 00 00 41 73 e5 91 b0 00 00 00 00 41 73 fa 77 50 00 00 00 00 41 74 0f 1a f0 00 00 00 00 41 74 24 e8 10 00 00 00 00 41 74 29 e9 a0 00 00 00 00 41 74 37 50 10 00 00 00 00 41 74 40 3f b0 00 00 00 00 41 74 49 41 40 00 00 00 00 41 74 53 1b 60 00 00 00 00 41 74 5e 1c 30 00 00 00 00 41 74 68 73 80 00 00 00 00 41 74 72 4d d0 00 00 00 00 41 74 7c 61 40 00 00 00 00 41 74 87 63 20 00 00 00 00 41 74 92 10 e0 00 00 00 00 41 74 9b 9a d0 00 00 00 00 41 74 a7 96 70 00 00 00 00 41 74 b0 93 20 00 00 00 00 41 74 be 44 70 00 00 00 00 41 74 c5 96 e0 00 00 00 00 41 74 d2 f4 70 00 00 00 00 41 74 e3 19 00 00 00 00 00 41 74 f3 c5 30 00 00 00 00 41 75 04 72 d0 00 00 00 00 41 75 15 c5 00 00 00 00 00 41 75 28 b8 30 00 00 00 00 41 75 3b eb 10 00 00 00 00 41 75 4f 45 40 00 00 00 00 41 75 63 1e b0 00 00 00 00 41 75 77 6e e0 00 00 00 00 41 75 8b af 50 00 00 00 00 41 75 9e ed 40 00 00 00 00 41 75 b2 1d 80 00 00 00 00 41 75 c5 66 90 00 00 00 00 41 75 d9 14 c0 00 00 00 00 41 75 ec aa 20 00 00 00 00 41 75 ff 1d 90 00 00 00 00 41 76 10 ed 90 00 00 00 00 41 76 23 32 20 00 00 00 00 41 76 38 3d 20 00 00 00 00 41 76 50 26 60 00 00 00 00 41 76 68 93 f0 00 00 00 00 41 76 7b eb d0 00 00 00 00 41 76 83 d6 d0 00 00 00 00 41 76 8f 6a 90 00 00 00 00 41 76 97 5c 00 00 00 00 00 41 76 9f 4a 40 00 00 00 00 41 76 a7 37 00 00 00 00 00 41 76 af 9f f0 00 00 00 00 41 76 c2 85 f0 00 00 00 00 41 76 cb f1 70 00 00 00 00 41 76 d5 56 00 00 00 00 00 41 76 de b9 30 00 00 00 00 41 76 e8 17 90 00 00 00 00 41 76 f4 57 c0 00 00 00 00 41 76 fb 87 20 00 00 00 00 41 77 01 7f 10 00 00 00 00"));
+//    std::shared_ptr<cygnal::Buffer> hex5 = hex2mem("00 0a 6f 6e 4d 65 74 61 44 61 74 61 08 00 00 00 0a 00 08 64 75 72 61 74 69 6f 6e 00 40 6e 47 74 bc 6a 7e fa 00 0d 76 69 64 65 6f 64 61 74 61 72 61 74 65 00 40 67 28 32 e3 7f 02 e6 00 15 6c 61 73 74 6b 65 79 66 72 61 6d 65 74 69 6d 65 73 74 61 6d 70 00 40 6e 03 2b 02 0c 49 ba 00 14 6c 61 73 74 6b 65 79 66 72 61 6d 65 6c 6f 63 61 74 69 6f 6e 00 41 55 41 92 80 00 00 00 00 07 63 72 65 61 74 6f 72 02 00 0d 59 6f 75 54 75 62 65 2c 20 49 6e 63 2e 00 0f 6d 65 74 61 64 61 74 61 63 72 65 61 74 6f 72 02 00 1a 59 6f 75 54 75 62 65 20 4d 65 74 61 64 61 74 61 20 49 6e 6a 65 63 74 6f 72 2e 00 09 66 6c 76 73 6f 75 72 63 65 02 00 04 63 64 62 70 00 0c 68 61 73 6b 65 79 66 72 61 6d 65 73 01 01 00 0b 68 61 73 6d 65 74 61 64 61 74 61 01 01 00 09 6b 65 79 66 72 61 6d 65 73 03 00 05 74 69 6d 65 73 0a 00 00 00 7a 00 00 00 00 00 00 00 00 00 00 40 00 16 87 2b 02 0c 4a 00 40 0c be 76 c8 b4 39 58 00 40 14 92 6e 97 8d 4f df 00 40 1b 8f 5c 28 f5 c2 8f 00 40 20 49 37 4b c6 a7 f0 00 40 23 d8 93 74 bc 6a 7f 00 40 27 57 0a 3d 70 a3 d7 00 40 2a a3 53 f7 ce d9 17 00 40 2d de 35 3f 7c ed 91 00 40 30 9d 70 a3 d7 0a 3d 00 40 32 b1 26 e9 78 d4 fe 00 40 34 13 b6 45 a1 ca c1 00 40 36 05 a1 ca c0 83 12 00 40 37 ab 85 1e b8 51 ec 00 40 39 05 a1 ca c0 83 12 00 40 3a cd 4f df 3b 64 5a 00 40 3c 5a 1c ac 08 31 27 00 40 3e 21 ca c0 83 12 6f 00 40 3f c7 ae 14 7a e1 48 00 40 40 9d 91 68 72 b0 21 00 40 41 8e 14 7a e1 47 ae 00 40 42 82 d0 e5 60 41 89 00 40 43 62 6e 97 8d 4f df 00 40 44 4e b8 51 eb 85 1f 00 40 44 ef 1a 9f be 76 c9 00 40 45 ec 49 ba 5e 35 3f 00 40 46 ed b2 2d 0e 56 04 00 40 47 a7 6c 8b 43 95 81 00 40 48 8f 7c ed 91 68 73 00 40 49 80 00 00 00 00 00 00 40 4a 78 f5 c2 8f 5c 29 00 40 4b 61 06 24 dd 2f 1b 00 40 4c 99 58 10 62 4d d3 00 40 4d 5f 9d b2 2d 0e 56 00 40 4e 54 5a 1c ac 08 31 00 40 4f 44 dd 2f 1a 9f be 00 40 50 1e f9 db 22 d0 e5 00 40 50 8a 8f 5c 28 f5 c3 00 40 50 f1 eb 85 1e b8 52 00 40 51 7d 2f 1a 9f be 77 00 40 51 e0 51 eb 85 1e b8 00 40 52 84 ed 91 68 72 b0 00 40 53 01 68 72 b0 20 c5 00 40 53 82 1c ac 08 31 27 00 40 53 fa 5e 35 3f 7c ee 00 40 54 70 83 12 6e 97 8d 00 40 54 d3 b6 45 a1 ca c1 00 40 55 3d 2f 1a 9f be 77 00 40 55 ce c8 b4 39 58 10 00 40 56 3e 97 8d 4f df 3b 00 40 56 bb 12 6e 97 8d 50 00 40 57 2f 1a 9f be 76 c9 00 40 57 af ce d9 16 87 2b 00 40 58 28 10 62 4d d2 f2 00 40 58 af 1a 9f be 76 c9 00 40 59 1a c0 83 12 6e 98 00 40 59 95 1e b8 51 eb 85 00 40 5a 07 0a 3d 70 a3 d7 00 40 5a 96 87 2b 02 0c 4a 00 40 5b 21 ba 5e 35 3f 7d 00 40 5b 93 b6 45 a1 ca c1 00 40 5b ff 4b c6 a7 ef 9e 00 40 5c 88 72 b0 20 c4 9c 00 40 5c fa 5e 35 3f 7c ee 00 40 5d 76 d9 16 87 2b 02 00 40 5d e4 8b 43 95 81 06 00 40 5e 6b 95 81 06 24 dd 00 40 5e f8 f5 c2 8f 5c 29 00 40 5f 8e c8 b4 39 58 10 00 40 60 0a e9 78 d4 fd f4 00 40 60 47 0a 3d 70 a3 d7 00 40 60 89 81 06 24 dd 2f 00 40 60 c8 cc cc cc cc cd 00 40 61 00 b4 39 58 10 62 00 40 61 49 81 06 24 dd 2f 00 40 61 91 37 4b c6 a7 f0 00 40 61 e3 85 1e b8 51 ec 00 40 62 43 85 1e b8 51 ec 00 40 62 7d 89 37 4b c6 a8 00 40 62 c9 81 06 24 dd 2f 00 40 63 12 45 a1 ca c0 83 00 40 63 5c 20 c4 9b a5 e3 00 40 63 9b 6c 8b 43 95 81 00 40 63 db c6 a7 ef 9d b2 00 40 64 16 d9 16 87 2b 02 00 40 64 55 16 87 2b 02 0c 00 40 64 8e 14 7a e1 47 ae 00 40 64 d7 e7 6c 8b 43 96 00 40 65 18 41 89 37 4b c7 00 40 65 51 37 4b c6 a7 f0 00 40 65 9e 3d 70 a3 d7 0a 00 40 65 e2 d0 e5 60 41 89 00 40 66 14 62 4d d2 f1 aa 00 40 66 60 5a 1c ac 08 31 00 40 66 a1 c2 8f 5c 28 f6 00 40 66 d9 a9 fb e7 6c 8b 00 40 67 1e 3d 70 a3 d7 0a 00 40 67 67 0a 3d 70 a3 d7 00 40 67 a9 81 06 24 dd 2f 00 40 67 f7 8d 4f df 3b 64 00 40 68 43 85 1e b8 51 ec 00 40 68 89 26 e9 78 d4 fe 00 40 68 d9 4f df 3b 64 5a 00 40 69 29 81 06 24 dd 2f 00 40 69 68 cc cc cc cc cd 00 40 69 aa 35 3f 7c ed 91 00 40 69 fc 7a e1 47 ae 14 00 40 6a 31 37 4b c6 a7 f0 00 40 6a 7c 20 c4 9b a5 e3 00 40 6a d0 83 12 6e 97 8d 00 40 6b 1e 97 8d 4f df 3b 00 40 6b 70 dd 2f 1a 9f be 00 40 6b aa e9 78 d4 fd f4 00 40 6b f6 d9 16 87 2b 02 00 40 6c 40 b4 39 58 10 62 00 40 6c 80 00 00 00 00 00 00 40 6c d2 45 a1 ca c0 83 00 40 6d 20 5a 1c ac 08 31 00 40 6d 68 18 93 74 bc 6a 00 40 6d b6 24 dd 2f 1a a0 00 40 6e 03 2b 02 0c 49 ba 00 0d 66 69 6c 65 70 6f 73 69 74 69 6f 6e 73 0a 00 00 00 7a 00 40 a3 a0 00 00 00 00 00 00 40 e6 1a 40 00 00 00 00 00 40 f4 b9 40 00 00 00 00 00 40 fe 2a 10 00 00 00 00 00 41 04 6d b8 00 00 00 00 00 41 09 13 30 00 00 00 00 00 41 0e 65 48 00 00 00 00 00 41 11 ac 10 00 00 00 00 00 41 14 60 bc 00 00 00 00 00 41 17 09 38 00 00 00 00 00 41 19 ce f4 00 00 00 00 00 41 1c 7a 90 00 00 00 00 00 41 1e e9 4c 00 00 00 00 00 41 21 0d 16 00 00 00 00 00 41 22 84 dc 00 00 00 00 00 41 23 bb be 00 00 00 00 00 41 25 2d b6 00 00 00 00 00 41 26 76 5e 00 00 00 00 00 41 27 d8 50 00 00 00 00 00 41 29 44 e6 00 00 00 00 00 41 2a 90 6e 00 00 00 00 00 41 2b e5 2c 00 00 00 00 00 41 2d 27 36 00 00 00 00 00 41 2e 65 fe 00 00 00 00 00 41 2f c3 02 00 00 00 00 00 41 30 73 07 00 00 00 00 00 41 31 26 69 00 00 00 00 00 41 31 d5 84 00 00 00 00 00 41 32 67 fc 00 00 00 00 00 41 33 0f c8 00 00 00 00 00 41 33 c3 ec 00 00 00 00 00 41 34 75 9c 00 00 00 00 00 41 35 29 c6 00 00 00 00 00 41 35 f8 37 00 00 00 00 00 41 36 99 17 00 00 00 00 00 41 37 4d 7f 00 00 00 00 00 41 37 fb e3 00 00 00 00 00 41 38 a0 fc 00 00 00 00 00 41 39 46 90 00 00 00 00 00 41 39 e7 17 00 00 00 00 00 41 3a 9c dc 00 00 00 00 00 41 3b 40 c0 00 00 00 00 00 41 3c 0e ff 00 00 00 00 00 41 3c bb e0 00 00 00 00 00 41 3d 77 91 00 00 00 00 00 41 3e 26 48 00 00 00 00 00 41 3e d2 57 00 00 00 00 00 41 3f 79 f2 00 00 00 00 00 41 40 13 eb 80 00 00 00 00 41 40 6e 58 00 00 00 00 00 41 40 c1 2d 80 00 00 00 00 41 41 17 c0 80 00 00 00 00 41 41 6b 52 80 00 00 00 00 41 41 c5 2e 00 00 00 00 00 41 42 17 da 80 00 00 00 00 41 42 76 36 00 00 00 00 00 41 42 c7 be 00 00 00 00 00 41 43 25 e5 80 00 00 00 00 41 43 7a b1 00 00 00 00 00 41 43 d4 07 80 00 00 00 00 41 44 2c e0 00 00 00 00 00 41 44 7d fe 00 00 00 00 00 41 44 d0 61 80 00 00 00 00 41 45 27 55 00 00 00 00 00 41 45 7c c3 80 00 00 00 00 41 45 d4 0a 00 00 00 00 00 41 46 24 09 80 00 00 00 00 41 46 7a 64 80 00 00 00 00 41 46 d8 6d 00 00 00 00 00 41 47 39 0a 80 00 00 00 00 41 47 94 d5 00 00 00 00 00 41 47 e8 6d 00 00 00 00 00 41 48 3f f1 80 00 00 00 00 41 48 a0 5e 80 00 00 00 00 41 48 f4 7d 00 00 00 00 00 41 49 52 36 00 00 00 00 00 41 49 b4 80 00 00 00 00 00 41 4a 1b 96 80 00 00 00 00 41 4a 86 8c 00 00 00 00 00 41 4a d6 96 00 00 00 00 00 41 4b 34 06 80 00 00 00 00 41 4b 8d 4b 80 00 00 00 00 41 4b ee 20 00 00 00 00 00 41 4c 45 14 80 00 00 00 00 41 4c 9e 5b 00 00 00 00 00 41 4c fc a7 00 00 00 00 00 41 4d 56 b1 80 00 00 00 00 41 4d ac f2 00 00 00 00 00 41 4e 12 de 80 00 00 00 00 41 4e 6b 88 80 00 00 00 00 41 4e bf 7b 00 00 00 00 00 41 4f 21 e4 00 00 00 00 00 41 4f 82 04 80 00 00 00 00 41 4f d4 10 80 00 00 00 00 41 50 1a 94 80 00 00 00 00 41 50 48 ce 40 00 00 00 00 41 50 70 de 80 00 00 00 00 41 50 9f 3a 40 00 00 00 00 41 50 cf 1d 80 00 00 00 00 41 50 fc a0 80 00 00 00 00 41 51 2b a4 80 00 00 00 00 41 51 58 7d 80 00 00 00 00 41 51 86 45 40 00 00 00 00 41 51 b6 0f 80 00 00 00 00 41 51 e6 71 40 00 00 00 00 41 52 10 8d 00 00 00 00 00 41 52 3c e0 40 00 00 00 00 41 52 6d 33 c0 00 00 00 00 41 52 96 68 40 00 00 00 00 41 52 c5 8a 40 00 00 00 00 41 52 f6 6a c0 00 00 00 00 41 53 25 4e 40 00 00 00 00 41 53 58 7d 80 00 00 00 00 41 53 85 b4 00 00 00 00 00 41 53 ba 0c 40 00 00 00 00 41 53 f4 6f c0 00 00 00 00 41 54 2d 9d c0 00 00 00 00 41 54 70 96 80 00 00 00 00 41 54 a7 13 80 00 00 00 00 41 54 d8 8f 00 00 00 00 00 41 55 0f ae 80 00 00 00 00 41 55 41 92 80 00 00 00 00");
     Element *el5 = flv.decodeMetaData(hex5);
     if (el5 == 0) {
         notest = true;
diff --git a/cygnal/testsuite/libamf.all/test_lc.cpp b/cygnal/testsuite/libamf.all/test_lc.cpp
index 8079bc9..ed1e740 100644
--- a/cygnal/testsuite/libamf.all/test_lc.cpp
+++ b/cygnal/testsuite/libamf.all/test_lc.cpp
@@ -187,7 +187,7 @@ test_listen()
     
     Listener list(reinterpret_cast<uint8_t *>(shmaddr));
     vector<string>::const_iterator it;
-    auto_ptr< vector<string> > listeners ( list.listListeners() );
+    unique_ptr< vector<string> > listeners ( list.listListeners() );
     if (listeners->size() == 0) {
         cout << "Nobody is listening" << endl;
     } else {
@@ -329,7 +329,7 @@ test_read()
     
     Listener list(reinterpret_cast<uint8_t *>(shmaddr));
     vector<string>::const_iterator it;
-    auto_ptr< vector<string> > listeners ( list.listListeners() );
+    unique_ptr< vector<string> > listeners ( list.listListeners() );
     if (listeners->size() == 0) {
         cout << "Nobody is listening" << endl;
     } else {
@@ -363,7 +363,7 @@ test_read()
         }
     }
 
-//    boost::uint8_t *ptr = lc.parseHeader(reinterpret_cast<boost::uint8_t *>(shmaddr));
+//    std::uint8_t *ptr = lc.parseHeader(reinterpret_cast<std::uint8_t *>(shmaddr));
 //    vector<cygnal::Element *> ellist = lc.parseBody(ptr);
 //    cout << "# of AMF Elements in file: " << ellist.size() << endl;
 //    lc.dump();
@@ -397,7 +397,7 @@ test_write()
         runtest.fail("gain set");
     }
 
-    boost::uint8_t *foo = amf_obj.encodeVariable(el); 
+    std::uint8_t *foo = amf_obj.encodeVariable(el);
     char *ptr = (char *)amf_obj.extractVariable(&newel, foo);
     if ((el.name == newel.name) &&
         (el.length == newel.length) &&
@@ -596,7 +596,7 @@ int main(int /*argc*/, char **/* argv[]*/)
     addListener(str1);
     
     vector<string>::const_iterator it;
-    auto_ptr< vector<string> > listeners ( listListeners() );
+    unique_ptr< vector<string> > listeners ( listListeners() );
     if (listeners->empty()) {
         log_debug("Nobody is listening");
     } else {
diff --git a/cygnal/testsuite/libamf.all/test_number.cpp b/cygnal/testsuite/libamf.all/test_number.cpp
index dc39824..f9cbecc 100644
--- a/cygnal/testsuite/libamf.all/test_number.cpp
+++ b/cygnal/testsuite/libamf.all/test_number.cpp
@@ -91,7 +91,7 @@ test_amf()
     int fd, ret;
     double num;
     Element el;
-    boost::uint8_t *ptr;
+    std::uint8_t *ptr;
     
     char *buf[AMF_NUMBER_SIZE+1];
     memset(buf, 0, AMF_NUMBER_SIZE+1);
@@ -102,7 +102,7 @@ test_amf()
     close(fd);
 
 //    num = amf_obj.extractNumber(buf);
-    ptr = amf_obj.extractVariable(&el, reinterpret_cast<boost::uint8_t *>(buf));
+    ptr = amf_obj.extractVariable(&el, reinterpret_cast<std::uint8_t *>(buf));
     
     if (el.getType() == Element::NUMBER) {
         runtest.pass("Extracted Number AMF object");
diff --git a/cygnal/testsuite/libamf.all/test_sol.cpp b/cygnal/testsuite/libamf.all/test_sol.cpp
index 9b146c7..7932ec8 100644
--- a/cygnal/testsuite/libamf.all/test_sol.cpp
+++ b/cygnal/testsuite/libamf.all/test_sol.cpp
@@ -22,7 +22,6 @@
 #ifdef HAVE_DEJAGNU_H
 
 //#include <netinet/in.h>
-#include <boost/shared_ptr.hpp>
 #include <string>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -142,12 +141,12 @@ test_read(std::string &filespec)
     GNASH_REPORT_FUNCTION;
     struct stat st;
 
-    boost::shared_ptr<Buffer> hex1(new Buffer("00 bf 00 00 01 28 54 43 53 4f 00 04 00 00 00 00 00 08 73 65 74 74 69 6e 67 73 00 00 00 00 00 04 67 61 69 6e 00 40 49 00 00 00 00 00 00 00 00 0f 65 63 68 6f 73 75 70 70 72 65 73 73 69 6f 6e 01 00 00 00 11 64 65 66 61 75 6c 74 6d 69 63 72 6f 70 68 6f 6e 65 02 00 0e 2f 64 65 76 2f 69 6e 70 75 74 2f 6d 69 63 00 00 0d 64 65 66 61 75 6c 74 63 61 6d 65 72 61 02 00 00 00 00 0d 64 65 66 61 75 6c 74 6b 6c 69 6d 69 74 00 40 59 00 00 00 00 00 00 00 00 0d 64 65 66 61 75 6c 74 61 6c 77 61 79 73 01 00 00 00 10 63 72 6f 73 73 64 6f 6d 61 69 6e 41 6c 6c 6f 77 01 01 00 00 11 63 72 6f 73 73 64 6f 6d 61 69 6e 41 6c 77 61 79 73 01 01 00 00 18 61 6c 6c 6f 77 54 68 69 72 64 50 61 72 74 79 4c 53 4f 41 63 63 65 73 73 01 01 00 00 0c 74 72 75 73 74 65 64 50 61 74 68 73 03 00 00 09 00 00 0c 6c 6f 63 61 6c 53 65 63 50 61 74 68 02 00 00 00 00 10 6c 6f 63 61 6c 53 65 63 50 61 74 68 54 69 6d 65 00 42 71 6d 14 10 22 e0 00 00"));
+    std::shared_ptr<Buffer> hex1(new Buffer("00 bf 00 00 01 28 54 43 53 4f 00 04 00 00 00 00 00 08 73 65 74 74 69 6e 67 73 00 00 00 00 00 04 67 61 69 6e 00 40 49 00 00 00 00 00 00 00 00 0f 65 63 68 6f 73 75 70 70 72 65 73 73 69 6f 6e 01 00 00 00 11 64 65 66 61 75 6c 74 6d 69 63 72 6f 70 68 6f 6e 65 02 00 0e 2f 64 65 76 2f 69 6e 70 75 74 2f 6d 69 63 00 00 0d 64 65 66 61 75 6c 74 63 61 6d 65 72 61 02 00 00 00 00 0d 64 65 66 61 75 6c 74 6b 6c 69 6d 69 74 00 40 59 00 00 00 00 00 00 00 00 0d 64 65 66 61 75 6c 74 61 6c 77 61 79 73 01 00 00 00 10 63 72 6f 73 73 64 6f 6d 61 69 6e 41 6c 6c 6f 77 01 01 00 00 11 63 72 6f 73 73 64 6f 6d 61 69 6e 41 6c 77 61 79 73 01 01 00 00 18 61 6c 6c 6f 77 54 68 69 72 64 50 61 72 74 79 4c 53 4f 41 63 63 65 73 73 01 01 00 00 0c 74 72 75 73 74 65 64 50 61 74 68 73 03 00 00 09 00 00 0c 6c 6f 63 61 6c 53 65 63 50 61 74 68 02 00 00 00 00 10 6c 6f 63 61 6c 53 65 63 50 61 74 68 54 69 6d 65 00 42 71 6d 14 10 22 e0 00 00"));
 
     if (stat(filespec.c_str(), &st) == 0) {
         SOL sol;
         sol.readFile(filespec);
-        vector<boost::shared_ptr<cygnal::Element> > els = sol.getElements();
+        vector<std::shared_ptr<cygnal::Element> > els = sol.getElements();
 
         if (els.size() > 1) {
             string str = els[2]->to_string();
diff --git a/cygnal/testsuite/libnet.all/Makefile.am b/cygnal/testsuite/libnet.all/Makefile.am
index b767294..c60e1fa 100644
--- a/cygnal/testsuite/libnet.all/Makefile.am
+++ b/cygnal/testsuite/libnet.all/Makefile.am
@@ -21,8 +21,6 @@
 
 AUTOMAKE_OPTIONS = dejagnu
 
-AM_CPPFLAGS = # -Wall
-
 AM_LDFLAGS = \
 	$(top_builddir)/libbase/libgnashbase.la \
 	$(top_builddir)/cygnal/libamf/libgnashamf.la \
@@ -35,7 +33,7 @@ AM_LDFLAGS = \
 
 localedir = $(datadir)/locale
 
-INCLUDES = \
+AM_CPPFLAGS = \
         -I$(top_srcdir)/testsuite \
         -I$(top_srcdir)/cygnal/libnet \
         -I$(top_srcdir)/cygnal/libamf \
diff --git a/cygnal/testsuite/libnet.all/generate_amfbins.cpp b/cygnal/testsuite/libnet.all/generate_amfbins.cpp
index 6c07818..d7dca57 100644
--- a/cygnal/testsuite/libnet.all/generate_amfbins.cpp
+++ b/cygnal/testsuite/libnet.all/generate_amfbins.cpp
@@ -114,21 +114,21 @@ main(int argc, char *argv[])
     }
 
 #if 0
-    std::vector<boost::shared_ptr<amf::Element> > data1;
+    std::vector<std::shared_ptr<amf::Element> > data1;
 
     const char *str1 = "property one";
-    boost::shared_ptr<amf::Element> prop1(new Element(str1));
+    std::shared_ptr<amf::Element> prop1(new Element(str1));
     data1.push_back(prop1);
 
     string str2 = "property two";
-    boost::shared_ptr<amf::Element> prop2(new Element(str2));
+    std::shared_ptr<amf::Element> prop2(new Element(str2));
     data1.push_back(prop2);
 
-    boost::shared_ptr<amf::Element> prop3(new Element("property three"));
+    std::shared_ptr<amf::Element> prop3(new Element("property three"));
     data1.push_back(prop3);
 
     double num = 123.456;
-    boost::shared_ptr<amf::Element> prop4(new Element(num));
+    std::shared_ptr<amf::Element> prop4(new Element(num));
     data1.push_back(prop4);
     
     Element top;
@@ -178,46 +178,46 @@ main(int argc, char *argv[])
     string str = "Guten Tag";
 
     Element elnum1(dub);
-    boost::shared_ptr<Buffer> bnum1 = cygnal::AMF::encodeElement(elnum1);
+    std::shared_ptr<Buffer> bnum1 = cygnal::AMF::encodeElement(elnum1);
     int fd = ::open("amf0-number.bin" ,O_WRONLY|O_CREAT, S_IRWXU);
     ::write(fd, bnum1->reference(), bnum1->allocated()); ::close(fd);
 
     flag = true;
     Element elbool1(flag);
-    boost::shared_ptr<Buffer> bbool1 = cygnal::AMF::encodeElement(elbool1);
+    std::shared_ptr<Buffer> bbool1 = cygnal::AMF::encodeElement(elbool1);
     fd = ::open("amf0-boolean.bin" ,O_WRONLY|O_CREAT, S_IRWXU);
     ::write(fd, bbool1->reference(), bbool1->allocated()); ::close(fd);
     
     Element elstr1(str);
-    boost::shared_ptr<Buffer> bstr1 = cygnal::AMF::encodeElement(elstr1);
+    std::shared_ptr<Buffer> bstr1 = cygnal::AMF::encodeElement(elstr1);
     fd = ::open("amf0-string.bin" ,O_WRONLY|O_CREAT, S_IRWXU);
     ::write(fd, bstr1->reference(), bstr1->allocated()); ::close(fd);
 
     Element el3;
     el3.clear();
     el3.makeNull();
-    boost::shared_ptr<Buffer> bel3 = cygnal::AMF::encodeElement(el3);
+    std::shared_ptr<Buffer> bel3 = cygnal::AMF::encodeElement(el3);
     fd = ::open("amf0-null-object.bin" ,O_WRONLY|O_CREAT, S_IRWXU);
     ::write(fd, bel3->reference(), bel3->allocated()); ::close(fd);
 
 
     Element el4;
     el4.makeUndefined();
-    boost::shared_ptr<Buffer> bel4 = cygnal::AMF::encodeElement(el4);
+    std::shared_ptr<Buffer> bel4 = cygnal::AMF::encodeElement(el4);
     fd = ::open("amf0-undefined-object.bin" ,O_WRONLY|O_CREAT, S_IRWXU);
     ::write(fd, bel4->reference(), bel4->allocated()); ::close(fd);
 
     Element el6;
     el6.clear();
     el6.makeNullString();
-    boost::shared_ptr<Buffer> bel6 = cygnal::AMF::encodeElement(el6);
+    std::shared_ptr<Buffer> bel6 = cygnal::AMF::encodeElement(el6);
     fd = ::open("amf0-null-string.bin" ,O_WRONLY|O_CREAT, S_IRWXU);
     ::write(fd, bel6->reference(), bel6->allocated()); ::close(fd);    
 
     Element el15;
     el15.clear();
     el15.makeUnsupported();
-    boost::shared_ptr<Buffer> bel15 = cygnal::AMF::encodeElement(el15);
+    std::shared_ptr<Buffer> bel15 = cygnal::AMF::encodeElement(el15);
     fd = ::open("amf0-unsupported-object.bin" ,O_WRONLY|O_CREAT, S_IRWXU);
     ::write(fd, bel15->reference(), bel15->allocated()); ::close(fd);
 
diff --git a/cygnal/testsuite/libnet.all/test_cache.cpp b/cygnal/testsuite/libnet.all/test_cache.cpp
index da67fbf..c83dc74 100644
--- a/cygnal/testsuite/libnet.all/test_cache.cpp
+++ b/cygnal/testsuite/libnet.all/test_cache.cpp
@@ -154,19 +154,19 @@ test (void)
         runtest.fail("addResponse()/findResponse()");
     }
 
-    boost::shared_ptr<DiskStream> file1(new DiskStream);
+    std::shared_ptr<DiskStream> file1(new DiskStream);
     create_file("outbuf1.raw", 100);
     file1->open("outbuf1.raw");
 
-    boost::shared_ptr<DiskStream> file2(new DiskStream);
+    std::shared_ptr<DiskStream> file2(new DiskStream);
     create_file("outbuf2.raw", 200);
     file1->open("outbuf2.raw");
 
-    boost::shared_ptr<DiskStream> file3(new DiskStream);
+    std::shared_ptr<DiskStream> file3(new DiskStream);
     create_file("outbuf3.raw", 300);
     file1->open("outbuf3.raw");
 
-    boost::shared_ptr<DiskStream> file4(new DiskStream);
+    std::shared_ptr<DiskStream> file4(new DiskStream);
     create_file("outbuf4.raw", 400);
     file1->open("outbuf4.raw");
 
@@ -175,8 +175,8 @@ test (void)
     cache.addFile("barfoo", file3);
     cache.addFile("foobar", file4);
 
-    boost::shared_ptr<DiskStream> ds1 = cache.findFile("foo");
-    boost::shared_ptr<DiskStream> ds2 = cache.findFile("bar");
+    std::shared_ptr<DiskStream> ds1 = cache.findFile("foo");
+    std::shared_ptr<DiskStream> ds2 = cache.findFile("bar");
     if (ds1 && ds2) {
         if ((ds1->getFileSize() == file1->getFileSize())
             && (ds2->getFileSize() == file2->getFileSize())) {
@@ -239,19 +239,19 @@ test_remove(void)
         runtest.fail("Cache::removeResponse()");
     }
 
-    boost::shared_ptr<DiskStream> file1(new DiskStream);
+    std::shared_ptr<DiskStream> file1(new DiskStream);
     create_file("outbuf1.raw", 100);
     file1->open("outbuf1.raw");
 
-    boost::shared_ptr<DiskStream> file2(new DiskStream);
+    std::shared_ptr<DiskStream> file2(new DiskStream);
     create_file("outbuf2.raw", 200);
     file2->open("outbuf2.raw");
 
-    boost::shared_ptr<DiskStream> file3(new DiskStream);
+    std::shared_ptr<DiskStream> file3(new DiskStream);
     create_file("outbuf3.raw", 300);
     file3->open("outbuf3.raw");
 
-    boost::shared_ptr<DiskStream> file4(new DiskStream);
+    std::shared_ptr<DiskStream> file4(new DiskStream);
     create_file("outbuf4.raw", 400);
     file4->open("outbuf4.raw");
 
@@ -261,8 +261,8 @@ test_remove(void)
     cache.addFile("foobar", file4);
     cache.removeFile("barfoo");
 
-    boost::shared_ptr<DiskStream> ds1 = cache.findFile("foo");
-    boost::shared_ptr<DiskStream> ds2 = cache.findFile("bar");
+    std::shared_ptr<DiskStream> ds1 = cache.findFile("foo");
+    std::shared_ptr<DiskStream> ds2 = cache.findFile("bar");
     if (ds1 && ds2) {
         if ((cache.findFile("foo")->getFileSize() == file1->getFileSize())
             && (cache.findFile("barfoo") == 0)
@@ -307,7 +307,7 @@ test_errors (void)
         runtest.fail("Cache::findResponse()");
     }
 
-    boost::shared_ptr<DiskStream> file1(new DiskStream);
+    std::shared_ptr<DiskStream> file1(new DiskStream);
 //    create_file("outbuf1.raw", 100);   it's created aleady in test().
     file1->open("outbuf1.raw");
 
diff --git a/cygnal/testsuite/libnet.all/test_cque.cpp b/cygnal/testsuite/libnet.all/test_cque.cpp
index 1272c96..d789133 100644
--- a/cygnal/testsuite/libnet.all/test_cque.cpp
+++ b/cygnal/testsuite/libnet.all/test_cque.cpp
@@ -36,7 +36,7 @@
 #include <fstream>
 #include <cstring>
 #include <vector>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #ifdef HAVE_DEJAGNU_H
 #include "dejagnu.h"
@@ -65,34 +65,34 @@ main (int /*argc*/, char** /*argv*/) {
 
     CQue que;
 
-    boost::shared_ptr<cygnal::Buffer> buf(new Buffer(50));
+    std::shared_ptr<cygnal::Buffer> buf(new Buffer(50));
     // populate the buffer
-    boost::uint8_t *ptr = buf->reference();
+    std::uint8_t *ptr = buf->reference();
     for (Network::byte_t i=1; i< buf->size(); i++) {
         *buf += i;
         *buf += ' ';
     }
 
-//     boost::uint8_t *test = new uint8_t[6];
+//     std::uint8_t *test = new uint8_t[6];
 //     memcpy(test, "hell", 4);
 
     // Push one buffer on the fifo. The default is the incoming fifo,
     // which is the one where data flows from the network to the queue.
     que.push(buf);
     if (que.size() == 1) {
-        runtest.pass ("CQue::push(boost::shared_ptr<cygnal::Buffer> )");
+        runtest.pass ("CQue::push(std::shared_ptr<cygnal::Buffer> )");
     } else {
-        runtest.fail ("CQue::push(boost::shared_ptr<cygnal::Buffer> )");
+        runtest.fail ("CQue::push(std::shared_ptr<cygnal::Buffer> )");
     }
     
     // Test push. When dumpimg, the second address should be different than the first,
     // as well as the size. The outgoing queue should be uneffected.
-    boost::shared_ptr<cygnal::Buffer> buf1(new Buffer(112));
+    std::shared_ptr<cygnal::Buffer> buf1(new Buffer(112));
     que.push(buf1);
     if (que.size() == 2) {
-        runtest.pass ("CQue::pushin(boost::shared_ptr<cygnal::Buffer> )");
+        runtest.pass ("CQue::pushin(std::shared_ptr<cygnal::Buffer> )");
     } else {
-        runtest.fail ("CQue::pushin(boost::shared_ptr<cygnal::Buffer> )");
+        runtest.fail ("CQue::pushin(std::shared_ptr<cygnal::Buffer> )");
     }
 
     // Nuke the array
@@ -105,14 +105,14 @@ main (int /*argc*/, char** /*argv*/) {
 
     
     que.push(buf);
-    boost::shared_ptr<cygnal::Buffer> buf2 = que.peek();
+    std::shared_ptr<cygnal::Buffer> buf2 = que.peek();
     if ((buf2 == buf) && (que.size() == 1)) {
         runtest.pass ("CQue::peek()");
     } else {
         runtest.fail ("CQue::peek()");
     }
 
-    boost::shared_ptr<cygnal::Buffer> buf3 = que.peek();
+    std::shared_ptr<cygnal::Buffer> buf3 = que.peek();
      if ((buf3 == buf) && (que.size() == 1)) {
          runtest.pass ("CQue::pop()");
      } else {
@@ -130,9 +130,9 @@ main (int /*argc*/, char** /*argv*/) {
      }
 
      // Make some test buffers
-     boost::shared_ptr<cygnal::Buffer> merge1(new Buffer);
-     boost::shared_ptr<cygnal::Buffer> merge2(new Buffer);
-     boost::shared_ptr<cygnal::Buffer> merge3(new Buffer);
+     std::shared_ptr<cygnal::Buffer> merge1(new Buffer);
+     std::shared_ptr<cygnal::Buffer> merge2(new Buffer);
+     std::shared_ptr<cygnal::Buffer> merge3(new Buffer);
      size_t i;
      ptr = merge1->reference();
      for (i=0; i<cygnal::NETBUFSIZE; i++) {
@@ -155,7 +155,7 @@ main (int /*argc*/, char** /*argv*/) {
 
 //     que.dump();
      // A merge gives us one big buffer where there were several buffers
-     boost::shared_ptr<cygnal::Buffer> foo = que.merge(merge1);
+     std::shared_ptr<cygnal::Buffer> foo = que.merge(merge1);
      if (foo == 0) {
          runtest.unresolved("CQue::merge()");
      } else {
diff --git a/cygnal/testsuite/libnet.all/test_diskstream.cpp b/cygnal/testsuite/libnet.all/test_diskstream.cpp
index 9f7ae89..29d5369 100644
--- a/cygnal/testsuite/libnet.all/test_diskstream.cpp
+++ b/cygnal/testsuite/libnet.all/test_diskstream.cpp
@@ -123,8 +123,8 @@ test()
     ds1.open("outbuf.raw");
 
     // ptr should be the base address of the memory plus the offset
-    boost::uint8_t *ptr = ds1.loadToMem(48);
-//    boost::uint8_t *dsptr = ds1.get(); // cache the initial base address
+    std::uint8_t *ptr = ds1.loadToMem(48);
+//    std::uint8_t *dsptr = ds1.get(); // cache the initial base address
     
     if ((ds1.get() == MAP_FAILED) || (ds1.get() == 0)) {
         runtest.unresolved("loadToMem(48)");
@@ -203,7 +203,7 @@ test()
 void
 test_mem()
 {
-    boost::shared_ptr<cygnal::Buffer> buf1(new cygnal::Buffer(12));
+    std::shared_ptr<cygnal::Buffer> buf1(new cygnal::Buffer(12));
     *buf1 = "Hello World";
     // drop the null terminator byte we inherit when using a simnple
     // string for testing
diff --git a/cygnal/testsuite/libnet.all/test_handler.cpp b/cygnal/testsuite/libnet.all/test_handler.cpp
index 7a1f524..a7903d4 100644
--- a/cygnal/testsuite/libnet.all/test_handler.cpp
+++ b/cygnal/testsuite/libnet.all/test_handler.cpp
@@ -36,7 +36,7 @@
 #include <fstream>
 #include <cstring>
 #include <vector>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #ifdef HAVE_POLL
 # include <sys/poll.h>
@@ -192,17 +192,17 @@ test_que()
 {
     Handler que;
 
-    boost::shared_ptr<amf::Buffer> buf(new Buffer);
-//     boost::uint8_t *test = new uint8_t[6];
+    std::shared_ptr<amf::Buffer> buf(new Buffer);
+//     std::uint8_t *test = new uint8_t[6];
 //     memcpy(test, "hell", 4);
 
     // Push one buffer on the fifo. The default is the incoming fifo,
     // which is the one where data flows from the network to the queue.
     que.push(buf);
     if ((que.size() == 1) && (que.outsize() == 0)) {
-        runtest.pass ("Handler::push(boost::shared_ptr<amf::Buffer> )");
+        runtest.pass ("Handler::push(std::shared_ptr<amf::Buffer> )");
     } else {
-        runtest.fail ("Handler::push(boost::shared_ptr<amf::Buffer> )");
+        runtest.fail ("Handler::push(std::shared_ptr<amf::Buffer> )");
     }
     
     // Push one buffer on the outgoing fifo. The default is the incoming fifo,
@@ -210,20 +210,20 @@ test_que()
     // we can explicitly specufy which queue we write to, we test that here.
     que.pushout(buf);
     if ((que.size() == 1) && (que.outsize() == 1)) {
-        runtest.pass ("Handler::pushout(boost::shared_ptr<amf::Buffer> )");
+        runtest.pass ("Handler::pushout(std::shared_ptr<amf::Buffer> )");
     } else {
-        runtest.fail ("Handler::pushout(boost::shared_ptr<amf::Buffer> )");
+        runtest.fail ("Handler::pushout(std::shared_ptr<amf::Buffer> )");
     }
 
     // Test pushin. When dumpimg, the second address should be different than the first,
     // as well as the size. The outgoing queue should be uneffected.
-    boost::shared_ptr<amf::Buffer> buf1(new Buffer);
+    std::shared_ptr<amf::Buffer> buf1(new Buffer);
     buf1->resize(112);
     que.pushin(buf1);
     if ((que.size() == 2) && (que.outsize() == 1)) {
-        runtest.pass ("Handler::pushin(boost::shared_ptr<amf::Buffer> )");
+        runtest.pass ("Handler::pushin(std::shared_ptr<amf::Buffer> )");
     } else {
-        runtest.fail ("Handler::pushin(boost::shared_ptr<amf::Buffer> )");
+        runtest.fail ("Handler::pushin(std::shared_ptr<amf::Buffer> )");
     }
 
     // Nuke the array
@@ -235,20 +235,20 @@ test_que()
     }
 
     // populate the buffer
-    boost::uint8_t *ptr = buf->reference();
+    std::uint8_t *ptr = buf->reference();
     for (size_t i=1; i< buf->size(); i++) {
         ptr[i] = i;
     }
 
     que.push(buf);
-    boost::shared_ptr<amf::Buffer> buf2 = que.peek();
+    std::shared_ptr<amf::Buffer> buf2 = que.peek();
     if ((buf2 == buf) && (que.size() == 1)) {
         runtest.pass ("Handler::peek()");
     } else {
         runtest.fail ("Handler::peek()");
     }
 
-    boost::shared_ptr<amf::Buffer> buf3 = que.peek();
+    std::shared_ptr<amf::Buffer> buf3 = que.peek();
      if ((buf3 == buf) && (que.size() == 1)) {
          runtest.pass ("Handler::pop()");
      } else {
diff --git a/cygnal/testsuite/libnet.all/test_http.cpp b/cygnal/testsuite/libnet.all/test_http.cpp
index 1735269..1503df8 100644
--- a/cygnal/testsuite/libnet.all/test_http.cpp
+++ b/cygnal/testsuite/libnet.all/test_http.cpp
@@ -351,7 +351,7 @@ tests()
     //
     http.clearHeader();
 #if 0
-    boost::uint8_t *buffer = (boost::uint8_t *)"GET /software/gnash/tests/flvplayer.swf?file=http://localhost/software/gnash/tests/Ouray_Ice_Festival_Climbing_Competition.flv HTTP/1.1\r\n"
+    std::uint8_t *buffer = (std::uint8_t *)"GET /software/gnash/tests/flvplayer.swf?file=http://localhost/software/gnash/tests/Ouray_Ice_Festival_Climbing_Competition.flv HTTP/1.1\r\n"
 "User-Agent: Gnash/0.8.1-cvs (X11; Linux i686; U; en)\r\n"
 "Host: localhost:4080\r\n"
 "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n"
@@ -384,7 +384,7 @@ tests()
     // Check the Server field
     Buffer field1;
     field1 = "GET /index.html HTTP/1.1";
-    //    boost::uint8_t *field1 = (boost::uint8_t *)"GET /index.html HTTP/1.1";
+    //    std::uint8_t *field1 = (std::uint8_t *)"GET /index.html HTTP/1.1";
     HTTP http1;
     //    http1.extractCommand(field1);
     http1.extractCommand(field1);
@@ -421,7 +421,7 @@ tests()
 #endif
     
 #if 0
-    boost::uint8_t *field3 = (boost::uint8_t *) "Keep-Alive: 300";
+    std::uint8_t *field3 = (std::uint8_t *) "Keep-Alive: 300";
     HTTP http3;
     http3.extractKeepAlive(field3);
     if ((http3.keepAlive() == true) && (http3.getMaxRequests() == 300)) {
@@ -430,7 +430,7 @@ tests()
         runtest.fail ("HTTP::extractKeepAlive(300)");
     }
     
-    boost::uint8_t *field4 = (boost::uint8_t *) "Keep-Alive: On";
+    std::uint8_t *field4 = (std::uint8_t *) "Keep-Alive: On";
     HTTP http4;
     http4.extractKeepAlive(field4);
     if (http4.keepAlive() == true) {
@@ -439,7 +439,7 @@ tests()
         runtest.fail ("HTTP::extractKeepAlive(On)");
     }
     
-    boost::uint8_t *field5 = (boost::uint8_t *) "Keep-Alive: Off";
+    std::uint8_t *field5 = (std::uint8_t *) "Keep-Alive: Off";
     HTTP http5;
     http5.extractKeepAlive(field5);
     if (http5.keepAlive() == false) {
@@ -450,7 +450,7 @@ tests()
 
 // Some browsers have a different synatax, of course, to keep things
 // interesting.
-    boost::uint8_t *buffer2 = (boost::uint8_t *)"GET /software/gnash/tests/flvplayer.swf?file=http://localhost/software/gnash/tests/Ouray_Ice_Festival_Climbing_Competition.flv HTTP/1.1\r\n)"
+    std::uint8_t *buffer2 = (std::uint8_t *)"GET /software/gnash/tests/flvplayer.swf?file=http://localhost/software/gnash/tests/Ouray_Ice_Festival_Climbing_Competition.flv HTTP/1.1\r\n)"
 "Content-Language: en-US,en;q=0.9\r\n"
 "Content-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n"
 "Content-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\n";
@@ -583,8 +583,8 @@ test_post()
 
     HTTP http;
 
-    boost::shared_ptr<cygnal::Buffer> encstr = AMF::encodeString("Hello World!");
-    boost::shared_ptr<cygnal::Buffer> encnum = AMF::encodeNumber(1.2345);
+    std::shared_ptr<cygnal::Buffer> encstr = AMF::encodeString("Hello World!");
+    std::shared_ptr<cygnal::Buffer> encnum = AMF::encodeNumber(1.2345);
 
     cygnal::Buffer ptr1;
     ptr1 = "POST /echo/gateway HTTP/1.1\r\n";
@@ -604,8 +604,8 @@ test_post()
     // FIXME: should be moved to server side only test case
     // Check the Server field
     AMF amf;
-    boost::uint8_t *data1 = http.processHeaderFields(&ptr1);
-    boost::shared_ptr<cygnal::Element> el1 = amf.extractAMF(data1, data1 + 15);
+    std::uint8_t *data1 = http.processHeaderFields(&ptr1);
+    std::shared_ptr<cygnal::Element> el1 = amf.extractAMF(data1, data1 + 15);
     string str1 = el1->to_string();
 
     if ((http.getField("host") == "localhost:4080")
@@ -633,8 +633,8 @@ test_post()
     ptr2 += *encnum;
     ptr2.resize();              // shrink the buffer to be the exact size of the data
 
-    boost::uint8_t *data2 = http.processHeaderFields(&ptr2);
-    boost::shared_ptr<cygnal::Element> el2 = amf.extractAMF(data2, data2 + 15);
+    std::uint8_t *data2 = http.processHeaderFields(&ptr2);
+    std::shared_ptr<cygnal::Element> el2 = amf.extractAMF(data2, data2 + 15);
     if ((http.getField("host") == "localhost:5080")
         && (el2->to_number() == 1.2345)
         && (http.getField("content-length") == "9")) {
@@ -643,7 +643,7 @@ test_post()
         runtest.fail("HTTP::processHeaderFields(POST) + NUMBER");
     }
 
-    boost::shared_ptr<std::vector<std::string> > item2 = http.getFieldItem("accept");
+    std::shared_ptr<std::vector<std::string> > item2 = http.getFieldItem("accept");
     if (!item2) {
         runtest.unresolved("HTTP::getFieldItem(Accept)");
     } else {
@@ -654,7 +654,7 @@ test_post()
         }
     }
 
-    boost::shared_ptr<std::vector<std::string> > item3 = http.getFieldItem("connection");
+    std::shared_ptr<std::vector<std::string> > item3 = http.getFieldItem("connection");
     if (!item3) {
         runtest.unresolved("HTTP::getFieldItem(POST)");
     } else {
@@ -667,10 +667,10 @@ test_post()
 
 #if 0
     // Make sure we can parse the Red5 echo_test client messages.
-    boost::shared_ptr<Buffer> hex1(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 14 0a 00 00 00 01 02 00 0c 48 65 6c 6c 6f 20 77 6f 72 6c 64 21"));
-    boost::shared_ptr<Buffer> hex2(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 02 00 0c 48 65 6c 6c 6f 20 77 6f 72 6c 64 21"));
+    std::shared_ptr<Buffer> hex1(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 14 0a 00 00 00 01 02 00 0c 48 65 6c 6c 6f 20 77 6f 72 6c 64 21"));
+    std::shared_ptr<Buffer> hex2(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 02 00 0c 48 65 6c 6c 6f 20 77 6f 72 6c 64 21"));
 //    http.clearFields();
-    vector<boost::shared_ptr<cygnal::Element> > headers = http.parseEchoRequest(*hex1);
+    vector<std::shared_ptr<cygnal::Element> > headers = http.parseEchoRequest(*hex1);
 
     if ((strncmp(headers[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers[1]->getName(), "/2", 2) == 0)
@@ -705,8 +705,8 @@ test_rtmpt (void)
     HTTP http;
 
     // Boolean True request
-    boost::shared_ptr<Buffer> hex_req1(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 07 0a 00 00 00 01 01 01"));
-    vector<boost::shared_ptr<cygnal::Element> > headers1 = http.parseEchoRequest(*hex_req1);
+    std::shared_ptr<Buffer> hex_req1(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 07 0a 00 00 00 01 01 01"));
+    vector<std::shared_ptr<cygnal::Element> > headers1 = http.parseEchoRequest(*hex_req1);
     if ((strncmp(headers1[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers1[1]->getName(), "/1", 2) == 0)
         && (headers1[3]->getType() == Element::BOOLEAN_AMF0)
@@ -718,7 +718,7 @@ test_rtmpt (void)
 //    hex_req1->corrupt();
     
     // Boolean True response
-    boost::shared_ptr<Buffer> hex_res1(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 01 01"));
+    std::shared_ptr<Buffer> hex_res1(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 01 01"));
     cygnal::Buffer &buf1 = http.formatEchoResponse(headers1[1]->getName(), *headers1[3]);
     string head1(reinterpret_cast<const char *>(buf1.reference()));
     const char *ptr1a = reinterpret_cast<const char *>(hex_res1->reference());
@@ -731,8 +731,8 @@ test_rtmpt (void)
     
 
     // Boolean false request
-    boost::shared_ptr<Buffer> hex_req2(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 07 0a 00 00 00 01 01 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers2 = http.parseEchoRequest(*hex_req2);
+    std::shared_ptr<Buffer> hex_req2(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 07 0a 00 00 00 01 01 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers2 = http.parseEchoRequest(*hex_req2);
     if ((strncmp(headers2[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers2[1]->getName(), "/2", 2) == 0)
         && (headers2[3]->getType() == Element::BOOLEAN_AMF0)
@@ -742,7 +742,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Boolean FALSE)");
     }
     // Boolean False response
-    boost::shared_ptr<Buffer> hex_res2(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 01 00"));
+    std::shared_ptr<Buffer> hex_res2(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 01 00"));
     cygnal::Buffer &buf2 = http.formatEchoResponse(headers2[1]->getName(), *headers2[3]);
     string head2(reinterpret_cast<const char *>(buf2.reference()));
     const char *ptr2a = reinterpret_cast<const char *>(hex_res2->reference());
@@ -754,8 +754,8 @@ test_rtmpt (void)
     }    
 
     // NULL Object request
-    boost::shared_ptr<Buffer> hex_req3(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 06 0a 00 00 00 01 05"));
-    vector<boost::shared_ptr<cygnal::Element> > headers3 = http.parseEchoRequest(*hex_req3);
+    std::shared_ptr<Buffer> hex_req3(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 06 0a 00 00 00 01 05"));
+    vector<std::shared_ptr<cygnal::Element> > headers3 = http.parseEchoRequest(*hex_req3);
     if ((strncmp(headers3[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers3[1]->getName(), "/1", 2) == 0)
         && (headers3[3]->getType() == Element::NULL_AMF0)) {
@@ -764,7 +764,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(NULL Object)");
     }
     // NULL Object response
-    boost::shared_ptr<Buffer> hex_res3(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 05"));
+    std::shared_ptr<Buffer> hex_res3(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 05"));
     cygnal::Buffer &buf3 = http.formatEchoResponse(headers3[1]->getName(), *headers3[3]);
     string head3(reinterpret_cast<const char *>(buf3.reference()));
     const char *ptr3a = reinterpret_cast<const char *>(hex_res3->reference());
@@ -776,8 +776,8 @@ test_rtmpt (void)
     }    
 
     // UNDEFINED Object request
-    boost::shared_ptr<Buffer> hex_req4(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 06 0a 00 00 00 01 06"));
-    vector<boost::shared_ptr<cygnal::Element> > headers4 = http.parseEchoRequest(*hex_req4);
+    std::shared_ptr<Buffer> hex_req4(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 06 0a 00 00 00 01 06"));
+    vector<std::shared_ptr<cygnal::Element> > headers4 = http.parseEchoRequest(*hex_req4);
     if ((strncmp(headers4[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers4[1]->getName(), "/1", 2) == 0)
         && (headers4[3]->getType() == Element::UNDEFINED_AMF0)) {
@@ -786,7 +786,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(UNDEFINED Object)");
     }
     // UNDEFINED Object response
-    boost::shared_ptr<Buffer> hex_res4(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 05"));
+    std::shared_ptr<Buffer> hex_res4(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 05"));
     cygnal::Buffer &buf4 = http.formatEchoResponse(headers4[1]->getName(), *headers4[3]);
     string head4(reinterpret_cast<const char *>(buf4.reference()));
     const char *ptr4a = reinterpret_cast<const char *>(hex_res4->reference());
@@ -798,8 +798,8 @@ test_rtmpt (void)
     }    
 
     // Date Object request
-    boost::shared_ptr<Buffer> hex_req5(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 10 0a 00 00 00 01 0b 42 71 e4 ca 4e 32 d0 00 01 a4"));
-    vector<boost::shared_ptr<cygnal::Element> > headers5 = http.parseEchoRequest(*hex_req5);
+    std::shared_ptr<Buffer> hex_req5(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 10 0a 00 00 00 01 0b 42 71 e4 ca 4e 32 d0 00 01 a4"));
+    vector<std::shared_ptr<cygnal::Element> > headers5 = http.parseEchoRequest(*hex_req5);
     if (headers5[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(DATE Object)");
     } else {
@@ -816,7 +816,7 @@ test_rtmpt (void)
         }
     }
     // Date Object response
-    boost::shared_ptr<Buffer> hex_res5(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0b 42 71 e4 ca 4e 32 d0 00 fe 5c"));
+    std::shared_ptr<Buffer> hex_res5(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0b 42 71 e4 ca 4e 32 d0 00 fe 5c"));
     if (headers5[3] == 0) {
         runtest.unresolved("HTTP::formatEchoResponse(DATE Object)");
     } else {
@@ -832,8 +832,8 @@ test_rtmpt (void)
     }
 
     // Date Array request
-    boost::shared_ptr<Buffer> hex_req6(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 18 0a 00 00 00 01 0a 00 00 00 02 0b 42 71 e4 ca 4e 32 d0 00 01 a4 07 00 01"));
-    vector<boost::shared_ptr<cygnal::Element> > headers6 = http.parseEchoRequest(*hex_req6);
+    std::shared_ptr<Buffer> hex_req6(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 18 0a 00 00 00 01 0a 00 00 00 02 0b 42 71 e4 ca 4e 32 d0 00 01 a4 07 00 01"));
+    vector<std::shared_ptr<cygnal::Element> > headers6 = http.parseEchoRequest(*hex_req6);
     if (headers6[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(DATE Array)");
     } else {
@@ -846,11 +846,11 @@ test_rtmpt (void)
         }
     }
     // Date Array response
-    boost::shared_ptr<Buffer> hex_res6(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 02 0b 42 71 e4 ca 4e 32 d0 00 fe 5c 0b 42 71 e4 ca 4e 32 d0 00 fe 5c"));
+    std::shared_ptr<Buffer> hex_res6(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 02 0b 42 71 e4 ca 4e 32 d0 00 fe 5c 0b 42 71 e4 ca 4e 32 d0 00 fe 5c"));
     
     // Undefined Array request
-    boost::shared_ptr<Buffer> hex_req7(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 0a 0a 00 00 00 01 0a 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers7 = http.parseEchoRequest(*hex_req7);
+    std::shared_ptr<Buffer> hex_req7(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 0a 0a 00 00 00 01 0a 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers7 = http.parseEchoRequest(*hex_req7);
     if ((strncmp(headers7[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers7[1]->getName(), "/1", 2) == 0)
         && (headers7[3]->getType() == Element::STRICT_ARRAY_AMF0)) {
@@ -859,7 +859,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Undefined Strict Array)");
     }
     // Undefined Array response
-    boost::shared_ptr<Buffer> hex_res7(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res7(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 00"));
     cygnal::Buffer &buf7 = http.formatEchoResponse(headers7[1]->getName(), *headers7[3]);
 
     //    cerr << hexify(hex_res7->reference(), hex_res7->allocated(), false) << endl;
@@ -875,13 +875,13 @@ test_rtmpt (void)
     
     // Number 1
     // Array request
-    boost::shared_ptr<Buffer> hex_req8(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 13 0a 00 00 00 01 0a 00 00 00 01 00 3f f0 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers8 = http.parseEchoRequest(*hex_req8);
+    std::shared_ptr<Buffer> hex_req8(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 13 0a 00 00 00 01 0a 00 00 00 01 00 3f f0 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers8 = http.parseEchoRequest(*hex_req8);
     if (headers8[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(Simple Strict Array of Numbers, 1 item)");
     } else {
         if (headers8[3]->propertySize() > 0) {
-            std::vector<boost::shared_ptr<cygnal::Element> > props8 = headers8[3]->getProperties();
+            std::vector<std::shared_ptr<cygnal::Element> > props8 = headers8[3]->getProperties();
             if ((strncmp(headers8[0]->getName(), "echo", 4) == 0)
                 && (strncmp(headers8[1]->getName(), "/2", 2) == 0)
                 && (headers8[3]->getType() == Element::STRICT_ARRAY_AMF0)
@@ -897,7 +897,7 @@ test_rtmpt (void)
         }
     }
     // Undefined Array response
-    boost::shared_ptr<Buffer> hex_res8(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 01 00 3f f0 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res8(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 01 00 3f f0 00 00 00 00 00 00"));
     cygnal::Buffer &buf8 = http.formatEchoResponse(headers8[1]->getName(), *headers8[3]);
     //    cerr << hexify(hex_res8->reference()+30, amf::AMF0_NUMBER_SIZE, false) << endl;
     //    cerr << hexify(buf8.reference() + 124, amf::AMF0_NUMBER_SIZE, false) << endl;
@@ -912,8 +912,8 @@ test_rtmpt (void)
 
     // Number 1,2
     // Array request
-    boost::shared_ptr<Buffer> hex_req9(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 33 00 00 00 1c 0a 00 00 00 01 0a 00 00 00 02 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers9 = http.parseEchoRequest(*hex_req9);
+    std::shared_ptr<Buffer> hex_req9(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 33 00 00 00 1c 0a 00 00 00 01 0a 00 00 00 02 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers9 = http.parseEchoRequest(*hex_req9);
     if ((strncmp(headers9[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers9[1]->getName(), "/3", 2) == 0)
         && (headers9[3]->getType() == Element::STRICT_ARRAY_AMF0)) {
@@ -923,7 +923,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Simple Strict Array of Numbers, 2 items)");
     }
     // Undefined Array response
-    boost::shared_ptr<Buffer> hex_res9(new Buffer("00 00 00 00 00 01 00 0b 2f 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 02 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res9(new Buffer("00 00 00 00 00 01 00 0b 2f 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 02 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00"));
     cygnal::Buffer &buf9 = http.formatEchoResponse(headers9[1]->getName(), *headers9[3]);
     string head9(reinterpret_cast<const char *>(buf9.reference()));
     const char *ptr9a = reinterpret_cast<const char *>(hex_res9->reference());
@@ -936,8 +936,8 @@ test_rtmpt (void)
 
     // Number 1,2,3
     // Array request
-    boost::shared_ptr<Buffer> hex_req10(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 34 00 00 00 25 0a 00 00 00 01 0a 00 00 00 03 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 40 08 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers10 = http.parseEchoRequest(*hex_req10);
+    std::shared_ptr<Buffer> hex_req10(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 34 00 00 00 25 0a 00 00 00 01 0a 00 00 00 03 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 40 08 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers10 = http.parseEchoRequest(*hex_req10);
     if ((strncmp(headers10[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers10[1]->getName(), "/4", 2) == 0)
         && (headers10[3]->getType() == Element::STRICT_ARRAY_AMF0)) {
@@ -947,7 +947,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Simple Strict Array of Numbers, 3 items)");
     }
     // Undefined Array response
-    boost::shared_ptr<Buffer> hex_res10(new Buffer("00 00 00 00 00 01 00 0b 2f 34 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 03 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 40 08 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res10(new Buffer("00 00 00 00 00 01 00 0b 2f 34 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 03 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 00 40 08 00 00 00 00 00 00"));
     cygnal::Buffer &buf10 = http.formatEchoResponse(headers10[1]->getName(), *headers10[3]);
     string head10(reinterpret_cast<const char *>(buf10.reference()));
     const char *ptr10a = reinterpret_cast<const char *>(hex_res10->reference());
@@ -959,8 +959,8 @@ test_rtmpt (void)
     }
 
     // Number 0 Request
-    boost::shared_ptr<Buffer> hex_req11(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 0e 0a 00 00 00 01 00 00 00 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers11 = http.parseEchoRequest(*hex_req11);
+    std::shared_ptr<Buffer> hex_req11(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 0e 0a 00 00 00 01 00 00 00 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers11 = http.parseEchoRequest(*hex_req11);
     if ((strncmp(headers11[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers11[1]->getName(), "/1", 2) == 0)
         && (headers11[3]->getType() == Element::NUMBER_AMF0)
@@ -970,7 +970,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number 0)");
     }
     // Number 0 Response
-    boost::shared_ptr<Buffer> hex_res11(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 00 00 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res11(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 00 00 00 00 00 00 00 00"));
     cygnal::Buffer &buf11 = http.formatEchoResponse(headers11[1]->getName(), *headers11[3]);
     string head11(reinterpret_cast<const char *>(buf11.reference()));
     const char *ptr11a = reinterpret_cast<const char *>(hex_res11->reference());
@@ -982,8 +982,8 @@ test_rtmpt (void)
     }    
 
     // Number 1 Request
-    boost::shared_ptr<Buffer> hex_req12(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 0e 0a 00 00 00 01 00 3f f0 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers12 = http.parseEchoRequest(*hex_req12);
+    std::shared_ptr<Buffer> hex_req12(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 0e 0a 00 00 00 01 00 3f f0 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers12 = http.parseEchoRequest(*hex_req12);
     if ((strncmp(headers12[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers12[1]->getName(), "/2", 2) == 0)
         && (headers12[3]->getType() == Element::NUMBER_AMF0)
@@ -993,7 +993,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number 1)");
     }
     // Number 1 Response
-    boost::shared_ptr<Buffer> hex_res12(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 3f f0 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res12(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 3f f0 00 00 00 00 00 00"));
     cygnal::Buffer &buf12 = http.formatEchoResponse(headers12[1]->getName(), *headers12[3]);
     string head12(reinterpret_cast<const char *>(buf12.reference()));
     const char *ptr12a = reinterpret_cast<const char *>(hex_res12->reference());
@@ -1005,8 +1005,8 @@ test_rtmpt (void)
     }    
 
     // Number -1 Request
-    boost::shared_ptr<Buffer> hex_req13(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 33 00 00 00 0e 0a 00 00 00 01 00 bf f0 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers13 = http.parseEchoRequest(*hex_req13);
+    std::shared_ptr<Buffer> hex_req13(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 33 00 00 00 0e 0a 00 00 00 01 00 bf f0 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers13 = http.parseEchoRequest(*hex_req13);
     if ((strncmp(headers13[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers13[1]->getName(), "/3", 2) == 0)
         && (headers13[3]->getType() == Element::NUMBER_AMF0)
@@ -1016,7 +1016,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number -1)");
     }
     // Number -1 Response
-    boost::shared_ptr<Buffer> hex_res13(new Buffer("00 00 00 00 00 01 00 0b 2f 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 bf f0 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res13(new Buffer("00 00 00 00 00 01 00 0b 2f 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 bf f0 00 00 00 00 00 00"));
     cygnal::Buffer &buf13 = http.formatEchoResponse(headers13[1]->getName(), *headers13[3]);
     string head13(reinterpret_cast<const char *>(buf13.reference()));
     const char *ptr13a = reinterpret_cast<const char *>(hex_res13->reference());
@@ -1028,8 +1028,8 @@ test_rtmpt (void)
     }
 
     // Number 256 Request
-    boost::shared_ptr<Buffer> hex_req14(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 34 00 00 00 0e 0a 00 00 00 01 00 40 70 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers14 = http.parseEchoRequest(*hex_req14);
+    std::shared_ptr<Buffer> hex_req14(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 34 00 00 00 0e 0a 00 00 00 01 00 40 70 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers14 = http.parseEchoRequest(*hex_req14);
     if ((strncmp(headers14[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers14[1]->getName(), "/4", 2) == 0)
         && (headers14[3]->getType() == Element::NUMBER_AMF0)
@@ -1039,7 +1039,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number 256)");
     }
     // Number 256 Response
-    boost::shared_ptr<Buffer> hex_res14(new Buffer("00 00 00 00 00 01 00 0b 2f 34 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 40 70 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res14(new Buffer("00 00 00 00 00 01 00 0b 2f 34 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 40 70 00 00 00 00 00 00"));
     cygnal::Buffer &buf14 = http.formatEchoResponse(headers14[1]->getName(), *headers14[3]);
     string head14(reinterpret_cast<const char *>(buf14.reference()));
     const char *ptr14a = reinterpret_cast<const char *>(hex_res14->reference());
@@ -1051,8 +1051,8 @@ test_rtmpt (void)
     }
 
     // Number -256 Request
-    boost::shared_ptr<Buffer> hex_req15(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 35 00 00 00 0e 0a 00 00 00 01 00 c0 70 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers15 = http.parseEchoRequest(*hex_req15);
+    std::shared_ptr<Buffer> hex_req15(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 35 00 00 00 0e 0a 00 00 00 01 00 c0 70 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers15 = http.parseEchoRequest(*hex_req15);
     if ((strncmp(headers15[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers15[1]->getName(), "/5", 2) == 0)
         && (headers15[3]->getType() == Element::NUMBER_AMF0)
@@ -1062,7 +1062,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number -256)");
     }
     // Number -256 Response
-    boost::shared_ptr<Buffer> hex_res15(new Buffer("00 00 00 00 00 01 00 0b 2f 35 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 c0 70 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res15(new Buffer("00 00 00 00 00 01 00 0b 2f 35 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 c0 70 00 00 00 00 00 00"));
     cygnal::Buffer &buf15 = http.formatEchoResponse(headers15[1]->getName(), *headers15[3]);
     string head15(reinterpret_cast<const char *>(buf15.reference()));
     const char *ptr15a = reinterpret_cast<const char *>(hex_res15->reference());
@@ -1074,8 +1074,8 @@ test_rtmpt (void)
     }
 
     // Number 65536 Request
-    boost::shared_ptr<Buffer> hex_req16(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 36 00 00 00 0e 0a 00 00 00 01 00 40 f0 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers16 = http.parseEchoRequest(*hex_req16);
+    std::shared_ptr<Buffer> hex_req16(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 36 00 00 00 0e 0a 00 00 00 01 00 40 f0 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers16 = http.parseEchoRequest(*hex_req16);
     if ((strncmp(headers16[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers16[1]->getName(), "/6", 2) == 0)
         && (headers16[3]->getType() == Element::NUMBER_AMF0)
@@ -1085,7 +1085,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number 65536)");
     }
     // Number 65536 Response
-    boost::shared_ptr<Buffer> hex_res16(new Buffer("00 00 00 00 00 01 00 0b 2f 36 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 40 f0 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res16(new Buffer("00 00 00 00 00 01 00 0b 2f 36 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 40 f0 00 00 00 00 00 00"));
     cygnal::Buffer &buf16 = http.formatEchoResponse(headers16[1]->getName(), *headers16[3]);
     string head16(reinterpret_cast<const char *>(buf16.reference()));
     const char *ptr16a = reinterpret_cast<const char *>(hex_res16->reference());
@@ -1097,8 +1097,8 @@ test_rtmpt (void)
     }
 
     // Number -655536 Request
-    boost::shared_ptr<Buffer> hex_req16x(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 37 00 00 00 0e 0a 00 00 00 01 00 c0 f0 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers16x = http.parseEchoRequest(*hex_req16x);
+    std::shared_ptr<Buffer> hex_req16x(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 37 00 00 00 0e 0a 00 00 00 01 00 c0 f0 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers16x = http.parseEchoRequest(*hex_req16x);
     if ((strncmp(headers16x[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers16x[1]->getName(), "/7", 2) == 0)
         && (headers16x[3]->getType() == Element::NUMBER_AMF0)
@@ -1108,7 +1108,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number -65536)");
     }
     // Number -655536 Response
-    boost::shared_ptr<Buffer> hex_res17(new Buffer("00 00 00 00 00 01 00 0b 2f 37 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 c0 f0 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res17(new Buffer("00 00 00 00 00 01 00 0b 2f 37 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 c0 f0 00 00 00 00 00 00"));
     cygnal::Buffer &buf17 = http.formatEchoResponse(headers16x[1]->getName(), *headers16x[3]);
     string head17(reinterpret_cast<const char *>(buf17.reference()));
     const char *ptr17a = reinterpret_cast<const char *>(hex_res17->reference());
@@ -1120,8 +1120,8 @@ test_rtmpt (void)
     }
 
     // Number 0 Request
-    boost::shared_ptr<Buffer> hex_req18(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 38 00 00 00 0e 0a 00 00 00 01 00 00 00 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers18 = http.parseEchoRequest(*hex_req18);
+    std::shared_ptr<Buffer> hex_req18(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 38 00 00 00 0e 0a 00 00 00 01 00 00 00 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers18 = http.parseEchoRequest(*hex_req18);
     if ((strncmp(headers18[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers18[1]->getName(), "/8", 2) == 0)
         && (headers18[3]->getType() == Element::NUMBER_AMF0)
@@ -1131,7 +1131,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number 0)");
     }
     // Number 0 Response
-    boost::shared_ptr<Buffer> hex_res18(new Buffer("00 00 00 00 00 01 00 0b 2f 38 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 00 00 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res18(new Buffer("00 00 00 00 00 01 00 0b 2f 38 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 00 00 00 00 00 00 00 00"));
     cygnal::Buffer &buf18 = http.formatEchoResponse(headers18[1]->getName(), *headers18[3]);
     string head18(reinterpret_cast<const char *>(buf18.reference()));
     const char *ptr18a = reinterpret_cast<const char *>(hex_res18->reference());
@@ -1143,8 +1143,8 @@ test_rtmpt (void)
     }
 
     // Number 1.5 Request
-    boost::shared_ptr<Buffer> hex_req19(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 39 00 00 00 0e 0a 00 00 00 01 00 3f f8 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers19 = http.parseEchoRequest(*hex_req19);
+    std::shared_ptr<Buffer> hex_req19(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 39 00 00 00 0e 0a 00 00 00 01 00 3f f8 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers19 = http.parseEchoRequest(*hex_req19);
     if ((strncmp(headers19[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers19[1]->getName(), "/9", 2) == 0)
         && (headers19[3]->getType() == Element::NUMBER_AMF0)
@@ -1154,7 +1154,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number 1.5)");
     }
     // Number 1.5 Response
-    boost::shared_ptr<Buffer> hex_res19(new Buffer("00 00 00 00 00 01 00 0b 2f 39 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 3f f8 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res19(new Buffer("00 00 00 00 00 01 00 0b 2f 39 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 3f f8 00 00 00 00 00 00"));
     cygnal::Buffer &buf19 = http.formatEchoResponse(headers19[1]->getName(), *headers19[3]);
     string head19(reinterpret_cast<const char *>(buf19.reference()));
     const char *ptr19a = reinterpret_cast<const char *>(hex_res19->reference());
@@ -1166,8 +1166,8 @@ test_rtmpt (void)
     }
 
     // Number -1.5 Request
-    boost::shared_ptr<Buffer> hex_req20(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 30 00 00 00 0e 0a 00 00 00 01 00 bf f8 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers20 = http.parseEchoRequest(*hex_req20);
+    std::shared_ptr<Buffer> hex_req20(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 30 00 00 00 0e 0a 00 00 00 01 00 bf f8 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers20 = http.parseEchoRequest(*hex_req20);
     if ((strncmp(headers20[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers20[1]->getName(), "/10", 2) == 0)
         && (headers20[3]->getType() == Element::NUMBER_AMF0)
@@ -1177,7 +1177,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number -1.5)");
     }
     // Number -1.5 Response
-    boost::shared_ptr<Buffer> hex_res20(new Buffer("00 00 00 00 00 01 00 0c 2f 31 30 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 bf f8 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res20(new Buffer("00 00 00 00 00 01 00 0c 2f 31 30 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 bf f8 00 00 00 00 00 00"));
     cygnal::Buffer &buf20 = http.formatEchoResponse(headers20[1]->getName(), *headers20[3]);
     string head20(reinterpret_cast<const char *>(buf20.reference()));
     const char *ptr20a = reinterpret_cast<const char *>(hex_res20->reference());
@@ -1189,8 +1189,8 @@ test_rtmpt (void)
     }
 
     // Number NaN Request
-    boost::shared_ptr<Buffer> hex_req21(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 31 00 00 00 0e 0a 00 00 00 01 00 ff f8 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers21 = http.parseEchoRequest(*hex_req21);
+    std::shared_ptr<Buffer> hex_req21(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 31 00 00 00 0e 0a 00 00 00 01 00 ff f8 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers21 = http.parseEchoRequest(*hex_req21);
     if ((strncmp(headers21[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers21[1]->getName(), "/11", 2) == 0)
         && (headers21[3]->getType() == Element::NUMBER_AMF0)
@@ -1200,7 +1200,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number Nan)");
     }
     // Number NaN Response
-    boost::shared_ptr<Buffer> hex_res21(new Buffer("00 00 00 00 00 01 00 0c 2f 31 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 ff f8 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res21(new Buffer("00 00 00 00 00 01 00 0c 2f 31 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 ff f8 00 00 00 00 00 00"));
     cygnal::Buffer &buf21 = http.formatEchoResponse(headers21[1]->getName(), *headers21[3]);
     string head21(reinterpret_cast<const char *>(buf21.reference()));
     const char *ptr21a = reinterpret_cast<const char *>(hex_res21->reference());
@@ -1212,11 +1212,11 @@ test_rtmpt (void)
     }
 
     // Number -Infinity Request
-    boost::shared_ptr<Buffer> hex_req22(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 32 00 00 00 0e 0a 00 00 00 01 00 ff f0 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_req22(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 32 00 00 00 0e 0a 00 00 00 01 00 ff f0 00 00 00 00 00 00"));
 
     // Number Infinity Request
-    boost::shared_ptr<Buffer> hex_req22x(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 34 00 00 00 0e 0a 00 00 00 01 00 7f ef ff ff ff ff ff ff"));
-    vector<boost::shared_ptr<cygnal::Element> > headers22x = http.parseEchoRequest(*hex_req22x);
+    std::shared_ptr<Buffer> hex_req22x(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 34 00 00 00 0e 0a 00 00 00 01 00 7f ef ff ff ff ff ff ff"));
+    vector<std::shared_ptr<cygnal::Element> > headers22x = http.parseEchoRequest(*hex_req22x);
     if ((strncmp(headers22x[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers22x[1]->getName(), "/14", 2) == 0)
         && (headers22x[3]->getType() == Element::NUMBER_AMF0)
@@ -1226,7 +1226,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Number Infinity)");
     }
     // Number Infinity Response
-    boost::shared_ptr<Buffer> hex_res23(new Buffer("00 00 00 00 00 01 00 0c 2f 31 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 7f f0 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res23(new Buffer("00 00 00 00 00 01 00 0c 2f 31 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 7f f0 00 00 00 00 00 00"));
 #if 0
     cygnal::Buffer &buf23 = http.formatEchoResponse(headers22x[1]->getName(), *headers22x[3]);
     string head23(reinterpret_cast<const char *>(buf23.reference()));
@@ -1240,21 +1240,21 @@ test_rtmpt (void)
 #endif
     
     // Number 1.79769313486231e+308 Request
-    boost::shared_ptr<Buffer> hex_req24(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 35 00 00 00 0e 0a 00 00 00 01 00 00 00 00 00 00 00 00 01"));
+    std::shared_ptr<Buffer> hex_req24(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 35 00 00 00 0e 0a 00 00 00 01 00 00 00 00 00 00 00 00 01"));
     // Number 1.79769313486231e+308 Response
-    boost::shared_ptr<Buffer> hex_res24(new Buffer("00 00 00 00 00 01 00 0c 2f 31 34 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 7f ef ff ff ff ff ff ff"));
+    std::shared_ptr<Buffer> hex_res24(new Buffer("00 00 00 00 00 01 00 0c 2f 31 34 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 7f ef ff ff ff ff ff ff"));
 
     // Number 4.940656484124654e-324 Request
-    boost::shared_ptr<Buffer> hex_req25(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 36 00 00 00 0e 0a 00 00 00 01 00 00 00 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_req25(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 03 2f 31 36 00 00 00 0e 0a 00 00 00 01 00 00 00 00 00 00 00 00 00"));
     // Number 4.940656484124654e-324 Response
-    boost::shared_ptr<Buffer> hex_res25(new Buffer("00 00 00 00 00 01 00 0c 2f 31 35 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 00 00 00 00 00 00 00 01"));
+    std::shared_ptr<Buffer> hex_res25(new Buffer("00 00 00 00 00 01 00 0c 2f 31 35 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 00 00 00 00 00 00 00 00 01"));
 
     // Number 1,2,1,2
     // Array request
-    boost::shared_ptr<Buffer> hex_req26(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 35 00 00 00 33 0a 00 00 00 01 0a 00 00 00 03 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 0a 00 00 00 02 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers26 = http.parseEchoRequest(*hex_req26);
-    std::vector<boost::shared_ptr<cygnal::Element> > props26 = headers26[3]->getProperties();
-    std::vector<boost::shared_ptr<cygnal::Element> > props26a = props26[2]->getProperties();
+    std::shared_ptr<Buffer> hex_req26(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 35 00 00 00 33 0a 00 00 00 01 0a 00 00 00 03 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 0a 00 00 00 02 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers26 = http.parseEchoRequest(*hex_req26);
+    std::vector<std::shared_ptr<cygnal::Element> > props26 = headers26[3]->getProperties();
+    std::vector<std::shared_ptr<cygnal::Element> > props26a = props26[2]->getProperties();
     if ((strncmp(headers26[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers26[1]->getName(), "/5", 2) == 0)
         && (headers26[3]->getType() == Element::STRICT_ARRAY_AMF0)
@@ -1269,7 +1269,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Strict Array of Numbers, 3 items)");
     }
     // Undefined Array response
-    boost::shared_ptr<Buffer> hex_res26(new Buffer("00 00 00 00 00 01 00 0b 2f 35 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 03 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 0a 00 00 00 02 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00"));
+    std::shared_ptr<Buffer> hex_res26(new Buffer("00 00 00 00 00 01 00 0b 2f 35 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 03 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 0a 00 00 00 02 00 3f f0 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00"));
     cygnal::Buffer &buf26 = http.formatEchoResponse(headers26[1]->getName(), *headers26[3]);
     string head26(reinterpret_cast<const char *>(buf26.reference()));
     //    cerr << hexify(hex_res26->reference()+30, amf::AMF0_NUMBER_SIZE, false) << endl;
@@ -1284,9 +1284,9 @@ test_rtmpt (void)
 
     // Number 1,,,,,,,100
     // Array request
-    boost::shared_ptr<Buffer> hex_req27(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 36 00 00 00 7f 0a 00 00 00 01 0a 00 00 00 65 00 3f f0 00 00 00 00 00 00 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 00 40 59 00 00 00 00 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers27 = http.parseEchoRequest(*hex_req27);
-    std::vector<boost::shared_ptr<cygnal::Element> > props27 = headers27[3]->getProperties();
+    std::shared_ptr<Buffer> hex_req27(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 36 00 00 00 7f 0a 00 00 00 01 0a 00 00 00 65 00 3f f0 00 00 00 00 00 00 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 00 40 59 00 00 00 00 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers27 = http.parseEchoRequest(*hex_req27);
+    std::vector<std::shared_ptr<cygnal::Element> > props27 = headers27[3]->getProperties();
     if ((strncmp(headers27[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers27[1]->getName(), "/6", 2) == 0)
         && (headers27[3]->getType() == Element::STRICT_ARRAY_AMF0)
@@ -1301,7 +1301,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Strict Array - Number, undefines, Number)");
     }
     // Undefined Array response
-    boost::shared_ptr<Buffer> hex_res27(new Buffer("00 00 00 00 00 01 00 0b 2f 36 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 08 00 00 00 66 00 01 30 00 3f f0 00 00 00 00 00 00 00 03 31 30 30 00 40 59 00 00 00 00 00 00 00 06 6c 65 6e 67 74 68 00 40 59 80 00 00 00 00 00 00 00 09"));
+    std::shared_ptr<Buffer> hex_res27(new Buffer("00 00 00 00 00 01 00 0b 2f 36 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 08 00 00 00 66 00 01 30 00 3f f0 00 00 00 00 00 00 00 03 31 30 30 00 40 59 00 00 00 00 00 00 00 06 6c 65 6e 67 74 68 00 40 59 80 00 00 00 00 00 00 00 09"));
 #if 0
     cygnal::Buffer &buf27 = http.formatEchoResponse(headers27[1]->getName(), *headers27[3]);
     string head27(reinterpret_cast<const char *>(buf27.reference()));
@@ -1318,9 +1318,9 @@ test_rtmpt (void)
 
 #if 0
     // Array request
-    boost::shared_ptr<Buffer> hex_req28(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 37 00 00 00 38 0a 00 00 00 01 08 00 00 00 01 00 06 6c 65 6e 67 74 68 00 3f f0 00 00 00 00 00 00 00 01 30 00 3f f0 00 00 00 00 00 00 00 03 6f 6e 65 00 3f f0 00 00 00 00 00 00 00 00 09"));
-    vector<boost::shared_ptr<cygnal::Element> > headers28 = http.parseEchoRequest(*hex_req28);
-    std::vector<boost::shared_ptr<cygnal::Element> > props28 = headers28[3]->getProperties();
+    std::shared_ptr<Buffer> hex_req28(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 37 00 00 00 38 0a 00 00 00 01 08 00 00 00 01 00 06 6c 65 6e 67 74 68 00 3f f0 00 00 00 00 00 00 00 01 30 00 3f f0 00 00 00 00 00 00 00 03 6f 6e 65 00 3f f0 00 00 00 00 00 00 00 00 09"));
+    vector<std::shared_ptr<cygnal::Element> > headers28 = http.parseEchoRequest(*hex_req28);
+    std::vector<std::shared_ptr<cygnal::Element> > props28 = headers28[3]->getProperties();
     if ((strncmp(headers28[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers28[1]->getName(), "/7", 2) == 0)
         && (headers28[3]->getType() == Element::ECMA_ARRAY_AMF0)
@@ -1337,7 +1337,7 @@ test_rtmpt (void)
     }
     
     // Undefined Array response
-    boost::shared_ptr<Buffer> hex_res28(new Buffer("00 00 00 00 00 01 00 0b 2f 37 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 08 00 00 00 01 00 03 6f 6e 65 00 3f f0 00 00 00 00 00 00 00 01 30 00 3f f0 00 00 00 00 00 00 00 06 6c 65 6e 67 74 68 00 3f f0 00 00 00 00 00 00 00 00 09"));
+    std::shared_ptr<Buffer> hex_res28(new Buffer("00 00 00 00 00 01 00 0b 2f 37 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 08 00 00 00 01 00 03 6f 6e 65 00 3f f0 00 00 00 00 00 00 00 01 30 00 3f f0 00 00 00 00 00 00 00 06 6c 65 6e 67 74 68 00 3f f0 00 00 00 00 00 00 00 00 09"));
     cygnal::Buffer &buf28 = http.formatEchoResponse(headers28[1]->getName(), *headers28[3]);
 //     cerr << hexify(hex_res28->reference()+30, hex_res28->allocated()-30, false) << endl;
 //     cerr << hexify(buf28.reference() + 124, buf28.allocated() - 124, false) << endl;
@@ -1352,8 +1352,8 @@ test_rtmpt (void)
 #endif
 
     // NULL String request, ie.. no data
-    boost::shared_ptr<Buffer> hex_req29(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 08 0a 00 00 00 01 02 00 00"));
-    vector<boost::shared_ptr<cygnal::Element> > headers29 = http.parseEchoRequest(*hex_req29);
+    std::shared_ptr<Buffer> hex_req29(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 08 0a 00 00 00 01 02 00 00"));
+    vector<std::shared_ptr<cygnal::Element> > headers29 = http.parseEchoRequest(*hex_req29);
     if ((strncmp(headers29[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers29[1]->getName(), "/1", 2) == 0)
         && (headers29[3]->getType() == Element::STRING_AMF0)
@@ -1363,7 +1363,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(NULL String)");
     }
     // NULL String response
-    boost::shared_ptr<Buffer> hex_res29(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 02 00 00"));
+    std::shared_ptr<Buffer> hex_res29(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 02 00 00"));
 #if 0                           // FIXME: why does this core dump ?
     cygnal::Buffer &buf29 = http.formatEchoResponse(headers29[1]->getName(), *headers29[3]);
     string head29(reinterpret_cast<const char *>(buf29.reference()));
@@ -1378,8 +1378,8 @@ test_rtmpt (void)
     
     // String request
     // "Hello world!"
-    boost::shared_ptr<Buffer> hex_req30(new Buffer(" 00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 14 0a 00 00 00 01 02 00 0c 48 65 6c 6c 6f 20 77 6f 72 6c 64 21"));
-    vector<boost::shared_ptr<cygnal::Element> > headers30 = http.parseEchoRequest(*hex_req30);
+    std::shared_ptr<Buffer> hex_req30(new Buffer(" 00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 14 0a 00 00 00 01 02 00 0c 48 65 6c 6c 6f 20 77 6f 72 6c 64 21"));
+    vector<std::shared_ptr<cygnal::Element> > headers30 = http.parseEchoRequest(*hex_req30);
     if ((strncmp(headers30[0]->getName(), "echo", 4) == 0)
         && (strncmp(headers30[1]->getName(), "/2", 2) == 0)
         && (headers30[3]->getType() == Element::STRING_AMF0)
@@ -1389,7 +1389,7 @@ test_rtmpt (void)
         runtest.fail("HTTP::parseEchoRequest(Simple String)");
     }
     // String response
-    boost::shared_ptr<Buffer> hex_res30(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 02 00 0c 48 65 6c 6c 6f 20 77 6f 72 6c 64 21"));
+    std::shared_ptr<Buffer> hex_res30(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 02 00 0c 48 65 6c 6c 6f 20 77 6f 72 6c 64 21"));
     cygnal::Buffer &buf30 = http.formatEchoResponse(headers30[1]->getName(), *headers30[3]);
     string head30(reinterpret_cast<const char *>(buf30.reference()));
     const char *ptr30a = reinterpret_cast<const char *>(hex_res30->reference());
@@ -1402,13 +1402,13 @@ test_rtmpt (void)
     
     // Array of Strings request
     // test1,test2,test3,test4
-    boost::shared_ptr<Buffer> hex_req31(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 33 00 00 00 2a 0a 00 00 00 01 0a 00 00 00 04 02 00 05 74 65 73 74 31 02 00 05 74 65 73 74 32 02 00 05 74 65 73 74 33 02 00 05 74 65 73 74 34"));
-    vector<boost::shared_ptr<cygnal::Element> > headers31 = http.parseEchoRequest(*hex_req31);
+    std::shared_ptr<Buffer> hex_req31(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 33 00 00 00 2a 0a 00 00 00 01 0a 00 00 00 04 02 00 05 74 65 73 74 31 02 00 05 74 65 73 74 32 02 00 05 74 65 73 74 33 02 00 05 74 65 73 74 34"));
+    vector<std::shared_ptr<cygnal::Element> > headers31 = http.parseEchoRequest(*hex_req31);
     if (headers31.size() == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(Simple String Array)");
     } else {
 
-        std::vector<boost::shared_ptr<cygnal::Element> > props31 = headers31[3]->getProperties();
+        std::vector<std::shared_ptr<cygnal::Element> > props31 = headers31[3]->getProperties();
         if ((strncmp(headers31[0]->getName(), "echo", 4) == 0)
             && (strncmp(headers31[1]->getName(), "/3", 2) == 0)
             && (headers31[3]->getType() == Element::STRICT_ARRAY_AMF0)
@@ -1424,7 +1424,7 @@ test_rtmpt (void)
     }
     
     // Array of Strings response
-    boost::shared_ptr<Buffer> hex_res31(new Buffer("00 00 00 00 00 01 00 0b 2f 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 04 02 00 05 74 65 73 74 31 02 00 05 74 65 73 74 32 02 00 05 74 65 73 74 33 02 00 05 74 65 73 74 34"));
+    std::shared_ptr<Buffer> hex_res31(new Buffer("00 00 00 00 00 01 00 0b 2f 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 04 02 00 05 74 65 73 74 31 02 00 05 74 65 73 74 32 02 00 05 74 65 73 74 33 02 00 05 74 65 73 74 34"));
     cygnal::Buffer &buf31 = http.formatEchoResponse(headers31[1]->getName(), *headers31[3]);
     string head31(reinterpret_cast<const char *>(buf31.reference()));
     const char *ptr31a = reinterpret_cast<const char *>(hex_res31->reference());
@@ -1437,12 +1437,12 @@ test_rtmpt (void)
 
     // Custom class Request
     // [object EchoClass]                    [object.Object]
-    boost::shared_ptr<Buffer> hex_req40(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 26 0a 00 00 00 01 03 00 05 61 74 74 72 32 00 3f f0 00 00 00 00 00 00 00 05 61 74 74 72 31 02 00 03 6f 6e 65 00 00 09"));
-    vector<boost::shared_ptr<cygnal::Element> > headers40 = http.parseEchoRequest(*hex_req40);
+    std::shared_ptr<Buffer> hex_req40(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 26 0a 00 00 00 01 03 00 05 61 74 74 72 32 00 3f f0 00 00 00 00 00 00 00 05 61 74 74 72 31 02 00 03 6f 6e 65 00 00 09"));
+    vector<std::shared_ptr<cygnal::Element> > headers40 = http.parseEchoRequest(*hex_req40);
     if (headers40[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(object CustomClass)");
     } else {
-        std::vector<boost::shared_ptr<cygnal::Element> > props40 = headers40[3]->getProperties();
+        std::vector<std::shared_ptr<cygnal::Element> > props40 = headers40[3]->getProperties();
         if ((strncmp(headers40[0]->getName(), "echo", 4) == 0)
             && (strncmp(headers40[1]->getName(), "/1", 2) == 0)
             && (headers40[3]->getType() == Element::OBJECT_AMF0)
@@ -1455,7 +1455,7 @@ test_rtmpt (void)
             runtest.fail("HTTP::parseEchoRequest(object CustomClass)");
         }
     }
-    boost::shared_ptr<Buffer> hex_res40(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 03 00 05 61 74 74 72 32 00 3f f0 00 00 00 00 00 00 00 05 61 74 74 72 31 02 00 03 6f 6e 65 00 00 09"));
+    std::shared_ptr<Buffer> hex_res40(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 03 00 05 61 74 74 72 32 00 3f f0 00 00 00 00 00 00 00 05 61 74 74 72 31 02 00 03 6f 6e 65 00 00 09"));
     cygnal::Buffer &buf40 = http.formatEchoResponse(headers40[1]->getName(), *headers40[3]);
 
     string head40(reinterpret_cast<const char *>(buf40.reference()));
@@ -1468,8 +1468,8 @@ test_rtmpt (void)
     }
     
     // [object EchoClass],[object EchoClass] [object.Object],[object.Object]
-    boost::shared_ptr<Buffer> hex_req41(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 2e 0a 00 00 00 01 0a 00 00 00 02 03 00 05 61 74 74 72 32 00 3f f0 00 00 00 00 00 00 00 05 61 74 74 72 31 02 00 03 6f 6e 65 00 00 09 07 00 01"));
-    vector<boost::shared_ptr<cygnal::Element> > headers41 = http.parseEchoRequest(*hex_req41);
+    std::shared_ptr<Buffer> hex_req41(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 2e 0a 00 00 00 01 0a 00 00 00 02 03 00 05 61 74 74 72 32 00 3f f0 00 00 00 00 00 00 00 05 61 74 74 72 31 02 00 03 6f 6e 65 00 00 09 07 00 01"));
+    vector<std::shared_ptr<cygnal::Element> > headers41 = http.parseEchoRequest(*hex_req41);
     if (headers41[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(object CustomClass Array)");
     } else {
@@ -1480,7 +1480,7 @@ test_rtmpt (void)
             runtest.fail("HTTP::parseEchoRequest(object CustomClass Array)");
         }
     }
-    boost::shared_ptr<Buffer> hex_res41(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 02 03 00 05 61 74 74 72 32 00 3f f0 00 00 00 00 00 00 00 05 61 74 74 72 31 02 00 03 6f 6e 65 00 00 09 07 00 01"));
+    std::shared_ptr<Buffer> hex_res41(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 02 03 00 05 61 74 74 72 32 00 3f f0 00 00 00 00 00 00 00 05 61 74 74 72 31 02 00 03 6f 6e 65 00 00 09 07 00 01"));
     cygnal::Buffer &buf41 = http.formatEchoResponse(headers41[1]->getName(), *headers41[3]);
     string head41(reinterpret_cast<const char *>(buf41.reference()));
     const char *ptr41a = reinterpret_cast<const char *>(hex_res41->reference());
@@ -1493,8 +1493,8 @@ test_rtmpt (void)
 
     // Remote Class
     // [object RemoteClass]                      [object RemoteClass]
-    boost::shared_ptr<Buffer> hex_req42(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 59 0a 00 00 00 01 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 40 00 00 00 00 00 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 6f 6e 65 00 00 09"));
-    vector<boost::shared_ptr<cygnal::Element> > headers42 = http.parseEchoRequest(*hex_req42);
+    std::shared_ptr<Buffer> hex_req42(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 31 00 00 00 59 0a 00 00 00 01 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 40 00 00 00 00 00 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 6f 6e 65 00 00 09"));
+    vector<std::shared_ptr<cygnal::Element> > headers42 = http.parseEchoRequest(*hex_req42);
     if (headers42[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(Remote Class)");
     } else {    
@@ -1508,7 +1508,7 @@ test_rtmpt (void)
         }
     }
 
-    boost::shared_ptr<Buffer> hex_res42(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 6f 6e 65 00 0a 61 74 74 72 69 62 75 74 65 32 00 40 00 00 00 00 00 00 00 00 00 09"));
+    std::shared_ptr<Buffer> hex_res42(new Buffer("00 00 00 00 00 01 00 0b 2f 31 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 6f 6e 65 00 0a 61 74 74 72 69 62 75 74 65 32 00 40 00 00 00 00 00 00 00 00 00 09"));
     cygnal::Buffer &buf42 = http.formatEchoResponse(headers42[1]->getName(), *headers42[3]);
     string head42(reinterpret_cast<const char *>(buf42.reference()));
     const char *ptr42a = reinterpret_cast<const char *>(hex_res42->reference());
@@ -1522,14 +1522,14 @@ test_rtmpt (void)
     // An array of RemoteClass objects
     // org.red5.server.webapp.echo.RemoteClass
     // [object RemoteClass],[object RemoteClass] [object RemoteClass],[object RemoteClass]
-    boost::shared_ptr<Buffer> hex_req43(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 b2 0a 00 00 00 01 0a 00 00 00 02 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 3f f0 00 00 00 00 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 6f 6e 65 00 00 09 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 40 00 00 00 00 00 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 74 77 6f 00 00 09"));
-    vector<boost::shared_ptr<cygnal::Element> > headers43 = http.parseEchoRequest(*hex_req43);
+    std::shared_ptr<Buffer> hex_req43(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 32 00 00 00 b2 0a 00 00 00 01 0a 00 00 00 02 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 3f f0 00 00 00 00 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 6f 6e 65 00 00 09 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 40 00 00 00 00 00 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 74 77 6f 00 00 09"));
+    vector<std::shared_ptr<cygnal::Element> > headers43 = http.parseEchoRequest(*hex_req43);
     if (headers43[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(object RemoteClass Array, 2 items)");
     } else {
-	std::vector<boost::shared_ptr<cygnal::Element> > props43 = headers43[3]->getProperties();
-	std::vector<boost::shared_ptr<cygnal::Element> > props43a = props43[0]->getProperties();
-	std::vector<boost::shared_ptr<cygnal::Element> > props43b = props43[1]->getProperties();
+	std::vector<std::shared_ptr<cygnal::Element> > props43 = headers43[3]->getProperties();
+	std::vector<std::shared_ptr<cygnal::Element> > props43a = props43[0]->getProperties();
+	std::vector<std::shared_ptr<cygnal::Element> > props43b = props43[1]->getProperties();
         if ((strncmp(headers43[0]->getName(), "echo", 4) == 0)
             && (strncmp(headers43[1]->getName(), "/2", 2) == 0)
             && (headers43[3]->getType() == Element::STRICT_ARRAY_AMF0)
@@ -1551,10 +1551,10 @@ test_rtmpt (void)
             runtest.fail("HTTP::parseEchoRequest(object RemoteClass Array, 2 items)");
         }
     }
-    boost::shared_ptr<Buffer> hex_res43(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 02 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 6f 6e 65 00 0a 61 74 74 72 69 62 75 74 65 32 00 3f f0 00 00 00 00 00 00 00 00 09 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 74 77 6f 00 0a 61 74 74 72 69 62 75 74 65 32 00 40 00 00 00 00 00 00 00 00 00 09"));
+    std::shared_ptr<Buffer> hex_res43(new Buffer("00 00 00 00 00 01 00 0b 2f 32 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 0a 00 00 00 02 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 6f 6e 65 00 0a 61 74 74 72 69 62 75 74 65 32 00 3f f0 00 00 00 00 00 00 00 00 09 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 03 74 77 6f 00 0a 61 74 74 72 69 62 75 74 65 32 00 40 00 00 00 00 00 00 00 00 00 09"));
     cygnal::Buffer &buf43 = http.formatEchoResponse(headers43[1]->getName(), *headers43[3]);
-    std::vector<boost::shared_ptr<cygnal::Element> > props43 = headers43[3]->getProperties();
-    //    std::vector<boost::shared_ptr<cygnal::Element> > props43a = props43[0]->getProperties();
+    std::vector<std::shared_ptr<cygnal::Element> > props43 = headers43[3]->getProperties();
+    //    std::vector<std::shared_ptr<cygnal::Element> > props43a = props43[0]->getProperties();
 //     cerr << hexify(hex_res43->reference()+29, hex_res43->allocated()-29 , false) << endl;
 //     cerr << hexify(buf43.reference(), buf43.allocated(), true) << endl;
 //     cerr << hexify(buf43.reference() + 124, buf43.allocated()-124, false) << endl;
@@ -1570,8 +1570,8 @@ test_rtmpt (void)
 #endif
     
     // [object RemoteClass]                      [object RemoteClass]
-    boost::shared_ptr<Buffer> hex_req44(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 33 00 00 00 5b 0a 00 00 00 01 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 41 d2 65 80 b4 80 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 05 74 68 72 65 65 00 00 09"));
-    vector<boost::shared_ptr<cygnal::Element> > headers44 = http.parseEchoRequest(*hex_req44);
+    std::shared_ptr<Buffer> hex_req44(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 33 00 00 00 5b 0a 00 00 00 01 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 41 d2 65 80 b4 80 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 05 74 68 72 65 65 00 00 09"));
+    vector<std::shared_ptr<cygnal::Element> > headers44 = http.parseEchoRequest(*hex_req44);
     if (headers44[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(object RemoteClass Array)");
     } else {
@@ -1583,7 +1583,7 @@ test_rtmpt (void)
             runtest.fail("HTTP::parseEchoRequest(object RemoteClass Array, 2 items)");
         }
     }
-    boost::shared_ptr<Buffer> hex_res44(new Buffer("00 00 00 00 00 01 00 0b 2f 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 05 74 68 72 65 65 00 0a 61 74 74 72 69 62 75 74 65 32 00 41 d2 65 80 b4 80 00 00 00 00 09"));
+    std::shared_ptr<Buffer> hex_res44(new Buffer("00 00 00 00 00 01 00 0b 2f 33 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 05 74 68 72 65 65 00 0a 61 74 74 72 69 62 75 74 65 32 00 41 d2 65 80 b4 80 00 00 00 00 09"));
     cygnal::Buffer &buf44 = http.formatEchoResponse(headers44[1]->getName(), *headers44[3]);
     string head44(reinterpret_cast<const char *>(buf44.reference()));
     const char *ptr44a = reinterpret_cast<const char *>(hex_res44->reference());
@@ -1596,12 +1596,12 @@ test_rtmpt (void)
 
 #if 0
     // [object RemoteClass]                      [object RemoteClass]
-    boost::shared_ptr<Buffer> hex_req45(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 34 00 00 00 5a 0a 00 00 00 01 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 42 71 3f 8f 4d 00 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 04 66 6f 75 72 00 00 09"));
-    vector<boost::shared_ptr<cygnal::Element> > headers45 = http.parseEchoRequest(*hex_req45);
+    std::shared_ptr<Buffer> hex_req45(new Buffer("00 00 00 00 00 01 00 04 65 63 68 6f 00 02 2f 34 00 00 00 5a 0a 00 00 00 01 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 32 00 42 71 3f 8f 4d 00 00 00 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 04 66 6f 75 72 00 00 09"));
+    vector<std::shared_ptr<cygnal::Element> > headers45 = http.parseEchoRequest(*hex_req45);
     if (headers45[3] == 0) {
         runtest.unresolved("HTTP::parseEchoRequest(object RemoteClass Array)");
     } else {
-	std::vector<boost::shared_ptr<cygnal::Element> > props45 = headers45[3]->getProperties();
+	std::vector<std::shared_ptr<cygnal::Element> > props45 = headers45[3]->getProperties();
         if (props45.size() == 2) {
             if ((strncmp(headers45[0]->getName(), "echo", 4) == 0)
                 && (strncmp(headers45[1]->getName(), "/4", 2) == 0)
@@ -1622,7 +1622,7 @@ test_rtmpt (void)
         }
     }
     
-    boost::shared_ptr<Buffer> hex_res45(new Buffer("00 00 00 00 00 01 00 0b 2f 34 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 04 66 6f 75 72 00 0a 61 74 74 72 69 62 75 74 65 32 00 c1 9c 2c c0 00 00 00 00 00 00 09"));
+    std::shared_ptr<Buffer> hex_res45(new Buffer("00 00 00 00 00 01 00 0b 2f 34 2f 6f 6e 52 65 73 75 6c 74 00 04 6e 75 6c 6c ff ff ff ff 10 00 27 6f 72 67 2e 72 65 64 35 2e 73 65 72 76 65 72 2e 77 65 62 61 70 70 2e 65 63 68 6f 2e 52 65 6d 6f 74 65 43 6c 61 73 73 00 0a 61 74 74 72 69 62 75 74 65 31 02 00 04 66 6f 75 72 00 0a 61 74 74 72 69 62 75 74 65 32 00 c1 9c 2c c0 00 00 00 00 00 00 09"));
     cygnal::Buffer &buf45 = http.formatEchoResponse(headers45[1]->getName(), *headers45[3]);
     string head45(reinterpret_cast<const char *>(buf45.reference()));
     const char *ptr45a = reinterpret_cast<const char *>(hex_res45->reference());
@@ -1648,7 +1648,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req1->reference(), hex_req1->allocated(), false) << endl;
     hex_req1->corrupt(6);
 //    cerr << hexify(hex_req1->reference(), hex_req1->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt1 = http.parseEchoRequest(*hex_req1);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt1 = http.parseEchoRequest(*hex_req1);
     if (corrupt1.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Boolean TRUE)");
     } else {
@@ -1658,7 +1658,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req2->reference(), hex_req2->allocated(), false) << endl;
     hex_req2->corrupt(4);
 //    cerr << hexify(hex_req2->reference(), hex_req2->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt2 = http.parseEchoRequest(*hex_req2);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt2 = http.parseEchoRequest(*hex_req2);
     if (corrupt2.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Boolean FALSE)");
     } else {
@@ -1668,7 +1668,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req3->reference(), hex_req3->allocated(), false) << endl;
     hex_req3->corrupt(3);
 //    cerr << hexify(hex_req3->reference(), hex_req3->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt3 = http.parseEchoRequest(*hex_req3);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt3 = http.parseEchoRequest(*hex_req3);
     if (corrupt3.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(NULL Object)");
     } else {
@@ -1678,7 +1678,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req4->reference(), hex_req4->allocated(), false) << endl;
     hex_req4->corrupt(7);
 //    cerr << hexify(hex_req4->reference(), hex_req4->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt4 = http.parseEchoRequest(*hex_req4);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt4 = http.parseEchoRequest(*hex_req4);
     if (corrupt4.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(UNDEFINED Object)");
     } else {
@@ -1688,7 +1688,7 @@ test_rtmpt (void)
     cerr << hexify(hex_req5->reference(), hex_req5->allocated(), false) << endl;
     hex_req5->corrupt(5);
     cerr << hexify(hex_req5->reference(), hex_req5->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt5 = http.parseEchoRequest(*hex_req5);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt5 = http.parseEchoRequest(*hex_req5);
     if (corrupt5.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(DATE Object)");
     } else {
@@ -1698,7 +1698,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req6->reference(), hex_req6->allocated(), false) << endl;
     hex_req6->corrupt(7);
 //    cerr << hexify(hex_req6->reference(), hex_req6->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt6 = http.parseEchoRequest(*hex_req6);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt6 = http.parseEchoRequest(*hex_req6);
     if (corrupt6.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(DATE Array)");
     } else {
@@ -1708,7 +1708,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req7->reference(), hex_req7->allocated(), false) << endl;
     hex_req7->corrupt(5);
 //    cerr << hexify(hex_req7->reference(), hex_req7->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt7 = http.parseEchoRequest(*hex_req7);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt7 = http.parseEchoRequest(*hex_req7);
     if (corrupt7.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Undefined Strict Array)");
     } else {
@@ -1718,7 +1718,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req8->reference(), hex_req8->allocated(), false) << endl;
     hex_req8->corrupt(2);
 //    cerr << hexify(hex_req8->reference(), hex_req8->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt8 = http.parseEchoRequest(*hex_req8);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt8 = http.parseEchoRequest(*hex_req8);
     if (corrupt8.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Simple Strict Array of Numbers. 1 item)");
     } else {
@@ -1728,7 +1728,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req9->reference(), hex_req9->allocated(), false) << endl;
     hex_req9->corrupt(3);
 //    cerr << hexify(hex_req9->reference(), hex_req9->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt9 = http.parseEchoRequest(*hex_req9);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt9 = http.parseEchoRequest(*hex_req9);
     if (corrupt9.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Simple Strict Array of Numbers. 2 items)");
     } else {
@@ -1738,7 +1738,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req10->reference(), hex_req10->allocated(), false) << endl;
     hex_req10->corrupt(2);
 //    cerr << hexify(hex_req10->reference(), hex_req10->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt10 = http.parseEchoRequest(*hex_req10);    
+    vector<std::shared_ptr<cygnal::Element> > corrupt10 = http.parseEchoRequest(*hex_req10);
     if (corrupt10.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Simple Strict Array of Numbers. 3 items)");
     } else {
@@ -1748,7 +1748,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req11->reference(), hex_req11->allocated(), false) << endl;
     hex_req11->corrupt(2);
 //    cerr << hexify(hex_req11->reference(), hex_req11->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt11 = http.parseEchoRequest(*hex_req11);
+    vector<std::shared_ptr<cygnal::Element> > corrupt11 = http.parseEchoRequest(*hex_req11);
     if (corrupt11.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number 0)");
     } else {
@@ -1758,7 +1758,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req12->reference(), hex_req12->allocated(), false) << endl;
     hex_req12->corrupt(4);
 //    cerr << hexify(hex_req12->reference(), hex_req12->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt12 = http.parseEchoRequest(*hex_req12);
+    vector<std::shared_ptr<cygnal::Element> > corrupt12 = http.parseEchoRequest(*hex_req12);
     if (corrupt12.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number 1)");
     } else {
@@ -1768,7 +1768,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req13->reference(), hex_req13->allocated(), false) << endl;
     hex_req13->corrupt(1);
 //    cerr << hexify(hex_req13->reference(), hex_req13->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt13 = http.parseEchoRequest(*hex_req13);
+    vector<std::shared_ptr<cygnal::Element> > corrupt13 = http.parseEchoRequest(*hex_req13);
     if (corrupt13.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number -1)");
     } else {
@@ -1778,7 +1778,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req14->reference(), hex_req14->allocated(), false) << endl;
     hex_req14->corrupt(5);
 //    cerr << hexify(hex_req14->reference(), hex_req14->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt14 = http.parseEchoRequest(*hex_req14);
+    vector<std::shared_ptr<cygnal::Element> > corrupt14 = http.parseEchoRequest(*hex_req14);
     if (corrupt14.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number 256)");
     } else {
@@ -1788,7 +1788,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req15->reference(), hex_req15->allocated(), false) << endl;
     hex_req15->corrupt(5);
 //    cerr << hexify(hex_req15->reference(), hex_req15->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt15 = http.parseEchoRequest(*hex_req15);
+    vector<std::shared_ptr<cygnal::Element> > corrupt15 = http.parseEchoRequest(*hex_req15);
     if (corrupt15.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number -256)");
     } else {
@@ -1798,7 +1798,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req16->reference(), hex_req16->allocated(), false) << endl;
     hex_req16->corrupt(2);
 //    cerr << hexify(hex_req16->reference(), hex_req16->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt16 = http.parseEchoRequest(*hex_req16);
+    vector<std::shared_ptr<cygnal::Element> > corrupt16 = http.parseEchoRequest(*hex_req16);
     if (corrupt16.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number 65536)");
     } else {
@@ -1808,7 +1808,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req17->reference(), hex_req17->allocated(), false) << endl;
     hex_req16x->corrupt(6);
 //    cerr << hexify(hex_req17->reference(), hex_req17->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt17 = http.parseEchoRequest(*hex_req16x);
+    vector<std::shared_ptr<cygnal::Element> > corrupt17 = http.parseEchoRequest(*hex_req16x);
     if (corrupt17.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number -65536)");
     } else {
@@ -1818,7 +1818,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req19->reference(), hex_req19->allocated(), false) << endl;
     hex_req19->corrupt(1);
 //    cerr << hexify(hex_req19->reference(), hex_req19->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt19 = http.parseEchoRequest(*hex_req19);
+    vector<std::shared_ptr<cygnal::Element> > corrupt19 = http.parseEchoRequest(*hex_req19);
     if (corrupt19.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number 1.5)");
     } else {
@@ -1828,7 +1828,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req20->reference(), hex_req20->allocated(), false) << endl;
     hex_req20->corrupt(4);
 //    cerr << hexify(hex_req20->reference(), hex_req20->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt20 = http.parseEchoRequest(*hex_req20);
+    vector<std::shared_ptr<cygnal::Element> > corrupt20 = http.parseEchoRequest(*hex_req20);
     if (corrupt20.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number -1.5)");
     } else {
@@ -1838,7 +1838,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req21->reference(), hex_req21->allocated(), false) << endl;
     hex_req21->corrupt(8);
 //    cerr << hexify(hex_req21->reference(), hex_req21->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt21 = http.parseEchoRequest(*hex_req21);
+    vector<std::shared_ptr<cygnal::Element> > corrupt21 = http.parseEchoRequest(*hex_req21);
     if (corrupt21.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number NaN)");
     } else {
@@ -1848,7 +1848,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req22->reference(), hex_req22->allocated(), false) << endl;
     hex_req22->corrupt(1);
 //    cerr << hexify(hex_req22->reference(), hex_req22->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt22 = http.parseEchoRequest(*hex_req22);
+    vector<std::shared_ptr<cygnal::Element> > corrupt22 = http.parseEchoRequest(*hex_req22);
     if (corrupt22.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Number Infinity)");
     } else {
@@ -1858,7 +1858,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req26->reference(), hex_req26->allocated(), false) << endl;
     hex_req26->corrupt(5);
 //    cerr << hexify(hex_req26->reference(), hex_req26->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt26 = http.parseEchoRequest(*hex_req26);
+    vector<std::shared_ptr<cygnal::Element> > corrupt26 = http.parseEchoRequest(*hex_req26);
     if (corrupt26.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Strict Array of Numbers, 3 items)");
     } else {
@@ -1868,7 +1868,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req27->reference(), hex_req27->allocated(), false) << endl;
     hex_req27->corrupt(3);
 //    cerr << hexify(hex_req27->reference(), hex_req27->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt27 = http.parseEchoRequest(*hex_req27);
+    vector<std::shared_ptr<cygnal::Element> > corrupt27 = http.parseEchoRequest(*hex_req27);
     if (corrupt27.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Strict Array - Number, undefines, Number)");
     } else {
@@ -1878,7 +1878,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req29->reference(), hex_req29->allocated(), false) << endl;
     hex_req29->corrupt(8);
 //    cerr << hexify(hex_req29->reference(), hex_req29->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt29 = http.parseEchoRequest(*hex_req29);
+    vector<std::shared_ptr<cygnal::Element> > corrupt29 = http.parseEchoRequest(*hex_req29);
     if (corrupt29.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(NULL String)");
     } else {
@@ -1888,7 +1888,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req30->reference(), hex_req30->allocated(), false) << endl;
     hex_req30->corrupt(7);
 //    cerr << hexify(hex_req30->reference(), hex_req30->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt30 = http.parseEchoRequest(*hex_req30);
+    vector<std::shared_ptr<cygnal::Element> > corrupt30 = http.parseEchoRequest(*hex_req30);
     if (corrupt30.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Simple String)");
     } else {
@@ -1898,7 +1898,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req31->reference(), hex_req31->allocated(), false) << endl;
     hex_req31->corrupt(2);
 //    cerr << hexify(hex_req31->reference(), hex_req31->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt31 = http.parseEchoRequest(*hex_req31);
+    vector<std::shared_ptr<cygnal::Element> > corrupt31 = http.parseEchoRequest(*hex_req31);
     if (corrupt31.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(Simple String Array)");
     } else {
@@ -1908,7 +1908,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req40->reference(), hex_req40->allocated(), false) << endl;
     hex_req40->corrupt(6);
 //    cerr << hexify(hex_req40->reference(), hex_req40->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt40 = http.parseEchoRequest(*hex_req40);
+    vector<std::shared_ptr<cygnal::Element> > corrupt40 = http.parseEchoRequest(*hex_req40);
     if (corrupt40.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(object CustomClass)");
     } else {
@@ -1918,7 +1918,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req41->reference(), hex_req41->allocated(), false) << endl;
     hex_req41->corrupt(1);
 //    cerr << hexify(hex_req41->reference(), hex_req41->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt41 = http.parseEchoRequest(*hex_req41);
+    vector<std::shared_ptr<cygnal::Element> > corrupt41 = http.parseEchoRequest(*hex_req41);
     if (corrupt41.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(object CustomClass Array)");
     } else {
@@ -1928,7 +1928,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req42->reference(), hex_req42->allocated(), false) << endl;
     hex_req42->corrupt(2);
 //    cerr << hexify(hex_req42->reference(), hex_req42->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt42 = http.parseEchoRequest(*hex_req42);
+    vector<std::shared_ptr<cygnal::Element> > corrupt42 = http.parseEchoRequest(*hex_req42);
     if (corrupt42.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(object RemoteClass)");
     } else {
@@ -1938,7 +1938,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req43->reference(), hex_req43->allocated(), false) << endl;
     hex_req43->corrupt(4);
 //    cerr << hexify(hex_req43->reference(), hex_req43->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt43 = http.parseEchoRequest(*hex_req43);
+    vector<std::shared_ptr<cygnal::Element> > corrupt43 = http.parseEchoRequest(*hex_req43);
     if (corrupt43.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(object RemoteClass Array, 2 items)");
     } else {
@@ -1948,7 +1948,7 @@ test_rtmpt (void)
 //    cerr << hexify(hex_req44->reference(), hex_req44->allocated(), false) << endl;
     hex_req44->corrupt(3);
 //    cerr << hexify(hex_req44->reference(), hex_req44->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt44 = http.parseEchoRequest(*hex_req44);
+    vector<std::shared_ptr<cygnal::Element> > corrupt44 = http.parseEchoRequest(*hex_req44);
     if (corrupt44.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(object RemoteClass");
     } else {
@@ -1960,7 +1960,7 @@ test_rtmpt (void)
 #if 0
     hex_req45->corrupt(6);
 //    cerr << hexify(hex_req45->reference(), hex_req45->allocated(), false) << endl;
-    vector<boost::shared_ptr<cygnal::Element> > corrupt45 = http.parseEchoRequest(*hex_req45);
+    vector<std::shared_ptr<cygnal::Element> > corrupt45 = http.parseEchoRequest(*hex_req45);
     if (corrupt45.size()) {
         runtest.pass("Corrupted HTTP::parseEchoRequest(object RemoteClass");
     } else {
diff --git a/cygnal/testsuite/libnet.all/test_rtmp.cpp b/cygnal/testsuite/libnet.all/test_rtmp.cpp
index fcd7d67..80134e1 100644
--- a/cygnal/testsuite/libnet.all/test_rtmp.cpp
+++ b/cygnal/testsuite/libnet.all/test_rtmp.cpp
@@ -23,7 +23,6 @@
 #ifdef HAVE_DEJAGNU_H
 
 //#include <netinet/in.h>
-#include <boost/shared_ptr.hpp>
 #include <string>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -149,11 +148,11 @@ test_split()
     
     RTMPClient client;
     bool notest = false;
-    boost::shared_ptr<RTMP::rtmp_head_t> rthead;
+    std::shared_ptr<RTMP::rtmp_head_t> rthead;
     CQue *que;
 
-    boost::shared_ptr<Buffer> buf1(new Buffer("04 00 00 00 00 00 b8 14 01 00 00 00 02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 52 65 73 65 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 2d 50 6c 61 79 69 6e 67 20 61 6e 64 20 72 65 73 65 74 74 69 6e 67 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 2e c4 00 07 64 65 74 61 69 6c 73 02 00 16 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 00 08 63 6c 69 65 6e 74 69 64 00 41 bf e4 78 30 00 00 00 00 00 09"));
-    boost::shared_ptr<RTMP::queues_t> queues1 = client.split(*buf1);
+    std::shared_ptr<Buffer> buf1(new Buffer("04 00 00 00 00 00 b8 14 01 00 00 00 02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 52 65 73 65 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 2d 50 6c 61 79 69 6e 67 20 61 6e 64 20 72 65 73 65 74 74 69 6e 67 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 2e c4 00 07 64 65 74 61 69 6c 73 02 00 16 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 00 08 63 6c 69 65 6e 74 69 64 00 41 bf e4 78 30 00 00 00 00 00 09"));
+    std::shared_ptr<RTMP::queues_t> queues1 = client.split(*buf1);
     
     if (!queues1) {
         notest = true;
@@ -174,9 +173,9 @@ test_split()
         }
     }
     
-//     boost::shared_ptr<cygnal::Buffer> tmpbuf = que1.front();
+//     std::shared_ptr<cygnal::Buffer> tmpbuf = que1.front();
 //     que1.pop_front();
-    boost::shared_ptr<cygnal::Buffer> tmpbuf(new Buffer);
+    std::shared_ptr<cygnal::Buffer> tmpbuf(new Buffer);
     if (notest) {
         runtest.untested("RTMP::split(1st packet header) of 2");
     } else {
@@ -216,8 +215,8 @@ test_split()
     
 //    delete queues1;
     
-    boost::shared_ptr<Buffer> buf2(new Buffer("02 00 00 00 00 00 04 01 00 00 00 00 00 00 00 80 02 00 00 00 00 00 06 04 00 00 00 00 00 04 00 00 00 01 04 00 00 00 00 00 b8 14 01 00 00 00 02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 52 65 73 65 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 2d 50 6c 61 79 69 6e 67 20 61 6e 64 20 72 65 73 65 74 74 69 6e 67 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 2e 02 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 00 01 c4 00 07 64 65 74 61 69 6c 73 02 00 16 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 00 08 63 6c 69 65 6e 74 69 64 00 41 d8 fb 78 56 00 00 00 00 00 09"));
-    boost::shared_ptr<RTMP::queues_t> queues2 = client.split(*buf2);
+    std::shared_ptr<Buffer> buf2(new Buffer("02 00 00 00 00 00 04 01 00 00 00 00 00 00 00 80 02 00 00 00 00 00 06 04 00 00 00 00 00 04 00 00 00 01 04 00 00 00 00 00 b8 14 01 00 00 00 02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 52 65 73 65 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 2d 50 6c 61 79 69 6e 67 20 61 6e 64 20 72 65 73 65 74 74 69 6e 67 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 2e 02 00 00 00 00 00 06 04 00 00 00 00 00 00 00 00 00 01 c4 00 07 64 65 74 61 69 6c 73 02 00 16 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 00 08 63 6c 69 65 6e 74 69 64 00 41 d8 fb 78 56 00 00 00 00 00 09"));
+    std::shared_ptr<RTMP::queues_t> queues2 = client.split(*buf2);
     if (queues2) {
         if (queues2->size() == 0) {
             notest = true;
@@ -316,8 +315,8 @@ test_split()
     // Try a much more complex packet, similar to the previous one, but with more intermixed packets
     // for other channels.
 //    ...............onStatus.............level...status..code...NetStream.Play.Start..description..'Started playing gate06_tablan_bcueu_01...clie......'.......xF....?j..... at ....?..O.]...............................;...../..rP.....K.......m......,......%......................B........M.<.$.....`.......i..9..C..J..........%..........G....2Np.".1`@................;.ntid.A..xV.....
-    boost::shared_ptr<Buffer> buf3(new Buffer("05 00 00 00 00 00 90 14 01 00 00 00 02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 61 72 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 27 53 74 61 72 74 65 64 20 70 6c 61 79 69 6e 67 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 2e 00 08 63 6c 69 65 07 00 00 00 00 00 27 09 01 00 00 00 14 00 78 46 0f 14 0f 14 3f 6a ff ff 00 08 9f 40 10 9f f8 8b 3f fd b2 4f fb 5d c0 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 08 01 00 00 00 08 00 00 00 00 01 3b 08 01 00 00 00 2f ff fb 72 50 00 00 00 00 00 4b 00 00 00 00 07 e0 09 6d 00 00 00 00 00 01 2c 00 00 00 00 1f 80 25 b4 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff fc 0c 87 42 80 ec c8 b0 0e 90 c2 12 4d 90 3c 18 24 16 01 88 03 e1 60 1a 1a a0 1a 09 9c 1a 69 a1 10 39 06 8d 43 02 c3 4a 12 0b 00 c8 1f 0b 00 d8 16 00 25 9f ff ff fe c1 a0 00 00 ff 8a 47 80 80 0e 1e 32 4e 70 f1 22 ed 31 60 40 f8 02 00 00 00 00 00 04 01 00 00 00 00 00 00 01 3b c5 6e 74 69 64 00 41 d8 fb 78 56 00 00 00 00 00 09"));
-    boost::shared_ptr<RTMP::queues_t> queues3 = client.split(*buf3);
+    std::shared_ptr<Buffer> buf3(new Buffer("05 00 00 00 00 00 90 14 01 00 00 00 02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 61 72 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 27 53 74 61 72 74 65 64 20 70 6c 61 79 69 6e 67 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 30 31 2e 00 08 63 6c 69 65 07 00 00 00 00 00 27 09 01 00 00 00 14 00 78 46 0f 14 0f 14 3f 6a ff ff 00 08 9f 40 10 9f f8 8b 3f fd b2 4f fb 5d c0 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 08 01 00 00 00 08 00 00 00 00 01 3b 08 01 00 00 00 2f ff fb 72 50 00 00 00 00 00 4b 00 00 00 00 07 e0 09 6d 00 00 00 00 00 01 2c 00 00 00 00 1f 80 25 b4 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff fc 0c 87 42 80 ec c8 b0 0e 90 c2 12 4d 90 3c 18 24 16 01 88 03 e1 60 1a 1a a0 1a 09 9c 1a 69 a1 10 39 06 8d 43 02 c3 4a 12 0b 00 c8 1f 0b 00 d8 16 00 25 9f ff ff fe c1 a0 00 00 ff 8a 47 80 80 0e 1e 32 4e 70 f1 22 ed 31 60 40 f8 02 00 00 00 00 00 04 01 00 00 00 00 00 00 01 3b c5 6e 74 69 64 00 41 d8 fb 78 56 00 00 00 00 00 09"));
+    std::shared_ptr<RTMP::queues_t> queues3 = client.split(*buf3);
     if (queues3) {
         if (queues3->size() == 0) {
             notest = true;
@@ -414,10 +413,10 @@ test_split()
 
     // the oflaDemo connect packet, which currently core dumps
     notest = false;
-    boost::shared_ptr<Buffer> buf4(new Buffer("03 00 00 00 00 01 0b 14 00 00 00 00 02 00 07 63 6f 6e 6e 65 63 74 00 3f f0 00 00 00 00 00 00 03 00 03 61 70 70 02 00 08 6f 66 6c 61 44 65 6d 6f 00 08 66 6c 61 73 68 56 65 72 02 00 0e 4c 4e 58 20 31 30 2c 30 2c 31 32 2c 33 36 00 06 73 77 66 55 72 6c 02 00 29 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 35 30 38 30 2f 64 65 6d 6f 73 2f 6f 66 6c 61 5f 64 65 6d 6f 2e 73 77 66 00 05 74 63 55 72 6c 02 00 1e 72 74 6d c3 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 35 39 33 35 2f 6f 66 6c 61 44 65 6d 6f 00 04 66 70 61 64 01 00 00 0c 63 61 70 61 62 69 6c 69 74 69 65 73 00 40 2e 00 00 00 00 00 00 00 0b 61 75 64 69 6f 43 6f 64 65 63 73 00 40 a8 ee 00 00 00 00 00 00 0b 76 69 64 65 6f 43 6f 64 65 63 73 00 40 6f 80 00 00 00 00 00 00 0d 76 69 64 65 6f 46 75 6e 63 74 69 6f 6e 00 3f f0 00 00 00 00 00 00 00 07 c3 70 61 67 65 55 72 6c 06 00 00 09"));
+    std::shared_ptr<Buffer> buf4(new Buffer("03 00 00 00 00 01 0b 14 00 00 00 00 02 00 07 63 6f 6e 6e 65 63 74 00 3f f0 00 00 00 00 00 00 03 00 03 61 70 70 02 00 08 6f 66 6c 61 44 65 6d 6f 00 08 66 6c 61 73 68 56 65 72 02 00 0e 4c 4e 58 20 31 30 2c 30 2c 31 32 2c 33 36 00 06 73 77 66 55 72 6c 02 00 29 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 35 30 38 30 2f 64 65 6d 6f 73 2f 6f 66 6c 61 5f 64 65 6d 6f 2e 73 77 66 00 05 74 63 55 72 6c 02 00 1e 72 74 6d c3 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 35 39 33 35 2f 6f 66 6c 61 44 65 6d 6f 00 04 66 70 61 64 01 00 00 0c 63 61 70 61 62 69 6c 69 74 69 65 73 00 40 2e 00 00 00 00 00 00 00 0b 61 75 64 69 6f 43 6f 64 65 63 73 00 40 a8 ee 00 00 00 00 00 00 0b 76 69 64 65 6f 43 6f 64 65 63 73 00 40 6f 80 00 00 00 00 00 00 0d 76 69 64 65 6f 46 75 6e 63 74 69 6f 6e 00 3f f0 00 00 00 00 00 00 00 07 c3 70 61 67 65 55 72 6c 06 00 00 09"));
 //    buf4->dump();
     
-    boost::shared_ptr<RTMP::queues_t> queues4 = client.split(*buf4);
+    std::shared_ptr<RTMP::queues_t> queues4 = client.split(*buf4);
     if (queues4) {
         if (queues4->size() == 0) {
             notest = true;
@@ -447,12 +446,12 @@ test_system()
     
     RTMPClient client;
     
-    boost::shared_ptr<cygnal::Buffer> buf1(new cygnal::Buffer("00 00 00 00 00 00")); // clear buffer message
-    boost::shared_ptr<cygnal::Buffer> buf2(new cygnal::Buffer("00 06 cf 03 04 c3")); // ping client from server
-    boost::shared_ptr<cygnal::Buffer> buf3(new cygnal::Buffer("00 07 cf 03 04 c3")); // Pong, reply from client
-    boost::shared_ptr<cygnal::Buffer> buf4(new cygnal::Buffer("00 00 00 00 00 01")); // clear buffer message
+    std::shared_ptr<cygnal::Buffer> buf1(new cygnal::Buffer("00 00 00 00 00 00")); // clear buffer message
+    std::shared_ptr<cygnal::Buffer> buf2(new cygnal::Buffer("00 06 cf 03 04 c3")); // ping client from server
+    std::shared_ptr<cygnal::Buffer> buf3(new cygnal::Buffer("00 07 cf 03 04 c3")); // Pong, reply from client
+    std::shared_ptr<cygnal::Buffer> buf4(new cygnal::Buffer("00 00 00 00 00 01")); // clear buffer message
     
-    boost::shared_ptr<RTMP::rtmp_ping_t> ping1 = client.decodePing(*buf1);
+    std::shared_ptr<RTMP::rtmp_ping_t> ping1 = client.decodePing(*buf1);
     if (ping1->type == RTMP::PING_CLEAR) {
         runtest.pass("Decoded RTMP Ping message");
     } else {
@@ -461,15 +460,15 @@ test_system()
     
 #if 0
     RTMPServer server;
-    boost::shared_ptr<cygnal::Buffer> enc1 = server.encodePing(RTMP::PING_CLEAR);
+    std::shared_ptr<cygnal::Buffer> enc1 = server.encodePing(RTMP::PING_CLEAR);
     if ((memcmp(buf1->reference(), enc1->reference(), 6) == 0)) {
         runtest.pass("Encoded RTMP Ping Clear message");
     } else {
         runtest.fail("Encoded RTMP Ping Clear message");
     }
 
-    boost::uint32_t time = *(reinterpret_cast<boost::uint32_t *>(buf2->reference() + 2));
-    boost::shared_ptr<cygnal::Buffer> enc2 = server.encodePing(RTMP::PING_CLIENT, htonl(time));
+    std::uint32_t time = *(reinterpret_cast<std::uint32_t *>(buf2->reference() + 2));
+    std::shared_ptr<cygnal::Buffer> enc2 = server.encodePing(RTMP::PING_CLIENT, htonl(time));
 //     cerr << hexify(buf2->begin(), buf2->size(), false) << endl;
 //     cerr << hexify(enc2->begin(), enc2->size(), false) << endl;
     if ((memcmp(buf2->reference(), enc2->reference(), 6) == 0)) {
@@ -479,7 +478,7 @@ test_system()
     }
 #endif
     
-    boost::shared_ptr<RTMP::rtmp_ping_t> ping2 = client.decodePing(*buf2);
+    std::shared_ptr<RTMP::rtmp_ping_t> ping2 = client.decodePing(*buf2);
     if ((ping2->type == RTMP::PING_CLIENT)
         && (ping2->target == 0xcf03)
         && (ping2->param1 == 0x4c3)) {
@@ -489,20 +488,20 @@ test_system()
     }    
 
     // SERVER message
-//     boost::shared_ptr<cygnal::Buffer> hex1 = hex2mem("02 00 00 00 00 00 04 05 00 00 00 00 00 13 12 d0");
-//     boost::shared_ptr<cygnal::Buffer> hex1 = hex2mem("00 13 12 d0");
+//     std::shared_ptr<cygnal::Buffer> hex1 = hex2mem("02 00 00 00 00 00 04 05 00 00 00 00 00 13 12 d0");
+//     std::shared_ptr<cygnal::Buffer> hex1 = hex2mem("00 13 12 d0");
 //     RTMPMsg *msg1 = client.decodeMsgBody(hex1);
     
     // Client message
-//     boost::shared_ptr<cygnal::Buffer> hex2 = hex2mem("02 00 00 00 00 00 05 06 00 00 00 00 00 13 12 d0 02");
-//     boost::shared_ptr<cygnal::Buffer> hex2 = hex2mem("00 13 12 d0 02");
+//     std::shared_ptr<cygnal::Buffer> hex2 = hex2mem("02 00 00 00 00 00 05 06 00 00 00 00 00 13 12 d0 02");
+//     std::shared_ptr<cygnal::Buffer> hex2 = hex2mem("00 13 12 d0 02");
 //     RTMPMsg *msg2 = client.decodeMsgBody(hex2);
 
 #if 0
     for (double dub=0; dub<=200; dub ++) {
         Element el11;
         el11.makeNumber(dub);
-        boost::shared_ptr<cygnal::Buffer> buf11 = el11.getBuffer();
+        std::shared_ptr<cygnal::Buffer> buf11 = el11.getBuffer();
         cerr << "FIXME: " << el11.to_number() << ":     ";
         swapBytes(buf11->begin(), 8);
         cerr << hexify(buf11->begin(), buf11->size(), false) << endl;
@@ -522,8 +521,8 @@ test_header()
     
     // this is a sample 12 bytes RTMP header
 //    const char *x1 = "03 00 00 00 00 01 1f 14 00 00 00 00";
-    boost::shared_ptr<cygnal::Buffer> buf1(new Buffer("03 00 00 00 00 01 1f 14 00 00 00 00"));
-    boost::shared_ptr<cygnal::Buffer> head1 = client.encodeHeader(0x3, RTMP::HEADER_12, 287,
+    std::shared_ptr<cygnal::Buffer> buf1(new Buffer("03 00 00 00 00 01 1f 14 00 00 00 00"));
+    std::shared_ptr<cygnal::Buffer> head1 = client.encodeHeader(0x3, RTMP::HEADER_12, 287,
                                         RTMP::INVOKE, RTMPMsg::FROM_CLIENT);
 //     cerr << hexify(buf1->begin(), RTMP_MAX_HEADER_SIZE, false) << endl;
 //     cerr << hexify(head1->begin(), RTMP_MAX_HEADER_SIZE, false) << endl;
@@ -533,7 +532,7 @@ test_header()
      } else {
          runtest.fail("Encoded RTMP header(Invoke)");
      }
-     boost::shared_ptr<RTMP::rtmp_head_t> header1 = client.decodeHeader(buf1->reference());
+     std::shared_ptr<RTMP::rtmp_head_t> header1 = client.decodeHeader(buf1->reference());
      if ((header1->channel == 0x3) && (header1->head_size == RTMP_MAX_HEADER_SIZE)
          && (header1->bodysize == 287) && (header1->type ==  RTMP::INVOKE)) {
          runtest.pass("Decoded RTMP header(Invoke)");
@@ -541,8 +540,8 @@ test_header()
          runtest.fail("Decoded RTMP header(Invoke)");
      }
 
-     boost::shared_ptr<cygnal::Buffer> buf2(new Buffer("02 00 00 00 00 00 06 04 00 00 00 00"));
-     boost::shared_ptr<cygnal::Buffer> head2 = client.encodeHeader(0x2, RTMP::HEADER_12, PING_MSG_SIZE,
+     std::shared_ptr<cygnal::Buffer> buf2(new Buffer("02 00 00 00 00 00 06 04 00 00 00 00"));
+     std::shared_ptr<cygnal::Buffer> head2 = client.encodeHeader(0x2, RTMP::HEADER_12, PING_MSG_SIZE,
                                      RTMP::USER, RTMPMsg::FROM_SERVER);
 //     cerr << hexify(head2->begin(), RTMP_MAX_HEADER_SIZE, false) << endl;
      if ((memcmp(buf2->reference(), head2->reference(), 8) == 0)) {
@@ -551,8 +550,8 @@ test_header()
          runtest.fail("Encoded RTMP header(Ping 0)");
      }
 
-     boost::shared_ptr<cygnal::Buffer> buf3(new Buffer("02 ff e3 6c 00 00 06 04 00 00 00 00"));
-     boost::shared_ptr<cygnal::Buffer> head3 = client.encodeHeader(0x2, RTMP::HEADER_12, PING_MSG_SIZE,
+     std::shared_ptr<cygnal::Buffer> buf3(new Buffer("02 ff e3 6c 00 00 06 04 00 00 00 00"));
+     std::shared_ptr<cygnal::Buffer> head3 = client.encodeHeader(0x2, RTMP::HEADER_12, PING_MSG_SIZE,
                                      RTMP::USER, RTMPMsg::FROM_SERVER);
 //     cerr << hexify(head3->begin(), RTMP_MAX_HEADER_SIZE, false) << endl;
      if ((memcmp(buf2->reference(), head3->reference(), 8) == 0)) {
@@ -561,7 +560,7 @@ test_header()
          runtest.fail("Encoded RTMP header(Ping 1)");
      }
 
-     boost::shared_ptr<RTMP::rtmp_head_t> header2 = client.decodeHeader(*buf3);
+     std::shared_ptr<RTMP::rtmp_head_t> header2 = client.decodeHeader(*buf3);
      if ((header2->channel == 0x2) && (header2->head_size == RTMP_MAX_HEADER_SIZE)
          && (header2->bodysize == 6) && (header2->type ==  RTMP::USER)) {
          runtest.pass("Decoded RTMP header(Ping)");
@@ -569,8 +568,8 @@ test_header()
          runtest.fail("Decoded RTMP header(Ping)");
      }
 
-     boost::shared_ptr<cygnal::Buffer> buf4(new Buffer("c2"));
-     boost::shared_ptr<cygnal::Buffer> head4 = client.encodeHeader(0x2, RTMP::HEADER_1);
+     std::shared_ptr<cygnal::Buffer> buf4(new Buffer("c2"));
+     std::shared_ptr<cygnal::Buffer> head4 = client.encodeHeader(0x2, RTMP::HEADER_1);
 //     cerr << hexify(head4->begin(), RTMP_MAX_HEADER_SIZE, false) << endl;
      if ((memcmp(buf4->reference(), head4->reference(), 1) == 0)) {
          runtest.pass("Encoded RTMP header(size 1)");
@@ -581,8 +580,8 @@ test_header()
 // 43 00 00 00 00 00 15 14 02 00 08 6f 6e 42 57 44    onBWDone
 // 6f 6e 65 00 40 00 00 00 00 00 00 00 05
 
-     boost::shared_ptr<cygnal::Buffer> buf5(new Buffer("43 00 00 00 00 00 19 14"));
-     boost::shared_ptr<cygnal::Buffer> head5 = client.encodeHeader(0x3, RTMP::HEADER_8, 0x19, RTMP::INVOKE,
+     std::shared_ptr<cygnal::Buffer> buf5(new Buffer("43 00 00 00 00 00 19 14"));
+     std::shared_ptr<cygnal::Buffer> head5 = client.encodeHeader(0x3, RTMP::HEADER_8, 0x19, RTMP::INVOKE,
                                          RTMPMsg::FROM_CLIENT);
 //     head5->dump();
 //     cerr << hexify(head5->begin(), 8, false) << endl;
@@ -592,7 +591,7 @@ test_header()
          runtest.fail("Encoded RTMP header(size 8)");
      }
      
-     boost::shared_ptr<RTMP::rtmp_head_t> header3 = client.decodeHeader(*buf5);
+     std::shared_ptr<RTMP::rtmp_head_t> header3 = client.decodeHeader(*buf5);
      if ((header3->channel == 0x3) && (header3->head_size == 8)
          && (header3->bodysize == 0x19) && (header3->type ==  RTMP::INVOKE)) {
          runtest.pass("Decoded RTMP header(size 8)");
@@ -601,8 +600,8 @@ test_header()
      }
 
      // 4 byte header
-     boost::shared_ptr<cygnal::Buffer> buf6(new Buffer("83 00 00 00"));
-     boost::shared_ptr<cygnal::Buffer> head6 = client.encodeHeader(0x3, RTMP::HEADER_4, 0x19, RTMP::INVOKE,
+     std::shared_ptr<cygnal::Buffer> buf6(new Buffer("83 00 00 00"));
+     std::shared_ptr<cygnal::Buffer> head6 = client.encodeHeader(0x3, RTMP::HEADER_4, 0x19, RTMP::INVOKE,
                                          RTMPMsg::FROM_CLIENT);
      if ((memcmp(buf6->reference(), head6->reference(), 4) == 0)) {
          runtest.pass("Encoded RTMP header(size 4)");
@@ -626,12 +625,12 @@ test_results()
 //   64 65 64 2e 00 04 63 6f    64 65 02 00 1d 4e 65 74    ded...code...Net
 //   43 6f 6e 6e 65 63 74 69    6f 6e 2e 43 6f 6e 6e 65    Connection.Conne
 //   63 74 2e 53 75 63 63 65    73 73 00 00 c3 09          ct.Success....
-    boost::shared_ptr<cygnal::Buffer> hex2(new Buffer("02 00 07 5f 72 65 73 75 6c 74 00 3f f0 00 00 00 00 00 00 05 03 00 0b 61 70 70 6c 69 63 61 74 69 6f 6e 05 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 15 43 6f 6e 6e 65 63 74 69 6f 6e 20 73 75 63 63 65 65 64 65 64 2e 00 04 63 6f 64 65 02 00 1d 4e 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63 74 2e 53 75 63 63 65 73 73 00 00 09"));
+    std::shared_ptr<cygnal::Buffer> hex2(new Buffer("02 00 07 5f 72 65 73 75 6c 74 00 3f f0 00 00 00 00 00 00 05 03 00 0b 61 70 70 6c 69 63 61 74 69 6f 6e 05 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 15 43 6f 6e 6e 65 63 74 69 6f 6e 20 73 75 63 63 65 65 64 65 64 2e 00 04 63 6f 64 65 02 00 1d 4e 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63 74 2e 53 75 63 63 65 73 73 00 00 09"));
 
-    boost::shared_ptr<RTMPMsg> msg1 = rtmp.decodeMsgBody(*hex2);
+    std::shared_ptr<RTMPMsg> msg1 = rtmp.decodeMsgBody(*hex2);
     if (msg1) {
-        std::vector<boost::shared_ptr<cygnal::Element> > hell = msg1->getElements();
-        std::vector<boost::shared_ptr<cygnal::Element> > props = hell[0]->getProperties();        
+        std::vector<std::shared_ptr<cygnal::Element> > hell = msg1->getElements();
+        std::vector<std::shared_ptr<cygnal::Element> > props = hell[0]->getProperties();
 //         printf("FIXME: %d, %d, %s:%s\n", props.size(), msg1->getStatus(),
 //                props[3]->getName(), props[3]->to_string());
         if ((msg1->getStatus() ==  RTMPMsg::NC_CONNECT_SUCCESS)
@@ -647,7 +646,7 @@ test_results()
 
 #if 0
     RTMPServer rtmpserv;
-    boost::shared_ptr<cygnal::Buffer> buf2 = rtmpserv.encodeResult(RTMPMsg::NC_CONNECT_SUCCESS);
+    std::shared_ptr<cygnal::Buffer> buf2 = rtmpserv.encodeResult(RTMPMsg::NC_CONNECT_SUCCESS);
 //    cerr << hexify(buf2->begin(), 122, true) << endl;
     if ((memcmp(hex2->reference(), buf2->reference(), 122) == 0)) {
         runtest.pass("Encoded RTMP result(NC_CONNECT_SUCCESS)");
@@ -657,10 +656,10 @@ test_results()
     delete buf2;
 #endif
     
-    boost::shared_ptr<cygnal::Buffer> hex3(new Buffer("02 00 07 5f 72 65 73 75 6c 74 00 3f f0 00 00 00 00 00 00 05 03 00 0b 61 70 70 6c 69 63 61 74 69 6f 6e 05 00 05 6c 65 76 65 6c 02 00 05 65 72 72 6f 72 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 00 00 04 63 6f 64 65 02 00 1c 4e 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63 74 2e 46 61 69 6c 65 64 00 00 09"));
-    boost::shared_ptr<RTMPMsg> msg2 = rtmp.decodeMsgBody(*hex3);
-    std::vector<boost::shared_ptr<cygnal::Element> > hell = msg2->getElements();
-    std::vector<boost::shared_ptr<cygnal::Element> > props = hell[0]->getProperties();        
+    std::shared_ptr<cygnal::Buffer> hex3(new Buffer("02 00 07 5f 72 65 73 75 6c 74 00 3f f0 00 00 00 00 00 00 05 03 00 0b 61 70 70 6c 69 63 61 74 69 6f 6e 05 00 05 6c 65 76 65 6c 02 00 05 65 72 72 6f 72 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 00 00 04 63 6f 64 65 02 00 1c 4e 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63 74 2e 46 61 69 6c 65 64 00 00 09"));
+    std::shared_ptr<RTMPMsg> msg2 = rtmp.decodeMsgBody(*hex3);
+    std::vector<std::shared_ptr<cygnal::Element> > hell = msg2->getElements();
+    std::vector<std::shared_ptr<cygnal::Element> > props = hell[0]->getProperties();
 //     printf("FIXME: %d, %d, %s:%s\n", props.size(), msg1->getStatus(),
 //            props[3]->getName(), props[3]->to_string());
     if (msg2) {
@@ -694,8 +693,8 @@ test_results()
 //         PD_English_Low at 2001
 //     clientid
 //         dsLgYohb
-    boost::shared_ptr<cygnal::Buffer> hex4(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 52 65 73 65 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 2a 50 6c 61 79 69 6e 67 20 61 6e 64 20 72 65 73 65 74 74 69 6e 67 20 50 44 5f 45 6e 67 6c 69 73 68 5f 4c 6f 77 40 32 30 30 31 2e 00 07 64 65 74 61 69 6c 73 02 00 13 50 44 5f 45 6e 67 6c 69 73 68 5f 4c 6f 77 40 32 30 30 31 00 08 63 6c 69 65 6e 74 69 64 02 00 08 64 73 4c 67 59 6f 68 62 00 00 09"));
-    boost::shared_ptr<RTMPMsg> msg4 = rtmp.decodeMsgBody(*hex4);
+    std::shared_ptr<cygnal::Buffer> hex4(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 52 65 73 65 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 2a 50 6c 61 79 69 6e 67 20 61 6e 64 20 72 65 73 65 74 74 69 6e 67 20 50 44 5f 45 6e 67 6c 69 73 68 5f 4c 6f 77 40 32 30 30 31 2e 00 07 64 65 74 61 69 6c 73 02 00 13 50 44 5f 45 6e 67 6c 69 73 68 5f 4c 6f 77 40 32 30 30 31 00 08 63 6c 69 65 6e 74 69 64 02 00 08 64 73 4c 67 59 6f 68 62 00 00 09"));
+    std::shared_ptr<RTMPMsg> msg4 = rtmp.decodeMsgBody(*hex4);
 //    std::vector<cygnal::Element *> hell4 = msg4->getElements();
     if ((msg4->getStatus() ==  RTMPMsg::NS_PLAY_RESET)
         && (msg4->getMethodName() == "onStatus")
@@ -709,8 +708,8 @@ test_results()
 // code
 //     NetStream
 // Data.Start
-    boost::shared_ptr<cygnal::Buffer> hex5(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 03 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 44 61 74 61 2e 53 74 61 72 74 00 00 09"));
-    boost::shared_ptr<RTMPMsg> msg5 = rtmp.decodeMsgBody(*hex5);
+    std::shared_ptr<cygnal::Buffer> hex5(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 03 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 44 61 74 61 2e 53 74 61 72 74 00 00 09"));
+    std::shared_ptr<RTMPMsg> msg5 = rtmp.decodeMsgBody(*hex5);
     if ((msg5->getStatus() ==  RTMPMsg::NS_DATA_START)
         && (msg5->getMethodName() == "onStatus")
         && (msg5->size() == 1)) {
@@ -728,8 +727,8 @@ test_results()
 //         Started playing PD_English_Low at 2001
 //     details
 //         PD_English_Low at 20..clientid...dsLgYohb.
-    boost::shared_ptr<cygnal::Buffer> hex6(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 61 72 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 24 53 74 61 72 74 65 64 20 70 6c 61 79 69 6e 67 20 50 44 5f 45 6e 67 6c 69 73 68 5f 4c 6f 77 40 32 30 30 31 2e 00 07 64 65 74 61 69 6c 73 02 00 13 50 44 5f 45 6e 67 6c 69 73 68 5f 4c 6f 77 40 32 30 30 31 00 08 63 6c 69 65 6e 74 69 64 02 00 08 64 73 4c 67 59 6f 68 62 00 00 09"));
-    boost::shared_ptr<RTMPMsg> msg6 = rtmp.decodeMsgBody(*hex6);
+    std::shared_ptr<cygnal::Buffer> hex6(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 14 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 61 72 74 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 24 53 74 61 72 74 65 64 20 70 6c 61 79 69 6e 67 20 50 44 5f 45 6e 67 6c 69 73 68 5f 4c 6f 77 40 32 30 30 31 2e 00 07 64 65 74 61 69 6c 73 02 00 13 50 44 5f 45 6e 67 6c 69 73 68 5f 4c 6f 77 40 32 30 30 31 00 08 63 6c 69 65 6e 74 69 64 02 00 08 64 73 4c 67 59 6f 68 62 00 00 09"));
+    std::shared_ptr<RTMPMsg> msg6 = rtmp.decodeMsgBody(*hex6);
     if ((msg6->getStatus() ==  RTMPMsg::NS_PLAY_START)
         && (msg6->getMethodName() == "onStatus")
         && (msg6->size() >= 1)) {
@@ -743,8 +742,8 @@ test_results()
 // errors when using GCC 3.4 ?
     
 // ..............._error.?......... ..level...error..code...NetConnection.Connect.Rejected..description..A[ Server.Reject ] : Virtual host _defa.ultVHost_ is not available....
-    boost::shared_ptr<cygnal::Buffer> hex7(new Buffer("02 00 06 5f 65 72 72 6f 72 00 3f f0 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 05 65 72 72 6f 72 00 04 63 6f 64 65 02 00 1e 4e 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63 74 2e 52 65 6a 65 63 74 65 64 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 41 5b 20 53 65 72 76 65 72 2e 52 65 6a 65 63 74 20 5d 20 3a 20 56 69 72 74 75 61 6c 20 68 6f 73 74 20 5f 64 65 66 61 c3 75 6c 74 56 48 6f 73 74 5f 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e 00 00 09"));
-    boost::shared_ptr<RTMPMsg> msg7 = rtmp.decodeMsgBody(*hex7);
+    std::shared_ptr<cygnal::Buffer> hex7(new Buffer("02 00 06 5f 65 72 72 6f 72 00 3f f0 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 05 65 72 72 6f 72 00 04 63 6f 64 65 02 00 1e 4e 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63 74 2e 52 65 6a 65 63 74 65 64 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 41 5b 20 53 65 72 76 65 72 2e 52 65 6a 65 63 74 20 5d 20 3a 20 56 69 72 74 75 61 6c 20 68 6f 73 74 20 5f 64 65 66 61 c3 75 6c 74 56 48 6f 73 74 5f 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 2e 00 00 09"));
+    std::shared_ptr<RTMPMsg> msg7 = rtmp.decodeMsgBody(*hex7);
     if ((msg7->getStatus() ==  RTMPMsg::NC_CONNECT_REJECTED)
         && (msg7->getMethodName() == "_error")
         && (msg7->size() >= 1)) {
@@ -754,8 +753,8 @@ test_results()
     }
     
 //.onStatus.............level...error..code...NetStream.Play.StreamNotFound..description..6Failed to play gate06_tablan_bcueu_; .stream not found...details...gate06_tablan_bcueu_..clientid.A.;..
-    boost::shared_ptr<cygnal::Buffer> hex8(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 05 65 72 72 6f 72 00 04 63 6f 64 65 02 00 1d 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 72 65 61 6d 4e 6f 74 46 6f 75 6e 64 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 36 46 61 69 6c 65 64 20 74 6f 20 70 6c 61 79 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 3b 20 c4 73 74 72 65 61 6d 20 6e 6f 74 20 66 6f 75 6e 64 2e 00 07 64 65 74 61 69 6c 73 02 00 14 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 00 08 63 6c 69 65 6e 74 69 64 00 41 d8 3b b4 e4 00 00 00 00 00 09"));
-    boost::shared_ptr<RTMPMsg> msg8 = rtmp.decodeMsgBody(*hex8);
+    std::shared_ptr<cygnal::Buffer> hex8(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 05 65 72 72 6f 72 00 04 63 6f 64 65 02 00 1d 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 72 65 61 6d 4e 6f 74 46 6f 75 6e 64 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 36 46 61 69 6c 65 64 20 74 6f 20 70 6c 61 79 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 3b 20 c4 73 74 72 65 61 6d 20 6e 6f 74 20 66 6f 75 6e 64 2e 00 07 64 65 74 61 69 6c 73 02 00 14 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 00 08 63 6c 69 65 6e 74 69 64 00 41 d8 3b b4 e4 00 00 00 00 00 09"));
+    std::shared_ptr<RTMPMsg> msg8 = rtmp.decodeMsgBody(*hex8);
 //    msg4->dump();
 //    std::vector<cygnal::Element *> hell4 = msg4->getElements();
     if ((msg8->getStatus() ==  RTMPMsg::NS_PLAY_STREAMNOTFOUND)
@@ -769,8 +768,8 @@ test_results()
 #endif
 
 //.....onStatus.............level...status..code...NetStream.Play.Stop..description..%Stopped playing gate06_tablan_bcueu_...details....gate06_tablan_bcueu_..clientid.A.;.......reason......     
-    boost::shared_ptr<cygnal::Buffer> hex9(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 13 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 6f 70 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 25 53 74 6f 70 70 65 64 20 70 6c 61 79 69 6e 67 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 2e 00 07 64 65 74 61 69 6c 73 c4 02 00 14 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 00 08 63 6c 69 65 6e 74 69 64 00 41 d8 3b b4 e4 00 00 00 00 06 72 65 61 73 6f 6e 02 00 00 00 00 09"));
-    boost::shared_ptr<RTMPMsg> msg9 = rtmp.decodeMsgBody(*hex9);
+    std::shared_ptr<cygnal::Buffer> hex9(new Buffer("02 00 08 6f 6e 53 74 61 74 75 73 00 00 00 00 00 00 00 00 00 05 03 00 05 6c 65 76 65 6c 02 00 06 73 74 61 74 75 73 00 04 63 6f 64 65 02 00 13 4e 65 74 53 74 72 65 61 6d 2e 50 6c 61 79 2e 53 74 6f 70 00 0b 64 65 73 63 72 69 70 74 69 6f 6e 02 00 25 53 74 6f 70 70 65 64 20 70 6c 61 79 69 6e 67 20 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 2e 00 07 64 65 74 61 69 6c 73 c4 02 00 14 67 61 74 65 30 36 5f 74 61 62 6c 61 6e 5f 62 63 75 65 75 5f 00 08 63 6c 69 65 6e 74 69 64 00 41 d8 3b b4 e4 00 00 00 00 06 72 65 61 73 6f 6e 02 00 00 00 00 09"));
+    std::shared_ptr<RTMPMsg> msg9 = rtmp.decodeMsgBody(*hex9);
 //    msg4->dump();
 //    std::vector<cygnal::Element *> hell4 = msg4->getElements();
     if ((msg9->getStatus() ==  RTMPMsg::NS_PLAY_STOP)
@@ -788,7 +787,7 @@ test_types()
     GNASH_REPORT_FUNCTION;
     RTMP rtmp;
     
-    boost::shared_ptr<cygnal::Buffer> buf1(new Buffer("06 00 d2 04 00 00 00 00"));
+    std::shared_ptr<cygnal::Buffer> buf1(new Buffer("06 00 d2 04 00 00 00 00"));
 }
 
 void
@@ -797,8 +796,8 @@ test_client()
     GNASH_REPORT_FUNCTION;
     RTMPClient rtmp;
 
-    boost::shared_ptr<cygnal::Buffer> buf1(new Buffer("02 00 07 63 6f 6e 6e 65 63 74 00 3f f0 00 00 00 00 00 00 03 00 03 61 70 70 02 00 0f 6d 70 33 5f 61 70 70 2f 69 64 33 74 65 73 74 00 08 66 6c 61 73 68 56 65 72 02 00 0c 4c 4e 58 20 39 2c 30 2c 33 31 2c 30 00 06 73 77 66 55 72 6c 02 00 29 68 74 74 70 3a 2f 2f 72 65 6e 61 75 6e 2e 63 6f 6d 2f 66 6c 65 78 32 2f 70 6f 73 74 73 2f 4d 50 33 54 65 73 74 2e 73 77 66 00 05 74 63 55 72 6c 02 00 21 72 74 6d 70 3a 2f 2f 72 65 6e 61 75 6e 2e 63 6f 6d 2f 6d 70 33 5f 61 70 70 2f 69 64 33 74 65 73 74 00 04 66 70 61 64 01 00 00 0b 61 75 64 69 6f 43 6f 64 65 63 73 00 40 83 38 00 00 00 00 00 00 0b 76 69 64 65 6f 43 6f 64 65 63 73 00 40 5f 00 00 00 00 00 00 00 0d 76 69 64 65 6f 46 75 6e 63 74 69 6f 6e 00 3f f0 00 00 00 00 00 00 00 07 70 61 67 65 55 72 6c 02 00 2a 68 74 74 70 3a 2f 2f 72 65 6e 61 75 6e 2e 63 6f 6d 2f 66 6c 65 78 32 2f 70 6f 73 74 73 2f 4d 50 33 54 65 73 74 2e 68 74 6d 6c 00 0e 6f 62 6a 65 63 74 45 6e 63 6f 64 69 6e 67 00 00 00 00 00 00 00 00 00 00 00 09"));
-    boost::shared_ptr<cygnal::Buffer> buf2 = rtmp.encodeConnect("mp3_app/id3test", "http://renaun.com/flex2/posts/MP3Test.swf", "rtmp://renaun.com/mp3_app/id3test", 615, 124, 1, "http://renaun.com/flex2/posts/MP3Test.html");
+    std::shared_ptr<cygnal::Buffer> buf1(new Buffer("02 00 07 63 6f 6e 6e 65 63 74 00 3f f0 00 00 00 00 00 00 03 00 03 61 70 70 02 00 0f 6d 70 33 5f 61 70 70 2f 69 64 33 74 65 73 74 00 08 66 6c 61 73 68 56 65 72 02 00 0c 4c 4e 58 20 39 2c 30 2c 33 31 2c 30 00 06 73 77 66 55 72 6c 02 00 29 68 74 74 70 3a 2f 2f 72 65 6e 61 75 6e 2e 63 6f 6d 2f 66 6c 65 78 32 2f 70 6f 73 74 73 2f 4d 50 33 54 65 73 74 2e 73 77 66 00 05 74 63 55 72 6c 02 00 21 72 74 6d 70 3a 2f 2f 72 65 6e 61 75 6e 2e 63 6f 6d 2f 6d 70 33 5f 61 70 70 2f 69 64 33 74 65 73 74 00 04 66 70 61 64 01 00 00 0b 61 75 64 69 6f 43 6f 64 65 63 73 00 40 83 38 00 00 00 00 00 00 0b 76 69 64 65 6f 43 6f 64 65 63 73 00 40 5f 00 00 00 00 00 00 00 0d 76 69 64 65 6f 46 75 6e 63 74 69 6f 6e 00 3f f0 00 00 00 00 00 00 00 07 70 61 67 65 55 72 6c 02 00 2a 68 74 74 70 3a 2f 2f 72 65 6e 61 75 6e 2e 63 6f 6d 2f 66 6c 65 78 32 2f 70 6f 73 74 73 2f 4d 50 33 54 65 73 74 2e 68 74 6d 6c 00 0e 6f 62 6a 65 63 74 45 6e 63 6f 64 69 6e 67 00 00 00 00 00 00 00 00 00 00 00 09"));
+    std::shared_ptr<cygnal::Buffer> buf2 = rtmp.encodeConnect("mp3_app/id3test", "http://renaun.com/flex2/posts/MP3Test.swf", "rtmp://renaun.com/mp3_app/id3test", 615, 124, 1, "http://renaun.com/flex2/posts/MP3Test.html");
 //     cerr << hexify(buf1->begin(), buf1->size(), false) << endl;
 //     cerr << hexify(buf2->begin(), buf1->size(), false) << endl;
     if ((memcmp(buf1->reference(), buf2->reference(), 50) == 0)) {
diff --git a/extensions/dejagnu/Makefile.am b/extensions/dejagnu/Makefile.am
index a9dab7f..124c9c7 100644
--- a/extensions/dejagnu/Makefile.am
+++ b/extensions/dejagnu/Makefile.am
@@ -23,7 +23,7 @@ pluginsdir = $(libdir)/gnash/plugins
 
 plugins_LTLIBRARIES = dejagnu.la
 
-INCLUDES =  \
+AM_CPPFLAGS =  \
 	-I$(top_srcdir)/libbase \
 	-I$(top_srcdir)/libcore \
 	-I$(top_srcdir)/libcore/abc \
diff --git a/extensions/dejagnu/dejagnu.h b/extensions/dejagnu/dejagnu.h
index b90c930..16edf92 100644
--- a/extensions/dejagnu/dejagnu.h
+++ b/extensions/dejagnu/dejagnu.h
@@ -34,7 +34,7 @@ extern "C" {
     /// Return an  instance
 }
 
-std::auto_ptr<as_object> init_dejagnu_instance();
+std::unique_ptr<as_object> init_dejagnu_instance();
 
 } // end of gnash namespace
 
diff --git a/extensions/fileio/Makefile.am b/extensions/fileio/Makefile.am
index f6fbf40..02a8866 100644
--- a/extensions/fileio/Makefile.am
+++ b/extensions/fileio/Makefile.am
@@ -27,7 +27,7 @@ plugins_LTLIBRARIES = fileio.la
 
 DEF_MAKESWF_FLAGS = -I $(top_builddir) -I $(top_srcdir)/testsuite/actionscript.all
 
-INCLUDES =  \
+AM_CPPFLAGS =  \
             -I$(top_srcdir)/libbase \
             -I$(top_srcdir)/libcore \
             -I$(top_srcdir)/libcore/abc \
diff --git a/extensions/fileio/fileio.cpp b/extensions/fileio/fileio.cpp
index cf1cadd..23ca635 100644
--- a/extensions/fileio/fileio.cpp
+++ b/extensions/fileio/fileio.cpp
@@ -155,7 +155,7 @@ fileio_ctor(const fn_call& fn)
 
 FileIO::FileIO()
     :
-    _stream(0)
+    _stream(nullptr)
 {
 }
 
@@ -340,7 +340,7 @@ FileIO::fclose()
 //    GNASH_REPORT_FUNCTION;
     if (_stream) {
         int ret = ::fclose(_stream);
-        _stream = 0;
+        _stream = nullptr;
         return ret;
     }
     return -1;
@@ -576,7 +576,7 @@ fileio_scandir(const fn_call& fn)
 	
     struct dirent **namelist;
 	
-	const int n = ::scandir(dir.c_str(), &namelist, 0, alphasort);
+	const int n = ::scandir(dir.c_str(), &namelist, nullptr, alphasort);
 	
 	if (n < 0) {
 	    return as_value(false);
diff --git a/extensions/gtk2/gtkext.cpp b/extensions/gtk2/gtkext.cpp
index 9e251b5..c41f250 100644
--- a/extensions/gtk2/gtkext.cpp
+++ b/extensions/gtk2/gtkext.cpp
@@ -165,7 +165,7 @@ void
 GtkExt::window_new()
 {
     GNASH_REPORT_FUNCTION;
-//    std::auto_ptr<Gui> ggg = player.getGuiHandle();
+//    std::unique_ptr<Gui> ggg = player.getGuiHandle();
 //    player.getGuiHandle();
 //    gui.getWindow();
     _window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -335,10 +335,10 @@ as_value gtkext_main(const fn_call& fn)
     return as_value();
 }
 
-std::auto_ptr<as_object>
+std::unique_ptr<as_object>
 init_gtkext_instance()
 {
-    return std::auto_ptr<as_object>(new GtkExt());
+    return std::unique_ptr<as_object>(new GtkExt());
 }
 
 extern "C" {
diff --git a/extensions/gtk2/gtkext.h b/extensions/gtk2/gtkext.h
index 9a308b0..165550e 100644
--- a/extensions/gtk2/gtkext.h
+++ b/extensions/gtk2/gtkext.h
@@ -23,7 +23,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <memory> // for auto_ptr
+#include <memory> // for unique_ptr
 #include "as_object.h"
 
 #include <cstdio>
@@ -68,7 +68,7 @@ extern "C" {
     /// Return an  instance
 }
 
-std::auto_ptr<as_object> init_gtkext_instance();
+std::unique_ptr<as_object> init_gtkext_instance();
 
 } // end of gnash namespace
 
diff --git a/extensions/mysql/mysql_db.cpp b/extensions/mysql/mysql_db.cpp
index f33637c..840bcae 100644
--- a/extensions/mysql/mysql_db.cpp
+++ b/extensions/mysql/mysql_db.cpp
@@ -102,9 +102,9 @@ mysql_ctor(const fn_call& fn)
 
 
 MySQL::MySQL() :
-    _db(NULL),
-    _result(NULL),
-    _row(NULL)
+    _db(nullptr),
+    _result(nullptr),
+    _row(nullptr)
 {
 }
 
@@ -134,7 +134,7 @@ MySQL::fetch_row()
     if (_result) {
         return fetch_row(_result);
     }
-    return NULL;
+    return nullptr;
 }
 
 MYSQL_ROW
@@ -163,7 +163,7 @@ MySQL::store_result()
     if (_db) {
         return store_result(_db);
     }
-    return NULL;
+    return nullptr;
 }
 
 MYSQL_RES *
@@ -182,12 +182,12 @@ MySQL::connect(const char* host, const char* dbname, const char* user, const cha
     // also deallocates the connection handle
     disconnect();
     
-    if ((_db = mysql_init(NULL)) == NULL ) {
+    if ((_db = mysql_init(nullptr)) == nullptr ) {
         log_error(_("Couldn't initialize database"));
         return false;
     }
     
-    if (mysql_real_connect(_db, host, user, passwd, dbname, 0, NULL, 0) == NULL) {
+    if (mysql_real_connect(_db, host, user, passwd, dbname, 0, nullptr, 0) == nullptr) {
 	log_error(_("Couldn't connect to database"));
 	return false;
     }
@@ -285,9 +285,9 @@ bool
 MySQL::disconnect()
 {
 //    GNASH_REPORT_FUNCTION;
-    if (_db != NULL) {
+    if (_db != nullptr) {
         mysql_close(_db);    
-        _db = NULL;
+        _db = nullptr;
     }
     return true;
 }
diff --git a/gui/Player.cpp b/gui/Player.cpp
index 38d445f..8934598 100644
--- a/gui/Player.cpp
+++ b/gui/Player.cpp
@@ -57,6 +57,9 @@
 #include "log.h"
 #include "HostInterface.h"
 #include "RunResources.h"
+#include "IOChannel.h"
+#include "MediaHandler.h"
+#include "GnashFactory.h"
 
 using namespace gnash;
 
@@ -204,7 +207,7 @@ Player::Player()
     _doRender(true),
     _doSound(true),
     _exitTimeout(0),
-    _movieDef(0),
+    _movieDef(nullptr),
     _maxAdvances(0),
 #ifdef GNASH_FPS_DEBUG
     _fpsDebugTime(0.0),
@@ -335,9 +338,9 @@ Player::load_movie()
 
     try {
         if (_infile == "-") {
-            std::auto_ptr<IOChannel> in (
+            std::unique_ptr<IOChannel> in (
                 noseek_fd_adapter::make_stream(fileno(stdin)));
-            md = MovieFactory::makeMovie(in, _url, *_runResources, false);
+            md = MovieFactory::makeMovie(std::move(in), _url, *_runResources, false);
         }
         else {
             URL url(_infile);
@@ -361,12 +364,12 @@ Player::load_movie()
     }
     catch (const GnashException& er) {
         std::cerr << er.what() << std::endl;
-        md = NULL;
+        md = nullptr;
     }
 
     if (!md) {
         fprintf(stderr, "Could not load movie '%s'\n", _infile.c_str());
-        return NULL;
+        return nullptr;
     }
 
     return md;
@@ -412,14 +415,16 @@ Player::run(int argc, char* argv[], const std::string& infile,
     /// The RunResources should be populated before parsing.
     _runResources.reset(new RunResources());
 
-    boost::shared_ptr<SWF::TagLoadersTable> loaders(new SWF::TagLoadersTable());
+    std::shared_ptr<SWF::TagLoadersTable> loaders(
+        std::make_shared<SWF::TagLoadersTable>());
     addDefaultLoaders(*loaders);
     _runResources->setTagLoaders(loaders);
 
-    std::auto_ptr<NamingPolicy> np(new IncrementalRename(_baseurl));
+    std::unique_ptr<NamingPolicy> np(new IncrementalRename(_baseurl));
 
     /// The StreamProvider uses the actual URL of the loaded movie.
-    boost::shared_ptr<StreamProvider> sp(new StreamProvider(_url, baseURL, np));
+    std::shared_ptr<StreamProvider> sp(
+        std::make_shared<StreamProvider>(_url, baseURL, std::move(np)));
     _runResources->setStreamProvider(sp);
 
     // Set the Hardware video decoding resources. none, vaapi, omap
@@ -649,11 +654,11 @@ Player::run(int argc, char* argv[], const std::string& infile,
         }
         if (!last && v.empty()) return;
         
-        std::auto_ptr<ScreenShotter> ss(new ScreenShotter(_screenshotFile,
+        std::unique_ptr<ScreenShotter> ss(new ScreenShotter(_screenshotFile,
                                                           _screenshotQuality));
         if (last) ss->lastFrame();
         ss->setFrames(v);
-        _gui->setScreenShotter(ss);
+        _gui->setScreenShotter(std::move(ss));
     }
 
     _gui->run();
@@ -782,7 +787,7 @@ Player::CallbacksHandler::notify(const std::string& command,
         //log_debug("allowscale: %s", args);
         if (noCaseCompare(args, "true")) _gui.allowScale(true);
         else {
-            if (strtol(args.c_str(), NULL, 0)) _gui.allowScale(true);
+            if (strtol(args.c_str(), nullptr, 0)) _gui.allowScale(true);
             else _gui.allowScale(false);
         }
         return;
@@ -803,7 +808,7 @@ Player::CallbacksHandler::notify(const std::string& command,
 
 
 // private
-std::auto_ptr<Gui>
+std::unique_ptr<Gui>
 Player::getGui()
 {
 #ifdef GUI_GTK
@@ -850,7 +855,7 @@ Player::getGui()
     return createDumpGui(_windowID, _scale, _doLoop, *_runResources);
 #endif
 
-    return std::auto_ptr<Gui>(new NullGui(_doLoop, *_runResources));
+    return std::unique_ptr<Gui>(new NullGui(_doLoop, *_runResources));
 }
 
 Player::~Player()
diff --git a/gui/Player.h b/gui/Player.h
index 3763e2d..23df7f7 100644
--- a/gui/Player.h
+++ b/gui/Player.h
@@ -31,7 +31,6 @@
 
 #include <boost/intrusive_ptr.hpp>
 #include <string>
-#include <boost/shared_ptr.hpp>
 #include <map>
 #include <memory>
 
@@ -250,7 +249,7 @@ private:
         const Player& _player;
     };
     
-    std::auto_ptr<CallbacksHandler> _callbacksHandler;
+    std::shared_ptr<CallbacksHandler> _callbacksHandler;
     
     void init();
     
@@ -268,7 +267,7 @@ private:
     /// @return always the len parameter value (silent stream never ends 
     ///         and is always available)
     ///
-    static unsigned int silentStream(void* udata, boost::int16_t* stream,
+    static unsigned int silentStream(void* udata, std::int16_t* stream,
                      unsigned int len, bool& atEOF);
     
     void init_sound();
@@ -281,7 +280,7 @@ private:
     //
     /// Uses the USE_<guiname> macros to find out which one
     ///
-    std::auto_ptr<Gui> getGui();
+    std::unique_ptr<Gui> getGui();
     
     void setFlashVars(const std::string& varstr);
 
@@ -319,18 +318,18 @@ private:
     /// @todo   This is hairy, and the core should be sorted out so that
     ///         sound_sample knows about its sound::sound_handler without
     ///         needing a RunResources.
-    boost::shared_ptr<sound::sound_handler> _soundHandler;
+    std::shared_ptr<sound::sound_handler> _soundHandler;
     
-    boost::shared_ptr<media::MediaHandler> _mediaHandler;
+    std::shared_ptr<media::MediaHandler> _mediaHandler;
     
     /// Handlers (for sound etc) for a libcore run.
     //
     /// This must be kept alive for the entire lifetime of the movie_root
     /// (currently: of the Gui).
-    std::auto_ptr<RunResources> _runResources;
+    std::shared_ptr<RunResources> _runResources;
     
     /// This must be initialized after _runResources
-    std::auto_ptr<Gui> _gui;
+    std::shared_ptr<Gui> _gui;
     
     std::string         _url;
     
diff --git a/gui/ScreenShotter.cpp b/gui/ScreenShotter.cpp
index 42d0633..587b9bd 100644
--- a/gui/ScreenShotter.cpp
+++ b/gui/ScreenShotter.cpp
@@ -47,12 +47,12 @@ typeFromFileName(const std::string& filename)
             { ".jpeg", GNASH_FILETYPE_JPEG }
         };
     
-    for (size_t i = 0; i < 3; ++i) {
-        const char* ext = matches[i].ext;
+    for (const auto& match : matches) {
+        const char* ext = match.ext;
         const std::string::size_type pos = filename.rfind(ext);
         if (pos != std::string::npos &&
                 pos + std::strlen(ext) == filename.size()) {
-            return matches[i].type;
+            return match.type;
         }
     }
     return GNASH_FILETYPE_PNG;
@@ -68,11 +68,11 @@ ScreenShotter::ScreenShotter(const std::string& fileName, int quality)
 {
 }
 
-ScreenShotter::ScreenShotter(const std::string& fileName, FileType type,
+ScreenShotter::ScreenShotter(std::string fileName, FileType type,
         int quality)
     :
     _immediate(false),
-    _fileName(fileName),
+    _fileName(std::move(fileName)),
     _last(false),
     _type(type),
     _quality(quality)
@@ -92,8 +92,8 @@ ScreenShotter::saveImage(const Renderer& r, const std::string& id) const
     
     FILE* f = std::fopen(outfile.c_str(), "wb");
     if (f) {
-        boost::shared_ptr<IOChannel> t(makeFileChannel(f, true));
-        r.renderToImage(t, _type, _quality);
+        std::unique_ptr<IOChannel> t(makeFileChannel(f, true));
+        r.renderToImage(std::move(t), _type, _quality);
     }
     else {
         log_error(_("Failed to open screenshot file \"%s\"!"), outfile);
diff --git a/gui/ScreenShotter.h b/gui/ScreenShotter.h
index 5545bf8..19100f0 100644
--- a/gui/ScreenShotter.h
+++ b/gui/ScreenShotter.h
@@ -21,10 +21,8 @@
 
 #include <vector>
 #include <string>
-#include <boost/shared_ptr.hpp>
 #include <set>
 #include <algorithm>
-#include <boost/lexical_cast.hpp>
 
 #include "GnashEnums.h"
 
@@ -45,7 +43,7 @@ public:
     ScreenShotter(const std::string& fileName, int quality = 100);
     
     /// Create a ScreenShotter, specifying the output type.
-    ScreenShotter(const std::string& fileName, FileType f, int quality = 100);
+    ScreenShotter(std::string fileName, FileType f, int quality = 100);
 
     ~ScreenShotter();
 
@@ -127,7 +125,7 @@ public:
             if (t) (*t)();
             _done.insert(frameAdvance);
 
-            saveImage(r, boost::lexical_cast<std::string>(frameAdvance));
+            saveImage(r, std::to_string(frameAdvance));
             _immediate = false;
         }
         
diff --git a/gui/aos4/aos4.cpp b/gui/aos4/aos4.cpp
index fab9dd3..48a2602 100644
--- a/gui/aos4/aos4.cpp
+++ b/gui/aos4/aos4.cpp
@@ -630,7 +630,7 @@ AOS4Gui::createWindow(const char *title, int width, int height, int xPosition, i
     _glue.prepDrawingArea(_width, _height);
 
     //set_Renderer(_renderer);
-	_runResources.setRenderer(boost::shared_ptr<Renderer>(_renderer));
+	_runResources.setRenderer(std::shared_ptr<Renderer>(_renderer));
 
 	struct Window *_window = _glue.getWindow();
 
diff --git a/gui/aos4/aos4_agg_glue.h b/gui/aos4/aos4_agg_glue.h
index a5999d2..9041ee5 100644
--- a/gui/aos4/aos4_agg_glue.h
+++ b/gui/aos4/aos4_agg_glue.h
@@ -29,7 +29,7 @@
 #include <proto/dos.h>
 #include <proto/gadtools.h>
 
-#include <boost/cstdint.hpp> // for boost::?int??_t 
+#include <cstdint> // for boost::?int??_t
 #include <vector>
 
 namespace gnash
diff --git a/gui/aos4/aos4_cairo_glue.h b/gui/aos4/aos4_cairo_glue.h
index a7df590..3e1e794 100644
--- a/gui/aos4/aos4_cairo_glue.h
+++ b/gui/aos4/aos4_cairo_glue.h
@@ -31,7 +31,7 @@
 
 #include <cairo.h>
 
-#include <boost/cstdint.hpp> // for boost::?int??_t
+#include <cstdint> // for boost::?int??_t
 #include <vector>
 
 namespace gnash
diff --git a/gui/aos4/aos4_glue.h b/gui/aos4/aos4_glue.h
index 07abe8f..788f4b6 100644
--- a/gui/aos4/aos4_glue.h
+++ b/gui/aos4/aos4_glue.h
@@ -18,7 +18,7 @@
 #ifndef __AOS4_GLUE_H__
 #define __AOS4_GLUE_H__
 
-#include <boost/cstdint.hpp> // for boost::?int??_t 
+#include <cstdint> // for boost::?int??_t
 
 #include "Renderer.h"
 
diff --git a/gui/aos4/gui_aos4.cpp b/gui/aos4/gui_aos4.cpp
index f727c05..859418c 100644
--- a/gui/aos4/gui_aos4.cpp
+++ b/gui/aos4/gui_aos4.cpp
@@ -32,12 +32,12 @@
 namespace gnash {
 
 #ifdef GUI_AOS4
-std::auto_ptr<Gui> createAOS4Gui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createAOS4Gui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-	return std::auto_ptr<Gui>(new AOS4Gui(windowid, scale, do_loop, r));
+	return std::unique_ptr<Gui>(new AOS4Gui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_AOS4
-std::auto_ptr<Gui> createAOS4Gui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createAOS4Gui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
 	throw GnashException("Support for AOS4 gui was not compiled in");
 }
diff --git a/gui/aqua/aqua.cpp b/gui/aqua/aqua.cpp
index 59ba0cf..5b78622 100644
--- a/gui/aqua/aqua.cpp
+++ b/gui/aqua/aqua.cpp
@@ -126,7 +126,7 @@ bool AquaGui::init(int argc, char **argv[]) /* Self-explainatory */
     _renderer.reset(_glue.createRenderHandler());
     if(!_renderer)return false;
 
-	_runResources.setRenderer(boost::shared_ptr<Renderer>(_renderer));
+	_runResources.setRenderer(std::shared_ptr<Renderer>(_renderer));
     return true;
 
 }
diff --git a/gui/aqua/gui_aqua.cpp b/gui/aqua/gui_aqua.cpp
index 363472b..8c46368 100644
--- a/gui/aqua/gui_aqua.cpp
+++ b/gui/aqua/gui_aqua.cpp
@@ -32,12 +32,12 @@
 namespace gnash {
 
 #ifdef GUI_AQUA
-std::auto_ptr<Gui> createAQUAGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createAQUAGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-	return std::auto_ptr<Gui>(new AquaGui(windowid, scale, do_loop, r));
+	return std::unique_ptr<Gui>(new AquaGui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_AQUA
-std::auto_ptr<Gui> createAQUAGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createAQUAGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
 	throw GnashException("Support for AQUA gui was not compiled in");
 }
diff --git a/gui/dump/dump.cpp b/gui/dump/dump.cpp
index 729f8df..b361803 100644
--- a/gui/dump/dump.cpp
+++ b/gui/dump/dump.cpp
@@ -81,8 +81,7 @@ void terminate_signal(int /*signo*/)
 DumpGui::DumpGui(unsigned long xid, float scale, bool loop, RunResources& r)
     :
     Gui(xid, scale, loop, r),
-    _agg_renderer(0),
-    _offscreenbuf(NULL),
+    _agg_renderer(nullptr),
     _offscreenbuf_size(-1),
     _timeout(0),
     _framecount(0),
@@ -91,6 +90,7 @@ DumpGui::DumpGui(unsigned long xid, float scale, bool loop, RunResources& r)
     _pixelformat("BGRA32"),
     _fileOutput(),
     _fileOutputFPS(0), // dump at every heart-beat by default
+    _fileOutputAdvance(0),
     _lastVideoFrameDump(0), // this will be computed
     _sleepUS(0),
     _started(false),
@@ -120,7 +120,7 @@ DumpGui::init(int argc, char **argv[])
 
     optind = 0;
     opterr = 0;
-    char c;
+    int c;
     while ((c = getopt(argc, *argv, "D:S:T:")) != -1) {
         if (c == 'D') {
             // Terminate if no filename is given.
@@ -172,10 +172,12 @@ DumpGui::init(int argc, char **argv[])
     _renderer.reset(create_Renderer_agg(_pixelformat.c_str()));
     _runResources.setRenderer(_renderer);
 
+#ifdef USE_SOUND
     sound::sound_handler* mixer = _runResources.soundHandler();
     media::MediaHandler* mh = _runResources.mediaHandler();
     _soundHandler.reset(new sound::NullSoundHandler(mh, mixer));
     _runResources.setSoundHandler(_soundHandler);
+#endif
 
     // We know what type of renderer it is.
     _agg_renderer = static_cast<Renderer_agg_base*>(_renderer.get());
@@ -257,7 +259,7 @@ DumpGui::run()
         }
     }
 
-    const boost::uint32_t total_time = _clock.elapsed() - _startTime;
+    const std::uint32_t total_time = _clock.elapsed() - _startTime;
 
     std::cout << "TIME=" << total_time << std::endl;
     std::cout << "FPS_ACTUAL=" << _fileOutputFPS << std::endl;
@@ -306,6 +308,7 @@ DumpGui::writeFrame()
 void
 DumpGui::writeSamples()
 {
+#ifdef USE_SOUND
     sound::sound_handler* sh = _runResources.soundHandler();
 
     unsigned int ms = _clock.elapsed() - _startTime;
@@ -327,13 +330,14 @@ DumpGui::writeSamples()
     // And update _samplesFetched..
     _samplesFetched += toFetch;
 
-    boost::int16_t samples[1024];
+    std::int16_t samples[1024];
     while (toFetch) {
         unsigned int n = std::min(toFetch, 1024u);
         // Fetching samples should trigger writing to file
         sh->fetchSamples(samples, n);
         toFetch -= n;
     }
+#endif
 
 }
 
diff --git a/gui/dump/dump.h b/gui/dump/dump.h
index 29abea9..1e44aea 100644
--- a/gui/dump/dump.h
+++ b/gui/dump/dump.h
@@ -29,8 +29,6 @@
 
 #include <string>
 #include <fstream>
-#include <boost/scoped_array.hpp>
-#include <boost/shared_ptr.hpp>
 
 namespace gnash {
     namespace sound {
@@ -85,7 +83,7 @@ private:
     // is destroyed on reset and when it goes out of scope (including on
     // stack unwinding after an exception), so there is no need to delete
     // it.
-    boost::scoped_array<unsigned char> _offscreenbuf;
+    std::unique_ptr<unsigned char[]> _offscreenbuf;
 
     int _offscreenbuf_size;             /* size of window (bytes) */
 
@@ -103,14 +101,12 @@ private:
     std::ofstream _fileStream;         /* stream for output file */
     void init_dumpfile();               /* convenience method to create dump file */
 
-    boost::shared_ptr<sound::sound_handler> _soundHandler;
+    std::shared_ptr<sound::sound_handler> _soundHandler;
 
     ManualClock _clock;
 
     unsigned long _sleepUS; // micro-seconds sleep between iterations
 
-    unsigned int _videoDumpFPS;
-
     std::string _startTrigger;
 
     bool _started;
diff --git a/gui/dump/gui_dump.cpp b/gui/dump/gui_dump.cpp
index c1be525..254ac89 100644
--- a/gui/dump/gui_dump.cpp
+++ b/gui/dump/gui_dump.cpp
@@ -32,12 +32,12 @@
 namespace gnash {
 
 #ifdef GUI_DUMP
-std::auto_ptr<Gui> createDumpGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createDumpGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-	return std::auto_ptr<Gui>(new DumpGui(windowid, scale, do_loop, r));
+	return std::unique_ptr<Gui>(new DumpGui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_DUMP
-std::auto_ptr<Gui> createDumpGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createDumpGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
 	throw GnashException("Support for DUMP gui was not compiled in");
 }
diff --git a/gui/fb/fb.cpp b/gui/fb/fb.cpp
index cdbeef5..5e9a155 100644
--- a/gui/fb/fb.cpp
+++ b/gui/fb/fb.cpp
@@ -138,11 +138,11 @@ namespace gui {
 
 int terminate_request = false;  // global scope to avoid GUI access
 
-std::auto_ptr<Gui> createFBGui(unsigned long windowid, float scale,
+std::unique_ptr<Gui> createFBGui(unsigned long windowid, float scale,
                                bool do_loop, RunResources& r)
 {
     // GNASH_REPORT_FUNCTION;
-    return std::auto_ptr<Gui>(new FBGui(windowid, scale, do_loop, r));
+    return std::unique_ptr<Gui>(new FBGui(windowid, scale, do_loop, r));
 }
 
 /// Called on CTRL-C and alike
@@ -273,7 +273,7 @@ FBGui::init(int argc, char *** argv)
     // Initialize all the input devices
 
     // Look for Mice that use the PS/2 mouse protocol
-    std::vector<boost::shared_ptr<InputDevice> > possibles
+    std::vector<std::shared_ptr<InputDevice> > possibles
         = InputDevice::scanForDevices();
     if (possibles.empty()) {
         log_error(_("Found no accessible input event devices"));
@@ -281,7 +281,7 @@ FBGui::init(int argc, char *** argv)
         log_debug("Found %d input event devices.", possibles.size());
     }
     
-    std::vector<boost::shared_ptr<InputDevice> >::iterator it;
+    std::vector<std::shared_ptr<InputDevice> >::iterator it;
     for (it=possibles.begin(); it!=possibles.end(); ++it) {
         // Set the screen size, which is used for calculating absolute
         // mouse locations from relative ones.
@@ -535,7 +535,7 @@ FBGui::find_accessible_tty(int no)
         if (fn) return fn;
     }
     
-    return NULL;
+    return nullptr;
 }
 
 char *
@@ -549,7 +549,7 @@ FBGui::find_accessible_tty(const char* format, int no)
         return fname;
     }
     
-    return NULL; 
+    return nullptr;
 }
 
 bool
@@ -563,19 +563,17 @@ FBGui::disable_terminal()
     
     char* tty = find_accessible_tty(0);
 
-    log_debug("Disabling terminal %s", tty);
-    
-    int fd;
-  
     if (!tty) {
-        log_error(_("Could not detect controlling TTY"));
+        log_error(_("Could not detect controlling TTY when trying to disable terminal"));
         return false;
     }
     
+    log_debug("Disabling terminal %s", tty);
+    
     // Detect the currently active virtual terminal (so we can switch back to
     // it later)
     
-    fd = open(tty, O_RDWR);
+    int fd = open(tty, O_RDWR);
     if (fd < 0) {
         log_error(_("Could not open %s"), tty);
         return false;
@@ -694,13 +692,14 @@ FBGui::enable_terminal()
     // log_debug("Restoring terminal...");
 
     char* tty = find_accessible_tty(_own_vt);
-    log_debug("Enabling terminal %s", tty);
 
     if (!tty) {
-        log_error(_("Could not find device for VT number %d"), _own_vt);
+        log_error(_("Could not find device for VT number %d when enabling terminal"), _own_vt);
         return false;
     }
 
+    log_debug("Enabling terminal %s", tty);
+
     int fd = open(tty, O_RDWR);
     if (fd < 0) {
         log_error(_("Could not open %s"), tty);
@@ -740,11 +739,11 @@ FBGui::checkForData()
 {
     // GNASH_REPORT_FUNCTION;
 
-    std::vector<boost::shared_ptr<InputDevice> >::iterator it;
+    std::vector<std::shared_ptr<InputDevice> >::iterator it;
 
     for (it=_inputs.begin(); it!=_inputs.end(); ++it) {
         (*it)->check();
-        boost::shared_ptr<InputDevice::input_data_t> ie = (*it)->popData();
+        std::shared_ptr<InputDevice::input_data_t> ie = (*it)->popData();
         if (ie) {            
             // notifyMouseMove(ie->x, ie->y);
 #if 0
@@ -756,7 +755,7 @@ FBGui::checkForData()
 #endif
             // Range check and convert the position from relative to
             // absolute
-            boost::shared_array<int> coords =
+            std::unique_ptr<int[]> coords =
                 InputDevice::convertAbsCoords(ie->x, ie->y,
                                               getStage()->getStageWidth(),
                                               getStage()->getStageHeight());
diff --git a/gui/fb/fb_glue.h b/gui/fb/fb_glue.h
index fd38de0..f387361 100644
--- a/gui/fb/fb_glue.h
+++ b/gui/fb/fb_glue.h
@@ -76,7 +76,7 @@ public:
     virtual void beforeRendering(movie_root *) {};
 
 protected:
-    boost::scoped_ptr<Renderer> _renderer;
+    std::unique_ptr<Renderer> _renderer;
 };
 
 } // end of namespace gui
diff --git a/gui/fb/fb_glue_agg.cpp b/gui/fb/fb_glue_agg.cpp
index 6fb60fd..7dc8224 100644
--- a/gui/fb/fb_glue_agg.cpp
+++ b/gui/fb/fb_glue_agg.cpp
@@ -23,8 +23,7 @@
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <cstring>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 #include <fcntl.h>
 
 #include "log.h"
@@ -44,15 +43,17 @@ namespace gui {
 
 //---------------------------------------------
 FBAggGlue::FBAggGlue()
-    : _fd(-1)
+    : _fd(-1),
+      _fixinfo(),
+      _varinfo()
 {
 //    GNASH_REPORT_FUNCTION;
-    memset(&_varinfo, 0, sizeof(fb_var_screeninfo));
-    memset(&_fixinfo, 0, sizeof(fb_fix_screeninfo));
 }
 
 FBAggGlue::FBAggGlue(int fd)
-    : _fd(fd)
+    : _fd(fd),
+      _fixinfo(),
+      _varinfo()
 {
 //    GNASH_REPORT_FUNCTION;    
 }
@@ -149,7 +150,7 @@ FBAggGlue::createRenderHandler()
 
     if (!_device) {
         log_error(_("No Device layer initialized yet!"));
-        return 0;
+        return nullptr;
     }
     
     const int width     = _device->getWidth();
@@ -175,18 +176,18 @@ FBAggGlue::createRenderHandler()
         rawfb->getBlueOffset(),  rawfb->getBlueSize(),
         rawfb->getDepth());
 
-    Renderer_agg_base *agg_handler = 0;
+    Renderer_agg_base *agg_handler = nullptr;
     if (pixelformat) {
 	agg_handler = create_Renderer_agg(pixelformat);
     } else {
 	log_error(_("The pixel format of your framebuffer could not be detected."));
-	return 0;
+	return nullptr;
     }
     
-    assert(agg_handler != NULL);
+    assert(agg_handler != nullptr);
 
     // Get the memory buffer to have AGG render into.
-    boost::uint8_t *mem = 0;
+    std::uint8_t *mem = nullptr;
     if (rawfb->isSingleBuffered()) {
         log_debug(_("Double buffering disabled"));
         mem = rawfb->getFBMemory();
diff --git a/gui/fb/fb_glue_agg.h b/gui/fb/fb_glue_agg.h
index 068b1a5..443fe12 100644
--- a/gui/fb/fb_glue_agg.h
+++ b/gui/fb/fb_glue_agg.h
@@ -23,8 +23,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 
 #include "Renderer.h"
 #include "fbsup.h"
@@ -105,7 +104,7 @@ protected:
     struct fb_fix_screeninfo            _fixinfo;
     struct fb_var_screeninfo            _varinfo;
     
-    boost::scoped_ptr<Renderer>         _renderer;
+    std::unique_ptr<Renderer>           _renderer;
 
     geometry::Range2d<int>              _validbounds;
     std::vector< geometry::Range2d<int> > _drawbounds;    
diff --git a/gui/fb/fb_glue_gles1.h b/gui/fb/fb_glue_gles1.h
index b7e7daa..ca80682 100644
--- a/gui/fb/fb_glue_gles1.h
+++ b/gui/fb/fb_glue_gles1.h
@@ -50,7 +50,7 @@
 # include "egl/eglDevice.h"
 #endif
 
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #include "fbsup.h"
 
@@ -89,7 +89,7 @@ protected:
     int         _fd;
 
 private:
-    boost::scoped_ptr<Renderer> _renderer;
+    std::unique_ptr<Renderer> _renderer;
     EGLDisplay  _display;
     EGLConfig   _config;
     EGLContext  _context;
diff --git a/gui/fb/fb_glue_ovg.cpp b/gui/fb/fb_glue_ovg.cpp
index 42e1c0e..ea1dbe1 100644
--- a/gui/fb/fb_glue_ovg.cpp
+++ b/gui/fb/fb_glue_ovg.cpp
@@ -64,7 +64,7 @@ FBOvgGlue::init(int argc, char **argv[])
     bool dfb = false;
     bool x11 = false;
     // Probe to see what display devices we have that could be used.
-    boost::shared_array<renderer::GnashDevice::dtype_t> devs = probeDevices();
+    std::unique_ptr<renderer::GnashDevice::dtype_t[]> devs = probeDevices();
     if (devs) {
         int i = 0;
         while (devs[i] != renderer::GnashDevice::GNASH_NODEV) {
diff --git a/gui/fb/fb_glue_ovg.h b/gui/fb/fb_glue_ovg.h
index 84de344..0c2cef1 100644
--- a/gui/fb/fb_glue_ovg.h
+++ b/gui/fb/fb_glue_ovg.h
@@ -23,7 +23,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include "openvg/OpenVGRenderer.h"
 #include "fbsup.h"
 #include "fb_glue.h"
diff --git a/gui/fb/fbsup.h b/gui/fb/fbsup.h
index 9e78908..23f409b 100644
--- a/gui/fb/fbsup.h
+++ b/gui/fb/fbsup.h
@@ -23,9 +23,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/scoped_array.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <vector>
 
 #include <linux/fb.h>
@@ -196,12 +194,12 @@ private:
     size_t      _timeout;       // timeout period for the event loop
     bool        _fullscreen;
 
-    boost::shared_ptr<FBGlue>   _glue;
+    std::shared_ptr<FBGlue>   _glue;
 
     /// This is the array of functioning input devices.
-    std::vector<boost::shared_ptr<InputDevice> > _inputs;
+    std::vector<std::shared_ptr<InputDevice> > _inputs;
 
-    boost::shared_ptr<Renderer> _renderer;
+    std::shared_ptr<Renderer> _renderer;
 #ifdef HAVE_LINUX_UINPUT_H
     UinputDevice                _uinput;
 #endif
diff --git a/gui/fb/gui_fb.cpp b/gui/fb/gui_fb.cpp
index 583803b..5f64ccc 100644
--- a/gui/fb/gui_fb.cpp
+++ b/gui/fb/gui_fb.cpp
@@ -34,12 +34,12 @@ namespace gnash {
 namespace gui {
 
 #ifdef GUI_FB
-std::auto_ptr<Gui> createFBGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createFBGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-    return std::auto_ptr<Gui>(new FBGui(windowid, scale, do_loop, r));
+    return std::unique_ptr<Gui>(new FBGui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_FB
-std::auto_ptr<Gui> createFBGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createFBGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
     throw GnashException("Support for FB gui was not compiled in");
 }
diff --git a/gui/fltk/fltk_glue_cairo.cpp b/gui/fltk/fltk_glue_cairo.cpp
index 2957ce3..c105dc0 100644
--- a/gui/fltk/fltk_glue_cairo.cpp
+++ b/gui/fltk/fltk_glue_cairo.cpp
@@ -109,7 +109,7 @@ FltkCairoGlue::initBuffer(int width, int height)
 
     if (firstTime) {
       //set_Renderer(_renderer);
-      _runResources.setRenderer(boost::shared_ptr<Renderer>(_renderer));
+      _runResources.setRenderer(std::shared_ptr<Renderer>(_renderer));
       firstTime = false;
     }
 
diff --git a/gui/fltk/gui_fltk.cpp b/gui/fltk/gui_fltk.cpp
index 8b38bfe..6143f7d 100644
--- a/gui/fltk/gui_fltk.cpp
+++ b/gui/fltk/gui_fltk.cpp
@@ -32,12 +32,12 @@
 namespace gnash {
 
 #ifdef GUI_FLTK
-std::auto_ptr<Gui> createFLTKGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createFLTKGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-	return std::auto_ptr<Gui>(new FltkGui(windowid, scale, do_loop, r));
+	return std::unique_ptr<Gui>(new FltkGui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_FLTK
-std::auto_ptr<Gui> createFLTKGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createFLTKGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
 	throw GnashException("Support for FLTK gui was not compiled in");
 }
diff --git a/gui/gnash.cpp b/gui/gnash.cpp
index 94ed3b0..7fccecd 100644
--- a/gui/gnash.cpp
+++ b/gui/gnash.cpp
@@ -1,7 +1,7 @@
 // gnash.cpp:  Main routine for top-level SWF player, for Gnash.
 // 
 //   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010,
-//   2011 Free Software Foundation, Inc
+//   2011, 2014 Free Software Foundation, Inc
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -31,12 +31,11 @@
 #include <boost/algorithm/string/join.hpp>
 #include <boost/algorithm/string/split.hpp>
 #include <boost/algorithm/string/classification.hpp>
-#include <boost/function.hpp>
-#include <boost/bind.hpp>
 #include <algorithm>
 #include <cstdlib>
 #include <utility>
 #include <functional>
+
 #ifdef ENABLE_NLS
 # include <clocale>
 #endif
@@ -48,6 +47,7 @@
 #include "GnashException.h"
 #include "revno.h"
 #include "MediaHandler.h"
+#include "GnashFactory.h"
 #include "utility.h"
 #include "accumulator.h"
 #include "GnashFileUtilities.h"
@@ -88,7 +88,7 @@ void
 playFile(gnash::Player& player, int argc, char *argv[],
                               const std::string& filename)
 {
-    gnash::Player newPlayer(player);
+    gnash::Player newPlayer = player;
     newPlayer.run(argc, argv, filename, url);
 }
 
@@ -100,7 +100,7 @@ main(int argc, char *argv[])
 
     // Enable native language support, i.e. internationalization
 #ifdef ENABLE_NLS
-    std::setlocale (LC_ALL, "");
+    setlocale (LC_ALL, "");
     bindtextdomain (PACKAGE, LOCALEDIR);
     textdomain (PACKAGE);
 #endif
@@ -173,7 +173,7 @@ main(int argc, char *argv[])
     // We only expect GnashExceptions here. No others should be thrown!
     try {
         std::for_each(infiles.begin(), infiles.end(),
-                boost::bind(&playFile, boost::ref(player), argc, argv, _1));
+                std::bind(&playFile, std::ref(player), argc, argv, std::placeholders::_1));
     }
     catch (const gnash::GnashException& ex) {
         std::cerr << "Error: " << ex.what() << "\n";
@@ -205,9 +205,9 @@ void
 setupFDs(gnash::Player& p, const std::string& fds)
 {
     int hostfd = 0, controlfd = 0;
-    hostfd = std::strtol(fds.substr(0, fds.find(":")).c_str(), NULL, 0);
+    hostfd = std::strtol(fds.substr(0, fds.find(":")).c_str(), nullptr, 0);
     std::string csub = fds.substr(fds.find(":")+1, fds.size());
-    controlfd = strtol(csub.c_str(), 0, 0);
+    controlfd = strtol(csub.c_str(), nullptr, 0);
     // gnash::log_debug("Host FD #%d, Control FD #%d\n", hostfd, controlfd);
 
     if (hostfd < 0) {
@@ -283,31 +283,31 @@ getDebuggingOptions(gnash::Player& p)
     desc.add_options()
 
     ("verbose,v", accumulator<int>()
-        ->notifier(boost::bind(&LogFile::setVerbosity, &dbglogfile, _1)),
+        ->notifier(std::bind((void(LogFile::*)(int))&LogFile::setVerbosity, &dbglogfile, std::placeholders::_1)),
         _("Produce verbose output"))
 
     // NB: if we use a bool_switch(), the default will be false. TODO:
     // make a sensible process for handling command-line and rcfile options.
     ("writelog,w", po::value<bool>()
         ->zero_tokens()
-        ->notifier(boost::bind(&RcInitFile::useWriteLog, &rcfile, _1)),
+        ->notifier(std::bind((void(RcInitFile::*)(bool))&RcInitFile::useWriteLog, &rcfile, std::placeholders::_1)),
         _("Produce the disk based debug log"))
 
 #if VERBOSE_ACTION
     ("verbose-actions,a", po::bool_switch()
-        ->notifier(boost::bind(&LogFile::setActionDump, &dbglogfile, _1)),
+        ->notifier(std::bind(&LogFile::setActionDump, &dbglogfile, std::placeholders::_1)),
         _("Be (very) verbose about action execution"))
 #endif
 
 #if VERBOSE_PARSE
     ("verbose-parsing,p", po::bool_switch()
-        ->notifier(boost::bind(&LogFile::setParserDump, &dbglogfile, _1)),
+        ->notifier(std::bind(&LogFile::setParserDump, &dbglogfile, std::placeholders::_1)),
         _("Be (very) verbose about parsing"))
 #endif
 
 #ifdef GNASH_FPS_DEBUG
     ("debug-fps,f", po::value<float>()
-        ->notifier(boost::bind(&Player::setFpsPrintTime, &p, _1)),
+        ->notifier(std::bind(&Player::setFpsPrintTime, &p, std::placeholders::_1)),
         _("Print FPS every num seconds"))
 #endif 
 
@@ -343,52 +343,52 @@ getSupportedOptions(gnash::Player& p)
         _("Print version information and exit"))
 
     ("scale,s", po::value<float>()
-        ->notifier(boost::bind(&Player::setScale, &p,
-                boost::bind(gnash::clamp<float>, _1, 0.01f, 100.f))),
+        ->notifier(std::bind(&Player::setScale, &p,
+                std::bind(gnash::clamp<float>, std::placeholders::_1, 0.01f, 100.f))),
         _("Scale the movie by the specified factor"))
 
     ("delay,d", po::value<int>()
-        ->notifier(boost::bind(&Player::setDelay, &p, _1)),
+        ->notifier(std::bind(&Player::setDelay, &p, std::placeholders::_1)),
         _("Number of milliseconds to delay in main loop"))
 
     ("audio-dump,A", po::value<string>()
-        ->notifier(boost::bind(&Player::setAudioDumpfile, &p, _1)),
+        ->notifier(std::bind(&Player::setAudioDumpfile, &p, std::placeholders::_1)),
         _("Audio dump file (wave format)"))
 
     ("hwaccel", po::value<string>()
         ->default_value("none")
-        ->notifier(boost::bind(&Player::setHWAccel, &p, _1)),
+        ->notifier(std::bind(&Player::setHWAccel, &p, std::placeholders::_1)),
         (string(_("Hardware Video Accelerator to use"))
         + string("\nnone|vaapi")). c_str()) 
 
     ("xid,x", po::value<long>()
-        ->notifier(boost::bind(&Player::setWindowId, &p, _1)),
+        ->notifier(std::bind(&Player::setWindowId, &p, std::placeholders::_1)),
         _("X11 Window ID for display"))
 
     ("width,j", po::value<int>()
-        ->notifier(boost::bind(&Player::setWidth, &p, _1)),
+        ->notifier(std::bind(&Player::setWidth, &p, std::placeholders::_1)),
         _("Set window width"))
 
     ("height,k", po::value<int>()
-        ->notifier(boost::bind(&Player::setHeight, &p, _1)),
+        ->notifier(std::bind(&Player::setHeight, &p, std::placeholders::_1)),
         _("Set window height"))
 
     ("x-pos,X", po::value<int>()
-        ->notifier(boost::bind(&Player::setXPosition, &p, _1)),
+        ->notifier(std::bind(&Player::setXPosition, &p, std::placeholders::_1)),
         _("Set window x position"))
 
     ("y-pos,Y", po::value<int>()
-        ->notifier(boost::bind(&Player::setYPosition, &p, _1)),
+        ->notifier(std::bind(&Player::setYPosition, &p, std::placeholders::_1)),
         _("Set window y position"))
 
     ("once,1", po::bool_switch()
-        ->notifier(boost::bind(&Player::setDoLoop, &p,
-                boost::bind(std::logical_not<bool>(), _1))),
+        ->notifier(std::bind(&Player::setDoLoop, &p,
+                std::bind(std::logical_not<bool>(), std::placeholders::_1))),
         _("Exit when/if movie reaches the last frame"))
 
     ("render-mode,r", po::value<int>()
         ->default_value(3)
-        ->notifier(boost::bind(&setupSoundAndRendering, boost::ref(p), _1)),
+        ->notifier(std::bind(&setupSoundAndRendering, std::ref(p), std::placeholders::_1)),
         (string("0 ")
         + string(_("disable rendering and sound")) 
         + string("\n1 ")
@@ -403,7 +403,7 @@ getSupportedOptions(gnash::Player& p)
         ->default_value(rcfile.getMediaHandler().empty() ?
             ( handlers.empty() ? "" : handlers.front() )
                                                  : rcfile.getMediaHandler() )
-        ->notifier(boost::bind(&Player::setMedia, &p, _1)),
+        ->notifier(std::bind(&Player::setMedia, &p, std::placeholders::_1)),
         (string(_("The media handler to use"))
          + string("\n") + boost::join(handlers, "|")
         ).c_str())
@@ -411,61 +411,61 @@ getSupportedOptions(gnash::Player& p)
     ("renderer,R", po::value<string>()
         ->default_value(rcfile.getRenderer().empty() ? renderers.front()
                                                      : rcfile.getRenderer())
-        ->notifier(boost::bind(&Player::setRenderer, &p, _1)),
+        ->notifier(std::bind(&Player::setRenderer, &p, std::placeholders::_1)),
         (string(_("The renderer to use"))
         + string("\n") + boost::join(renderers, "|")
         ).c_str())
 
     ("timeout,t", po::value<float>()
-        ->notifier(boost::bind(&Player::setExitTimeout, &p, _1)),
+        ->notifier(std::bind(&Player::setExitTimeout, &p, std::placeholders::_1)),
         _("Exit after the specified number of seconds"))
 
     ("real-url,u", po::value<string>(&url),
         _("Set \"real\" URL of the movie"))
 
     ("base-url,U", po::value<string>()
-        ->notifier(boost::bind(&Player::setBaseUrl, &p, _1)),
+        ->notifier(std::bind(&Player::setBaseUrl, &p, std::placeholders::_1)),
         _("Set \"base\" URL for resolving relative URLs"))
 
     ("param,P", po::value<std::vector<std::string> >()
         ->composing()
-        ->notifier(boost::bind(&setupFlashVars, boost::ref(p), _1)),
+        ->notifier(std::bind(&setupFlashVars, std::ref(p), std::placeholders::_1)),
         _("Set parameter (e.g. \"FlashVars=A=1&b=2\")"))
 
     ("fd,F", po::value<string>()
-        ->notifier(boost::bind(&setupFDs, boost::ref(p), _1)),
+        ->notifier(std::bind(&setupFDs, std::ref(p), std::placeholders::_1)),
         (string(_("Filedescriptor to use for external communications"))
         + string(" <fd>:<fd>")
         ).c_str())
 
     ("cookie-file,C", po::value<string>()
-        ->notifier(boost::bind(&setupCookiesIn, boost::ref(p), _1)),
+        ->notifier(std::bind(&setupCookiesIn, std::ref(p), std::placeholders::_1)),
         _("Cookiefile to use"))
 
     ("max-advances", po::value<size_t>()
-        ->notifier(boost::bind(&Player::setMaxAdvances, &p, _1)),
+        ->notifier(std::bind(&Player::setMaxAdvances, &p, std::placeholders::_1)),
         _("Exit after specified number of frame advances"))
 
     ("fullscreen", po::bool_switch()
-        ->notifier(boost::bind(&Player::setStartFullscreen, &p, _1)),
+        ->notifier(std::bind(&Player::setStartFullscreen, &p, std::placeholders::_1)),
         _("Start in fullscreen mode"))
 
     // TODO: move to GUIs actually implementing this
     ("hide-menubar", po::bool_switch()
-        ->notifier(boost::bind(&Player::hideMenu, &p, _1)),
+        ->notifier(std::bind(&Player::hideMenu, &p, std::placeholders::_1)),
         _("Start without displaying the menu bar"))
 
     // TODO: do this in ScreenShotter class.
     ("screenshot", po::value<string>()
-        ->notifier(boost::bind(&Player::setScreenShots, &p, _1)),
+        ->notifier(std::bind(&Player::setScreenShots, &p, std::placeholders::_1)),
         _("List of frames to save as screenshots"))
 
     ("screenshot-file", po::value<string>()
-        ->notifier(boost::bind(&Player::setScreenShotFile, &p, _1)),
+        ->notifier(std::bind(&Player::setScreenShotFile, &p, std::placeholders::_1)),
         _("Filename pattern for screenshot images"))
 
     ("screenshot-quality", po::value<size_t>()
-        ->notifier(boost::bind(&Player::setScreenShotQuality, &p, _1)),
+        ->notifier(std::bind(&Player::setScreenShotQuality, &p, std::placeholders::_1)),
         _("Quality for screenshot output (not all formats)"))
 
     ("input-file", po::value<std::vector<std::string> >(&infiles),
diff --git a/gui/gtk/gtk.cpp b/gui/gtk/gtk.cpp
index 0db93c0..6f6d828 100644
--- a/gui/gtk/gtk.cpp
+++ b/gui/gtk/gtk.cpp
@@ -52,6 +52,7 @@
 #include "RunResources.h"
 #include "VM.h"
 #include "GnashEnums.h"
+#include "MediaHandler.h"
 #include "gtk_canvas.h"
 
 #ifdef HAVE_VA_VA_H
@@ -278,7 +279,7 @@ GtkGui::error(const std::string& msg)
     GtkWidget* popup = gtk_dialog_new_with_buttons("Gnash Error",
             GTK_WINDOW(_window),
             static_cast<GtkDialogFlags>(GTK_DIALOG_DESTROY_WITH_PARENT),
-            GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+            GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, nullptr);
 
     g_signal_connect_swapped(popup, "response", G_CALLBACK(gtk_widget_destroy),
             popup);
@@ -402,7 +403,7 @@ GtkGui::setCursor(gnash_cursor_type newcursor)
             cursortype = GDK_LAST_CURSOR;
     }
   
-    GdkCursor* gdkcursor = NULL; 
+    GdkCursor* gdkcursor = nullptr;
   
     if (cursortype != GDK_LAST_CURSOR) {
          gdkcursor = gdk_cursor_new(cursortype);
@@ -441,7 +442,7 @@ GtkGui::showMouse(bool show)
         GdkColor *color;
 
         color = g_new0(GdkColor, 1);
-        pixmap = gdk_pixmap_new(NULL, 1, 1, 1);
+        pixmap = gdk_pixmap_new(nullptr, 1, 1, 1);
         GdkCursor* cursor = gdk_cursor_new_from_pixmap(pixmap, pixmap,
                                                     color, color, 0, 0);
 
@@ -565,7 +566,7 @@ GtkGui::setupEvents()
                    G_CALLBACK(visibilityNotifyEvent), this);
   
     g_signal_connect_after(_canvas, "realize",
-                         G_CALLBACK (realizeEvent), NULL);
+                         G_CALLBACK (realizeEvent), nullptr);
 
     // connect_after because we are going to cause a rendering and the canvas
     // widget should have had a chance to update the size of the render area
@@ -584,6 +585,11 @@ GtkGui::grabFocus()
 void
 GtkGui::quitUI() 
 {
+    stopAdvanceTimer();
+    // Unregister the callback registered by setTimeout, if any. This also
+    // removes other callbacks, but we're about to go away anyway.
+    while (g_source_remove_by_user_data(this)) {}
+    gtk_widget_destroy(_window);
     gtk_main_quit();
 }
 
@@ -594,7 +600,7 @@ GtkGui::startAdvanceTimer()
     stopAdvanceTimer();
     
     _advanceSourceTimer = g_timeout_add_full(G_PRIORITY_LOW, _interval,
-            (GSourceFunc)advance_movie, this, NULL);
+            (GSourceFunc)advance_movie, this, nullptr);
 
     log_debug(_("Advance interval timer set to %d ms (~ %d FPS)"),
             _interval, _interval ? 1000/_interval : 1000);
@@ -763,7 +769,7 @@ GtkGui::createWindow(const char *title, int width, int height,
 
 // This creates a GtkTree model for displaying movie info.
 GtkTreeModel*
-GtkGui::makeTreeModel(std::auto_ptr<movie_root::InfoTree> treepointer)
+GtkGui::makeTreeModel(const std::unique_ptr<movie_root::InfoTree>& treepointer)
 {
 
     const movie_root::InfoTree& info = *treepointer;
@@ -778,9 +784,9 @@ GtkGui::makeTreeModel(std::auto_ptr<movie_root::InfoTree> treepointer)
     GtkTreeStore *model = gtk_tree_store_new (NUM_COLUMNS,
                          G_TYPE_STRING, G_TYPE_STRING);
     
-    GtkTreeIter iter;
-    GtkTreeIter child_iter;
-    GtkTreeIter parent_iter;
+    GtkTreeIter iter = {0, 0, 0, 0};
+    GtkTreeIter child_iter = {0, 0, 0, 0};
+    GtkTreeIter parent_iter = {0, 0, 0, 0};
 
     // Depth within the *GTK* tree.
     int depth = 0;    
@@ -813,7 +819,7 @@ GtkGui::makeTreeModel(std::auto_ptr<movie_root::InfoTree> treepointer)
         }
 
         //Read in data from present node
-        if (depth == 0) gtk_tree_store_append(model, &child_iter, NULL);
+        if (depth == 0) gtk_tree_store_append(model, &child_iter, nullptr);
         else gtk_tree_store_append(model, &child_iter, &iter);
 
         gtk_tree_store_set(model, &child_iter,
@@ -1232,7 +1238,7 @@ PreferencesDialog::PreferencesDialog(GtkWidget* window)
                     // The buttons and their response codes:
                     GTK_STOCK_OK, GTK_RESPONSE_OK,
                     GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-                    NULL);
+                    nullptr);
     // Add Gnash icon
     addGnashIcon(GTK_WINDOW(_prefsDialog));
 
@@ -1700,7 +1706,7 @@ GtkGui::showPropertiesDialog()
                         GTK_DIALOG_DESTROY_WITH_PARENT),
                         // Just a 'close' button
                         GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
-                        NULL);
+                        nullptr);
 
     // Not too small... But I'd rather not have to specify
     // a size in pixels.
@@ -1715,7 +1721,7 @@ GtkGui::showPropertiesDialog()
 
     // Destroy the window when a button is clicked.
     g_signal_connect (propsDialog, "response",
-               G_CALLBACK(gtk_widget_destroy), NULL);
+               G_CALLBACK(gtk_widget_destroy), nullptr);
 
     GtkWidget *propsvbox = gtk_vbox_new (FALSE, 1);
     gtk_container_add(GTK_CONTAINER(
@@ -1723,7 +1729,7 @@ GtkGui::showPropertiesDialog()
 
 #ifdef USE_SWFTREE
 
-    std::auto_ptr<movie_root::InfoTree> infoptr = getMovieInfo();
+    std::unique_ptr<movie_root::InfoTree> infoptr = getMovieInfo();
 
     GtkWidget *scrollwindow1 = gtk_scrolled_window_new(0, 0);
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwindow1),
@@ -1765,19 +1771,19 @@ GtkGui::showPropertiesDialog()
             -1, _("Variable"),
             renderer, "text",
             STRING1_COLUMN,
-            NULL);
+            nullptr);
 
     // 'Value' column:
     // Set to be 'editable' so that the data can be selected and
     // copied; it can't actually be edited, though.
     renderer = gtk_cell_renderer_text_new ();
-    g_object_set (renderer, "xalign", 0.0, "editable", TRUE, NULL);
+    g_object_set (renderer, "xalign", 0.0, "editable", TRUE, nullptr);
     gtk_tree_view_insert_column_with_attributes(
             GTK_TREE_VIEW(treeview),
             -1, _("Value"),
             renderer, "text",
             STRING2_COLUMN,
-            NULL);
+            nullptr);
 
     //Add tree to scrollwindow.
     gtk_container_add(GTK_CONTAINER(scrollwindow1), treeview);
@@ -1796,12 +1802,12 @@ GtkGui::showAboutDialog()
         "Rob Savoye", 
         "Sandro Santilli",
         "Ann Barcomb",
-        NULL 
+        nullptr
     };
 
     const gchar *artists[] = { 
         "Jason Savoye",
-        NULL
+        nullptr
     };
 
     const gchar *authors[] = { 
@@ -1823,7 +1829,7 @@ GtkGui::showAboutDialog()
         "Bob Naugle",
         "Si Liu",
         "Sharad Desai",
-        NULL
+        nullptr
     };
 
 	const std::string license = 
@@ -2232,7 +2238,7 @@ GtkGui::yesno(const std::string& question)
 /// Anonymous namespace for callbacks, local functions, event handlers etc.
 namespace {
 
-static GList *pixmaps_directories = NULL;
+static GList *pixmaps_directories = nullptr;
 
 // Adds the Gnash icon to a window.
 void
@@ -2249,19 +2255,19 @@ addGnashIcon(GtkWindow* window)
 GdkPixbuf*
 createPixbuf (const gchar *filename)
 {
-    gchar *pathname = NULL;
+    gchar *pathname = nullptr;
     GdkPixbuf *pixbuf;
-    GError *error = NULL;
+    GError *error = nullptr;
 
     if (!filename || !filename[0])
-       return NULL;
+       return nullptr;
 
     pathname = findPixmapFile (filename);
 
     if (!pathname) {
         log_error (_("Couldn't find pixmap file: %s"), filename);
         g_warning(_("Couldn't find pixmap file: %s"), filename);
-        return NULL;
+        return nullptr;
     }
 
     pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
@@ -2391,7 +2397,7 @@ findPixmapFile(const gchar* filename)
         g_free (pathname);
         elem = elem->next;
     }
-    return NULL;
+    return nullptr;
 }
 
 
@@ -2593,11 +2599,11 @@ menuOpenFile(GtkMenuItem* /*menuitem*/, gpointer data)
 
 #if GTK_CHECK_VERSION(2,4,0)
     dialog = gtk_file_chooser_dialog_new (_("Open file"),
-                                          NULL,
+                                          nullptr,
                                           GTK_FILE_CHOOSER_ACTION_OPEN,
                                           GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                           GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
-                                          NULL);
+                                          nullptr);
     
     if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
         openFile(dialog, gui);
@@ -2658,7 +2664,7 @@ popupHandler(GtkWidget *widget, GdkEvent *event)
             GdkEventButton* event_button =
                             reinterpret_cast<GdkEventButton*>(event);
             if (event_button->button == 3) {
-                gtk_menu_popup(menu, NULL, NULL, NULL, NULL,
+                gtk_menu_popup(menu, nullptr, nullptr, nullptr, nullptr,
                                event_button->button, event_button->time);
                 return TRUE;
             } 
@@ -2680,7 +2686,7 @@ popupHandlerAlt(GtkWidget *widget, GdkEvent *event)
             GdkEventButton* event_button =
                             reinterpret_cast<GdkEventButton*>(event);
             if (event_button->button == 3) {
-                gtk_menu_popup(menu, NULL, NULL, NULL, NULL,
+                gtk_menu_popup(menu, nullptr, nullptr, nullptr, nullptr,
                                event_button->button, event_button->time);
                 return TRUE;
             } 
diff --git a/gui/gtk/gtk_canvas.cpp b/gui/gtk/gtk_canvas.cpp
index aeeae3a..b834c39 100644
--- a/gui/gtk/gtk_canvas.cpp
+++ b/gui/gtk/gtk_canvas.cpp
@@ -60,13 +60,13 @@
 struct _GnashCanvas
 {
     GtkDrawingArea base_instance;
-    std::auto_ptr<gnash::GtkGlue> glue;
-    boost::shared_ptr<gnash::Renderer> renderer;
+    std::unique_ptr<gnash::GtkGlue> glue;
+    std::shared_ptr<gnash::Renderer> renderer;
 };
 
 G_DEFINE_TYPE(GnashCanvas, gnash_canvas, GTK_TYPE_DRAWING_AREA)
 
-static GObjectClass *parent_class = NULL;
+static GObjectClass *parent_class = nullptr;
 
 static void gnash_canvas_class_init(GnashCanvasClass *gnash_canvas_class);
 static void gnash_canvas_init(GnashCanvas *canvas);
@@ -83,7 +83,7 @@ namespace {
 GtkWidget *
 gnash_canvas_new ()
 {
-    return GTK_WIDGET(g_object_new (GNASH_TYPE_CANVAS, NULL));
+    return GTK_WIDGET(g_object_new (GNASH_TYPE_CANVAS, nullptr));
 }
 
 static void
@@ -177,6 +177,9 @@ gnash_canvas_realize(GtkWidget *widget)
                                     &attributes, attributes_mask);
     gdk_window_set_user_data (widget->window, widget);
 
+    widget->style = gtk_style_attach (widget->style, widget->window);
+    gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
+
 #if defined(RENDERER_CAIRO) || defined(RENDERER_AGG)
     GnashCanvas *canvas = GNASH_CANVAS(widget);
     // cairo needs the _drawingArea.window to prepare it ..
@@ -320,7 +323,7 @@ gnash_canvas_before_rendering(GnashCanvas *canvas, gnash::movie_root* stage)
     canvas->glue->beforeRendering(stage);
 }
 
-boost::shared_ptr<gnash::Renderer>
+std::shared_ptr<gnash::Renderer>
 gnash_canvas_get_renderer(GnashCanvas *canvas)
 {
     return canvas->renderer;
diff --git a/gui/gtk/gtk_canvas.h b/gui/gtk/gtk_canvas.h
index 13d5bc9..3a43030 100644
--- a/gui/gtk/gtk_canvas.h
+++ b/gui/gtk/gtk_canvas.h
@@ -20,9 +20,9 @@
 #ifndef GNASH_GTK_CANVAS_H
 #define GNASH_GTK_CANVAS_H
 
+#include <memory>
 #include <string>
 #include <gtk/gtkdrawingarea.h>
-#include <boost/shared_ptr.hpp>
 
 // Forward declarations.
 namespace gnash {
@@ -60,7 +60,7 @@ void gnash_canvas_before_rendering (GnashCanvas *canvas, gnash::movie_root* stag
 G_END_DECLS
 
 /// Get the Renderer for this canvas
-boost::shared_ptr<gnash::Renderer> gnash_canvas_get_renderer(GnashCanvas *canvas);
+std::shared_ptr<gnash::Renderer> gnash_canvas_get_renderer(GnashCanvas *canvas);
 
 
 #endif
diff --git a/gui/gtk/gtk_glue.h b/gui/gtk/gtk_glue.h
index 721e2b5..36ce777 100644
--- a/gui/gtk/gtk_glue.h
+++ b/gui/gtk/gtk_glue.h
@@ -40,7 +40,7 @@ namespace gnash {
 class GtkGlue : public DeviceGlue
 {
   public:
-    GtkGlue() : _drawing_area(0), _needs_area(false) { }
+    GtkGlue() : _drawing_area(nullptr), _needs_area(false) { }
     virtual ~GtkGlue() { }
     virtual bool init(int argc, char **argv[]) = 0;
 
diff --git a/gui/gtk/gtk_glue_agg.cpp b/gui/gtk/gtk_glue_agg.cpp
index b4b3223..9db9bf8 100644
--- a/gui/gtk/gtk_glue_agg.cpp
+++ b/gui/gtk/gtk_glue_agg.cpp
@@ -39,8 +39,8 @@ namespace gnash
 {
 
 GtkAggGlue::GtkAggGlue()
-:   _offscreenbuf(NULL),
-    _agg_renderer(NULL)
+:   _offscreenbuf(nullptr),
+    _agg_renderer(nullptr)
 {
     GNASH_REPORT_FUNCTION;
 }
@@ -108,7 +108,7 @@ GtkAggGlue::setRenderHandlerSize(int width, int height)
 
     assert(width > 0);
     assert(height > 0);
-    assert(_agg_renderer != NULL);
+    assert(_agg_renderer != nullptr);
     
     if (_offscreenbuf && _offscreenbuf->width == width &&
         _offscreenbuf->height == height) {
diff --git a/gui/gtk/gtk_glue_agg.h b/gui/gtk/gtk_glue_agg.h
index fd86558..9b14000 100644
--- a/gui/gtk/gtk_glue_agg.h
+++ b/gui/gtk/gtk_glue_agg.h
@@ -25,7 +25,6 @@
 
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
-#include <boost/scoped_array.hpp>
 
 namespace gnash
 {
diff --git a/gui/gtk/gtk_glue_agg_vaapi.cpp b/gui/gtk/gtk_glue_agg_vaapi.cpp
index c3d02d3..1eda283 100644
--- a/gui/gtk/gtk_glue_agg_vaapi.cpp
+++ b/gui/gtk/gtk_glue_agg_vaapi.cpp
@@ -292,7 +292,7 @@ GtkAggVaapiGlue::beforeRendering(movie_root* stage)
 }
 
 VaapiVideoWindow *
-GtkAggVaapiGlue::getVideoWindow(boost::shared_ptr<VaapiSurface> surface,
+GtkAggVaapiGlue::getVideoWindow(std::shared_ptr<VaapiSurface> surface,
                                 GdkWindow *parent_window,
                                 VaapiRectangle const & rect)
 {
@@ -301,7 +301,7 @@ GtkAggVaapiGlue::getVideoWindow(boost::shared_ptr<VaapiSurface> surface,
         return NULL;
 
     if (!context->getData()) {
-        std::auto_ptr<VaapiContextData> contextData;
+        std::unique_ptr<VaapiContextData> contextData;
         contextData.reset(new VaapiVideoWindow(parent_window, rect));
         if (!contextData.get())
             return NULL;
@@ -349,7 +349,7 @@ GtkAggVaapiGlue::render()
 
      if (first_img != last_img) {
          for (img = first_img; img != last_img; ++img) {
-             boost::shared_ptr<VaapiSurface> surface = (*img)->surface();
+             std::shared_ptr<VaapiSurface> surface = (*img)->surface();
 
              VaapiRectangle src_rect;
              src_rect.x      = (*img)->x();
@@ -393,7 +393,7 @@ GtkAggVaapiGlue::render()
          }
 
          for (img = first_img; img != last_img; ++img) {
-             boost::shared_ptr<VaapiSurface> surface = (*img)->surface();
+             std::shared_ptr<VaapiSurface> surface = (*img)->surface();
 
              status = vaSyncSurface(gvactx->display(), surface->get());
              if (!vaapi_check_status(status, "vaSyncSurface() video"))
diff --git a/gui/gtk/gtk_glue_agg_vaapi.h b/gui/gtk/gtk_glue_agg_vaapi.h
index b0a52a1..c77e040 100644
--- a/gui/gtk/gtk_glue_agg_vaapi.h
+++ b/gui/gtk/gtk_glue_agg_vaapi.h
@@ -25,8 +25,6 @@
 
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_array.hpp>
 #include <memory>
 #include "vaapi/VaapiImageFormat.h"
 
@@ -58,7 +56,7 @@ public:
     void configure(GtkWidget *const widget, GdkEventConfigure *const event);
 
 private:
-    VaapiVideoWindow *getVideoWindow(boost::shared_ptr<VaapiSurface> surface,
+    VaapiVideoWindow *getVideoWindow(std::shared_ptr<VaapiSurface> surface,
                                      GdkWindow *parent_window,
                                      VaapiRectangle const & rect);
 
@@ -67,11 +65,11 @@ private:
 private:
     Renderer_agg_base                  *_agg_renderer;
     VaapiImageFormat                    _vaapi_image_format;
-    boost::shared_ptr<VaapiImage>       _vaapi_image;
+    std::shared_ptr<VaapiImage>       _vaapi_image;
     unsigned int                        _vaapi_image_width;
     unsigned int                        _vaapi_image_height;
-    boost::shared_ptr<VaapiSubpicture>  _vaapi_subpicture;
-    std::auto_ptr<VaapiSurface>         _vaapi_surface;
+    std::shared_ptr<VaapiSubpicture>  _vaapi_subpicture;
+    std::unique_ptr<VaapiSurface>         _vaapi_surface;
     unsigned int                        _window_width;
     unsigned int                        _window_height;
     bool                                _window_is_setup;
diff --git a/gui/gtk/gtk_glue_cairo.cpp b/gui/gtk/gtk_glue_cairo.cpp
index b46693f..133e6fb 100644
--- a/gui/gtk/gtk_glue_cairo.cpp
+++ b/gui/gtk/gtk_glue_cairo.cpp
@@ -29,9 +29,10 @@ namespace gnash
 {
 
 GtkCairoGlue::GtkCairoGlue()
-  : _cairo_handle(0),
-    _cairo_offscreen(0),
-    _image(0)
+  : _cairo_handle(nullptr),
+    _cairo_offscreen(nullptr),
+    _renderer(nullptr),
+    _image(nullptr)
 {
     GNASH_REPORT_FUNCTION;
 }
@@ -128,7 +129,7 @@ cairoFormatFromVisual(const GdkVisual* visual, cairo_format_t* format /*out*/)
       *format = CAIRO_FORMAT_ARGB32;
       break;
     default:
-      format = NULL;
+      format = nullptr;
       return false;
   }
   return true;
@@ -143,12 +144,12 @@ GtkCairoGlue::createGdkImageSurface(const int& width, const int& height)
   cairo_format_t format;
 
   if (!cairoFormatFromVisual(visual, &format)) {
-    return NULL;
+    return nullptr;
   }
 
   _image = gdk_image_new (GDK_IMAGE_FASTEST, visual, width, height);
   if (!_image) {
-    return NULL;
+    return nullptr;
   }
 
   cairo_surface_t* surface =
@@ -158,8 +159,8 @@ GtkCairoGlue::createGdkImageSurface(const int& width, const int& height)
   if (cairo_surface_status(surface) != CAIRO_STATUS_SUCCESS) {
     cairo_surface_destroy(surface);
     gdk_image_destroy(_image);
-    _image = 0;
-    return NULL;
+    _image = nullptr;
+    return nullptr;
   }
 
   return surface;
@@ -175,7 +176,7 @@ GtkCairoGlue::createSimilarSurface(const int& width, const int& height)
 
   if (cairo_surface_status(surface) != CAIRO_STATUS_SUCCESS) {
     cairo_surface_destroy(surface);
-    return NULL;
+    return nullptr;
   }
   return surface;
 }
@@ -188,7 +189,7 @@ GtkCairoGlue::createMemorySurface(const int& width, const int& height)
 
   if (cairo_surface_status(surface) != CAIRO_STATUS_SUCCESS) {
     cairo_surface_destroy(surface);
-    return NULL;
+    return nullptr;
   }
   return surface;
 }
@@ -201,7 +202,7 @@ GtkCairoGlue::configure(GtkWidget *const /*widget*/,
 
     if (_image) {
       gdk_image_destroy(_image);
-      _image = 0;
+      _image = nullptr;
     }
 
     cairo_surface_t* surface = createGdkImageSurface(event->width, event->height);
diff --git a/gui/gtk/gtk_glue_gtkglext.cpp b/gui/gtk/gtk_glue_gtkglext.cpp
index fc94fb0..848ec71 100644
--- a/gui/gtk/gtk_glue_gtkglext.cpp
+++ b/gui/gtk/gtk_glue_gtkglext.cpp
@@ -41,13 +41,13 @@ GtkGlExtGlue::~GtkGlExtGlue()
 //    GNASH_REPORT_FUNCTION;
     if (_glconfig) {
         g_object_unref (G_OBJECT (_glconfig));
-        _glconfig = NULL;
+        _glconfig = nullptr;
     }
     
     GdkGLContext *glcontext = gtk_widget_get_gl_context (_drawing_area);
     if (glcontext) {
        g_object_unref (G_OBJECT (glcontext));
-       glcontext = NULL;
+       glcontext = nullptr;
     }
 }
 
@@ -94,7 +94,7 @@ GtkGlExtGlue::prepDrawingArea(GtkWidget *drawing_area)
 //    GNASH_REPORT_FUNCTION;
     _drawing_area = drawing_area;
     gtk_widget_set_gl_capability(_drawing_area, _glconfig,
-                                 NULL, TRUE, GDK_GL_RGBA_TYPE);
+                                 nullptr, TRUE, GDK_GL_RGBA_TYPE);
 }
 
 Renderer*
diff --git a/gui/gtk/gtk_glue_gtkglext.h b/gui/gtk/gtk_glue_gtkglext.h
index cb65726..3a41131 100644
--- a/gui/gtk/gtk_glue_gtkglext.h
+++ b/gui/gtk/gtk_glue_gtkglext.h
@@ -25,7 +25,6 @@
 
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
-#include <boost/scoped_array.hpp>
 
 #include <gtk/gtkgl.h>
 
diff --git a/gui/gtk/gtk_glue_ovg.cpp b/gui/gtk/gtk_glue_ovg.cpp
index df4b4e1..657f995 100644
--- a/gui/gtk/gtk_glue_ovg.cpp
+++ b/gui/gtk/gtk_glue_ovg.cpp
@@ -79,7 +79,7 @@ GtkOvgGlue::init(int /*argc*/, char ** /*argv*/[])
     bool x11 = false;
     
     // Probe to see what display devices we have that could be used.
-    boost::shared_array<renderer::GnashDevice::dtype_t> devs = probeDevices();
+    std::unique_ptr<renderer::GnashDevice::dtype_t[]> devs = probeDevices();
     if (devs) {
         int i = 0;
         while (devs[i] != renderer::GnashDevice::GNASH_NODEV) {
diff --git a/gui/gtk/gtk_glue_ovg.h b/gui/gtk/gtk_glue_ovg.h
index f8c1a1d..08f7aba 100644
--- a/gui/gtk/gtk_glue_ovg.h
+++ b/gui/gtk/gtk_glue_ovg.h
@@ -25,8 +25,7 @@
 
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include "openvg/OpenVGRenderer.h"
 
 #ifdef HAVE_VG_OPENVG_H
@@ -75,7 +74,7 @@ class GtkOvgGlue : public GtkGlue
     unsigned int        _width;
     unsigned int        _height;
 
-    boost::shared_ptr<renderer::openvg::Renderer_ovg>  _renderer;    
+    std::shared_ptr<renderer::openvg::Renderer_ovg>  _renderer;
 };
 
 } // namespace gui
diff --git a/gui/gtk/gtksup.h b/gui/gtk/gtksup.h
index 69f04b8..1cefe35 100644
--- a/gui/gtk/gtksup.h
+++ b/gui/gtk/gtksup.h
@@ -154,7 +154,7 @@ private:
 
 #ifdef USE_SWFTREE
     // Create a tree model for displaying movie info
-    GtkTreeModel* makeTreeModel(std::auto_ptr<movie_root::InfoTree> tree);
+    GtkTreeModel* makeTreeModel(const std::unique_ptr<movie_root::InfoTree>& tree);
 #endif
 
     void stopHook();
diff --git a/gui/gtk/gui_gtk.cpp b/gui/gtk/gui_gtk.cpp
index 247cab1..7f511c3 100644
--- a/gui/gtk/gui_gtk.cpp
+++ b/gui/gtk/gui_gtk.cpp
@@ -33,12 +33,12 @@
 namespace gnash {
 
 #ifdef GUI_GTK
-std::auto_ptr<Gui> createGTKGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createGTKGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-	return std::auto_ptr<Gui>(new GtkGui(windowid, scale, do_loop, r));
+	return std::unique_ptr<Gui>(new GtkGui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_GTK
-std::auto_ptr<Gui> createGTKGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createGTKGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
 	throw GnashException("Support for GTK gui was not compiled in");
 }
diff --git a/gui/gui.cpp b/gui/gui.cpp
index 2f25fb6..b248926 100644
--- a/gui/gui.cpp
+++ b/gui/gui.cpp
@@ -26,7 +26,6 @@
 
 #include <vector>
 #include <algorithm> 
-#include <boost/assign/list_of.hpp>
 
 #include "MovieClip.h"
 #include "Renderer.h"
@@ -61,7 +60,7 @@
 
 #ifndef DISABLE_REGION_UPDATES_DEBUGGING
 // a runtime check would make the { x; } block conditionally executed
-#define IF_DEBUG_REGION_UPDATES(x) { if (_showUpdatedRegions) { x } }
+#define IF_DEBUG_REGION_UPDATES(...) do { if (_showUpdatedRegions) {  __VA_ARGS__; } } while(0);
 #else
 #define IF_DEBUG_REGION_UPDATES(x) 
 #endif
@@ -111,8 +110,8 @@ Gui::Gui(RunResources& r) :
     ,fps_timer_interval(0.0)
     ,frames_dropped(0)
 #endif
-    ,_movieDef(0)
-    ,_stage(0)
+    ,_movieDef(nullptr)
+    ,_stage(nullptr)
     ,_stopped(false)
     ,_started(false)
     ,_showUpdatedRegions(false)
@@ -155,8 +154,8 @@ Gui::Gui(unsigned long xid, float scale, bool loop, RunResources& r)
     ,fps_timer_interval(0.0)
     ,frames_dropped(0)
 #endif        
-    ,_movieDef(0)
-    ,_stage(0)
+    ,_movieDef(nullptr)
+    ,_stage(nullptr)
     ,_stopped(false)
     ,_started(false)
     ,_showUpdatedRegions(false)
@@ -476,10 +475,10 @@ Gui::notifyMouseMove(int ux, int uy)
     if ( _stopped ) return;
     
     // A stage pseudopixel is user pixel / _xscale wide
-    boost::int32_t x = (ux-_xoffset) / _xscale;
+    std::int32_t x = (ux-_xoffset) / _xscale;
     
     // A stage pseudopixel is user pixel / _xscale high
-    boost::int32_t y = (uy-_yoffset) / _yscale;
+    std::int32_t y = (uy-_yoffset) / _yscale;
     
 #ifdef DEBUG_MOUSE_COORDINATES
     log_debug("mouse @ %d,%d", x, y);
@@ -806,18 +805,19 @@ Gui::display(movie_root* m)
                     float ymin = bounds.getMinY();
                     float ymax = bounds.getMaxY();
                     
-                    const std::vector<point> box = boost::assign::list_of
-                        (point(xmin, ymin))
-                        (point(xmax, ymin))
-                        (point(xmax, ymax))
-                        (point(xmin, ymax));
+                    const std::vector<point> box = {
+                        point(xmin, ymin),
+                        point(xmax, ymin),
+                        point(xmax, ymax),
+                        point(xmin, ymax)
+                    };
                     
                     _renderer->draw_poly(box, rgba(0,0,0,0), rgba(255,0,0,255),
                                          SWFMatrix(), false);
                     
                 }
             }
-            );
+        );
         
         // show frame on screen
         renderBuffer();	
@@ -984,7 +984,7 @@ Gui::advanceMovie(bool doDisplay)
     }
     
     if (_screenShotter.get() && _renderer.get()) {
-        _screenShotter->screenShot(*_renderer, _advances, doDisplay ? 0 : &dis);
+        _screenShotter->screenShot(*_renderer, _advances, doDisplay ? nullptr : &dis);
     }
     
     // Only increment advances and check for exit condition when we've
@@ -1001,7 +1001,7 @@ Gui::advanceMovie(bool doDisplay)
 }
 
 void
-Gui::setScreenShotter(std::auto_ptr<ScreenShotter> ss)
+Gui::setScreenShotter(std::unique_ptr<ScreenShotter> ss)
 {
     _screenShotter.reset(ss.release());
 }
@@ -1062,10 +1062,10 @@ Gui::setInvalidatedRegions(const InvalidatedRanges& ranges)
 
 #ifdef USE_SWFTREE
 
-std::auto_ptr<movie_root::InfoTree>
+std::unique_ptr<movie_root::InfoTree>
 Gui::getMovieInfo() const
 {
-    std::auto_ptr<movie_root::InfoTree> tr;
+    std::unique_ptr<movie_root::InfoTree> tr;
 
     if (!_stage) {
         return tr;
@@ -1148,10 +1148,10 @@ Gui::getMovieInfo() const
     _stage->gc().countCollectables(cc);
     
     const std::string lbl = "GC managed ";
-    for (GC::CollectablesCount::iterator i=cc.begin(), e=cc.end(); i!=e; ++i) {
-        const std::string& typ = i->first;
+    for (auto& countinfo : cc) {
+        const std::string& typ = countinfo.first;
         std::ostringstream ss;
-        ss << i->second;
+        ss << countinfo.second;
         firstLevelIter = tr->append_child(topIter,
                     std::make_pair(lbl + typ, ss.str()));
     }
@@ -1176,11 +1176,11 @@ Gui::fpsCounterTick()
       return;
   }
 
-  boost::uint64_t current_timer = clocktime::getTicks();
+  std::uint64_t current_timer = clocktime::getTicks();
 
   // TODO: keep fps_timer_interval in milliseconds to avoid the multiplication
   //       at each fpsCounterTick call...
-  boost::uint64_t interval_ms = (boost::uint64_t)(fps_timer_interval * 1000.0);
+  std::uint64_t interval_ms = (std::uint64_t)(fps_timer_interval * 1000.0);
 
   if (fps_counter_total==1) {
     fps_timer = current_timer;
@@ -1240,8 +1240,8 @@ Gui::fpsCounterTick()
 void
 Gui::addFlashVars(Gui::VariableMap& from)
 {
-    for (VariableMap::iterator i=from.begin(), ie=from.end(); i!=ie; ++i) {
-        _flashVars[i->first] = i->second;
+    for (auto& variable : from) {
+        _flashVars[variable.first] = variable.second;
     }
 }
 
diff --git a/gui/gui.h b/gui/gui.h
index 69ec79e..1bef998 100644
--- a/gui/gui.h
+++ b/gui/gui.h
@@ -24,10 +24,11 @@
 #endif
 
 #include <boost/intrusive_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include <string>
 #include <map>
 #include <utility>
+#include <functional>
 
 #include "snappingrange.h"  // for InvalidatedRanges
 #include "GnashKey.h"
@@ -113,7 +114,7 @@ public:
     /// Set the time in milliseconds after which the programme should exit.
     virtual void setTimeout(unsigned int timeout) = 0;
 
-    void setScreenShotter(std::auto_ptr<ScreenShotter> ss);
+    void setScreenShotter(std::unique_ptr<ScreenShotter> ss);
 
     /// \brief
     /// Create and display our window.
@@ -383,7 +384,7 @@ public:
 
 #ifdef USE_SWFTREE
     /// Return a tree containing information about the movie playing.
-    std::auto_ptr<movie_root::InfoTree> getMovieInfo() const;
+    std::unique_ptr<movie_root::InfoTree> getMovieInfo() const;
 #endif
 
     typedef std::map<std::string, std::string> VariableMap;
@@ -502,7 +503,7 @@ protected:
     unsigned int _interval;
 
     /// The handler which is called to update the client area of our window.
-    boost::shared_ptr<Renderer> _renderer;
+    std::shared_ptr<Renderer> _renderer;
 
     /// Signals that the next frame must be re-rendered completely because the
     /// window size did change.
@@ -536,7 +537,7 @@ private:
 
     struct Display;
 
-    std::map<int /* fd */, boost::function<void ()> > _fd_callbacks;
+    std::map<int /* fd */, std::function<void ()> > _fd_callbacks;
 
     /// Width of a window pixel, in stage pseudopixel units.
     float _xscale;
@@ -545,10 +546,10 @@ private:
     float _yscale;
 
     /// Window pixel X offset of stage origin
-    boost::int32_t _xoffset;
+    std::int32_t _xoffset;
 
     /// Window pixel Y offset of stage origin
-    boost::int32_t _yoffset;
+    std::int32_t _yoffset;
 
     bool display(movie_root* m);
     
@@ -561,7 +562,7 @@ private:
     // the number of calls to movie_advance()
     unsigned int fps_counter_total;
 
-    boost::uint64_t fps_timer, fps_start_timer;     
+    std::uint64_t fps_timer, fps_start_timer;
 
     ///	The time, in seconds, between prints (which also resets the fps counter).
     //
@@ -602,7 +603,7 @@ private:
     InterruptableVirtualClock _virtualClock;
     
     /// Checked on each advance for screenshot activity if it exists.
-    boost::scoped_ptr<ScreenShotter> _screenShotter;
+    std::unique_ptr<ScreenShotter> _screenShotter;
 
 #ifdef ENABLE_KEYBOARD_MOUSE_MOVEMENTS 
     int _xpointer;
@@ -614,18 +615,18 @@ private:
 
 /// Named constructors
 namespace gui {
-  std::auto_ptr<Gui> createFBGui(unsigned long xid, float scale, bool loop, RunResources& r);
+  std::unique_ptr<Gui> createFBGui(unsigned long xid, float scale, bool loop, RunResources& r);
 }
-std::auto_ptr<Gui> createGTKGui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createKDEGui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createQt4Gui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createSDLGui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createFLTKGui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createAQUAGui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createRISCOSGui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createAOS4Gui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createHaikuGui(unsigned long xid, float scale, bool loop, RunResources& r);
-std::auto_ptr<Gui> createDumpGui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createGTKGui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createKDEGui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createQt4Gui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createSDLGui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createFLTKGui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createAQUAGui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createRISCOSGui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createAOS4Gui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createHaikuGui(unsigned long xid, float scale, bool loop, RunResources& r);
+std::unique_ptr<Gui> createDumpGui(unsigned long xid, float scale, bool loop, RunResources& r);
 
  
 } // end of gnash namespace
diff --git a/gui/haiku/gui_haiku.cpp b/gui/haiku/gui_haiku.cpp
index 0793462..346adec 100644
--- a/gui/haiku/gui_haiku.cpp
+++ b/gui/haiku/gui_haiku.cpp
@@ -32,12 +32,12 @@
 namespace gnash {
 
 #ifdef GUI_HAIKU
-std::auto_ptr<Gui> createHaikuGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createHaikuGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-    return std::auto_ptr<Gui>(new HaikuGui(windowid, scale, do_loop, r));
+    return std::unique_ptr<Gui>(new HaikuGui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_HAIKU
-std::auto_ptr<Gui> createHaikuGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createHaikuGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
     throw GnashException("Support for Haiku gui was not compiled in");
 }
diff --git a/gui/haiku/haiku_agg_glue.cpp b/gui/haiku/haiku_agg_glue.cpp
index bbc2b8b..ad546fc 100644
--- a/gui/haiku/haiku_agg_glue.cpp
+++ b/gui/haiku/haiku_agg_glue.cpp
@@ -326,7 +326,7 @@ HaikuAggGlue::ViewNeeded()
 }
 
 bool
-HaikuAggGlue::prepDrawingArea(int width, int height, boost::uint32_t sdl_flags)
+HaikuAggGlue::prepDrawingArea(int width, int height, std::uint32_t sdl_flags)
 {
     (void) sdl_flags;
 
@@ -340,7 +340,7 @@ HaikuAggGlue::prepDrawingArea(int width, int height, boost::uint32_t sdl_flags)
 
     assert(_bpp % 8 == 0);
 
-    boost::uint32_t rmask, gmask, bmask, amask;
+    std::uint32_t rmask, gmask, bmask, amask;
 
     switch(_bpp) {
         case 32: // RGBA32
diff --git a/gui/haiku/haiku_agg_glue.h b/gui/haiku/haiku_agg_glue.h
index b813686..c52c373 100644
--- a/gui/haiku/haiku_agg_glue.h
+++ b/gui/haiku/haiku_agg_glue.h
@@ -20,7 +20,7 @@
 #define HAIKU_AGG_GLUE_H
 
 #include <vector>
-#include <boost/cstdint.hpp> // for boost::?int??_t 
+#include <cstdint> // for boost::?int??_t
 #include <Renderer.h>
 
 #include <SupportDefs.h>
@@ -56,8 +56,8 @@ class HaikuAggGlue
     void setInvalidatedRegions(const InvalidatedRanges& ranges);
     void ViewNoMore();
     void ViewNeeded();
-    bool prepDrawingArea(int width, int height, boost::uint32_t sdl_flags);
-    boost::uint32_t maskFlags(boost::uint32_t sdl_flags);
+    bool prepDrawingArea(int width, int height, std::uint32_t sdl_flags);
+    std::uint32_t maskFlags(std::uint32_t sdl_flags);
     void render();
     void render(int minx, int miny, int maxx, int maxy);
     void Shown();
diff --git a/gui/pythonmod/Makefile.am b/gui/pythonmod/Makefile.am
index 0b86da1..4cb6750 100644
--- a/gui/pythonmod/Makefile.am
+++ b/gui/pythonmod/Makefile.am
@@ -38,7 +38,7 @@ GNASH_INCLUDES = \
 	-I$(top_srcdir)/libdevice/vaapi \
 	-I$(top_srcdir)/libsound
 
-INCLUDES = \
+AM_CPPFLAGS = \
 	$(PYTHON_CFLAGS) \
 	$(PYGTK_CFLAGS) \
 	$(GTK2_CFLAGS) \
@@ -47,12 +47,18 @@ INCLUDES = \
 pkgpyexec_LTLIBRARIES = gnash.la
 
 GNASH_LIBS = \
-	$(top_builddir)/libmedia/libgnashmedia.la \
 	$(top_builddir)/librender/libgnashrender.la \
-	$(top_builddir)/libsound/libgnashsound.la \
 	$(top_builddir)/libcore/libgnashcore.la \
-	$(top_builddir)/libbase/libgnashbase.la \
-	$(RENDERER_LIBS)
+	$(top_builddir)/libbase/libgnashbase.la
+
+if BUILD_LIBMEDIA
+GNASH_LIBS += $(top_builddir)/libmedia/libgnashmedia.la
+endif
+if BUILD_LIBSOUND
+GNASH_LIBS += $(top_builddir)/libsound/libgnashsound.la
+endif
+
+GNASH_LIBS += $(RENDERER_LIBS)
 
 gnash_la_LDFLAGS = -module -avoid-version initgnash -export-dynamic #-no-undefined
 gnash_la_LIBADD = \
@@ -67,7 +73,7 @@ inst_HEADERS = gnash-view.h
 RENDERER_GLUE =
 if BUILD_OGL_RENDERER
 RENDERER_GLUE += $(top_srcdir)/gui/gtk/gtk_glue_gtkglext.cpp
-INCLUDES += $(GLEXT_CFLAGS)
+AM_CPPFLAGS += $(GLEXT_CFLAGS)
 gnash_la_LIBADD += $(GLEXT_LIBS)
 endif
 if BUILD_AGG_RENDERER
@@ -84,7 +90,7 @@ BUILT_SOURCES =
 endif
 
 nodist_gnash_la_SOURCES = $(BUILT_SOURCES)
-gnash_la_CPPFLAGS = $(INCLUDES) $(GNASH_INCLUDES)
+gnash_la_CPPFLAGS = $(AM_CPPFLAGS) $(GNASH_INCLUDES)
 gnash_la_SOURCES = \
 	gnashmodule.c \
 	gnash-view.cpp \
diff --git a/gui/pythonmod/gnash-view.cpp b/gui/pythonmod/gnash-view.cpp
index f1d23e5..2084839 100644
--- a/gui/pythonmod/gnash-view.cpp
+++ b/gui/pythonmod/gnash-view.cpp
@@ -41,6 +41,7 @@
 #include "Global_as.h"
 #include "NamingPolicy.h"
 #include "StreamProvider.h"
+#include "GnashFactory.h"
 
 enum
 {
@@ -55,25 +56,25 @@ struct _GnashView {
     const gchar *uri;
     guint advance_timer;
 
-    boost::shared_ptr<gnash::media::MediaHandler> media_handler;
-    boost::shared_ptr<gnash::sound::sound_handler> sound_handler;
+    std::shared_ptr<gnash::media::MediaHandler> media_handler;
+    std::shared_ptr<gnash::sound::sound_handler> sound_handler;
 
     /// Handlers (for sound etc) for a libcore run.
     //
     /// This must be kept alive for the entire lifetime of the movie_root
     /// (currently: of the Gui).
-    std::auto_ptr<gnash::RunResources> run_info;
+    std::unique_ptr<gnash::RunResources> run_info;
 
     boost::intrusive_ptr<gnash::movie_definition> movie_definition;
     gnash::Movie* movie;
-    std::auto_ptr<gnash::movie_root> stage;
-    std::auto_ptr<gnash::SystemClock> system_clock;
-    std::auto_ptr<gnash::InterruptableVirtualClock> virtual_clock;
+    std::unique_ptr<gnash::movie_root> stage;
+    std::unique_ptr<gnash::SystemClock> system_clock;
+    std::unique_ptr<gnash::InterruptableVirtualClock> virtual_clock;
 };
 
 G_DEFINE_TYPE(GnashView, gnash_view, GTK_TYPE_BIN)
 
-static GObjectClass *parent_class = NULL;
+static GObjectClass *parent_class = nullptr;
 
 static void gnash_view_class_init(GnashViewClass *gnash_view_class);
 static void gnash_view_init(GnashView *view);
@@ -97,7 +98,7 @@ static void gnash_view_load_movie(GnashView *view, const gchar *path);
 GtkWidget *
 gnash_view_new (void)
 {
-    return GTK_WIDGET(g_object_new (GNASH_TYPE_VIEW, NULL));
+    return GTK_WIDGET(g_object_new (GNASH_TYPE_VIEW, nullptr));
 }
 
 const gchar *
@@ -109,7 +110,7 @@ gnash_view_call (GnashView *view, const gchar *func_name, const gchar *input_dat
     gnash::as_value func = getMember(*getObject(view->movie), getURI(vm, func_name));
 
     if( !func.is_function() ) {
-        return NULL;
+        return nullptr;
     }
 
     gnash::as_value result;
@@ -120,7 +121,7 @@ gnash_view_call (GnashView *view, const gchar *func_name, const gchar *input_dat
         result = callMethod(getObject(view->movie), getURI(vm, func_name));
     }
     if( !result.is_string() ) {
-        return NULL;
+        return nullptr;
     }
 
     return result.to_string().c_str();
@@ -147,7 +148,7 @@ gnash_view_class_init(GnashViewClass *gnash_view_class)
 					 g_param_spec_string ("uri",
 							      "URI to movie",
 							      "URI to the SWF movie to display",
-							      NULL,
+							      nullptr,
 							      (GParamFlags)G_PARAM_READWRITE));
 }
 
@@ -162,7 +163,7 @@ gnash_view_set_property (GObject      *object,
     switch (prop_id)
     {
     case PROP_URI:
-        if(view->movie_definition.get() != NULL) {
+        if(view->movie_definition.get() != nullptr) {
             g_warning("Cannot change the movie URI once the view has been initialized.");
             return;
         }
@@ -196,7 +197,7 @@ gnash_view_init(GnashView *view)
 {
     GNASH_REPORT_FUNCTION;
 
-    view->uri = NULL;
+    view->uri = nullptr;
     view->advance_timer = 0;
 
 	g_signal_connect (GTK_WIDGET(view), "realize",
@@ -225,7 +226,7 @@ gnash_view_init(GnashView *view)
 
     view->canvas = GNASH_CANVAS(gnash_canvas_new());
     std::string nullstr;
-    gnash_canvas_setup(view->canvas, nullstr, nullstr, 0, NULL);
+    gnash_canvas_setup(view->canvas, nullstr, nullstr, 0, nullptr);
     gtk_container_add (GTK_CONTAINER (view), GTK_WIDGET(view->canvas));
     gtk_widget_show (GTK_WIDGET(view->canvas));
 
@@ -254,10 +255,10 @@ gnash_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
     widget->allocation = *allocation;
     gtk_widget_size_allocate (GTK_BIN(widget)->child, allocation);
 
-    if( view->stage.get() != NULL) {
+    if( view->stage.get() != nullptr) {
     	view->stage->setDimensions(allocation->width, allocation->height);
 
-        boost::shared_ptr<gnash::Renderer> renderer = gnash_canvas_get_renderer(view->canvas);
+        std::shared_ptr<gnash::Renderer> renderer = gnash_canvas_get_renderer(view->canvas);
         float xscale = allocation->width / view->movie_definition->get_width_pixels();
         float yscale = allocation->height / view->movie_definition->get_height_pixels();
 		renderer->set_scale(xscale, yscale);
@@ -268,7 +269,7 @@ static void
 gnash_view_size_request (GtkWidget *widget, GtkRequisition *requisition)
 {
     GnashView *view = GNASH_VIEW(widget);
-    if( view->movie_definition.get() == NULL ) {
+    if( view->movie_definition.get() == nullptr ) {
         requisition->width = 0;
         requisition->height = 0;
     } else {
@@ -284,7 +285,7 @@ gnash_view_realize_cb(GtkWidget *widget, gpointer /*user_data*/)
     GnashView *view = GNASH_VIEW(widget);
 
     // Some initializations need to happen after the widget has been realized.
-    if(view->movie_definition.get() == NULL) {
+    if(view->movie_definition.get() == nullptr) {
         gtk_widget_realize(GTK_WIDGET(view->canvas));
         gnash_view_load_movie(view, view->uri);
     }
@@ -295,7 +296,7 @@ key_press_event_cb(GtkWidget */*widget*/, GdkEventKey *event, gpointer data)
 {
     GNASH_REPORT_FUNCTION;
     GnashView *view = GNASH_VIEW(data);
-    if (view->stage.get() == NULL)
+    if (view->stage.get() == nullptr)
         return FALSE;
 
     gnash::key::code c = gdk_to_gnash_key(event->keyval);
@@ -314,7 +315,7 @@ key_release_event_cb(GtkWidget */*widget*/, GdkEventKey *event, gpointer data)
 {
     GNASH_REPORT_FUNCTION;
     GnashView *view = GNASH_VIEW(data);
-    if (view->stage.get() == NULL)
+    if (view->stage.get() == nullptr)
         return FALSE;
 
     gnash::key::code c = gdk_to_gnash_key(event->keyval);
@@ -333,7 +334,7 @@ button_press_event_cb(GtkWidget */*widget*/, GdkEventButton *event, gpointer dat
 {
     GNASH_REPORT_FUNCTION;
     GnashView *view = GNASH_VIEW(data);
-    if (view->stage.get() == NULL)
+    if (view->stage.get() == nullptr)
         return FALSE;
 
     /// Double- and triple-clicks should not send an extra event!
@@ -353,7 +354,7 @@ button_release_event_cb(GtkWidget* /*widget*/, GdkEventButton* /*event*/,
 {
     GNASH_REPORT_FUNCTION;
     GnashView *view = GNASH_VIEW(data);
-    if (view->stage.get() == NULL)
+    if (view->stage.get() == nullptr)
         return FALSE;
 
     view->stage->mouseClick(false);
@@ -372,10 +373,10 @@ motion_notify_event_cb(GtkWidget */*widget*/, GdkEventMotion *event, gpointer da
     float yscale = widget->allocation.height / view->movie_definition->get_height_pixels();
 
 	// A stage pseudopixel is user pixel / _xscale wide
-	boost::int32_t x = event->x / xscale;
+	std::int32_t x = event->x / xscale;
 
 	// A stage pseudopixel is user pixel / _yscale high
-	boost::int32_t y = event->y / yscale;
+	std::int32_t y = event->y / yscale;
 
 	if ( view->stage->mouseMoved(x, y) )
 	{
@@ -390,23 +391,23 @@ motion_notify_event_cb(GtkWidget */*widget*/, GdkEventMotion *event, gpointer da
 		if ( activeEntity->isSelectableTextField() )
 		{
 		    GdkCursor *gdkcursor = gdk_cursor_new(GDK_XTERM);
-		    gdk_window_set_cursor (widget->window, NULL);
+		    gdk_window_set_cursor (widget->window, nullptr);
             gdk_cursor_unref(gdkcursor);
 		}
 		else if ( activeEntity->allowHandCursor() )
 		{
 		    GdkCursor *gdkcursor = gdk_cursor_new(GDK_HAND2);
-		    gdk_window_set_cursor (widget->window, NULL);
+		    gdk_window_set_cursor (widget->window, nullptr);
             gdk_cursor_unref(gdkcursor);
 		}
 		else
 		{
-		    gdk_window_set_cursor (widget->window, NULL);
+		    gdk_window_set_cursor (widget->window, nullptr);
 		}
 	}
 	else
 	{
-	    gdk_window_set_cursor (widget->window, NULL);
+	    gdk_window_set_cursor (widget->window, nullptr);
 	}
 
     return TRUE;
@@ -422,9 +423,9 @@ gnash_view_load_movie(GnashView *view, const gchar *uri)
     view->run_info.reset(new gnash::RunResources());
     view->run_info->setSoundHandler(view->sound_handler);
 
-    std::auto_ptr<gnash::NamingPolicy> np(new gnash::IncrementalRename(url));
-    boost::shared_ptr<gnash::StreamProvider> sp(
-	    new gnash::StreamProvider(url, url, np));
+    std::unique_ptr<gnash::NamingPolicy> np(new gnash::IncrementalRename(url));
+    std::shared_ptr<gnash::StreamProvider> sp(
+	    new gnash::StreamProvider(url, url, std::move(np)));
     view->run_info->setStreamProvider(sp);
 
     gnash::RcInitFile& rcfile = gnash::RcInitFile::getDefaultInstance();
@@ -445,7 +446,7 @@ gnash_view_load_movie(GnashView *view, const gchar *uri)
     view->movie_definition = gnash::MovieFactory::makeMovie(url,
             *view->run_info, url.str().c_str(), false);
 
-    g_return_if_fail(view->movie_definition.get() != NULL);
+    g_return_if_fail(view->movie_definition.get() != nullptr);
 
     // NOTE: it's important that _systemClock is constructed
     //       before and destroyed after _virtualClock !
@@ -456,7 +457,7 @@ gnash_view_load_movie(GnashView *view, const gchar *uri)
     view->movie_definition->completeLoad();
 
     view->advance_timer = g_timeout_add_full(G_PRIORITY_LOW, 10,
-            (GSourceFunc)gnash_view_advance_movie, view, NULL);
+            (GSourceFunc)gnash_view_advance_movie, view, nullptr);
 
     gtk_widget_queue_resize (GTK_WIDGET(view));
 
@@ -497,9 +498,9 @@ gnash_view_display(GnashView *view)
     gnash::InvalidatedRanges changed_ranges;
     changed_ranges.setWorld();
 
-    boost::shared_ptr<gnash::Renderer> renderer = gnash_canvas_get_renderer(view->canvas);
+    std::shared_ptr<gnash::Renderer> renderer = gnash_canvas_get_renderer(view->canvas);
     renderer->set_invalidated_regions(changed_ranges);
-    gdk_window_invalidate_rect(GTK_WIDGET(view->canvas)->window, NULL, false);
+    gdk_window_invalidate_rect(GTK_WIDGET(view->canvas)->window, nullptr, false);
 
     gnash_canvas_before_rendering(view->canvas, view->stage.get());
 	view->stage->display();
diff --git a/gui/qt/GuiQt4.cpp b/gui/qt/GuiQt4.cpp
index 92b27e7..ea0e2dd 100644
--- a/gui/qt/GuiQt4.cpp
+++ b/gui/qt/GuiQt4.cpp
@@ -32,12 +32,12 @@
 namespace gnash {
 
 #ifdef GUI_QT4
-std::auto_ptr<Gui> createQt4Gui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createQt4Gui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-	return std::auto_ptr<Gui>(new Qt4Gui(windowid, scale, do_loop, r));
+	return std::unique_ptr<Gui>(new Qt4Gui(windowid, scale, do_loop, r));
 }
 #else 
-std::auto_ptr<Gui> createQt4Gui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createQt4Gui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
 	throw GnashException("Support for QT4 gui was not compiled in");
 }
diff --git a/gui/qt/Qt4Glue.h b/gui/qt/Qt4Glue.h
index cd08bea..13d8145 100644
--- a/gui/qt/Qt4Glue.h
+++ b/gui/qt/Qt4Glue.h
@@ -82,7 +82,7 @@ private:
 class Qt4Glue
 {
   public:
-    Qt4Glue() : _drawing_area(NULL) {}
+    Qt4Glue() : _drawing_area(nullptr) {}
     virtual ~Qt4Glue() { }
     virtual bool init(int argc, char **argv[]) = 0;
 
diff --git a/gui/qt/Qt4GlueAgg.cpp b/gui/qt/Qt4GlueAgg.cpp
index cc0348e..54ecddf 100644
--- a/gui/qt/Qt4GlueAgg.cpp
+++ b/gui/qt/Qt4GlueAgg.cpp
@@ -36,7 +36,7 @@ Qt4AggGlue::Qt4AggGlue()
 :
   _width(0),
   _height(0),
-  _renderer(0)
+  _renderer(nullptr)
 {
 }
 
diff --git a/gui/qt/Qt4GlueAgg.h b/gui/qt/Qt4GlueAgg.h
index 688f799..92832bf 100644
--- a/gui/qt/Qt4GlueAgg.h
+++ b/gui/qt/Qt4GlueAgg.h
@@ -28,7 +28,6 @@
 
 #include <memory>
 #include <QImage>
-#include <boost/scoped_array.hpp>
 #include <QPainter>
 #include "snappingrange.h"
 
@@ -54,10 +53,10 @@ class Qt4AggGlue : public Qt4Glue
   private:
     int _width;
     int _height;
-    boost::scoped_array<unsigned char> _offscreenbuf;
+    std::unique_ptr<unsigned char[]> _offscreenbuf;
     Renderer* _renderer; // We don't own this pointer.
-    std::auto_ptr<QImage> _image;
-    std::auto_ptr<QPainter> _painter;
+    std::unique_ptr<QImage> _image;
+    std::unique_ptr<QPainter> _painter;
 };
 
 
diff --git a/gui/qt/Qt4GlueCairo.cpp b/gui/qt/Qt4GlueCairo.cpp
index ea43be4..47edffa 100644
--- a/gui/qt/Qt4GlueCairo.cpp
+++ b/gui/qt/Qt4GlueCairo.cpp
@@ -35,10 +35,9 @@ Qt4CairoGlue::Qt4CairoGlue()
 :
   _width(0),
   _height(0),
-  _offscreenbuf(0),
-  _renderer(0),
-  _cairo_handle(0),
-  _cairo_surface(0)
+  _renderer(nullptr),
+  _cairo_handle(nullptr),
+  _cairo_surface(nullptr)
 {
 }
 
diff --git a/gui/qt/Qt4GlueCairo.h b/gui/qt/Qt4GlueCairo.h
index 825b537..4121b98 100644
--- a/gui/qt/Qt4GlueCairo.h
+++ b/gui/qt/Qt4GlueCairo.h
@@ -26,9 +26,8 @@
 
 #include "Qt4Glue.h"
 
-#include <memory>        // for auto_ptr
+#include <memory>        // for unique_ptr
 #include <QImage>
-#include <boost/scoped_array.hpp>
 #include <QPainter>
 #include "snappingrange.h"
 
@@ -56,10 +55,10 @@ class Qt4CairoGlue : public Qt4Glue
   private:
     int _width;
     int _height;
-    boost::scoped_array<unsigned char> _offscreenbuf;
+    std::unique_ptr<unsigned char[]> _offscreenbuf;
     Renderer* _renderer; // We don't own this pointer.
-    std::auto_ptr<QImage> _image;
-    std::auto_ptr<QPainter> _painter;
+    std::unique_ptr<QImage> _image;
+    std::unique_ptr<QPainter> _painter;
 
     cairo_t         *_cairo_handle;
     cairo_surface_t *_cairo_surface;
diff --git a/gui/qt/Qt4GlueOgl.cpp b/gui/qt/Qt4GlueOgl.cpp
index eeb0a2f..6cf375b 100644
--- a/gui/qt/Qt4GlueOgl.cpp
+++ b/gui/qt/Qt4GlueOgl.cpp
@@ -35,10 +35,7 @@ namespace gnash
 {
 
 Qt4OglGlue::Qt4OglGlue()
-:
-  _width(0),
-  _height(0),
-  _renderer(0)
+: _renderer(nullptr)
 {
 }
 
diff --git a/gui/qt/Qt4GlueOgl.h b/gui/qt/Qt4GlueOgl.h
index 2e7c1f6..3421fe9 100644
--- a/gui/qt/Qt4GlueOgl.h
+++ b/gui/qt/Qt4GlueOgl.h
@@ -26,7 +26,6 @@
 
 #include "Qt4Glue.h"
 
-#include <boost/scoped_array.hpp>
 #include "snappingrange.h"
 
 class QRect;
@@ -48,8 +47,6 @@ class Qt4OglGlue : public Qt4Glue
     void render(const QRect& updateRect);
 
   private:
-    int _width;
-    int _height;
     Renderer* _renderer; // We don't own this pointer.
 };
 
diff --git a/gui/qt/Qt4Gui.cpp b/gui/qt/Qt4Gui.cpp
index b90dc4d..8c94882 100644
--- a/gui/qt/Qt4Gui.cpp
+++ b/gui/qt/Qt4Gui.cpp
@@ -23,7 +23,6 @@
 #endif
 
 #include <map>
-#include <boost/assign/list_inserter.hpp>
 
 #include <QMainWindow>
 #include <QX11Info>
@@ -83,8 +82,23 @@ Qt4Gui::Qt4Gui(unsigned long xid, float scale, bool loop, RunResources& r)
     :
     Gui(xid, scale, loop, r),
     _numArgs(0),
+    _embedWidget(NULL),
+    _drawingWidget(NULL),
     _interval(0),
     _advanceTimer(0)
+    , fileMenu(NULL)
+    , propertiesAction(NULL)
+    , quitAction(NULL)
+    , editMenu(NULL)
+    , preferencesAction(NULL)
+    , movieControlMenu(NULL)
+    , playAction(NULL)
+    , pauseAction(NULL)
+    , stopAction(NULL)
+    , restartAction(NULL)
+    , viewMenu(NULL)
+    , refreshAction(NULL)
+    , fullscreenAction(NULL)
 {
 }
 
@@ -478,7 +492,7 @@ Qt4Gui::showProperties()
             SIGNAL(clicked()), SLOT(close()));
 
 #ifdef USE_SWFTREE
-    std::auto_ptr<movie_root::InfoTree> infoptr = getMovieInfo();
+    std::unique_ptr<movie_root::InfoTree> infoptr = getMovieInfo();
     const movie_root::InfoTree& info = *infoptr;
 
     QTreeWidget *tree = new QTreeWidget();
@@ -663,7 +677,7 @@ Qt4Gui::setupMenus()
 void
 Qt4Gui::createMainMenu()
 {
-    std::auto_ptr<QMenuBar> mainMenu(new QMenuBar);
+    std::unique_ptr<QMenuBar> mainMenu(new QMenuBar);
 
     // Set up the menu bar.
     mainMenu->addMenu(fileMenu);
@@ -684,38 +698,38 @@ Qt4Gui::setupKeyMap()
     // be harmful to do it more.
     assert (_keyMap.empty());
     
-    boost::assign::insert(_keyMap)
-    (Qt::Key_Backspace, gnash::key::BACKSPACE)
-    (Qt::Key_Tab, gnash::key::TAB)
-    (Qt::Key_Clear, gnash::key::CLEAR)
-    (Qt::Key_Return, gnash::key::ENTER)
-    (Qt::Key_Enter, gnash::key::ENTER)
-    (Qt::Key_Shift, gnash::key::SHIFT)
-    (Qt::Key_Control, gnash::key::CONTROL)
-    (Qt::Key_Alt, gnash::key::ALT)
-    (Qt::Key_CapsLock, gnash::key::CAPSLOCK)
-    (Qt::Key_Escape, gnash::key::ESCAPE)
-    (Qt::Key_Space, gnash::key::SPACE)
-    (Qt::Key_PageDown, gnash::key::PGDN)
-    (Qt::Key_PageUp, gnash::key::PGUP)
-    (Qt::Key_Home, gnash::key::HOME)
-    (Qt::Key_End, gnash::key::END)
-    (Qt::Key_Left, gnash::key::LEFT)
-    (Qt::Key_Up, gnash::key::UP)
-    (Qt::Key_Right, gnash::key::RIGHT)
-    (Qt::Key_Down, gnash::key::DOWN)
-    (Qt::Key_Insert, gnash::key::INSERT)
-    (Qt::Key_Delete, gnash::key::DELETEKEY)
-    (Qt::Key_Help, gnash::key::HELP)
-    (Qt::Key_NumLock, gnash::key::NUM_LOCK)
-    (Qt::Key_Semicolon, gnash::key::SEMICOLON)
-    (Qt::Key_Equal, gnash::key::EQUALS)
-    (Qt::Key_Minus, gnash::key::MINUS)
-    (Qt::Key_Slash, gnash::key::SLASH)
-    (Qt::Key_BracketLeft, gnash::key::LEFT_BRACKET)
-    (Qt::Key_Backslash, gnash::key::BACKSLASH)
-    (Qt::Key_BracketRight, gnash::key::RIGHT_BRACKET)
-    (Qt::Key_QuoteDbl, gnash::key::DOUBLE_QUOTE);
+    _keyMap = {
+    {Qt::Key_Backspace, gnash::key::BACKSPACE},
+    {Qt::Key_Tab, gnash::key::TAB},
+    {Qt::Key_Clear, gnash::key::CLEAR},
+    {Qt::Key_Return, gnash::key::ENTER},
+    {Qt::Key_Enter, gnash::key::ENTER},
+    {Qt::Key_Shift, gnash::key::SHIFT},
+    {Qt::Key_Control, gnash::key::CONTROL},
+    {Qt::Key_Alt, gnash::key::ALT},
+    {Qt::Key_CapsLock, gnash::key::CAPSLOCK},
+    {Qt::Key_Escape, gnash::key::ESCAPE},
+    {Qt::Key_Space, gnash::key::SPACE},
+    {Qt::Key_PageDown, gnash::key::PGDN},
+    {Qt::Key_PageUp, gnash::key::PGUP},
+    {Qt::Key_Home, gnash::key::HOME},
+    {Qt::Key_End, gnash::key::END},
+    {Qt::Key_Left, gnash::key::LEFT},
+    {Qt::Key_Up, gnash::key::UP},
+    {Qt::Key_Right, gnash::key::RIGHT},
+    {Qt::Key_Down, gnash::key::DOWN},
+    {Qt::Key_Insert, gnash::key::INSERT},
+    {Qt::Key_Delete, gnash::key::DELETEKEY},
+    {Qt::Key_Help, gnash::key::HELP},
+    {Qt::Key_NumLock, gnash::key::NUM_LOCK},
+    {Qt::Key_Semicolon, gnash::key::SEMICOLON},
+    {Qt::Key_Equal, gnash::key::EQUALS},
+    {Qt::Key_Minus, gnash::key::MINUS},
+    {Qt::Key_Slash, gnash::key::SLASH},
+    {Qt::Key_BracketLeft, gnash::key::LEFT_BRACKET},
+    {Qt::Key_Backslash, gnash::key::BACKSLASH},
+    {Qt::Key_BracketRight, gnash::key::RIGHT_BRACKET},
+    {Qt::Key_QuoteDbl, gnash::key::DOUBLE_QUOTE} };
 }
 
 void
diff --git a/gui/qt/Qt4Gui.h b/gui/qt/Qt4Gui.h
index 6d18017..56985a6 100644
--- a/gui/qt/Qt4Gui.h
+++ b/gui/qt/Qt4Gui.h
@@ -142,7 +142,7 @@ private:
  
     /// The main application, which should destroy everything
     /// left on closing.
-    std::auto_ptr<QApplication>  _application;
+    std::unique_ptr<QApplication>  _application;
     
     /// The widget that is used for embedding between processes.
     EmbedWidget* _embedWidget;
@@ -154,10 +154,10 @@ private:
     DrawingWidget* _drawingWidget;
     
     /// Takes care of painting onto the widget.
-    std::auto_ptr<Qt4Glue> _glue;
+    std::unique_ptr<Qt4Glue> _glue;
     
     /// The main application window.
-    std::auto_ptr<QMainWindow> _window;
+    std::unique_ptr<QMainWindow> _window;
 
     /// A map for Qt::Key values that don't easily
     /// map onto Gnash ones.
@@ -222,7 +222,6 @@ private:
     QCheckBox* _actionDumpToggle;
     QCheckBox* _malformedSWFToggle;
     QCheckBox* _ASCodingErrorToggle;
-    QCheckBox* _lcTraceToggle;
 
     // Security tab widgets
     QCheckBox* _localHostToggle;
diff --git a/gui/qt/gui_kde.cpp b/gui/qt/gui_kde.cpp
index 7bd22ae..f0a50e9 100644
--- a/gui/qt/gui_kde.cpp
+++ b/gui/qt/gui_kde.cpp
@@ -32,12 +32,12 @@
 namespace gnash {
 
 #ifdef GUI_KDE3
-std::auto_ptr<Gui> createKDEGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createKDEGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-	return std::auto_ptr<Gui>(new KdeGui(windowid, scale, do_loop, r));
+	return std::unique_ptr<Gui>(new KdeGui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_KDE3
-std::auto_ptr<Gui> createKDEGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createKDEGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
 	throw GnashException("Support for KDE gui was not compiled in");
 }
diff --git a/gui/qt/kde_glue_agg.h b/gui/qt/kde_glue_agg.h
index 7525524..65727ce 100644
--- a/gui/qt/kde_glue_agg.h
+++ b/gui/qt/kde_glue_agg.h
@@ -29,7 +29,6 @@
 #include "kde_glue.h"
 #include <vector>
 #include <memory>
-#include <boost/scoped_array.hpp>
 
 
 namespace gnash
@@ -52,11 +51,11 @@ class KdeAggGlue : public KdeGlue
   private:
     int _width;
     int _height;
-    boost::scoped_array<unsigned char> _offscreenbuf;
+    std::unique_ptr<unsigned char[]> _offscreenbuf;
     Renderer* _renderer; // We don't own this pointer.
     geometry::Range2d<int> _validbounds;
     std::vector< geometry::Range2d<int> > _drawbounds;
-    std::auto_ptr<QImage> _qimage;
+    std::unique_ptr<QImage> _qimage;
 };
 
 
diff --git a/gui/qt/kdesup.h b/gui/qt/kdesup.h
index 0debf6d..aaceb5c 100644
--- a/gui/qt/kdesup.h
+++ b/gui/qt/kdesup.h
@@ -102,8 +102,8 @@ public:
     void resize(int width, int height);
     void quitUI();
  private:
-    std::auto_ptr<QApplication>  _qapp;
-    std::auto_ptr<qwidget>       _qwidget;
+    std::unique_ptr<QApplication>  _qapp;
+    std::unique_ptr<qwidget>       _qwidget;
     GLUE                         _glue;    
 
     gnash::key::code qtToGnashKey(QKeyEvent *event);
diff --git a/gui/sdl/gui_sdl.cpp b/gui/sdl/gui_sdl.cpp
index 3183c13..9bfa6df 100644
--- a/gui/sdl/gui_sdl.cpp
+++ b/gui/sdl/gui_sdl.cpp
@@ -32,12 +32,12 @@
 namespace gnash {
 
 #ifdef GUI_SDL
-std::auto_ptr<Gui> createSDLGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
+std::unique_ptr<Gui> createSDLGui(unsigned long windowid, float scale, bool do_loop, RunResources& r)
 {
-	return std::auto_ptr<Gui>(new SDLGui(windowid, scale, do_loop, r));
+	return std::unique_ptr<Gui>(new SDLGui(windowid, scale, do_loop, r));
 }
 #else // ! GUI_SDL
-std::auto_ptr<Gui> createSDLGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
+std::unique_ptr<Gui> createSDLGui(unsigned long , float, bool, RunResourcesfloat , bool , unsigned int )
 {
 	throw GnashException("Support for SDL gui was not compiled in");
 }
diff --git a/gui/sdl/sdl.cpp b/gui/sdl/sdl.cpp
index 309f599..78f66ed 100644
--- a/gui/sdl/sdl.cpp
+++ b/gui/sdl/sdl.cpp
@@ -177,7 +177,7 @@ SDLGui::createWindow(const char *title, int width, int height,
     _width = width;
     _height = height;
 
-    boost::uint32_t sdl_flags = 0;
+    std::uint32_t sdl_flags = 0;
 
     if (!_core_trap) {
         sdl_flags |= SDL_INIT_NOPARACHUTE;
diff --git a/gui/sdl/sdl_agg_glue.cpp b/gui/sdl/sdl_agg_glue.cpp
index df37caa..0142cf1 100644
--- a/gui/sdl/sdl_agg_glue.cpp
+++ b/gui/sdl/sdl_agg_glue.cpp
@@ -32,10 +32,10 @@ namespace gnash
 
 SdlAggGlue::SdlAggGlue()
 	:
-_sdl_surface(NULL),
-_offscreenbuf(NULL),
-_screen(NULL),
-_agg_renderer(NULL)
+_sdl_surface(nullptr),
+_offscreenbuf(nullptr),
+_screen(nullptr),
+_agg_renderer(nullptr)
 {
 //    GNASH_REPORT_FUNCTION;
 }
@@ -83,7 +83,7 @@ SdlAggGlue::createRenderHandler(int bpp)
 
 
 bool
-SdlAggGlue::prepDrawingArea(int width, int height, boost::uint32_t sdl_flags)
+SdlAggGlue::prepDrawingArea(int width, int height, std::uint32_t sdl_flags)
 {
     int depth_bytes = _bpp / 8;  // TODO: <Udo> is this correct? Gives 1 for 15 bit modes!
 
@@ -98,7 +98,7 @@ SdlAggGlue::prepDrawingArea(int width, int height, boost::uint32_t sdl_flags)
 
     int stride = width * depth_bytes;
 
-    boost::uint32_t rmask, gmask, bmask, amask;
+    std::uint32_t rmask, gmask, bmask, amask;
 
     switch(_bpp) {
       case 32: // RGBA32
@@ -191,7 +191,7 @@ SdlAggGlue::render(int minx, int miny, int maxx, int maxy)
         static_cast<Uint16>(maxx - minx),
         static_cast<Uint16>(maxy - miny)};
     SDL_SetClipRect(_screen, &clip);
-    SDL_BlitSurface(_sdl_surface, 0, _screen, 0);
+    SDL_BlitSurface(_sdl_surface, nullptr, _screen, nullptr);
     SDL_UpdateRect(_screen, clip.x, clip.y, clip.w, clip.h);
 }
 
diff --git a/gui/sdl/sdl_agg_glue.h b/gui/sdl/sdl_agg_glue.h
index ea2195a..8f2a745 100644
--- a/gui/sdl/sdl_agg_glue.h
+++ b/gui/sdl/sdl_agg_glue.h
@@ -20,7 +20,7 @@
 
 #include <vector>
 #include <SDL.h>
-#include <boost/cstdint.hpp> // for boost::?int??_t 
+#include <cstdint> // for boost::?int??_t
 
 namespace gnash
 {
@@ -34,8 +34,8 @@ class SdlAggGlue : public SdlGlue
     bool init(int argc, char **argv[]);
     Renderer* createRenderHandler(int depth);
     void setInvalidatedRegions(const InvalidatedRanges& ranges);
-    bool prepDrawingArea(int width, int height, boost::uint32_t sdl_flags);
-    boost::uint32_t maskFlags(boost::uint32_t sdl_flags);
+    bool prepDrawingArea(int width, int height, std::uint32_t sdl_flags);
+    std::uint32_t maskFlags(std::uint32_t sdl_flags);
     void render();
     void render(int minx, int miny, int maxx, int maxy);
   private:
diff --git a/gui/sdl/sdl_cairo_glue.cpp b/gui/sdl/sdl_cairo_glue.cpp
index 5007bb7..332cea8 100644
--- a/gui/sdl/sdl_cairo_glue.cpp
+++ b/gui/sdl/sdl_cairo_glue.cpp
@@ -27,6 +27,12 @@ namespace gnash
 {
 
 SdlCairoGlue::SdlCairoGlue()
+: _cairo_surface(nullptr)
+  , _cairo_handle(nullptr)
+  , _sdl_surface(nullptr)
+  , _render_image(nullptr)
+  , _screen(nullptr)
+  , _renderer(nullptr)
 {
 //    GNASH_REPORT_FUNCTION;
 }
@@ -66,7 +72,7 @@ SdlCairoGlue::setInvalidatedRegions(const InvalidatedRanges& /*ranges*/)
 }
 
 bool
-SdlCairoGlue::prepDrawingArea(int width, int height, boost::uint32_t sdl_flags)
+SdlCairoGlue::prepDrawingArea(int width, int height, std::uint32_t sdl_flags)
 {
     _screen = SDL_SetVideoMode(width, height, _bpp, sdl_flags | SDL_SWSURFACE);
 
@@ -88,7 +94,7 @@ SdlCairoGlue::prepDrawingArea(int width, int height, boost::uint32_t sdl_flags)
 
     renderer::cairo::set_context(_renderer, _cairo_handle);
 
-    boost::uint32_t rmask, gmask, bmask, amask;
+    std::uint32_t rmask, gmask, bmask, amask;
 
     rmask = 0x00ff0000;
     gmask = 0x0000ff00;
@@ -110,7 +116,7 @@ SdlCairoGlue::render()
     /*Fill the background in purple so we can see the alpha blend */
     //SDL_FillRect (_screen, NULL, SDL_MapRGB(_screen->format,255,0,255));
 
-    SDL_BlitSurface(_sdl_surface, NULL, _screen, NULL);
+    SDL_BlitSurface(_sdl_surface, nullptr, _screen, nullptr);
 
     //cairo_surface_write_to_png (_cairo_surface, "/tmp/gnash.png");
 
diff --git a/gui/sdl/sdl_cairo_glue.h b/gui/sdl/sdl_cairo_glue.h
index ba46a82..ed267b7 100644
--- a/gui/sdl/sdl_cairo_glue.h
+++ b/gui/sdl/sdl_cairo_glue.h
@@ -38,8 +38,8 @@ class SdlCairoGlue : public SdlGlue
     bool init(int argc, char **argv[]);
     Renderer* createRenderHandler( int depth);
     void setInvalidatedRegions(const InvalidatedRanges& ranges);
-    bool prepDrawingArea(int width, int height, boost::uint32_t sdl_flags);
-    boost::uint32_t maskFlags(boost::uint32_t sdl_flags);
+    bool prepDrawingArea(int width, int height, std::uint32_t sdl_flags);
+    std::uint32_t maskFlags(std::uint32_t sdl_flags);
     void render();
   private:
     cairo_surface_t *_cairo_surface;
diff --git a/gui/sdl/sdl_glue.h b/gui/sdl/sdl_glue.h
index b842508..be6dc59 100644
--- a/gui/sdl/sdl_glue.h
+++ b/gui/sdl/sdl_glue.h
@@ -18,7 +18,7 @@
 
 #include "gui.h"
 
-#include <boost/cstdint.hpp> // for boost::?int??_t 
+#include <cstdint> // for boost::?int??_t
 
 namespace gnash {
 
@@ -29,7 +29,7 @@ class SdlGlue
     virtual bool init(int argc, char **argv[]) = 0;
     
     virtual void setInvalidatedRegions(const InvalidatedRanges& ranges) = 0;
-    virtual bool prepDrawingArea(int width, int height, boost::uint32_t sdl_flags) = 0;
+    virtual bool prepDrawingArea(int width, int height, std::uint32_t sdl_flags) = 0;
     virtual Renderer* createRenderHandler(int depth) = 0;
     virtual void render() = 0;
   protected:
diff --git a/gui/sdl/sdl_ogl_glue.cpp b/gui/sdl/sdl_ogl_glue.cpp
index 9aad232..ab93b42 100644
--- a/gui/sdl/sdl_ogl_glue.cpp
+++ b/gui/sdl/sdl_ogl_glue.cpp
@@ -67,7 +67,7 @@ SdlOglGlue::setInvalidatedRegions(const InvalidatedRanges& /*ranges*/)
 }
 
 bool
-SdlOglGlue::prepDrawingArea(int width, int height, boost::uint32_t sdl_flags)
+SdlOglGlue::prepDrawingArea(int width, int height, std::uint32_t sdl_flags)
 {
     if (_bpp == 16) {
       // 16-bit color, surface creation is likely to succeed.
diff --git a/gui/sdl/sdl_ogl_glue.h b/gui/sdl/sdl_ogl_glue.h
index 8fc2519..21733d8 100644
--- a/gui/sdl/sdl_ogl_glue.h
+++ b/gui/sdl/sdl_ogl_glue.h
@@ -31,7 +31,7 @@ class SdlOglGlue : public SdlGlue
     bool init(int argc, char **argv[]);
     Renderer* createRenderHandler( int depth);
     void setInvalidatedRegions(const InvalidatedRanges& ranges);
-    bool prepDrawingArea(int width, int height, boost::uint32_t sdl_flags);
+    bool prepDrawingArea(int width, int height, std::uint32_t sdl_flags);
     void render();
 };
 
diff --git a/libbase/AMF.cpp b/libbase/AMF.cpp
index 803969d..4d2bac4 100644
--- a/libbase/AMF.cpp
+++ b/libbase/AMF.cpp
@@ -47,7 +47,7 @@ namespace {
 }
 
 bool
-readBoolean(const boost::uint8_t*& pos, const boost::uint8_t* _end)
+readBoolean(const std::uint8_t*& pos, const std::uint8_t* _end)
 {
     if (pos == _end) {
         throw AMFException("Read past _end of buffer for boolean type");
@@ -62,7 +62,7 @@ readBoolean(const boost::uint8_t*& pos, const boost::uint8_t* _end)
 }
 
 double
-readNumber(const boost::uint8_t*& pos, const boost::uint8_t* end)
+readNumber(const std::uint8_t*& pos, const std::uint8_t* end)
 {
 
     if (end - pos < 8) {
@@ -84,13 +84,13 @@ readNumber(const boost::uint8_t*& pos, const boost::uint8_t* end)
 }
 
 std::string
-readString(const boost::uint8_t*& pos, const boost::uint8_t* end)
+readString(const std::uint8_t*& pos, const std::uint8_t* end)
 {
     if (end - pos < 2) {
         throw AMFException(_("Read past _end of buffer for string length"));
     }
 
-    const boost::uint16_t si = readNetworkShort(pos);
+    const std::uint16_t si = readNetworkShort(pos);
     pos += 2;
 
     if (end - pos < si) {
@@ -106,15 +106,15 @@ readString(const boost::uint8_t*& pos, const boost::uint8_t* end)
 }
 
 std::string
-readLongString(const boost::uint8_t*& pos, const boost::uint8_t* end)
+readLongString(const std::uint8_t*& pos, const std::uint8_t* end)
 {
     if (end - pos < 4) {
         throw AMFException("Read past _end of buffer for long string length");
     }
 
-    const boost::uint32_t si = readNetworkLong(pos);
+    const std::uint32_t si = readNetworkLong(pos);
     pos += 4;
-    if (static_cast<boost::uint32_t>(end - pos) < si) {
+    if (static_cast<std::uint32_t>(end - pos) < si) {
         throw AMFException("Read past _end of buffer for long string type");
     }
 
@@ -185,10 +185,10 @@ void
 swapBytes(void* word, size_t size)
 {
     union {
-        boost::uint16_t s;
+        std::uint16_t s;
         struct {
-             boost::uint8_t c0;
-             boost::uint8_t c1;
+             std::uint8_t c0;
+             std::uint8_t c1;
         } c;
     } u;
        
@@ -200,7 +200,7 @@ swapBytes(void* word, size_t size)
 
     // Little-endian machine: byte-swap the word
     // A conveniently-typed pointer to the source data
-    boost::uint8_t *x = static_cast<boost::uint8_t *>(word);
+    std::uint8_t *x = static_cast<std::uint8_t *>(word);
 
     // Handles odd as well as even counts of bytes
     std::reverse(x, x + size);
diff --git a/libbase/AMF.h b/libbase/AMF.h
index e1ec5b2..616a690 100644
--- a/libbase/AMF.h
+++ b/libbase/AMF.h
@@ -24,7 +24,7 @@
 #define GNASH_AMF_H
 
 #include <string>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "dsodefs.h"
 #include "GnashException.h"
@@ -82,8 +82,8 @@ public:
 /// be determined from the buffer.
 //
 /// This function will throw an AMFException if it encounters ill-formed AMF.
-DSOEXPORT double readNumber(const boost::uint8_t*& pos,
-        const boost::uint8_t* end);
+DSOEXPORT double readNumber(const std::uint8_t*& pos,
+        const std::uint8_t* end);
 
 /// Read a boolean value from the buffer.
 //
@@ -91,8 +91,8 @@ DSOEXPORT double readNumber(const boost::uint8_t*& pos,
 /// be determined from the buffer.
 //
 /// This function will throw an AMFException if it encounters ill-formed AMF.
-DSOEXPORT bool readBoolean(const boost::uint8_t*& pos,
-        const boost::uint8_t* end);
+DSOEXPORT bool readBoolean(const std::uint8_t*& pos,
+        const std::uint8_t* end);
 
 /// Read a string value from the buffer.
 //
@@ -100,8 +100,8 @@ DSOEXPORT bool readBoolean(const boost::uint8_t*& pos,
 /// be determined from the buffer.
 //
 /// This function will throw an AMFException if it encounters ill-formed AMF.
-DSOEXPORT std::string readString(const boost::uint8_t*& pos,
-        const boost::uint8_t* end);
+DSOEXPORT std::string readString(const std::uint8_t*& pos,
+        const std::uint8_t* end);
 
 /// Read a long string value from the buffer.
 //
@@ -109,26 +109,26 @@ DSOEXPORT std::string readString(const boost::uint8_t*& pos,
 /// be determined from the buffer.
 //
 /// This function will throw an AMFException if it encounters ill-formed AMF.
-DSOEXPORT std::string readLongString(const boost::uint8_t*& pos,
-        const boost::uint8_t* end);
+DSOEXPORT std::string readLongString(const std::uint8_t*& pos,
+        const std::uint8_t* end);
 
 /// Read an unsigned 16-bit value in network byte order.
 //
 /// You must ensure that the buffer contains at least 2 bytes!
-inline boost::uint16_t
-readNetworkShort(const boost::uint8_t* buf)
+inline std::uint16_t
+readNetworkShort(const std::uint8_t* buf)
 {
-    const boost::uint16_t s = buf[0] << 8 | buf[1];
+    const std::uint16_t s = buf[0] << 8 | buf[1];
     return s;
 }
 
 /// Read an unsigned 32-bit value in network byte order.
 //
 /// You must ensure that the buffer contains at least 4 bytes!
-inline boost::uint32_t
-readNetworkLong(const boost::uint8_t* buf)
+inline std::uint32_t
+readNetworkLong(const std::uint8_t* buf)
 {
-    const boost::uint32_t s = buf[0] << 24 | buf[1] << 16 |
+    const std::uint32_t s = buf[0] << 24 | buf[1] << 16 |
                               buf[2] << 8 | buf[3];
     return s;
 }
diff --git a/libbase/BitsReader.cpp b/libbase/BitsReader.cpp
index 6bb8694..20cdb45 100644
--- a/libbase/BitsReader.cpp
+++ b/libbase/BitsReader.cpp
@@ -35,7 +35,7 @@ unsigned BitsReader::read_uint(unsigned short bitcount)
 {
 	assert(bitcount <= 32);
 
-	boost::uint32_t value = 0;
+	std::uint32_t value = 0;
 
 	unsigned short bits_needed = bitcount;
 	do
@@ -85,9 +85,9 @@ unsigned BitsReader::read_uint(unsigned short bitcount)
 }
 
 
-boost::int32_t BitsReader::read_sint(unsigned short bitcount)
+std::int32_t BitsReader::read_sint(unsigned short bitcount)
 {
-	boost::int32_t	value = boost::int32_t(read_uint(bitcount));
+	std::int32_t	value = std::int32_t(read_uint(bitcount));
 
 	// Sign extend...
 	if (value & (1 << (bitcount - 1))) 
diff --git a/libbase/BitsReader.h b/libbase/BitsReader.h
index 83c3391..da9834e 100644
--- a/libbase/BitsReader.h
+++ b/libbase/BitsReader.h
@@ -26,7 +26,7 @@
 #include "log.h"
 
 #include <cassert>
-#include <boost/cstdint.hpp> // for boost::uint32_t used in this file
+#include <cstdint> // for std::uint32_t used in this file
 
 namespace gnash {
 
@@ -97,43 +97,43 @@ public:
 	/// Reads a bit-packed little-endian signed integer
 	/// from the stream.  The given bitcount determines the
 	/// number of bits to read.
-	boost::int32_t read_sint(unsigned short bitcount);
+	std::int32_t read_sint(unsigned short bitcount);
 
 	/// Read a byte as an unsigned int (aligned)
-	boost::uint8_t  read_u8()
+	std::uint8_t  read_u8()
 	{
 		align();
 		return *ptr++;
 	}
 
 	/// Read one bytes as a signed int (aligned)
-    boost::int8_t read_s8()
+    std::int8_t read_s8()
 	{
-		return static_cast<boost::int8_t>(read_u8());
+		return static_cast<std::int8_t>(read_u8());
 	}
 
 	/// Read two bytes as an unsigned int (aligned)
-	boost::uint16_t read_u16()
+	std::uint16_t read_u16()
 	{
 		align();
 		assert(ptr+2 < end);
-		boost::uint16_t result = *ptr++;
+		std::uint16_t result = *ptr++;
 		result |= *ptr++ << 8;
 		return result ;
 	}
 
 	/// Read two bytes as a signed int (aligned)
-	boost::int16_t	read_s16()
+	std::int16_t	read_s16()
 	{
-		return static_cast<boost::int16_t>(read_u16());
+		return static_cast<std::int16_t>(read_u16());
 	}
 
 	/// Read four bytes as an unsigned int (aligned)
-	boost::uint32_t read_u32()
+	std::uint32_t read_u32()
 	{
 		align();
 		assert(ptr+4 < end);
-		boost::uint32_t result = *ptr++;
+		std::uint32_t result = *ptr++;
 		result |= *ptr++ << 8;
 		result |= *ptr++ << 16;
 		result |= *ptr++ << 24;
@@ -141,9 +141,9 @@ public:
 	}
 
 	/// Read four bytes as an signed int (aligned)
-	boost::int32_t read_s32()
+	std::int32_t read_s32()
 	{
-		return static_cast<boost::int32_t>(read_u32());
+		return static_cast<std::int32_t>(read_u32());
 	}
 
 	/// \brief
@@ -155,9 +155,9 @@ public:
 	}
 
 	/// Checks if the stream contains X bits
-	bool gotBits(boost::uint32_t nbits) const
+	bool gotBits(std::uint32_t nbits) const
 	{
-		boost::uint32_t gotbits = 8-usedBits +8*(end-ptr-1);
+		std::uint32_t gotbits = 8-usedBits +8*(end-ptr-1);
 		if (gotbits > nbits) return true;
 		else return false;
 	}
diff --git a/libbase/ClockTime.cpp b/libbase/ClockTime.cpp
index a17adaf..460ce6f 100644
--- a/libbase/ClockTime.cpp
+++ b/libbase/ClockTime.cpp
@@ -17,7 +17,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include "ClockTime.h"
 #include "log.h"
 
@@ -43,7 +43,7 @@ extern long timezone;   // for tzset()/long timezone;
 
 namespace gnash {
 
-boost::uint64_t
+std::uint64_t
 clocktime::getTicks()
 {
     // This needs to return milliseconds. Does it?
@@ -57,20 +57,20 @@ clocktime::getTicks()
 
 namespace gnash {
 
-boost::uint64_t
+std::uint64_t
 clocktime::getTicks()
 {
 
     struct timeval tv;
     
-    gettimeofday(&tv, 0);
+    gettimeofday(&tv, nullptr);
 
-    boost::uint64_t result = static_cast<boost::uint64_t>(tv.tv_sec) * 1000000L;
+    std::uint64_t result = static_cast<std::uint64_t>(tv.tv_sec) * 1000000L;
 
     // Time Unit: microsecond
     result += tv.tv_usec;
 
-    return static_cast<boost::uint64_t>(result / 1000.0);
+    return static_cast<std::uint64_t>(result / 1000.0);
 }
 
 }
@@ -95,7 +95,7 @@ namespace gnash {
 /// It also gets things wrong for very high or low time values, when the
 /// localtime implementation fills the gmtoff element with 53 minutes (on
 /// at least one machine, anyway).
-boost::int32_t
+std::int32_t
 clocktime::getTimeZoneOffset(double time)
 {
     
diff --git a/libbase/ClockTime.h b/libbase/ClockTime.h
index da5f541..d3a79b0 100644
--- a/libbase/ClockTime.h
+++ b/libbase/ClockTime.h
@@ -21,19 +21,19 @@
 #ifndef GNASH_TIME_H
 #define GNASH_TIME_H
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include "dsodefs.h"
 
 namespace gnash {
 
 namespace clocktime {
     /// Wall clock timer, returns current POSIX time in milliseconds.
-	DSOEXPORT boost::uint64_t getTicks();
+	DSOEXPORT std::uint64_t getTicks();
 
 	/// Returns the offset between actual clock time and UTC.
 	/// It relies on the system's time zone settings, so
 	/// cannot be regarded as reliable.
-	DSOEXPORT boost::int32_t getTimeZoneOffset(double time);
+	DSOEXPORT std::int32_t getTimeZoneOffset(double time);
 
 } // namespace clocktime
 } // namespace gnash
diff --git a/libbase/GC.cpp b/libbase/GC.cpp
index 2a4afc0..e0ef530 100644
--- a/libbase/GC.cpp
+++ b/libbase/GC.cpp
@@ -47,7 +47,7 @@ GC::GC(GcRoot& root)
 #endif
     char* gcgap = std::getenv("GNASH_GC_TRIGGER_THRESHOLD");
     if (gcgap) {
-        const size_t gap = std::strtoul(gcgap, NULL, 0);
+        const size_t gap = std::strtoul(gcgap, nullptr, 0);
         _maxNewCollectablesCount = gap;
     }
 }
@@ -73,8 +73,7 @@ GC::cleanUnreachable()
 
     size_t deleted = 0;
 
-    for (ResList::iterator i = _resList.begin(), e = _resList.end(); i != e;) {
-        const GcResource* res = *i;
+    _resList.remove_if([&deleted](const GcResource* res) {
         if (!res->isReachable()) {
 
 #if GNASH_GC_DEBUG > 1
@@ -82,13 +81,13 @@ GC::cleanUnreachable()
 #endif
             ++deleted;
             delete res;
-            i = _resList.erase(i); // _resListSize updated at end of loop
+            return true;
         }
         else {
             res->clearReachable();
-            ++i;
+            return false;
         }
-    }
+    });
 
     _resListSize -= deleted;
 
@@ -131,9 +130,8 @@ GC::runCycle()
 void
 GC::countCollectables(CollectablesCount& count) const
 {
-    for (ResList::const_iterator i = _resList.begin(), e = _resList.end();
-            i!=e; ++i) {
-        ++count[typeName(**i)];
+    for (const GcResource* resource : _resList) {
+        ++count[typeName(*resource)];
     }
 }
 
diff --git a/libbase/GC.h b/libbase/GC.h
index ee4a26a..183891b 100644
--- a/libbase/GC.h
+++ b/libbase/GC.h
@@ -29,7 +29,7 @@
 //   
 //#define GNASH_GC_DEBUG 1
 
-#include <list>
+#include <forward_list>
 #include <map>
 #include <string>
 #include <cassert>
@@ -198,7 +198,7 @@ public:
         assert(!item->isReachable());
 #endif
 
-        _resList.push_back(item); ++_resListSize;
+        _resList.emplace_front(item); ++_resListSize;
 
 #if GNASH_GC_DEBUG > 1
         log_debug(_("GC: collectable %p added, num collectables: %d"), item, 
@@ -265,7 +265,7 @@ public:
 private:
 
     /// List of collectables
-    typedef std::list<const GcResource*> ResList;
+    typedef std::forward_list<const GcResource*> ResList;
 
     /// Mark all reachable resources
     void markReachable() {
diff --git a/libbase/GnashAlgorithm.h b/libbase/GnashAlgorithm.h
index 6711937..2174832 100644
--- a/libbase/GnashAlgorithm.h
+++ b/libbase/GnashAlgorithm.h
@@ -22,7 +22,7 @@
 #define GNASH_ALGORITHM_H
 
 #include <algorithm>
-#include <boost/bind.hpp>
+#include <functional>
 
 namespace gnash {
 
@@ -74,8 +74,8 @@ foreachSecond(T begin, T end, U op)
 {
     typedef typename std::iterator_traits<T>::value_type value_type;
 
-    std::for_each(begin, end, boost::bind(op,
-                boost::bind(&value_type::second, _1)));
+    std::for_each(begin, end, std::bind(op,
+                std::bind(&value_type::second, std::placeholders::_1)));
 }
 
 } // namespace gnash
diff --git a/libbase/GnashFactory.h b/libbase/GnashFactory.h
index 7e2ad1d..a9d1760 100644
--- a/libbase/GnashFactory.h
+++ b/libbase/GnashFactory.h
@@ -29,8 +29,7 @@
 #include <string>
 #include <algorithm>
 #include <iterator>
-#include <boost/type_traits.hpp>
-#include <boost/utility/enable_if.hpp>
+#include <type_traits>
 
 #include "dsodefs.h"
 #include "GnashAlgorithm.h"
@@ -52,7 +51,7 @@ namespace gnash {
 ///                 are registered. This helps avoid problems with
 ///                 unpredictable static initialization.
 /// @tparam Key     The type to be used as a key.
-template<typename T, typename Init = void, typename Key = std::string>
+template<typename T, typename Init, typename Key>
 class DSOEXPORT GnashFactory
 {
 public:
@@ -85,13 +84,14 @@ public:
     //
     /// Only usable with output iterators.
     template<typename Iterator>
-    void listKeys(Iterator i, typename boost::enable_if<boost::is_same<
-              typename std::iterator_traits<Iterator>::iterator_category,
-              std::output_iterator_tag> >::type* dummy = 0) {
+    void
+    listKeys(Iterator i) {
+        typedef typename std::iterator_traits<Iterator>::iterator_category cat;
+        static_assert(std::is_same<cat, std::output_iterator_tag>::value,
+            "i must be an output iterator.");
         Init();
-        static_cast<void>(dummy);
         std::transform(_handlers.begin(), _handlers.end(), i,
-                boost::bind(&Handlers::value_type::first, _1));
+                std::bind(&Handlers::value_type::first, std::placeholders::_1));
     }
 
     /// Return a Handler identified by a name.
@@ -103,11 +103,11 @@ public:
     T* get(const Key& name) {
         Init();
         if (name.empty()) {
-            return _handlers.empty() ? 0 : _handlers.begin()->second();
+            return _handlers.empty() ? nullptr : _handlers.begin()->second();
         }
 
         typename Handlers::const_iterator it = _handlers.find(name);
-        if (it == _handlers.end()) return 0;
+        if (it == _handlers.end()) return nullptr;
         return it->second();
     }
 
diff --git a/libbase/GnashImage.cpp b/libbase/GnashImage.cpp
index e08071c..8d660f4 100644
--- a/libbase/GnashImage.cpp
+++ b/libbase/GnashImage.cpp
@@ -23,8 +23,6 @@
 #include "GnashImage.h"
 
 #include <memory> 
-#include <boost/scoped_array.hpp>
-#include <boost/shared_ptr.hpp>
 #include <algorithm>
 #include <cassert>
 
@@ -51,7 +49,7 @@ namespace {
 
         assert(channels > 0);
 
-        boost::uint32_t maxSize = std::numeric_limits<boost::int32_t>::max();
+        std::uint32_t maxSize = std::numeric_limits<std::int32_t>::max();
         if (width >= maxSize || height >= maxSize) return false;
 
         maxSize /= channels;
@@ -175,7 +173,7 @@ mergeAlpha(ImageRGBA& im, GnashImage::const_iterator alphaData,
 // Write the given image to the given out stream, in jpeg format.
 void
 Output::writeImageData(FileType type,
-    boost::shared_ptr<IOChannel> out, const GnashImage& image, int quality)
+    std::shared_ptr<IOChannel> out, const GnashImage& image, int quality)
 {
     
     const size_t width = image.width();
@@ -183,7 +181,7 @@ Output::writeImageData(FileType type,
     
     quality = clamp<int>(quality, 0, 100);    
 
-    std::auto_ptr<Output> outChannel;
+    std::unique_ptr<Output> outChannel;
 
     switch (type) {
 #ifdef USE_PNG
@@ -213,11 +211,11 @@ Output::writeImageData(FileType type,
 }
 
 // See GnashEnums.h for file types.
-std::auto_ptr<GnashImage>
-Input::readImageData(boost::shared_ptr<IOChannel> in, FileType type)
+std::unique_ptr<GnashImage>
+Input::readImageData(std::shared_ptr<IOChannel> in, FileType type)
 {
-    std::auto_ptr<GnashImage> im;
-    std::auto_ptr<Input> inChannel;
+    std::unique_ptr<GnashImage> im;
+    std::unique_ptr<Input> inChannel;
 
     switch (type) {
 #ifdef USE_PNG
@@ -281,14 +279,14 @@ Input::readImageData(boost::shared_ptr<IOChannel> in, FileType type)
 
 // For reading SWF JPEG3-style image data, like ordinary JPEG, 
 // but stores the data in ImageRGBA format.
-std::auto_ptr<ImageRGBA>
-Input::readSWFJpeg3(boost::shared_ptr<IOChannel> in)
+std::unique_ptr<ImageRGBA>
+Input::readSWFJpeg3(std::shared_ptr<IOChannel> in)
 {
 
-    std::auto_ptr<ImageRGBA> im;
+    std::unique_ptr<ImageRGBA> im;
 
     // Calling with headerBytes as 0 has a special effect...
-    std::auto_ptr<JpegInput> j_in(
+    std::unique_ptr<JpegInput> j_in(
             JpegInput::createSWFJpeg2HeaderOnly(in, 0));
 
     // If this isn't true, we should have thrown.
@@ -307,7 +305,7 @@ Input::readSWFJpeg3(boost::shared_ptr<IOChannel> in)
             j_in->readScanline(scanline(*im, y));
         }
     } else {
-        boost::scoped_array<GnashImage::value_type> line(
+        std::unique_ptr<GnashImage::value_type[]> line(
             new GnashImage::value_type[3 * width]);
 
         for (size_t y = 0; y < height; ++y) {
diff --git a/libbase/GnashImage.h b/libbase/GnashImage.h
index cb7d17e..afec355 100644
--- a/libbase/GnashImage.h
+++ b/libbase/GnashImage.h
@@ -24,10 +24,8 @@
 #ifndef GNASH_GNASHIMAGE_H
 #define GNASH_GNASHIMAGE_H
 
-#include <boost/shared_ptr.hpp>
 #include <boost/noncopyable.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/scoped_array.hpp>
+#include <cstdint>
 #include <memory> 
 
 #include "GnashEnums.h"
@@ -80,8 +78,8 @@ class DSOEXPORT GnashImage : boost::noncopyable
 {
 public:
 
-    typedef boost::uint8_t value_type;
-    typedef boost::scoped_array<value_type> container_type;
+    typedef std::uint8_t value_type;
+    typedef std::unique_ptr<value_type[]> container_type;
     typedef value_type* iterator;
     typedef const value_type* const_iterator;
 
@@ -186,7 +184,7 @@ protected:
 
     /// Construct an empty GnashImage
     //
-    /// Note: there is an arbitrary limit of boost::int32_t::max bytes for the
+    /// Note: there is an arbitrary limit of std::int32_t::max bytes for the
     /// total size of the bitmap constructed with this constructor.
     //
     /// @param width    The width of the image in pixels.
@@ -267,7 +265,7 @@ public:
     /// @param in   The stream to read data from. Ownership is shared
     ///             between caller and Input, so it is freed
     ///             automatically when the last owner is destroyed.
-    Input(boost::shared_ptr<IOChannel> in)
+    Input(std::shared_ptr<IOChannel> in)
         :
         _inStream(in),
         _type(GNASH_IMAGE_INVALID)
@@ -308,8 +306,8 @@ public:
     /// \brief
     /// For reading SWF JPEG3-style image data, like ordinary JPEG, 
     /// but stores the data in ImageRGBA format.
-    DSOEXPORT static std::auto_ptr<ImageRGBA> readSWFJpeg3(
-            boost::shared_ptr<gnash::IOChannel> in);
+    DSOEXPORT static std::unique_ptr<ImageRGBA> readSWFJpeg3(
+            std::shared_ptr<gnash::IOChannel> in);
 
     /// Read image data from an IOChannel into an GnashImage.
     //
@@ -317,13 +315,13 @@ public:
     /// @param type The type of image to read.
     /// @return     An GnashImage with the read image data. If type
     ///             is an unsupported FileType or image reading fails,
-    ///             a NULL auto_ptr is returned.
-    DSOEXPORT static std::auto_ptr<GnashImage> readImageData(
-            boost::shared_ptr<gnash::IOChannel> in, FileType type);
+    ///             a NULL unique_ptr is returned.
+    DSOEXPORT static std::unique_ptr<GnashImage> readImageData(
+            std::shared_ptr<gnash::IOChannel> in, FileType type);
 
 protected:
 
-    boost::shared_ptr<IOChannel> _inStream;
+    std::shared_ptr<IOChannel> _inStream;
 
     ImageType _type;
 
@@ -341,7 +339,7 @@ public:
     ///                 is shared.
     /// @param width    The width of the resulting image
     /// @param height   The height of the resulting image.
-    Output(boost::shared_ptr<IOChannel> out, size_t width, size_t height)
+    Output(std::shared_ptr<IOChannel> out, size_t width, size_t height)
         :
         _width(width),
         _height(height),
@@ -373,7 +371,7 @@ public:
     ///                 maxium value. The quality is not used for all
     ///                 formats.
     DSOEXPORT static void writeImageData(FileType type,
-            boost::shared_ptr<gnash::IOChannel> out, const GnashImage& image,
+            std::shared_ptr<gnash::IOChannel> out, const GnashImage& image,
             int quality);
 
 protected:
@@ -382,7 +380,7 @@ protected:
 
     const size_t _height;
     
-    boost::shared_ptr<IOChannel> _outStream;
+    std::shared_ptr<IOChannel> _outStream;
 
 };
 
diff --git a/libbase/GnashImageGif.cpp b/libbase/GnashImageGif.cpp
index 26865c1..84b09ce 100644
--- a/libbase/GnashImageGif.cpp
+++ b/libbase/GnashImageGif.cpp
@@ -22,7 +22,6 @@
 
 #include <sstream>
 #include <algorithm>
-#include <boost/scoped_array.hpp>
 
 extern "C" {
 #include <gif_lib.h>
@@ -58,7 +57,7 @@ public:
     /// @param in   The stream to read GIF data from. Ownership is shared
     ///             between caller and GifInput, so it is freed
     ///             automatically when the last owner is destroyed.
-    GifInput(boost::shared_ptr<IOChannel> in);
+    GifInput(std::shared_ptr<IOChannel> in);
     
     ~GifInput();
 
@@ -103,17 +102,17 @@ private:
     // A counter for keeping track of the last row copied.
     size_t _currentRow;
     
-    typedef boost::scoped_array<GifPixelType> PixelRow;
+    typedef std::unique_ptr<GifPixelType[]> PixelRow;
 
     // A 2-dimensional scoped array holding the unpacked pixel data.
-    boost::scoped_array<PixelRow> _gifData;
+    std::unique_ptr<PixelRow[]> _gifData;
 };
 
 
-GifInput::GifInput(boost::shared_ptr<IOChannel> in)
+GifInput::GifInput(std::shared_ptr<IOChannel> in)
     :
     Input(in),
-    _gif(0),
+    _gif(nullptr),
     _currentRow(0)
 {
 }
@@ -304,10 +303,10 @@ GifInput::read()
 
 } // unnamed namespace
 
-std::auto_ptr<Input>
-createGifInput(boost::shared_ptr<IOChannel> in)
+std::unique_ptr<Input>
+createGifInput(std::shared_ptr<IOChannel> in)
 {
-    std::auto_ptr<Input> ret(new GifInput(in));
+    std::unique_ptr<Input> ret(new GifInput(in));
     ret->read();
     return ret;
 }
diff --git a/libbase/GnashImageGif.h b/libbase/GnashImageGif.h
index 0204202..e3b18d1 100644
--- a/libbase/GnashImageGif.h
+++ b/libbase/GnashImageGif.h
@@ -22,7 +22,6 @@
 #define GNASH_IMAGE_GIF_H
 
 #include <memory>
-#include <boost/shared_ptr.hpp>
 
 // Forward declarations
 namespace gnash {
@@ -39,7 +38,7 @@ namespace image {
 /// Create a GifInput and transfer ownership to the caller.
 //
 /// @param in   The IOChannel to read GIF data from.
-std::auto_ptr<Input> createGifInput(boost::shared_ptr<IOChannel> in);
+std::unique_ptr<Input> createGifInput(std::shared_ptr<IOChannel> in);
 
 } // namespace image
 } // namespace gnash
diff --git a/libbase/GnashImageJpeg.cpp b/libbase/GnashImageJpeg.cpp
index 8a6c0f3..f3365f5 100644
--- a/libbase/GnashImageJpeg.cpp
+++ b/libbase/GnashImageJpeg.cpp
@@ -81,7 +81,7 @@ public:
     jpeg_source_mgr    m_pub;        /* public fields */
 
     // Constructor.
-    explicit rw_source_IOChannel(boost::shared_ptr<IOChannel> in)
+    explicit rw_source_IOChannel(std::shared_ptr<IOChannel> in)
         :
         m_in_stream(in),
         m_start_of_file(true)
@@ -171,7 +171,7 @@ public:
     {
         // Discard existing bytes in our buffer.
         m_pub.bytes_in_buffer = 0;
-        m_pub.next_input_byte = NULL;
+        m_pub.next_input_byte = nullptr;
     }
 
     /// Set up the given decompress object to read from the given
@@ -181,7 +181,7 @@ public:
     ///     Stream to read from. Ownership always shared with caller.
     ///
     static void setup(jpeg_decompress_struct* cinfo,
-            boost::shared_ptr<IOChannel> instream)
+            std::shared_ptr<IOChannel> instream)
     {
         rw_source_IOChannel* source = new rw_source_IOChannel(instream);
         cinfo->src = (jpeg_source_mgr*)source;
@@ -199,11 +199,11 @@ private:
         m_pub.resync_to_restart = jpeg_resync_to_restart;
         m_pub.term_source = term_source;
         m_pub.bytes_in_buffer = 0;
-        m_pub.next_input_byte = NULL;
+        m_pub.next_input_byte = nullptr;
     }
 
     // Source stream
-    boost::shared_ptr<IOChannel> m_in_stream;
+    std::shared_ptr<IOChannel> m_in_stream;
     bool m_start_of_file;
     JOCTET m_buffer[IO_BUF_SIZE];
 
@@ -211,10 +211,11 @@ private:
 
 } // unnamed namespace
 
-JpegInput::JpegInput(boost::shared_ptr<IOChannel> in)
+JpegInput::JpegInput(std::shared_ptr<IOChannel> in)
     :
     Input(in),
-    _errorOccurred(0),
+    _errorOccurred(nullptr),
+    _jmpBuf(),
     _compressorOpened(false)
 {
     setup_jpeg_err(&m_jerr);
@@ -234,7 +235,7 @@ JpegInput::~JpegInput()
         reinterpret_cast<rw_source_IOChannel*>(m_cinfo.src);
 
     delete src;
-    m_cinfo.src = NULL;
+    m_cinfo.src = nullptr;
 
     jpeg_destroy_decompress(&m_cinfo);
 }
@@ -441,13 +442,13 @@ JpegInput::errorOccurred(const char* msg)
 // Create and read a new image, using a input object that
 // already has tables loaded.  The IJG documentation describes
 // this as "abbreviated" format.
-std::auto_ptr<GnashImage>
+std::unique_ptr<GnashImage>
 JpegInput::readSWFJpeg2WithTables(JpegInput& loader)
 {
 
     loader.read();
 
-    std::auto_ptr<GnashImage> im(
+    std::unique_ptr<GnashImage> im(
             new ImageRGB(loader.getWidth(), loader.getHeight()));
 
     for (size_t y = 0, height = loader.getHeight(); y < height; y++) {
@@ -547,7 +548,7 @@ public:
 
         // Clean ourselves up.
         delete dest;
-        cinfo->dest = NULL;
+        cinfo->dest = nullptr;
     }
 
 private:    
@@ -560,7 +561,7 @@ private:
 };
 
 
-JpegOutput::JpegOutput(boost::shared_ptr<IOChannel> out, size_t width,
+JpegOutput::JpegOutput(std::shared_ptr<IOChannel> out, size_t width,
         size_t height, int quality)
     :
     Output(out, width, height)
@@ -608,7 +609,7 @@ JpegOutput::writeImageRGBA(const unsigned char* rgbaData)
     const size_t components = 3;
     const size_t size = _width * _height;
 
-    boost::scoped_array<unsigned char> data(
+    std::unique_ptr<unsigned char[]> data(
             new unsigned char[size * components]);
 
     for (size_t pixel = 0; pixel < size; ++pixel) {
@@ -619,11 +620,11 @@ JpegOutput::writeImageRGBA(const unsigned char* rgbaData)
     writeImageRGB(data.get());
 }
 
-std::auto_ptr<Output>
-JpegOutput::create(boost::shared_ptr<IOChannel> o, size_t width, size_t height,
+std::unique_ptr<Output>
+JpegOutput::create(std::shared_ptr<IOChannel> o, size_t width, size_t height,
         int quality)
 {
-    std::auto_ptr<Output> outChannel(new JpegOutput(o, width, height, quality));
+    std::unique_ptr<Output> outChannel(new JpegOutput(o, width, height, quality));
     return outChannel;
 }
 
diff --git a/libbase/GnashImageJpeg.h b/libbase/GnashImageJpeg.h
index 44b50d2..846ce8a 100644
--- a/libbase/GnashImageJpeg.h
+++ b/libbase/GnashImageJpeg.h
@@ -68,7 +68,7 @@ public:
     /// @param in   The stream to read JPEG data from. Ownership is shared
     ///             between caller and JpegInput, so it is freed
     ///             automatically when the last owner is destroyed.
-    DSOEXPORT JpegInput(boost::shared_ptr<IOChannel> in);
+    DSOEXPORT JpegInput(std::shared_ptr<IOChannel> in);
 
     /// Read the JPEG header information only.
     //
@@ -118,9 +118,9 @@ public:
     /// Create a JpegInput and transfer ownership to the caller.
     //
     /// @param in   The IOChannel to read JPEG data from.
-    static std::auto_ptr<Input> create(boost::shared_ptr<IOChannel> in)
+    static std::unique_ptr<Input> create(std::shared_ptr<IOChannel> in)
     {
-        std::auto_ptr<Input> ret(new JpegInput(in));
+        std::unique_ptr<Input> ret(new JpegInput(in));
         // might throw an exception (I guess)
         if (ret.get()) ret->read();
         return ret;
@@ -133,7 +133,7 @@ public:
     /// @param loader   The JpegInput object to use for reading the
     ///                 data. This should have been constructed with
     ///                 createSWFJpeg2HeaderOnly().
-    DSOEXPORT static std::auto_ptr<GnashImage> readSWFJpeg2WithTables(
+    DSOEXPORT static std::unique_ptr<GnashImage> readSWFJpeg2WithTables(
             JpegInput& loader);
 
     /// Create a JPEG 'loader' object by reading a JPEG header.
@@ -142,10 +142,10 @@ public:
     //
     /// @param in               The channel to read JPEG header data from.
     /// @param maxHeaderBytes   The maximum number of bytes to read.
-    static std::auto_ptr<JpegInput> createSWFJpeg2HeaderOnly(
-            boost::shared_ptr<IOChannel> in, unsigned int maxHeaderBytes)
+    static std::unique_ptr<JpegInput> createSWFJpeg2HeaderOnly(
+            std::shared_ptr<IOChannel> in, unsigned int maxHeaderBytes)
     {
-        std::auto_ptr<JpegInput> ret (new JpegInput(in));
+        std::unique_ptr<JpegInput> ret (new JpegInput(in));
         // might throw an exception
         if (ret.get()) ret->readHeader(maxHeaderBytes);
         return ret;
@@ -174,7 +174,7 @@ public:
     /// @param width    The width of the resulting image
     /// @param height   The height of the resulting image.
     /// @param quality  The quality of the created image, from 1-100.
-    JpegOutput(boost::shared_ptr<IOChannel> out, size_t width,
+    JpegOutput(std::shared_ptr<IOChannel> out, size_t width,
             size_t height, int quality);
     
     ~JpegOutput();
@@ -197,7 +197,7 @@ public:
     /// @param width    The width of the resulting image
     /// @param height   The height of the resulting image.
     /// @param quality  The quality of the created image, from 1-100.
-    static std::auto_ptr<Output> create(boost::shared_ptr<IOChannel> out,
+    static std::unique_ptr<Output> create(std::shared_ptr<IOChannel> out,
             size_t width, size_t height, int quality);
     
 private:
diff --git a/libbase/GnashImagePng.cpp b/libbase/GnashImagePng.cpp
index 29d9624..907a8f0 100644
--- a/libbase/GnashImagePng.cpp
+++ b/libbase/GnashImagePng.cpp
@@ -25,7 +25,6 @@
 #include "GnashImagePng.h"
 
 #include <sstream>
-#include <boost/scoped_array.hpp>
 
 extern "C" {
 #ifdef HAVE_PNG_H
@@ -91,13 +90,11 @@ public:
     /// @param in   The stream to read PNG data from. Ownership is shared
     ///             between caller and JpegInput, so it is freed
     ///             automatically when the last owner is destroyed.
-    PngInput(boost::shared_ptr<IOChannel> in)
+    PngInput(std::shared_ptr<IOChannel> in)
         :
         Input(in),
-        _pngPtr(0),
-        _infoPtr(0),
-        _rowPtrs(0),
-        _pixelData(0),
+        _pngPtr(nullptr),
+        _infoPtr(nullptr),
         _currentRow(0)
     {
         init();
@@ -130,8 +127,8 @@ private:
     // State needed for input.
     png_structp _pngPtr;
     png_infop _infoPtr;
-    boost::scoped_array<png_bytep> _rowPtrs;
-    boost::scoped_array<png_byte> _pixelData;
+    std::unique_ptr<png_bytep[]> _rowPtrs;
+    std::unique_ptr<png_byte[]> _pixelData;
    
     // A counter for keeping track of the last row copied.
     size_t _currentRow;
@@ -155,7 +152,7 @@ public:
     /// @param out      The IOChannel used for output. Must be kept alive
     ///                 throughout
     /// @param quality Unused in PNG output
-    PngOutput(boost::shared_ptr<IOChannel> out, size_t width,
+    PngOutput(std::shared_ptr<IOChannel> out, size_t width,
             size_t height, int quality);
     
     ~PngOutput();
@@ -177,7 +174,7 @@ private:
 
 PngInput::~PngInput()
 {
-    png_destroy_read_struct(&_pngPtr, &_infoPtr, 0);
+    png_destroy_read_struct(&_pngPtr, &_infoPtr, nullptr);
 }
 
 size_t
@@ -219,7 +216,7 @@ void
 PngInput::init()
 {
     // Initialize png library.
-    _pngPtr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, &error,
+    _pngPtr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, &error,
             &warning);
 
     if (!_pngPtr) return;
@@ -227,7 +224,7 @@ PngInput::init()
     _infoPtr = png_create_info_struct(_pngPtr);
 
     if (!_infoPtr) {
-        png_destroy_read_struct(&_pngPtr, 0, 0);
+        png_destroy_read_struct(&_pngPtr, nullptr, nullptr);
         return;
     }
 }
@@ -318,12 +315,12 @@ PngInput::read()
 /// PNG output
 ///
 
-PngOutput::PngOutput(boost::shared_ptr<IOChannel> out, size_t width,
+PngOutput::PngOutput(std::shared_ptr<IOChannel> out, size_t width,
         size_t height, int /*quality*/)
     :
     Output(out, width, height),
-    _pngPtr(0),
-    _infoPtr(0)
+    _pngPtr(nullptr),
+    _infoPtr(nullptr)
 {
     init();
 }
@@ -340,13 +337,13 @@ PngOutput::init()
 {
     // Initialize png library.
     _pngPtr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
-                                        NULL, &error, &warning);
+                                        nullptr, &error, &warning);
     if (!_pngPtr) return;
 
     _infoPtr = png_create_info_struct(_pngPtr);
 
     if (!_infoPtr) {
-        png_destroy_write_struct(&_pngPtr, static_cast<png_infopp>(NULL));
+        png_destroy_write_struct(&_pngPtr, static_cast<png_infopp>(nullptr));
         return;
     }
 }
@@ -356,7 +353,7 @@ PngOutput::writeImageRGBA(const unsigned char* rgbaData)
 {
     png_set_write_fn(_pngPtr, _outStream.get(), &writeData, &flushData);
 
-    boost::scoped_array<const png_byte*> rows(new const png_byte*[_height]);
+    std::unique_ptr<const png_byte*[]> rows(new const png_byte*[_height]);
 
     // RGBA
     const size_t components = 4;
@@ -372,7 +369,7 @@ PngOutput::writeImageRGBA(const unsigned char* rgbaData)
        8, PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE,
        PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 
-    png_write_png(_pngPtr, _infoPtr, PNG_TRANSFORM_IDENTITY, NULL);
+    png_write_png(_pngPtr, _infoPtr, PNG_TRANSFORM_IDENTITY, nullptr);
 }
 
 
@@ -381,7 +378,7 @@ PngOutput::writeImageRGB(const unsigned char* rgbData)
 {
     png_set_write_fn(_pngPtr, _outStream.get(), &writeData, &flushData);
 
-    boost::scoped_array<const png_byte*> rows(new const png_byte*[_height]);
+    std::unique_ptr<const png_byte*[]> rows(new const png_byte*[_height]);
 
     // RGB
     const size_t components = 3;
@@ -397,24 +394,24 @@ PngOutput::writeImageRGB(const unsigned char* rgbData)
        8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
        PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
 
-    png_write_png(_pngPtr, _infoPtr, PNG_TRANSFORM_IDENTITY, NULL);
+    png_write_png(_pngPtr, _infoPtr, PNG_TRANSFORM_IDENTITY, nullptr);
 }
 
 } // unnamed namespace
 
-std::auto_ptr<Input>
-createPngInput(boost::shared_ptr<IOChannel> in)
+std::unique_ptr<Input>
+createPngInput(std::shared_ptr<IOChannel> in)
 {
-    std::auto_ptr<Input> ret(new PngInput(in));
+    std::unique_ptr<Input> ret(new PngInput(in));
     ret->read();
     return ret;
 }
 
-std::auto_ptr<Output>
-createPngOutput(boost::shared_ptr<IOChannel> o, size_t width,
+std::unique_ptr<Output>
+createPngOutput(std::shared_ptr<IOChannel> o, size_t width,
                        size_t height, int quality)
 {
-    std::auto_ptr<Output> outChannel(new PngOutput(o, width, height, quality));
+    std::unique_ptr<Output> outChannel(new PngOutput(o, width, height, quality));
     return outChannel;
 }
 
diff --git a/libbase/GnashImagePng.h b/libbase/GnashImagePng.h
index 4888ab3..a16f47c 100644
--- a/libbase/GnashImagePng.h
+++ b/libbase/GnashImagePng.h
@@ -22,7 +22,6 @@
 #define GNASH_IMAGE_PNG_H
 
 #include <memory>
-#include <boost/shared_ptr.hpp>
 
 // Forward declarations
 namespace gnash {
@@ -39,9 +38,9 @@ namespace image {
 /// Create a PngInput and transfer ownership to the caller.
 //
 /// @param in   The IOChannel to read PNG data from.
-std::auto_ptr<Input> createPngInput(boost::shared_ptr<IOChannel> in);
+std::unique_ptr<Input> createPngInput(std::shared_ptr<IOChannel> in);
 
-std::auto_ptr<Output> createPngOutput(boost::shared_ptr<IOChannel> out,
+std::unique_ptr<Output> createPngOutput(std::shared_ptr<IOChannel> out,
         size_t width, size_t height, int quality);
 
 } // namespace image
diff --git a/libbase/GnashNumeric.h b/libbase/GnashNumeric.h
index c92a2bd..34cca6d 100644
--- a/libbase/GnashNumeric.h
+++ b/libbase/GnashNumeric.h
@@ -32,10 +32,9 @@
 #include <cassert>
 #include <cmath>
 #include <algorithm>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <limits>
-#include <boost/utility/enable_if.hpp>
-#include <boost/type_traits/is_floating_point.hpp>
+#include <type_traits>
 
 namespace gnash {
 
@@ -59,9 +58,11 @@ isFinite(double d)
 
 template <typename T>
 inline
-typename boost::enable_if<boost::is_floating_point<T>, bool>::type
+bool
 isNaN(const T& num)
 {
+    static_assert(std::is_floating_point<T>::value,
+        "isNaN() is only meaningful for floating point types.");
     return num != num;
 }
 
@@ -99,7 +100,7 @@ twipsToPixels(int i)
 }
 
 template<size_t Factor>
-boost::int32_t
+std::int32_t
 truncateWithFactor(double a)
 {
     // If a is NaN, then this function would return -NAN, which when cast to
@@ -119,11 +120,11 @@ truncateWithFactor(double a)
     // extremely rare, using this safe version has no implications for
     // performance under normal circumstances.
     static const double upperUnsignedLimit =
-                std::numeric_limits<boost::uint32_t>::max() + 1.0;
+                std::numeric_limits<std::uint32_t>::max() + 1.0;
     static const double upperSignedLimit =
-                std::numeric_limits<boost::int32_t>::max() / factor;
+                std::numeric_limits<std::int32_t>::max() / factor;
     static const double lowerSignedLimit =
-                std::numeric_limits<boost::int32_t>::min() / factor;
+                std::numeric_limits<std::int32_t>::min() / factor;
 
     if (a >= lowerSignedLimit && a <= upperSignedLimit) {
         return a * Factor;
@@ -131,15 +132,15 @@ truncateWithFactor(double a)
 
     // This slow truncation happens only in very unlikely cases.
     return a >= 0 ?
-        static_cast<boost::uint32_t>(
+        static_cast<std::uint32_t>(
                 std::fmod(a * factor, upperUnsignedLimit))
         : 
-        -static_cast<boost::uint32_t>(
+        -static_cast<std::uint32_t>(
                 std::fmod(-a * factor, upperUnsignedLimit));
 }
 
 // truncate when overflow occurs.
-inline boost::int32_t
+inline std::int32_t
 pixelsToTwips(double a)
 {
     return truncateWithFactor<20>(a);
diff --git a/libbase/GnashScopedPtr.h b/libbase/GnashScopedPtr.h
deleted file mode 100644
index f5fc813..0000000
--- a/libbase/GnashScopedPtr.h
+++ /dev/null
@@ -1,85 +0,0 @@
-// GnashSmartPtr.h: scoped pointer supporting deleters.
-//
-//   Copyright (C) 2013
-//   Free Software Foundation, Inc.
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-//
-
-#ifndef GNASH_SCOPED_PTR_H
-#define GNASH_SCOPED_PTR_H
-
-#include <boost/utility.hpp> // noncopyable
-#include <boost/function.hpp>
-
-namespace gnash {
-
-/// ScopedPtr is very similar to scoped_ptr, but includes the Deleter
-/// functionality from shared_ptr. ScopedPtr can be used to implement the RAII
-/// pattern for C APIs, which frequently have their own deallocation strategy,
-/// when shared_ptr semantics are not desirable.
-//
-/// ScopedPtr is similar to C++11's unique_ptr, but the deleter is not part of
-/// the type.
-template <typename T>
-class ScopedPtr : private boost::noncopyable
-{
-private:
-    typedef boost::function<void(T* x)> DeleterT;
-public:
-
-    /// Construct a ScopedPtr and provide a deleter.
-    ///
-    /// @ptr the pointer to exclusively manage.
-    /// @deleter the deleter to call when this object goes out of scope.
-    /// The expression d(ptr) must be well-formed.
-    explicit ScopedPtr(T* ptr, DeleterT d)
-    : _ptr(ptr),
-      _deleter(d)
-    {}
-
-    /// Dereferences the managed pointer and returns a reference.
-    T& operator*() const 
-    {
-        return *_ptr;
-    }
-
-    /// Dereference the contained pointer.
-    T* operator->() const
-    {
-        return _ptr;
-    }
-
-    /// Obtain the contained pointer.
-    T* get() const
-    {
-        return _ptr;
-    }
-
-    ~ScopedPtr()
-    {
-        if (_ptr) {
-            _deleter(_ptr);
-        }
-    }
-private:
-
-    T* _ptr;
-    DeleterT _deleter;
-};
-
-} // namespace gnash
-
-#endif
diff --git a/libbase/GnashSleep.h b/libbase/GnashSleep.h
index 46effce..dcce71c 100644
--- a/libbase/GnashSleep.h
+++ b/libbase/GnashSleep.h
@@ -39,7 +39,7 @@ inline void gnashSleep(time_t useconds)
 #else
     const time_t m = 1000000;
     const struct timespec t = { useconds / m, (useconds % m) * 1000 };
-    ::nanosleep(&t, 0);
+    ::nanosleep(&t, nullptr);
 #endif
 }
 
diff --git a/libbase/GnashVaapiImage.cpp b/libbase/GnashVaapiImage.cpp
index 72b040b..6cf00dd 100644
--- a/libbase/GnashVaapiImage.cpp
+++ b/libbase/GnashVaapiImage.cpp
@@ -27,20 +27,20 @@
 namespace gnash {
 
 /// Get current value of microsecond timer
-static boost::uint64_t get_ticks_usec(void)
+static std::uint64_t get_ticks_usec(void)
 {
 #ifdef HAVE_CLOCK_GETTIME
     struct timespec t;
     clock_gettime(CLOCK_REALTIME, &t);
-    return (boost::uint64_t)t.tv_sec * 1000000 + t.tv_nsec / 1000;
+    return (std::uint64_t)t.tv_sec * 1000000 + t.tv_nsec / 1000;
 #else
     struct timeval t;
     gettimeofday(&t, NULL);
-    return (boost::uint64_t)t.tv_sec * 1000000 + t.tv_usec;
+    return (std::uint64_t)t.tv_sec * 1000000 + t.tv_usec;
 #endif
 }
 
-GnashVaapiImage::GnashVaapiImage(boost::shared_ptr<VaapiSurface> surface,
+GnashVaapiImage::GnashVaapiImage(std::shared_ptr<VaapiSurface> surface,
         image::ImageType type)
     :
     image::GnashImage(NULL, surface->width(), surface->height(), type,
@@ -58,13 +58,13 @@ GnashVaapiImage::~GnashVaapiImage()
           _surface->get());
 }
 
-void GnashVaapiImage::update(boost::shared_ptr<VaapiSurface> surface)
+void GnashVaapiImage::update(std::shared_ptr<VaapiSurface> surface)
 {
     _surface = surface;
     _creation_time = get_ticks_usec();
 }
 
-void GnashVaapiImage::update(boost::uint8_t* data)
+void GnashVaapiImage::update(std::uint8_t* data)
 {
     log_debug(_("GnashVaapi::update(): data %p\n"), data);
 
@@ -80,7 +80,7 @@ void GnashVaapiImage::update(const image::GnashImage& from)
 
     switch (from.location()) {
         case image::GNASH_IMAGE_CPU:
-            this->update(const_cast<boost::uint8_t*>(from.begin()));
+            this->update(const_cast<std::uint8_t*>(from.begin()));
             break;
         case image::GNASH_IMAGE_GPU:
             this->update(static_cast<const GnashVaapiImage&>(from).surface());
@@ -111,7 +111,7 @@ GnashVaapiImage::begin()
 {
     log_debug(_("GnashVaapiImage::data(): surface 0x%08x\n"), _surface->get());
     log_debug(_("  -> %u usec from creation\n"),
-              (boost::uint32_t)(get_ticks_usec() - _creation_time));
+              (std::uint32_t)(get_ticks_usec() - _creation_time));
 
     if (!transfer()) {
         return NULL;
@@ -127,7 +127,7 @@ GnashVaapiImage::begin() const
     log_debug(_("GnashVaapiImage::data() const: surface 0x%08x\n"),
 	      _surface->get());
     log_debug(_("  -> %u usec from creation\n"),
-          (boost::uint32_t)(get_ticks_usec() - _creation_time));
+          (std::uint32_t)(get_ticks_usec() - _creation_time));
 
     /* XXX: awful hack... */
     if (!const_cast<GnashVaapiImage *>(this)->transfer()) {
diff --git a/libbase/GnashVaapiImage.h b/libbase/GnashVaapiImage.h
index 9b2558f..284ef5d 100644
--- a/libbase/GnashVaapiImage.h
+++ b/libbase/GnashVaapiImage.h
@@ -21,7 +21,6 @@
 #ifndef GNASH_GNASHVAAPIIMAGE_H
 #define GNASH_GNASHVAAPIIMAGE_H
 
-#include <boost/shared_ptr.hpp>
 
 #include "GnashImage.h"
 #include "dsodefs.h"
@@ -35,26 +34,26 @@ class VaapiSurfaceProxy;
 /// GnashImage implementation using a VA surface
 class DSOEXPORT GnashVaapiImage : public image::GnashImage
 {
-    boost::shared_ptr<VaapiSurface> _surface;
-    boost::uint64_t _creation_time;
+    std::shared_ptr<VaapiSurface> _surface;
+    std::uint64_t _creation_time;
 
     /// Transfer (and convert) VA surface to CPU image data
     bool transfer();
 
 public:
-    GnashVaapiImage(boost::shared_ptr<VaapiSurface> surface,
+    GnashVaapiImage(std::shared_ptr<VaapiSurface> surface,
             image::ImageType type);
     GnashVaapiImage(const GnashVaapiImage& o);
     ~GnashVaapiImage();
 
-    virtual void update(boost::shared_ptr<VaapiSurface> surface);
-    virtual void update(boost::uint8_t* data);
+    virtual void update(std::shared_ptr<VaapiSurface> surface);
+    virtual void update(std::uint8_t* data);
     virtual void update(const image::GnashImage& from);
 
     /// Get access to the underlying surface
     //
     /// @return     A pointer to the VA surface.
-    boost::shared_ptr<VaapiSurface> surface() const
+    std::shared_ptr<VaapiSurface> surface() const
         { return _surface; }
 
     /// Get access to the underlying data
diff --git a/libbase/GnashVaapiImageProxy.h b/libbase/GnashVaapiImageProxy.h
index fd3c389..9effad0 100644
--- a/libbase/GnashVaapiImageProxy.h
+++ b/libbase/GnashVaapiImageProxy.h
@@ -21,7 +21,6 @@
 #ifndef GNASH_GNASHVAAPIIMAGEPROXY_H
 #define GNASH_GNASHVAAPIIMAGEPROXY_H
 
-#include <boost/shared_ptr.hpp>
 
 namespace gnash {
 
@@ -33,10 +32,10 @@ class VaapiSurface;
 /// XXX: call it GnashRenderedVaapiImage instead?
 class DSOEXPORT GnashVaapiImageProxy
 {
-    /* XXX: Should Renderers use boost::shared_ptr<> we could simple
+    /* XXX: Should Renderers use std::shared_ptr<> we could simple
        derive from a GnashImageProxy base that would itself contain a
        shared pointer to the image */
-    boost::shared_ptr<VaapiSurface> _surface;
+    std::shared_ptr<VaapiSurface> _surface;
 
     /// X-position of the rendered image, in pixels
     const int _x;
@@ -63,7 +62,7 @@ public:
     /// Get access to the underlying surface
     //
     /// @return     A pointer to the VA surface.
-    boost::shared_ptr<VaapiSurface> surface() const
+    std::shared_ptr<VaapiSurface> surface() const
         { return _surface; }
 
     /// Get the rendered image's x position
diff --git a/libbase/GnashVaapiTexture.cpp b/libbase/GnashVaapiTexture.cpp
index 69ee528..52d7a51 100644
--- a/libbase/GnashVaapiTexture.cpp
+++ b/libbase/GnashVaapiTexture.cpp
@@ -39,7 +39,7 @@ GnashVaapiTexture::~GnashVaapiTexture()
 {
 }
 
-void GnashVaapiTexture::update(boost::shared_ptr<VaapiSurface> surface)
+void GnashVaapiTexture::update(std::shared_ptr<VaapiSurface> surface)
 {
     _surface->update(surface);
 }
diff --git a/libbase/GnashVaapiTexture.h b/libbase/GnashVaapiTexture.h
index acef86b..26b6d4a 100644
--- a/libbase/GnashVaapiTexture.h
+++ b/libbase/GnashVaapiTexture.h
@@ -31,7 +31,7 @@ class VaapiSurfaceGLX;
 
 /// OpenGL texture abstraction
 class DSOEXPORT GnashVaapiTexture : public GnashTexture {
-    std::auto_ptr<VaapiSurfaceGLX> _surface;
+    std::unique_ptr<VaapiSurfaceGLX> _surface;
 
 public:
     GnashVaapiTexture(unsigned int width, unsigned int height, 
@@ -44,7 +44,7 @@ public:
     /// unexpected things will happen.
     ///
     /// @param surface VA surface to copy data from.
-    void update(boost::shared_ptr<VaapiSurface> surface);
+    void update(std::shared_ptr<VaapiSurface> surface);
 };
 
 } // gnash namespace
diff --git a/libbase/IOChannel.cpp b/libbase/IOChannel.cpp
index 1cf6278..d9ba0bb 100644
--- a/libbase/IOChannel.cpp
+++ b/libbase/IOChannel.cpp
@@ -21,27 +21,25 @@
 
 #include "IOChannel.h"
 
-#include <boost/static_assert.hpp>
-
 namespace gnash
 {
 
-boost::uint32_t
+std::uint32_t
 IOChannel::read_le32() 
 {
-    // read_byte() is boost::uint8_t, so no masks with 0xff are required.
-    boost::uint32_t result = static_cast<boost::uint32_t>(read_byte());
-    result |= static_cast<boost::uint32_t>(read_byte()) << 8;
-    result |= static_cast<boost::uint32_t>(read_byte()) << 16;
-    result |= static_cast<boost::uint32_t>(read_byte()) << 24;
+    // read_byte() is std::uint8_t, so no masks with 0xff are required.
+    std::uint32_t result = static_cast<std::uint32_t>(read_byte());
+    result |= static_cast<std::uint32_t>(read_byte()) << 8;
+    result |= static_cast<std::uint32_t>(read_byte()) << 16;
+    result |= static_cast<std::uint32_t>(read_byte()) << 24;
     return(result);
 }
 
-boost::uint16_t
+std::uint16_t
 IOChannel::read_le16()
 {
-    boost::uint16_t result = static_cast<boost::uint16_t>(read_byte());
-    result |= static_cast<boost::uint16_t>(read_byte()) << 8;
+    std::uint16_t result = static_cast<std::uint16_t>(read_byte());
+    result |= static_cast<std::uint16_t>(read_byte()) << 8;
     return(result);
 }
 
@@ -61,24 +59,10 @@ IOChannel::read_string(char* dst, int max_length)
     return -1;
 }
 
-float
-IOChannel::read_float32()
-{
-    union {
-        float    f;
-        boost::uint32_t    i;
-    } u;
-
-    BOOST_STATIC_ASSERT(sizeof(u) == sizeof(u.i)) __attribute__((unused));
-    
-    u.i = read_le32();
-    return u.f;
-}
-
-boost::uint8_t
+std::uint8_t
 IOChannel::read_byte()
 {
-    boost::uint8_t u;
+    std::uint8_t u;
     if ( read(&u, 1) == -1 )
     {
         throw IOException("Could not read a single byte from input");
diff --git a/libbase/IOChannel.h b/libbase/IOChannel.h
index 50a76cd..a4cf468 100644
--- a/libbase/IOChannel.h
+++ b/libbase/IOChannel.h
@@ -22,7 +22,8 @@
 #define GNASH_IOCHANNEL_H
 
 #include <string>
-#include <boost/cstdint.hpp> // for boost int types
+#include <ios> // for std::streamsize
+#include <cstdint> // for boost int types
 
 #include "dsodefs.h" // DSOEXPORT
 #include "GnashException.h" // for IOException inheritance
@@ -49,19 +50,19 @@ public:
     //
     /// Throw IOException on error
     ///
-    boost::uint32_t read_le32();
+    std::uint32_t read_le32();
 
     /// Read a 16-bit word from a little-endian stream.
     //
     /// Throw IOException on error
     ///
-    boost::uint16_t read_le16();
+    std::uint16_t read_le16();
 
     /// Read a single byte from the stream
     //
     /// Throw IOException on error
     ///
-    boost::uint8_t read_byte();
+    std::uint8_t read_byte();
     
     /// Read the given number of bytes from the stream
     //
@@ -109,15 +110,6 @@ public:
     ///
     int    read_string(char* dst, int max_length);
     
-    /// Read a 32-bit float from a little-endian stream.
-    //
-    /// NOTE: this currently relies on host FP format being the
-        ///       same as the Flash one (presumably IEEE 754).
-    ///
-    /// Throw IOException on error
-    ///
-    float read_float32();
-
     /// Return current stream position
     //
     /// Throw IOException on error
diff --git a/libbase/ImageIterators.h b/libbase/ImageIterators.h
index 01ff835..54c4111 100644
--- a/libbase/ImageIterators.h
+++ b/libbase/ImageIterators.h
@@ -75,7 +75,7 @@ public:
     /// Writes a 32-bit unsigned value in ARGB byte order to the image
     //
     /// Take note of the different byte order!
-    const ARGB& operator=(boost::uint32_t pixel) const {
+    const ARGB& operator=(std::uint32_t pixel) const {
         switch (_t) {
             case TYPE_RGBA:
                 // alpha
@@ -91,8 +91,8 @@ public:
     }
     
     /// Convert to uint32_t in ARGB order
-    operator boost::uint32_t() const {
-        boost::uint32_t ret = 0xff000000;
+    operator std::uint32_t() const {
+        std::uint32_t ret = 0xff000000;
         switch (_t) {
             case TYPE_RGBA:
                 // alpha
diff --git a/libbase/Makefile.am b/libbase/Makefile.am
index 92f168f..5e572c4 100644
--- a/libbase/Makefile.am
+++ b/libbase/Makefile.am
@@ -45,7 +45,6 @@ libgnashbase_la_SOURCES = \
 	GnashImageJpeg.cpp \
 	GnashImageJpeg.h \
 	GnashNumeric.h \
-	GnashScopedPtr.h \
 	GnashSleep.h \
 	GnashSystemFDHeaders.h \
 	GnashSystemIOHeaders.h \
@@ -200,7 +199,6 @@ inst_HEADERS = \
 	tu_file.h \
 	IOChannel.h \
 	Socket.h \
-	GnashScopedPtr.h \
 	GnashSystemFDHeaders.h \
 	GnashSystemNetHeaders.h \
 	GnashSystemIOHeaders.h \
diff --git a/libbase/NamingPolicy.cpp b/libbase/NamingPolicy.cpp
index baa20f9..c7b782a 100644
--- a/libbase/NamingPolicy.cpp
+++ b/libbase/NamingPolicy.cpp
@@ -52,9 +52,9 @@ OverwriteExisting::operator()(const URL& url) const
 }
 
 
-IncrementalRename::IncrementalRename(const URL& baseURL)
+IncrementalRename::IncrementalRename(URL baseURL)
     :
-    _baseURL(baseURL)
+    _baseURL(std::move(baseURL))
 {
 }
 
diff --git a/libbase/NamingPolicy.h b/libbase/NamingPolicy.h
index 3d237a9..d23edd7 100644
--- a/libbase/NamingPolicy.h
+++ b/libbase/NamingPolicy.h
@@ -53,7 +53,7 @@ public:
 class DSOEXPORT IncrementalRename : public NamingPolicy
 {
 public:
-    IncrementalRename(const URL& baseURL);
+    IncrementalRename(URL baseURL);
     virtual std::string operator()(const URL& url) const;
     
 private:
diff --git a/libbase/NetworkAdapter.cpp b/libbase/NetworkAdapter.cpp
index 881f4f4..f7b060e 100644
--- a/libbase/NetworkAdapter.cpp
+++ b/libbase/NetworkAdapter.cpp
@@ -43,16 +43,16 @@ namespace gnash {
 
 // Stub for warning about access when no libcurl is defined.
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 NetworkAdapter::makeStream(const std::string& /*url*/, 
         const std::string& /*cachefile*/)
 {
     log_error(_("libcurl is not available, but "
                 "Gnash has attempted to use the curl adapter"));
-    return std::auto_ptr<IOChannel>();
+    return std::unique_ptr<IOChannel>();
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 NetworkAdapter::makeStream(const std::string& url,
         const std::string& /*postdata*/,
         const std::string& cachefile)
@@ -60,7 +60,7 @@ NetworkAdapter::makeStream(const std::string& url,
     return makeStream(url, cachefile);
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 NetworkAdapter::makeStream(const std::string& url,
            const std::string& /*postdata*/,
             const RequestHeaders& /*headers*/,
@@ -88,14 +88,9 @@ extern "C" {
 #include <cerrno>
 #include <cstdio> // cached data uses a *FILE
 #include <cstdlib> // std::getenv
+#include <mutex>
 
-#include <boost/version.hpp>
-#include <boost/assign/list_of.hpp>
-#include <boost/thread/mutex.hpp>
-
-#if BOOST_VERSION < 103500
-# include <boost/thread/detail/lock.hpp>
-#endif
+#include <boost/format.hpp>
 
 
 //#define GNASH_CURL_VERBOSE 1
@@ -109,25 +104,15 @@ namespace gnash {
 namespace {
 
 inline
-void lock(boost::mutex& mut)
+void lock(std::mutex& mut)
 {
-#if BOOST_VERSION < 103500
-    // see https://savannah.gnu.org/bugs/index.php?32579#comment7
-    boost::detail::thread::lock_ops<boost::mutex>::lock(mut);
-#else
     mut.lock();
-#endif
 }
 
 inline
-void unlock(boost::mutex& mut)
+void unlock(std::mutex& mut)
 {
-#if BOOST_VERSION < 103500
-    // see https://savannah.gnu.org/bugs/index.php?32579#comment7
-    boost::detail::thread::lock_ops<boost::mutex>::unlock(mut);
-#else
     mut.unlock();
-#endif
 }
 
 
@@ -173,13 +158,13 @@ private:
     CURLSH* _shandle;
 
     // mutex protecting share state
-    boost::mutex _shareMutex;
+    std::mutex _shareMutex;
 
     // mutex protecting shared cookies
-    boost::mutex _cookieMutex;
+    std::mutex _cookieMutex;
 
     // mutex protecting shared dns cache
-    boost::mutex _dnscacheMutex;
+    std::mutex _dnscacheMutex;
 
     /// Import cookies, if requested
     //
@@ -252,13 +237,13 @@ CurlSession::~CurlSession()
 		  curl_share_strerror(code));
         gnashSleep(1000000);
     }
-    _shandle = 0;
+    _shandle = nullptr;
     curl_global_cleanup();
 }
 
 CurlSession::CurlSession()
     :
-    _shandle(0),
+    _shandle(nullptr),
     _shareMutex(),
     _cookieMutex(),
     _dnscacheMutex()
@@ -788,7 +773,7 @@ CurlStreamFile::processMessages()
 void
 CurlStreamFile::init(const std::string& url, const std::string& cachefile)
 {
-    _customHeaders = 0;
+    _customHeaders = nullptr;
 
     _url = url;
     _running = 1;
@@ -999,12 +984,11 @@ CurlStreamFile::CurlStreamFile(const std::string& url, const std::string& vars,
     assert ( ! _customHeaders );
     _customHeaders = curl_slist_append(_customHeaders, "Expect:");
 
-    for (NetworkAdapter::RequestHeaders::const_iterator i = headers.begin(),
-	     e = headers.end(); i != e; ++i) {
+    for (const auto& header : headers) {
         // Check here to see whether header name is allowed.
-        if (!NetworkAdapter::isHeaderAllowed(i->first)) continue;
+        if (!NetworkAdapter::isHeaderAllowed(header.first)) continue;
         std::ostringstream os;
-        os << i->first << ": " << i->second;
+        os << header.first << ": " << header.second;
         _customHeaders = curl_slist_append(_customHeaders, os.str().c_str());
     }
 
@@ -1337,14 +1321,14 @@ CurlSession::exportCookies()
 // Exported interfaces
 //-------------------------------------------
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 NetworkAdapter::makeStream(const std::string& url, const std::string& cachefile)
 {
 #ifdef GNASH_CURL_VERBOSE
     log_debug("making curl stream for %s", url);
 #endif
 
-    std::auto_ptr<IOChannel> stream;
+    std::unique_ptr<IOChannel> stream;
 
     try {
         stream.reset(new CurlStreamFile(url, cachefile));
@@ -1355,7 +1339,7 @@ NetworkAdapter::makeStream(const std::string& url, const std::string& cachefile)
     return stream;
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 NetworkAdapter::makeStream(const std::string& url, const std::string& postdata,
         const std::string& cachefile)
 {
@@ -1363,7 +1347,7 @@ NetworkAdapter::makeStream(const std::string& url, const std::string& postdata,
     log_debug("making curl stream for %s", url);
 #endif
 
-    std::auto_ptr<IOChannel> stream;
+    std::unique_ptr<IOChannel> stream;
 
     try {
         stream.reset(new CurlStreamFile(url, postdata, cachefile));
@@ -1374,12 +1358,12 @@ NetworkAdapter::makeStream(const std::string& url, const std::string& postdata,
     return stream;
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 NetworkAdapter::makeStream(const std::string& url, const std::string& postdata,
         const RequestHeaders& headers, const std::string& cachefile)
 {
 
-    std::auto_ptr<IOChannel> stream;
+    std::unique_ptr<IOChannel> stream;
 
     try {
         stream.reset(new CurlStreamFile(url, postdata, headers, cachefile));
@@ -1395,38 +1379,39 @@ NetworkAdapter::makeStream(const std::string& url, const std::string& postdata,
 const NetworkAdapter::ReservedNames&
 NetworkAdapter::reservedNames()
 {
-    static const ReservedNames names = boost::assign::list_of
-    ("Accept-Ranges")
-    ("Age")
-    ("Allow")
-    ("Allowed")
-    ("Connection")
-    ("Content-Length")
-    ("Content-Location")
-    ("Content-Range")
-    ("ETag")
-    ("GET")
-    ("Host")
-    ("HEAD")
-    ("Last-Modified")
-    ("Locations")
-    ("Max-Forwards")
-    ("POST")
-    ("Proxy-Authenticate")
-    ("Proxy-Authorization")
-    ("Public")
-    ("Range")
-    ("Retry-After")
-    ("Server")
-    ("TE")
-    ("Trailer")
-    ("Transfer-Encoding")
-    ("Upgrade")
-    ("URI")
-    ("Vary")
-    ("Via")
-    ("Warning")
-    ("WWW-Authenticate");
+    static const ReservedNames names = {
+    "Accept-Ranges",
+    "Age",
+    "Allow",
+    "Allowed",
+    "Connection",
+    "Content-Length",
+    "Content-Location",
+    "Content-Range",
+    "ETag",
+    "GET",
+    "Host",
+    "HEAD",
+    "Last-Modified",
+    "Locations",
+    "Max-Forwards",
+    "POST",
+    "Proxy-Authenticate",
+    "Proxy-Authorization",
+    "Public",
+    "Range",
+    "Retry-After",
+    "Server",
+    "TE",
+    "Trailer",
+    "Transfer-Encoding",
+    "Upgrade",
+    "URI",
+    "Vary",
+    "Via",
+    "Warning",
+    "WWW-Authenticate"
+    };
 
     return names;
 }
diff --git a/libbase/NetworkAdapter.h b/libbase/NetworkAdapter.h
index 5e83afb..75a389b 100644
--- a/libbase/NetworkAdapter.h
+++ b/libbase/NetworkAdapter.h
@@ -47,7 +47,7 @@ public:
     /// from an url.
     //
     /// @param url      The url to fetch data from.
-    DSOEXPORT static std::auto_ptr<IOChannel> makeStream(
+    DSOEXPORT static std::unique_ptr<IOChannel> makeStream(
             const std::string& url, const std::string& cachefile);
 
     /// \brief
@@ -58,7 +58,7 @@ public:
     ///
     /// @param url      The url to post to.
     /// @param postdata The url-encoded post data
-    DSOEXPORT static std::auto_ptr<IOChannel> makeStream(
+    DSOEXPORT static std::unique_ptr<IOChannel> makeStream(
             const std::string& url, const std::string& postdata,
             const std::string& cachefile);
 
@@ -71,7 +71,7 @@ public:
     /// @param url      The url to post to.
     /// @param postdata The url-encoded post data
     /// @param headers  A RequestHeaders map of custom headers to send.
-    DSOEXPORT static std::auto_ptr<IOChannel> makeStream(const std::string& url,
+    DSOEXPORT static std::unique_ptr<IOChannel> makeStream(const std::string& url,
            const std::string& postdata, const RequestHeaders& headers,
            const std::string& cachefile);
 
@@ -108,7 +108,7 @@ public:
 private:
     /// \brief
     /// Variable to pass cookiefile path from command line to curl.
-    static std::string CookiesIn;
+    static DSOEXPORT std::string CookiesIn;
 
     static const ReservedNames& reservedNames();
 
diff --git a/libbase/Point2d.h b/libbase/Point2d.h
index c8e535d..6630980 100644
--- a/libbase/Point2d.h
+++ b/libbase/Point2d.h
@@ -26,7 +26,7 @@
 
 #include <ostream>
 #include <cmath>    // for sqrt()
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 namespace gnash {
 namespace geometry { 
@@ -40,20 +40,20 @@ class Point2d
 public:
 
 	/// The x coordinate
-	boost::int32_t  x;  // TWIPS
+	std::int32_t  x;  // TWIPS
 
 	/// The y coordinate
-	boost::int32_t  y;  // TWIPS
+	std::int32_t  y;  // TWIPS
 
 	/// Construct a Point2d with default x and y coordinates
-	Point2d()
+	constexpr Point2d()
 		:
 		x(0), y(0)
 	{
 	}
 
 	/// Construct a Point2d with given x and y ordinates
-	Point2d(boost::int32_t cx, boost::int32_t cy)
+	constexpr Point2d(std::int32_t cx, std::int32_t cy)
 		:
 		x(cx), y(cy)
 	{
@@ -67,8 +67,8 @@ public:
 	///
 	Point2d(const Point2d& p0, const Point2d& p1, float t)
 		:
-		x( p0.x + (boost::int32_t)((p1.x - p0.x) * t)),
-		y( p0.y + (boost::int32_t)((p1.y - p0.y) * t))
+		x( p0.x + (std::int32_t)((p1.x - p0.x) * t)),
+		y( p0.y + (std::int32_t)((p1.y - p0.y) * t))
 	{
 	}
 
@@ -76,7 +76,7 @@ public:
 	//
 	/// @return a reference to this instance
 	///
-	Point2d& setTo(const boost::int32_t cx, const boost::int32_t cy)
+	Point2d& setTo(const std::int32_t cx, const std::int32_t cy)
 	{
 		x = cx;  
         y = cy;
@@ -93,31 +93,31 @@ public:
 	///
 	Point2d& setTo(const Point2d& p0, const Point2d& p1, float t)
 	{
-		x = p0.x + (boost::int32_t)((p1.x - p0.x) * t);
-		y = p0.y + (boost::int32_t)((p1.y - p0.y) * t);
+		x = p0.x + (std::int32_t)((p1.x - p0.x) * t);
+		y = p0.y + (std::int32_t)((p1.y - p0.y) * t);
 		return *this;
 	}
 
 	/// Return square distance between two given points.
 	static
-	boost::int64_t squareDistance(const Point2d& p0, const Point2d& p1)
+	std::int64_t squareDistance(const Point2d& p0, const Point2d& p1)
 	{
-		boost::int64_t hside = p1.x - p0.x;
-		boost::int64_t vside = p1.y - p0.y;
+		std::int64_t hside = p1.x - p0.x;
+		std::int64_t vside = p1.y - p0.y;
 
 		return hside*hside + vside*vside;
 	}
 
 	/// Return square distance between this and the given point
-	boost::int64_t squareDistance(const Point2d& p) const
+	std::int64_t squareDistance(const Point2d& p) const
 	{
 		return squareDistance(*this, p);
 	}
 
 	/// Return distance between this and the given point
-	boost::int32_t distance(const Point2d& p) const
+	std::int32_t distance(const Point2d& p) const
 	{
-	    return (boost::int32_t)( std::sqrt( static_cast<double>(squareDistance(p)) ) );
+	    return (std::int32_t)( std::sqrt( static_cast<double>(squareDistance(p)) ) );
 	}
 
 	bool operator== (const Point2d& p) const
diff --git a/libbase/RTMP.cpp b/libbase/RTMP.cpp
index 068fc11..a44c87b 100644
--- a/libbase/RTMP.cpp
+++ b/libbase/RTMP.cpp
@@ -45,7 +45,7 @@ namespace {
 
     bool sendBytesReceived(RTMP* r);
 
-    void handleMetadata(RTMP& r, const boost::uint8_t *payload,
+    void handleMetadata(RTMP& r, const std::uint8_t *payload,
             unsigned int len);
     void handleChangeChunkSize(RTMP& r, const RTMPPacket& packet);
     void handleControl(RTMP& r, const RTMPPacket& packet);
@@ -53,16 +53,12 @@ namespace {
     void handleClientBW(RTMP& r, const RTMPPacket& packet);
     
     void setupInvokePacket(RTMPPacket& packet);
-    boost::uint32_t getUptime();
-
-    boost::int32_t decodeInt32LE(const boost::uint8_t* c);
-    int encodeInt32LE(boost::uint8_t *output, int nVal);
-    unsigned int decodeInt24(const boost::uint8_t* c);
-    boost::uint8_t* encodeInt16(boost::uint8_t *output, boost::uint8_t *outend,
-            short nVal);
-    boost::uint8_t* encodeInt24(boost::uint8_t *output, boost::uint8_t *outend,
-            int nVal);
-    boost::uint8_t* encodeInt32(boost::uint8_t *output, boost::uint8_t *outend,
+    std::uint32_t getUptime();
+
+    std::int32_t decodeInt32LE(const std::uint8_t* c);
+    int encodeInt32LE(std::uint8_t *output, int nVal);
+    unsigned int decodeInt24(const std::uint8_t* c);
+    std::uint8_t* encodeInt24(std::uint8_t *output, std::uint8_t *outend,
             int nVal);
 
     static const int packetSize[] = { 12, 8, 4, 1 };
@@ -76,7 +72,7 @@ namespace {
 /// TODO: do this properly (it's currently not very random).
 struct RandomByte
 {
-    boost::uint8_t operator()() const {
+    std::uint8_t operator()() const {
         return std::rand() % 256;
     }
 };
@@ -115,8 +111,8 @@ private:
     bool stage3();
 
     Socket _socket;
-    std::vector<boost::uint8_t> _sendBuf;
-    std::vector<boost::uint8_t> _recvBuf;
+    std::vector<std::uint8_t> _sendBuf;
+    std::vector<std::uint8_t> _recvBuf;
     bool _error;
     bool _complete;
     size_t _stage;
@@ -209,10 +205,10 @@ RTMP::connect(const URL& url)
     const std::string& p = url.port();
 
     // Default port.
-    boost::uint16_t port = 1935;
+    std::uint16_t port = 1935;
     if (!p.empty()) {
         try {
-            port = boost::lexical_cast<boost::uint16_t>(p);
+            port = boost::lexical_cast<std::uint16_t>(p);
         }
         catch (const boost::bad_lexical_cast&) {}
     }
@@ -360,7 +356,7 @@ RTMP::handlePacket(const RTMPPacket& packet)
 }
 
 int
-RTMP::readSocket(boost::uint8_t* buffer, int n)
+RTMP::readSocket(std::uint8_t* buffer, int n)
 {
 
     assert(n >= 0);
@@ -431,8 +427,8 @@ RTMP::readPacketHeader(RTMPPacket& packet)
       
     RTMPHeader& hr = packet.header;
 
-    boost::uint8_t hbuf[RTMPHeader::headerSize] = { 0 };
-    boost::uint8_t* header = hbuf;
+    std::uint8_t hbuf[RTMPHeader::headerSize] = { 0 };
+    std::uint8_t* header = hbuf;
   
     // The first read may fail, but otherwise we expect a complete header.
     if (readSocket(hbuf, 1) == 0) {
@@ -465,7 +461,7 @@ RTMP::readPacketHeader(RTMPPacket& packet)
              return false;
         }
       
-        const boost::uint32_t tmp = (hbuf[2] << 8) + hbuf[1];
+        const std::uint32_t tmp = (hbuf[2] << 8) + hbuf[1];
         hr.channel = tmp + 64;
         log_debug("%s, channel: %0x", __FUNCTION__, hr.channel);
         header += 2;
@@ -497,12 +493,9 @@ RTMP::readPacketHeader(RTMPPacket& packet)
         return false;
     }
 
-    // nSize is predicted size - 1. Add what we've read already.
-    int hSize = nSize + (header - hbuf);
-
     if (nSize >= 3) {
 
-        const boost::uint32_t timestamp = decodeInt24(header);
+        const std::uint32_t timestamp = decodeInt24(header);
 
         // Make our packet timestamp absolute. If the value is 0xffffff,
         // the absolute value comes later.
@@ -542,8 +535,6 @@ RTMP::readPacketHeader(RTMPPacket& packet)
               return false;
             }
           hr._timestamp = amf::readNetworkLong(header+nSize);
-          hSize += 4;
-        
     }
         
     const size_t bufSize = hr.dataSize + RTMPHeader::headerSize;
@@ -596,7 +587,7 @@ RTMP::sendPacket(RTMPPacket& packet)
     hr.dataSize = payloadSize(packet);
 
     // This is the timestamp for our message.
-    const boost::uint32_t uptime = getUptime();
+    const std::uint32_t uptime = getUptime();
     
     // Look at the previous packet on the channel.
     bool prev = hasPacket(CHANNELS_OUT, hr.channel);
@@ -619,7 +610,7 @@ RTMP::sendPacket(RTMPPacket& packet)
 
         const RTMPPacket& prevPacket = getPacket(CHANNELS_OUT, hr.channel);
         const RTMPHeader& oldh = prevPacket.header;
-        const boost::uint32_t prevTimestamp = oldh._timestamp;
+        const std::uint32_t prevTimestamp = oldh._timestamp;
 
         // If this timestamp is later than the other and the difference fits
         // in 3 bytes, encode a relative one.
@@ -653,10 +644,10 @@ RTMP::sendPacket(RTMPPacket& packet)
     int nSize = packetSize[hr.headerType];
   
     int hSize = nSize;
-    boost::uint8_t* header;
-    boost::uint8_t* hptr;
-    boost::uint8_t* hend;
-    boost::uint8_t c;
+    std::uint8_t* header;
+    std::uint8_t* hptr;
+    std::uint8_t* hend;
+    std::uint8_t c;
 
     // If there is a payload, the same buffer is used to write the header.
     // Otherwise a separate buffer is used. But as we write them separately
@@ -700,7 +691,7 @@ RTMP::sendPacket(RTMPPacket& packet)
 
     if (hr.headerType == RTMP_PACKET_SIZE_LARGE && hr._timestamp >= 0xffffff) {
         // Signify that the extended timestamp field is present.
-        const boost::uint32_t t = 0xffffff;
+        const std::uint32_t t = 0xffffff;
         hptr = encodeInt24(hptr, hend, t);
     }
     else if (hr.headerType != RTMP_PACKET_SIZE_MINIMUM) { 
@@ -726,7 +717,7 @@ RTMP::sendPacket(RTMPPacket& packet)
     }
 
     nSize = hr.dataSize;
-    boost::uint8_t *buffer = payloadData(packet);
+    std::uint8_t *buffer = payloadData(packet);
     int nChunkSize = _outChunkSize;
 
     std::string hx = hexify(header, payloadEnd(packet) - header, false);
@@ -741,7 +732,7 @@ RTMP::sendPacket(RTMPPacket& packet)
             if (_socket.write(header, chunk) != chunk) {
                 return false;
             }
-            header = NULL;
+            header = nullptr;
             hSize = 0;
         }
       
@@ -776,8 +767,8 @@ RTMP::sendPacket(RTMPPacket& packet)
     /* we invoked a remote method */
     if (hr.packetType == PACKET_TYPE_INVOKE) {
         assert(payloadData(packet)[0] == amf::STRING_AMF0);
-        const boost::uint8_t* pos = payloadData(packet) + 1;
-        const boost::uint8_t* end = payloadEnd(packet);
+        const std::uint8_t* pos = payloadData(packet) + 1;
+        const std::uint8_t* end = payloadEnd(packet);
         const std::string& s = amf::readString(pos, end);
         log_debug("Calling remote method %s", s);
     }
@@ -823,9 +814,9 @@ HandShaker::HandShaker(Socket& s)
     _sendBuf[0] = 0x03;
     
     // TODO: do this properly.
-    boost::uint32_t uptime = htonl(getUptime());
+    std::uint32_t uptime = htonl(getUptime());
 
-    boost::uint8_t* ourSig = &_sendBuf.front() + 1;
+    std::uint8_t* ourSig = &_sendBuf.front() + 1;
     std::memcpy(ourSig, &uptime, 4);
     std::fill_n(ourSig + 4, 4, 0);
 
@@ -902,10 +893,10 @@ HandShaker::stage1()
 	        _recvBuf[0], _sendBuf[0]);
     }
     
-    const boost::uint8_t* serverSig = &_recvBuf.front() + 1;
+    const std::uint8_t* serverSig = &_recvBuf.front() + 1;
 
     // decode server response
-    boost::uint32_t suptime;
+    std::uint32_t suptime;
     std::memcpy(&suptime, serverSig, 4);
     suptime = ntohl(suptime);
 
@@ -945,8 +936,8 @@ HandShaker::stage3()
     
     assert(got == sigSize);
 
-    const boost::uint8_t* serverSig = &_recvBuf.front();
-    const boost::uint8_t* ourSig = &_sendBuf.front() + 1;
+    const std::uint8_t* serverSig = &_recvBuf.front();
+    const std::uint8_t* ourSig = &_sendBuf.front() + 1;
 
     const bool match = std::equal(serverSig, serverSig + sigSize, ourSig);
 
@@ -1018,7 +1009,7 @@ sendBytesReceived(RTMP* r)
 
 
 void
-handleMetadata(RTMP& /*r*/, const boost::uint8_t* /* payload*/, 
+handleMetadata(RTMP& /*r*/, const std::uint8_t* /* payload*/,
         unsigned int /*len*/)
 {
     return;
@@ -1095,7 +1086,7 @@ handleControl(RTMP& r, const RTMPPacket& packet)
 void
 handleServerBW(RTMP& r, const RTMPPacket& packet)
 {
-    const boost::uint32_t bw = amf::readNetworkLong(payloadData(packet));
+    const std::uint32_t bw = amf::readNetworkLong(payloadData(packet));
     log_debug("Server bandwidth is %s", bw);
     r.setServerBandwidth(bw);
 }
@@ -1103,7 +1094,7 @@ handleServerBW(RTMP& r, const RTMPPacket& packet)
 void
 handleClientBW(RTMP& r, const RTMPPacket& packet)
 {
-    const boost::uint32_t bw = amf::readNetworkLong(payloadData(packet));
+    const std::uint32_t bw = amf::readNetworkLong(payloadData(packet));
 
     r.setBandwidth(bw);
 
@@ -1115,14 +1106,14 @@ handleClientBW(RTMP& r, const RTMPPacket& packet)
 
 
 
-boost::int32_t
-decodeInt32LE(const boost::uint8_t* c)
+std::int32_t
+decodeInt32LE(const std::uint8_t* c)
 {
     return (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0];
 }
 
 int
-encodeInt32LE(boost::uint8_t *output, int nVal)
+encodeInt32LE(std::uint8_t *output, int nVal)
 {
     output[0] = nVal;
     nVal >>= 8;
@@ -1145,27 +1136,17 @@ setupInvokePacket(RTMPPacket& packet)
 }
 
 unsigned int
-decodeInt24(const boost::uint8_t *c)
+decodeInt24(const std::uint8_t *c)
 {
     unsigned int val;
     val = (c[0] << 16) | (c[1] << 8) | c[2];
     return val;
 }
 
-boost::uint8_t*
-encodeInt16(boost::uint8_t *output, boost::uint8_t *outend, short nVal)
+std::uint8_t*
+encodeInt24(std::uint8_t *output, std::uint8_t *outend, int nVal)
 {
-    if (output+2 > outend) return NULL;
-  
-    output[1] = nVal & 0xff;
-    output[0] = nVal >> 8;
-    return output + 2;
-}
-
-boost::uint8_t*
-encodeInt24(boost::uint8_t *output, boost::uint8_t *outend, int nVal)
-{
-    if (output + 3 > outend) return NULL;
+    if (output + 3 > outend) return nullptr;
 
     output[2] = nVal & 0xff;
     output[1] = nVal >> 8;
@@ -1173,29 +1154,23 @@ encodeInt24(boost::uint8_t *output, boost::uint8_t *outend, int nVal)
     return output+3;
 }
 
-boost::uint8_t*
-encodeInt32(boost::uint8_t *output, boost::uint8_t *outend, int nVal)
-{
-    if (output+4 > outend) return NULL;
-
-    output[3] = nVal & 0xff;
-    output[2] = nVal >> 8;
-    output[1] = nVal >> 16;
-    output[0] = nVal >> 24;
-    return output + 4;
-}
-
-boost::uint32_t
+std::uint32_t
 getUptime()
 {
+    // This function returns the uptime in milliseconds, which necessarily
+    // overflows uint32_t after ~50 days. Because the result is used for
+    // timestamping this is not a big problem, assuming a single RTMP session
+    // won't last that long. We ensure the overflow happens in a manner
+    // avoiding undefined behaviour.
+
 #if !defined(_WIN32) && !defined(__amigaos4__)
     struct tms t;
-    return times(&t) * 1000 / sysconf(_SC_CLK_TCK);
+    return times(&t) * (1000UL /  sysconf(_SC_CLK_TCK));
 #elif defined(__amigaos4__)
     struct tms t;
-    return times(&t) * 1000 / 50;
+    return times(&t) * (1000UL / 50);
 #else
-    return std::clock() * 100 / CLOCKS_PER_SEC;   
+    return std::clock() * (100UL / CLOCKS_PER_SEC);
 #endif
 }
 
diff --git a/libbase/RTMP.h b/libbase/RTMP.h
index dc6c536..0eacf87 100644
--- a/libbase/RTMP.h
+++ b/libbase/RTMP.h
@@ -19,9 +19,8 @@
 #ifndef GNASH_RTMP_H
 #define GNASH_RTMP_H
 
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <cstdint>
+#include <memory>
 #include <deque>
 #include <map>
 
@@ -172,10 +171,10 @@ struct RTMPHeader
     //
     /// This is encoded either as in the 3-byte relative timestamp field or the
     /// 4 byte extended (absolute) timestamp field.
-    boost::uint32_t _timestamp;
+    std::uint32_t _timestamp;
 
     /// This seems to be used for NetStream.play.
-    boost::uint32_t _streamID;
+    std::uint32_t _streamID;
 
     size_t channel;
 
@@ -217,7 +216,7 @@ struct RTMPPacket
     //
     /// This always includes at least the header. Storage for the message
     /// payload is added as necessary.
-    boost::shared_ptr<SimpleBuffer> buffer;
+    std::shared_ptr<SimpleBuffer> buffer;
 
     size_t bytesRead;
 };
@@ -259,7 +258,7 @@ payloadSize(const RTMPPacket& p)
 }
 
 /// Access the payload data section of the buffer.
-inline boost::uint8_t*
+inline std::uint8_t*
 payloadData(RTMPPacket& p)
 {
     assert(hasPayload(p));
@@ -268,7 +267,7 @@ payloadData(RTMPPacket& p)
 }
 
 /// Access the payload data section of the buffer.
-inline const boost::uint8_t*
+inline const std::uint8_t*
 payloadData(const RTMPPacket& p)
 {
     assert(hasPayload(p));
@@ -281,7 +280,7 @@ payloadData(const RTMPPacket& p)
 /// Note that this is only valid for packets we create, and for packets
 /// we have fully read. Stored packets that have not yet received all data
 /// have allocated space that has not yet been written.
-inline const boost::uint8_t*
+inline const std::uint8_t*
 payloadEnd(const RTMPPacket& p)
 {
     assert(hasPayload(p));
@@ -413,9 +412,9 @@ struct DSOEXPORT RTMP
     /// TODO: this returns the whole RTMP message, which is ugly. And it
     /// only returns one at time, and can return a null pointer. We need
     /// a better way to retrieve the messages.
-    boost::shared_ptr<SimpleBuffer> getMessage() {
-        if (_messageQueue.empty()) return boost::shared_ptr<SimpleBuffer>();
-        boost::shared_ptr<SimpleBuffer> b = _messageQueue.front();
+    std::shared_ptr<SimpleBuffer> getMessage() {
+        if (_messageQueue.empty()) return std::shared_ptr<SimpleBuffer>();
+        std::shared_ptr<SimpleBuffer> b = _messageQueue.front();
         _messageQueue.pop_front();
         return b;
     }
@@ -425,9 +424,9 @@ struct DSOEXPORT RTMP
     /// TODO: this returns the whole RTMP message, which is ugly. And it
     /// only returns one at time, and can return a null pointer. We need
     /// a better way to retrieve the frames.
-    boost::shared_ptr<SimpleBuffer> getFLVFrame() {
-        if (_flvQueue.empty()) return boost::shared_ptr<SimpleBuffer>();
-        boost::shared_ptr<SimpleBuffer> b = _flvQueue.front();
+    std::shared_ptr<SimpleBuffer> getFLVFrame() {
+        if (_flvQueue.empty()) return std::shared_ptr<SimpleBuffer>();
+        std::shared_ptr<SimpleBuffer> b = _flvQueue.front();
         _flvQueue.pop_front();
         return b;
     }
@@ -436,7 +435,7 @@ struct DSOEXPORT RTMP
     void handlePacket(const RTMPPacket& packet);
     
     /// Read from the socket.
-    int readSocket(boost::uint8_t* dst, int num);
+    int readSocket(std::uint8_t* dst, int num);
 
     /// Send an RTMPPacket on the connection.
     bool sendPacket(RTMPPacket& packet);
@@ -444,28 +443,28 @@ struct DSOEXPORT RTMP
     /// Store the server bandwidth
     //
     /// Not sure why we need this.
-    void setServerBandwidth(boost::uint32_t bw) {
+    void setServerBandwidth(std::uint32_t bw) {
         _serverBandwidth = bw;
     }
 
     /// Get the stored server bandwidth.
-    boost::uint32_t serverBandwidth() const {
+    std::uint32_t serverBandwidth() const {
         return _serverBandwidth;
     }
 
     /// Store our bandwidth
-    void setBandwidth(boost::uint32_t bw) {
+    void setBandwidth(std::uint32_t bw) {
         _bandwidth = bw;
     }
 
     /// Get our bandwidth.
-    boost::uint32_t bandwidth() const {
+    std::uint32_t bandwidth() const {
         return _bandwidth;
     }
 
     int _inChunkSize;
     int m_mediaChannel;
-    boost::uint8_t m_nClientBW2;
+    std::uint8_t m_nClientBW2;
     size_t _bytesIn;
     size_t _bytesInSent;
 
@@ -513,19 +512,19 @@ private:
     /// A set of channels for sending packets.
     ChannelSet _outChannels;
     
-    std::deque<boost::shared_ptr<SimpleBuffer> > _messageQueue;
-    std::deque<boost::shared_ptr<SimpleBuffer> > _flvQueue;
+    std::deque<std::shared_ptr<SimpleBuffer> > _messageQueue;
+    std::deque<std::shared_ptr<SimpleBuffer> > _flvQueue;
 
     /// Stored server bandwidth (reported by server).
-    boost::uint32_t _serverBandwidth;
+    std::uint32_t _serverBandwidth;
 
     /// Stored client bandwidth (ours), reported by server.
-    boost::uint32_t _bandwidth;
+    std::uint32_t _bandwidth;
 
     /// Chunk size for sending.
     size_t _outChunkSize;
 
-    boost::scoped_ptr<HandShaker> _handShaker;
+    std::unique_ptr<HandShaker> _handShaker;
 
     bool _connected;
 
@@ -535,7 +534,7 @@ private:
     //
     /// This is not the same as a non-ready packet. It applies only to packets
     /// waiting for payload data.
-    boost::scoped_ptr<RTMPPacket> _incompletePacket;
+    std::unique_ptr<RTMPPacket> _incompletePacket;
 
 };
 
diff --git a/libbase/Range2d.h b/libbase/Range2d.h
index c1cac0b..5cffc7e 100644
--- a/libbase/Range2d.h
+++ b/libbase/Range2d.h
@@ -28,6 +28,7 @@
 #include <algorithm>
 #include <cassert> // for inlines
 #include <cmath> // for floor / ceil
+#include <cstdint>
 
 namespace gnash {
 
@@ -51,6 +52,13 @@ enum RangeKind {
 	worldRange
 };
 
+namespace detail {
+    template <typename U> struct Promote { typedef U type; };
+    template <> struct Promote<float> { typedef double type; };
+    template <> struct Promote<int> { typedef std::int64_t type; };
+    template <> struct Promote<unsigned int> { typedef std::uint64_t type; };
+}
+
 /// 2d Range template class
 //
 /// The class stores 4 values of the type specified
@@ -183,6 +191,8 @@ public:
 	{
 		_xmin = std::numeric_limits<T>::max();
 		_xmax = std::numeric_limits<T>::min();
+		_ymin = 0;
+		_ymax = 0;
 		return *this;
 	}
 
@@ -204,7 +214,7 @@ public:
 
 	/// Set the Range2d to the WORLD value
 	//
-	/// This is implemented using the minimun and maximun
+	/// This is implemented using the minimum and maximum
 	/// values of the parameter type.
 	///
 	/// See RangeType::worldRange
@@ -215,6 +225,8 @@ public:
 	{
 		_xmin = std::numeric_limits<T>::min();
 		_xmax = std::numeric_limits<T>::max();
+		_ymin = 0;
+		_ymax = 0;
 		return *this;
 	}
 
@@ -509,7 +521,9 @@ public:
 	{
 		if ( isNull() || isWorld() || amount==0 ) return *this;
 
-		// NOTE: triggers a compiler warning when T is an unsigned type
+		// NOTE: this trigger a compiler warning when T is an
+		//       unsigned type (Coverity CID 1154656 -
+		//       logically dead code)
 		if ( amount < 0 ) return shrinkBy(-amount);
 
 		T newxmin = _xmin - amount;
@@ -560,8 +574,9 @@ public:
 	{
 		if ( isNull() || isWorld() || amount==0 ) return *this;
 
-		// NOTE: whith will likely trigger a compiler
-		//       warning when T is an unsigned type
+		// NOTE: this trigger a compiler warning when T is an
+		//       unsigned type (Coverity CID 1154655 -
+		//       logically dead code)
 		if ( amount < 0 ) return growBy(-amount);
 
 		// Turn this range into the NULL range
@@ -620,16 +635,19 @@ public:
 		assert ( isFinite() );
 		return _ymax;
 	}
-	
-	/// Get area (width*height)
-    ///  
-	T getArea() const {
-        assert ( !isWorld() );
-        if ( isNull() ) return 0;
-        return (_xmax - _xmin) * (_ymax - _ymin);
-        // this implementation is for float types, see specialization below
-        // for ints... 
-    } 
+
+
+        /// Get area (width*height)
+        //
+        typename detail::Promote<T>::type
+        getArea() const {
+            assert ( !isWorld() );
+            if ( isNull() ) return 0;
+            return static_cast<typename detail::Promote<T>::type>(_xmax - _xmin)
+                   * (_ymax - _ymin);
+            // this implementation is for float types, see specialization below
+            // for ints...
+        }
 
 	/// Expand this range to include the given Range2d
 	//
@@ -816,23 +834,27 @@ Range2d<unsigned int>::roundMax(float max) const
 //
 /// Add one.
 ///
-template<> inline int
+template<> inline
+detail::Promote<int>::type
 Range2d<int>::getArea() const
 {
     assert ( !isWorld() );
     if ( isNull() ) return 0;
-    return (_xmax - _xmin + 1) * (_ymax - _ymin + 1);
+    return static_cast<detail::Promote<int>::type>(_xmax - _xmin + 1) *
+               (_ymax - _ymin + 1);
 }
 
 /// Specialization of area value for unsigned int type.
 //
 /// Add one.
 ///
-template<> inline unsigned int
+template<> inline
+detail::Promote<unsigned int>::type
 Range2d<unsigned int>::getArea() const
 {
     assert ( isFinite() );
-    return (_xmax - _xmin + 1) * (_ymax - _ymin + 1);
+    return static_cast<detail::Promote<unsigned int>::type>(_xmax - _xmin + 1) *
+              (_ymax - _ymin + 1);
 }
 
 
diff --git a/libbase/SWFCtype.cpp b/libbase/SWFCtype.cpp
index b1e7104..0783f00 100644
--- a/libbase/SWFCtype.cpp
+++ b/libbase/SWFCtype.cpp
@@ -21,16 +21,15 @@
 #include "SWFCtype.h"
 
 #include <locale>
-#include <boost/assign/list_of.hpp>
 #include <map>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "log.h"
 
 namespace gnash {
 
 namespace {
-    typedef std::map<boost::uint16_t, boost::uint16_t> CharMap;
+    typedef std::map<std::uint16_t, std::uint16_t> CharMap;
     const CharMap& lowerMap();
     const CharMap& upperMap();
 }
@@ -177,90 +176,91 @@ namespace {
 const CharMap&
 upperMap()
 {
-    static const CharMap upper = boost::assign::map_list_of
-        (181, 924)
-        (255, 376)
-        (305, 73)
-        (383, 83)
-        (392, 391)
-        (396, 395)
-        (402, 401)
-        (405, 502)
-        (409, 408)
-        (424, 423)
-        (429, 428)
-        (432, 431)
-        (441, 440)
-        (445, 444)
-        (447, 503)
-        (453, 452)
-        (454, 452)
-        (456, 455)
-        (457, 455)
-        (459, 458)
-        (460, 458)
-        (477, 398)
-        (498, 497)
-        (499, 497)
-        (501, 500)
-        (595, 385)
-        (596, 390)
-        (598, 393)
-        (599, 394)
-        (601, 399)
-        (603, 400)
-        (608, 403)
-        (611, 404)
-        (616, 407)
-        (617, 406)
-        (623, 412)
-        (626, 413)
-        (629, 415)
-        (640, 422)
-        (643, 425)
-        (648, 430)
-        (650, 433)
-        (651, 434)
-        (658, 439)
-        (837, 921)
-        (940, 902)
-        (962, 931)
-        (972, 908)
-        (973, 910)
-        (974, 911)
-        (976, 914)
-        (977, 920)
-        (981, 934)
-        (982, 928)
-        (1008, 922)
-        (1009, 929)
-        (1010, 931)
-        (1013, 917)
-        (1224, 1223)
-        (1228, 1227)
-        (1273, 1272)
-        (7835, 7776)
-        (8048, 8122)
-        (8049, 8123)
-        (8054, 8154)
-        (8055, 8155)
-        (8056, 8184)
-        (8057, 8185)
-        (8058, 8170)
-        (8059, 8171)
-        (8060, 8186)
-        (8061, 8187)
-        (8112, 8120)
-        (8113, 8121)
-        (8115, 8124)
-        (8126, 921)
-        (8131, 8140)
-        (8144, 8152)
-        (8145, 8153)
-        (8160, 8168)
-        (8161, 8169)
-        (8165, 8172)
-        (8179, 8188);
+    static const CharMap upper = {
+        {181, 924},
+        {255, 376},
+        {305, 73},
+        {383, 83},
+        {392, 391},
+        {396, 395},
+        {402, 401},
+        {405, 502},
+        {409, 408},
+        {424, 423},
+        {429, 428},
+        {432, 431},
+        {441, 440},
+        {445, 444},
+        {447, 503},
+        {453, 452},
+        {454, 452},
+        {456, 455},
+        {457, 455},
+        {459, 458},
+        {460, 458},
+        {477, 398},
+        {498, 497},
+        {499, 497},
+        {501, 500},
+        {595, 385},
+        {596, 390},
+        {598, 393},
+        {599, 394},
+        {601, 399},
+        {603, 400},
+        {608, 403},
+        {611, 404},
+        {616, 407},
+        {617, 406},
+        {623, 412},
+        {626, 413},
+        {629, 415},
+        {640, 422},
+        {643, 425},
+        {648, 430},
+        {650, 433},
+        {651, 434},
+        {658, 439},
+        {837, 921},
+        {940, 902},
+        {962, 931},
+        {972, 908},
+        {973, 910},
+        {974, 911},
+        {976, 914},
+        {977, 920},
+        {981, 934},
+        {982, 928},
+        {1008, 922},
+        {1009, 929},
+        {1010, 931},
+        {1013, 917},
+        {1224, 1223},
+        {1228, 1227},
+        {1273, 1272},
+        {7835, 7776},
+        {8048, 8122},
+        {8049, 8123},
+        {8054, 8154},
+        {8055, 8155},
+        {8056, 8184},
+        {8057, 8185},
+        {8058, 8170},
+        {8059, 8171},
+        {8060, 8186},
+        {8061, 8187},
+        {8112, 8120},
+        {8113, 8121},
+        {8115, 8124},
+        {8126, 921},
+        {8131, 8140},
+        {8144, 8152},
+        {8145, 8153},
+        {8160, 8168},
+        {8161, 8169},
+        {8165, 8172},
+        {8179, 8188}
+    };
 
     return upper;
 }
@@ -268,77 +268,78 @@ upperMap()
 const CharMap&
 lowerMap()
 {
-    static const CharMap lower = boost::assign::map_list_of
-        (304, 105)
-        (376, 255)
-        (385, 595)
-        (390, 596)
-        (391, 392)
-        (393, 598)
-        (394, 599)
-        (395, 396)
-        (398, 477)
-        (399, 601)
-        (400, 603)
-        (401, 402)
-        (403, 608)
-        (404, 611)
-        (406, 617)
-        (407, 616)
-        (408, 409)
-        (412, 623)
-        (413, 626)
-        (415, 629)
-        (422, 640)
-        (423, 424)
-        (425, 643)
-        (428, 429)
-        (430, 648)
-        (431, 432)
-        (433, 650)
-        (434, 651)
-        (439, 658)
-        (440, 441)
-        (444, 445)
-        (452, 454)
-        (453, 454)
-        (455, 457)
-        (456, 457)
-        (458, 460)
-        (497, 499)
-        (502, 405)
-        (503, 447)
-        (902, 940)
-        (908, 972)
-        (910, 973)
-        (911, 974)
-        (1012, 952)
-        (1223, 1224)
-        (1227, 1228)
-        (1272, 1273)
-        (8120, 8112)
-        (8121, 8113)
-        (8122, 8048)
-        (8123, 8049)
-        (8124, 8115)
-        (8140, 8131)
-        (8152, 8144)
-        (8153, 8145)
-        (8154, 8054)
-        (8155, 8055)
-        (8168, 8160)
-        (8169, 8161)
-        (8170, 8058)
-        (8171, 8059)
-        (8172, 8165)
-        (8184, 8056)
-        (8185, 8057)
-        (8186, 8060)
-        (8187, 8061)
-        (8188, 8179)
-        (8486, 969)
-        (8490, 107)
-        (8491, 229);
+    static const CharMap lower = {
+        {304, 105},
+        {376, 255},
+        {385, 595},
+        {390, 596},
+        {391, 392},
+        {393, 598},
+        {394, 599},
+        {395, 396},
+        {398, 477},
+        {399, 601},
+        {400, 603},
+        {401, 402},
+        {403, 608},
+        {404, 611},
+        {406, 617},
+        {407, 616},
+        {408, 409},
+        {412, 623},
+        {413, 626},
+        {415, 629},
+        {422, 640},
+        {423, 424},
+        {425, 643},
+        {428, 429},
+        {430, 648},
+        {431, 432},
+        {433, 650},
+        {434, 651},
+        {439, 658},
+        {440, 441},
+        {444, 445},
+        {452, 454},
+        {453, 454},
+        {455, 457},
+        {456, 457},
+        {458, 460},
+        {497, 499},
+        {502, 405},
+        {503, 447},
+        {902, 940},
+        {908, 972},
+        {910, 973},
+        {911, 974},
+        {1012, 952},
+        {1223, 1224},
+        {1227, 1228},
+        {1272, 1273},
+        {8120, 8112},
+        {8121, 8113},
+        {8122, 8048},
+        {8123, 8049},
+        {8124, 8115},
+        {8140, 8131},
+        {8152, 8144},
+        {8153, 8145},
+        {8154, 8054},
+        {8155, 8055},
+        {8168, 8160},
+        {8169, 8161},
+        {8170, 8058},
+        {8171, 8059},
+        {8172, 8165},
+        {8184, 8056},
+        {8185, 8057},
+        {8186, 8060},
+        {8187, 8061},
+        {8188, 8179},
+        {8486, 969},
+        {8490, 107},
+        {8491, 229}
+    };
 
     return lower;
 }
diff --git a/libbase/SharedMem.cpp b/libbase/SharedMem.cpp
index 8ad78af..88b2ab5 100644
--- a/libbase/SharedMem.cpp
+++ b/libbase/SharedMem.cpp
@@ -51,7 +51,7 @@ namespace gnash {
 
 SharedMem::SharedMem(size_t size)
     :
-    _addr(0),
+    _addr(nullptr),
     _size(size),
     _semid(0),
     _shmid(0),
@@ -82,7 +82,7 @@ SharedMem::~SharedMem()
         // Note that this isn't completely reliable.
         if (!ds.shm_nattch) {
             log_debug(_("No shared memory users left. Removing segment and semaphore."));
-            ::shmctl(_shmid, IPC_RMID, 0);
+            ::shmctl(_shmid, IPC_RMID, nullptr);
             ::semctl(_semid, IPC_RMID, 0);
         }
     }
@@ -219,7 +219,7 @@ SharedMem::attach()
         return false;
     }
 
-    _addr = static_cast<iterator>(::shmat(_shmid, 0, 0));
+    _addr = static_cast<iterator>(::shmat(_shmid, nullptr, 0));
 
     if (!_addr) {
         log_error(_("Unable to attach shared memory: %s"),
diff --git a/libbase/SharedMem.h b/libbase/SharedMem.h
index 94672d9..eba821d 100644
--- a/libbase/SharedMem.h
+++ b/libbase/SharedMem.h
@@ -23,7 +23,7 @@
 # include "gnashconfig.h"
 #endif
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #if defined (WIN32)
 // Include for HANDLE
@@ -46,7 +46,7 @@ class SharedMem
 {
 public:
 
-    typedef boost::uint8_t* iterator;
+    typedef std::uint8_t* iterator;
 
     /// The beginning of the SharedMem section.
     //
diff --git a/libbase/SimpleBuffer.h b/libbase/SimpleBuffer.h
index 290382d..2757a5e 100644
--- a/libbase/SimpleBuffer.h
+++ b/libbase/SimpleBuffer.h
@@ -20,9 +20,9 @@
 #define GNASH_SIMPLEBUFFER_H
 
 
-#include <boost/cstdint.hpp> // for boost::uint8_t
+#include <cstdint> // for std::uint8_t
 #include <algorithm> // for std::copy
-#include <boost/scoped_array.hpp>
+#include <memory>
 #include <cassert>
 
 
@@ -53,41 +53,31 @@ public:
 	{
 		if ( _capacity )
 		{
-			_data.reset(new boost::uint8_t[_capacity]);
+			_data.reset(new std::uint8_t[_capacity]);
 		}
 	}
 
-	/// Copy constructor
-	//
-	/// The copy ctor will set capacity to be
-	/// as small as required to hold the size of the
-	/// model buffer.
-	///
-	SimpleBuffer(const SimpleBuffer& b)
-		:
-		_size(b._size),
-		_capacity(b._size)
-	{
-		if ( _size )
-		{
-			_data.reset(new boost::uint8_t[_size]);
-			std::copy(b.data(), b.data()+b.size(), _data.get());
-		}
-	}
+        /// Construct a SimpleBuffer by taking ownership of an existing buffer.
+        //
+        /// @param size the size of the buffer.
+        /// @param buffer a pointer a a new[]-allocated buffer.
+        SimpleBuffer(size_t size, std::uint8_t* buffer)
+            : _size(size),
+              _capacity(size),
+              _data(buffer)
+        {
+        }
+
+        /// Move constructor.
+        SimpleBuffer(SimpleBuffer&&) = default;
+
+        /// Copy (construction) not allowed.
+        SimpleBuffer(const SimpleBuffer& b) = delete;
+        SimpleBuffer& operator= (const SimpleBuffer& b) = delete;
+
+        /// Move assignment is okay.
+        SimpleBuffer& operator= (SimpleBuffer&&) = default;
 
-	/// Assignment operator
-	//
-	/// The assignment op will not reset capacity
-	///
-	SimpleBuffer& operator= (const SimpleBuffer& b)
-	{
-		if ( this != &b )  // don't waste time on self-assignment
-		{
-			resize(0); // shouldn't deallocate memory
-			append(b);
-		}
-		return *this;
-	}
 
 	/// Return true if buffer is empty
 	bool empty() const { return _size==0; }
@@ -99,10 +89,10 @@ public:
 	size_t capacity() const { return _capacity; }
 
 	/// Get a pointer to start of data. May be NULL if size==0.
-	boost::uint8_t* data() { return _data.get(); }
+	std::uint8_t* data() { return _data.get(); }
 
 	/// Get a pointer to start of data. May be NULL if size==0.
-	const boost::uint8_t* data() const { return _data.get(); }
+	const std::uint8_t* data() const { return _data.get(); }
 
 	/// Resize the buffer
 	void resize(size_t newSize)
@@ -119,10 +109,10 @@ public:
 		// TODO: use smalles power of 2 bigger then newCapacity
 		_capacity = std::max(newCapacity, _capacity*2);
 
-		boost::scoped_array<boost::uint8_t> tmp;
+		std::unique_ptr<std::uint8_t[]> tmp;
 		tmp.swap(_data);
 		
-		_data.reset(new boost::uint8_t[_capacity]);
+		_data.reset(new std::uint8_t[_capacity]);
 
 		if ( tmp.get() )
 		{
@@ -143,8 +133,8 @@ public:
 	///
 	void append(const void* inData, size_t size)
 	{
-		const boost::uint8_t* newData = 
-            reinterpret_cast<const boost::uint8_t*>(inData);
+		const std::uint8_t* newData =
+            reinterpret_cast<const std::uint8_t*>(inData);
 		size_t curSize = _size;
 		resize(curSize+size);
 		std::copy(newData, newData+size, _data.get()+curSize);
@@ -158,7 +148,7 @@ public:
 	/// @param b
 	///	Byte to append.
 	///
-	void appendByte(const boost::uint8_t b)
+	void appendByte(const std::uint8_t b)
 	{
 		resize(_size + 1);
 		_data[_size - 1] = b;
@@ -172,7 +162,7 @@ public:
 	///	Short to append. Will be appended in network order. ie
 	///  with high order byte first.
 	///
-	void appendNetworkShort(const boost::uint16_t s)
+	void appendNetworkShort(const std::uint16_t s)
 	{
 		resize(_size + 2);
 		_data[_size - 2] = s >> 8;
@@ -187,7 +177,7 @@ public:
 	///	Long to append. Will be appended in network order. ie
 	///  with high order bytes first.
 	///
-	void appendNetworkLong(const boost::uint32_t l)
+	void appendNetworkLong(const std::uint32_t l)
 	{
 		resize(_size + 4);
 		_data[_size - 4] = l >> 24;
@@ -207,7 +197,7 @@ public:
 	void append(const SimpleBuffer& buf)
 	{
 		size_t incomingDataSize = buf.size();
-		const boost::uint8_t* incomingData = buf.data();
+		const std::uint8_t* incomingData = buf.data();
 		append(incomingData, incomingDataSize);
 	}
 
@@ -215,7 +205,7 @@ private:
 	size_t _size;
 	size_t _capacity;
 
-	boost::scoped_array<boost::uint8_t> _data;
+	std::unique_ptr<std::uint8_t[]> _data;
 };
 
 
diff --git a/libbase/Socket.cpp b/libbase/Socket.cpp
index b23240a..43a10ac 100644
--- a/libbase/Socket.cpp
+++ b/libbase/Socket.cpp
@@ -26,8 +26,7 @@
 
 #include <cerrno>
 #include <csignal>
-#include <boost/lexical_cast.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "GnashSystemNetHeaders.h"
 #include "GnashSystemFDHeaders.h"
@@ -35,7 +34,6 @@
 #include "utility.h"
 #include "GnashAlgorithm.h"
 #include "GnashSystemNetHeaders.h"
-#include "GnashScopedPtr.h"
 
 namespace gnash {
 
@@ -70,7 +68,7 @@ Socket::connected() const
         tval.tv_sec = 0;
         tval.tv_usec = 103;
             
-        const int ret = ::select(_socket + 1, NULL, &fdset, NULL, &tval);
+        const int ret = ::select(_socket + 1, nullptr, &fdset, nullptr, &tval);
         
         // Select timeout
         if (ret == 0) continue;
@@ -125,19 +123,19 @@ Socket::close()
 
 namespace {
 
-addrinfo* getAddrInfo(const std::string& hostname, boost::uint16_t port)
+addrinfo* getAddrInfo(const std::string& hostname, std::uint16_t port)
 {
-    addrinfo req = addrinfo(), *ans = 0;
+    addrinfo req = addrinfo(), *ans = nullptr;
     
     req.ai_family = AF_UNSPEC;  // Allow IPv4 or IPv6
     req.ai_socktype = SOCK_STREAM;
 
-    std::string portNo = boost::lexical_cast<std::string>(port);
+    std::string portNo = std::to_string(port);
     int code = getaddrinfo(hostname.c_str(), portNo.c_str(), &req, &ans);
     if (code != 0) {
         log_error(_("getaddrinfo() failed with code: #%d - %s"),
                  code, gai_strerror(code));
-        return 0;
+        return nullptr;
     }
 
     return ans;
@@ -146,7 +144,7 @@ addrinfo* getAddrInfo(const std::string& hostname, boost::uint16_t port)
 }
 
 bool
-Socket::connect(const std::string& hostname, boost::uint16_t port)
+Socket::connect(const std::string& hostname, std::uint16_t port)
 {
     // We use _socket here because connected() or _connected might not
     // be true if a connection attempt is underway but not completed.
@@ -164,8 +162,10 @@ Socket::connect(const std::string& hostname, boost::uint16_t port)
     }
 
     // This is used for ::connect()
-    ScopedPtr<addrinfo> ans(getAddrInfo(hostname, port), freeaddrinfo);
-    if (!ans.get()) {
+    std::unique_ptr<addrinfo, decltype(freeaddrinfo)*> ans(getAddrInfo(hostname, port), 
+        freeaddrinfo);
+
+    if (!ans) {
         return false;
     }
 
@@ -176,7 +176,7 @@ Socket::connect(const std::string& hostname, boost::uint16_t port)
             char clienthost [INET6_ADDRSTRLEN] = {};
             int code = getnameinfo(ot->ai_addr, ot->ai_addrlen,
                                clienthost, sizeof(clienthost),
-                               NULL, 0, NI_NUMERICHOST);
+                               nullptr, 0, NI_NUMERICHOST);
 
             if (code != 0) {
                 log_error(_("getnameinfo() failed: %1%"), gai_strerror(code));
diff --git a/libbase/Socket.h b/libbase/Socket.h
index c2d3121..b7abc0e 100644
--- a/libbase/Socket.h
+++ b/libbase/Socket.h
@@ -22,7 +22,7 @@
 #define GNASH_SOCKET_H
 
 #include "dsodefs.h"
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include "IOChannel.h"
 
 namespace gnash {
@@ -56,7 +56,7 @@ public:
     /// @return         false if the connection fails. In this case, the
     ///                 Socket is still in a closed state and is ready for
     ///                 a new connection attempt. Otherwise true.
-    bool connect(const std::string& hostname, boost::uint16_t port);
+    bool connect(const std::string& hostname, std::uint16_t port);
 
     /// Close the Socket.
     //
diff --git a/libbase/StreamProvider.cpp b/libbase/StreamProvider.cpp
index 0e3efb3..8700bc8 100644
--- a/libbase/StreamProvider.cpp
+++ b/libbase/StreamProvider.cpp
@@ -27,6 +27,7 @@
 #include "log.h"
 #include "rc.h" // for rcfile
 #include "NamingPolicy.h"
+#include "IOChannel.h"
 
 #include <cerrno>
 #include <cstring> // for strerror
@@ -34,16 +35,15 @@
 #include <map>
 #include <string>
 #include <vector>
-#include <boost/shared_ptr.hpp>
 
 namespace gnash {
 
-StreamProvider::StreamProvider(const URL& orig, const URL& base,
-        std::auto_ptr<NamingPolicy> np)
+StreamProvider::StreamProvider(URL orig, URL base,
+        std::unique_ptr<NamingPolicy> np)
     :
-    _namingPolicy(np),
-    _base(base),
-    _original(orig)
+    _namingPolicy(std::move(np)),
+    _base(std::move(base)),
+    _original(std::move(orig))
 {
 }
     
@@ -53,11 +53,14 @@ StreamProvider::allow(const URL& url) const
     return URLAccessManager::allow(url, _original);
 }
 
-std::auto_ptr<IOChannel>
-StreamProvider::getStream(const URL& url, bool namedCacheFile) const
+struct dummy : public IOChannel
 {
+};
 
-    std::auto_ptr<IOChannel> stream;
+std::unique_ptr<IOChannel>
+StreamProvider::getStream(const URL& url, bool namedCacheFile) const
+{
+    std::unique_ptr<IOChannel> stream;
 
 	if (url.protocol() == "file") {
 
@@ -69,10 +72,16 @@ StreamProvider::getStream(const URL& url, bool namedCacheFile) const
             //       Note also that the FB gui will use stdin
             //       for key events.
             //
-			FILE *newin = fdopen(dup(0), "rb");
+			int fd = dup(0);
+			if (0 > fd) {
+				log_error(_("Could not stdin (filename -): %2%"),
+				          std::strerror(errno));
+				return nullptr;
+			}
+			FILE *newin = fdopen(fd, "rb");
 
 			// Close on destruction.
-			stream = makeFileChannel(newin, true);
+			stream = std::move(makeFileChannel(newin, true));
 			return stream;
 		}
 		else {
@@ -86,22 +95,22 @@ StreamProvider::getStream(const URL& url, bool namedCacheFile) const
 				return stream;
 			}
 			// Close on destruction
-			stream = makeFileChannel(newin, true);
+			stream = std::move(makeFileChannel(newin, true));
 			return stream;
 		}
 	}
 	else {
 		if (allow(url)) {
-			stream = NetworkAdapter::makeStream(url.str(), 
-                    namedCacheFile ? namingPolicy()(url) : "");
+			stream = std::move(NetworkAdapter::makeStream(url.str(), 
+                    namedCacheFile ? namingPolicy()(url) : ""));
 		}
 
-        // Will return 0 auto_ptr if not allowed.
+        // Will return 0 unique_ptr if not allowed.
 		return stream;
 	}
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 StreamProvider::getStream(const URL& url, const std::string& postdata,
         const NetworkAdapter::RequestHeaders& headers, bool namedCacheFile)
         const
@@ -119,16 +128,16 @@ StreamProvider::getStream(const URL& url, const std::string& postdata,
                     namedCacheFile ? namingPolicy()(url) : "");
 	}
 
-	return std::auto_ptr<IOChannel>();
+	return std::unique_ptr<IOChannel>();
 
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 StreamProvider::getStream(const URL& url, const std::string& postdata,
        bool namedCacheFile) const
 {
 
-    std::auto_ptr<IOChannel> stream;
+    std::unique_ptr<IOChannel> stream;
 
 	if (url.protocol() == "file") {
         if (!postdata.empty()) {    
@@ -159,7 +168,7 @@ StreamProvider::getStream(const URL& url, const std::string& postdata,
 			stream = NetworkAdapter::makeStream(url.str(), postdata,
                     namedCacheFile ? namingPolicy()(url) : "");
 		}
-        // Will return 0 auto_ptr if not allowed.
+        // Will return 0 unique_ptr if not allowed.
 		return stream;		
 
 	}
diff --git a/libbase/StreamProvider.h b/libbase/StreamProvider.h
index eae2ee9..8335105 100644
--- a/libbase/StreamProvider.h
+++ b/libbase/StreamProvider.h
@@ -56,9 +56,9 @@ public:
     ///                     connections.
     /// @param base         The base URL, used to resolve URLs.
     /// @param np           A policy to decide the name of cached files.
-	StreamProvider(const URL& original, const URL& base,
-            std::auto_ptr<NamingPolicy> np =
-            std::auto_ptr<NamingPolicy>(new NamingPolicy));
+	StreamProvider(URL original, URL base,
+            std::unique_ptr<NamingPolicy> np =
+            std::unique_ptr<NamingPolicy>(new NamingPolicy));
 
 	virtual ~StreamProvider() {}
 
@@ -66,7 +66,7 @@ public:
 	//
 	/// On error NULL is returned
 	/// Derive from this for a CachingStreamProvider
-	virtual std::auto_ptr<IOChannel> getStream(const URL& url,
+	virtual std::unique_ptr<IOChannel> getStream(const URL& url,
             bool namedCacheFile = false) const;
 
 	/// Get a stream from the response of a POST operation
@@ -78,10 +78,10 @@ public:
 	///
 	/// @param url      The url to post to.
 	/// @param postdata Post data in url-encoded form.
-	virtual std::auto_ptr<IOChannel> getStream(const URL& url,
+	virtual std::unique_ptr<IOChannel> getStream(const URL& url,
             const std::string& postdata, bool namedCacheFile = false) const;
 	
-	virtual std::auto_ptr<IOChannel> getStream(const URL& url,
+	virtual std::unique_ptr<IOChannel> getStream(const URL& url,
             const std::string& postdata,
             const NetworkAdapter::RequestHeaders& headers,
             bool namedCacheFile = false) const;
@@ -90,8 +90,8 @@ public:
     //
     /// This is only used when cache file naming is requested in getStream()
     /// This StreamProvider owns the NamingPolicy instance.
-    void setNamingPolicy(std::auto_ptr<NamingPolicy> np) {
-        _namingPolicy = np;
+    void setNamingPolicy(std::unique_ptr<NamingPolicy> np) {
+        _namingPolicy = std::move(np);
     }
 
     /// Return the currently selected policy for converting URL to filename
@@ -121,7 +121,7 @@ public:
 private:
 
     /// The current naming policy for cache files.
-    std::auto_ptr<NamingPolicy> _namingPolicy;
+    std::unique_ptr<NamingPolicy> _namingPolicy;
 
     const URL _base;
 
diff --git a/libbase/URL.cpp b/libbase/URL.cpp
index 9455215..d74edbd 100644
--- a/libbase/URL.cpp
+++ b/libbase/URL.cpp
@@ -28,7 +28,6 @@
 #include <algorithm>
 #include <cerrno>
 #include <boost/tokenizer.hpp>
-#include <boost/scoped_array.hpp>
 #include <cctype>
 
 // This is for getcwd(2) 
@@ -78,7 +77,7 @@ URL::normalize_path(std::string& path)
         }
     }
     // add last component 
-    components.push_back(std::string(prev+1, path.end()));
+    components.emplace_back(prev+1, path.end());
     
     path = "";
     for (std::vector<std::string>::const_iterator i=components.begin(),
@@ -155,8 +154,8 @@ URL::URL(const std::string& absolute_url)
         // When does it get silly?
         const size_t maxSize = 4096; 
         
-        boost::scoped_array<char> buf; 
-        char* dir = 0;
+        std::unique_ptr<char[]> buf; 
+        char* dir = nullptr;
         size_t bufSize = 0;
         
         // This just assumes a failure in getcwd is a name-length error,
diff --git a/libbase/URLAccessManager.cpp b/libbase/URLAccessManager.cpp
index 43b58f1..a6c31d5 100644
--- a/libbase/URLAccessManager.cpp
+++ b/libbase/URLAccessManager.cpp
@@ -160,10 +160,8 @@ local_check(const std::string& path, const URL& baseUrl)
     typedef RcInitFile::PathList PathList;
     const PathList& sandbox = rcfile.getLocalSandboxPath();
 
-    for (PathList::const_iterator i=sandbox.begin(), e=sandbox.end();
-            i!=e; ++i)
+    for (const std::string& dir : sandbox)
     {
-        const std::string& dir = *i;
         if ( pathIsUnderDir(path, dir) ) 
         {
             log_security(_("Load of file %s granted (under local sandbox %s)"),
diff --git a/libbase/WallClockTimer.cpp b/libbase/WallClockTimer.cpp
index ea29220..60454eb 100644
--- a/libbase/WallClockTimer.cpp
+++ b/libbase/WallClockTimer.cpp
@@ -35,10 +35,10 @@ WallClockTimer::restart()
     startTimer = clocktime::getTicks();
 }
 
-boost::uint32_t
+std::uint32_t
 WallClockTimer::elapsed() const
 {
-    boost::uint64_t currTime = clocktime::getTicks();
+    std::uint64_t currTime = clocktime::getTicks();
     
     // be aware of time glitches
     if ( currTime <= startTimer ) return 0;
diff --git a/libbase/WallClockTimer.h b/libbase/WallClockTimer.h
index 2ef642a..ddf92c4 100644
--- a/libbase/WallClockTimer.h
+++ b/libbase/WallClockTimer.h
@@ -23,7 +23,7 @@
 
 #include "dsodefs.h" // for DSOEXPORT
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 namespace gnash {
 
@@ -39,14 +39,14 @@ public:
 	/// \brief
 	/// Return time elapsed in milliseconds since construction
 	/// or last call to ::restart()
-	boost::uint32_t elapsed() const;
+	std::uint32_t elapsed() const;
 
 	/// Restart the timer
 	void restart();
 
 private:
 
-	boost::uint64_t startTimer;
+	std::uint64_t startTimer;
 
 };
 
diff --git a/libbase/accumulator.h b/libbase/accumulator.h
index 532bf32..694cbd2 100644
--- a/libbase/accumulator.h
+++ b/libbase/accumulator.h
@@ -22,7 +22,7 @@
 
 #include <boost/program_options/value_semantic.hpp>
 #include <boost/any.hpp>
-#include <boost/function.hpp>
+#include <functional>
 #include <vector>
 #include <string>
 
@@ -35,7 +35,7 @@ public:
     accumulator_type() : _interval(1), _default(0) {}
 
     /// Set the notifier function.
-    accumulator_type* notifier(boost::function1<void, const T&> f) {
+    accumulator_type* notifier(std::function<void(const T&)> f) {
         _notifier = f;
         return this;
     }
@@ -93,7 +93,7 @@ public:
     virtual ~accumulator_type() {}
 
 private:
-    boost::function1<void, const T&> _notifier;
+    std::function<void(const T&)> _notifier;
     T _interval;
     T _default;
 };
diff --git a/libbase/arg_parser.cpp b/libbase/arg_parser.cpp
index 10695e1..3589553 100644
--- a/libbase/arg_parser.cpp
+++ b/libbase/arg_parser.cpp
@@ -137,7 +137,7 @@ Arg_parser::Arg_parser( const int argc, const char * const argv[],
         
         if( ch1 == '-' && ch2 )	{	// we found an option
             const char * const opt = argv[argind];
-            const char * const arg = (argind + 1 < argc) ? argv[argind+1] : 0;
+            const char * const arg = (argind + 1 < argc) ? argv[argind+1] : nullptr;
             if( ch2 == '-' ) {
                 if( !argv[argind][2] ) { ++argind; break; }	// we found "--"
                 else if( !parse_long_option( opt, arg, options, argind ) ) break;
@@ -154,9 +154,9 @@ Arg_parser::Arg_parser( const int argc, const char * const argv[],
     if(! _error.empty() ) {
         data.clear();
     } else {
-        for( unsigned int i = 0; i < non_options.size(); ++i ) {
+        for(auto& non_option : non_options) {
             data.push_back( Record() );
-            data.back().argument.swap( non_options[i] );
+            data.back().argument.swap( non_option );
         }
         while( argind < argc ) {
             data.push_back( Record() );
diff --git a/libbase/arg_parser.h b/libbase/arg_parser.h
index 56cec35..c0f79e1 100644
--- a/libbase/arg_parser.h
+++ b/libbase/arg_parser.h
@@ -48,6 +48,7 @@
 #include "dsodefs.h"
 #include <vector>
 #include <sstream>
+#include <utility>
 
 class Arg_parser
 {
@@ -64,9 +65,9 @@ public:
     class ArgParserException : public std::exception
     {
     public:
-	ArgParserException(const std::string& s)
+	ArgParserException(std::string s)
 	    :
-	    _msg(s)
+	    _msg(std::move(s))
 	{}
 	
 	virtual ~ArgParserException() throw() {}
diff --git a/libbase/extension.cpp b/libbase/extension.cpp
index 3c2d70f..693c402 100644
--- a/libbase/extension.cpp
+++ b/libbase/extension.cpp
@@ -126,7 +126,7 @@ Extension::initModule(const std::string& module, as_object &where)
     
     SharedLib *sl = _plugins[module];
 
-    if (sl == 0) {
+    if (!sl) {
         sl = _plugins[module] = new SharedLib(_pluginsdir + "/" + module);
         if ( ! sl->openLib() ) return false;
     } 
@@ -155,7 +155,7 @@ Extension::initModuleWithFunc(const std::string& module,
 
     SharedLib *sl = _plugins[module];
 
-    if (sl == 0) {
+    if (!sl) {
         sl = _plugins[module] = new SharedLib(module);
         if ( ! sl->openLib() ) return false;
     } 
@@ -199,7 +199,7 @@ Extension::scanDir(const std::string& dirlist)
         
         struct dirent *entry;
 
-        while ((entry = readdir(libdir)) != NULL) {
+        while ((entry = readdir(libdir)) != nullptr) {
             // We only want shared libraries that end with the suffix, otherwise
             // we get all the duplicates.
             std::string name(entry->d_name);
diff --git a/libbase/log.cpp b/libbase/log.cpp
index 2920bdd..c74cd5c 100644
--- a/libbase/log.cpp
+++ b/libbase/log.cpp
@@ -29,6 +29,8 @@
 #include <fstream>
 #include <iomanip> 
 #include <string>
+#include <thread>
+#include <mutex>
 #include <boost/format.hpp>
 
 #include <unistd.h> // for getpid
@@ -39,11 +41,6 @@
 using std::cout;
 using std::endl;
 
-namespace {
-    // TODO: drop this and use boost::this_thread::id instead.
-    inline unsigned long int /* pthread_t */ get_thread_id();
-}
-
 namespace gnash {
 
 // Convert each byte into its hex representation
@@ -58,18 +55,17 @@ hexify(const unsigned char *p, size_t length, bool ascii)
     // For hex output, fill single-digit numbers with a leading 0.
     if (!ascii) ss << std::hex << std::setfill('0');
     
-    for (std::vector<unsigned char>::const_iterator i = bytes.begin(),
-            e = bytes.end(); i != e; ++i)
+    for (const unsigned char& byte : bytes)
         {
         if (ascii) {
-            if (std::isprint(*i) || *i == 0xd) {
-                ss << *i;
+            if (std::isprint(byte) || byte == 0xd) {
+                ss << byte;
             }
             else ss << ".";
         }
         else  {
             // Not ascii
-            ss << std::setw(2) << static_cast<int>(*i) << " ";    
+            ss << std::setw(2) << static_cast<int>(byte) << " ";    
         }
     }    
     
@@ -90,21 +86,21 @@ namespace {
     LogFile& dbglogfile = LogFile::getDefaultInstance();
 
     struct Timestamp {
-        boost::uint64_t startTicks;
-        std::map<int, int> threadMap;
+        std::uint64_t startTicks;
+        std::map<std::thread::id, int> threadMap;
         Timestamp() : startTicks(clocktime::getTicks()) {}
     };
 
     std::ostream& operator<< (std::ostream& o, Timestamp& t)
     {
-        int tid = get_thread_id();
+        std::thread::id tid = std::this_thread::get_id();
         int& htid = t.threadMap[tid];
         if (!htid) {
             htid = t.threadMap.size();
             // TODO: notify actual thread id for index
         }
 
-        boost::uint64_t diff = clocktime::getTicks() - t.startTicks;
+        std::uint64_t diff = clocktime::getTicks() - t.startTicks;
         // should we split in seconds/ms ?
         o << getpid() << ":" << htid << "] " << diff;
 
@@ -243,8 +239,7 @@ processLog_action(const boost::format& fmt)
 void
 LogFile::log(const std::string& msg)
 {
-
-    boost::mutex::scoped_lock lock(_ioMutex);
+    std::lock_guard<std::mutex> lock(_ioMutex);
 
     if ( !_verbose ) return; // nothing to do if not verbose
 
@@ -294,11 +289,12 @@ LogFile::LogFile()
     :
     _verbose(0),
     _actiondump(false),
+    _network(false),
     _parserdump(false),
     _state(CLOSED),
     _stamp(true),
     _write(false),
-    _listener(NULL)
+    _listener(nullptr)
 {
 }
 
@@ -354,7 +350,8 @@ LogFile::openLog(const std::string& filespec)
 bool
 LogFile::closeLog()
 {
-    boost::mutex::scoped_lock lock(_ioMutex);
+    std::lock_guard<std::mutex> lock(_ioMutex);
+
     if (_state == OPEN) {
         _outstream.flush();
         _outstream.close();
@@ -380,48 +377,6 @@ LogFile::removeLog()
 
 } // end of gnash namespace
 
-/// Used in logging.
-#ifdef HAVE_PTHREADS
-#include <pthread.h>
-#else
-# ifdef _WIN32
-extern "C" unsigned long int /* DWORD WINAPI */ GetCurrentThreadId();
-# else
-#include <sys/types.h>
-#include <unistd.h>
-# endif
-#endif
-
-namespace {
-
-inline unsigned long int /* pthread_t */ get_thread_id(void)
-{
-#ifdef HAVE_PTHREADS
-# ifdef __APPLE_CC__
-    return reinterpret_cast<unsigned long int>(pthread_self());
-# else
-    // This isn't a proper style C++ cast, but FreeBSD has a problem with
-    // static_cast for this as pthread_self() returns a pointer. We can
-    // use that too, this ID is only used for the log file to keep output
-    // from seperare threads clear.
-# ifdef _WIN32
-    return GetCurrentThreadId();
-#else
-    return (unsigned long int)pthread_self();
-#endif
-# endif 
-#else
-# ifdef _WIN32
-    return GetCurrentThreadId();
-# else
-    return static_cast<unsigned long int>(getpid());
-# endif
-#endif
-
-}
-
-} // anonymous namespace
-
 // Local Variables:
 // mode: C++
 // indent-tabs-mode: nil
diff --git a/libbase/log.h b/libbase/log.h
index 962d5bf..b56b1fc 100644
--- a/libbase/log.h
+++ b/libbase/log.h
@@ -27,7 +27,7 @@
 #include "dsodefs.h" // for DSOEXPORT
 
 #include <fstream>
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 #include <boost/format.hpp>
 
 // This is needed so we can print to the Android log file, which can
@@ -51,12 +51,6 @@
     if (!warned) { warned = true; x; } \
 }
 
-# include <boost/preprocessor/arithmetic/inc.hpp>
-# include <boost/preprocessor/repetition/enum_params.hpp>
-# include <boost/preprocessor/repetition/repeat.hpp>
-# include <boost/preprocessor/repetition/repeat_from_to.hpp>
-# include <boost/preprocessor/seq/for_each.hpp>
-
 // Mingw32 (win32 console) doesn't use the standard GCC defines that
 // Gnash used for debug messages, so make it so...
 #ifndef __FUNCDNAME__
@@ -207,7 +201,7 @@ private:
     LogFile ();
 
     /// Mutex for locking I/O during logfile access.
-    boost::mutex _ioMutex;
+    std::mutex _ioMutex;
 
     /// Stream to write to stdout.
     std::ofstream _outstream;
@@ -252,78 +246,98 @@ DSOEXPORT void processLog_swferror(const boost::format& fmt);
 DSOEXPORT void processLog_aserror(const boost::format& fmt);
 DSOEXPORT void processLog_abc(const boost::format& fmt);
 
-/// This heap of steaming preprocessor code magically converts
-/// printf-style statements into boost::format messages using templates.
-//
-/// Macro to feed boost::format strings to the boost::format object,
-/// producing code like this: "% t1 % t2 % t3 ..."
-#define TOKENIZE_FORMAT(z, n, t) % t##n
-
-/// Macro to add a number of arguments to the templated function
-/// corresponding to the number of template arguments. Produces code
-/// like this: "const T0& t0, const T1& t1, const T2& t2 ..."
-#define TOKENIZE_ARGS(z, n, t) BOOST_PP_COMMA_IF(n) const T##n& t##n
-
-/// This is a sequence of different log message types to be used in
-/// the code. Append the name to log_ to call the function, e.g. 
-/// log_error, log_unimpl.
-#define LOG_TYPES (error) (debug) (unimpl) (aserror) (swferror) \
-    (security) (action) (parse) (trace) (abc) (network)
-
-/// This actually creates the template functions using the TOKENIZE
-/// functions above. The templates look like this:
-//
-/// template<typename T0 , typename T1 , typename T2>
-/// void log_error(const T0& t0 , const T1& t1 , const T2& t2)
-/// {
-///     if (LogFile::getDefaultInstance().getVerbosity() == 0) return;
-///     boost::format f(t0);
-///     using namespace boost::io;
-///     f.exceptions(all_error_bits ^ (too_many_args_bit |
-///                                    too_few_args_bit |
-///                                    bad_format_string_bit));
-///     processLog_error(f % t1 % t2);
-/// }
-///
-/// Only not as nicely indented.
-///
-/// Use "g++ -E log.h" or "cpp log.h" to check.
-#define LOG_TEMPLATES(z, n, data)\
-template<BOOST_PP_ENUM_PARAMS(BOOST_PP_INC(n), typename T)>\
-inline void log_##data(BOOST_PP_REPEAT(BOOST_PP_INC(n), TOKENIZE_ARGS, t)) \
-{\
-    if (LogFile::getDefaultInstance().getVerbosity() == 0) return; \
-    boost::format f(t0); \
-    using namespace boost::io; \
-    f.exceptions(all_error_bits ^ (too_many_args_bit | \
-                                   too_few_args_bit | \
-                                   bad_format_string_bit)); \
-    processLog_##data(f BOOST_PP_REPEAT_FROM_TO(1, \
-            BOOST_PP_INC(n), \
-            TOKENIZE_FORMAT, t));\
+template <typename FuncType>
+inline void
+log_impl(boost::format& fmt, FuncType func)
+{
+    func(fmt);
 }
 
-/// Defines the maximum number of template arguments
-//
-/// The preprocessor generates templates with 1..ARG_NUMBER
-/// arguments.
-#define ARG_NUMBER 10
-
-/// Calls the macro LOG_TEMPLATES an ARG_NUMBER number
-/// of times, each time adding an extra typename argument to the
-/// template.
-#define GENERATE_LOG_TYPES(r, _, t) \
-    BOOST_PP_REPEAT(ARG_NUMBER, LOG_TEMPLATES, t)
-
-/// Calls the template generator for each log type in the
-/// sequence LOG_TYPES.
-BOOST_PP_SEQ_FOR_EACH(GENERATE_LOG_TYPES, _, LOG_TYPES)
-
-#undef TOKENIZE_ARGS
-#undef TOKENIZE_FORMAT
-#undef GENERATE_LOG_TYPES
-#undef LOG_TEMPLATES
-#undef ARG_NUMBER
+template<typename FuncType, typename Arg, typename... Args>
+inline void
+log_impl(boost::format& fmt, FuncType processFunc, Arg arg, Args... args)
+{
+    fmt % arg;
+    log_impl(fmt, processFunc, args...);
+}
+
+template<typename StringType, typename FuncType, typename... Args>
+inline void
+log_impl(StringType msg, FuncType func, Args... args)
+{
+    boost::format fmt(msg);
+    using namespace boost::io;
+    fmt.exceptions(all_error_bits ^ (too_many_args_bit |
+                                   too_few_args_bit |
+                                   bad_format_string_bit));
+    log_impl(fmt, func, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_network(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_network, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_error(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_error, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_unimpl(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_unimpl, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_trace(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_trace, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_debug(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_debug, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_action(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_action, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_parse(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_parse, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_security(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_security, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_swferror(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_swferror, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_aserror(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_aserror, args...);
+}
+
+template<typename StringType, typename... Args>
+inline void log_abc(StringType msg, Args... args)
+{
+    log_impl(msg, processLog_abc, args...);
+}
 
 /// Convert a sequence of bytes to hex or ascii format.
 //
@@ -397,7 +411,7 @@ class DSOEXPORT HostFunctionReport
 public:
     // Only print function tracing messages when multiple -v
     // options have been supplied. 
-    HostFunctionReport() : _func(0) {
+    HostFunctionReport() : _func(nullptr) {
         log_debug("entering");
     }
 
@@ -420,7 +434,7 @@ private:
     #ifndef HAVE_func
         #define dummystr(x) # x
         #define dummyestr(x) dummystr(x)
-        #define __FUNCTION__ __FILE__":"dummyestr(__LINE__)
+        #define __FUNCTION__ __FILE__ ":" dummyestr(__LINE__)
     #else
         #define __FUNCTION__ __func__    
     #endif
diff --git a/libbase/memory.cpp b/libbase/memory.cpp
index 86a6832..aeaa00f 100644
--- a/libbase/memory.cpp
+++ b/libbase/memory.cpp
@@ -46,9 +46,10 @@ const int DATALOG_SIZE = 1024;
 
 Memory::Memory() 
     : _collecting(false),
-      _info(0),
+      _info(nullptr),
       _size(DATALOG_SIZE),
       _index(0)
+    , _checkpoint()
 {
 //    GNASH_REPORT_FUNCTION;
 }
@@ -56,6 +57,7 @@ Memory::Memory()
 
 Memory::Memory(size_t size) 
     : _collecting(false)
+    , _checkpoint()
 {
 //    GNASH_REPORT_FUNCTION;
     _size = size;
@@ -90,7 +92,7 @@ Memory::startStats()
 {
 //    GNASH_REPORT_FUNCTION;
     _collecting = true;
-    if (_info == 0) {
+    if (_info == nullptr) {
         log_debug(_("Allocating buffer for %d data samples"), _size);
         _info = new struct small_mallinfo[_size];
         reset();
diff --git a/libbase/noseek_fd_adapter.cpp b/libbase/noseek_fd_adapter.cpp
index 7036b1b..b6fa3c1 100644
--- a/libbase/noseek_fd_adapter.cpp
+++ b/libbase/noseek_fd_adapter.cpp
@@ -18,7 +18,6 @@
 
 #include "noseek_fd_adapter.h"
 
-#include <boost/scoped_array.hpp>
 #include <cerrno>
 #include <cstdio>
 #include <string>
@@ -63,7 +62,7 @@ public:
     ///    would not be accessible after destruction of this 
     ///    instance.
     ///
-    NoSeekFile(int fd, const char* filename=NULL);
+    NoSeekFile(int fd, const char* filename=nullptr);
 
     ~NoSeekFile();
 
@@ -368,7 +367,7 @@ make_stream(int fd, const char* cachefilename)
     std::cerr << boost::format("making NoSeekFile stream for fd %d") % fd << std::endl;
 #endif
 
-    NoSeekFile* stream = NULL;
+    NoSeekFile* stream = nullptr;
 
     try {
         stream = new NoSeekFile(fd, cachefilename);
@@ -376,7 +375,7 @@ make_stream(int fd, const char* cachefilename)
     catch (const std::exception& ex) {
         std::cerr << boost::format("NoSeekFile stream: %s") % ex.what() << std::endl;
         delete stream;
-        return NULL;
+        return nullptr;
     }
 
     return stream;
diff --git a/libbase/noseek_fd_adapter.h b/libbase/noseek_fd_adapter.h
index 78199df..064a35a 100644
--- a/libbase/noseek_fd_adapter.h
+++ b/libbase/noseek_fd_adapter.h
@@ -42,7 +42,7 @@ namespace noseek_fd_adapter {
 /// Specify a cachefilename if you want to be able to access
 /// the full cache after deletion of the returned IOChannel.
 ///
-DSOEXPORT IOChannel* make_stream(int fd, const char* cachefilename = 0);
+DSOEXPORT IOChannel* make_stream(int fd, const char* cachefilename = nullptr);
 
 } // namespace gnash::noseek_fd_adapter
 } // namespace gnash
diff --git a/libbase/rc.cpp b/libbase/rc.cpp
index 5192792..38ba3ed 100644
--- a/libbase/rc.cpp
+++ b/libbase/rc.cpp
@@ -25,7 +25,7 @@
 
 #include "rc.h"
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <limits>
 #include <cstdlib> // getenv
 #include <string>
@@ -129,7 +129,7 @@ RcInitFile::RcInitFile()
 #ifdef __OS2__x
     _urlOpenerFormat = PrfQueryProfileString(HINI_USER, (PSZ)
             "WPURLDEFAULTSETTINGS",
-            (PSZ) "DefaultBrowserExe", NULL,
+            (PSZ) "DefaultBrowserExe", nullptr,
             (PVOID) browserExe, (LONG)sizeof(browserExe));
     _urlOpenerFormat += " -remote 'openurl(%u)'";
 #endif
@@ -160,7 +160,7 @@ RcInitFile::loadFiles()
 #endif
     
     // Check the users home directory
-    const char *home = 0;
+    const char *home = nullptr;
 #if defined (__amigaos4__)
     //on AmigaOS we have a GNASH: assign that point to program dir
     home = "/gnash";
@@ -303,7 +303,7 @@ RcInitFile::expandPath (std::string& path)
             else { 
                 struct passwd *password = getpwuid(getuid());
                     const char *pwdhome = password->pw_dir;
-                    if (home) {
+                    if (pwdhome) {
                         path.replace(0, 1, pwdhome);
                     }
                    //If all that fails, leave path alone
@@ -323,7 +323,7 @@ RcInitFile::expandPath (std::string& path)
             else user = path.substr(1);
 
             // find user using pwd
-            const char *userhome = NULL;
+            const char *userhome = nullptr;
             struct passwd *password = getpwnam(user.c_str());
             if (password) {
                 userhome = password->pw_dir;
@@ -691,7 +691,7 @@ RcInitFile::updateFile()
         }
     } else {
         // Check the users home directory
-        const char *home = NULL;
+        const char *home = nullptr;
 #if defined(__amigaos4__)
         //on AmigaOS we have a GNASH: assign that point to program dir
         home = "/gnash";
diff --git a/libbase/rc.h b/libbase/rc.h
index 89769fd..34b3ce1 100644
--- a/libbase/rc.h
+++ b/libbase/rc.h
@@ -25,7 +25,7 @@
 #include <vector>
 #include <iosfwd>
 #include <sstream>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <boost/tokenizer.hpp>
 
 #include "StringPredicates.h"
@@ -34,7 +34,7 @@
 #include <sys/shm.h>
 #else
 #ifdef _WIN32
-  typedef boost::uint32_t key_t;
+  typedef std::uint32_t key_t;
 #endif // _WIN32
 #endif // _WIN32 and __HAIKU__
 
@@ -442,10 +442,10 @@ protected:
     typedef boost::tokenizer< Sep > Tok;
 
     /// The timer delay
-    boost::uint32_t  _delay;
+    std::uint32_t  _delay;
 
     /// Max number of movie clips to store in the library      
-    boost::uint32_t  _movieLibraryLimit;   
+    std::uint32_t  _movieLibraryLimit;
 
     /// Enable debugging of this class
     bool _debug;
@@ -454,7 +454,7 @@ protected:
     bool _debugger;
 
     /// Level of debugging output
-    boost::uint32_t  _verbosity;
+    std::uint32_t  _verbosity;
 
     /// Co