[SCM] GNU Shockwave Flash (SWF) player branch, master, updated. debian/0.8.11_git20140419-1-8-g316f32c

Gabriele Giacone gg0-guest at moszumanska.debian.org
Tue Jul 8 21:32:49 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, master has been updated
       via  316f32c999088adb3ebe2c56fc8c8c90ae5256c7 (commit)
       via  d6f82045a49e09429b194dd92ffdc06d4f7024e7 (commit)
       via  6f3a9e8e8717134511e3c52e9005abe2aca33dd1 (commit)
       via  b165e81c38083d8d637176d801406c4c5c0df84d (commit)
       via  1c43bb074b787823cef0a39ccdce18feeab0a1eb (commit)
      from  f1862843119d75977e2943124d300f722a3d14ee (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 -----------------------------------------------------------------
commit 316f32c999088adb3ebe2c56fc8c8c90ae5256c7
Author: Gabriele Giacone <1o5g4r8o at gmail.com>
Date:   Tue Jul 8 20:47:25 2014 +0200

    Release.

commit d6f82045a49e09429b194dd92ffdc06d4f7024e7
Merge: b165e81 6f3a9e8
Author: Gabriele Giacone <1o5g4r8o at gmail.com>
Date:   Tue Jul 8 20:38:32 2014 +0200

    Merge tag 'upstream/0.8.11_git20140708'
    
    Upstream version 0.8.11~git20140708

commit b165e81c38083d8d637176d801406c4c5c0df84d
Author: Gabriele Giacone <1o5g4r8o at gmail.com>
Date:   Tue Jul 8 20:37:36 2014 +0200

    Switch to npapi-sdk.

commit 1c43bb074b787823cef0a39ccdce18feeab0a1eb
Author: Gabriele Giacone <1o5g4r8o at gmail.com>
Date:   Tue Jul 8 20:35:15 2014 +0200

    New upstream snapshot.

-----------------------------------------------------------------------

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 +-
 debian/changelog                                   |     8 +-
 debian/control                                     |     2 +-
 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 +-
 759 files changed, 23072 insertions(+), 22151 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/debian/changelog b/debian/changelog
index 2e69ea6..0e410ee 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,10 +1,12 @@
-gnash (0.8.11~git20140419-2) UNRELEASED; urgency=medium
+gnash (0.8.11~git20140708-1) unstable; urgency=medium
 
+  * New upstream snapshot.
+    + Remove libboost-thread-dev B-D, switched to std::thread.
   * Add --enable-sound=none configure option on hurd.
   * Make testsuite failures more verbose.
-  * Remove libboost-thread-dev B-D, upstream switched to std::thread.
+  * Switch from xulrunner-dev to npapi-sdk-dev B-D (Closes: #752836).
 
- -- Gabriele Giacone <1o5g4r8o at gmail.com>  Tue, 29 Apr 2014 02:36:15 +0200
+ -- Gabriele Giacone <1o5g4r8o at gmail.com>  Tue, 08 Jul 2014 20:32:19 +0200
 
 gnash (0.8.11~git20140419-1) unstable; urgency=medium
 
diff --git a/debian/control b/debian/control
index 882d32c..34c733a 100644
--- a/debian/control
+++ b/debian/control
@@ -47,12 +47,12 @@ Build-Depends: autoconf,
                libtool,
                libxmu-dev,
                libxv-dev,
+               npapi-sdk-dev,
                python-all-dev (>= 2.6.6-3~),
                python-gtk2-dev,
                qt4-qmake,
                sng,
                xsltproc,
-               xulrunner-dev,
                csound [linux-any], haxe, libming-dev, libming-util, mtasc, swfmill, swftools
 XS-Python-Version: current
 Standards-Version: 3.9.5
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;
 
     /// Command format to use to open urls
     //
@@ -562,7 +562,7 @@ protected:
     
     /// Shared memory segment key (can be set for
     /// compatibility with other players.)
-    boost::uint32_t _lcshmkey;
+    std::uint32_t _lcshmkey;
     
     /// Whether the player should respond to fscommands
     /// (showmenu, quit etc)
diff --git a/libbase/ref_counted.h b/libbase/ref_counted.h
index 85e6f3d..9e153d5 100644
--- a/libbase/ref_counted.h
+++ b/libbase/ref_counted.h
@@ -22,7 +22,7 @@
 #include "dsodefs.h" // for DSOEXPORT
 
 #include <cassert>
-#include <boost/detail/atomic_count.hpp>
+#include <atomic>
 
 namespace gnash {
 
@@ -41,9 +41,7 @@ private:
 	// carefully designed for this to be effective
 	// (decrement & check in a single statement)
 	//
-	typedef boost::detail::atomic_count Counter;
-
-	mutable Counter m_ref_count;
+	mutable std::atomic<int> m_ref_count;
 	
 protected:
 
diff --git a/libbase/sharedlib.cpp b/libbase/sharedlib.cpp
index 918bf69..028eb55 100644
--- a/libbase/sharedlib.cpp
+++ b/libbase/sharedlib.cpp
@@ -43,7 +43,7 @@
 #endif
 
 #include <ltdl.h>
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 
 #if defined(WIN32) || defined(_WIN32)
 int        lt_dlsetsearchpath   (const char *search_path);
@@ -58,6 +58,9 @@ lt_dlhandle lt_dlopenext       (const char *filename);
 namespace gnash {
 
 SharedLib::SharedLib(const std::string& filespec)
+#ifdef HAVE_LTDL
+  : _dlhandle(nullptr)
+#endif
 {
     _filespec = filespec;
     scoped_lock lock(_libMutex);
@@ -100,7 +103,7 @@ SharedLib::openLib (const std::string& filespec)
 #ifdef HAVE_LTDL
     _dlhandle = lt_dlopenext (filespec.c_str());
     
-    if (_dlhandle == NULL) {
+    if (_dlhandle == nullptr) {
         log_error("lt_dlopenext(\"%s\") failed: %s", filespec.c_str(), lt_dlerror());
         return false;
     }
@@ -120,16 +123,16 @@ SharedLib::initentry *
 SharedLib::getInitEntry (const std::string& symbol)
 {
     // GNASH_REPORT_FUNCTION;
-    lt_ptr run = NULL;
+    lt_ptr run = nullptr;
     
     scoped_lock lock(_libMutex);
 
 #ifdef HAVE_LTDL
     run  = lt_dlsym (_dlhandle, symbol.c_str());
     
-    if (run == NULL) {
+    if (run == nullptr) {
         log_error(_("Couldn't find symbol: %s"), symbol);
-        return NULL;
+        return nullptr;
     } else {
         log_debug(_("Found symbol %s @ %p"), symbol, (void *)run);
     }
@@ -145,7 +148,7 @@ SharedLib::getDllSymbol(const std::string& symbol)
 {
     GNASH_REPORT_FUNCTION;
     
-    lt_ptr run = NULL;
+    lt_ptr run = nullptr;
     
     scoped_lock lock(_libMutex);
 
@@ -157,9 +160,9 @@ SharedLib::getDllSymbol(const std::string& symbol)
     Realistically, we should never get a valid pointer with a value of 0
     Markus: 'Id est NULL.'
     */
-    if (run == NULL) {
+    if (run == nullptr) {
         log_error("Couldn't find symbol: %s", symbol);
-        return NULL;
+        return nullptr;
     } else {
         log_debug("Found symbol %s @ %p", symbol, (void *)run);
     }
diff --git a/libbase/sharedlib.h b/libbase/sharedlib.h
index 8c82371..7802d70 100644
--- a/libbase/sharedlib.h
+++ b/libbase/sharedlib.h
@@ -23,7 +23,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 #include <string>
 #include "dsodefs.h" // DSOEXPORT
 
@@ -48,7 +48,7 @@ namespace gnash {
 /// TODO: document this class
 class SharedLib
 {
-    typedef boost::mutex::scoped_lock scoped_lock;
+    typedef std::lock_guard<std::mutex> scoped_lock;
 
 public:
     // Typedefs for function pointers to keep the code readable
@@ -68,9 +68,11 @@ private:
 
     bool closeLib();
 
+#ifdef HAVE_LTDL
     lt_dlhandle _dlhandle;
+#endif
     std::string _filespec;
-    boost::mutex _libMutex;    
+    std::mutex _libMutex;
 };
 
 } // end of gnash namespace
diff --git a/libbase/snappingrange.h b/libbase/snappingrange.h
index 111ceaa..603a3e7 100644
--- a/libbase/snappingrange.h
+++ b/libbase/snappingrange.h
@@ -26,7 +26,7 @@
 #include <iterator>
 #include <algorithm>
 #include <ostream>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 namespace gnash {
 
@@ -451,8 +451,8 @@ public:
         
         // update ourselves with the union of the "list"
         setNull();
-        for (size_type lno=0, lcount=list.size(); lno<lcount; lno++) {
-            add(list[lno]);
+        for (auto& range : list) {
+            add(range);
         }
                             
     }
@@ -652,7 +652,7 @@ inline bool snaptest(const geometry::Range2d<T>& range1,
 } // namespace geometry
 
 /// Standard snapping 2d ranges type for invalidated bounds calculation    
-typedef geometry::SnappingRanges2d<boost::int32_t> InvalidatedRanges;
+typedef geometry::SnappingRanges2d<std::int32_t> InvalidatedRanges;
 
 } //namespace gnash
 
diff --git a/libbase/string_table.cpp b/libbase/string_table.cpp
index 5c64318..7477232 100644
--- a/libbase/string_table.cpp
+++ b/libbase/string_table.cpp
@@ -48,7 +48,7 @@ string_table::find(const std::string& t_f, bool insert_unfound)
 
 		if (insert_unfound) {
 			// First we lock.
-			boost::mutex::scoped_lock aLock(_lock);
+			std::lock_guard<std::mutex> lock(_lock);
 			// Then we see if someone else managed to sneak past us.
 			i = _table.get<StringValue>().find(t_f);
 			// If they did, use that value.
@@ -65,14 +65,14 @@ string_table::find(const std::string& t_f, bool insert_unfound)
 string_table::key
 string_table::insert(const std::string& to_insert)
 {
-	boost::mutex::scoped_lock aLock(_lock);
+    std::lock_guard<std::mutex> lock(_lock);
     return already_locked_insert(to_insert);
 }
 
 void
 string_table::insert_group(const svt* l, std::size_t size)
 {
-	boost::mutex::scoped_lock aLock(_lock);
+    std::lock_guard<std::mutex> lock(_lock);
     for (std::size_t i = 0; i < size; ++i) {
         // Copy to avoid changing the original table.
         const svt s = l[i];
diff --git a/libbase/string_table.h b/libbase/string_table.h
index cf77fd0..0ebdf5c 100644
--- a/libbase/string_table.h
+++ b/libbase/string_table.h
@@ -28,9 +28,9 @@
 #include <boost/multi_index/hashed_index.hpp>
 #include <boost/multi_index/identity.hpp>
 #include <boost/multi_index/member.hpp>
-#include <boost/thread.hpp>
 #include <string>
 #include <map>
+#include <mutex>
 #include "dsodefs.h"
 
 namespace gnash {
@@ -45,9 +45,9 @@ public:
 	/// A little helper for indexing.
 	struct svt
 	{
-		svt(const std::string& val, std::size_t i)
+		svt(std::string val, std::size_t i)
             :
-			value(val),
+			value(std::move(val)),
             id(i)
         {}
 
@@ -149,7 +149,7 @@ private:
 
 	table _table;
 	static const std::string _empty;
-	boost::mutex _lock;
+	std::mutex _lock;
 	std::size_t _highestKey;
 
     std::map<key, key> _caseTable;
diff --git a/libbase/tree.hh b/libbase/tree.hh
index f0bdc9e..f410d84 100644
--- a/libbase/tree.hh
+++ b/libbase/tree.hh
@@ -43,7 +43,7 @@ template<class T>
 class tree_node_ { // size: 5*4=20 bytes (on 32 bit arch), can be reduced by 8.
 	public:
 		tree_node_();
-		tree_node_(const T&);
+		tree_node_(T );
 
 		tree_node_<T> *parent;
 	   tree_node_<T> *first_child, *last_child;
@@ -53,13 +53,13 @@ class tree_node_ { // size: 5*4=20 bytes (on 32 bit arch), can be reduced by 8.
 
 template<class T>
 tree_node_<T>::tree_node_()
-	: parent(0), first_child(0), last_child(0), prev_sibling(0), next_sibling(0)
+	: parent(nullptr), first_child(nullptr), last_child(nullptr), prev_sibling(nullptr), next_sibling(nullptr)
 	{
 	}
 
 template<class T>
-tree_node_<T>::tree_node_(const T& val)
-	: parent(0), first_child(0), last_child(0), prev_sibling(0), next_sibling(0), data(val)
+tree_node_<T>::tree_node_(T val)
+	: parent(nullptr), first_child(nullptr), last_child(nullptr), prev_sibling(nullptr), next_sibling(nullptr), data(std::move(val))
 	{
 	}
 
@@ -420,7 +420,7 @@ class tree {
 		template<class StrictWeakOrdering>
 		class compare_nodes {
 			public:
-				compare_nodes(StrictWeakOrdering comp) : comp_(comp) {};
+				compare_nodes(StrictWeakOrdering comp) : comp_(std::move(comp)) {};
 				
 				bool operator()(const tree_node *a, const tree_node *b) 
 					{
@@ -507,22 +507,22 @@ tree<T, tree_node_allocator>::~tree()
 template <class T, class tree_node_allocator>
 void tree<T, tree_node_allocator>::head_initialise_() 
    { 
-   head = alloc_.allocate(1,0); // MSVC does not have default second argument 
-	feet = alloc_.allocate(1,0);
+   head = alloc_.allocate(1,nullptr); // MSVC does not have default second argument
+	feet = alloc_.allocate(1,nullptr);
 	alloc_.construct(head, tree_node_<T>());
 	alloc_.construct(feet, tree_node_<T>());
 
-   head->parent=0;
-   head->first_child=0;
-   head->last_child=0;
-   head->prev_sibling=0; //head;
+   head->parent=nullptr;
+   head->first_child=nullptr;
+   head->last_child=nullptr;
+   head->prev_sibling=nullptr; //head;
    head->next_sibling=feet; //head;
 
-	feet->parent=0;
-	feet->first_child=0;
-	feet->last_child=0;
+	feet->parent=nullptr;
+	feet->first_child=nullptr;
+	feet->last_child=nullptr;
 	feet->prev_sibling=head;
-	feet->next_sibling=0;
+	feet->next_sibling=nullptr;
    }
 
 template <class T, class tree_node_allocator>
@@ -573,12 +573,12 @@ template<class T, class tree_node_allocator>
 void tree<T, tree_node_allocator>::erase_children(const iterator_base& it)
 	{
 //	std::cout << "erase_children " << it.node << std::endl;
-	if(it.node==0) return;
+	if(it.node==nullptr) return;
 
 	tree_node *cur=it.node->first_child;
-	tree_node *prev=0;
+	tree_node *prev=nullptr;
 
-	while(cur!=0) {
+	while(cur!=nullptr) {
 		prev=cur;
 		cur=cur->next_sibling;
 		erase_children(pre_order_iterator(prev));
@@ -586,8 +586,8 @@ void tree<T, tree_node_allocator>::erase_children(const iterator_base& it)
 		alloc_.destroy(prev);
 		alloc_.deallocate(prev,1);
 		}
-	it.node->first_child=0;
-	it.node->last_child=0;
+	it.node->first_child=nullptr;
+	it.node->last_child=nullptr;
 //	std::cout << "exit" << std::endl;
 	}
 
@@ -601,13 +601,13 @@ iter tree<T, tree_node_allocator>::erase(iter it)
 	ret.skip_children();
 	++ret;
 	erase_children(it);
-	if(cur->prev_sibling==0) {
+	if(cur->prev_sibling==nullptr) {
 		cur->parent->first_child=cur->next_sibling;
 		}
 	else {
 		cur->prev_sibling->next_sibling=cur->next_sibling;
 		}
-	if(cur->next_sibling==0) {
+	if(cur->next_sibling==nullptr) {
 		cur->parent->last_child=cur->prev_sibling;
 		}
 	else {
@@ -713,8 +713,8 @@ typename tree<T, tree_node_allocator>::fixed_depth_iterator tree<T, tree_node_al
 template <class T, class tree_node_allocator>
 typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::begin(const iterator_base& pos) const
 	{
-	assert(pos.node!=0);
-	if(pos.node->first_child==0) {
+	assert(pos.node!=nullptr);
+	if(pos.node->first_child==nullptr) {
 		return end(pos);
 		}
 	return pos.node->first_child;
@@ -723,7 +723,7 @@ typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_alloca
 template <class T, class tree_node_allocator>
 typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::end(const iterator_base& pos) const
 	{
-	sibling_iterator ret(0);
+	sibling_iterator ret(nullptr);
 	ret.parent_=pos.node;
 	return ret;
 	}
@@ -764,7 +764,7 @@ template <class T, class tree_node_allocator>
 template <typename iter>
 iter tree<T, tree_node_allocator>::parent(iter position) 
 	{
-	assert(position.node!=0);
+	assert(position.node!=nullptr);
 	return iter(position.node->parent);
 	}
 
@@ -899,14 +899,14 @@ iter tree<T, tree_node_allocator>::append_child(iter position, const T& x)
 	assert(position.node!=feet);
 	assert(position.node);
 
-	tree_node* tmp = alloc_.allocate(1,0);
+	tree_node* tmp = alloc_.allocate(1,nullptr);
 	alloc_.construct(tmp, x);
 //	kp::constructor(&tmp->data, x);
-	tmp->first_child=0;
-	tmp->last_child=0;
+	tmp->first_child=nullptr;
+	tmp->last_child=nullptr;
 
 	tmp->parent=position.node;
-	if(position.node->last_child!=0) {
+	if(position.node->last_child!=nullptr) {
 		position.node->last_child->next_sibling=tmp;
 		}
 	else {
@@ -914,7 +914,7 @@ iter tree<T, tree_node_allocator>::append_child(iter position, const T& x)
 		}
 	tmp->prev_sibling=position.node->last_child;
 	position.node->last_child=tmp;
-	tmp->next_sibling=0;
+	tmp->next_sibling=nullptr;
 	return tmp;
 	}
 
@@ -1014,22 +1014,22 @@ template <class T, class tree_node_allocator>
 template <class iter>
 iter tree<T, tree_node_allocator>::insert(iter position, const T& x)
 	{
-	if(position.node==0) {
+	if(position.node==nullptr) {
 		position.node=feet; // Backward compatibility: when calling insert on a null node,
 		                    // insert before the feet.
 		}
-	tree_node* tmp = alloc_.allocate(1,0);
+	tree_node* tmp = alloc_.allocate(1,nullptr);
 	alloc_.construct(tmp, x);
 //	kp::constructor(&tmp->data, x);
-	tmp->first_child=0;
-	tmp->last_child=0;
+	tmp->first_child=nullptr;
+	tmp->last_child=nullptr;
 
 	tmp->parent=position.node->parent;
 	tmp->next_sibling=position.node;
 	tmp->prev_sibling=position.node->prev_sibling;
 	position.node->prev_sibling=tmp;
 
-	if(tmp->prev_sibling==0) {
+	if(tmp->prev_sibling==nullptr) {
 		if(tmp->parent) // when inserting nodes at the head, there is no parent
 			tmp->parent->first_child=tmp;
 		}
@@ -1148,21 +1148,21 @@ iter tree<T, tree_node_allocator>::replace(iter position, const iterator_base& f
 //	std::cout << "warning!" << position.node << std::endl;
 	erase_children(position);	
 //	std::cout << "no warning!" << std::endl;
-	tree_node* tmp = alloc_.allocate(1,0);
+	tree_node* tmp = alloc_.allocate(1,nullptr);
 	alloc_.construct(tmp, (*from));
 //	kp::constructor(&tmp->data, (*from));
-	tmp->first_child=0;
-	tmp->last_child=0;
-	if(current_to->prev_sibling==0) {
-		if(current_to->parent!=0)
+	tmp->first_child=nullptr;
+	tmp->last_child=nullptr;
+	if(current_to->prev_sibling==nullptr) {
+		if(current_to->parent!=nullptr)
 			current_to->parent->first_child=tmp;
 		}
 	else {
 		current_to->prev_sibling->next_sibling=tmp;
 		}
 	tmp->prev_sibling=current_to->prev_sibling;
-	if(current_to->next_sibling==0) {
-		if(current_to->parent!=0)
+	if(current_to->next_sibling==nullptr) {
+		if(current_to->parent!=nullptr)
 			current_to->parent->last_child=tmp;
 		}
 	else {
@@ -1181,16 +1181,16 @@ iter tree<T, tree_node_allocator>::replace(iter position, const iterator_base& f
 	pre_order_iterator toit=tmp;
 	// copy all children
 	do {
-		assert(current_from!=0);
-		if(current_from->first_child != 0) {
+		assert(current_from!=nullptr);
+		if(current_from->first_child != nullptr) {
 			current_from=current_from->first_child;
 			toit=append_child(toit, current_from->data);
 			}
 		else {
-			while(current_from->next_sibling==0 && current_from!=start_from) {
+			while(current_from->next_sibling==nullptr && current_from!=start_from) {
 				current_from=current_from->parent;
 				toit=parent(toit);
-				assert(current_from!=0);
+				assert(current_from!=nullptr);
 				}
 			current_from=current_from->next_sibling;
 			if(current_from!=last) {
@@ -1530,8 +1530,8 @@ void tree<T, tree_node_allocator>::sort(sibling_iterator from, sibling_iterator
 	tree_node *prev=from.node->prev_sibling;
 	tree_node *next=it2.node->next_sibling;
 	typename std::multiset<tree_node *, compare_nodes<StrictWeakOrdering> >::iterator nit=nodes.begin(), eit=nodes.end();
-	if(prev==0) {
-		if((*nit)->parent!=0) // to catch "sorting the head" situations, when there is no parent
+	if(prev==nullptr) {
+		if((*nit)->parent!=nullptr) // to catch "sorting the head" situations, when there is no parent
 			(*nit)->parent->first_child=(*nit);
 		}
 	else prev->next_sibling=(*nit);
@@ -1551,8 +1551,8 @@ void tree<T, tree_node_allocator>::sort(sibling_iterator from, sibling_iterator
 	// eit points to the last node in the sorted range.
 	(*eit)->next_sibling=next;
    (*eit)->prev_sibling=prev; // missed in the loop above
-	if(next==0) {
-		if((*eit)->parent!=0) // to catch "sorting the head" situations, when there is no parent
+	if(next==nullptr) {
+		if((*eit)->parent!=nullptr) // to catch "sorting the head" situations, when there is no parent
 			(*eit)->parent->last_child=(*eit);
 		}
 	else next->prev_sibling=(*eit);
@@ -2038,7 +2038,7 @@ bool tree<T, tree_node_allocator>::leaf_iterator::operator==(const leaf_iterator
 template <class T, class tree_node_allocator>
 typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::iterator_base::begin() const
 	{
-	if(node->first_child==0) 
+	if(node->first_child==nullptr)
 		return end();
 
 	sibling_iterator ret(node->first_child);
@@ -2049,7 +2049,7 @@ typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_alloca
 template <class T, class tree_node_allocator>
 typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::iterator_base::end() const
 	{
-	sibling_iterator ret(0);
+	sibling_iterator ret(nullptr);
 	ret.parent_=node;
 	return ret;
 	}
@@ -2086,7 +2086,7 @@ unsigned int tree<T, tree_node_allocator>::iterator_base::number_of_children() c
 
 template <class T, class tree_node_allocator>
 tree<T, tree_node_allocator>::pre_order_iterator::pre_order_iterator() 
-	: iterator_base(0)
+	: iterator_base(nullptr)
 	{
 	}
 
@@ -2119,15 +2119,15 @@ tree<T, tree_node_allocator>::pre_order_iterator::pre_order_iterator(const sibli
 template <class T, class tree_node_allocator>
 typename tree<T, tree_node_allocator>::pre_order_iterator& tree<T, tree_node_allocator>::pre_order_iterator::operator++()
 	{
-	assert(this->node!=0);
-	if(!this->skip_current_children_ && this->node->first_child != 0) {
+	assert(this->node!=nullptr);
+	if(!this->skip_current_children_ && this->node->first_child != nullptr) {
 		this->node=this->node->first_child;
 		}
 	else {
 		this->skip_current_children_=false;
-		while(this->node->next_sibling==0) {
+		while(this->node->next_sibling==nullptr) {
 			this->node=this->node->parent;
-			if(this->node==0)
+			if(this->node==nullptr)
 				return *this;
 			}
 		this->node=this->node->next_sibling;
@@ -2599,9 +2599,9 @@ tree<T, tree_node_allocator>::sibling_iterator::sibling_iterator(const sibling_i
 template <class T, class tree_node_allocator>
 void tree<T, tree_node_allocator>::sibling_iterator::set_parent_()
 	{
-	parent_=0;
-	if(this->node==0) return;
-	if(this->node->parent!=0)
+	parent_=nullptr;
+	if(this->node==nullptr) return;
+	if(this->node->parent!=nullptr)
 		parent_=this->node->parent;
 	}
 
diff --git a/libbase/tu_file.cpp b/libbase/tu_file.cpp
index f69e930..0091cb7 100644
--- a/libbase/tu_file.cpp
+++ b/libbase/tu_file.cpp
@@ -34,13 +34,13 @@ public:
     /// TODO: define what happens when the stream
     ///       is in error condition.
     ///
-    boost::uint32_t read_le32() 
+    std::uint32_t 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);
     }
 	
@@ -49,10 +49,10 @@ public:
     /// TODO: define what happens when the stream
     ///       is in error condition, see bad().
     ///
-    boost::uint16_t read_le16()
+    std::uint16_t 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,8 +61,8 @@ public:
     /// TODO: define what happens when the stream
     ///       is in error condition, see bad().
     ///
-    boost::uint8_t read_byte() {
-        boost::uint8_t u;
+    std::uint8_t read_byte() {
+        std::uint8_t u;
         read(&u, 1);
         return u;
     }
@@ -240,18 +240,18 @@ tu_file::close()
     std::fclose(_data);
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 makeFileChannel(FILE* fp, bool close)
 {
-    std::auto_ptr<IOChannel> ret(new tu_file(fp, close));
+    std::unique_ptr<IOChannel> ret(new tu_file(fp, close));
     return ret;
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 makeFileChannel(const char* filepath, const char* mode)
 {
 	FILE* fp = fopen(filepath, mode);
-	if ( fp == 0 ) { return std::auto_ptr<IOChannel>(0); }
+	if ( fp == nullptr ) { return std::unique_ptr<IOChannel>(); }
 
 	return makeFileChannel(fp, true);
 }
diff --git a/libbase/tu_file.h b/libbase/tu_file.h
index ba82607..75eb4b5 100644
--- a/libbase/tu_file.h
+++ b/libbase/tu_file.h
@@ -25,7 +25,7 @@ namespace gnash {
 /// @param fp A C stream
 ///
 /// @param close Whether the C stream should be automatically closed.
-DSOEXPORT std::auto_ptr<IOChannel> makeFileChannel(FILE* fp, bool close);
+DSOEXPORT std::unique_ptr<IOChannel> makeFileChannel(FILE* fp, bool close);
 
 /// \brief
 /// Creates an IOChannel by opening the given file in the given mode.
@@ -36,7 +36,7 @@ DSOEXPORT std::auto_ptr<IOChannel> makeFileChannel(FILE* fp, bool close);
 /// std::fopen)
 ///
 /// @return An IOChannel or NULL if the file could not be opened.
-DSOEXPORT std::auto_ptr<IOChannel> makeFileChannel(const char* filepath, const char* mode);
+DSOEXPORT std::unique_ptr<IOChannel> makeFileChannel(const char* filepath, const char* mode);
 
 } // namespace gnash
 #endif 
diff --git a/libbase/utf8.cpp b/libbase/utf8.cpp
index 31f3c8e..7e4cf7f 100644
--- a/libbase/utf8.cpp
+++ b/libbase/utf8.cpp
@@ -23,7 +23,7 @@
 #include "utf8.h"
 
 #include <limits>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <string>
 #include <vector>
 #include <cstdlib>
@@ -32,7 +32,7 @@ namespace gnash {
 namespace utf8 {
 
 namespace {
-    const boost::uint32_t invalid = std::numeric_limits<boost::uint32_t>::max();
+    const std::uint32_t invalid = std::numeric_limits<std::uint32_t>::max();
 }
 
 std::wstring
@@ -44,7 +44,7 @@ decodeCanonicalString(const std::string& str, int version)
     std::string::const_iterator it = str.begin(), e = str.end();
     
     if (version > 5) {
-        while (boost::uint32_t code = decodeNextUnicodeCharacter(it, e)) {
+        while (std::uint32_t code = decodeNextUnicodeCharacter(it, e)) {
             if (code == invalid) {
                 continue;        
             }
@@ -81,7 +81,7 @@ encodeCanonicalString(const std::wstring& wstr, int version)
 }
 
 std::string
-encodeLatin1Character(boost::uint32_t ucsCharacter)
+encodeLatin1Character(std::uint32_t ucsCharacter)
 {
     std::string text;
     text.push_back(static_cast<unsigned char>(ucsCharacter));
@@ -89,11 +89,11 @@ encodeLatin1Character(boost::uint32_t ucsCharacter)
 }
 
 
-boost::uint32_t
+std::uint32_t
 decodeNextUnicodeCharacter(std::string::const_iterator& it,
                              const std::string::const_iterator& e)
 {
-    boost::uint32_t uc;
+    std::uint32_t uc;
 
     // Security considerations:
     //
@@ -123,7 +123,7 @@ decodeNextUnicodeCharacter(std::string::const_iterator& it,
     if (it == e || *it == 0) return 0;    // End of buffer.  Do not advance.
 
     // Conventional 7-bit ASCII; return and increment iterator:
-    if ((*it & 0x80) == 0) return static_cast<boost::uint32_t>(*it++);
+    if ((*it & 0x80) == 0) return static_cast<std::uint32_t>(*it++);
 
     // Multi-byte sequences
     if ((*it & 0xE0) == 0xC0) {
@@ -162,7 +162,7 @@ decodeNextUnicodeCharacter(std::string::const_iterator& it,
 // TODO: buffer as std::string; index (iterator); 
 
 std::string
-encodeUnicodeCharacter(boost::uint32_t ucs_character)
+encodeUnicodeCharacter(std::uint32_t ucs_character)
 {
 
     std::string text;
@@ -204,14 +204,14 @@ encodeUnicodeCharacter(boost::uint32_t ucs_character)
 #define ENC_UTF16BE 2
 #define ENC_UTF16LE 3
 
-char*
-stripBOM(char* in, size_t& size, TextEncoding& encoding)
+const char*
+stripBOM(const char* in, size_t& size, TextEncoding& encoding)
 {
     encoding = encUNSPECIFIED;
     if ( size > 2 )
     {
         // need *ptr to be unsigned or cast all 0xNN
-        unsigned char* ptr = reinterpret_cast<unsigned char*>(in);
+        const unsigned char* ptr = reinterpret_cast<const unsigned char*>(in);
 
         if (*ptr == 0xFF && *(ptr+1) == 0xFE) {
             // Text is UTF-16 LE
@@ -295,7 +295,7 @@ guessEncoding(const std::string &str, int &length, std::vector<int>& offsets)
         offsets.push_back(it - str.begin()); // current position
 
         // Advances the iterator to point to the next 
-        boost::uint32_t c = utf8::decodeNextUnicodeCharacter(it, e);
+        std::uint32_t c = utf8::decodeNextUnicodeCharacter(it, e);
 
         if (c == utf8::invalid) {
             is_sought = false;
@@ -358,7 +358,7 @@ guessEncoding(const std::string &str, int &length, std::vector<int>& offsets)
 #ifdef ANDROID
     length = str.size();
 #else
-    length = std::mbstowcs(NULL, str.c_str(), 0);
+    length = std::mbstowcs(nullptr, str.c_str(), 0);
 #endif
     if (length == -1)
     {
diff --git a/libbase/utf8.h b/libbase/utf8.h
index 2be2711..34e54eb 100644
--- a/libbase/utf8.h
+++ b/libbase/utf8.h
@@ -22,7 +22,7 @@
 #define UTF8_H
 
 #include <string>
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include <vector>
 
 #include "dsodefs.h" // For DSOEXPORT
@@ -98,18 +98,18 @@ namespace utf8 {
     /// as output.  Advances string iterator past the character
     /// returned, unless the returned character is '\0', in which
     /// case the iterator does not advance.
-    DSOEXPORT boost::uint32_t decodeNextUnicodeCharacter(std::string::const_iterator& it,
+    DSOEXPORT std::uint32_t decodeNextUnicodeCharacter(std::string::const_iterator& it,
                                                      const std::string::const_iterator& e);
 
     /// \brief Encodes the given wide character into a canonical
     /// string, theoretically up to 6 chars in length.
-    DSOEXPORT std::string encodeUnicodeCharacter(boost::uint32_t ucs_character);
+    DSOEXPORT std::string encodeUnicodeCharacter(std::uint32_t ucs_character);
     
     /// Encodes the given wide character into an at least 8-bit character.
     //
     /// Allows storage of Latin1 (ISO-8859-1) characters. This
     /// is the format of SWF5 and below.
-    DSOEXPORT std::string encodeLatin1Character(boost::uint32_t ucsCharacter);
+    DSOEXPORT std::string encodeLatin1Character(std::uint32_t ucsCharacter);
 
     enum TextEncoding {
         encUNSPECIFIED,
@@ -148,7 +148,8 @@ namespace utf8 {
     /// @returns
     ///    A pointer either equal to 'in' or some bytes inside it.
     ///
-    DSOEXPORT char* stripBOM(char* in, size_t& size, TextEncoding& encoding);
+    DSOEXPORT const char* stripBOM(const char* in, size_t& size,
+                                   TextEncoding& encoding);
 
     /// Return name of a text encoding
     DSOEXPORT const char* textEncodingName(TextEncoding enc);
diff --git a/libbase/utility.h b/libbase/utility.h
index 8b9f48c..10f35aa 100644
--- a/libbase/utility.h
+++ b/libbase/utility.h
@@ -96,7 +96,7 @@ std::string typeName(const T& inst)
 #if defined(__GNUC__) && __GNUC__ > 2
 	int status;
 	char* typeNameUnmangled = 
-		abi::__cxa_demangle (typeName.c_str(), NULL, NULL,
+		abi::__cxa_demangle (typeName.c_str(), nullptr, nullptr,
 				     &status);
 	if (status == 0)
 	{
diff --git a/libbase/zlib_adapter.cpp b/libbase/zlib_adapter.cpp
index 1ef03d5..c5970ad 100644
--- a/libbase/zlib_adapter.cpp
+++ b/libbase/zlib_adapter.cpp
@@ -25,7 +25,7 @@ namespace gnash {
 // Stubs, in case client doesn't want to link to zlib.
 namespace zlib_adapter
 {
-    std::auto_ptr<IOChannel> make_inflater(std::auto_ptr<IOChannel> /*in*/) {
+    std::unique_ptr<IOChannel> make_inflater(std::unique_ptr<IOChannel> /*in*/) {
         std::abort(); 
     }
 }
@@ -43,7 +43,7 @@ class InflaterIOChannel : public IOChannel
 public:
 
     /// Constructor.
-    InflaterIOChannel(std::auto_ptr<IOChannel> in);
+    InflaterIOChannel(std::unique_ptr<IOChannel> in);
 
     ~InflaterIOChannel() {
         rewind_unused_bytes();
@@ -81,7 +81,7 @@ private:
 
     static const int ZBUF_SIZE = 4096;
 
-    std::auto_ptr<IOChannel> m_in;
+    std::unique_ptr<IOChannel> m_in;
 
     // position of the input stream where we started inflating.
     std::streampos m_initial_stream_pos;
@@ -144,10 +144,10 @@ InflaterIOChannel::reset()
         return;
     }
 
-    m_zstream.next_in = 0;
+    m_zstream.next_in = nullptr;
     m_zstream.avail_in = 0;
 
-    m_zstream.next_out = 0;
+    m_zstream.next_out = nullptr;
     m_zstream.avail_out = 0;
 
     // Rewind the underlying stream.
@@ -291,9 +291,9 @@ InflaterIOChannel::seek(std::streampos pos)
     return true; 
 }
 
-InflaterIOChannel::InflaterIOChannel(std::auto_ptr<IOChannel> in)
+InflaterIOChannel::InflaterIOChannel(std::unique_ptr<IOChannel> in)
     :
-    m_in(in),
+    m_in(std::move(in)),
     m_initial_stream_pos(m_in->tell()),
     m_zstream(),
     m_logical_stream_pos(m_initial_stream_pos),
@@ -310,10 +310,10 @@ InflaterIOChannel::InflaterIOChannel(std::auto_ptr<IOChannel> in)
     }
 }
 
-std::auto_ptr<IOChannel> make_inflater(std::auto_ptr<IOChannel> in)
+std::unique_ptr<IOChannel> make_inflater(std::unique_ptr<IOChannel> in)
 {
     assert(in.get());
-    return std::auto_ptr<IOChannel>(new InflaterIOChannel(in));
+    return std::unique_ptr<IOChannel>(new InflaterIOChannel(std::move(in)));
 }
 
 }
diff --git a/libbase/zlib_adapter.h b/libbase/zlib_adapter.h
index 9d590d5..6ad009b 100644
--- a/libbase/zlib_adapter.h
+++ b/libbase/zlib_adapter.h
@@ -29,8 +29,8 @@ namespace zlib_adapter
     /// new stream.
     //
     ///
-    DSOEXPORT std::auto_ptr<IOChannel>
-        make_inflater(std::auto_ptr<IOChannel> in);
+    DSOEXPORT std::unique_ptr<IOChannel>
+        make_inflater(std::unique_ptr<IOChannel> in);
 
 } // namespace gnash.zlib_adapter
 } // namespace gnash
diff --git a/libcore/AMFConverter.cpp b/libcore/AMFConverter.cpp
index da68fb6..0c2c155 100644
--- a/libcore/AMFConverter.cpp
+++ b/libcore/AMFConverter.cpp
@@ -159,7 +159,7 @@ Writer::writeObject(as_object* obj)
             writePlainNumber(_buf, d);
 
             // This should be timezone
-            boost::uint16_t tz = 0; 
+            std::uint16_t tz = 0;
             _buf.appendNetworkShort(tz);
 
             return true;
@@ -290,7 +290,7 @@ Writer::writeNull()
 }
 
 void
-Writer::writeData(const boost::uint8_t* data, size_t length)
+Writer::writeData(const std::uint8_t* data, size_t length)
 {
     _buf.append(data, length);
 }
@@ -343,7 +343,7 @@ Reader::operator()(as_value& val, Type t)
                 return true;
             
             case NULL_AMF0:
-                val = static_cast<as_object*>(0);
+                val = static_cast<as_object*>(nullptr);
                 return true;
             
             // Object types need access to Global_as to create objects.
@@ -407,7 +407,7 @@ Reader::readStrictArray()
         throw AMFException(_("Read past _end of buffer for strict array length"));
     }
 
-    const boost::uint32_t li = readNetworkLong(_pos);
+    const std::uint32_t li = readNetworkLong(_pos);
     _pos += 4;
 
 #ifdef GNASH_DEBUG_AMF_DESERIALIZE
@@ -442,7 +442,7 @@ Reader::readArray()
         throw AMFException(_("Read past _end of buffer for array length"));
     }
 
-    const boost::uint32_t li = readNetworkLong(_pos);
+    const std::uint32_t li = readNetworkLong(_pos);
     _pos += 4;
     
     as_object* array = _global.createArray();
@@ -469,7 +469,7 @@ Reader::readArray()
                         "block"));
             break;
         }
-        const boost::uint16_t strlen = readNetworkShort(_pos);
+        const std::uint16_t strlen = readNetworkShort(_pos);
         _pos += 2; 
 
         // _end of ECMA_ARRAY is signalled by an empty string
@@ -556,7 +556,7 @@ Reader::readReference()
     if (_end - _pos < 2) {
         throw AMFException("Read past _end of buffer for reference index");
     }
-    const boost::uint16_t si = readNetworkShort(_pos);
+    const std::uint16_t si = readNetworkShort(_pos);
     _pos += 2;
 
 #ifdef GNASH_DEBUG_AMF_DESERIALIZE
@@ -592,7 +592,7 @@ Reader::readDate()
             throw AMFException("premature _end of input reading "
                         "timezone from Date type");
         }
-        const boost::uint16_t tz = readNetworkShort(_pos);
+        const std::uint16_t tz = readNetworkShort(_pos);
         if (tz != 0) {
             log_error(_("Date type encoded timezone info %1%, even though "
                 "this field should not be used."), tz);
diff --git a/libcore/AMFConverter.h b/libcore/AMFConverter.h
index 4b08aee..fc16ef2 100644
--- a/libcore/AMFConverter.h
+++ b/libcore/AMFConverter.h
@@ -92,7 +92,7 @@ public:
     bool writePropertyName(const std::string& name);
 
     /// Write custom data for special cases.
-    void writeData(const boost::uint8_t* data, size_t length);
+    void writeData(const std::uint8_t* data, size_t length);
 
 private:
 
@@ -132,7 +132,7 @@ public:
     ///                 ensure that pos is not greater than end on every read.
     /// @param end      The end of the buffer.
     /// @param gl       A global reference for creating objects when necessary.
-    Reader(const boost::uint8_t*& pos, const boost::uint8_t* end, Global_as& gl)
+    Reader(const std::uint8_t*& pos, const std::uint8_t* end, Global_as& gl)
         :
         _pos(pos),
         _end(end),
@@ -172,10 +172,10 @@ private:
     std::vector<as_object*> _objectRefs;
 
     /// The current position in the buffer.
-    const boost::uint8_t*& _pos;
+    const std::uint8_t*& _pos;
 
     /// The end of the buffer.
-    const boost::uint8_t* const _end;
+    const std::uint8_t* const _end;
 
     /// For creating objects if necessary.
     Global_as& _global;
diff --git a/libcore/Bitmap.cpp b/libcore/Bitmap.cpp
index cad8767..24024ae 100644
--- a/libcore/Bitmap.cpp
+++ b/libcore/Bitmap.cpp
@@ -51,7 +51,7 @@ Bitmap::Bitmap(movie_root& mr, as_object* object,
     :
     DisplayObject(mr, object, parent),
     _def(def),
-    _bitmapData(0),
+    _bitmapData(nullptr),
     _width(def->get_width_pixels()),
     _height(def->get_height_pixels())
 {
@@ -67,7 +67,7 @@ Bitmap::bitmap() const
 {
     if (_def) return _def->bitmap();
     if (_bitmapData) return _bitmapData->bitmapInfo();
-    return 0;
+    return nullptr;
 }
 
 void
@@ -105,7 +105,7 @@ Bitmap::construct(as_object* /*init*/)
 }
 
 bool
-Bitmap::pointInShape(boost::int32_t  x, boost::int32_t  y) const
+Bitmap::pointInShape(std::int32_t  x, std::int32_t  y) const
 {
     return pointInBounds(x, y);
 }
@@ -150,7 +150,7 @@ Bitmap::update()
     set_invalidated();
 
     if (_bitmapData->disposed()) {
-        _bitmapData = 0;
+        _bitmapData = nullptr;
         _shape.clear();
     }
 }
diff --git a/libcore/Bitmap.h b/libcore/Bitmap.h
index b0f4628..91731f0 100644
--- a/libcore/Bitmap.h
+++ b/libcore/Bitmap.h
@@ -72,10 +72,10 @@ public:
     virtual SWFRect getBounds() const;
 
     /// Test whether a point is in the Bitmap's bounds.
-    virtual bool pointInShape(boost::int32_t x, boost::int32_t y) const;
+    virtual bool pointInShape(std::int32_t x, std::int32_t y) const;
 
     /// Called when the object is placed on stage.
-    virtual void construct(as_object* init = 0);
+    virtual void construct(as_object* init = nullptr);
 
 protected:
 
diff --git a/libcore/BitmapMovie.cpp b/libcore/BitmapMovie.cpp
index 2c8579c..60e5e5e 100644
--- a/libcore/BitmapMovie.cpp
+++ b/libcore/BitmapMovie.cpp
@@ -30,7 +30,7 @@ BitmapMovie::BitmapMovie(as_object* object, const BitmapMovieDefinition* def,
 {
     assert(def);
     assert(object);
-    Bitmap* bm = new Bitmap(stage(), 0, def, this);
+    Bitmap* bm = new Bitmap(stage(), nullptr, def, this);
 
     const int depth = 1 + DisplayObject::staticDepthOffset;
     placeDisplayObject(bm, depth);
diff --git a/libcore/Button.cpp b/libcore/Button.cpp
index 94cdd7c..6487fff 100644
--- a/libcore/Button.cpp
+++ b/libcore/Button.cpp
@@ -24,7 +24,7 @@
 
 #include "Button.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 #include <utility>
 #include <functional>
 
@@ -46,6 +46,7 @@
 #include "RunResources.h"
 #include "sound_definition.h"
 #include "Transform.h"
+#include "sound_handler.h"
 
 /** \page buttons Buttons and mouse behaviour
 
@@ -368,9 +369,8 @@ Button::display(Renderer& renderer, const Transform& base)
     // TODO: by keeping chars sorted by depth we'd avoid the sort on display
     std::sort(actChars.begin(), actChars.end(), charDepthLessThen);
 
-    for (DisplayObjects::iterator it = actChars.begin(), e = actChars.end();
-            it != e; ++it) {
-        (*it)->display(renderer, xform);
+    for (auto& actChar : actChars) {
+        actChar->display(renderer, xform);
     }
 
     clear_invalidated();
@@ -380,11 +380,11 @@ Button::display(Renderer& renderer, const Transform& base)
 // Return the topmost entity that the given point covers.  NULL if none.
 // I.e. check against ourself.
 InteractiveObject*
-Button::topmostMouseEntity(boost::int32_t x, boost::int32_t y)
+Button::topmostMouseEntity(std::int32_t x, std::int32_t y)
 {
     if (!visible() || !isEnabled())
     {
-        return 0;
+        return nullptr;
     }
 
     //-------------------------------------------------
@@ -417,7 +417,7 @@ Button::topmostMouseEntity(boost::int32_t x, boost::int32_t y)
     //-------------------------------------------------
 
     // Find hit DisplayObjects
-    if ( _hitCharacters.empty() ) return 0;
+    if ( _hitCharacters.empty() ) return nullptr;
 
     // point is in p's space,
     // we need to convert it in world space
@@ -437,7 +437,7 @@ Button::topmostMouseEntity(boost::int32_t x, boost::int32_t y)
         }
     }
 
-    return NULL;
+    return nullptr;
 }
 
 
@@ -529,7 +529,7 @@ Button::mouseEvent(const event_id& event)
             const SWF::SoundInfoRecord& sinfo = bs.soundInfo;
 
             const sound::SoundEnvelopes* env = 
-                sinfo.envelopes.empty() ? 0 : &sinfo.envelopes;
+                sinfo.envelopes.empty() ? nullptr : &sinfo.envelopes;
 
             s->startSound(bs.sample->m_sound_handler_id,
                     bs.soundInfo.loopCount,
@@ -559,9 +559,9 @@ Button::mouseEvent(const event_id& event)
     _def->forEachTrigger(event, xec);
 
     // check for built-in event handler.
-    std::auto_ptr<ExecutableCode> code (get_event_handler(event));
+    std::unique_ptr<ExecutableCode> code (get_event_handler(event));
     if (code.get()) {
-        mr.pushAction(code, movie_root::PRIORITY_DOACTION);
+        mr.pushAction(std::move(code), movie_root::PRIORITY_DOACTION);
     }
 
     sendEvent(*getObject(this), get_environment(), event.functionURI());
@@ -577,7 +577,7 @@ Button::getActiveCharacters(ConstDisplayObjects& list) const
     // DisplayObjects.
     std::remove_copy_if(_stateCharacters.begin(), _stateCharacters.end(),
             std::back_inserter(list),
-            boost::bind(&isCharacterNull, _1, false));
+            std::bind(&isCharacterNull, std::placeholders::_1, false));
 
 }
 
@@ -591,7 +591,7 @@ Button::getActiveCharacters(DisplayObjects& list, bool includeUnloaded)
     // DisplayObjects, optionally including unloaded DisplayObjects.
     std::remove_copy_if(_stateCharacters.begin(), _stateCharacters.end(),
             std::back_inserter(list),
-            boost::bind(&isCharacterNull, _1, includeUnloaded));
+            std::bind(&isCharacterNull, std::placeholders::_1, includeUnloaded));
     
 }
 
@@ -662,8 +662,8 @@ Button::set_current_state(MouseState new_state)
             if ( oldch && oldch->unloaded() ) {
                 removeInstanceProperty(*this, oldch);
                 if ( ! oldch->isDestroyed() ) oldch->destroy();
-                _stateCharacters[i] = NULL;
-                oldch = NULL;
+                _stateCharacters[i] = nullptr;
+                oldch = nullptr;
             }
 
             if ( oldch ) // the one we have should not be there... unload!
@@ -675,7 +675,7 @@ Button::set_current_state(MouseState new_state)
                     // No onUnload handler: destroy and clear slot
                     removeInstanceProperty(*this, oldch);
                     if (!oldch->isDestroyed()) oldch->destroy();
-                    _stateCharacters[i] = NULL;
+                    _stateCharacters[i] = nullptr;
                 }
                 else
                 {
@@ -697,8 +697,8 @@ Button::set_current_state(MouseState new_state)
             {
                 removeInstanceProperty(*this, oldch);
                 if ( ! oldch->isDestroyed() ) oldch->destroy();
-                _stateCharacters[i] = NULL;
-                oldch = NULL;
+                _stateCharacters[i] = nullptr;
+                oldch = nullptr;
             }
 
             if (!oldch) {
@@ -738,8 +738,8 @@ Button::add_invalidated_bounds(InvalidatedRanges& ranges, bool force)
     DisplayObjects actChars;
     getActiveCharacters(actChars);
     std::for_each(actChars.begin(), actChars.end(),
-            boost::bind(&DisplayObject::add_invalidated_bounds, _1,
-                boost::ref(ranges), force || invalidated())
+            std::bind(&DisplayObject::add_invalidated_bounds, std::placeholders::_1,
+                std::ref(ranges), force || invalidated())
     );
 }
 
@@ -765,7 +765,7 @@ Button::getBounds() const
 }
 
 bool
-Button::pointInShape(boost::int32_t x, boost::int32_t y) const
+Button::pointInShape(std::int32_t x, std::int32_t y) const
 {
     typedef std::vector<const DisplayObject*> Chars;
     Chars actChars;
@@ -798,9 +798,9 @@ Button::construct(as_object* initObj)
     // Instantiate the hit DisplayObjects
     ActiveRecords hitChars;
     get_active_records(hitChars, MOUSESTATE_HIT);
-    for (ActiveRecords::iterator i=hitChars.begin(),e=hitChars.end(); i!=e; ++i)
+    for (const auto& hitChar : hitChars)
     {
-        const SWF::ButtonRecord& rec = _def->buttonRecords()[*i];
+        const SWF::ButtonRecord& rec = _def->buttonRecords()[hitChar];
 
         // These should not be named!
         DisplayObject* ch = rec.instantiate(this, false);
@@ -818,10 +818,8 @@ Button::construct(as_object* initObj)
     ActiveRecords upChars;
     get_active_records(upChars, MOUSESTATE_UP);
 
-    for (ActiveRecords::iterator i = upChars.begin(), e=upChars.end();
-            i != e; ++i)
+    for (auto rno : upChars)
     {
-        int rno = *i;
         const SWF::ButtonRecord& rec = _def->buttonRecords()[rno];
 
         DisplayObject* ch = rec.instantiate(this);
@@ -846,10 +844,8 @@ Button::markOwnResources() const
 {
 
     // Mark state DisplayObjects as reachable
-    for (DisplayObjects::const_iterator i = _stateCharacters.begin(),
-            e = _stateCharacters.end(); i != e; ++i)
+    for (DisplayObject* ch : _stateCharacters)
     {
-        DisplayObject* ch = *i;
         if (ch) ch->setReachable();
     }
 
@@ -866,10 +862,8 @@ Button::unloadChildren()
 
     // We need to unload all children, or the global instance list
     // will keep growing forever !
-    for (DisplayObjects::iterator i = _stateCharacters.begin(),
-            e = _stateCharacters.end(); i != e; ++i)
+    for (DisplayObject* ch : _stateCharacters)
     {
-        DisplayObject* ch = *i;
         if (!ch || ch->unloaded()) continue;
         if (ch->unload()) childsHaveUnload = true;
     }
@@ -890,9 +884,7 @@ Button::destroy()
 {
     stage().removeButton(this);
 
-    for (DisplayObjects::iterator i = _stateCharacters.begin(),
-            e=_stateCharacters.end(); i != e; ++i) {
-        DisplayObject* ch = *i;
+    for (DisplayObject* ch : _stateCharacters) {
         if (!ch || ch->isDestroyed()) continue;
         ch->destroy();
     }
@@ -967,7 +959,7 @@ Button::getMovieInfo(InfoTree& tr, InfoTree::iterator it)
             os.str()));
 
     std::for_each(actChars.begin(), actChars.end(),
-            boost::bind(&DisplayObject::getMovieInfo, _1, tr, localIter)); 
+            std::bind(&DisplayObject::getMovieInfo, std::placeholders::_1, tr, localIter));
 
     return selfIt;
 
diff --git a/libcore/Button.h b/libcore/Button.h
index 1414564..e7b14d9 100644
--- a/libcore/Button.h
+++ b/libcore/Button.h
@@ -94,8 +94,8 @@ public:
     /// Return the topmost entity that the given point covers. NULL if none.
     //
     /// I.e. check against ourself.
-    virtual InteractiveObject* topmostMouseEntity(boost::int32_t x,
-            boost::int32_t y);
+    virtual InteractiveObject* topmostMouseEntity(std::int32_t x,
+            std::int32_t y);
     
     /// Called whenever a mouse event affects this Button.
     virtual void mouseEvent(const event_id& event);
@@ -108,7 +108,7 @@ public:
     virtual SWFRect getBounds() const;
     
     // See dox in DisplayObject.h
-    bool pointInShape(boost::int32_t x, boost::int32_t y) const;
+    bool pointInShape(std::int32_t x, std::int32_t y) const;
 
     bool isEnabled();
 
@@ -121,7 +121,7 @@ public:
     //
     /// @param init     An init object, which can be passed when constructing
     ///                 Buttons with attachMovie, but is never used.
-    virtual void construct(as_object* init = 0);
+    virtual void construct(as_object* init = nullptr);
 
 #ifdef USE_SWFTREE
     // Override to append button DisplayObjects info, see dox in DisplayObject.h
diff --git a/libcore/CharacterProxy.cpp b/libcore/CharacterProxy.cpp
index 2cf9fc1..1ec2ead 100644
--- a/libcore/CharacterProxy.cpp
+++ b/libcore/CharacterProxy.cpp
@@ -38,7 +38,7 @@ CharacterProxy::checkDangling() const
                             "(%s) for later rebinding", _ptr->getTarget(), typeName(*_ptr),
                 _tgt);
 #endif
-		_ptr = 0;
+		_ptr = nullptr;
 	}
 }
 
@@ -61,7 +61,7 @@ CharacterProxy::setReachable() const
 DisplayObject*
 findDisplayObjectByTarget(const std::string& tgtstr, movie_root& mr)
 {
-	if (tgtstr.empty()) return 0;
+	if (tgtstr.empty()) return nullptr;
 	return mr.findCharacterByTarget(tgtstr);
 }
 
diff --git a/libcore/CharacterProxy.h b/libcore/CharacterProxy.h
index 2d16519..e4264da 100644
--- a/libcore/CharacterProxy.h
+++ b/libcore/CharacterProxy.h
@@ -21,7 +21,6 @@
 #define GNASH_CHARACTER_PROXY_H
 
 #include <string>
-#include <cassert>
 #include "dsodefs.h"
 
 // Forward declarations
diff --git a/libcore/ClassHierarchy.cpp b/libcore/ClassHierarchy.cpp
index c59041c..8984c5a 100644
--- a/libcore/ClassHierarchy.cpp
+++ b/libcore/ClassHierarchy.cpp
@@ -19,7 +19,7 @@
 
 #include "ClassHierarchy.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 
 #include "as_object.h"
 #include "PropFlags.h"
@@ -64,10 +64,10 @@ public:
 
     bool isBuiltin() { return true; }
 
-    declare_native_function(const ClassHierarchy::NativeClass &c, as_object *g)
+    declare_native_function(ClassHierarchy::NativeClass c, as_object *g)
         :
         as_function(getGlobal(*g)),
-        _decl(c),
+        _decl(std::move(c)),
         mTarget(g)
     {
     }
@@ -126,7 +126,8 @@ ClassHierarchy::declareAll(const NativeClasses& classes)
     bool(ClassHierarchy::*nf)(const NativeClass& f) =
         &ClassHierarchy::declareClass;
 
-    std::for_each(classes.begin(), classes.end(), boost::bind(nf, this, _1));
+    std::for_each(classes.begin(), classes.end(), std::bind(nf, this,
+        std::placeholders::_1));
 }
 
 } // end of namespace gnash
diff --git a/libcore/ClassHierarchy.h b/libcore/ClassHierarchy.h
index c372c57..8532f1c 100644
--- a/libcore/ClassHierarchy.h
+++ b/libcore/ClassHierarchy.h
@@ -67,10 +67,10 @@ public:
         /// The type of function to use for initialization
 		typedef void (*InitFunc)(as_object& obj, const ObjectURI& uri);
 
-        NativeClass(InitFunc init, const ObjectURI& u, int ver)
+        NativeClass(InitFunc init, ObjectURI u, int ver)
             :
             initializer(init),
-            uri(u),
+            uri(std::move(u)),
             version(ver)
         {}
 
@@ -89,10 +89,9 @@ public:
     /// \brief
 	/// Construct the declaration object. Later set the global and
 	/// extension objects using setGlobal and setExtension
-	ClassHierarchy(as_object* global, Extension* e)
+	ClassHierarchy(as_object* global)
         :
-		mGlobal(global),
-        mExtension(e)
+		mGlobal(global)
 	{}
 
 	/// \brief
@@ -117,7 +116,6 @@ public:
 
 private:
 	as_object* mGlobal;
-	Extension* mExtension;
 };
 
 } 
diff --git a/libcore/DisplayList.cpp b/libcore/DisplayList.cpp
index 1568b52..0604186 100644
--- a/libcore/DisplayList.cpp
+++ b/libcore/DisplayList.cpp
@@ -25,7 +25,7 @@
 #include <algorithm>
 #include <stack>
 #include <cassert>
-#include <boost/bind.hpp>
+#include <functional>
 #include <boost/format.hpp>
 
 #include "log.h"
@@ -43,10 +43,12 @@ namespace {
     /// in the "removed" depth zone
     DisplayList::iterator beginNonRemoved(DisplayList::container_type& c);
 
-	/// Return an constant iterator to the first element of the
+#if GNASH_PARANOIA_LEVEL > 1 && !defined(NDEBUG)
+    /// Return an constant iterator to the first element of the
     /// container NOT in the "removed" depth zone
     DisplayList::const_iterator beginNonRemoved(
             const DisplayList::container_type& c);
+#endif
 
     /// Return the first element in the DisplayList whose depth exceeds
     /// 65535 (-16384).
@@ -117,10 +119,7 @@ DisplayList::getNextHighestDepth() const
     testInvariant();
 
     int nexthighestdepth=0;
-    for (const_iterator it = _charsByDepth.begin(),
-            itEnd = _charsByDepth.end(); it != itEnd; ++it) {
-
-        DisplayObject* ch = *it;
+    for (DisplayObject* ch : _charsByDepth) {
 
         const int chdepth = ch->get_depth();
         if (chdepth >= nexthighestdepth) {
@@ -135,10 +134,7 @@ DisplayList::getDisplayObjectAtDepth(int depth) const
 {
     testInvariant();
 
-    for (const_iterator it = _charsByDepth.begin(), itEnd = _charsByDepth.end();
-        it != itEnd; ++it) {
-
-        DisplayObject* ch = *it;
+    for (DisplayObject* ch : _charsByDepth) {
 
         // Should not be there!
         if (ch->isDestroyed()) continue;
@@ -147,10 +143,10 @@ DisplayList::getDisplayObjectAtDepth(int depth) const
         if (ch->get_depth() == depth) return ch;
 
         // non-existent (chars are ordered by depth)
-        if (ch->get_depth() > depth) return 0;
+        if (ch->get_depth() > depth) return nullptr;
     }
 
-    return 0;
+    return nullptr;
 
 }
 
@@ -166,7 +162,7 @@ DisplayList::getDisplayObjectByName(string_table& st, const ObjectURI& uri,
     container_type::const_iterator it =
         std::find_if(_charsByDepth.begin(), e, NameEquals(st, uri, caseless));
 
-    if (it == e) return 0;
+    if (it == e) return nullptr;
     
     return *it;
 
@@ -181,7 +177,8 @@ DisplayList::placeDisplayObject(DisplayObject* ch, int depth)
 
     container_type::iterator it =
         std::find_if( _charsByDepth.begin(), _charsByDepth.end(),
-                boost::bind(std::not2(DepthLessThan()), _1, depth));
+                std::bind(std::not2(DepthLessThan()), std::placeholders::_1,
+                     depth));
 
     if (it == _charsByDepth.end() || (*it)->get_depth() != depth) {
         // add the new char
@@ -218,7 +215,8 @@ DisplayList::add(DisplayObject* ch, bool replace)
 
     container_type::iterator it =
         std::find_if(_charsByDepth.begin(), _charsByDepth.end(),
-                boost::bind(std::not2(DepthLessThan()), _1, depth));
+                std::bind(std::not2(DepthLessThan()), std::placeholders::_1,
+                     depth));
 
     if (it == _charsByDepth.end() || (*it)->get_depth() != depth) {
         _charsByDepth.insert(it, ch);
@@ -242,7 +240,7 @@ DisplayList::replaceDisplayObject(DisplayObject* ch, int depth,
 
     container_type::iterator it =
         std::find_if(_charsByDepth.begin(), _charsByDepth.end(),
-            boost::bind(std::not2(DepthLessThan()), _1, depth));
+            std::bind(std::not2(DepthLessThan()), std::placeholders::_1, depth));
 
     if (it == _charsByDepth.end() || (*it)->get_depth() != depth) {
         _charsByDepth.insert(it, ch);
@@ -294,7 +292,7 @@ DisplayList::replaceDisplayObject(DisplayObject* ch, int depth,
 // the specified depth.
 void
 DisplayList::moveDisplayObject(int depth, const SWFCxForm* color_xform,
-        const SWFMatrix* mat, boost::uint16_t* ratio)
+        const SWFMatrix* mat, std::uint16_t* ratio)
 {
     testInvariant();
 
@@ -343,7 +341,7 @@ DisplayList::removeDisplayObject(int depth)
     // TODO: optimize to take by-depth order into account
     container_type::iterator it = 
         std::find_if( _charsByDepth.begin(), _charsByDepth.end(),
-            boost::bind(DepthEquals(), _1, depth));
+            std::bind(DepthEquals(), std::placeholders::_1, depth));
 
     if (it != _charsByDepth.end()) {
         // Make a copy (before erasing)
@@ -398,7 +396,8 @@ DisplayList::swapDepths(DisplayObject* ch1, int newdepth)
     // upper bound ...
     container_type::iterator it2 =
         std::find_if(_charsByDepth.begin(), _charsByDepth.end(),
-            boost::bind(std::not2(DepthLessThan()), _1, newdepth));
+            std::bind(std::not2(DepthLessThan()), std::placeholders::_1,
+                newdepth));
 
     if (it1 == _charsByDepth.end()) {
         log_error(_("First argument to DisplayList::swapDepth() "
@@ -457,7 +456,8 @@ DisplayList::insertDisplayObject(DisplayObject* obj, int index)
     // Find the first index greater than or equal to the required index
     container_type::iterator it =
         std::find_if(_charsByDepth.begin(), _charsByDepth.end(),
-            boost::bind(std::not2(DepthLessThan()), _1, index));
+            std::bind(std::not2(DepthLessThan()), std::placeholders::_1,
+                index));
         
     // Insert the DisplayObject before that position
     _charsByDepth.insert(it, obj);
@@ -849,7 +849,8 @@ DisplayList::mergeDisplayList(DisplayList& newList, DisplayObject& o)
         if (chNew->unloaded()) {
             iterator it =
                 std::find_if(_charsByDepth.begin(), _charsByDepth.end(),
-                    boost::bind(std::not2(DepthLessThan()), _1, depthNew));
+                    std::bind(std::not2(DepthLessThan()), std::placeholders::_1,
+                        depthNew));
             
             o.set_invalidated();
             _charsByDepth.insert(it, *itNew);
@@ -904,7 +905,8 @@ DisplayList::reinsertRemovedCharacter(DisplayObject* ch)
     // TODO: optimize this by searching from the end(lowest depth).
     container_type::iterator it =
         std::find_if(_charsByDepth.begin(), _charsByDepth.end(),
-                boost::bind(std::not2(DepthLessThan()), _1, newDepth));
+                std::bind(std::not2(DepthLessThan()), std::placeholders::_1,
+                    newDepth));
 
     _charsByDepth.insert(it, ch);
 
@@ -916,7 +918,7 @@ DisplayList::removeUnloaded()
 {
     testInvariant();
 
-    _charsByDepth.remove_if(boost::mem_fn(&DisplayObject::unloaded));
+    _charsByDepth.remove_if(std::mem_fn(&DisplayObject::unloaded));
 
     testInvariant();
 }
@@ -940,9 +942,11 @@ beginNonRemoved(DisplayList::container_type& c)
         DisplayObject::staticDepthOffset;
     
     return std::find_if(c.begin(), c.end(),
-            boost::bind(std::not2(DepthLessThan()), _1, depth));
+            std::bind(std::not2(DepthLessThan()), std::placeholders::_1,
+                depth));
 }
 
+#if GNASH_PARANOIA_LEVEL > 1 && !defined(NDEBUG)
 DisplayList::const_iterator
 beginNonRemoved(const DisplayList::container_type& c)
 {
@@ -951,14 +955,16 @@ beginNonRemoved(const DisplayList::container_type& c)
         DisplayObject::staticDepthOffset;
 
     return std::find_if(c.begin(), c.end(), 
-            boost::bind(std::not2(DepthLessThan()), _1, depth));
+            std::bind(std::not2(DepthLessThan()), std::placeholders::_1,
+                depth));
 }
+#endif
 
 DisplayList::iterator
 dlistTagsEffectiveZoneEnd(DisplayList::container_type& c)
 {
     return std::find_if(c.begin(), c.end(), 
-            boost::bind(DepthGreaterThan(), _1,
+            std::bind(DepthGreaterThan(), std::placeholders::_1,
                 0xffff + DisplayObject::staticDepthOffset));
 }
 
diff --git a/libcore/DisplayList.h b/libcore/DisplayList.h
index 14aedf0..9561500 100644
--- a/libcore/DisplayList.h
+++ b/libcore/DisplayList.h
@@ -161,7 +161,7 @@ public:
 	/// The new ratio value to assign to the DisplayObject at the given depth.
 	/// If NULL the original ratio will be kept.
 	void moveDisplayObject(int depth, const SWFCxForm* color_xform,
-            const SWFMatrix* mat, boost::uint16_t* ratio);
+            const SWFMatrix* mat, std::uint16_t* ratio);
 
 	/// Removes the object at the specified depth.
 	//
@@ -372,10 +372,8 @@ template <class V>
 void
 DisplayList::visitAll(V& visitor)
 {
-	for (iterator it = _charsByDepth.begin(), itEnd = _charsByDepth.end();
-		it != itEnd; ++it) {
-
-		visitor(*it);
+	for (DisplayObject* ch : _charsByDepth) {
+		visitor(ch);
 	}
 }
 
@@ -383,10 +381,8 @@ template <class V>
 void
 DisplayList::visitAll(V& visitor) const
 {
-	for (const_iterator it = _charsByDepth.begin(),
-            itEnd = _charsByDepth.end(); it != itEnd; ++it) {
-
-		visitor(*it);
+	for (DisplayObject* const ch : _charsByDepth) {
+		visitor(ch);
 	}
 }
 
diff --git a/libcore/DisplayObject.cpp b/libcore/DisplayObject.cpp
index 254c4bd..3b43731 100644
--- a/libcore/DisplayObject.cpp
+++ b/libcore/DisplayObject.cpp
@@ -25,8 +25,7 @@
 #include "DisplayObject.h"
 
 #include <utility>
-#include <boost/assign/list_of.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 #include <boost/logic/tribool.hpp>
 
 #include "movie_root.h"
@@ -101,8 +100,8 @@ DisplayObject::DisplayObject(movie_root& mr, as_object* object,
     _volume(100),
     _ratio(0),
     m_clip_depth(noClipDepthValue),
-    _mask(0),
-    _maskee(0),
+    _mask(nullptr),
+    _maskee(nullptr),
     _blendMode(BLENDMODE_NORMAL),
     _visible(true),
     _scriptTransformed(false),
@@ -161,7 +160,7 @@ as_object*
 DisplayObject::pathElement(const ObjectURI& uri)
 {
     as_object* obj = getObject(this);
-    if (!obj) return 0;
+    if (!obj) return nullptr;
 
     string_table::key key = getName(uri);
 
@@ -177,7 +176,7 @@ DisplayObject::pathElement(const ObjectURI& uri)
             (uri, ObjectURI(NSV::PROP_THIS))) {
         return obj;
     }
-    return 0;
+    return nullptr;
 }
 
 void 
@@ -308,7 +307,7 @@ DisplayObject::blendMode(const fn_call& fn)
 
     const BlendModeMap& bmm = getBlendModeMap();
     BlendModeMap::const_iterator it = std::find_if(bmm.begin(), bmm.end(),
-            boost::bind(blendModeMatches, _1, mode));
+            std::bind(blendModeMatches, std::placeholders::_1, mode));
 
     if (it != bmm.end()) {
         ch->setBlendMode(it->first);
@@ -331,7 +330,7 @@ DisplayObject::set_visible(bool visible)
         assert(_object);
         movie_root& mr = stage();
         if (mr.getFocus() == this) {
-            mr.setFocus(0);
+            mr.setFocus(nullptr);
         }
     }
     _visible = visible;      
@@ -413,14 +412,12 @@ DisplayObject::setMatrix(const SWFMatrix& m, bool updateCache)
 void
 DisplayObject::set_event_handlers(const Events& copyfrom)
 {
-    for (Events::const_iterator it=copyfrom.begin(), itE=copyfrom.end();
-            it != itE; ++it)
+    for (const auto& event : copyfrom)
     {
-        const event_id& ev = it->first;
-        const BufferList& bufs = it->second;
-        for (size_t i = 0, e = bufs.size(); i < e; ++i)
+        const event_id& ev = event.first;
+        const BufferList& bufs = event.second;
+        for (const action_buffer* buf : bufs) 
         {
-            const action_buffer* buf = bufs[i];
             assert(buf);
             add_event_handler(ev, *buf);
         }    
@@ -433,10 +430,10 @@ DisplayObject::add_event_handler(const event_id& id, const action_buffer& code)
     _event_handlers[id].push_back(&code);
 }
 
-std::auto_ptr<ExecutableCode>
+std::unique_ptr<ExecutableCode>
 DisplayObject::get_event_handler(const event_id& id) const
 {
-    std::auto_ptr<ExecutableCode> handler;
+    std::unique_ptr<ExecutableCode> handler;
 
     Events::const_iterator it = _event_handlers.find(id);
     if ( it == _event_handlers.end() ) return handler;
@@ -453,8 +450,8 @@ DisplayObject::unload()
     const bool unloadHandler = unloadChildren();
 
     // Unregister this DisplayObject as mask and/or maskee.
-    if (_maskee) _maskee->setMask(0);
-    if (_mask) _mask->setMaskee(0);
+    if (_maskee) _maskee->setMask(nullptr);
+    if (_mask) _mask->setMaskee(nullptr);
 
     _unloaded = true;
 
@@ -577,7 +574,7 @@ DisplayObject::getTargetPath() const
     Path path;
 
     // Build parents stack
-    const DisplayObject* topLevel = 0;
+    const DisplayObject* topLevel = nullptr;
     const DisplayObject* ch = this;
 
     string_table& st = getStringTable(*getObject(this));
@@ -742,18 +739,18 @@ DisplayObject::setMask(DisplayObject* mask)
         // on any previously registered maskee
         // so we make sure to set our _mask to 
         // NULL before getting called again
-        _mask->setMaskee(0);
+        _mask->setMaskee(nullptr);
     }
 
     // if we had a maskee, notify it to stop using
     // us as a mask
-    if (prevMaskee) prevMaskee->setMask(0);
+    if (prevMaskee) prevMaskee->setMask(nullptr);
 
     // TODO: should we reset any original clip depth
     //       specified by PlaceObject tag ?
     set_clip_depth(noClipDepthValue); 
     _mask = mask;
-    _maskee = 0;
+    _maskee = nullptr;
 
     if (_mask) {
         /// Register as as masked by the mask
@@ -769,7 +766,7 @@ DisplayObject::setMaskee(DisplayObject* maskee)
     if (_maskee) {
         // We don't want the maskee to call setMaskee(null)
         // on us again
-        _maskee->_mask = 0;
+        _maskee->_mask = nullptr;
     }
 
     _maskee = maskee;
@@ -972,7 +969,7 @@ DisplayObject::MaskRenderer::MaskRenderer(Renderer& r, const DisplayObject& o)
     :
     _renderer(r),
     _mask(o.visible() && o.getMask() && !o.getMask()->unloaded() ? o.getMask()
-                                                                 : 0)
+                                                                 : nullptr)
 {
     if (!_mask) return;
 
@@ -1256,12 +1253,12 @@ setAlpha(DisplayObject& o, const as_value& val)
     SWFCxForm cx = getCxForm(o);
 
     // Overflows are *not* truncated, but set to -32768.
-    if (newAlpha > std::numeric_limits<boost::int16_t>::max() ||
-        newAlpha < std::numeric_limits<boost::int16_t>::min()) {
-        cx.aa = std::numeric_limits<boost::int16_t>::min();
+    if (newAlpha > std::numeric_limits<std::int16_t>::max() ||
+        newAlpha < std::numeric_limits<std::int16_t>::min()) {
+        cx.aa = std::numeric_limits<std::int16_t>::min();
     }
     else {
-        cx.aa = static_cast<boost::int16_t>(newAlpha);
+        cx.aa = static_cast<std::int16_t>(newAlpha);
     }
 
     o.setCxForm(cx);
@@ -1273,7 +1270,7 @@ as_value
 getMouseX(DisplayObject& o)
 {
     // Local coord of mouse IN PIXELS.
-    boost::int32_t x, y;
+    std::int32_t x, y;
     boost::tie(x, y) = getRoot(*getObject(&o)).mousePosition();
 
     SWFMatrix m = getWorldMatrix(o);
@@ -1287,7 +1284,7 @@ as_value
 getMouseY(DisplayObject& o)
 {
     // Local coord of mouse IN PIXELS.
-    boost::int32_t x, y;
+    std::int32_t x, y;
     boost::tie(x, y) = getRoot(*getObject(&o)).mousePosition();
 
     SWFMatrix m = getWorldMatrix(o);
@@ -1472,7 +1469,7 @@ getGetterSetterByURI(const ObjectURI& uri, string_table& st)
     const GetterSetters::const_iterator it = gs.find(uri);
 
     if (it == gs.end()) {
-        static const GetterSetter none(0, 0);
+        static const GetterSetter none(nullptr, nullptr);
         return none;
     }
 
@@ -1483,7 +1480,7 @@ getGetterSetterByURI(const ObjectURI& uri, string_table& st)
 const GetterSetter&
 getGetterSetterByIndex(size_t index)
 {
-    const Setter n = 0;
+    const Setter n = nullptr;
 
     static const GetterSetter props[] = {
         GetterSetter(&getX, &setX),
@@ -1517,7 +1514,7 @@ getGetterSetterByIndex(size_t index)
     };
 
     if (index >= arraySize(props)) {
-        const Getter ng = 0;
+        const Getter ng = nullptr;
         static const GetterSetter none(ng, n);
         return none;
     }
@@ -1580,22 +1577,23 @@ getBlendModeMap()
 {
     /// BLENDMODE_UNDEFINED has no matching string in AS. It is included
     /// here for logging purposes.
-    static const BlendModeMap bm = boost::assign::map_list_of
-        (DisplayObject::BLENDMODE_UNDEFINED, "undefined")
-        (DisplayObject::BLENDMODE_NORMAL, "normal")
-        (DisplayObject::BLENDMODE_LAYER, "layer")
-        (DisplayObject::BLENDMODE_MULTIPLY, "multiply")
-        (DisplayObject::BLENDMODE_SCREEN, "screen")
-        (DisplayObject::BLENDMODE_LIGHTEN, "lighten")
-        (DisplayObject::BLENDMODE_DARKEN, "darken")
-        (DisplayObject::BLENDMODE_DIFFERENCE, "difference")
-        (DisplayObject::BLENDMODE_ADD, "add")
-        (DisplayObject::BLENDMODE_SUBTRACT, "subtract")
-        (DisplayObject::BLENDMODE_INVERT, "invert")
-        (DisplayObject::BLENDMODE_ALPHA, "alpha")
-        (DisplayObject::BLENDMODE_ERASE, "erase")
-        (DisplayObject::BLENDMODE_OVERLAY, "overlay")
-        (DisplayObject::BLENDMODE_HARDLIGHT, "hardlight");
+    static const BlendModeMap bm = {
+        {DisplayObject::BLENDMODE_UNDEFINED, "undefined"},
+        {DisplayObject::BLENDMODE_NORMAL, "normal"},
+        {DisplayObject::BLENDMODE_LAYER, "layer"},
+        {DisplayObject::BLENDMODE_MULTIPLY, "multiply"},
+        {DisplayObject::BLENDMODE_SCREEN, "screen"},
+        {DisplayObject::BLENDMODE_LIGHTEN, "lighten"},
+        {DisplayObject::BLENDMODE_DARKEN, "darken"},
+        {DisplayObject::BLENDMODE_DIFFERENCE, "difference"},
+        {DisplayObject::BLENDMODE_ADD, "add"},
+        {DisplayObject::BLENDMODE_SUBTRACT, "subtract"},
+        {DisplayObject::BLENDMODE_INVERT, "invert"},
+        {DisplayObject::BLENDMODE_ALPHA, "alpha"},
+        {DisplayObject::BLENDMODE_ERASE, "erase"},
+        {DisplayObject::BLENDMODE_OVERLAY, "overlay"},
+        {DisplayObject::BLENDMODE_HARDLIGHT, "hardlight"}
+    };
 
     return bm;
 }
@@ -1618,7 +1616,7 @@ template<typename Map>
 const Map
 getURIMap(const typename Map::key_compare& cmp)
 {
-    const Setter n = 0;
+    const Setter n = nullptr;
 
     Map ret(cmp);
     ret.insert(std::make_pair(NSV::PROP_uX, GetterSetter(&getX, &setX)));
diff --git a/libcore/DisplayObject.h b/libcore/DisplayObject.h
index bde7359..624948f 100644
--- a/libcore/DisplayObject.h
+++ b/libcore/DisplayObject.h
@@ -28,7 +28,7 @@
 #include <map>
 #include <string>
 #include <cassert>
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 #include <boost/noncopyable.hpp>
 #include <boost/logic/tribool.hpp>
 
@@ -234,7 +234,7 @@ public:
         // MovieClip must override this
         // and any other DisplayObject will have
         // a parent!
-        assert(_parent != NULL);
+        assert(_parent != nullptr);
         return _parent->get_environment();
     }
 
@@ -263,7 +263,7 @@ public:
         _parent = parent;
     }
 
-    virtual MovieClip* to_movie() { return 0; }
+    virtual MovieClip* to_movie() { return nullptr; }
 
     int get_depth() const { return _depth; }
 
@@ -357,9 +357,9 @@ public:
         }
     }
 
-    boost::uint16_t get_ratio() const { return _ratio; }
+    std::uint16_t get_ratio() const { return _ratio; }
 
-    void set_ratio(boost::uint16_t r) {
+    void set_ratio(std::uint16_t r) {
         if (r != _ratio) set_invalidated(); 
         _ratio = r;       
     }
@@ -439,7 +439,7 @@ public:
     ///       to properly fetch any user-defined event handler, which 
     ///       are the ones attached to a DisplayObject with ActionScript code.
     ///
-    std::auto_ptr<ExecutableCode> get_event_handler(const event_id& id) const;
+    std::unique_ptr<ExecutableCode> get_event_handler(const event_id& id) const;
 
     /// Set a built-in function handler for the given event
     //
@@ -474,7 +474,7 @@ public:
     /// @ return    0 if this object is not a StaticText or contains no text.
     virtual StaticText* getStaticText(std::vector<const SWF::TextRecord*>&,
             size_t&) {
-        return 0;
+        return nullptr;
     }
 
 	virtual SWFRect getBounds() const = 0;
@@ -485,7 +485,7 @@ public:
     /// @param y        Point y coordinate in world space
     /// @return         Whether (x, y) is within the DisplayObject's bounds.
     ///                 This ignores _root's transform. 
-    bool pointInBounds(boost::int32_t x, boost::int32_t y) const
+    bool pointInBounds(std::int32_t x, std::int32_t y) const
     {
         SWFRect bounds = getBounds();
         const SWFMatrix wm = getWorldMatrix(*this, false);
@@ -498,7 +498,7 @@ public:
     /// @param x        Point x coordinate in world space
     /// @param y        Point y coordinate in world space
     /// @return         Whether (x, y) is within the DisplayObject's bounds.
-	virtual bool pointInShape(boost::int32_t  x, boost::int32_t  y) const = 0;
+	virtual bool pointInShape(std::int32_t  x, std::int32_t  y) const = 0;
 
     /// true if the given point falls in this DisplayObject's visible shape
     //
@@ -512,7 +512,7 @@ public:
     /// DisplayObject has childs it must take into account the case
     /// in which some childs are visible and some are not.
     ///
-    virtual bool pointInVisibleShape(boost::int32_t x, boost::int32_t y) const
+    virtual bool pointInVisibleShape(std::int32_t x, std::int32_t y) const
     {
         if (!visible()) return false;
         if (isDynamicMask() || isMaskLayer()) return false;
@@ -634,23 +634,23 @@ public:
 	/// DisplayObjects are not a mouse entity by default.
     //
     /// Override this function for InteractiveObjects.
-	virtual InteractiveObject* topmostMouseEntity(boost::int32_t, 
-            boost::int32_t) {
-        return 0;
+	virtual InteractiveObject* topmostMouseEntity(std::int32_t,
+            std::int32_t) {
+        return nullptr;
     }
 	
     /// Find highest depth DisplayObject whose shape contains the given
     /// point and is not the DisplayObject being dragged or any of its childs.
     //
     /// Point coordinates in global twips.
-    virtual const DisplayObject* findDropTarget(boost::int32_t x, 
-            boost::int32_t y, DisplayObject* dragging) const
+    virtual const DisplayObject* findDropTarget(std::int32_t x,
+            std::int32_t y, DisplayObject* dragging) const
     {
         if (this != dragging && visible() && pointInVisibleShape(x, y)) {
             return this;
         }
         
-        return 0;
+        return nullptr;
     }
 
     /// Return whether this DisplayObject has been invalidated or not
@@ -760,7 +760,7 @@ public:
     /// as the first thing.
     ///
     /// This handles all ActionScript construction and initialization events.
-    virtual void construct(as_object* /*init*/ = 0)
+    virtual void construct(as_object* /*init*/ = nullptr)
     {
         saveOriginalTarget();
     }
@@ -1049,7 +1049,7 @@ private:
     double _xscale, _yscale, _rotation;
 
     /// The depth of this DisplayObject.
-    boost::int32_t _depth;
+    std::int32_t _depth;
 
     boost::tribool _focusRect;
 
@@ -1063,7 +1063,7 @@ private:
     ///
     int _volume;
 
-    boost::uint16_t _ratio;
+    std::uint16_t _ratio;
     int m_clip_depth;
 
     /// The DisplayObject masking this instance (if any)
@@ -1159,7 +1159,7 @@ isReferenceable(const DisplayObject& d)
 inline as_object*
 getObject(const DisplayObject* d)
 {
-    return d ? d->object() : 0;
+    return d ? d->object() : nullptr;
 }
 
 /// Stream operator for DisplayObject blend mode.
diff --git a/libcore/DisplayObjectContainer.cpp b/libcore/DisplayObjectContainer.cpp
index 64e8a7d..f1b96a1 100644
--- a/libcore/DisplayObjectContainer.cpp
+++ b/libcore/DisplayObjectContainer.cpp
@@ -48,7 +48,7 @@ public:
             DisplayObject::InfoTree::iterator it)
         :
         _tr(tr),
-        _it(it)
+        _it(std::move(it))
     {}
 
     void operator()(DisplayObject* ch) {
diff --git a/libcore/DragState.h b/libcore/DragState.h
index 7bdc870..37c333d 100644
--- a/libcore/DragState.h
+++ b/libcore/DragState.h
@@ -39,7 +39,9 @@ public:
     DragState(DisplayObject* d, bool lock)
         :
         _displayObject(d),
-        _lock_centered(lock)
+        _lock_centered(lock),
+        _xoffset(0),
+        _yoffset(0)
     {
     }
 
@@ -51,13 +53,13 @@ public:
     /// at time of drag start.
     /// Coordinates are in stage space (twips)
     ///
-    void setOffset(boost::int32_t x, boost::int32_t y) {
+    void setOffset(std::int32_t x, std::int32_t y) {
         _xoffset = x;
         _yoffset = y;
     }
 
-    boost::int32_t xOffset() const { return _xoffset; }
-    boost::int32_t yOffset() const { return _yoffset; }
+    std::int32_t xOffset() const { return _xoffset; }
+    std::int32_t yOffset() const { return _yoffset; }
 
     bool hasBounds() const {
         return (_bounds);
@@ -94,7 +96,7 @@ public:
 
     /// Reset drag state to its initial condition
     void reset() {
-        _displayObject = 0;
+        _displayObject = nullptr;
         _bounds.reset();
         _lock_centered = false;
     }
@@ -118,8 +120,8 @@ private:
     /// at time of drag start. These are used for non
     /// lock-centered dragging.
     /// Coordinates are in stage space (TWIPS)
-    boost::int32_t _xoffset;
-    boost::int32_t _yoffset;
+    std::int32_t _xoffset;
+    std::int32_t _yoffset;
 
 };
 
diff --git a/libcore/DynamicShape.cpp b/libcore/DynamicShape.cpp
index 0103b60..995acf2 100644
--- a/libcore/DynamicShape.cpp
+++ b/libcore/DynamicShape.cpp
@@ -27,7 +27,7 @@ namespace gnash {
 
 DynamicShape::DynamicShape()
 	:
-	_currpath(0),
+	_currpath(nullptr),
 	_currfill(0),
 	_currline(0),
 	_x(0),
@@ -39,7 +39,7 @@ void
 DynamicShape::clear()
 {
 	_shape.clear();
-	_currpath = 0; 
+	_currpath = nullptr;
 	_currfill = _currline = 0; 
 	_currsubshape.clear();
 	// TODO: worth setting _changed=true ? 
@@ -89,7 +89,7 @@ DynamicShape::endFill()
 
 	// Remove reference to the "current" path, as
 	// next drawing will happen on a different one
-	_currpath = 0;
+	_currpath = nullptr;
 	// Remove fill information
 	_currfill = 0;
 }
@@ -160,7 +160,7 @@ DynamicShape::finalize() const
 }
 
 void
-DynamicShape::lineStyle(boost::uint16_t thickness, const rgba& color,
+DynamicShape::lineStyle(std::uint16_t thickness, const rgba& color,
 	bool vScale, bool hScale, bool pixelHinting, bool noClose,
 	CapStyle startCapStyle, CapStyle endCapStyle,
 	JoinStyle joinStyle, float miterLimitFactor)
@@ -181,7 +181,7 @@ DynamicShape::resetLineStyle()
 }
 
 void
-DynamicShape::moveTo(boost::int32_t x, boost::int32_t y)
+DynamicShape::moveTo(std::int32_t x, std::int32_t y)
 {
     // It was manually tested that a moveTo, even
     // when moving to the same point of current cursor,
@@ -193,7 +193,7 @@ DynamicShape::moveTo(boost::int32_t x, boost::int32_t y)
 }
 
 void
-DynamicShape::lineTo(boost::int32_t x, boost::int32_t y, int swfVersion)
+DynamicShape::lineTo(std::int32_t x, std::int32_t y, int swfVersion)
 {
 	if (!_currpath) startNewPath(false);
 	assert(_currpath);
@@ -224,8 +224,8 @@ DynamicShape::lineTo(boost::int32_t x, boost::int32_t y, int swfVersion)
 }
 
 void
-DynamicShape::curveTo(boost::int32_t cx, boost::int32_t cy, 
-                      boost::int32_t ax, boost::int32_t ay, int swfVersion)
+DynamicShape::curveTo(std::int32_t cx, std::int32_t cy,
+                      std::int32_t ax, std::int32_t ay, int swfVersion)
 {
 	if (!_currpath) startNewPath(false);
 	assert(_currpath);
diff --git a/libcore/DynamicShape.h b/libcore/DynamicShape.h
index c082c23..823928e 100644
--- a/libcore/DynamicShape.h
+++ b/libcore/DynamicShape.h
@@ -53,16 +53,16 @@ public:
 	void clear();
 
 	/// Move pen to given coordinates
-	void moveTo(boost::int32_t x, boost::int32_t y);
+	void moveTo(std::int32_t x, std::int32_t y);
 
 	/// Draw a straight line from current position to given one
-	void lineTo(boost::int32_t x, boost::int32_t y, int swfVersion);
+	void lineTo(std::int32_t x, std::int32_t y, int swfVersion);
 
 	/// \brief
 	/// Draw a curve from current position to given one
 	/// using given control points.
-	void curveTo(boost::int32_t cx, boost::int32_t cy, 
-                 boost::int32_t ax, boost::int32_t ay, int swfVersion);
+	void curveTo(std::int32_t cx, std::int32_t cy,
+                 std::int32_t ax, std::int32_t ay, int swfVersion);
 
 	/// Start drawing with a solid fill
 	void beginFill(const FillStyle& f);
@@ -92,7 +92,7 @@ public:
 	/// @param endCapStyle
 	/// @param joinStyle
 	/// @param miterLimitFactor
-	void lineStyle(boost::uint16_t thickness, const rgba& color,
+	void lineStyle(std::uint16_t thickness, const rgba& color,
 		bool vScale=true, bool hScale=true,
 		bool pixelHinting=false,
 		bool noClose=false,
@@ -143,7 +143,7 @@ public:
 	//       would result in a triangle and a stroke, which should fail the last hitTest(2,8).
 	//
 	//
-	bool pointTestLocal(boost::int32_t x, boost::int32_t y,
+	bool pointTestLocal(std::int32_t x, std::int32_t y,
             const SWFMatrix& wm) const
 	{
 		finalize();
@@ -189,10 +189,10 @@ private:
 	size_t _currline;
 
 	// Current pen X position
-	boost::int32_t  _x;
+	std::int32_t  _x;
 
 	// Current pen Y position
-	boost::int32_t  _y;
+	std::int32_t  _y;
 
 	mutable bool _changed;
 
diff --git a/libcore/ExternalInterface.cpp b/libcore/ExternalInterface.cpp
index 54b749f..55c5461 100644
--- a/libcore/ExternalInterface.cpp
+++ b/libcore/ExternalInterface.cpp
@@ -24,8 +24,6 @@
 #include <vector>
 #include <sstream>
 #include <boost/algorithm/string/erase.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_array.hpp>
 #include <algorithm>
 
 #ifdef SOLARIS_HOST
@@ -140,12 +138,12 @@ ExternalInterface::_toXML(const as_value &val)
     return ss.str();
 }
 
-boost::shared_ptr<ExternalInterface::invoke_t>
+std::unique_ptr<ExternalInterface::invoke_t>
 ExternalInterface::ExternalEventCheck(int fd)
 {
 //    GNASH_REPORT_FUNCTION;
     
-    boost::shared_ptr<ExternalInterface::invoke_t> error;
+    std::unique_ptr<ExternalInterface::invoke_t> error;
 
     if (fd > 0) {
         int bytes = 0;
@@ -154,7 +152,7 @@ ExternalInterface::ExternalEventCheck(int fd)
             return error;
         }
         log_debug("There are %d bytes in the network buffer", bytes);
-        boost::scoped_array<char> buffer(new char[bytes + 1]);
+        std::unique_ptr<char[]> buffer(new char[bytes + 1]);
         // Since we know how bytes are in the network buffer, allocate
         // some memory to read the data.
         // terminate incase we want to treat the data like a string.
@@ -177,10 +175,10 @@ ExternalInterface::ExternalEventCheck(int fd)
 //      </arguments>
 // </invoke>
 //
-boost::shared_ptr<ExternalInterface::invoke_t>
+std::unique_ptr<ExternalInterface::invoke_t>
 ExternalInterface::parseInvoke(const std::string &xml)
 {
-    boost::shared_ptr<ExternalInterface::invoke_t> invoke;
+    std::unique_ptr<ExternalInterface::invoke_t> invoke;
     if (xml.empty()) {
         return invoke;
     }
@@ -254,7 +252,7 @@ ExternalInterface::parseXML(const std::string &xml)
             start = end;
             end = xml.find("</number>");
             std::string str = xml.substr(start, end-start);
-            double num = strtod(str.c_str(), NULL);
+            double num = strtod(str.c_str(), nullptr);
             value.set_double(num);
         } else if (tag == "<string>") {
             start = end;
diff --git a/libcore/ExternalInterface.h b/libcore/ExternalInterface.h
index 7ad0047..6a1089b 100644
--- a/libcore/ExternalInterface.h
+++ b/libcore/ExternalInterface.h
@@ -21,10 +21,10 @@
 #ifndef GNASH_EXTERNALINTERFACE_H
 #define GNASH_EXTERNALINTERFACE_H
 
+#include <memory>
 #include <string>
 #include <vector>
 #include <set>
-#include <boost/shared_ptr.hpp>
 
 #include "dsodefs.h" /* For DSOEXPORT */
 
@@ -57,9 +57,9 @@ struct DSOEXPORT ExternalInterface
     static std::vector<as_value> parseArguments(const std::string &xml);
 
     // Parse the XML Invoke message.
-    static boost::shared_ptr<invoke_t> parseInvoke(const std::string &str);
+    static std::unique_ptr<invoke_t> parseInvoke(const std::string &str);
     // Check for data from the browser and parse it.
-    DSOEXPORT static boost::shared_ptr<invoke_t> ExternalEventCheck(int fd);
+    DSOEXPORT static std::unique_ptr<invoke_t> ExternalEventCheck(int fd);
 
     // These methods are for constructing Invoke messages.
     // Create an Invoke message for the standalone Gnash
diff --git a/libcore/FillStyle.cpp b/libcore/FillStyle.cpp
index c212ac7..fb5f466 100644
--- a/libcore/FillStyle.cpp
+++ b/libcore/FillStyle.cpp
@@ -100,25 +100,25 @@ GradientFill::setFocalPoint(double d)
     _focalPoint = clamp<float>(d, -1, 1); 
 }
 
-BitmapFill::BitmapFill(Type t, const CachedBitmap* bi, const SWFMatrix& m,
+BitmapFill::BitmapFill(Type t, const CachedBitmap* bi, SWFMatrix m,
         SmoothingPolicy pol)
     :
     _type(t),
     _smoothingPolicy(pol),
-    _matrix(m),
+    _matrix(std::move(m)),
     _bitmapInfo(bi),
-    _md(0),
+    _md(nullptr),
     _id(0)
 {
 }
     
 BitmapFill::BitmapFill(SWF::FillType t, movie_definition* md,
-        boost::uint16_t id, const SWFMatrix& m)
+        std::uint16_t id, SWFMatrix m)
     :
     _type(),
     _smoothingPolicy(),
-    _matrix(m),
-    _bitmapInfo(0),
+    _matrix(std::move(m)),
+    _bitmapInfo(nullptr),
     _md(md),
     _id(id)
 {
@@ -185,7 +185,7 @@ BitmapFill::bitmap() const
         return  _bitmapInfo.get();
     }
     if (!_md) {
-        return 0;
+        return nullptr;
     }
     _bitmapInfo = _md->getBitmap(_id);
 
diff --git a/libcore/FillStyle.h b/libcore/FillStyle.h
index 01068d1..8049643 100644
--- a/libcore/FillStyle.h
+++ b/libcore/FillStyle.h
@@ -40,14 +40,14 @@ namespace gnash {
 class GradientRecord
 {
 public:
-    GradientRecord(boost::uint8_t ratio, const rgba& color)
+    GradientRecord(std::uint8_t ratio, rgba color)
         :
         ratio(ratio),
-        color(color)
+        color(std::move(color))
     { }
     
     //data:
-    boost::uint8_t ratio;
+    std::uint8_t ratio;
     rgba color;
 };
 
@@ -90,12 +90,12 @@ public:
     /// Construct a BitmapFill from arbitrary bitmap data.
     //
     /// TODO: check the smoothing policy here!
-    BitmapFill(Type t, const CachedBitmap* bi, const SWFMatrix& m,
+    BitmapFill(Type t, const CachedBitmap* bi, SWFMatrix m,
             SmoothingPolicy pol);
 
     /// Construct a static BitmapFill using a SWF tag.
-    BitmapFill(SWF::FillType t, movie_definition* md, boost::uint16_t id,
-            const SWFMatrix& m);
+    BitmapFill(SWF::FillType t, movie_definition* md, std::uint16_t id,
+            SWFMatrix m);
 
     /// Destructor
     ~BitmapFill();
@@ -146,7 +146,7 @@ private:
     movie_definition* _md;
 
     // The id of the tag containing the bitmap
-    boost::uint16_t _id;
+    std::uint16_t _id;
 };
 
 /// A GradientFill
@@ -248,9 +248,9 @@ struct DSOEXPORT SolidFill
 public:
 
     /// Construct a SolidFill.
-    explicit SolidFill(const rgba& c)
+    explicit SolidFill(rgba c)
         :
-        _color(c)
+        _color(std::move(c))
     { }
 
     /// Copy a SolidFill.
diff --git a/libcore/Filters.h b/libcore/Filters.h
index a22743d..d99696b 100644
--- a/libcore/Filters.h
+++ b/libcore/Filters.h
@@ -20,8 +20,9 @@
 #ifndef GNASH_FILTERS_H
 #define GNASH_FILTERS_H
 
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 #include <vector>
+#include <utility>
 
 namespace gnash {
     class SWFStream;
@@ -72,10 +73,10 @@ public:
         m_knockout(false)
     {}
 
-    BevelFilter(float distance, float angle, boost::uint32_t hcolor,
-        boost::uint8_t halpha, boost::uint32_t scolor, boost::uint8_t salpha,
+    BevelFilter(float distance, float angle, std::uint32_t hcolor,
+        std::uint8_t halpha, std::uint32_t scolor, std::uint8_t salpha,
         float blurX, float blurY, float strength,
-        boost::uint8_t quality, bevel_type type, bool knockout) :
+        std::uint8_t quality, bevel_type type, bool knockout) :
         m_distance(distance), m_angle(angle), m_highlightColor(hcolor),
         m_highlightAlpha(halpha), m_shadowColor(scolor), m_shadowAlpha(salpha),
         m_blurX(blurX), m_blurY(blurY), m_strength(strength),
@@ -84,14 +85,14 @@ public:
 
     float m_distance; // Distance of the filter in pixels.
     float m_angle; // Angle of the filter.
-    boost::uint32_t m_highlightColor; // Color of the highlight.
-    boost::uint8_t m_highlightAlpha; // Alpha of the highlight.
-    boost::uint32_t m_shadowColor; // RGB color.
-    boost::uint8_t m_shadowAlpha; // Alpha strength, as a percentage(?)
+    std::uint32_t m_highlightColor; // Color of the highlight.
+    std::uint8_t m_highlightAlpha; // Alpha of the highlight.
+    std::uint32_t m_shadowColor; // RGB color.
+    std::uint8_t m_shadowAlpha; // Alpha strength, as a percentage(?)
     float m_blurX; // horizontal blur
     float m_blurY; // vertical blur
     float m_strength; // How strong is the filter.
-    boost::uint8_t m_quality; // How many times to apply the filter.
+    std::uint8_t m_quality; // How many times to apply the filter.
     bevel_type m_type; // The type of filter. (Rendered as string in AS)
     bool m_knockout; // If true, render only the filter effect.
 };
@@ -109,13 +110,13 @@ public:
         m_blurX(0.0f), m_blurY(0.0f), m_quality(0)
     {}
 
-    BlurFilter(float blurX, float blurY, boost::uint8_t quality) :
+    BlurFilter(float blurX, float blurY, std::uint8_t quality) :
         m_blurX(blurX), m_blurY(blurY), m_quality(quality)
     {}
 
     float m_blurX; // How much horizontal blur.
     float m_blurY; // How much vertical blur.
-    boost::uint8_t m_quality; // How many passes to take.
+    std::uint8_t m_quality; // How many passes to take.
 };
 
 // A color SWFMatrix effect filter.
@@ -132,7 +133,7 @@ public:
     {}
 
     ColorMatrixFilter(std::vector<float> a_matrix) :
-        m_matrix(a_matrix)
+        m_matrix(std::move(a_matrix))
     {}
 
 protected:
@@ -162,14 +163,14 @@ public:
         _alpha()
     {}
 
-    ConvolutionFilter(boost::uint8_t matrixX, boost::uint8_t matrixY, 
-        const std::vector<float>& _matrix, float divisor, float bias,
-        bool preserveAlpha, bool clamp, boost::uint32_t color,
-        boost::uint8_t alpha)
+    ConvolutionFilter(std::uint8_t matrixX, std::uint8_t matrixY,
+        std::vector<float>  _matrix, float divisor, float bias,
+        bool preserveAlpha, bool clamp, std::uint32_t color,
+        std::uint8_t alpha)
         :
         _matrixX(matrixX),
         _matrixY(matrixY),
-        _matrix(_matrix),
+        _matrix(std::move(_matrix)),
         _divisor(divisor),
         _bias(bias),
         _preserveAlpha(preserveAlpha),
@@ -179,15 +180,15 @@ public:
     {}
 
 protected:
-    boost::uint8_t _matrixX; // Number of columns
-    boost::uint8_t _matrixY; // Number of rows
+    std::uint8_t _matrixX; // Number of columns
+    std::uint8_t _matrixY; // Number of rows
     std::vector<float> _matrix; // The convolution matrix
     float _divisor;
     float _bias;
     bool _preserveAlpha; // If true, don't convolute the alpha channel
     bool _clamp; // Whether or not to clamp
-    boost::uint32_t _color; // For off-image pixels
-    boost::uint8_t _alpha; // For off-image pixels
+    std::uint32_t _color; // For off-image pixels
+    std::uint8_t _alpha; // For off-image pixels
 };
 
 // A drop shadow effect filter.
@@ -205,9 +206,9 @@ public:
         m_inner(false), m_knockout(false), m_hideObject(false)
     {}
 
-    DropShadowFilter(float distance, float angle, boost::uint32_t color,
-        boost::uint8_t alpha, float blurX, float blurY, float strength,
-        boost::uint8_t quality, bool inner, bool knockout, bool hideObject) :
+    DropShadowFilter(float distance, float angle, std::uint32_t color,
+        std::uint8_t alpha, float blurX, float blurY, float strength,
+        std::uint8_t quality, bool inner, bool knockout, bool hideObject) :
         m_distance(distance), m_angle(angle), m_color(color),
         m_alpha(alpha), m_blurX(blurX), m_blurY(blurY), m_strength(strength),
         m_quality(quality), m_inner(inner), m_knockout(knockout),
@@ -216,12 +217,12 @@ public:
 
     float m_distance; // Distance of the filter in pixels.
     float m_angle; // Angle of the filter.
-    boost::uint32_t m_color; // RGB color.
-    boost::uint8_t m_alpha; // Alpha strength, as a percentage(?)
+    std::uint32_t m_color; // RGB color.
+    std::uint8_t m_alpha; // Alpha strength, as a percentage(?)
     float m_blurX; // horizontal blur
     float m_blurY; // vertical blur
     float m_strength; // How strong is the filter.
-    boost::uint8_t m_quality; // How many times to apply the filter.
+    std::uint8_t m_quality; // How many times to apply the filter.
     bool m_inner; // Is this an inner shadow?
     bool m_knockout; // If true, render only the filter effect.
     bool m_hideObject; // Does this hide the object?
@@ -243,20 +244,20 @@ public:
         m_inner(false), m_knockout(false)
     {}
 
-    GlowFilter(boost::uint32_t color,
-        boost::uint8_t alpha, float blurX, float blurY, float strength,
-        boost::uint8_t quality, bool inner, bool knockout) :
+    GlowFilter(std::uint32_t color,
+        std::uint8_t alpha, float blurX, float blurY, float strength,
+        std::uint8_t quality, bool inner, bool knockout) :
         m_color(color),
         m_alpha(alpha), m_blurX(blurX), m_blurY(blurY), m_strength(strength),
         m_quality(quality), m_inner(inner), m_knockout(knockout)
     {}
 
-    boost::uint32_t m_color; // RGB color.
-    boost::uint8_t m_alpha; // Alpha strength, as a percentage(?)
+    std::uint32_t m_color; // RGB color.
+    std::uint8_t m_alpha; // Alpha strength, as a percentage(?)
     float m_blurX; // horizontal blur
     float m_blurY; // vertical blur
     float m_strength; // How strong is the filter.
-    boost::uint8_t m_quality; // How many times to apply the filter.
+    std::uint8_t m_quality; // How many times to apply the filter.
     bool m_inner; // Is this an inner shadow?
     bool m_knockout; // If true, render only the filter effect.
 };
@@ -285,26 +286,26 @@ public:
     {}
 
     GradientBevelFilter(float distance, float angle,
-        std::vector<boost::uint32_t> colors,
-        std::vector<boost::uint8_t> alphas,
-        std::vector<boost::uint8_t> ratios,
+        std::vector<std::uint32_t> colors,
+        std::vector<std::uint8_t> alphas,
+        std::vector<std::uint8_t> ratios,
         float blurX, float blurY, float strength,
-        boost::uint8_t quality, glow_types type, bool knockout) :
+        std::uint8_t quality, glow_types type, bool knockout) :
         m_distance(distance), m_angle(angle),
-        m_colors(colors), m_alphas(alphas), m_ratios(ratios),
+        m_colors(std::move(colors)), m_alphas(std::move(alphas)), m_ratios(std::move(ratios)),
         m_blurX(blurX), m_blurY(blurY), m_strength(strength),
         m_quality(quality), m_type(type), m_knockout(knockout)
     {}
 
     float m_distance; // Distance of the filter in pixels.
     float m_angle; // Angle of the filter.
-    std::vector<boost::uint32_t> m_colors; // Colors of the gradients.
-    std::vector<boost::uint8_t> m_alphas; // Alphas of the gradients.
-    std::vector<boost::uint8_t> m_ratios; // Ratios of the gradients.
+    std::vector<std::uint32_t> m_colors; // Colors of the gradients.
+    std::vector<std::uint8_t> m_alphas; // Alphas of the gradients.
+    std::vector<std::uint8_t> m_ratios; // Ratios of the gradients.
     float m_blurX; // horizontal blur
     float m_blurY; // vertical blur
     float m_strength; // How strong is the filter.
-    boost::uint8_t m_quality; // How many times to apply the filter.
+    std::uint8_t m_quality; // How many times to apply the filter.
     glow_types m_type; // What type of effect.
     bool m_knockout; // If true, render only the filter effect.
 };
@@ -332,25 +333,25 @@ public:
     {}
 
     GradientGlowFilter(float distance, float angle,
-        std::vector<boost::uint32_t> colors,
-        std::vector<boost::uint8_t> alphas,
-        std::vector<boost::uint8_t> ratios,
+        std::vector<std::uint32_t> colors,
+        std::vector<std::uint8_t> alphas,
+        std::vector<std::uint8_t> ratios,
         float blurX, float blurY, float strength,
-        boost::uint8_t quality, glow_types type, bool knockout) :
-        m_distance(distance), m_angle(angle), m_colors(colors), m_alphas(alphas),
-        m_ratios(ratios), m_blurX(blurX), m_blurY(blurY), m_strength(strength),
+        std::uint8_t quality, glow_types type, bool knockout) :
+        m_distance(distance), m_angle(angle), m_colors(std::move(colors)), m_alphas(std::move(alphas)),
+        m_ratios(std::move(ratios)), m_blurX(blurX), m_blurY(blurY), m_strength(strength),
         m_quality(quality), m_type(type), m_knockout(knockout)
     {}
 
     float m_distance; // Distance of the filter in pixels.
     float m_angle; // Angle of the filter.
-    std::vector<boost::uint32_t> m_colors; // Colors of the gradients.
-    std::vector<boost::uint8_t> m_alphas; // Alphas of the gradients.
-    std::vector<boost::uint8_t> m_ratios; // Ratios of the gradients.
+    std::vector<std::uint32_t> m_colors; // Colors of the gradients.
+    std::vector<std::uint8_t> m_alphas; // Alphas of the gradients.
+    std::vector<std::uint8_t> m_ratios; // Ratios of the gradients.
     float m_blurX; // horizontal blur
     float m_blurY; // vertical blur
     float m_strength; // How strong is the filter.
-    boost::uint8_t m_quality; // How many times to apply the filter.
+    std::uint8_t m_quality; // How many times to apply the filter.
     glow_types m_type; // What type of effect.
     bool m_knockout; // If true, render only the filter effect.
 };
diff --git a/libcore/Font.cpp b/libcore/Font.cpp
index 91767bf..45c88e0 100644
--- a/libcore/Font.cpp
+++ b/libcore/Font.cpp
@@ -44,7 +44,7 @@ class CodeLookup
 public:
     CodeLookup(const int glyph) : _glyph(glyph) {}
 
-    bool operator()(const std::pair<const boost::uint16_t, int>& p) const {
+    bool operator()(const std::pair<const std::uint16_t, int>& p) const {
         return p.second == _glyph;
     }
 
@@ -59,21 +59,14 @@ Font::GlyphInfo::GlyphInfo()
     advance(0)
 {}
 
-Font::GlyphInfo::GlyphInfo(std::auto_ptr<SWF::ShapeRecord> glyph,
+Font::GlyphInfo::GlyphInfo(std::unique_ptr<SWF::ShapeRecord> the_glyph,
         float advance)
     :
-    glyph(glyph.release()),
+    glyph(std::move(the_glyph)),
     advance(advance)
 {}
 
-Font::GlyphInfo::GlyphInfo(const GlyphInfo& o)
-    :
-    glyph(o.glyph),
-    advance(o.advance)
-{}
-
-
-Font::Font(std::auto_ptr<SWF::DefineFontTag> ft)
+Font::Font(std::unique_ptr<SWF::DefineFontTag> ft)
     :
     _fontTag(ft.release()),
     _name(_fontTag->name()),
@@ -88,10 +81,9 @@ Font::Font(std::auto_ptr<SWF::DefineFontTag> ft)
     }
 }
 
-Font::Font(const std::string& name, bool bold, bool italic)
+Font::Font(std::string name, bool bold, bool italic)
     :
-    _fontTag(0),
-    _name(name),
+    _name(std::move(name)),
     _unicodeChars(false),
     _shiftJISChars(false),
     _ansiChars(true),
@@ -118,7 +110,7 @@ Font::get_glyph(int index, bool embedded) const
     }
 
     // TODO: should we log an error here ?
-    return 0;
+    return nullptr;
 }
 
 void
@@ -149,7 +141,7 @@ Font::glyphCount() const
 
 
 void
-Font::setFlags(boost::uint8_t flags)
+Font::setFlags(std::uint8_t flags)
 {
     _shiftJISChars = flags & (1 << 6);
     _unicodeChars = flags & (1 << 5);
@@ -160,7 +152,7 @@ Font::setFlags(boost::uint8_t flags)
 
 
 void
-Font::setCodeTable(std::auto_ptr<CodeTable> table)
+Font::setCodeTable(std::unique_ptr<CodeTable> table)
 {
     if (_embeddedCodeTable) {
         IF_VERBOSE_MALFORMED_SWF(
@@ -184,7 +176,7 @@ Font::setName(const std::string& name)
 }
 
 
-boost::uint16_t
+std::uint16_t
 Font::codeTableLookup(int glyph, bool embedded) const
 {
     const CodeTable& ctable = (embedded && _embeddedCodeTable) ? 
@@ -206,7 +198,7 @@ Font::codeTableLookup(int glyph, bool embedded) const
 }
 
 int
-Font::get_glyph_index(boost::uint16_t code, bool embedded) const
+Font::get_glyph_index(std::uint16_t code, bool embedded) const
 {
     const CodeTable& ctable = (embedded && _embeddedCodeTable) ? 
         *_embeddedCodeTable : _deviceCodeTable;
@@ -282,7 +274,7 @@ Font::unitsPerEM(bool embed) const
 }
 
 int
-Font::add_os_glyph(boost::uint16_t code)
+Font::add_os_glyph(std::uint16_t code)
 {
     FreetypeGlyphsProvider* ft = ftProvider();
     if (!ft) return -1;
@@ -292,7 +284,7 @@ Font::add_os_glyph(boost::uint16_t code)
     float advance;
 
     // Get the vectorial glyph
-    std::auto_ptr<SWF::ShapeRecord> sh = ft->getGlyph(code, advance);
+    std::unique_ptr<SWF::ShapeRecord> sh = ft->getGlyph(code, advance);
 
     if (!sh.get()) {
         log_error(_("Could not create shape "
@@ -307,7 +299,7 @@ Font::add_os_glyph(boost::uint16_t code)
     // Add the new glyph id
     _deviceCodeTable[code] = newOffset;
 
-    _deviceGlyphTable.push_back(GlyphInfo(sh, advance));
+    _deviceGlyphTable.emplace_back(std::move(sh), advance);
 
     return newOffset;
 }
@@ -331,14 +323,14 @@ Font::ftProvider() const
     if (_name.empty()) {
         log_error(_("No name associated with this font, can't use device "
 		    "fonts (should I use a default one?)"));
-        return 0;
+        return nullptr;
     }
 
     _ftProvider = FreetypeGlyphsProvider::createFace(_name, _bold, _italic);
     
     if (!_ftProvider.get()) {
         log_error(_("Could not create a freetype face %s"), _name);
-        return 0;
+        return nullptr;
     }
     
     return _ftProvider.get();
diff --git a/libcore/Font.h b/libcore/Font.h
index a2314ed..f69bd4b 100644
--- a/libcore/Font.h
+++ b/libcore/Font.h
@@ -25,9 +25,8 @@
 #define GNASH_FONT_H
 
 #include <string>
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/cstdint.hpp>
+#include <memory>
+#include <cstdint>
 #include <memory>
 #include <vector>
 #include <map>
@@ -51,8 +50,8 @@ namespace gnash {
 class kerning_pair
 {
 public:
-    boost::uint16_t m_char0;
-    boost::uint16_t m_char1;
+    std::uint16_t m_char0;
+    std::uint16_t m_char1;
 
     bool operator==(const kerning_pair& k) const
     {
@@ -92,9 +91,9 @@ class Font : public ref_counted
 public:
 
     // This table maps from Unicode DisplayObject number to glyph index.
-    typedef std::map<boost::uint16_t, int> CodeTable;
+    typedef std::map<std::uint16_t, int> CodeTable;
 
-    Font(std::auto_ptr<SWF::DefineFontTag> ft);
+    Font(std::unique_ptr<SWF::DefineFontTag> ft);
 
     /// Create a device-font only font, using the given name to find it
     //
@@ -106,11 +105,11 @@ public:
     ///
     /// @param italic
     ///    Whether to use the italic variant of the font.
-    Font(const std::string& name, bool bold = false, bool italic = false);
+    Font(std::string name, bool bold = false, bool italic = false);
 
     ~Font();
 
-    boost::uint16_t codeTableLookup(int glyph, bool embedded) const;
+    std::uint16_t codeTableLookup(int glyph, bool embedded) const;
 
     /// Return true if this font matches given name and flags
     //
@@ -159,7 +158,7 @@ public:
     ///         positive index to use in subsequent calls to other
     ///         glyph-index-based methods.
     ///
-    int get_glyph_index(boost::uint16_t code, bool embedded) const;
+    int get_glyph_index(std::uint16_t code, bool embedded) const;
 
     /// Return the advance value for the given glyph index
     //
@@ -233,11 +232,9 @@ public:
         /// Construct default textured glyph
         //
         /// Takes ownership of the SWF::ShapeRecord.
-        GlyphInfo(std::auto_ptr<SWF::ShapeRecord> glyph, float advance);
-
-        GlyphInfo(const GlyphInfo& o);
+        GlyphInfo(std::unique_ptr<SWF::ShapeRecord> glyph, float advance);
 
-        boost::shared_ptr<SWF::ShapeRecord> glyph;
+        std::unique_ptr<SWF::ShapeRecord> glyph;
 
         float advance;
     };
@@ -259,12 +256,12 @@ public:
     /// Set the language and encoding flags of the font.
     //
     /// This is used by SWF::DefineFontInfoTag
-    void setFlags(boost::uint8_t flags);
+    void setFlags(std::uint8_t flags);
 
     /// Add a CodeTable to the font.
     //
     /// This is used by SWF::DefineFontInfoTag
-    void setCodeTable(std::auto_ptr<CodeTable> table);
+    void setCodeTable(std::unique_ptr<CodeTable> table);
 
     /// Retrieve the number of embedded glyphs in this font.
     GlyphInfoRecords::size_type glyphCount() const;
@@ -285,10 +282,10 @@ private:
     ///
     /// @return index of the newly added glyph, or -1 on error.
     ///
-    int add_os_glyph(boost::uint16_t code);
+    int add_os_glyph(std::uint16_t code);
 
     /// If we were constructed from a definition, this is not NULL.
-    boost::scoped_ptr<SWF::DefineFontTag> _fontTag;
+    std::unique_ptr<SWF::DefineFontTag> _fontTag;
 
     // Device glyphs
     GlyphInfoRecords _deviceGlyphTable;
@@ -314,7 +311,7 @@ private:
     /// It is a shared_ptr to avoid changing an original
     /// DefineFont2Tag, while allowing this class to take ownership
     /// of CodeTables from a DefineFontInfo tag.
-    boost::shared_ptr<const CodeTable> _embeddedCodeTable; 
+    std::shared_ptr<const CodeTable> _embeddedCodeTable;
 
     /// Code to index table for device glyphs
     CodeTable _deviceCodeTable; 
@@ -322,7 +319,7 @@ private:
     typedef std::map<kerning_pair, float> kernings_table;
     kernings_table m_kerning_pairs;
 
-    mutable std::auto_ptr<FreetypeGlyphsProvider> _ftProvider;
+    mutable std::unique_ptr<FreetypeGlyphsProvider> _ftProvider;
 
 };
 
diff --git a/libcore/FreetypeGlyphsProvider.cpp b/libcore/FreetypeGlyphsProvider.cpp
index 273bd10..63c002f 100644
--- a/libcore/FreetypeGlyphsProvider.cpp
+++ b/libcore/FreetypeGlyphsProvider.cpp
@@ -24,8 +24,8 @@
 #include "FreetypeGlyphsProvider.h"
 
 #include <string>
-#include <memory> // for auto_ptr
-#include <boost/cstdint.hpp>
+#include <memory> // for unique_ptr
+#include <cstdint>
 #include <boost/format.hpp>
 
 #include "GnashException.h"
@@ -93,7 +93,7 @@ public:
         :
         _shape(sh),
         _scale(scale),
-        _currPath(0),
+        _currPath(nullptr),
         _x(0),
         _y(0)
     {
@@ -156,8 +156,8 @@ private:
 #ifdef DEBUG_OUTLINE_DECOMPOSITION 
         log_debug("moveTo: %ld,%ld", to->x, to->y);
 #endif
-        _x = static_cast<boost::int32_t>(to->x * _scale);
-        _y = - static_cast<boost::int32_t>(to->y * _scale);
+        _x = static_cast<std::int32_t>(to->x * _scale);
+        _y = - static_cast<std::int32_t>(to->y * _scale);
         _currPath->close();
         _subshape.addPath(Path(_x, _y, 1, 0, 0));
         _currPath = &_subshape.currentPath();
@@ -169,8 +169,8 @@ private:
 #ifdef DEBUG_OUTLINE_DECOMPOSITION 
         log_debug("lineTo: %ld,%ld", to->x, to->y);
 #endif
-        _x = static_cast<boost::int32_t>(to->x * _scale);
-        _y = - static_cast<boost::int32_t>(to->y * _scale);
+        _x = static_cast<std::int32_t>(to->x * _scale);
+        _y = - static_cast<std::int32_t>(to->y * _scale);
         _currPath->drawLineTo(_x, _y);
         expandBounds(_x, _y);
         return 0;
@@ -181,10 +181,10 @@ private:
 #ifdef DEBUG_OUTLINE_DECOMPOSITION 
         log_debug("conicTo: %ld,%ld %ld,%ld", ctrl->x, ctrl->y, to->x, to->y);
 #endif
-        boost::int32_t x1 = static_cast<boost::int32_t>(ctrl->x * _scale);
-        boost::int32_t y1 = static_cast<boost::int32_t>(ctrl->y * _scale);
-        _x = static_cast<boost::int32_t>(to->x * _scale);
-        _y = - static_cast<boost::int32_t>(to->y * _scale);
+        std::int32_t x1 = static_cast<std::int32_t>(ctrl->x * _scale);
+        std::int32_t y1 = static_cast<std::int32_t>(ctrl->y * _scale);
+        _x = static_cast<std::int32_t>(to->x * _scale);
+        _y = - static_cast<std::int32_t>(to->y * _scale);
         _currPath->drawCurveTo(x1, -y1, _x, _y);
         expandBounds(x1, -y1, _x, _y);
         return 0;
@@ -199,10 +199,10 @@ private:
 #endif
         float x = ctrl1->x + ( (ctrl2->x - ctrl1->x) * 0.5 );
         float y = ctrl1->y + ( (ctrl2->y - ctrl1->y) * 0.5 );
-        boost::int32_t x1 = static_cast<boost::int32_t>(x * _scale);
-        boost::int32_t y1 = static_cast<boost::int32_t>(y * _scale);
-        _x = static_cast<boost::int32_t>(to->x * _scale);
-        _y = - static_cast<boost::int32_t>(to->y * _scale);
+        std::int32_t x1 = static_cast<std::int32_t>(x * _scale);
+        std::int32_t y1 = static_cast<std::int32_t>(y * _scale);
+        _x = static_cast<std::int32_t>(to->x * _scale);
+        _y = - static_cast<std::int32_t>(to->y * _scale);
         
         _currPath->drawCurveTo(x1, -y1, _x, _y);
         expandBounds(x1, -y1, _x, _y);
@@ -235,19 +235,19 @@ private:
 
     Path* _currPath;
 
-    boost::int32_t _x, _y;
+    std::int32_t _x, _y;
 
 };
 
 // statics
-FT_Library FreetypeGlyphsProvider::m_lib = 0;
-boost::mutex FreetypeGlyphsProvider::m_lib_mutex;
+FT_Library FreetypeGlyphsProvider::m_lib = nullptr;
+std::mutex FreetypeGlyphsProvider::m_lib_mutex;
 
 // static private
 void
 FreetypeGlyphsProvider::init()
 {
-    boost::mutex::scoped_lock lock(m_lib_mutex);
+    std::lock_guard<std::mutex> lock(m_lib_mutex);
 
     if (m_lib) return; 
 
@@ -303,7 +303,7 @@ FreetypeGlyphsProvider::getFontFilename(const std::string &name,
     
     FcPattern* pat = FcNameParse((const FcChar8*)name.c_str());
     
-    FcConfigSubstitute (0, pat, FcMatchPattern);
+    FcConfigSubstitute (nullptr, pat, FcMatchPattern);
 
     if (italic) {
         FcPatternAddInteger (pat, FC_SLANT, FC_SLANT_ITALIC);
@@ -316,10 +316,10 @@ FreetypeGlyphsProvider::getFontFilename(const std::string &name,
     FcDefaultSubstitute (pat);
 
     FcPattern   *match;
-    match = FcFontMatch (0, pat, &result);
+    match = FcFontMatch (nullptr, pat, &result);
     FcPatternDestroy (pat);
 
-    FcFontSet* fs = NULL;
+    FcFontSet* fs = nullptr;
     if (match) {
         fs = FcFontSetCreate ();
         FcFontSetAdd (fs, match);
@@ -371,11 +371,11 @@ FreetypeGlyphsProvider::getFontFilename(const std::string &name,
 
 #ifdef USE_FREETYPE 
 // static
-std::auto_ptr<FreetypeGlyphsProvider>
+std::unique_ptr<FreetypeGlyphsProvider>
 FreetypeGlyphsProvider::createFace(const std::string& name, bool bold, bool italic)
 {
 
-    std::auto_ptr<FreetypeGlyphsProvider> ret;
+    std::unique_ptr<FreetypeGlyphsProvider> ret;
 
     try { 
         ret.reset(new FreetypeGlyphsProvider(name, bold, italic));
@@ -389,11 +389,11 @@ FreetypeGlyphsProvider::createFace(const std::string& name, bool bold, bool ital
 
 }
 #else // ndef USE_FREETYPE 
-std::auto_ptr<FreetypeGlyphsProvider>
+std::unique_ptr<FreetypeGlyphsProvider>
 FreetypeGlyphsProvider::createFace(const std::string&, bool, bool)
 {
     log_error(_("Freetype not supported"));
-    return std::auto_ptr<FreetypeGlyphsProvider>(NULL);
+    return std::unique_ptr<FreetypeGlyphsProvider>(NULL);
 }
 #endif 
 	
@@ -422,10 +422,10 @@ FreetypeGlyphsProvider::ascent() const
 FreetypeGlyphsProvider::FreetypeGlyphsProvider(const std::string& name,
         bool bold, bool italic)
     :
-    _face(NULL)
+    _face(nullptr)
 {
 
-    if (m_lib == NULL)
+    if (m_lib == nullptr)
     {
         init();
     }
@@ -480,10 +480,10 @@ FreetypeGlyphsProvider::FreetypeGlyphsProvider(const std::string&, bool, bool)
 #endif // ndef USE_FREETYPE 
 
 #ifdef USE_FREETYPE
-std::auto_ptr<SWF::ShapeRecord>
-FreetypeGlyphsProvider::getGlyph(boost::uint16_t code, float& advance)
+std::unique_ptr<SWF::ShapeRecord>
+FreetypeGlyphsProvider::getGlyph(std::uint16_t code, float& advance)
 {
-    std::auto_ptr<SWF::ShapeRecord> glyph;
+    std::unique_ptr<SWF::ShapeRecord> glyph;
 
     FT_Error error = FT_Load_Char(_face, code, FT_LOAD_NO_BITMAP | 
                                                 FT_LOAD_NO_SCALE);
@@ -548,8 +548,8 @@ FreetypeGlyphsProvider::getGlyph(boost::uint16_t code, float& advance)
 }
 #else // ndef(USE_FREETYPE)
 
-std::auto_ptr<SWF::ShapeRecord>
-FreetypeGlyphsProvider::getGlyph(boost::uint16_t, float& advance)
+std::unique_ptr<SWF::ShapeRecord>
+FreetypeGlyphsProvider::getGlyph(std::uint16_t, float& advance)
 {
     abort(); // should never be called... 
 }
diff --git a/libcore/FreetypeGlyphsProvider.h b/libcore/FreetypeGlyphsProvider.h
index 6881584..a6f047b 100644
--- a/libcore/FreetypeGlyphsProvider.h
+++ b/libcore/FreetypeGlyphsProvider.h
@@ -21,9 +21,9 @@
 #define GNASH_FREETYPE_H
 
 #include <string>
-#include <memory> // for auto_ptr
-#include <boost/thread/mutex.hpp>
-#include <boost/cstdint.hpp>
+#include <memory> // for unique_ptr
+#include <mutex>
+#include <cstdint>
 
 #ifdef USE_FREETYPE 
 # include <ft2build.h>
@@ -70,10 +70,10 @@ public:
     ///    Whether to use an italic version of the font
     ///
     /// @return a rasterizer bound to the given font name,
-    ///         or a NULL auto_ptr if the given truetype font
+    ///         or a NULL unique_ptr if the given truetype font
     ///         could not be found.
     ///
-    static std::auto_ptr<FreetypeGlyphsProvider> createFace(
+    static std::unique_ptr<FreetypeGlyphsProvider> createFace(
             const std::string& name, bool bold, bool italic);
 
     /// Destructor
@@ -101,7 +101,7 @@ public:
     ///         or a NULL pointer if the given DisplayObject code
     ///         doesn't exist in this font.
     ///
-    std::auto_ptr<SWF::ShapeRecord> getGlyph(boost::uint16_t code,
+    std::unique_ptr<SWF::ShapeRecord> getGlyph(std::uint16_t code,
             float& advance);
 
     /// Return the font's ascender in terms of its EM own square.
@@ -161,7 +161,7 @@ private:
     static void close();
 
     /// Mutex protecting FreeType library (for initialization basically)
-    static boost::mutex    m_lib_mutex;
+    static std::mutex    m_lib_mutex;
 
     /// FreeType library
     static FT_Library    m_lib;
diff --git a/libcore/Function.cpp b/libcore/Function.cpp
index 63954a2..903d9ed 100644
--- a/libcore/Function.cpp
+++ b/libcore/Function.cpp
@@ -34,13 +34,13 @@
 namespace gnash {
 
 Function::Function(const action_buffer& ab, as_environment& env,
-            size_t start, const ScopeStack& scopeStack)
+            size_t start, ScopeStack scopeStack)
     :
     UserFunction(getGlobal(env)),
     _env(env),
     _pool(getVM(env).getConstantPool()),
     _action_buffer(ab),
-    _scopeStack(scopeStack),
+    _scopeStack(std::move(scopeStack)),
     _startPC(start),
     _length(0)
 {
@@ -72,7 +72,7 @@ Function::call(const fn_call& fn)
     // Extract caller before pushing ourself on the call stack
     VM& vm = getVM(fn); 
 
-    as_object* caller = vm.calling() ? &vm.currentCall().function() : 0;
+    as_object* caller = vm.calling() ? &vm.currentCall().function() : nullptr;
 
     // Set up local stack frame, for parameters and locals.
     FrameGuard guard(getVM(fn), *this);
@@ -127,7 +127,7 @@ Function::call(const fn_call& fn)
     setLocal(cf, NSV::PROP_THIS, fn.this_ptr ? fn.this_ptr : as_value());
 
     as_object* super = fn.super ? fn.super :
-        fn.this_ptr ? fn.this_ptr->get_super() : 0;
+        fn.this_ptr ? fn.this_ptr->get_super() : nullptr;
 
     // Add 'super' (SWF6+ only)
     if (super && swfversion > 5) {
diff --git a/libcore/Function.h b/libcore/Function.h
index 476e006..77812d9 100644
--- a/libcore/Function.h
+++ b/libcore/Function.h
@@ -72,7 +72,7 @@ public:
 	/// action_buffer starting at offset 'start'
 	//
 	Function(const action_buffer& ab, as_environment& env, size_t start,
-		const ScopeStack& with_stack);
+		ScopeStack with_stack);
 
 	virtual ~Function() {}
 
@@ -95,7 +95,7 @@ public:
     /// Get the number of registers required for function execution.
     //
     /// For ordinary Functions this is always 0.
-    virtual boost::uint8_t registers() const {
+    virtual std::uint8_t registers() const {
         return 0;
     }
 
@@ -109,8 +109,8 @@ public:
     //
     /// @param reg      The register for the argument.
     /// @param name     The name of the argument.
-	void add_arg(boost::uint8_t reg, const ObjectURI& name) {
-        _args.push_back(Argument(reg, name));
+	void add_arg(std::uint8_t reg, const ObjectURI& name) {
+            _args.emplace_back(reg, name);
 	}
 
     /// Set the length in bytes of the function code.
@@ -130,8 +130,8 @@ protected:
 	
     struct Argument
 	{
-        Argument(boost::uint8_t r, const ObjectURI& n) : reg(r), name(n) {}
-        boost::uint8_t reg;
+        Argument(std::uint8_t r, ObjectURI n) : reg(r), name(std::move(n)) {}
+        std::uint8_t reg;
         ObjectURI name;
 	};
 
diff --git a/libcore/Function2.cpp b/libcore/Function2.cpp
index 2e1c03b..54be093 100644
--- a/libcore/Function2.cpp
+++ b/libcore/Function2.cpp
@@ -48,7 +48,7 @@ Function2::call(const fn_call& fn)
     // Extract caller before pushing ourself on the call stack
     VM& vm = getVM(fn); 
 
-    as_object* caller = vm.calling() ? &vm.currentCall().function() : 0;
+    as_object* caller = vm.calling() ? &vm.currentCall().function() : nullptr;
 
 	// Set up local stack frame, for parameters and locals.
 	FrameGuard guard(getVM(fn), *this);
@@ -147,7 +147,7 @@ Function2::call(const fn_call& fn)
         // Put 'super' in a register (SWF6+ only).
         // TOCHECK: should we still set it if not available ?
         as_object* super = fn.super ? fn.super :
-            fn.this_ptr ? fn.this_ptr->get_super() : 0;
+            fn.this_ptr ? fn.this_ptr->get_super() : nullptr;
 
         if (super && (_function2Flags & PRELOAD_SUPER)) {
             cf.setLocalRegister(current_reg, super);
diff --git a/libcore/Function2.h b/libcore/Function2.h
index 2b2160f..5466f80 100644
--- a/libcore/Function2.h
+++ b/libcore/Function2.h
@@ -79,15 +79,15 @@ public:
 	virtual ~Function2() {}
 
     /// Return the number of registers to allocate for this function.
-    virtual boost::uint8_t registers() const {
+    virtual std::uint8_t registers() const {
         return _registerCount;
     }
 
-	void setRegisterCount(boost::uint8_t ct) {
+	void setRegisterCount(std::uint8_t ct) {
         _registerCount = ct;
     }
 
-	void setFlags(boost::uint16_t flags) {
+	void setFlags(std::uint16_t flags) {
         _function2Flags = flags;
     }
 
@@ -97,10 +97,10 @@ public:
 private:
 
     /// The number of registers required.
-	boost::uint8_t _registerCount;
+	std::uint8_t _registerCount;
 
 	/// Used to control implicit arg register assignments
-	boost::uint16_t	_function2Flags;
+	std::uint16_t	_function2Flags;
 
 };
 
diff --git a/libcore/Geometry.cpp b/libcore/Geometry.cpp
index d8cb7e3..c284e29 100644
--- a/libcore/Geometry.cpp
+++ b/libcore/Geometry.cpp
@@ -21,7 +21,7 @@
 
 #include <cmath>
 #include <algorithm>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "log.h"
 #include "LineStyle.h"
@@ -123,8 +123,8 @@ int curve_x_crossings(const T x0, const T y0, const T x1, const T y1,
 
 bool
 pointTest(const std::vector<Path>& paths,
-        const std::vector<LineStyle>& lineStyles, boost::int32_t x,
-        boost::int32_t y, const SWFMatrix& wm)
+        const std::vector<LineStyle>& lineStyles, std::int32_t x,
+        std::int32_t y, const SWFMatrix& wm)
 {
 
     /*
diff --git a/libcore/Geometry.h b/libcore/Geometry.h
index 5ec7ca6..f421ed5 100644
--- a/libcore/Geometry.h
+++ b/libcore/Geometry.h
@@ -49,26 +49,26 @@ public:
     point cp; // control point, TWIPS
     point ap; // anchor    point, TWIPS
 
-    Edge() 
+    constexpr Edge()
         :
         cp(0, 0),
         ap(0, 0)
     {}
     
-    Edge(boost::int32_t cx, boost::int32_t cy, boost::int32_t ax,
-            boost::int32_t ay)
+    constexpr Edge(std::int32_t cx, std::int32_t cy, std::int32_t ax,
+                   std::int32_t ay)
         :
         cp(cx, cy),
         ap(ax, ay)
     {}
 
-    Edge(const Edge& from)
+    constexpr Edge(const Edge& from)
         : 
         cp(from.cp),
         ap(from.ap)
     {}
 
-    Edge(const point& ncp, const point& nap)
+    constexpr Edge(const point& ncp, const point& nap)
         :
         cp(ncp),
         ap(nap)
@@ -90,16 +90,16 @@ public:
     static double
     squareDistancePtSeg(const point& p, const point& A, const point& B)
     {
-        boost::int32_t dx = B.x - A.x;
-        boost::int32_t dy = B.y - A.y;
+        std::int32_t dx = B.x - A.x;
+        std::int32_t dy = B.y - A.y;
 
         if ( dx == 0 && dy == 0 ) 
         {
             return p.squareDistance(A);
         }
 
-        boost::int32_t pdx = p.x - A.x;
-        boost::int32_t pdy = p.y - A.y;
+        std::int32_t pdx = p.x - A.x;
+        std::int32_t pdy = p.y - A.y;
 
         double u = (static_cast<double>(pdx) * dx + static_cast<double>(pdy) * dy ) /
             (static_cast<double>(dx)*dx + static_cast<double>(dy)*dy );
@@ -152,7 +152,7 @@ public:
     /// @param p The point we want to compute distance from 
     /// @param t the step factor between 0 and 1
     ///
-    static boost::int64_t squareDistancePtCurve(const point& A,
+    static std::int64_t squareDistancePtCurve(const point& A,
                          const point& C,
                          const point& B,
                          const point& p, float t)
@@ -188,9 +188,6 @@ public:
     
     /// Default constructor
     //
-    /// @param newShape
-    ///    True if this path starts a new subshape
-    ///
     Path()
     {
         reset(0, 0, 0, 0, 0);
@@ -225,10 +222,7 @@ public:
     /// @param line
     ///    Line style index for right fill (1-based).
     ///    Zero means NO style.
-    ///
-    /// @param newShape
-    ///    True if this path starts a new subshape
-    Path(boost::int32_t ax, boost::int32_t ay, 
+    Path(std::int32_t ax, std::int32_t ay,
             unsigned fill0, unsigned fill1, unsigned line)
     {
         reset(ax, ay, fill0, fill1, line);
@@ -251,7 +245,7 @@ public:
     /// @param line
     ///    Line style index for right fill
     ///
-    void reset(boost::int32_t ax, boost::int32_t ay, 
+    void reset(std::int32_t ax, std::int32_t ay,
             unsigned fill0, unsigned fill1, unsigned line)
     // Reset all our members to the given values, and clear our edge list.
     {
@@ -328,9 +322,9 @@ public:
     ///    Y coordinate in TWIPS
     ///
     void 
-    drawLineTo(boost::int32_t dx, boost::int32_t dy)
+    drawLineTo(std::int32_t dx, std::int32_t dy)
     {
-        m_edges.push_back(Edge(dx, dy, dx, dy)); 
+        m_edges.emplace_back(dx, dy, dx, dy);
     }
 
     /// Draw a curve.
@@ -351,9 +345,9 @@ public:
     ///    Anchor point's Y ordinate.
     ///
     void 
-    drawCurveTo(boost::int32_t cdx, boost::int32_t cdy, boost::int32_t adx, boost::int32_t ady)
+    drawCurveTo(std::int32_t cdx, std::int32_t cdy, std::int32_t adx, std::int32_t ady)
     {
-        m_edges.push_back(Edge(cdx, cdy, adx, ady)); 
+        m_edges.emplace_back(cdx, cdy, adx, ady);
     }
 
     /// Remove all edges and reset style infomation 
@@ -382,8 +376,7 @@ public:
         const Edge& lastedge = m_edges.back();
         if ( lastedge.ap != ap )
         {
-            Edge newedge(ap, ap);
-            m_edges.push_back(newedge);
+            m_edges.emplace_back(ap, ap);
         }
     }
 
@@ -543,8 +536,8 @@ namespace geometry
 {
 
 bool pointTest(const std::vector<Path>& paths,
-    const std::vector<LineStyle>& lineStyles, boost::int32_t x,
-    boost::int32_t y, const SWFMatrix& wm);
+    const std::vector<LineStyle>& lineStyles, std::int32_t x,
+    std::int32_t y, const SWFMatrix& wm);
 
 } // namespace geometry
 
diff --git a/libcore/HostInterface.h b/libcore/HostInterface.h
index d305262..feeead7 100644
--- a/libcore/HostInterface.h
+++ b/libcore/HostInterface.h
@@ -66,11 +66,11 @@ namespace gnash {
 class CustomMessage
 {
 public:
-    explicit CustomMessage(const std::string& s,
-            const boost::any& arg = boost::blank())
+    explicit CustomMessage(std::string s,
+            boost::any arg = boost::blank())
         :
-        _name(s),
-        _arg(arg)
+        _name(std::move(s)),
+        _arg(std::move(arg))
     {}
     const std::string& name() const { return _name; }
     const boost::any& arg() const { return _arg; }
@@ -181,10 +181,10 @@ public:
         EXTERNALINTERFACE_ZOOM
     };
 
-    explicit HostMessage(KnownEvent e, const boost::any& arg = boost::blank())
+    explicit HostMessage(KnownEvent e, boost::any arg = boost::blank())
         :
         _event(e),
-        _arg(arg)
+        _arg(std::move(arg))
     {}
 
     KnownEvent event() const { return _event; }
diff --git a/libcore/InteractiveObject.h b/libcore/InteractiveObject.h
index c9cdfd7..ff46e38 100644
--- a/libcore/InteractiveObject.h
+++ b/libcore/InteractiveObject.h
@@ -78,7 +78,7 @@ public:
     /// DisplayObject.
     virtual StaticText* getStaticText(std::vector<const SWF::TextRecord*>&,
             size_t&) {
-        return 0;
+        return nullptr;
     }
 
     /// Returns local, untransformed bounds of this DisplayObject in TWIPS
@@ -112,8 +112,8 @@ public:
     /// @param y
     ///     Y ordinate of the pointer, in parent's coordiante space.
     ///
-    virtual InteractiveObject* topmostMouseEntity(boost::int32_t /*x*/,
-            boost::int32_t /*y*/) = 0;
+    virtual InteractiveObject* topmostMouseEntity(std::int32_t /*x*/,
+            std::int32_t /*y*/) = 0;
 
     /// Called whenever a mouse event affects this InteractiveObject.
     //
@@ -129,7 +129,7 @@ public:
     /// override and invokes pointInBounds().
     ///
     ///
-    virtual bool pointInShape(boost::int32_t x, boost::int32_t y) const
+    virtual bool pointInShape(std::int32_t x, std::int32_t y) const
     {
         log_error("Character %s did not override pointInShape() - "
                 "using pointInBounds() instead", typeid(*this).name());
diff --git a/libcore/LineStyle.cpp b/libcore/LineStyle.cpp
index e630ad5..eecbe36 100644
--- a/libcore/LineStyle.cpp
+++ b/libcore/LineStyle.cpp
@@ -146,8 +146,8 @@ LineStyle::read(SWFStream& in, SWF::TagType t, movie_definition& md,
             in.ensureBytes(2+2);
             m_width = in.read_u16();
 
-            const boost::uint8_t flags1 = in.read_u8();
-            const boost::uint8_t flags2 = in.read_u8();
+            const std::uint8_t flags1 = in.read_u8();
+            const std::uint8_t flags2 = in.read_u8();
 
             _startCapStyle = (CapStyle)((flags1 & 0xC0) >> 6);
             _joinStyle = (JoinStyle)((flags1 & 0x30) >> 4);
@@ -178,7 +178,7 @@ LineStyle::read(SWFStream& in, SWF::TagType t, movie_definition& md,
 void
 LineStyle::set_lerp(const LineStyle& ls1, const LineStyle& ls2, float ratio)
 {
-    m_width = static_cast<boost::uint16_t>(
+    m_width = static_cast<std::uint16_t>(
         frnd(lerp<float>(ls1.getThickness(), ls2.getThickness(), ratio)));
     m_color = lerp(ls1.get_color(), ls2.get_color(), ratio);
     if ( ls1._scaleVertically != ls2._scaleVertically )
diff --git a/libcore/LineStyle.h b/libcore/LineStyle.h
index 61e8e1d..a45f26b 100644
--- a/libcore/LineStyle.h
+++ b/libcore/LineStyle.h
@@ -24,6 +24,7 @@
 
 #include "RGBA.h"
 #include "SWF.h"
+#include <utility>
 
 namespace gnash {
     class SWFStream;
@@ -66,7 +67,7 @@ public:
     /// @param endCapStyle
     /// @param joinStyle
     /// @param miterLimitFactor
-    LineStyle(boost::uint16_t width, const rgba& color,
+    LineStyle(std::uint16_t width, rgba color,
             bool scaleThicknessVertically=true,
             bool scaleThicknessHorizontally=true,
             bool pixelHinting=false,
@@ -78,7 +79,7 @@ public:
         )
         :
         m_width(width),
-        m_color(color),
+        m_color(std::move(color)),
         _scaleVertically(scaleThicknessVertically),
         _scaleHorizontally(scaleThicknessHorizontally),
         _pixelHinting(pixelHinting),
@@ -106,7 +107,7 @@ public:
             const RunResources& r, LineStyle *pOther);
 
     /// Return thickness of the line, in TWIPS
-    boost::uint16_t getThickness() const {
+    std::uint16_t getThickness() const {
         return m_width;
     }
 
@@ -166,7 +167,7 @@ public:
 private:
     
     /// Width in twips.
-    boost::uint16_t m_width;
+    std::uint16_t m_width;
 
     rgba m_color;
 
diff --git a/libcore/LoadVariablesThread.cpp b/libcore/LoadVariablesThread.cpp
index 4229168..2b1ef3a 100644
--- a/libcore/LoadVariablesThread.cpp
+++ b/libcore/LoadVariablesThread.cpp
@@ -1,4 +1,4 @@
-// 
+//
 //   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
 //   Free Software Foundation, Inc
 //
@@ -25,172 +25,145 @@
 #include "StreamProvider.h"
 
 #include <string>
-#include <boost/scoped_array.hpp>
 
 //#define DEBUG_LOAD_VARIABLES 1
 
 namespace gnash {
 
-void
-LoadVariablesThread::completeLoad()
+// static
+LoadVariablesThread::ValuesMap
+LoadVariablesThread::completeLoad(IOChannel* varstream,
+                                  std::atomic<bool>& canceled)
 {
+    std::unique_ptr<IOChannel> stream(varstream);
 #ifdef DEBUG_LOAD_VARIABLES
     log_debug("completeLoad called");
 #endif
+    ValuesMap parseResult;
 
+    int bytesLoaded = 0;
+    int bytesTotal = stream->size();
 
-	// TODO: how to set _bytesTotal ?
-
-	// this is going to override any previous setting,
-	// better do this inside a subclass (in a separate thread)
-	_bytesLoaded = 0;
-	_bytesTotal = _stream->size();
+    std::string toparse;
 
-	std::string toparse;
-
-	const size_t chunkSize = 1024;
-	boost::scoped_array<char> buf(new char[chunkSize]);
-	unsigned int parsedLines = 0;
-	// TODO: use read_string ?
-	while ( size_t bytesRead = _stream->read(buf.get(), chunkSize) )
-	{
+    const size_t chunkSize = 1024;
+    std::unique_ptr<char[]> buf(new char[chunkSize]);
+    unsigned int parsedLines = 0;
+    // TODO: use read_string ?
+    while ( size_t bytesRead = stream->read(buf.get(), chunkSize) ) {
 #ifdef DEBUG_LOAD_VARIABLES
-            log_debug("Read %u bytes", bytesRead);
+        log_debug("Read %u bytes", bytesRead);
 #endif
 
-		if ( _bytesLoaded )
-		{
-			std::string chunk(buf.get(), bytesRead);
-			toparse += chunk;
-		}
-		else
-		{
-			size_t dataSize = bytesRead;
-			utf8::TextEncoding encoding;
-			char* ptr = utf8::stripBOM(buf.get(), dataSize,
-					encoding);
-			if ( encoding != utf8::encUTF8 &&
-			     encoding != utf8::encUNSPECIFIED )
-			{
-                  log_unimpl(_("%s to UTF8 conversion in "
-					    "MovieClip.loadVariables "
-                                         "input parsing"),
-					    utf8::textEncodingName(encoding));
-			}
-			std::string chunk(ptr, dataSize);
-			toparse += chunk;
-		}
+        if ( bytesLoaded ) {
+            std::string chunk(buf.get(), bytesRead);
+            toparse += chunk;
+        } else {
+            size_t dataSize = bytesRead;
+            utf8::TextEncoding encoding;
+            const char* ptr = utf8::stripBOM(buf.get(), dataSize,
+                                       encoding);
+            if ( encoding != utf8::encUTF8 &&
+                    encoding != utf8::encUNSPECIFIED ) {
+                log_unimpl(_("%s to UTF8 conversion in "
+                             "MovieClip.loadVariables "
+                             "input parsing"),
+                           utf8::textEncodingName(encoding));
+            }
+            std::string chunk(ptr, dataSize);
+            toparse += chunk;
+        }
 
 #ifdef DEBUG_LOAD_VARIABLES
-		log_debug("toparse: %s", toparse);
+        log_debug("toparse: %s", toparse);
 #endif
 
-		// parse remainder
-		size_t lastamp = toparse.rfind('&');
-		if ( lastamp != std::string::npos )
-		{
-			std::string parseable = toparse.substr(0, lastamp);
+        // parse remainder
+        size_t lastamp = toparse.rfind('&');
+        if ( lastamp != std::string::npos ) {
+            std::string parseable = toparse.substr(0, lastamp);
 #ifdef DEBUG_LOAD_VARIABLES
-			log_debug("parseable: %s", parseable);
+            log_debug("parseable: %s", parseable);
 #endif
-			parse(parseable);
-			toparse = toparse.substr(lastamp+1);
+            URL::parse_querystring(toparse, parseResult);
+            toparse = toparse.substr(lastamp+1);
 #ifdef DEBUG_LOAD_VARIABLES
-			log_debug("toparse nextline: %s", toparse);
+            log_debug("toparse nextline: %s", toparse);
 #endif
-			++parsedLines;
-		}
-
-		_bytesLoaded += bytesRead;
-
-		// eof, get out !
-		if ( _stream->eof() ) break;
+            ++parsedLines;
+        }
+
+        bytesLoaded += bytesRead;
+
+        // eof, get out !
+        if ( stream->eof() ) {
+            break;
+        }
+
+        if ( canceled.load() ) {
+            log_debug("Cancelling LoadVariables download thread...");
+            stream.reset();
+            return parseResult;
+        }
+    }
+
+    if ( ! toparse.empty() ) {
+        URL::parse_querystring(toparse, parseResult);
+    }
+
+    try {
+        stream->go_to_end();
+    } catch (IOException& ex) {
+        log_error(_("Stream couldn't seek to end: %s"), ex.what());
+    }
 
-		if ( cancelRequested() ) {
-                    log_debug("Cancelling LoadVariables download thread...");
-			_stream.reset();
-			return;
-		}
-	}
+    bytesLoaded = stream->tell();
+    if ( bytesTotal !=  bytesLoaded ) {
+        log_error(_("Size of 'variables' stream advertised to be %d bytes,"
+                    " but turned out to be %d bytes."),
+                  bytesTotal, bytesLoaded);
+    }
 
-	if ( ! toparse.empty() ) {
-		parse(toparse);
-	}
+    //dispatchLoadEvent();
+    canceled = true;
 
-	try {
-		_stream->go_to_end();
-	}
-        catch (IOException& ex) {
-        log_error(_("Stream couldn't seek to end: %s"), ex.what());
-	}
-	
-    _bytesLoaded = _stream->tell();
-	if ( _bytesTotal !=  _bytesLoaded ) {
-            log_error(_("Size of 'variables' stream advertised to be %d bytes,"
-                          " but turned out to be %d bytes."),
-			_bytesTotal, _bytesLoaded);
-		_bytesTotal = _bytesLoaded;
-	}
-
-	_stream.reset(); // we don't need the IOChannel anymore
-
-	//dispatchLoadEvent();
-	setCompleted();
+    return parseResult;
 }
 
 LoadVariablesThread::LoadVariablesThread(const StreamProvider& sp,
         const URL& url, const std::string& postdata)
-	:
-	_bytesLoaded(0),
-	_bytesTotal(0),
-	_stream(sp.getStream(url, postdata)),
-	_completed(false),
-	_canceled(false)
+    : _canceled(false)
 {
-	if ( ! _stream.get() )
-	{
-		throw NetworkException();
-	}
+    startThread(sp.getStream(url, postdata));
 }
 
 LoadVariablesThread::LoadVariablesThread(const StreamProvider& sp,
         const URL& url)
-	:
-	_bytesLoaded(0),
-	_bytesTotal(0),
-	_stream(sp.getStream(url)),
-	_completed(false),
-	_canceled(false)
+    : _canceled(false)
 {
-	if ( ! _stream.get() )
-	{
-		throw NetworkException();
-	}
+    startThread(sp.getStream(url));
 }
 
 void
-LoadVariablesThread::cancel()
-{
-	boost::mutex::scoped_lock lock(_mutex);
-	_canceled = true;
-}
-
-bool
-LoadVariablesThread::cancelRequested()
+LoadVariablesThread::startThread(std::unique_ptr<IOChannel> stream)
 {
-	boost::mutex::scoped_lock lock(_mutex);
-	return _canceled;
+    if (!stream) {
+        throw NetworkException();
+    }
+
+    // Passing IOStream* rather than unique_ptr serves to appease GCC 4.6,
+    // which insists the arguments are CopyConstructible rather than Movable.
+    _vals = std::async(std::launch::async, completeLoad, stream.release(),
+                       std::ref(_canceled));
 }
 
 LoadVariablesThread::~LoadVariablesThread()
 {
-	if ( _thread.get() )
-	{
-		cancel();
-		_thread->join();
-		_thread.reset();
-	}
+    if ( _vals.valid() ) {
+        _canceled = true;
+        _vals.wait();
+    }
 }
 
 
-} // namespace gnash 
+} // namespace gnash
diff --git a/libcore/LoadVariablesThread.h b/libcore/LoadVariablesThread.h
index bd97ff8..0be3985 100644
--- a/libcore/LoadVariablesThread.h
+++ b/libcore/LoadVariablesThread.h
@@ -23,16 +23,14 @@
 
 #include <string>
 #include <map>
-#include <boost/scoped_ptr.hpp>
-#include <boost/thread/thread.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/bind.hpp> 
+#include <future>
+#include <atomic>
 
-#include "URL.h" // for inlines
 
 namespace gnash {
     class StreamProvider;
     class IOChannel;
+    class URL;
 }
 
 namespace gnash {
@@ -79,134 +77,37 @@ public:
 	~LoadVariablesThread();
 
 	/// Return the name,value map parsed out of the loaded stream
-	ValuesMap& getValues()
+	ValuesMap getValues()
 	{
-		return _vals;
+		return _vals.get();
 	}
 
-	/// Start the load and parse thread
-	void process()
-	{
-		assert(!_thread.get());
-		assert(_stream.get());
-		_thread.reset(new boost::thread(
-                boost::bind(LoadVariablesThread::execLoadingThread, this)));
-	}
-
-	/// Cancel a download in progress
-	//
-	/// Locks _mutex
-	///
-	void cancel();
-
-	/// Return true if loading/parsing is in progress
-	bool inProgress()
-	{
-		// TODO: should we mutex-protect this ?
-		return ( _thread.get() != NULL );
-	}
-
-	/// Mutex-protected inspector for thread completion
-	//
-	/// Only call this method from the same thread that
-	/// also called process(), as the thread will be joined
-	/// if it completed.
-	///
 	bool completed()
 	{
-		boost::mutex::scoped_lock lock(_mutex);
-		if (  _completed && _thread.get() )
-		{
-			_thread->join();
-			_thread.reset();
-		}
-		return _completed;
+                return _canceled;
 	}
 
-	size_t getBytesLoaded() const
-	{
-		// TODO: should we mutex-protect this ?
-		return _bytesLoaded;
-	}
-
-	size_t getBytesTotal() const
-	{
-		// TODO: should we mutex-protect this ?
-		return _bytesTotal;
-	}
-
-
 private:
 
 	/// Prevent copy
 	LoadVariablesThread& operator==(const LoadVariablesThread&); 
 	LoadVariablesThread(const LoadVariablesThread&); 
 
-	/// Since I haven't found a way to pass boost::thread 
-	/// constructor a non-static function, this is here to
-	/// workaround that limitation (in either boost or more
-	/// likely my own knowledge of it)
-	static void execLoadingThread(LoadVariablesThread* ptr)
-	{
-		//log_debug("LoadVars loading thread started");
-		ptr->completeLoad();
-		//log_debug("LoadVars loading thread completed");
-	}
-
-
-	/// Mutex-protected mutator for thread completion
-	void setCompleted()
-	{
-		boost::mutex::scoped_lock lock(_mutex);
-		_completed = true;
-		//log_debug("Completed");
-	}
-
+        void startThread(std::unique_ptr<IOChannel> stream);
 
 	/// Load all data from the _stream input.
 	//
 	/// This function should be run by a separate thread.
 	///
-	void completeLoad();
-
-	/// Parse an url-encoded query string
-	//
-	/// Variables in the string will be added as properties
-	/// of this object.
-	///
-	/// @param querystring
-	///	An url-encoded query string.
-	///	The string will be parsed using URL::parse_querystring
-	///
-	/// @return the number of variables found in the string
-	///
-	size_t parse(const std::string& str)
-	{
-		URL::parse_querystring(str, _vals);
-		return _vals.size();
-	}
-
-	/// Check if download cancel was requested
-	//
-	/// Locks _mutex
-	///
-	bool cancelRequested();
-
-	size_t _bytesLoaded;
-
-	size_t _bytesTotal;
-
-    boost::scoped_ptr<IOChannel> _stream;
-
-    boost::scoped_ptr<boost::thread> _thread;
-
-	ValuesMap _vals;
-
-	bool _completed;
+	static ValuesMap completeLoad(IOChannel* stream,
+                                      std::atomic<bool>& canceled);
 
-	bool _canceled;
+        std::future<ValuesMap> _vals;
 
-	boost::mutex _mutex;
+	/// Indicates either whether cancellation was requested, or whether the
+	/// thread has finished executing code, from the perspective of the
+	/// variables loading thread thread and the main thread respectively.
+	std::atomic<bool> _canceled;
 };
 
 } // namespace gnash
diff --git a/libcore/MorphShape.cpp b/libcore/MorphShape.cpp
index f1f67ee..b063dba 100644
--- a/libcore/MorphShape.cpp
+++ b/libcore/MorphShape.cpp
@@ -37,7 +37,7 @@ MorphShape::MorphShape(movie_root& mr, as_object* object,
 }
 
 bool
-MorphShape::pointInShape(boost::int32_t x, boost::int32_t y) const
+MorphShape::pointInShape(std::int32_t x, std::int32_t y) const
 {
     const SWFMatrix wm = getWorldMatrix(*this).invert();
     point lp(x, y);
diff --git a/libcore/MorphShape.h b/libcore/MorphShape.h
index 5910333..d010445 100644
--- a/libcore/MorphShape.h
+++ b/libcore/MorphShape.h
@@ -57,7 +57,7 @@ public:
 
     virtual SWFRect getBounds() const;
     
-    virtual bool pointInShape(boost::int32_t  x, boost::int32_t  y) const;
+    virtual bool pointInShape(std::int32_t  x, std::int32_t  y) const;
  
     const SWF::ShapeRecord& shape() const {
         return _shape;
diff --git a/libcore/MouseButtonState.h b/libcore/MouseButtonState.h
index 94a0f99..87ead62 100644
--- a/libcore/MouseButtonState.h
+++ b/libcore/MouseButtonState.h
@@ -39,8 +39,8 @@ public:
 
 	MouseButtonState()
 		:
-        activeEntity(0),
-        topmostEntity(0),
+        activeEntity(nullptr),
+        topmostEntity(nullptr),
 		wasDown(false),
 		isDown(false),
 		wasInsideActiveEntity(false)
diff --git a/libcore/Movie.h b/libcore/Movie.h
index 7642095..434a84f 100644
--- a/libcore/Movie.h
+++ b/libcore/Movie.h
@@ -86,7 +86,7 @@ public:
     /// @return         The DefinitionTag of the requested character or 0
     ///                 if the character has not yet been exported.
     virtual SWF::DefinitionTag* exportedCharacter(const std::string& /*s*/) {
-        return 0;
+        return nullptr;
     }
 
     /// Add a character to the list of known characters
@@ -94,13 +94,13 @@ public:
     /// This makes the character known to ActionScript for initialization.
     /// Exported characters must both be in the definition's list of exports
     /// and added with this function before they are available.
-    virtual void addCharacter(boost::uint16_t /*id*/) {}
+    virtual void addCharacter(std::uint16_t /*id*/) {}
 
     /// Attempt to mark a character as initialized.
     //
     /// The default is to return false. Only a SWFMovie can have a list of
     /// characters.
-	virtual bool initializeCharacter(boost::uint16_t /*id*/) {
+	virtual bool initializeCharacter(std::uint16_t /*id*/) {
         return false;
     }
 
diff --git a/libcore/MovieClip.cpp b/libcore/MovieClip.cpp
index b4d4157..4f6482b 100644
--- a/libcore/MovieClip.cpp
+++ b/libcore/MovieClip.cpp
@@ -28,7 +28,7 @@
 #include <string>
 #include <algorithm> // for std::swap
 #include <boost/algorithm/string/case_conv.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 
 #include "log.h" 
 #include "movie_definition.h"
@@ -117,10 +117,10 @@ class QueuedEvent : public ExecutableCode
 {
 public:
 
-    QueuedEvent(MovieClip* nTarget, const event_id& id)
+    QueuedEvent(MovieClip* nTarget, event_id id)
         :
         ExecutableCode(nTarget),
-        _eventId(id)
+        _eventId(std::move(id))
     {}
 
     virtual void execute() {
@@ -152,10 +152,10 @@ public:
     MouseEntityFinder(point wp, point pp)
         :
         _highestHiddenDepth(std::numeric_limits<int>::min()),
-        _m(NULL),
+        _m(nullptr),
         _candidates(),
-        _wp(wp),
-        _pp(pp),
+        _wp(std::move(wp)),
+        _pp(std::move(pp)),
         _checked(false)
     {}
 
@@ -259,7 +259,7 @@ class ShapeContainerFinder
 {
 public:
 
-    ShapeContainerFinder(boost::int32_t x, boost::int32_t y)
+    ShapeContainerFinder(std::int32_t x, std::int32_t y)
         :
         _found(false),
         _x(x),
@@ -278,8 +278,8 @@ public:
 
 private:
     bool _found;
-    const boost::int32_t _x;
-    const boost::int32_t _y;
+    const std::int32_t _x;
+    const std::int32_t _y;
 };
 
 /// Find the first visible DisplayObject whose shape contain the point
@@ -290,7 +290,7 @@ class VisibleShapeContainerFinder
 {
 public:
 
-    VisibleShapeContainerFinder(boost::int32_t x, boost::int32_t y)
+    VisibleShapeContainerFinder(std::int32_t x, std::int32_t y)
         :
         _found(false),
         _x(x),
@@ -310,8 +310,8 @@ public:
 
 private:
     bool _found;
-    const boost::int32_t _x;
-    const boost::int32_t _y;
+    const std::int32_t _x;
+    const std::int32_t _y;
 };
 
 /// Find the first hitable DisplayObject whose shape contain the point 
@@ -321,7 +321,7 @@ private:
 class HitableShapeContainerFinder
 { 
 public: 
-    HitableShapeContainerFinder(boost::int32_t x, boost::int32_t y) 
+    HitableShapeContainerFinder(std::int32_t x, std::int32_t y)
         : 
         _found(false), 
         _x(x), 
@@ -344,10 +344,10 @@ private:
     bool _found; 
 
     // x position in twips.
-    const boost::int32_t _x;
+    const std::int32_t _x;
     
     // y position in twips.
-    const boost::int32_t _y;
+    const std::int32_t _y;
 }; 
 
 /// A DisplayList visitor used to compute its overall bounds.
@@ -384,13 +384,13 @@ struct ReachableMarker
 class DropTargetFinder
 {
 public:
-    DropTargetFinder(boost::int32_t x, boost::int32_t y, DisplayObject* dragging)
+    DropTargetFinder(std::int32_t x, std::int32_t y, DisplayObject* dragging)
         :
         _highestHiddenDepth(std::numeric_limits<int>::min()),
         _x(x),
         _y(y),
         _dragging(dragging),
-        _dropch(0),
+        _dropch(nullptr),
         _candidates(),
         _checked(false)
     {}
@@ -464,8 +464,8 @@ private:
     ///
     int _highestHiddenDepth;
 
-    boost::int32_t _x;
-    boost::int32_t _y;
+    std::int32_t _x;
+    std::int32_t _y;
     DisplayObject* _dragging;
     mutable const DisplayObject* _dropch;
 
@@ -542,8 +542,8 @@ MovieClip::getDisplayObjectAtDepth(int depth)
 void
 MovieClip::queueEvent(const event_id& id, int lvl)
 {
-    std::auto_ptr<ExecutableCode> event(new QueuedEvent(this, id));
-    stage().pushAction(event, lvl);
+    std::unique_ptr<ExecutableCode> event(new QueuedEvent(this, id));
+    stage().pushAction(std::move(event), lvl);
 }
 
 /// This handles special properties of MovieClip.
@@ -632,7 +632,7 @@ MovieClip::call_frame_actions(const as_value& frame_spec)
     //             to properly queue actions back on the global queue.
     //
     _callingFrameActions = true;
-    PoolGuard poolGuard(getVM(*getObject(this)), 0);
+    PoolGuard poolGuard(getVM(*getObject(this)), nullptr);
     const PlayList* playlist = _def->getPlaylist(frame_number);
     if (playlist) {
         PlayList::const_iterator it = playlist->begin();
@@ -666,7 +666,7 @@ MovieClip::duplicateMovieClip(const std::string& newname, int depth,
         IF_VERBOSE_ASCODING_ERRORS(
             log_aserror(_("Can't clone root of the movie"));
         );
-        return 0;
+        return nullptr;
     }
 
     MovieClip* parent = parent_ch->to_movie();
@@ -675,7 +675,7 @@ MovieClip::duplicateMovieClip(const std::string& newname, int depth,
             log_error(_("%s parent is not a movieclip, can't clone"),
                 getTarget());
         );
-        return 0;
+        return nullptr;
     }
 
     as_object* o = getObjectWithPrototype(getGlobal(*getObject(this)), 
@@ -738,7 +738,7 @@ MovieClip::notifyEvent(const event_id& id)
     }
 
     // Dispatch static event handlers (defined in PlaceObject tags).
-    std::auto_ptr<ExecutableCode> code(get_event_handler(id));
+    std::unique_ptr<ExecutableCode> code(get_event_handler(id));
     if (code.get()) {
         // Dispatch.
         code->execute();
@@ -820,8 +820,8 @@ MovieClip::pathElement(const ObjectURI& uri)
 
     // See if it's a member
     as_value tmp;
-    if (!obj->as_object::get_member(uri, &tmp)) return 0;
-    if (!tmp.is_object()) return 0;
+    if (!obj->as_object::get_member(uri, &tmp)) return nullptr;
+    if (!tmp.is_object()) return nullptr;
 
     if (tmp.is_sprite()) {
         return getObject(tmp.toDisplayObject(true));
@@ -838,8 +838,8 @@ MovieClip::setTextFieldVariables(const ObjectURI& uri, const as_value& val)
 
     if (!etc) return false;
 
-    for (TextFields::iterator i=etc->begin(), e=etc->end(); i!=e; ++i) {
-        (*i)->updateText(val.to_string(getSWFVersion(*getObject(this))));
+    for (TextField* textfield : *etc) {
+        textfield->updateText(val.to_string(getSWFVersion(*getObject(this))));
     }
     return true;
 }
@@ -987,9 +987,9 @@ MovieClip::execute_init_action_buffer(const action_buffer& a, int cid)
                     "in frame %2% of MovieClip %3%",
                 cid, _currentFrame, getTarget());
 #endif
-        std::auto_ptr<ExecutableCode> code(new GlobalCode(a, this));
+        std::unique_ptr<ExecutableCode> code(new GlobalCode(a, this));
 
-        stage().pushAction(code, movie_root::PRIORITY_INIT);
+        stage().pushAction(std::move(code), movie_root::PRIORITY_INIT);
     }
     else {
 #ifdef GNASH_DEBUG
@@ -1049,15 +1049,14 @@ MovieClip::executeFrameTags(size_t frame, DisplayList& dlist, int typeflags)
         );
 
         // Generally tags should be executed in the order they are found in.
-        for (PlayList::const_iterator it = playlist->begin(),
-                e = playlist->end(); it != e; ++it) {
+        for (const auto& item : *playlist) {
 
             if (typeflags & SWF::ControlTag::TAG_DLIST) {
-                (*it)->executeState(this, dlist);
+                item->executeState(this, dlist);
             }
 
             if (typeflags & SWF::ControlTag::TAG_ACTION) {
-                (*it)->executeActions(this, _displayList);
+                item->executeActions(this, _displayList);
             }
         }
     }
@@ -1248,12 +1247,12 @@ MovieClip::add_display_object(const SWF::PlaceObject2Tag* tag,
             log_swferror(_("MovieClip::add_display_object(): "
                     "unknown cid = %d"), tag->getID());
         );
-        return NULL;
+        return nullptr;
     }
     
     DisplayObject* existing_char = dlist.getDisplayObjectAtDepth(tag->getDepth());
     
-    if (existing_char) return NULL;
+    if (existing_char) return nullptr;
 
     Global_as& gl = getGlobal(*getObject(this));
     VM& vm = getVM(*getObject(this));
@@ -1266,7 +1265,7 @@ MovieClip::add_display_object(const SWF::PlaceObject2Tag* tag,
     }
 
     if (tag->hasBlendMode()) {
-        boost::uint8_t bm = tag->getBlendMode();
+        std::uint8_t bm = tag->getBlendMode();
         ch->setBlendMode(static_cast<DisplayObject::BlendMode>(bm));
     }
 
@@ -1293,13 +1292,13 @@ MovieClip::add_display_object(const SWF::PlaceObject2Tag* tag,
 void 
 MovieClip::move_display_object(const SWF::PlaceObject2Tag* tag, DisplayList& dlist)
 {    
-    boost::uint16_t ratio = tag->getRatio();
+    std::uint16_t ratio = tag->getRatio();
     // clip_depth is not used in MOVE tag(at least no related tests). 
     dlist.moveDisplayObject(
         tag->getDepth(), 
-        tag->hasCxform() ? &tag->getCxform() : NULL,
-        tag->hasMatrix() ? &tag->getMatrix() : NULL,
-        tag->hasRatio() ? &ratio : NULL);
+        tag->hasCxform() ? &tag->getCxform() : nullptr,
+        tag->hasMatrix() ? &tag->getMatrix() : nullptr,
+        tag->hasRatio() ? &ratio : nullptr);
 }
 
 void
@@ -1309,9 +1308,9 @@ MovieClip::replace_display_object(const SWF::PlaceObject2Tag* tag,
     // A MovieClip without a definition cannot have any ControlTags, so this
     // should not be called.
     assert(_def);
-    assert(tag != NULL);
+    assert(tag != nullptr);
 
-    const boost::uint16_t id = tag->getID();
+    const std::uint16_t id = tag->getID();
 
     SWF::DefinitionTag* cdef = _def->getDefinitionTag(id);
     if (!cdef) {
@@ -1414,7 +1413,7 @@ MovieClip::handleFocus()
 }
 
 bool
-MovieClip::pointInShape(boost::int32_t x, boost::int32_t y) const
+MovieClip::pointInShape(std::int32_t x, std::int32_t y) const
 {
     ShapeContainerFinder finder(x, y);
     _displayList.visitBackward(finder);
@@ -1423,7 +1422,7 @@ MovieClip::pointInShape(boost::int32_t x, boost::int32_t y) const
 }
 
 bool
-MovieClip::pointInVisibleShape(boost::int32_t x, boost::int32_t y) const
+MovieClip::pointInVisibleShape(std::int32_t x, std::int32_t y) const
 {
     if (! visible()) return false;
     if (isDynamicMask() && ! mouseEnabled()) {
@@ -1450,7 +1449,7 @@ MovieClip::pointInVisibleShape(boost::int32_t x, boost::int32_t y) const
 }
 
 inline bool
-MovieClip::hitTestDrawable(boost::int32_t x, boost::int32_t y) const
+MovieClip::hitTestDrawable(std::int32_t x, std::int32_t y) const
 {
     const SWFMatrix wm = getWorldMatrix(*this).invert();
     point lp(x, y);
@@ -1460,7 +1459,7 @@ MovieClip::hitTestDrawable(boost::int32_t x, boost::int32_t y) const
 }
 
 bool
-MovieClip::pointInHitableShape(boost::int32_t x, boost::int32_t y) const
+MovieClip::pointInHitableShape(std::int32_t x, std::int32_t y) const
 {
     if (isDynamicMask() && !mouseEnabled()) return false;
 
@@ -1475,9 +1474,9 @@ MovieClip::pointInHitableShape(boost::int32_t x, boost::int32_t y) const
 }
 
 InteractiveObject*
-MovieClip::topmostMouseEntity(boost::int32_t x, boost::int32_t y)
+MovieClip::topmostMouseEntity(std::int32_t x, std::int32_t y)
 {
-    if (!visible()) return 0;
+    if (!visible()) return nullptr;
 
     // point is in parent's space, we need to convert it in world space
     point wp(x, y);
@@ -1493,7 +1492,7 @@ MovieClip::topmostMouseEntity(boost::int32_t x, boost::int32_t y)
 
     if (mouseEnabled()) {
         if (pointInVisibleShape(wp.x, wp.y)) return this;
-        return 0;
+        return nullptr;
     }
 
     SWFMatrix m = getMatrix(*this);
@@ -1511,12 +1510,12 @@ MovieClip::topmostMouseEntity(boost::int32_t x, boost::int32_t y)
 }
 
 const DisplayObject*
-MovieClip::findDropTarget(boost::int32_t x, boost::int32_t y,
+MovieClip::findDropTarget(std::int32_t x, std::int32_t y,
         DisplayObject* dragging) const
 {
-    if (this == dragging) return 0; // not here...
+    if (this == dragging) return nullptr; // not here...
 
-    if (!visible()) return 0; // isn't me !
+    if (!visible()) return nullptr; // isn't me !
 
     DropTargetFinder finder(x, y, dragging);
     _displayList.visitAll(finder);
@@ -1532,7 +1531,7 @@ MovieClip::findDropTarget(boost::int32_t x, boost::int32_t y,
     // does it hit us ?
     if (hitTestDrawable(x, y)) return this;
 
-    return 0;
+    return nullptr;
 }
 
 bool
@@ -1591,11 +1590,11 @@ MovieClip::cleanup_textfield_variables()
 
     TextFieldIndex& m = *_text_variables;
 
-    for (TextFieldIndex::iterator i=m.begin(), ie=m.end(); i!=ie; ++i)
+    for (auto& index : m)
     {
-        TextFields& v=i->second;
+        TextFields& v=index.second;
         TextFields::iterator lastValid = std::remove_if(v.begin(), v.end(),
-                    boost::mem_fn(&DisplayObject::unloaded));
+                    std::mem_fn(&DisplayObject::unloaded));
         v.erase(lastValid, v.end());
     }
 }
@@ -1626,7 +1625,7 @@ MovieClip::getDisplayListObject(const ObjectURI& uri)
     DisplayObject* ch = _displayList.getDisplayObjectByName(st, uri,
             caseless(*obj));
 
-    if (!ch) return 0;
+    if (!ch) return nullptr;
 
     // Found object.
 
@@ -1682,7 +1681,7 @@ MovieClip::constructAsScriptObject()
         dynamic_cast<const sprite_definition*>(_def.get());
 
     // We won't "construct" top-level movies
-    as_function* ctor = def ? stage().getRegisteredClass(def) : 0;
+    as_function* ctor = def ? stage().getRegisteredClass(def) : nullptr;
 
 #ifdef GNASH_DEBUG
     log_debug("Attached movieclips %s registered class is %p",
@@ -1759,8 +1758,8 @@ MovieClip::construct(as_object* initObj)
                 getTarget());
 #endif
 
-        std::auto_ptr<ExecutableCode> code(new ConstructEvent(this));
-        stage().pushAction(code, movie_root::PRIORITY_CONSTRUCT);
+        std::unique_ptr<ExecutableCode> code(new ConstructEvent(this));
+        stage().pushAction(std::move(code), movie_root::PRIORITY_CONSTRUCT);
 
     }
     else {
@@ -1899,7 +1898,6 @@ MovieClip::loadVariables(const std::string& urlstr,
             }
             _loadVariableRequests.push_back(new LoadVariablesThread(sp, url));
         }
-        _loadVariableRequests.back().process();
     }
     catch (const NetworkException& ex) {
         log_error(_("Could not load variables from %s"), url.str());
@@ -1909,9 +1907,7 @@ MovieClip::loadVariables(const std::string& urlstr,
 void
 MovieClip::processCompletedLoadVariableRequest(LoadVariablesThread& request)
 {
-    assert(request.completed());
-
-    MovieVariables& vals = request.getValues();
+    MovieVariables vals = request.getValues();
     setVariables(vals);
 
     // We want to call a clip-event too if available, see bug #22116
@@ -1940,11 +1936,10 @@ void
 MovieClip::setVariables(const MovieVariables& vars)
 {
     VM& vm = getVM(*getObject(this));
-    for (MovieVariables::const_iterator it=vars.begin(), itEnd=vars.end();
-        it != itEnd; ++it) {
+    for (const auto& var : vars) {
 
-        const std::string& name = it->first;
-        const std::string& val = it->second;
+        const std::string& name = var.first;
+        const std::string& val = var.second;
         getObject(this)->set_member(getURI(vm, name), val);
     }
 }
@@ -2034,7 +2029,7 @@ MovieClip::markOwnResources() const
 
             const TextFields& tfs=i->second;
             std::for_each(tfs.begin(), tfs.end(), 
-                        boost::mem_fn(&DisplayObject::setReachable));
+                        std::mem_fn(&DisplayObject::setReachable));
         }
     }
 
@@ -2098,8 +2093,7 @@ MovieClip::stopStreamSound()
 {
     if (m_sound_stream_id == -1) return; // nothing to do
 
-    sound::sound_handler* handler =
-        getRunResources(*getObject(this)).soundHandler();
+    sound::sound_handler* handler = stage().runResources().soundHandler();
 
     if (handler) {
         handler->stopStreamingSound(m_sound_stream_id);
@@ -2124,11 +2118,11 @@ MovieClip::TextFields*
 textfieldVar(MovieClip::TextFieldIndex* t, const ObjectURI& name)
 {
     // nothing allocated yet...
-    if (!t) return 0;
+    if (!t) return nullptr;
 
     // TODO: should variable name be considered case-insensitive ?
     MovieClip::TextFieldIndex::iterator it = t->find(name);
-    if (it == t->end()) return 0;
+    if (it == t->end()) return nullptr;
     return &(it->second);
 } 
 
diff --git a/libcore/MovieClip.h b/libcore/MovieClip.h
index 4511107..7aa00b1 100644
--- a/libcore/MovieClip.h
+++ b/libcore/MovieClip.h
@@ -34,7 +34,6 @@
 
 #include "ControlTag.h"
 #include "movie_definition.h" // for inlines
-#include "DisplayList.h" // DisplayList 
 #include "DisplayObjectContainer.h"
 #include "as_environment.h" // for composition
 #include "DynamicShape.h" // for composition
@@ -50,6 +49,7 @@ namespace gnash {
     class TextField;
     class BitmapData_as;
     class CachedBitmap;
+    class DisplayList;
     namespace SWF {
         class PlaceObject2Tag;
     }
@@ -146,16 +146,16 @@ public:
     virtual SWFRect getBounds() const;
 
     // See dox in DisplayObject.h
-    virtual bool pointInShape(boost::int32_t x, boost::int32_t y) const;
+    virtual bool pointInShape(std::int32_t x, std::int32_t y) const;
 
     // See dox in DisplayObject.h
-    virtual bool pointInVisibleShape(boost::int32_t x, boost::int32_t y) const;
+    virtual bool pointInVisibleShape(std::int32_t x, std::int32_t y) const;
 
     /// return true if the given point is located in a(this) hitable sprite.
     ///
     /// all sprites except mouse-insensitive dynamic masks are hitable.
     /// _visible property is ignored for hitable DisplayObjects.
-    virtual bool pointInHitableShape(boost::int32_t x, boost::int32_t y) const;
+    virtual bool pointInHitableShape(std::int32_t x, std::int32_t y) const;
 
     /// Return 0-based index to current frame
     size_t get_current_frame() const
@@ -220,11 +220,11 @@ public:
     /// Return the topmost entity that the given point
     /// covers that can receive mouse events.  NULL if
     /// none.  Coords are in parent's frame.
-    virtual InteractiveObject* topmostMouseEntity(boost::int32_t x,
-            boost::int32_t y);
+    virtual InteractiveObject* topmostMouseEntity(std::int32_t x,
+            std::int32_t y);
 
     // see dox in DisplayObject.h
-    const DisplayObject* findDropTarget(boost::int32_t x, boost::int32_t y,
+    const DisplayObject* findDropTarget(std::int32_t x, std::int32_t y,
             DisplayObject* dragging) const;
 
     void setDropTarget(const std::string& tgt) {
@@ -363,7 +363,7 @@ public:
     /// (1) Construct this instance as an ActionScript object.
     ///     See constructAsScriptObject() method, including constructing
     ///     registered class and adding properties.
-    virtual void construct(as_object* initObj = 0);
+    virtual void construct(as_object* initObj = nullptr);
 
     /// Mark this sprite as destroyed
     //
@@ -492,7 +492,7 @@ public:
     /// @param init_object
     ///     If not null, will be used to copy properties over.
     MovieClip* duplicateMovieClip(const std::string& newname,
-        int newdepth, as_object* init_object = 0);
+        int newdepth, as_object* init_object = nullptr);
 
     /// Called when a mouse event affects this MovieClip
     virtual void mouseEvent(const event_id& id) {
@@ -673,7 +673,7 @@ private:
     /// This is possible because the drawable does not have its own
     /// transform, so we can use our own. The points are expressed in
     /// world space.
-    bool hitTestDrawable(boost::int32_t x, boost::int32_t y) const;
+    bool hitTestDrawable(std::int32_t x, std::int32_t y) const;
 
     /// Advance to a previous frame.
     //
@@ -749,7 +749,7 @@ private:
     /// We'll only allocate Textfield variables map if
     /// we need them (ie: anyone calls set_textfield_variable)
     ///
-    std::auto_ptr<TextFieldIndex> _text_variables;
+    std::unique_ptr<TextFieldIndex> _text_variables;
 
     std::string _droptarget;
 
diff --git a/libcore/MovieFactory.cpp b/libcore/MovieFactory.cpp
index d815d2d..41ab14b 100644
--- a/libcore/MovieFactory.cpp
+++ b/libcore/MovieFactory.cpp
@@ -44,11 +44,11 @@ namespace {
     FileType getFileType(IOChannel& in);
 
     boost::intrusive_ptr<SWFMovieDefinition> createSWFMovie(
-            std::auto_ptr<IOChannel> in, const std::string& url,
+            std::unique_ptr<IOChannel> in, const std::string& url,
             const RunResources& runResources, bool startLoaderThread);
 
     boost::intrusive_ptr<BitmapMovieDefinition> createBitmapMovie(
-            std::auto_ptr<IOChannel> in, const std::string& url,
+            std::unique_ptr<IOChannel> in, const std::string& url,
             const RunResources& r, FileType type);
 
     boost::intrusive_ptr<movie_definition> createNonLibraryMovie(
@@ -60,7 +60,7 @@ namespace {
 MovieLibrary MovieFactory::movieLibrary;
 
 boost::intrusive_ptr<movie_definition>
-MovieFactory::makeMovie(std::auto_ptr<IOChannel> in, const std::string& url,
+MovieFactory::makeMovie(std::unique_ptr<IOChannel> in, const std::string& url,
         const RunResources& runResources, bool startLoaderThread)
 {
     boost::intrusive_ptr<movie_definition> ret;
@@ -81,13 +81,13 @@ MovieFactory::makeMovie(std::auto_ptr<IOChannel> in, const std::string& url,
                            "image, for which we don't yet have the "
                            "concept of a 'loading thread'"));
             }
-            ret = createBitmapMovie(in, url, runResources, type);
+            ret = createBitmapMovie(std::move(in), url, runResources, type);
             break;
         }
 
 
         case GNASH_FILETYPE_SWF:
-            ret = createSWFMovie(in, url, runResources, startLoaderThread);
+            ret = createSWFMovie(std::move(in), url, runResources, startLoaderThread);
             break;
 
         case GNASH_FILETYPE_FLV:
@@ -235,7 +235,7 @@ getFileType(IOChannel& in)
 // Create a SWFMovieDefinition from an SWF stream
 // NOTE: this method assumes this *is* an SWF stream
 boost::intrusive_ptr<SWFMovieDefinition>
-createSWFMovie(std::auto_ptr<IOChannel> in, const std::string& url,
+createSWFMovie(std::unique_ptr<IOChannel> in, const std::string& url,
         const RunResources& runResources, bool startLoaderThread)
 {
 
@@ -243,8 +243,8 @@ createSWFMovie(std::auto_ptr<IOChannel> in, const std::string& url,
 
     const std::string& absURL = URL(url).str();
 
-    if (!m->readHeader(in, absURL)) return 0;
-    if (startLoaderThread && !m->completeLoad()) return 0;
+    if (!m->readHeader(std::move(in), absURL)) return nullptr;
+    if (startLoaderThread && !m->completeLoad()) return nullptr;
 
     return m;
 }
@@ -254,7 +254,7 @@ createSWFMovie(std::auto_ptr<IOChannel> in, const std::string& url,
 // FileType type
 // TODO: The pp won't display PNGs for SWF7 or below.
 boost::intrusive_ptr<BitmapMovieDefinition>
-createBitmapMovie(std::auto_ptr<IOChannel> in, const std::string& url,
+createBitmapMovie(std::unique_ptr<IOChannel> in, const std::string& url,
         const RunResources& r, FileType type)
 {
     assert (in.get());
@@ -263,11 +263,11 @@ createBitmapMovie(std::auto_ptr<IOChannel> in, const std::string& url,
 
     // readImageData takes a shared pointer because JPEG streams sometimes need
     // to transfer ownership.
-    boost::shared_ptr<IOChannel> imageData(in.release());
+    std::unique_ptr<IOChannel> imageData(in.release());
 
     try {
-        std::auto_ptr<image::GnashImage> im(
-                image::Input::readImageData(imageData, type));
+        std::unique_ptr<image::GnashImage> im(
+                std::move(image::Input::readImageData(std::move(imageData), type)));
 
         if (!im.get()) {
             log_error(_("Can't read image file from %s"), url);
@@ -275,7 +275,7 @@ createBitmapMovie(std::auto_ptr<IOChannel> in, const std::string& url,
         }
 
         Renderer* renderer = r.renderer();
-        ret = new BitmapMovieDefinition(im, renderer, url);
+        ret = new BitmapMovieDefinition(std::move(im), renderer, url);
         return ret;
 
     }
@@ -294,7 +294,7 @@ createNonLibraryMovie(const URL& url, const RunResources& runResources,
   
     boost::intrusive_ptr<movie_definition> ret;
   
-    std::auto_ptr<IOChannel> in;
+    std::unique_ptr<IOChannel> in;
   
     const StreamProvider& streamProvider = runResources.streamProvider();
   
@@ -316,7 +316,7 @@ createNonLibraryMovie(const URL& url, const RunResources& runResources,
     }
   
     const std::string& movie_url = reset_url ? reset_url : url.str();
-    ret = MovieFactory::makeMovie(in, movie_url, runResources,
+    ret = MovieFactory::makeMovie(std::move(in), movie_url, runResources,
             startLoaderThread);
   
     return ret;
diff --git a/libcore/MovieFactory.h b/libcore/MovieFactory.h
index c716e64..e920184 100644
--- a/libcore/MovieFactory.h
+++ b/libcore/MovieFactory.h
@@ -83,8 +83,8 @@ public:
     /// NOTE: when POSTing, the movies library won't be used.
     static DSOEXPORT boost::intrusive_ptr<movie_definition> makeMovie(
         const URL& url, const RunResources& runResources,
-        const char* real_url = 0, bool startLoaderThread = true,
-        const std::string* postdata = 0);
+        const char* real_url = nullptr, bool startLoaderThread = true,
+        const std::string* postdata = nullptr);
     
     /// Load a movie from an already opened stream.
     //
@@ -111,7 +111,7 @@ public:
     /// is initialized. Initializing the VirtualMachine requires a target
     /// SWF version, which can be found in the SWF header.
     static DSOEXPORT boost::intrusive_ptr<movie_definition> makeMovie(
-            std::auto_ptr<IOChannel> in, const std::string& url,
+            std::unique_ptr<IOChannel> in, const std::string& url,
             const RunResources& runResources, bool startLoaderThread);
 
     /// Clear the MovieFactory resources
diff --git a/libcore/MovieLibrary.h b/libcore/MovieLibrary.h
index 7234cf7..b8a98fc 100644
--- a/libcore/MovieLibrary.h
+++ b/libcore/MovieLibrary.h
@@ -26,7 +26,6 @@
 #include <string>
 #include <map>
 #include <algorithm>
-#include <boost/thread/thread.hpp>
 
 namespace gnash {
 
@@ -67,7 +66,7 @@ public:
     bool get(const std::string& key,
             boost::intrusive_ptr<movie_definition>* ret)
     {
-        boost::mutex::scoped_lock lock(_mapMutex);
+        std::lock_guard<std::mutex> lock(_mapMutex);
         LibraryContainer::iterator it = _map.find(key);
         if (it == _map.end()) return false;
         
@@ -88,14 +87,14 @@ public:
         temp.def = mov;
         temp.hitCount = 0;
 
-        boost::mutex::scoped_lock lock(_mapMutex);
+        std::lock_guard<std::mutex> lock(_mapMutex);
         _map[key] = temp;
     }
   
 
     void clear()
     {
-        boost::mutex::scoped_lock lock(_mapMutex);
+        std::lock_guard<std::mutex> lock(_mapMutex);
         _map.clear();
     }
   
@@ -118,14 +117,14 @@ private:
         }
 
         while (_map.size() > max) {
-            boost::mutex::scoped_lock lock(_mapMutex);
+            std::lock_guard<std::mutex> lock(_mapMutex);
             _map.erase(std::min_element(_map.begin(), _map.end(),
                         &findWorstHitCount));
         }
     
     }
 
-	mutable boost::mutex _mapMutex;
+    mutable std::mutex _mapMutex;
   
 };
 
diff --git a/libcore/MovieLoader.cpp b/libcore/MovieLoader.cpp
index 21234d9..dbe51e3 100644
--- a/libcore/MovieLoader.cpp
+++ b/libcore/MovieLoader.cpp
@@ -20,8 +20,9 @@
 #include "MovieLoader.h"
 
 #include <memory> 
-#include <boost/bind.hpp>
+#include <functional>
 #include <algorithm>
+#include <thread>
 
 #include "log.h"
 #include "MovieFactory.h"
@@ -46,9 +47,7 @@ namespace gnash {
 MovieLoader::MovieLoader(movie_root& mr)
     :
     _killed(false),
-    _movieRoot(mr),
-    _thread(0),
-    _barrier(2) // main and loader thread
+    _movieRoot(mr)
 {
 }
 
@@ -57,9 +56,6 @@ MovieLoader::MovieLoader(movie_root& mr)
 void
 MovieLoader::processRequests()
 {
-	// let _thread assignment happen before going on
-    _barrier.wait();
-
 #ifdef GNASH_DEBUG_LOADMOVIE_REQUESTS_PROCESSING
     log_debug("Starting movie loader thread");
 #endif
@@ -68,7 +64,7 @@ MovieLoader::processRequests()
     while (1) {
 
         // check for shutdown/cancel request
-        if (killed()) {
+        if (_killed.load() == true) {
 #ifdef GNASH_DEBUG_LOADMOVIE_REQUESTS_PROCESSING
             log_debug("Loader thread killed");
 #endif
@@ -79,7 +75,7 @@ MovieLoader::processRequests()
         log_debug("processRequests: lock on requests: trying");
 #endif
 
-        boost::mutex::scoped_lock lock(_requestsMutex);
+        std::unique_lock<std::mutex> lock(_requestsMutex);
 
 #ifdef GNASH_DEBUG_LOCKING
         log_debug("processRequests: lock on requests: obtained");
@@ -88,7 +84,8 @@ MovieLoader::processRequests()
         // Find first non-completed request (the others we'll wait)
         Requests::iterator endIt = _requests.end();
         Requests::iterator it = find_if(_requests.begin(), endIt,
-                                        boost::bind(&Request::pending, _1));
+                                        std::bind(&Request::pending,
+                                                  std::placeholders::_1));
 
         if (it == endIt) {
 
@@ -130,7 +127,7 @@ MovieLoader::processRequest(Request& r)
 {
     const URL& url = r.getURL();
     bool usePost = r.usePost();
-    const std::string* postdata = usePost ? &(r.getPostData()) : 0;
+    const std::string* postdata = usePost ? &(r.getPostData()) : nullptr;
 
 #ifdef GNASH_DEBUG_LOADMOVIE_REQUESTS_PROCESSING
     log_debug("Movie loader thread processing request for target %s",
@@ -139,7 +136,7 @@ MovieLoader::processRequest(Request& r)
 
 	boost::intrusive_ptr<movie_definition> md (
         MovieFactory::makeMovie(url, _movieRoot.runResources(),
-                                NULL, true, postdata)
+                                nullptr, true, postdata)
     );
     r.setCompleted(md);
 
@@ -154,13 +151,12 @@ MovieLoader::processRequest(Request& r)
 void
 MovieLoader::clear()
 {
-    if (_thread.get()) {
+    if (_thread.joinable()) {
 
 #ifdef GNASH_DEBUG_LOCKING
         log_debug("clear: lock on requests: trying");
 #endif
-
-        boost::mutex::scoped_lock requestsLock(_requestsMutex);
+        std::unique_lock<std::mutex> requestsLock(_requestsMutex);
 
 #ifdef GNASH_DEBUG_LOCKING
         log_debug("clear: lock on requests: obtained");
@@ -170,8 +166,6 @@ MovieLoader::clear()
         log_debug("clear: lock on kill: trying");
 #endif
 
-        boost::mutex::scoped_lock lock(_killMutex);
-
 #ifdef GNASH_DEBUG_LOCKING
         log_debug("clear: lock on kill: obtained");
 #endif
@@ -182,8 +176,6 @@ MovieLoader::clear()
         log_debug("clear: lock on kill: release for kill");
 #endif
 
-        lock.unlock();
-
         log_debug("waking up loader thread");
 
         _wakeup.notify_all(); // in case it was sleeping
@@ -194,9 +186,8 @@ MovieLoader::clear()
         requestsLock.unlock(); // allow the thread to die
 
         log_debug("MovieLoader notified, joining");
-        _thread->join();
+        _thread.join();
         log_debug("MovieLoader joined");
-        _thread.reset();
     }
 
     // no thread now, can clean w/out locking
@@ -320,12 +311,12 @@ MovieLoader::processCompletedRequest(const Request& r)
         // frame, we'll queue the
         // onLoadInit call next, so it happens after the former.
         //
-        std::auto_ptr<ExecutableCode> code(
+        std::unique_ptr<ExecutableCode> code(
                 new DelayedFunctionCall(targetDO, handler,
                     NSV::PROP_BROADCAST_MESSAGE, 
                     "onLoadInit", getObject(targetDO)));
 
-        getRoot(*handler).pushAction(code, movie_root::PRIORITY_DOACTION);
+        getRoot(*handler).pushAction(std::move(code), movie_root::PRIORITY_DOACTION);
     }
 
     return true;
@@ -345,7 +336,7 @@ MovieLoader::processCompletedRequests()
         log_debug("processCompletedRequests: lock on requests: trying");
 #endif
 
-        boost::mutex::scoped_lock requestsLock(_requestsMutex);
+        std::unique_lock<std::mutex> requestsLock(_requestsMutex);
 
 #ifdef GNASH_DEBUG_LOCKING
         log_debug("processCompletedRequests: lock on requests: obtained");
@@ -358,7 +349,8 @@ MovieLoader::processCompletedRequests()
 
         Requests::iterator endIt = _requests.end();
         Requests::iterator it = find_if(_requests.begin(), endIt,
-                                        boost::bind(&Request::completed, _1));
+                                        std::bind(&Request::completed,
+                                                  std::placeholders::_1));
 
         // Releases scoped lock.
         if (it == endIt) break;
@@ -399,15 +391,6 @@ MovieLoader::processCompletedRequests()
     }
 }
 
-// private
-// runs in loader thread
-bool
-MovieLoader::killed()
-{
-    boost::mutex::scoped_lock lock(_killMutex);
-    return _killed;
-}
-
 // public
 // runs in main thread
 void
@@ -435,13 +418,13 @@ MovieLoader::loadMovie(const std::string& urlstr,
     log_debug("MovieLoader::loadMovie(%s, %s)", url.str(), target);
 
     const std::string* postdata = (method == MovieClip::METHOD_POST) ? &data
-                                                                     : 0;
+                                                                     : nullptr;
 
 #ifdef GNASH_DEBUG_LOCKING
     log_debug("loadMovie: lock on requests: trying");
 #endif
 
-    boost::mutex::scoped_lock lock(_requestsMutex);
+    std::lock_guard<std::mutex> lock(_requestsMutex);
 
 #ifdef GNASH_DEBUG_LOCKING
     log_debug("loadMovie: lock on requests: obtained");
@@ -452,13 +435,10 @@ MovieLoader::loadMovie(const std::string& urlstr,
     );
 
     // Start or wake up the loader thread 
-    if (!_thread.get()) {
+    if (!_thread.joinable()) {
         _killed=false;
-        _thread.reset(new boost::thread(boost::bind(
-                        &MovieLoader::processRequests, this)));
-	    _barrier.wait(); // let execution start before proceeding
-    }
-    else {
+        _thread = std::thread(std::bind(&MovieLoader::processRequests, this));
+    } else {
         log_debug("loadMovie: waking up existing thread");
         _wakeup.notify_all();
     }
@@ -485,14 +465,14 @@ MovieLoader::setReachable() const
     log_debug("setReachable: lock on requests: trying");
 #endif
 
-    boost::mutex::scoped_lock lock(_requestsMutex);
+    std::lock_guard<std::mutex> lock(_requestsMutex);
 
 #ifdef GNASH_DEBUG_LOCKING
     log_debug("setReachable: lock on requests: obtained");
 #endif
 
     std::for_each(_requests.begin(), _requests.end(),
-            boost::mem_fn(&Request::setReachable));
+            std::mem_fn(&Request::setReachable));
 
 #ifdef GNASH_DEBUG_LOCKING
     log_debug("setReachable: lock on requests: release");
diff --git a/libcore/MovieLoader.h b/libcore/MovieLoader.h
index b67719b..6bb9f1f 100644
--- a/libcore/MovieLoader.h
+++ b/libcore/MovieLoader.h
@@ -19,13 +19,14 @@
 #ifndef GNASH_MOVIE_LOADER_H
 #define GNASH_MOVIE_LOADER_H
 
-#include <boost/intrusive_ptr.hpp>
+#include <atomic>
+#include <condition_variable>
 #include <string>
-#include <boost/ptr_container/ptr_list.hpp>
+#include <thread>
+
+#include <boost/intrusive_ptr.hpp>
 #include <boost/noncopyable.hpp>
-#include <boost/thread/thread.hpp>
-#include <boost/thread/condition.hpp>
-#include <boost/thread/barrier.hpp>
+#include <boost/ptr_container/ptr_list.hpp>
 
 #include "URL.h"
 #include "MovieClip.h" 
@@ -73,7 +74,7 @@ public:
     ///                 
     void loadMovie(const std::string& url, const std::string& target,
             const std::string& data, MovieClip::VariablesMethod method,
-            as_object* handler=0);
+            as_object* handler=nullptr);
 
     /// Drop all requests and kill the thread
     void clear();
@@ -91,13 +92,13 @@ private:
         /// @param postdata
         ///   If not null POST method will be used for HTTP.
         ///
-        Request(const URL& u, const std::string& t,
+        Request(URL u, std::string t,
                 const std::string* postdata, as_object* handler)
                 :
-                _target(t),
-                _url(u),
+                _target(std::move(t)),
+                _url(std::move(u)),
                 _usePost(false),
-                _mdef(0),
+                _mdef(nullptr),
                 _mutex(),
                 _handler(handler),
                 _completed(false)
@@ -132,7 +133,7 @@ private:
         ///
         bool getCompleted(boost::intrusive_ptr<movie_definition>& md) const
         {
-            boost::mutex::scoped_lock lock(_mutex);
+            std::lock_guard<std::mutex> lock(_mutex);
             md = _mdef;
             return _completed;
         }
@@ -140,14 +141,14 @@ private:
         /// Only check if request is completed
         bool pending() const
         {
-            boost::mutex::scoped_lock lock(_mutex);
+            std::lock_guard<std::mutex> lock(_mutex);
             return !_completed;
         }
 
         /// Only check if request is completed
         bool completed() const
         {
-            boost::mutex::scoped_lock lock(_mutex);
+            std::lock_guard<std::mutex> lock(_mutex);
             return _completed;
         }
 
@@ -160,7 +161,7 @@ private:
         ///
         void setCompleted(boost::intrusive_ptr<movie_definition> md)
         {
-            boost::mutex::scoped_lock lock(_mutex);
+            std::lock_guard<std::mutex> lock(_mutex);
             _mdef = md;
             _completed = true;
         }
@@ -171,7 +172,7 @@ private:
         bool _usePost;
         std::string _postData;
         boost::intrusive_ptr<movie_definition> _mdef;
-        mutable boost::mutex _mutex;
+        mutable std::mutex _mutex;
         as_object* _handler;
         bool _completed;
     };
@@ -180,7 +181,7 @@ private:
     typedef boost::ptr_list<Request> Requests;
     Requests _requests;
 
-	mutable boost::mutex _requestsMutex;
+    mutable std::mutex _requestsMutex;
 
     void processRequests();
     void processRequest(Request& r);
@@ -193,24 +194,14 @@ private:
     bool processCompletedRequest(const Request& r);
 
     /// Was thread kill requested ?
-    bool killed();
+    std::atomic<bool> _killed;
 
-    bool _killed;
-
-	boost::mutex _killMutex;
-
-    boost::condition _wakeup;
+    std::condition_variable _wakeup;
 
     /// needed for some facilities like find_character_by_target
     movie_root& _movieRoot;
 
-    std::auto_ptr<boost::thread> _thread;
-
-	// Barrier to ensure that _thread
-	// is initialized before the loader thread
-	// continues execution
-	boost::barrier _barrier;
-
+    std::thread _thread;
 };
 
 } // namespace gnash
diff --git a/libcore/PropFlags.h b/libcore/PropFlags.h
index 6874c7f..0b586e5 100644
--- a/libcore/PropFlags.h
+++ b/libcore/PropFlags.h
@@ -20,7 +20,7 @@
 #define GNASH_AS_PROP_FLAGS_H
 
 #include <ostream>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 namespace gnash {
 
@@ -76,7 +76,7 @@ public:
 	}
 
 	/// Constructor, from numerical value
-	PropFlags(boost::uint16_t flags)
+	PropFlags(std::uint16_t flags)
 		:
         _flags(flags)
 	{
@@ -117,7 +117,7 @@ public:
 	}
 
 	/// accessor to the numerical flags value
-    boost::uint16_t get_flags() const { return _flags; }
+    std::uint16_t get_flags() const { return _flags; }
 
 	/// set the numerical flags value (return the new value )
 	/// If unlocked is false, you cannot un-protect from over-write,
@@ -127,7 +127,7 @@ public:
 	/// @param setTrue  the set of flags to set
 	/// @param setFalse the set of flags to clear
 	/// @return         true on success, false on failure (is protected)
-	bool set_flags(boost::uint16_t setTrue, boost::uint16_t setFalse = 0) {
+	bool set_flags(std::uint16_t setTrue, std::uint16_t setFalse = 0) {
 		_flags &= ~setFalse;
 		_flags |= setTrue;
 		return true;
@@ -136,7 +136,7 @@ public:
 private:
 
 	/// Numeric flags
-    boost::uint16_t _flags;
+    std::uint16_t _flags;
 
 };
 
diff --git a/libcore/Property.cpp b/libcore/Property.cpp
index 68a123f..caeb13a 100644
--- a/libcore/Property.cpp
+++ b/libcore/Property.cpp
@@ -19,7 +19,7 @@
 #include "Property.h"
 
 #include <boost/variant.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 
 #include "VM.h"
 #include "as_function.h"
@@ -171,7 +171,8 @@ Property::setValue(as_object& this_ptr, const as_value& value) const
 void
 Property::setCache(const as_value& value)
 {
-    boost::apply_visitor(boost::bind(SetCache(), _1, value), _bound);
+    boost::apply_visitor(std::bind(SetCache(), std::placeholders::_1, value),
+                         _bound);
 }
 
 } // namespace gnash
diff --git a/libcore/Property.h b/libcore/Property.h
index 0733a6a..4bdb8eb 100644
--- a/libcore/Property.h
+++ b/libcore/Property.h
@@ -22,7 +22,7 @@
 
 #include <boost/variant.hpp>
 #include <cassert>
-#include <boost/bind.hpp>
+#include <functional>
 #include <typeinfo>
 
 #include "PropFlags.h"
@@ -148,8 +148,9 @@ public:
 
 	/// Set the cache value (for user-defined getter-setters)
 	void setCache(const as_value& v) {
-        boost::apply_visitor(boost::bind(SetUnderlying(), _1, v), _getset);
-    }
+            boost::apply_visitor(
+                std::bind(SetUnderlying(), std::placeholders::_1, v), _getset);
+        }
 
 	/// Get the cache value (for user-defined getter-setters)
 	as_value getCache() const {
@@ -288,44 +289,35 @@ class Property
 
 public:
 
-	Property(const ObjectURI& uri, const as_value& value,
-            const PropFlags& flags)
+	Property(ObjectURI uri, const as_value& value,
+            PropFlags flags)
         :
         _bound(value),
-		_uri(uri),
-		_flags(flags),
+		_uri(std::move(uri)),
+		_flags(std::move(flags)),
         _destructive(false)
 	{}
 
-	Property(const ObjectURI& uri,
+	Property(ObjectURI uri,
 		as_function* getter, as_function* setter, 
-		const PropFlags& flags, bool destroy = false)
+		PropFlags flags, bool destroy = false)
         :
         _bound(GetterSetter(getter, setter)),
-        _uri(uri),
-		_flags(flags), 
+        _uri(std::move(uri)),
+		_flags(std::move(flags)), 
 		_destructive(destroy)
 	{}
 
-	Property(const ObjectURI& uri, as_c_function_ptr getter,
-            as_c_function_ptr setter, const PropFlags& flags,
+	Property(ObjectURI uri, as_c_function_ptr getter,
+            as_c_function_ptr setter, PropFlags flags,
             bool destroy = false)
 		:
         _bound(GetterSetter(getter, setter)),
-        _uri(uri),
-		_flags(flags),
+        _uri(std::move(uri)),
+		_flags(std::move(flags)),
         _destructive(destroy)
 	{}
 
-    /// Copy constructor
-	Property(const Property& p)
-        :
-        _bound(p._bound),
-        _uri(p._uri),
-		_flags(p._flags),
-        _destructive(p._destructive)
-	{}
-
 	/// accessor to the properties flags
 	const PropFlags& getFlags() const { return _flags; }
 
diff --git a/libcore/PropertyList.cpp b/libcore/PropertyList.cpp
index d3e7ce9..1d96c94 100644
--- a/libcore/PropertyList.cpp
+++ b/libcore/PropertyList.cpp
@@ -25,7 +25,7 @@
 #include "PropertyList.h"
 
 #include <utility> 
-#include <boost/bind.hpp> 
+#include <functional> 
 #include <boost/tuple/tuple.hpp>
 
 #include "Property.h" 
@@ -128,10 +128,10 @@ PropertyList::setFlags(const ObjectURI& uri, int setFlags, int clearFlags)
 void
 PropertyList::setFlagsAll(int setFlags, int clearFlags)
 {
-    for (const_iterator it = _props.begin(); it != _props.end(); ++it) {
-        PropFlags f = it->getFlags();
+    for (const auto& prop: _props) {
+        PropFlags f = prop.getFlags();
         f.set_flags(setFlags, clearFlags);
-        it->setFlags(f);
+        prop.setFlags(f);
     }
 }
 
@@ -146,7 +146,7 @@ PropertyList::getProperty(const ObjectURI& uri) const
     kcl.check(uri.name);
 #endif // GNASH_STATS_PROPERTY_LOOKUPS
 	iterator found = iterator_find(_props, uri, getVM(_owner));
-	if (found == _props.end()) return 0;
+	if (found == _props.end()) return nullptr;
 	return const_cast<Property*>(&(*found));
 }
 
@@ -173,12 +173,11 @@ PropertyList::visitKeys(KeyVisitor& visitor, PropertyTracker& donelist)
     const
 {
     // We should enumerate in order of creation, not lexicographically.
-	for (const_iterator i = _props.begin(),
-            ie = _props.end(); i != ie; ++i) {
+	for (const auto& prop : _props) {
 
-		if (i->getFlags().test<PropFlags::dontEnum>()) continue;
+		if (prop.getFlags().test<PropFlags::dontEnum>()) continue;
 
-        const ObjectURI& uri = i->uri();
+        const ObjectURI& uri = prop.uri();
 
 		if (donelist.insert(uri).second) {
 			visitor(uri);
@@ -190,9 +189,8 @@ void
 PropertyList::dump()
 {
     ObjectURI::Logger l(getStringTable(_owner));
-	for (const_iterator it=_props.begin(), itEnd=_props.end();
-            it != itEnd; ++it) {
-            log_debug("  %s: %s", l(it->uri()), it->getValue(_owner));
+	for (const auto& prop : _props) {
+            log_debug("  %s: %s", l(prop.uri()), prop.getValue(_owner));
 	}
 }
 
@@ -277,7 +275,7 @@ PropertyList::addDestructiveGetter(const ObjectURI& uri, as_function& getter,
 	}
 
 	// destructive getter doesn't need a setter
-	Property a(uri, &getter, 0, flagsIfMissing, true);
+	Property a(uri, &getter, nullptr, flagsIfMissing, true);
 
 	_props.push_back(a);
 
@@ -298,7 +296,7 @@ PropertyList::addDestructiveGetter(const ObjectURI& uri,
 	if (found != _props.end()) return false; 
 
 	// destructive getter doesn't need a setter
-	Property a(uri, getter, 0, flagsIfMissing, true);
+	Property a(uri, getter, nullptr, flagsIfMissing, true);
 	_props.push_back(a);
 
 #ifdef GNASH_DEBUG_PROPERTY
diff --git a/libcore/PropertyList.h b/libcore/PropertyList.h
index 23bba9d..7956adc 100644
--- a/libcore/PropertyList.h
+++ b/libcore/PropertyList.h
@@ -23,13 +23,13 @@
 #include <string> // for use within map 
 #include <cassert> // for inlines
 #include <utility> // for std::pair
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/ordered_index.hpp>
 #include <boost/multi_index/sequenced_index.hpp>
 #include <boost/multi_index/key_extractors.hpp>
 #include <boost/noncopyable.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 #include <algorithm>
 
 #include "Property.h" // for templated functions
@@ -150,12 +150,11 @@ public:
     template <class U, class V>
     void visitValues(V& visitor, U cmp = U()) const {
 
-        for (const_iterator it = _props.begin(), ie = _props.end();
-                it != ie; ++it) {
+        for (const auto& prop : _props) {
 
-            if (!cmp(*it)) continue;
-            as_value val = it->getValue(_owner);
-            if (!visitor.accept(it->uri(), val)) return;
+            if (!cmp(prop)) continue;
+            as_value val = prop.getValue(_owner);
+            if (!visitor.accept(prop.uri(), val)) return;
         }
     }
 
@@ -295,7 +294,7 @@ public:
     /// compiler to optimize it.
     void setReachable() const {
         std::for_each(_props.begin(), _props.end(),
-                boost::mem_fn(&Property::setReachable));
+                std::mem_fn(&Property::setReachable));
     }
 
 private:
diff --git a/libcore/RGBA.cpp b/libcore/RGBA.cpp
index fedefee..0b6b498 100644
--- a/libcore/RGBA.cpp
+++ b/libcore/RGBA.cpp
@@ -41,7 +41,7 @@ rgba
 colorFromHexString(const std::string& color)
 {
     std::stringstream ss(color);
-    boost::uint32_t hexnumber;
+    std::uint32_t hexnumber;
     
     if (!(ss >> std::hex >> hexnumber)) {
 	    log_error(_("Failed to convert string to RGBA value! This is a "
diff --git a/libcore/RGBA.h b/libcore/RGBA.h
index 06af1af..abe5c37 100644
--- a/libcore/RGBA.h
+++ b/libcore/RGBA.h
@@ -22,7 +22,7 @@
 #define GNASH_RGBA_H
 
 #include <string>
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 
 #include "dsodefs.h" // for DSOTEXPORT
 
@@ -39,7 +39,7 @@ public:
     /// Construct default RGBA value.
     //
     /// Default value is 0xffffffff (solid white).
-    rgba()
+    constexpr rgba()
         :
         m_r(255),
         m_g(255),
@@ -53,8 +53,8 @@ public:
     /// @param g Green
     /// @param b Blue
     /// @param a Alpha (transparency)
-    rgba(boost::uint8_t r, boost::uint8_t g, boost::uint8_t b, 
-            boost::uint8_t a)
+    rgba(std::uint8_t r, std::uint8_t g, std::uint8_t b,
+            std::uint8_t a)
         :
         m_r(r),
         m_g(g),
@@ -70,10 +70,10 @@ public:
     ///
     /// This function is meant to be used to
     /// parse ActionScript colors in numeric format.
-    void parseRGB(boost::uint32_t rgbCol) {
-        m_r = static_cast<boost::uint8_t>(rgbCol >> 16);
-        m_g = static_cast<boost::uint8_t>(rgbCol >> 8);
-        m_b = static_cast<boost::uint8_t>(rgbCol);
+    void parseRGB(std::uint32_t rgbCol) {
+        m_r = static_cast<std::uint8_t>(rgbCol >> 16);
+        m_g = static_cast<std::uint8_t>(rgbCol >> 8);
+        m_b = static_cast<std::uint8_t>(rgbCol);
     }
 
     /// Return a 32-bit unsigned integer as four packed R,G,B bytes.
@@ -83,7 +83,7 @@ public:
     ///
     /// This function is meant to be used to output ActionScript colors
     /// in numeric format.
-    boost::uint32_t toRGB() const {
+    std::uint32_t toRGB() const {
         return (m_r << 16) + (m_g << 8) + m_b;
     }
 
@@ -93,7 +93,7 @@ public:
     ///
     /// This function is meant to be used to output ActionScript colors
     /// in numeric format.
-    boost::uint32_t toRGBA() const {
+    std::uint32_t toRGBA() const {
         return toRGB() + (m_a << 24);
     }
 
@@ -110,7 +110,7 @@ public:
         return !(*this == o);
     }
 
-    boost::uint8_t m_r, m_g, m_b, m_a;
+    std::uint8_t m_r, m_g, m_b, m_a;
 
 };
 
diff --git a/libcore/RunResources.h b/libcore/RunResources.h
index 1c16cf3..52a5896 100644
--- a/libcore/RunResources.h
+++ b/libcore/RunResources.h
@@ -21,13 +21,23 @@
 #ifndef GNASH_RUN_INFO_H
 #define GNASH_RUN_INFO_H
 
+#include <memory>
 #include <string>
-#include <boost/shared_ptr.hpp>
-#include "StreamProvider.h"
-#include "Renderer.h"
-#include "sound_handler.h"
-#include "MediaHandler.h"
-#include "TagLoadersTable.h"
+#include <cassert>
+
+namespace gnash {
+    class Renderer;
+    class StreamProvider;
+    namespace SWF {
+        class TagLoadersTable;
+    }
+    namespace media {
+        class MediaHandler;
+    }
+    namespace sound {
+        class sound_handler;
+    }
+}
 
 namespace gnash {
 
@@ -53,7 +63,7 @@ public:
     /// Set the StreamProvider.
     //
     /// This can probably be changed during a run without ill effects.
-    void setStreamProvider(boost::shared_ptr<StreamProvider> sp) {
+    void setStreamProvider(std::shared_ptr<StreamProvider> sp) {
         _streamProvider = sp;
     }
 
@@ -75,7 +85,7 @@ public:
     //
     /// This is cached in various places, so changing it during a run will
     /// lead to unexpected behaviour.
-    void setSoundHandler(boost::shared_ptr<sound::sound_handler> s) {
+    void setSoundHandler(std::shared_ptr<sound::sound_handler> s) {
         _soundHandler = s;
     } 
 
@@ -87,7 +97,7 @@ public:
         return _soundHandler.get();
     }
 
-    void setMediaHandler(boost::shared_ptr<media::MediaHandler> s) {
+    void setMediaHandler(std::shared_ptr<media::MediaHandler> s) {
         _mediaHandler = s;
     }
 
@@ -95,7 +105,7 @@ public:
         return _mediaHandler.get();
     }
 
-    void setRenderer(boost::shared_ptr<Renderer> r) {
+    void setRenderer(std::shared_ptr<Renderer> r) {
         _renderer = r;
     }
 
@@ -108,7 +118,7 @@ public:
     /// This must be present before parsing.
     /// It is a pointer to const so that the same table can be shared between
     /// simultaneous runs if desired.
-    void setTagLoaders(boost::shared_ptr<const SWF::TagLoadersTable> loaders) {
+    void setTagLoaders(std::shared_ptr<const SWF::TagLoadersTable> loaders) {
         _tagLoaders = loaders;
     }
 
@@ -134,15 +144,15 @@ public:
 
 private:
 
-    boost::shared_ptr<StreamProvider> _streamProvider;
+    std::shared_ptr<StreamProvider> _streamProvider;
 
-    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;
 
-    boost::shared_ptr<Renderer> _renderer;
+    std::shared_ptr<Renderer> _renderer;
 
-    boost::shared_ptr<const SWF::TagLoadersTable> _tagLoaders;
+    std::shared_ptr<const SWF::TagLoadersTable> _tagLoaders;
 
     /// Whether to ue HW video decoding support, no value means disabled.
     /// The only currently supported values are: none or vaapi.
diff --git a/libcore/SWFCxForm.cpp b/libcore/SWFCxForm.cpp
index c07a7f5..2d8f906 100644
--- a/libcore/SWFCxForm.cpp
+++ b/libcore/SWFCxForm.cpp
@@ -56,24 +56,24 @@ SWFCxForm::transform(const rgba& in) const
 
 // transform the given color with our SWFCxForm.
 void
-SWFCxForm::transform(boost::uint8_t& r, boost::uint8_t& g, boost::uint8_t& b,
-        boost::uint8_t& a) const
+SWFCxForm::transform(std::uint8_t& r, std::uint8_t& g, std::uint8_t& b,
+        std::uint8_t& a) const
 {
     // force conversion to int16 first, kind of optimization.
-    boost::int16_t rt = r;
-    boost::int16_t gt = g;
-    boost::int16_t bt = b;
-    boost::int16_t at = a;
+    std::int16_t rt = r;
+    std::int16_t gt = g;
+    std::int16_t bt = b;
+    std::int16_t at = a;
     
     rt = (rt * ra >> 8) + rb;
     gt = (gt * ga >> 8) + gb;
     bt = (bt * ba >> 8) + bb;
     at = (at * aa >> 8) + ab;
 
-    r = clamp<boost::int16_t>(rt, 0, 255);
-    g = clamp<boost::int16_t>(gt, 0, 255);
-    b = clamp<boost::int16_t>(bt, 0, 255);
-    a = clamp<boost::int16_t>(at, 0, 255);
+    r = clamp<std::int16_t>(rt, 0, 255);
+    g = clamp<std::int16_t>(gt, 0, 255);
+    b = clamp<std::int16_t>(bt, 0, 255);
+    a = clamp<std::int16_t>(at, 0, 255);
 }
 
 std::ostream&
diff --git a/libcore/SWFCxForm.h b/libcore/SWFCxForm.h
index 5915dcd..74ccbae 100644
--- a/libcore/SWFCxForm.h
+++ b/libcore/SWFCxForm.h
@@ -21,9 +21,8 @@
 
 #include "dsodefs.h" // for DSOEXPORT
 
-#include <string>
 #include <iosfwd>
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 
 namespace gnash {
 	class rgba;
@@ -50,14 +49,14 @@ public:
     {
     }
 
-    boost::int16_t ra; // RedMultTerm,   8.8 fixed point
-    boost::int16_t ga; // GreenMultTerm  8.8 fixed point
-    boost::int16_t ba; // BlueMultTerm   8.8 fixed point
-    boost::int16_t aa; // AlphaMultTerm  8.8 fixed point
-    boost::int16_t rb; // RedAddTerm,    16 bit integer(no fraction)
-    boost::int16_t gb; // GreenAddTerm   16 bit integer(no fraction)
-    boost::int16_t bb; // BlueAddTerm    16 bit integer(no fraction)
-    boost::int16_t ab; // AlphaAddTerm   16 bit integer(no fraction)
+    std::int16_t ra; // RedMultTerm,   8.8 fixed point
+    std::int16_t ga; // GreenMultTerm  8.8 fixed point
+    std::int16_t ba; // BlueMultTerm   8.8 fixed point
+    std::int16_t aa; // AlphaMultTerm  8.8 fixed point
+    std::int16_t rb; // RedAddTerm,    16 bit integer(no fraction)
+    std::int16_t gb; // GreenAddTerm   16 bit integer(no fraction)
+    std::int16_t bb; // BlueAddTerm    16 bit integer(no fraction)
+    std::int16_t ab; // AlphaAddTerm   16 bit integer(no fraction)
     
     /// Concatenate SWFCxForm c onto ours. 
     //
@@ -70,8 +69,8 @@ public:
     rgba transform(const rgba& in) const;
     
     /// Transform the given color.
-    void transform(boost::uint8_t& r, boost::uint8_t& g, boost::uint8_t& b,
-            boost::uint8_t& a) const;    
+    void transform(std::uint8_t& r, std::uint8_t& g, std::uint8_t& b,
+            std::uint8_t& a) const;
     
 };
 
diff --git a/libcore/SWFMatrix.cpp b/libcore/SWFMatrix.cpp
index 220c9ef..c80f9c0 100644
--- a/libcore/SWFMatrix.cpp
+++ b/libcore/SWFMatrix.cpp
@@ -79,17 +79,17 @@ rotationY(const SWFMatrix& m)
     return std::atan2(-c, d);
 }
 
-inline boost::int32_t
+inline std::int32_t
 toFixed16(double a)
 {
     return truncateWithFactor<65536>(a);
 }
 
-inline boost::int32_t
-multiplyFixed16(boost::int32_t a, boost::int32_t b)
+inline std::int32_t
+multiplyFixed16(std::int32_t a, std::int32_t b)
 {
-    return (static_cast<boost::int64_t>(a) *
-            static_cast<boost::int64_t>(b) + 0x8000) >> 16;
+    return (static_cast<std::int64_t>(a) *
+            static_cast<std::int64_t>(b) + 0x8000) >> 16;
 
 }
 
@@ -98,28 +98,28 @@ multiplyFixed16(boost::int32_t a, boost::int32_t b)
 void
 SWFMatrix::transform(geometry::Point2d& p) const
 {
-    boost::int32_t t0 = multiplyFixed16(_a, p.x) + multiplyFixed16(_c, p.y) + _tx;
-    boost::int32_t t1 = multiplyFixed16(_b, p.x) + multiplyFixed16(_d, p.y) + _ty;
+    std::int32_t t0 = multiplyFixed16(_a, p.x) + multiplyFixed16(_c, p.y) + _tx;
+    std::int32_t t1 = multiplyFixed16(_b, p.x) + multiplyFixed16(_d, p.y) + _ty;
     p.x = t0;
     p.y = t1;
 }
 
 void
-SWFMatrix::transform(boost::int32_t& x, boost::int32_t& y) const
+SWFMatrix::transform(std::int32_t& x, std::int32_t& y) const
 {
-    const boost::int32_t t0 = multiplyFixed16(_a, x) + multiplyFixed16(_c, y) + _tx;
-    const boost::int32_t t1 = multiplyFixed16(_b,x) + multiplyFixed16(_d,  y) + _ty;
+    const std::int32_t t0 = multiplyFixed16(_a, x) + multiplyFixed16(_c, y) + _tx;
+    const std::int32_t t1 = multiplyFixed16(_b,x) + multiplyFixed16(_d,  y) + _ty;
     x = t0;
     y = t1;
 }
 
 void
-SWFMatrix::transform(geometry::Range2d<boost::int32_t>& r) const
+SWFMatrix::transform(geometry::Range2d<std::int32_t>& r) const
 {
-    const boost::int32_t xmin = r.getMinX();
-    const boost::int32_t xmax = r.getMaxX();
-    const boost::int32_t ymin = r.getMinY();
-    const boost::int32_t ymax = r.getMaxY();
+    const std::int32_t xmin = r.getMinX();
+    const std::int32_t xmax = r.getMaxX();
+    const std::int32_t ymin = r.getMinY();
+    const std::int32_t ymax = r.getMaxY();
 
     point p0(xmin, ymin);
     point p1(xmin, ymax);
@@ -262,10 +262,10 @@ SWFMatrix::transform(SWFRect& r) const
 {
     if (r.is_null()) return;
 
-    const boost::int32_t x1 = r.get_x_min();
-    const boost::int32_t y1 = r.get_y_min();
-    const boost::int32_t x2 = r.get_x_max();
-    const boost::int32_t y2 = r.get_y_max();
+    const std::int32_t x1 = r.get_x_min();
+    const std::int32_t y1 = r.get_y_min();
+    const std::int32_t x2 = r.get_x_max();
+    const std::int32_t y2 = r.get_y_max();
 
     point p0(x1, y1);
     point p1(x2, y1);
@@ -287,7 +287,7 @@ SWFMatrix::transform(SWFRect& r) const
 SWFMatrix&
 SWFMatrix::invert()
 {
-    const boost::int64_t det = determinant();
+    const std::int64_t det = determinant();
 
     if (det == 0) {
         set_identity();
@@ -296,12 +296,12 @@ SWFMatrix::invert()
 
     const double dn = 65536.0 * 65536.0 / det;
     
-    const boost::int32_t t0 = (boost::int32_t)(d() * dn);
-    _d = (boost::int32_t)(a() * dn);
-    _c = (boost::int32_t)(-c() * dn);
-    _b = (boost::int32_t)(-b() * dn);
+    const std::int32_t t0 = (std::int32_t)(d() * dn);
+    _d = (std::int32_t)(a() * dn);
+    _c = (std::int32_t)(-c() * dn);
+    _b = (std::int32_t)(-b() * dn);
 
-    const boost::int32_t t4 = -(multiplyFixed16(_tx, t0) + multiplyFixed16(_ty, _c));
+    const std::int32_t t4 = -(multiplyFixed16(_tx, t0) + multiplyFixed16(_ty, _c));
     _ty = -(multiplyFixed16(_tx, _b) + multiplyFixed16(_ty, _d));
 
     _a = t0;
@@ -333,7 +333,7 @@ SWFMatrix::get_rotation() const
 }
 
 // private
-boost::int64_t
+std::int64_t
 SWFMatrix::determinant() const
 {
     // | _a	_c	_tx |
@@ -343,7 +343,7 @@ SWFMatrix::determinant() const
     // Det(T) = ( (_a * _d * 1 ) + (_c * _ty * 0) + (_tx * _b *  0) ) -
     //          ( (0  * _d * _tx) + (0  * _ty * _a) + (1 * _c * _b) )
     //        = _a * _d - _b * _c
-    return (boost::int64_t)a() * d() - (boost::int64_t)b() * c();
+    return (std::int64_t)a() * d() - (std::int64_t)b() * c();
 }
 
 std::ostream&
diff --git a/libcore/SWFMatrix.h b/libcore/SWFMatrix.h
index 3747b70..d567fa5 100644
--- a/libcore/SWFMatrix.h
+++ b/libcore/SWFMatrix.h
@@ -28,7 +28,7 @@
 #include "dsodefs.h" // for DSOEXPORT
 
 #include <iosfwd> 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 // Forward declarations
 namespace gnash {
@@ -55,7 +55,7 @@ class DSOEXPORT SWFMatrix
 public:
 
     /// Construct an identity SWFMatrix
-    SWFMatrix()
+    constexpr SWFMatrix()
         :
         _a(65536),
         _b(0),
@@ -76,27 +76,27 @@ public:
         _ty(y)
     {}
 
-    boost::int32_t a() const {
+    std::int32_t a() const {
         return _a;
     }
 
-    boost::int32_t b() const {
+    std::int32_t b() const {
         return _b;
     }
 
-    boost::int32_t c() const {
+    std::int32_t c() const {
         return _c;
     }
 
-    boost::int32_t d() const {
+    std::int32_t d() const {
         return _d;
     }
 
-    boost::int32_t tx() const {
+    std::int32_t tx() const {
         return _tx;
     }
 
-    boost::int32_t ty() const {
+    std::int32_t ty() const {
         return _ty;
     }
 
@@ -159,7 +159,7 @@ public:
     void transform(geometry::Point2d& p) const;
 
     /// Transform the given point by our SWFMatrix.
-    void transform(boost::int32_t& x, boost::int32_t& y) const;
+    void transform(std::int32_t& x, std::int32_t& y) const;
     
     /// Transform point 'p' by our SWFMatrix. 
     //
@@ -171,7 +171,7 @@ public:
     //
     /// NULL and WORLD ranges are untouched.
     ///
-    void transform(geometry::Range2d<boost::int32_t>& r) const;
+    void transform(geometry::Range2d<std::int32_t>& r) const;
 
     void transform(SWFRect& r) const;
     
@@ -203,25 +203,25 @@ public:
 private: 
 
     /// Return the determinant of this SWFMatrix in 32.32 fixed point format.
-    boost::int64_t  determinant() const;
+    std::int64_t  determinant() const;
 
     /// Xscale, 16.16 fixed point. xx in swfdec. 'a' in AS Matrix.
-    boost::int32_t _a; 
+    std::int32_t _a;
 
     /// Xshear, 16.16 fixed point. yx in swfdec. 'b' in AS Matrix.
-    boost::int32_t _b;
+    std::int32_t _b;
 
     /// Yshear, 16.16 fixed point. xy in swfdec. 'c' in AS Matrix.
-    boost::int32_t _c;
+    std::int32_t _c;
 
     /// Yscale, 16.16 fixed point. yy in swfdec. 'd' in AS Matrix.
-    boost::int32_t _d; 
+    std::int32_t _d;
 
     /// Xtranslation, TWIPS. x0 in swfdec. '_tx' in AS Matrix.
-    boost::int32_t _tx; 
+    std::int32_t _tx;
 
     /// Ytranslation, TWIPS. y0 in swfdec. '_ty' in AS Matrix.
-    boost::int32_t _ty; 
+    std::int32_t _ty;
              
 
 }; //end of SWFMatrix
diff --git a/libcore/SWFMovie.cpp b/libcore/SWFMovie.cpp
index e97a540..aa9399b 100644
--- a/libcore/SWFMovie.cpp
+++ b/libcore/SWFMovie.cpp
@@ -85,15 +85,15 @@ SWFMovie::advance()
 SWF::DefinitionTag*
 SWFMovie::exportedCharacter(const std::string& symbol)
 {
-    const boost::uint16_t id = _def->exportID(symbol);
-    if (!id) return 0;
+    const std::uint16_t id = _def->exportID(symbol);
+    if (!id) return nullptr;
     Characters::iterator it = _characters.find(id);
-    if (it == _characters.end()) return 0;
+    if (it == _characters.end()) return nullptr;
     return _def->getDefinitionTag(id);
 }
 
 void
-SWFMovie::addCharacter(boost::uint16_t id)
+SWFMovie::addCharacter(std::uint16_t id)
 {
     // If a character is already known, we don't want to mark it uninitialized
     // again.
@@ -101,7 +101,7 @@ SWFMovie::addCharacter(boost::uint16_t id)
 }
 
 bool
-SWFMovie::initializeCharacter(boost::uint16_t cid)
+SWFMovie::initializeCharacter(std::uint16_t cid)
 {
     Characters::iterator it = _characters.find(cid);
     if (it == _characters.end()) {
diff --git a/libcore/SWFMovie.h b/libcore/SWFMovie.h
index d7d6ce8..995d682 100644
--- a/libcore/SWFMovie.h
+++ b/libcore/SWFMovie.h
@@ -51,7 +51,7 @@ class SWFMovie : public Movie
 {
 
     /// A container to track known characters and whether they are initialized.
-    typedef std::map<boost::uint16_t, bool> Characters;
+    typedef std::map<std::uint16_t, bool> Characters;
 
 public:
 
@@ -84,7 +84,7 @@ public:
 	/// and then call MovieClip::construct
 	///
 	/// It's intended to be called by movie_root::setLevel().
-    void construct(as_object* init = 0);
+    void construct(as_object* init = nullptr);
 
     /// Get the URL of the SWFMovie's definition.
     const std::string& url() const {
@@ -117,7 +117,7 @@ public:
     /// If a duplicated character is added, it will not be marked
     /// uninitialized, as SWF::DoInitAction tags are only executed once
     /// for each id.
-    void addCharacter(boost::uint16_t id);
+    void addCharacter(std::uint16_t id);
 
     /// Attempt to mark a character as initialized.
     //
@@ -130,7 +130,7 @@ public:
     ///                or has not yet been placed on stage).
     ///             2. The character has already been initialized.
     ///             true if the character was marked initialized.
-	bool initializeCharacter(boost::uint16_t id);
+	bool initializeCharacter(std::uint16_t id);
 
     const movie_definition* definition() const {
         return _def.get();
diff --git a/libcore/SWFRect.cpp b/libcore/SWFRect.cpp
index 58cf869..dbe34dc 100644
--- a/libcore/SWFRect.cpp
+++ b/libcore/SWFRect.cpp
@@ -27,18 +27,14 @@
 
 namespace gnash {
 
-const boost::int32_t SWFRect::rectNull;
-const boost::int32_t SWFRect::rectMax;
-
-
 // Set ourself to bound a rectangle that has been transformed by m.  
 void
 SWFRect::enclose_transformed_rect(const SWFMatrix& m, const SWFRect& r)
 {   
-    boost::int32_t  x1 = r.get_x_min();
-    boost::int32_t  y1 = r.get_y_min();
-    boost::int32_t  x2 = r.get_x_max();
-    boost::int32_t  y2 = r.get_y_max();
+    std::int32_t  x1 = r.get_x_min();
+    std::int32_t  y1 = r.get_y_min();
+    std::int32_t  x2 = r.get_x_max();
+    std::int32_t  y2 = r.get_y_max();
 
     point  p0(x1, y1);
     point  p1(x2, y1);
@@ -81,10 +77,10 @@ SWFRect::expand_to_transformed_rect(const SWFMatrix& m, const SWFRect& r)
          return;
     }
 
-    const boost::int32_t x1 = r.get_x_min();
-    const boost::int32_t y1 = r.get_y_min();
-    const boost::int32_t x2 = r.get_x_max();
-    const boost::int32_t y2 = r.get_y_max();
+    const std::int32_t x1 = r.get_x_min();
+    const std::int32_t y1 = r.get_y_min();
+    const std::int32_t x2 = r.get_x_max();
+    const std::int32_t y2 = r.get_y_max();
 
     point p0(x1, y1);
     point p1(x2, y1);
@@ -124,8 +120,8 @@ void
 SWFRect::clamp(point& p) const
 {
     assert( !is_null() );
-    p.x = gnash::clamp<boost::int32_t>(p.x, _xMin, _xMax);
-    p.y = gnash::clamp<boost::int32_t>(p.y, _yMin, _yMax);
+    p.x = gnash::clamp<std::int32_t>(p.x, _xMin, _xMax);
+    p.y = gnash::clamp<std::int32_t>(p.y, _yMin, _yMax);
 }
 
 std::string
diff --git a/libcore/SWFRect.h b/libcore/SWFRect.h
index 8c814bf..11f552b 100644
--- a/libcore/SWFRect.h
+++ b/libcore/SWFRect.h
@@ -23,7 +23,7 @@
 #include <string>
 #include <cassert> 
 #include <ostream> 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "dsodefs.h"
 #include "Range2d.h"
@@ -46,14 +46,14 @@ class SWFRect
 
 public:
 
-    static const boost::int32_t rectNull = 0x80000000;
-    static const boost::int32_t rectMax = 0x7fffffff;
+    constexpr static std::int32_t rectNull = 0x80000000;
+    constexpr static std::int32_t rectMax = 0x7fffffff;
     
     /// Ouput operator
     friend std::ostream& operator<< (std::ostream& os, const SWFRect& SWFRect);
 
     /// Construct a NULL rectangle
-    SWFRect()
+    constexpr SWFRect()
         :
        _xMin(rectNull),
        _yMin(rectNull),
@@ -62,7 +62,7 @@ public:
     {}
 
     /// Construct a rectangle with given coordinates
-    SWFRect(int xmin, int ymin, int xmax, int ymax)
+    constexpr SWFRect(int xmin, int ymin, int xmax, int ymax)
         :
         _xMin(xmin),
         _yMin(ymin),
@@ -100,47 +100,47 @@ public:
     }
 
     /// Return width of this rectangle in TWIPS
-    boost::int32_t width() const
+    std::int32_t width() const
     {
         return _xMax - _xMin;
     }
 
     /// Return height of this rectangle in TWIPS
-    boost::int32_t height() const
+    std::int32_t height() const
     {
         return _yMax - _yMin;
     }
 
     /// Get the x coordinate of the left-up corner.
-    boost::int32_t get_x_min() const
+    std::int32_t get_x_min() const
     {
         assert(!is_null());
         return _xMin;
     }
 
     /// Get the x coordinate of the right-down corner.
-    boost::int32_t get_x_max() const
+    std::int32_t get_x_max() const
     {
         assert(!is_null());
         return _xMax;
     }
 
     /// Get the y coordinate of the left-up corner.
-    boost::int32_t get_y_min() const
+    std::int32_t get_y_min() const
     {
         assert(!is_null());
         return _yMin;
     }
 
     /// Get the y coordinate of the right-down corner.
-    boost::int32_t get_y_max() const
+    std::int32_t get_y_max() const
     {
         assert(!is_null());
         return _yMax;
     }
     
     /// Return true if the given point is inside this SWFRect.
-    bool point_test(boost::int32_t x, boost::int32_t y) const
+    bool point_test(std::int32_t x, std::int32_t y) const
     {
         if (is_null()) return false;
         
@@ -151,15 +151,15 @@ public:
     }
 
     /// Set ourself to bound the given point
-    void set_to_point(boost::int32_t x, boost::int32_t y)
+    void set_to_point(std::int32_t x, std::int32_t y)
     {
         _xMin = _xMax = x;
         _yMin = _yMax = y;
     }
 
     
-    void set_to_rect(boost::int32_t x1, boost::int32_t y1, boost::int32_t x2,
-            boost::int32_t y2)
+    void set_to_rect(std::int32_t x1, std::int32_t y1, std::int32_t x2,
+            std::int32_t y2)
     {
         _xMin = x1;
         _yMin = y1;
@@ -168,7 +168,7 @@ public:
     }
     
     /// Expand this rectangle to enclose the given point.
-    void expand_to_point(boost::int32_t x, boost::int32_t y)
+    void expand_to_point(std::int32_t x, std::int32_t y)
     {
         if (is_null()) {
             set_to_point(x, y);
@@ -183,8 +183,8 @@ public:
     void enclose_transformed_rect(const SWFMatrix& m, const SWFRect& r);
     
     /// Expand this rectangle to enclose the given circle.
-    void expand_to_circle(boost::int32_t x, boost::int32_t y,
-            boost::int32_t radius)
+    void expand_to_circle(std::int32_t x, std::int32_t y,
+            std::int32_t radius)
     {
         // I know it's easy to make code work for minus radius.
         // would do that untill I see the requirement for a SWF RECTANGLE.
@@ -219,20 +219,20 @@ public:
 
     /// Construct and return a Range2d object.
     // TODO: deprecate this.
-    geometry::Range2d<boost::int32_t> getRange() const
+    geometry::Range2d<std::int32_t> getRange() const
     {
         if (is_null())
         {
            // Range2d has a differnt idea about what is a null SWFRect.
-           return geometry::Range2d<boost::int32_t>(geometry::nullRange); 
+           return geometry::Range2d<std::int32_t>(geometry::nullRange);
         }
         else if( is_world() ) 
         {
-            return geometry::Range2d<boost::int32_t>(geometry::worldRange);
+            return geometry::Range2d<std::int32_t>(geometry::worldRange);
         }
         else
         {
-            return geometry::Range2d<boost::int32_t>(_xMin, _yMin,
+            return geometry::Range2d<std::int32_t>(_xMin, _yMin,
                     _xMax, _yMax);
         }
     }
@@ -243,7 +243,7 @@ public:
 private:
 
     // make ourself to enclose the given point.
-    void expand_to(boost::int32_t x, boost::int32_t y)
+    void expand_to(std::int32_t x, std::int32_t y)
     {
         _xMin = std::min(_xMin, x);
         _yMin = std::min(_yMin, y);
@@ -251,10 +251,10 @@ private:
         _yMax = std::max(_yMax, y);
     }
 
-    boost::int32_t _xMin; // TWIPS
-    boost::int32_t _yMin; // TWIPS
-    boost::int32_t _xMax; // TWIPS
-    boost::int32_t _yMax; // TWIPS
+    std::int32_t _xMin; // TWIPS
+    std::int32_t _yMin; // TWIPS
+    std::int32_t _xMax; // TWIPS
+    std::int32_t _yMax; // TWIPS
 };
 
 
diff --git a/libcore/SWFStream.cpp b/libcore/SWFStream.cpp
index 2767fe2..6001bf7 100644
--- a/libcore/SWFStream.cpp
+++ b/libcore/SWFStream.cpp
@@ -28,7 +28,6 @@
 
 #include <cstring>
 #include <climits>
-#include <boost/static_assert.hpp>
 
 //#define USE_TU_FILE_BYTESWAPPING 1
 
@@ -118,7 +117,7 @@ unsigned SWFStream::read_uint(unsigned short bitcount)
     {
         typedef unsigned char byte;
 
-        boost::uint32_t value = 0;
+        std::uint32_t value = 0;
 
         if (m_unused_bits) // Consume all the unused bits.
         {
@@ -191,13 +190,13 @@ unsigned SWFStream::read_uint(unsigned short bitcount)
 int
 SWFStream::read_sint(unsigned short bitcount)
 {
-    //assert(bitcount <= 32); // already asserted in read_uint
+    assert(bitcount > 0);
 
-    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))) {
-        value |= -1 << bitcount;
+        value |= static_cast<std::uint32_t>(-1) << bitcount;
     }
 
 //        IF_DEBUG(log_debug("SWFStream::read_sint(%d) == %d\n", bitcount, value)));
@@ -239,13 +238,6 @@ float    SWFStream::read_short_sfixed()
     return read_s16() / 256.0f;
 }
 
-/// Read a 16bit (1:sign 5:exp 10:mantissa) floating point value
-float    SWFStream::read_short_float()
-{
-    // read_s16 will align
-    return static_cast<float> ( read_s16() );
-}
-
 // Read a little-endian 32-bit float from p
 // and return it as a host-endian float.
 static float
@@ -254,16 +246,16 @@ convert_float_little(const void *p)
     // Hairy union for endian detection and munging
     union {
         float    f;
-        boost::uint32_t i;
+        std::uint32_t i;
         struct {    // for endian detection
-            boost::uint16_t s0;
-            boost::uint16_t s1;
+            std::uint16_t s0;
+            std::uint16_t s1;
         } s;
         struct {    // for byte-swapping
-            boost::uint8_t c0;
-            boost::uint8_t c1;
-            boost::uint8_t c2;
-            boost::uint8_t c3;
+            std::uint8_t c0;
+            std::uint8_t c1;
+            std::uint8_t c2;
+            std::uint8_t c3;
         } c;
     } u;
 
@@ -274,7 +266,7 @@ convert_float_little(const void *p)
         break;
     case 0x3f80:    // big-endian host
         {
-        const boost::uint8_t *cp = (const boost::uint8_t *) p;
+        const std::uint8_t *cp = (const std::uint8_t *) p;
         u.c.c0 = cp[3];
         u.c.c1 = cp[2];
         u.c.c2 = cp[1];
@@ -312,7 +304,7 @@ double SWFStream::read_d64()
     const unsigned short dataLength = 8;
     double d = 0;
 
-    BOOST_STATIC_ASSERT(sizeof(double) == dataLength) __attribute__((unused));
+    static_assert(sizeof(double) == dataLength, "double must be 8 bytes");
 
     // Should align:
     if (read(reinterpret_cast<char*>(&d), dataLength) < dataLength)
@@ -324,20 +316,20 @@ double SWFStream::read_d64()
 
 }
 
-boost::uint8_t    SWFStream::read_u8()
+std::uint8_t    SWFStream::read_u8()
 {
     align();
     return m_input->read_byte();
 }
 
-boost::int8_t
+std::int8_t
 SWFStream::read_s8()
 {
     // read_u8 will align
     return read_u8();
 }
 
-boost::uint16_t SWFStream::read_u16()
+std::uint16_t SWFStream::read_u16()
 {
 #ifdef USE_TU_FILE_BYTESWAPPING 
     align();
@@ -353,26 +345,26 @@ boost::uint16_t SWFStream::read_u16()
         throw ParserException(_("Unexpected end of stream while reading"));
     }
     
-    boost::uint32_t result = buf[0];
+    std::uint32_t result = buf[0];
     result |= (buf[1] << 8);
 
     return result;
 #endif
 }
 
-boost::int16_t SWFStream::read_s16()
+std::int16_t SWFStream::read_s16()
 {
     // read_u16 will align
     return read_u16();
 }
 
-boost::uint32_t    SWFStream::read_u32()
+std::uint32_t    SWFStream::read_u32()
 {
 #ifdef USE_TU_FILE_BYTESWAPPING 
     align();
     return m_input->read_le32();
 #else
-    using boost::uint32_t;
+    using std::uint32_t;
 
     const unsigned short dataLength = 4;
 
@@ -393,7 +385,7 @@ boost::uint32_t    SWFStream::read_u32()
 #endif
 }
 
-boost::int32_t    SWFStream::read_s32()
+std::int32_t    SWFStream::read_s32()
 {
     // read_u32 will align
     return read_u32();
diff --git a/libcore/SWFStream.h b/libcore/SWFStream.h
index a89eb6c..19c8b5f 100644
--- a/libcore/SWFStream.h
+++ b/libcore/SWFStream.h
@@ -27,7 +27,7 @@
 #include <string>
 #include <sstream>
 #include <vector> // for composition
-#include <boost/cstdint.hpp> // for boost::?int??_t 
+#include <cstdint> // for boost::?int??_t
 
 // Define the following macro if you want to want Gnash parser
 // to assume the underlying SWF is well-formed. It would make
@@ -111,12 +111,6 @@ public:
 	///
 	float	read_short_sfixed();
 
-	/// Read a 16bit (1:sign 5:exp 10:mantissa) floating point value
-	//
-	/// aligned read
-	///
-	float	read_short_float();
-
 	/// Read a 32bit (1:sign 8:exp 23:mantissa) floating point value
 	//
 	/// aligned read
@@ -154,38 +148,38 @@ public:
 	//
 	/// aligned read
 	///
-	boost::uint8_t  read_u8();
+	std::uint8_t  read_u8();
 
 	/// Read a aligned signed 8-bit value from the stream.		
 	//
 	/// aligned read
 	///
-    boost::int8_t read_s8();
+    std::int8_t read_s8();
 
 	/// Read a aligned unsigned 16-bit value from the stream.		
 	//
 	/// aligned read
 	///
-	boost::uint16_t read_u16();
+	std::uint16_t read_u16();
 
 	/// Read a aligned signed 16-bit value from the stream.		
 	//
 	/// aligned read
 	///
-	boost::int16_t  read_s16();
+	std::int16_t  read_s16();
 
 	/// Read a aligned unsigned 32-bit value from the stream.		
 	//
 	/// aligned read
 	///
-	boost::uint32_t read_u32();
+	std::uint32_t read_u32();
 
 	/// \brief
 	/// Read a aligned signed 32-bit value from the stream.		
 	//
 	/// aligned read
 	///
-	boost::int32_t  read_s32();
+	std::int32_t  read_s32();
 
 	/// \brief
 	/// Read a variable length unsigned 32-bit value from the stream.
@@ -194,10 +188,10 @@ public:
 	//
 	/// aligned read
 	///
-	boost::uint32_t read_V32()
+	std::uint32_t read_V32()
 	{
         ensureBytes(1);
-		boost::uint32_t res = read_u8();
+		std::uint32_t res = read_u8();
 		if (!(res & 0x00000080)) return res;
         
         ensureBytes(1);
@@ -421,8 +415,8 @@ public:
 private:
 
 	IOChannel*	m_input;
-	boost::uint8_t	m_current_byte;
-	boost::uint8_t	m_unused_bits;
+	std::uint8_t	m_current_byte;
+	std::uint8_t	m_unused_bits;
 
 	typedef std::pair<unsigned long,unsigned long> TagBoundaries;
 	// position of start and end of tag
diff --git a/libcore/Shape.cpp b/libcore/Shape.cpp
index b92ae9f..cfb1c3b 100644
--- a/libcore/Shape.cpp
+++ b/libcore/Shape.cpp
@@ -24,7 +24,7 @@
 namespace gnash {
 
 bool
-Shape::pointInShape(boost::int32_t x, boost::int32_t y) const
+Shape::pointInShape(std::int32_t x, std::int32_t y) const
 {
     SWFMatrix wm = getWorldMatrix(*this);
     wm.invert();
@@ -41,15 +41,8 @@ Shape::pointInShape(boost::int32_t x, boost::int32_t y) const
     //       in DrawingApiTest (kind of a fill-leakage making
     //       the collision detection find you inside a self-crossing
     //       shape).
-    if (_def) {
-        if (!_def->bounds().point_test(lp.x, lp.y)) return false;
-        return _def->pointTestLocal(lp.x, lp.y, wm);
-    }
-    assert(_shape.get());
-    
-    if (!_shape->getBounds().point_test(lp.x, lp.y)) return false;
-    return _shape->pointTestLocal(lp.x, lp.y, wm);
-
+    if (!_def->bounds().point_test(lp.x, lp.y)) return false;
+    return _def->pointTestLocal(lp.x, lp.y, wm);
 }
 
 void  
@@ -57,8 +50,7 @@ Shape::display(Renderer& renderer, const Transform& base)
 {
     const Transform xform = base * transform();
 
-    if (_def) _def->display(renderer, xform);
-    else _shape->display(renderer, xform);
+    _def->display(renderer, xform);
     clear_invalidated();
 }
 
diff --git a/libcore/Shape.h b/libcore/Shape.h
index 9fa39fc..dfaf84b 100644
--- a/libcore/Shape.h
+++ b/libcore/Shape.h
@@ -26,7 +26,6 @@
 
 #include <boost/intrusive_ptr.hpp>
 #include <cassert>
-#include <boost/shared_ptr.hpp>
 
 namespace gnash {
 
@@ -37,18 +36,7 @@ namespace gnash {
 /// SWF::DefinitionTag. A dynamic Shape object has a DynamicShape.
 class Shape : public DisplayObject
 {
-
 public:
-
-    Shape(movie_root& mr, as_object* object, boost::shared_ptr<DynamicShape> sh,
-            DisplayObject* parent)
-        :
-        DisplayObject(mr, object, parent),
-        _shape(sh)
-    {
-        assert(_shape.get());
-    }
-
 	Shape(movie_root& mr, as_object* object, const SWF::DefineShapeTag* def,
             DisplayObject* parent)
 		:
@@ -61,17 +49,15 @@ public:
 	virtual void display(Renderer& renderer, const Transform& xform);
 
     virtual SWFRect getBounds() const {
-        return _def ? _def->bounds() : _shape->getBounds();
+        return _def->bounds();
     }
     
-    virtual bool pointInShape(boost::int32_t x, boost::int32_t y) const;
+    virtual bool pointInShape(std::int32_t x, std::int32_t y) const;
 
 private:
 	
     const boost::intrusive_ptr<const SWF::DefineShapeTag> _def;
 
-    boost::shared_ptr<DynamicShape> _shape;
-
 };
 
 
diff --git a/libcore/StaticText.cpp b/libcore/StaticText.cpp
index badd1b9..147b74a 100644
--- a/libcore/StaticText.cpp
+++ b/libcore/StaticText.cpp
@@ -35,18 +35,18 @@ StaticText::getStaticText(std::vector<const SWF::TextRecord*>& to,
         return this;
     }
     
-    return 0;
+    return nullptr;
 }
 
 void
-StaticText::setSelectionColor(boost::uint32_t color)
+StaticText::setSelectionColor(std::uint32_t color)
 {
     // Drop any alpha value
     _selectionColor.parseRGB(color & 0xffffff);
 }
 
 bool
-StaticText::pointInShape(boost::int32_t x, boost::int32_t y) const
+StaticText::pointInShape(std::int32_t x, std::int32_t y) const
 {
     // TODO: check actual point in shape, as tested 
     //       in misc-ming.all/DefineTextTest.swf
diff --git a/libcore/StaticText.h b/libcore/StaticText.h
index f392a73..cba7729 100644
--- a/libcore/StaticText.h
+++ b/libcore/StaticText.h
@@ -85,13 +85,13 @@ public:
         return _selectedText;
     }
 
-    void setSelectionColor(boost::uint32_t color);
+    void setSelectionColor(std::uint32_t color);
 
     virtual SWFRect getBounds() const {
         return _def->bounds();
     }
 
-    virtual bool pointInShape(boost::int32_t x, boost::int32_t y) const;
+    virtual bool pointInShape(std::int32_t x, std::int32_t y) const;
 
     const rgba& selectionColor() const {
         return _selectionColor;
diff --git a/libcore/SystemClock.cpp b/libcore/SystemClock.cpp
index 6714b06..8a949f0 100644
--- a/libcore/SystemClock.cpp
+++ b/libcore/SystemClock.cpp
@@ -22,13 +22,13 @@
 
 #include "ClockTime.h" // for getting system time
 
-#include <boost/cstdint.hpp> // for boost::uint64_t typedef
+#include <cstdint> // for std::uint64_t typedef
 
 namespace gnash {
 
 namespace {
 
-boost::uint64_t
+std::uint64_t
 fetchSystemTime() 
 {
     // ClockTime::getTicks always returns milliseconds
diff --git a/libcore/SystemClock.h b/libcore/SystemClock.h
index 7ba7fb0..9934fbf 100644
--- a/libcore/SystemClock.h
+++ b/libcore/SystemClock.h
@@ -22,7 +22,7 @@
 
 #include "VirtualClock.h" // for inheritance
 
-#include <boost/cstdint.hpp> // for boost::uint64_t typedef
+#include <cstdint> // for std::uint64_t typedef
 #include "dsodefs.h"
 
 namespace gnash
@@ -49,7 +49,7 @@ public:
 private:
 
     /// System time at time of start
-    boost::uint64_t _startTime;
+    std::uint64_t _startTime;
 };
 
 
diff --git a/libcore/TextField.cpp b/libcore/TextField.cpp
index e7ec6cc..6ff6e54 100644
--- a/libcore/TextField.cpp
+++ b/libcore/TextField.cpp
@@ -36,9 +36,7 @@
 #include <cctype>
 #include <utility>
 #include <map>
-#include <boost/assign/list_of.hpp>
-#include <boost/bind.hpp>
-#include <boost/tuple/tuple.hpp>
+#include <functional>
 
 #include "utf8.h"
 #include "log.h"
@@ -89,7 +87,7 @@ TextField::TextField(as_object* object, DisplayObject* parent,
     _borderColor(0,0,0,255),
     _textColor(def.color()),
     _alignment(def.alignment()),
-    _font(0),
+    _font(nullptr),
     m_cursor(0u),
     _glyphcount(0u),
     _scroll(0u),
@@ -145,7 +143,7 @@ TextField::TextField(as_object* object, DisplayObject* parent,
 }
 
 TextField::TextField(as_object* object, DisplayObject* parent,
-        const SWFRect& bounds)
+        SWFRect bounds)
     :
     InteractiveObject(object, parent),
     _url(""),
@@ -156,7 +154,7 @@ TextField::TextField(as_object* object, DisplayObject* parent,
     _borderColor(0, 0, 0, 255),
     _textColor(0, 0, 0, 255),
     _alignment(ALIGN_LEFT),
-    _font(0),
+    _font(nullptr),
     m_cursor(0u),
     _glyphcount(0u),
     _scroll(0u),
@@ -168,7 +166,7 @@ TextField::TextField(as_object* object, DisplayObject* parent,
     _maxChars(0),
     _autoSize(AUTOSIZE_NONE),
     _type(typeDynamic),
-    _bounds(bounds),
+    _bounds(std::move(bounds)),
     _selection(0, 0),
     _leading(0),
     _indent(0), 
@@ -249,9 +247,9 @@ TextField::show_cursor(Renderer& renderer, const SWFMatrix& mat)
     if (_textRecords.empty()) {
         return;
     }
-    boost::uint16_t x;
-    boost::uint16_t y;
-    boost::uint16_t h;
+    std::uint16_t x;
+    std::uint16_t y;
+    std::uint16_t h;
     size_t i = cursorRecord();
     SWF::TextRecord record = _textRecords[i];
 
@@ -265,9 +263,9 @@ TextField::show_cursor(Renderer& renderer, const SWFMatrix& mat)
         }
     }
 
-    const std::vector<point> line = boost::assign::list_of
-        (point(x, y))
-        (point(x, y + h));
+    const std::vector<point> line = {
+        point(x, y),
+        point(x, y + h)};
     
     renderer.drawLine(line, rgba(0, 0, 0, 255), mat);
 }
@@ -305,16 +303,16 @@ TextField::display(Renderer& renderer, const Transform& base)
 
     if ((drawBorder || drawBackground) && !_bounds.is_null()) {
 
-        boost::int32_t xmin = _bounds.get_x_min();
-        boost::int32_t xmax = _bounds.get_x_max();
-        boost::int32_t ymin = _bounds.get_y_min();
-        boost::int32_t ymax = _bounds.get_y_max();
+        std::int32_t xmin = _bounds.get_x_min();
+        std::int32_t xmax = _bounds.get_x_max();
+        std::int32_t ymin = _bounds.get_y_min();
+        std::int32_t ymax = _bounds.get_y_max();
 
-        const std::vector<point> coords = boost::assign::list_of
-            (point(xmin, ymin))
-            (point(xmax, ymin))
-            (point(xmax, ymax))
-            (point(xmin, ymax));
+        const std::vector<point> coords = {
+            point(xmin, ymin),
+            point(xmax, ymin),
+            point(xmax, ymax),
+            point(xmin, ymax)};
 
         rgba borderColor = drawBorder ? getBorderColor() : rgba(0,0,0,0);
         rgba backgroundColor = drawBackground ? getBackgroundColor() :
@@ -739,7 +737,7 @@ TextField::mouseEvent(const event_id& ev)
 		case event_id::PRESS:
 		{
 			movie_root& root = stage();
-            boost::int32_t x_mouse, y_mouse;
+            std::int32_t x_mouse, y_mouse;
             boost::tie(x_mouse, y_mouse) = root.mousePosition();
 			
 			SWFMatrix m = getMatrix(*this);
@@ -749,12 +747,12 @@ TextField::mouseEvent(const event_id& ev)
 			
 			SWF::TextRecord rec;
 			
-			for (size_t i=0; i < _textRecords.size(); ++i) {
-				if 	((x_mouse >  _textRecords[i].xOffset()) && 
-					(x_mouse < _textRecords[i].xOffset()+_textRecords[i].recordWidth()) &&
-					(y_mouse > _textRecords[i].yOffset()-_textRecords[i].textHeight()) &&
-					(y_mouse < _textRecords[i].yOffset())) {
-						rec = _textRecords[i];
+			for (auto& record: _textRecords) {
+				if 	((x_mouse >  record.xOffset()) && 
+					(x_mouse < record.xOffset()+record.recordWidth()) &&
+					(y_mouse > record.yOffset()-record.textHeight()) &&
+					(y_mouse < record.yOffset())) {
+						rec = record;
 						break;
 					}
 			}
@@ -772,12 +770,12 @@ TextField::mouseEvent(const event_id& ev)
 }
 
 InteractiveObject*
-TextField::topmostMouseEntity(boost::int32_t x, boost::int32_t y)
+TextField::topmostMouseEntity(std::int32_t x, std::int32_t y)
 {
-    if (!visible()) return 0;
+    if (!visible()) return nullptr;
     
     // Not selectable, so don't catch mouse events!
-    if (!_selectable) return 0;
+    if (!_selectable) return nullptr;
 
     SWFMatrix m = getMatrix(*this);
     point p(x, y);
@@ -785,7 +783,7 @@ TextField::topmostMouseEntity(boost::int32_t x, boost::int32_t y)
 
     if (_bounds.point_test(p.x, p.y)) return this;
 
-    return 0;
+    return nullptr;
 }
 
 void
@@ -957,7 +955,7 @@ TextField::setFont(boost::intrusive_ptr<const Font> newfont)
 
 
 void
-TextField::insertTab(SWF::TextRecord& rec, boost::int32_t& x, float scale)
+TextField::insertTab(SWF::TextRecord& rec, std::int32_t& x, float scale)
 {
      // tab (ASCII HT)
     const int space = 32;
@@ -979,10 +977,10 @@ TextField::insertTab(SWF::TextRecord& rec, boost::int32_t& x, float scale)
         if (!_tabStops.empty()) {
             int tab = _tabStops.back() + 1;
             
-            for (size_t i = 0; i < tabStops.size(); ++i) {        
-                if (tabStops[i] > x) {
-                    if((tabStops[i] - x) < tab) {
-                        tab = tabStops[i] - x;
+            for (auto& tabStop : tabStops) {
+                if (tabStop > x) {
+                    if((tabStop - x) < tab) {
+                        tab = tabStop - x;
                     }
 				}
 
@@ -1047,16 +1045,16 @@ TextField::format_text()
         return;
     }
 
-    boost::uint16_t fontHeight = getFontHeight();
+    std::uint16_t fontHeight = getFontHeight();
     const float scale = fontHeight /
         static_cast<float>(_font->unitsPerEM(_embedFonts));
 
     // TODO: work out how leading affects things.
     const float fontLeading = 0;
 
-    const boost::uint16_t leftMargin = getLeftMargin();
-    const boost::uint16_t indent = getIndent();
-    const boost::uint16_t blockIndent = getBlockIndent();
+    const std::uint16_t leftMargin = getLeftMargin();
+    const std::uint16_t indent = getIndent();
+    const std::uint16_t blockIndent = getBlockIndent();
     const bool underlined = getUnderlined();
 
     /// Remember the current bounds for autosize.
@@ -1103,8 +1101,8 @@ TextField::format_text()
         rec.addGlyph(ge, 4);
     }
 
-    boost::int32_t x = static_cast<boost::int32_t>(rec.xOffset());
-    boost::int32_t y = static_cast<boost::int32_t>(rec.yOffset());
+    std::int32_t x = static_cast<std::int32_t>(rec.xOffset());
+    std::int32_t y = static_cast<std::int32_t>(rec.yOffset());
 
     // Start the bbox at the upper-left corner of the first glyph.
     //reset_bounding_box(x, y + fontHeight); 
@@ -1164,7 +1162,7 @@ TextField::format_text()
 void
 TextField::scrollLines()
 {
-    boost::uint16_t fontHeight = getFontHeight();
+    std::uint16_t fontHeight = getFontHeight();
     const float fontLeading = 0;
 
     _linesindisplay = _bounds.height() / (fontHeight + fontLeading + PADDING_TWIPS);
@@ -1204,7 +1202,7 @@ TextField::scrollLines()
 }
 
 void
-TextField::newLine(boost::int32_t& x, boost::int32_t& y, 
+TextField::newLine(std::int32_t& x, std::int32_t& y,
 				   SWF::TextRecord& rec, int& last_space_glyph,
 				LineStarts::value_type& last_line_start_record, float div)
 {
@@ -1292,8 +1290,8 @@ TextField::newLine(boost::int32_t& x, boost::int32_t& y,
 
 void
 TextField::handleChar(std::wstring::const_iterator& it,
-        const std::wstring::const_iterator& e, boost::int32_t& x,
-        boost::int32_t& y, SWF::TextRecord& rec, int& last_code,
+        const std::wstring::const_iterator& e, std::int32_t& x,
+        std::int32_t& y, SWF::TextRecord& rec, int& last_code,
         int& last_space_glyph, LineStarts::value_type& last_line_start_record)
 {
     LineStarts::iterator linestartit = _line_starts.begin();
@@ -1307,7 +1305,7 @@ TextField::handleChar(std::wstring::const_iterator& it,
     const float leading = 0;
     const float fontLeading = 0;
     
-    boost::uint32_t code = 0;
+    std::uint32_t code = 0;
     while (it != e)
     {
         code = *it++;
@@ -1435,7 +1433,7 @@ TextField::handleChar(std::wstring::const_iterator& it,
                         }
                         else if (s == "FONT") {
                             //font
-                            boost::uint16_t originalsize = _fontHeight;
+                            std::uint16_t originalsize = _fontHeight;
                             attloc = attributes.find("COLOR");
                             if (attloc != attributes.end()) {
                                 std::string hexval(attloc->second);
@@ -1478,31 +1476,31 @@ TextField::handleChar(std::wstring::const_iterator& it,
                                         
 										(pixelsToTwips(std::strtol(
                                         attloc->second.substr(1,attloc->second.length()-1).data(),
-                                        NULL,10))));
+                                        nullptr,10))));
                                     newrec.setYOffset(PADDING_TWIPS +
                                         newrec.textHeight() +
                                         (fontLeading - fontDescent));
                                     _fontHeight += pixelsToTwips(std::strtol(
                                         attloc->second.substr(1,attloc->second.length()-1).data(),
-                                        NULL,10));
+                                        nullptr,10));
                                 } else if (firstchar == "-") {
                                     newrec.setTextHeight(rec.textHeight() -
                                         (pixelsToTwips(std::strtol(
                                         attloc->second.substr(1,attloc->second.length()-1).data(),
-                                        NULL,10))));
+                                        nullptr,10))));
                                     newrec.setYOffset(PADDING_TWIPS +
                                         newrec.textHeight() +
                                         (fontLeading - fontDescent));
                                     _fontHeight -= pixelsToTwips(std::strtol(
                                         attloc->second.substr(1,attloc->second.length()-1).data(),
-                                        NULL,10));
+                                        nullptr,10));
                                 } else {
                                     newrec.setTextHeight(pixelsToTwips(std::strtol(
-                                        attloc->second.data(), NULL, 10)));
+                                        attloc->second.data(), nullptr, 10)));
                                     newrec.setYOffset(PADDING_TWIPS + newrec.textHeight() +
                                         (fontLeading - fontDescent));
                                     _fontHeight = pixelsToTwips(std::strtol(
-                                        attloc->second.data(), NULL, 10));
+                                        attloc->second.data(), nullptr, 10));
                                 }
                             }
                             handleChar(it, e, x, y, newrec, last_code,
@@ -1557,17 +1555,17 @@ TextField::handleChar(std::wstring::const_iterator& it,
                         else if (s == "TEXTFORMAT") {
                             log_debug("in textformat");
                             //textformat
-                            boost::uint16_t originalblockindent = getBlockIndent();
-                            boost::uint16_t originalindent = getIndent();
-                            boost::uint16_t originalleading = getLeading();
-                            boost::uint16_t originalleftmargin = getLeftMargin();
-                            boost::uint16_t originalrightmargin = getRightMargin();
+                            std::uint16_t originalblockindent = getBlockIndent();
+                            std::uint16_t originalindent = getIndent();
+                            std::uint16_t originalleading = getLeading();
+                            std::uint16_t originalleftmargin = getLeftMargin();
+                            std::uint16_t originalrightmargin = getRightMargin();
                             std::vector<int> originaltabstops = getTabStops();
                             attloc = attributes.find("BLOCKINDENT");
                             if (attloc != attributes.end()) {
                                 //textformat BLOCKINDENT attribute
                                 setBlockIndent(pixelsToTwips(std::strtol(
-                                        attloc->second.data(), NULL, 10)));
+                                        attloc->second.data(), nullptr, 10)));
                                 if (newrec.xOffset() == std::max(0, originalleftmargin +
                                     originalindent + originalblockindent) + PADDING_TWIPS) {
                                     //if beginning of line, indent
@@ -1581,7 +1579,7 @@ TextField::handleChar(std::wstring::const_iterator& it,
                             if (attloc != attributes.end()) {
                                 //textformat INDENT attribute
                                 setIndent(pixelsToTwips(std::strtol(
-                                    attloc->second.data(), NULL, 10)));
+                                    attloc->second.data(), nullptr, 10)));
                                 if (newrec.xOffset() == std::max(0, originalleftmargin +
                                     originalindent + getBlockIndent()) + PADDING_TWIPS) {
                                     //if beginning of line, indent
@@ -1595,13 +1593,13 @@ TextField::handleChar(std::wstring::const_iterator& it,
                             if (attloc != attributes.end()) {
                                 //textformat LEADING attribute
                                 setLeading(pixelsToTwips(std::strtol(
-                                        attloc->second.data(), NULL, 10)));
+                                        attloc->second.data(), nullptr, 10)));
                             }
                             attloc = attributes.find("LEFTMARGIN");
                             if (attloc != attributes.end()) {
                                 //textformat LEFTMARGIN attribute
                                 setLeftMargin(pixelsToTwips(std::strtol(
-                                        attloc->second.data(), NULL, 10)));
+                                        attloc->second.data(), nullptr, 10)));
                                 if (newrec.xOffset() == std::max(0, originalleftmargin +
                                     getIndent() + getBlockIndent()) + PADDING_TWIPS) {
                                     //if beginning of line, indent
@@ -1615,7 +1613,7 @@ TextField::handleChar(std::wstring::const_iterator& it,
                             if (attloc != attributes.end()) {
                                 //textformat RIGHTMARGIN attribute
                                 setRightMargin(pixelsToTwips(std::strtol(
-                                        attloc->second.data(), NULL, 10)));
+                                        attloc->second.data(), nullptr, 10)));
                                 //FIXME:Should not apply this to this line if we are not at
                                 //beginning of line. Not sure how to do that.
                             }
@@ -1693,7 +1691,7 @@ TextField::handleChar(std::wstring::const_iterator& it,
                 // being chosen. Flash can currently only handle 16-bit
                 // values.
                 int index = rec.getFont()->get_glyph_index(
-                        static_cast<boost::uint16_t>(code), _embedFonts);
+                        static_cast<std::uint16_t>(code), _embedFonts);
 
                 IF_VERBOSE_MALFORMED_SWF (
                     if (index == -1)
@@ -1777,7 +1775,7 @@ TextField::handleChar(std::wstring::const_iterator& it,
                     }
 
                     int index = rec.getFont()->get_glyph_index(
-                            static_cast<boost::uint16_t>(code), _embedFonts);
+                            static_cast<std::uint16_t>(code), _embedFonts);
                     x += scale * rec.getFont()->get_advance(index, _embedFonts);
 
                 }
@@ -1892,7 +1890,7 @@ TextField::VariableRef
 TextField::parseTextVariableRef(const std::string& variableName) const
 {
     VariableRef ret;
-    ret.first = 0;
+    ret.first = nullptr;
 
 #ifdef DEBUG_DYNTEXT_VARIABLES
     log_debug("VariableName: %s", variableName);
@@ -2189,7 +2187,7 @@ TextField::set_variable_name(const std::string& newname)
 }
 
 bool
-TextField::pointInShape(boost::int32_t x, boost::int32_t y) const
+TextField::pointInShape(std::int32_t x, std::int32_t y) const
 {
     const SWFMatrix wm = getWorldMatrix(*this).invert();
     point lp(x, y);
@@ -2265,7 +2263,8 @@ TextField::setTextColor(const rgba& col)
         set_invalidated();
         _textColor = col;
         std::for_each(_displayRecords.begin(), _displayRecords.end(),
-                boost::bind(&SWF::TextRecord::setColor, _1, _textColor));
+                std::bind(&SWF::TextRecord::setColor, std::placeholders::_1,
+                    _textColor));
     }
 }
 
@@ -2290,7 +2289,7 @@ TextField::setWordWrap(bool wrap)
 }
 
 void
-TextField::setLeading(boost::int16_t h)
+TextField::setLeading(std::int16_t h)
 {
     if (_leading != h) {
         set_invalidated();
@@ -2364,7 +2363,7 @@ TextField::setAlignment(TextAlignment h)
 }
 
 void
-TextField::setIndent(boost::uint16_t h)
+TextField::setIndent(std::uint16_t h)
 {
     if (_indent != h) {
         set_invalidated();
@@ -2373,7 +2372,7 @@ TextField::setIndent(boost::uint16_t h)
 }
 
 void
-TextField::setBlockIndent(boost::uint16_t h)
+TextField::setBlockIndent(std::uint16_t h)
 {
     if (_blockIndent != h) {
         set_invalidated();
@@ -2382,7 +2381,7 @@ TextField::setBlockIndent(boost::uint16_t h)
 }
 
 void
-TextField::setRightMargin(boost::uint16_t h)
+TextField::setRightMargin(std::uint16_t h)
 {
     if (_rightMargin != h) {
         set_invalidated();
@@ -2391,7 +2390,7 @@ TextField::setRightMargin(boost::uint16_t h)
 }
 
 void
-TextField::setLeftMargin(boost::uint16_t h)
+TextField::setLeftMargin(std::uint16_t h)
 {
     if (_leftMargin != h) {
         set_invalidated();
@@ -2400,7 +2399,7 @@ TextField::setLeftMargin(boost::uint16_t h)
 }
 
 void
-TextField::setFontHeight(boost::uint16_t h)
+TextField::setFontHeight(std::uint16_t h)
 {
     if (_fontHeight != h) {
         set_invalidated();
diff --git a/libcore/TextField.h b/libcore/TextField.h
index 78df198..6544cc0 100644
--- a/libcore/TextField.h
+++ b/libcore/TextField.h
@@ -115,7 +115,7 @@ public:
     /// Notably, the default textHeight is 12pt (240 twips).
 	/// @param parent A pointer to the DisplayObject parent of this TextField
 	/// @param bounds A SWFRect specifying the bounds of this TextField
-    TextField(as_object* object, DisplayObject* parent, const SWFRect& bounds);
+    TextField(as_object* object, DisplayObject* parent, SWFRect bounds);
 
 
 	~TextField();
@@ -128,7 +128,7 @@ public:
 	//
 	/// @param x x-coordinate
 	/// @param y y-coordinate
-	InteractiveObject* topmostMouseEntity(boost::int32_t x, boost::int32_t y);
+	InteractiveObject* topmostMouseEntity(std::int32_t x, std::int32_t y);
 
     /// Return the version of the SWF this was parsed from.
     //
@@ -219,7 +219,7 @@ public:
 	}
 
 	// See dox in DisplayObject.h
-	bool pointInShape(boost::int32_t x, boost::int32_t y) const;
+	bool pointInShape(std::int32_t x, std::int32_t y) const;
 
 	/// Return true if the 'background' should be drawn
 	bool getDrawBackground() const;
@@ -277,7 +277,7 @@ public:
 	}
 
     /// Get the current maxChars setting of the TextField
-    boost::int32_t maxChars() const {
+    std::int32_t maxChars() const {
         return _maxChars;
     }
 
@@ -285,7 +285,7 @@ public:
 	//
 	/// @param max The maximum number of characters that can be
 	/// 	input by the user (Does not restrict Scripts)
-    void maxChars(boost::int32_t max) {
+    void maxChars(std::int32_t max) {
         _maxChars = max;
     }
 
@@ -446,40 +446,40 @@ public:
 	const Font* getFont() { return _font.get(); }
 
 	
-	boost::uint16_t getFontHeight() const
+	std::uint16_t getFontHeight() const
 	{
 		return _fontHeight;
 	}
 
-	void setFontHeight(boost::uint16_t h);
+	void setFontHeight(std::uint16_t h);
 
-	boost::uint16_t getLeftMargin() const
+	std::uint16_t getLeftMargin() const
 	{
 		return _leftMargin;
 	}
 
-	void setLeftMargin(boost::uint16_t h);
+	void setLeftMargin(std::uint16_t h);
 
-	boost::uint16_t getRightMargin() const
+	std::uint16_t getRightMargin() const
 	{
 		return _rightMargin;
 	}
 
-	void setRightMargin(boost::uint16_t h);
+	void setRightMargin(std::uint16_t h);
 
-	boost::uint16_t getIndent() const
+	std::uint16_t getIndent() const
 	{
 		return _indent;
 	}
 
-	void setIndent(boost::uint16_t h);
+	void setIndent(std::uint16_t h);
 
-	boost::uint16_t getBlockIndent() const
+	std::uint16_t getBlockIndent() const
 	{
 		return _blockIndent;
 	}
 
-	void setBlockIndent(boost::uint16_t h);
+	void setBlockIndent(std::uint16_t h);
 
 	TextAlignment getAlignment() const
 	{
@@ -488,12 +488,12 @@ public:
 
 	void setAlignment(TextAlignment h);
 
-	boost::int16_t getLeading() const
+	std::int16_t getLeading() const
 	{
 		return _leading;
 	}
 
-	void setLeading(boost::int16_t h);
+	void setLeading(std::int16_t h);
 
 	bool getUnderlined() const
 	{
@@ -608,7 +608,7 @@ private:
 
 	void updateHtmlText(const std::wstring& s);
 
-    void insertTab(SWF::TextRecord& rec, boost::int32_t& x, float scale);
+    void insertTab(SWF::TextRecord& rec, std::int32_t& x, float scale);
 
 	/// What happens when setFocus() is called on this TextField.
     //
@@ -623,7 +623,7 @@ private:
 	void onChanged();
 
 	/// Reset our text bounding box to the given point.
-	void reset_bounding_box(boost::int32_t x, boost::int32_t y)
+	void reset_bounding_box(std::int32_t x, std::int32_t y)
 	{
 		m_text_bounding_box.set_to_point(x, y);
 	}
@@ -637,14 +637,14 @@ private:
 	
 	/// Handles a new line, this will be called several times, so this
 	/// will hopefully make code cleaner
-	void newLine(boost::int32_t& x, boost::int32_t& y, 
+	void newLine(std::int32_t& x, std::int32_t& y,
 				 SWF::TextRecord& rec, int& last_space_glyph,
 				 LineStarts::value_type& last_line_start_record, float div);
 					
 	/// De-reference and do appropriate action for character iterator
 	void handleChar(std::wstring::const_iterator& it,
-            const std::wstring::const_iterator& e, boost::int32_t& x,
-            boost::int32_t& y, SWF::TextRecord& rec, int& last_code,
+            const std::wstring::const_iterator& e, std::int32_t& x,
+            std::int32_t& y, SWF::TextRecord& rec, int& last_code,
 		    int& last_space_glyph,
             LineStarts::value_type& last_line_start_record);
 	
@@ -782,18 +782,18 @@ private:
     /// never be less than the first.
     std::pair<size_t, size_t> _selection;
 
-    boost::int16_t _leading;
-	boost::uint16_t _indent;
+    std::int16_t _leading;
+	std::uint16_t _indent;
 
 	/// Indentation for every line (including the ones created by
 	/// effect of a word-wrap.
-	boost::uint16_t _blockIndent;
+	std::uint16_t _blockIndent;
 
-	boost::uint16_t _leftMargin;
+	std::uint16_t _leftMargin;
 
-	boost::uint16_t _rightMargin;
+	std::uint16_t _rightMargin;
 
-	boost::uint16_t _fontHeight;
+	std::uint16_t _fontHeight;
 
 	/// This flag will be true as soon as the TextField
 	/// is assigned a text value. Only way to be false is
diff --git a/libcore/Timers.cpp b/libcore/Timers.cpp
index a44f798..88d627d 100644
--- a/libcore/Timers.cpp
+++ b/libcore/Timers.cpp
@@ -38,28 +38,28 @@ Timer::~Timer()
 }
 
 Timer::Timer(as_function& method, unsigned long ms,
-        as_object* this_ptr, const fn_call::Args& args, bool runOnce)
+        as_object* this_ptr, fn_call::Args args, bool runOnce)
     :
     _interval(ms),
     _start(std::numeric_limits<unsigned long>::max()),
     _function(&method),
     _methodName(),
     _object(this_ptr),
-    _args(args),
+    _args(std::move(args)),
     _runOnce(runOnce)
 {
     start();
 }
 
-Timer::Timer(as_object* this_ptr, const ObjectURI& methodName,
-        unsigned long ms, const fn_call::Args& args, bool runOnce)
+Timer::Timer(as_object* this_ptr, ObjectURI methodName,
+        unsigned long ms, fn_call::Args args, bool runOnce)
     :
     _interval(ms),
     _start(std::numeric_limits<unsigned long>::max()),
-    _function(0),
-    _methodName(methodName),
+    _function(nullptr),
+    _methodName(std::move(methodName)),
     _object(this_ptr),
-    _args(args),
+    _args(std::move(args)),
     _runOnce(runOnce)
 {
     start();
diff --git a/libcore/Timers.h b/libcore/Timers.h
index dac3f52..4c88d1c 100644
--- a/libcore/Timers.h
+++ b/libcore/Timers.h
@@ -73,7 +73,7 @@ public:
     /// @param runOnce
     ///     If true the interval will run only once. False if omitted.
     Timer(as_function& method, unsigned long ms, as_object* this_ptr,
-            const fn_call::Args& args, bool runOnce = false);
+            fn_call::Args args, bool runOnce = false);
 
     /// Construct the Timer to call a late-evaluated object method, enabling it.
     //
@@ -94,8 +94,8 @@ public:
     ///
     /// @param runOnce
     ///     If true the interval will run only once. False if omitted.
-    Timer(as_object* obj, const ObjectURI& methodName, unsigned long ms,
-            const fn_call::Args& args, bool runOnce = false);
+    Timer(as_object* obj, ObjectURI methodName, unsigned long ms,
+            fn_call::Args args, bool runOnce = false);
 
     /// Clear the timer, ready for reuse
     //
diff --git a/libcore/Transform.h b/libcore/Transform.h
index cd334c6..d254112 100644
--- a/libcore/Transform.h
+++ b/libcore/Transform.h
@@ -22,6 +22,7 @@
 
 #include "SWFMatrix.h"
 #include "SWFCxForm.h"
+#include <utility>
 
 namespace gnash {
 
@@ -36,11 +37,11 @@ public:
     /// Construct a Transform
     //
     /// Any arguments not supplied are identity transformations.
-    explicit Transform(const SWFMatrix& m = SWFMatrix(),
-            const SWFCxForm& cx = SWFCxForm())
+    explicit Transform(SWFMatrix m = SWFMatrix(),
+            SWFCxForm cx = SWFCxForm())
         :
-        matrix(m),
-        colorTransform(cx)
+        matrix(std::move(m)),
+        colorTransform(std::move(cx))
     {}
 
     Transform(const Transform& other)
diff --git a/libcore/UserFunction.h b/libcore/UserFunction.h
index 709cd9e..204ffa3 100644
--- a/libcore/UserFunction.h
+++ b/libcore/UserFunction.h
@@ -42,7 +42,7 @@ public:
     //
     /// Only Function2 functions require local registers; for all others
     /// the value should be 0.
-    virtual boost::uint8_t registers() const = 0;
+    virtual std::uint8_t registers() const = 0;
 
 protected:
 
diff --git a/libcore/Video.cpp b/libcore/Video.cpp
index 7f992db..6666bae 100644
--- a/libcore/Video.cpp
+++ b/libcore/Video.cpp
@@ -20,7 +20,7 @@
 
 #include "Video.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 #include <cassert>
 
 #include "DefineVideoStreamTag.h"
@@ -43,7 +43,7 @@ Video::Video(as_object* object,
 	:
 	DisplayObject(getRoot(*object), object, parent),
 	m_def(def),
-	_ns(0),
+	_ns(nullptr),
 	_embeddedStream(m_def),
 	_lastDecodedVideoFrameNum(-1),
 	_lastDecodedVideoFrame(),
@@ -123,8 +123,8 @@ Video::getVideoFrame()
 	// If this is a video from a NetStream_as object, retrieve a video
     // frame from there.
 	if (_ns) {
-		std::auto_ptr<image::GnashImage> tmp = _ns->get_video();
-		if (tmp.get()) _lastDecodedVideoFrame = tmp;
+		std::unique_ptr<image::GnashImage> tmp = _ns->get_video();
+		if (tmp.get()) _lastDecodedVideoFrame = std::move(tmp);
 	}
 
 	// If this is a video from a VideoFrame tag, retrieve a video frame
@@ -139,7 +139,7 @@ Video::getVideoFrame()
             return _lastDecodedVideoFrame.get();
         }
 
-        const boost::uint16_t current_frame = get_ratio(); 
+        const std::uint16_t current_frame = get_ratio();
 
 #ifdef DEBUG_EMBEDDED_VIDEO_DECODING
         log_debug("Video instance %s need display video frame (ratio) %d",
@@ -160,7 +160,7 @@ Video::getVideoFrame()
         // TODO: find a better way than using -1 to show that no
         // frames have been decoded yet.
         assert(_lastDecodedVideoFrameNum >= -1);
-        boost::uint16_t from_frame = _lastDecodedVideoFrameNum + 1;
+        std::uint16_t from_frame = _lastDecodedVideoFrameNum + 1;
 
 		// If current frame is smaller then last decoded frame
 		// we restart decoding from scratch
@@ -183,8 +183,8 @@ Video::getVideoFrame()
 #endif
 
         const size_t frames = m_def->visitSlice(
-                boost::bind(boost::mem_fn(&media::VideoDecoder::push),
-                    _decoder.get(), _1),
+                std::bind(std::mem_fn(&media::VideoDecoder::push),
+                    _decoder.get(), std::placeholders::_1),
                 from_frame, current_frame);
 
         if (!frames) return _lastDecodedVideoFrame.get();
diff --git a/libcore/Video.h b/libcore/Video.h
index d7d4242..157cb99 100644
--- a/libcore/Video.h
+++ b/libcore/Video.h
@@ -55,7 +55,7 @@ public:
 
 	~Video();
 
-	virtual bool pointInShape(boost::int32_t x, boost::int32_t y) const
+	virtual bool pointInShape(std::int32_t x, std::int32_t y) const
 	{
 		// video DisplayObject shape is always a rectangle..
 		return pointInBounds(x, y);
@@ -64,7 +64,7 @@ public:
 	virtual SWFRect getBounds() const;
 
 	/// Register this video instance as a live DisplayObject
-	virtual void construct(as_object* init = 0);
+	virtual void construct(as_object* init = nullptr);
 
 	virtual void display(Renderer& renderer, const Transform& xform);
 
@@ -120,17 +120,17 @@ private:
 	bool _embeddedStream;
 
 	/// Last decoded frame number
-	boost::int32_t _lastDecodedVideoFrameNum;
+	std::int32_t _lastDecodedVideoFrameNum;
 
 	/// Last decoded frame 
-	std::auto_ptr<image::GnashImage> _lastDecodedVideoFrame;
+	std::unique_ptr<image::GnashImage> _lastDecodedVideoFrame;
 
     /// The decoder used to decode the video frames for embedded streams
     //
     /// For dynamically loaded videos NetStream takes care of decoding
     /// see the _ns property
     ///
-    std::auto_ptr<media::VideoDecoder> _decoder;
+    std::unique_ptr<media::VideoDecoder> _decoder;
 
     /// Whether to request smoothing when the video is scaled
     bool _smoothing;
diff --git a/libcore/abc/AbcBlock.cpp b/libcore/abc/AbcBlock.cpp
index d6a1ebd..1b11bfd 100644
--- a/libcore/abc/AbcBlock.cpp
+++ b/libcore/abc/AbcBlock.cpp
@@ -32,7 +32,7 @@
 #include "Machine.h"
 #include "Global_as.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 
 namespace gnash {
 
@@ -182,7 +182,7 @@ Trait::finalize_mbody(AbcBlock *block, Method *pMethod)
 bool
 Trait::read(SWFStream* in, AbcBlock *block)
 {
-	boost::uint32_t name = in->read_V32();
+	std::uint32_t name = in->read_V32();
 	if (name >= block->_multinamePool.size())
 	{
 		log_error(_("ABC: Bad name for trait."));
@@ -198,7 +198,7 @@ Trait::read(SWFStream* in, AbcBlock *block)
 	_globalName = block->_multinamePool[name].getGlobalName();
 	_namespace = block->_multinamePool[name].getNamespace();
 
-	boost::uint8_t kind = in->read_u8();
+	std::uint8_t kind = in->read_u8();
 	_kind = static_cast<Kind>(kind & 0x0F);
 
 	log_abc("Trait name: %s, Trait kind: %s",
@@ -211,7 +211,7 @@ Trait::read(SWFStream* in, AbcBlock *block)
         {
             _slotID = in->read_V32();
             _typeIndex = in->read_V32();
-            boost::uint32_t vindex = in->read_V32();
+            std::uint32_t vindex = in->read_V32();
             log_abc("Slot ID=%u Type=%s Pool index=%u", _slotID,
                     block->_stringPool[
                     block->_multinamePool[_typeIndex].getABCName()], vindex);
@@ -234,7 +234,7 @@ Trait::read(SWFStream* in, AbcBlock *block)
             // Ignore the 'disp_id'
             in->skip_V32();
 
-            boost::uint32_t offset = in->read_V32();
+            std::uint32_t offset = in->read_V32();
             log_abc("Method index=%u", offset);
             if (offset >= block->_methods.size()) {
                 log_error(_("Bad method id in trait."));
@@ -261,7 +261,7 @@ Trait::read(SWFStream* in, AbcBlock *block)
         case KIND_FUNCTION:
         {
             _slotID = in->read_V32();
-            boost::uint32_t offset = in->read_V32();
+            std::uint32_t offset = in->read_V32();
             if (offset >= block->_methods.size()) {
                 log_error(_("Bad method id in trait."));
                 return false;
@@ -277,7 +277,7 @@ Trait::read(SWFStream* in, AbcBlock *block)
 
 	// Ignore the metadata, but it must be read to know how to ignore it.
 	if ((kind >> 4) & 0x04) {
-		boost::uint32_t mcount = in->read_V32();
+		std::uint32_t mcount = in->read_V32();
 		for (size_t i = 0; i < mcount; ++i) {
 			in->skip_V32();
 		}
@@ -334,24 +334,24 @@ AbcBlock::prepare(Machine* mach)
     // scripts have Global as a target object (prototype), so for now we
     // will do that.
     std::for_each(_scripts.begin(), _scripts.end(),
-            boost::bind(&abc::Class::setPrototype, _1, mach->global()));
+            std::bind(&abc::Class::setPrototype, _1, mach->global()));
  
     std::for_each(_methods.begin(), _methods.end(),
-            boost::bind(&Method::initPrototype, _1, mach));
+            std::bind(&Method::initPrototype, _1, mach));
     
     // TODO: Remove this, initialize traits only when needed; possibly 
     // consruct them on parsing without the need for a finalize method.
     std::for_each(_methods.begin(), _methods.end(),
-            boost::bind(&abc::Method::initTraits, _1, *this));
+            std::bind(&abc::Method::initTraits, _1, *this));
     std::for_each(_classes.begin(), _classes.end(),
-            boost::bind(&abc::Class::initTraits, _1, *this));
+            std::bind(&abc::Class::initTraits, _1, *this));
     std::for_each(_scripts.begin(), _scripts.end(),
-            boost::bind(&abc::Class::initTraits, _1, *this));
+            std::bind(&abc::Class::initTraits, _1, *this));
 
 }
 
 void
-AbcBlock::check_multiname_name(boost::uint32_t name)
+AbcBlock::check_multiname_name(std::uint32_t name)
 {
 
 	if (name >= _stringPool.size()) {
@@ -360,7 +360,7 @@ AbcBlock::check_multiname_name(boost::uint32_t name)
 }
 
 void
-AbcBlock::check_multiname_namespace(boost::uint32_t ns)
+AbcBlock::check_multiname_namespace(std::uint32_t ns)
 {
 	if (ns >= _namespacePool.size()) {
 		throw ParserException("ABC: Out of bounds namespace for Multiname.");
@@ -368,7 +368,7 @@ AbcBlock::check_multiname_namespace(boost::uint32_t ns)
 }
 
 void
-AbcBlock::check_multiname_namespaceset(boost::uint32_t nsset)
+AbcBlock::check_multiname_namespaceset(std::uint32_t nsset)
 {
 	if (!nsset)
     {
@@ -475,13 +475,13 @@ bool
 AbcBlock::read_integer_constants()
 {
 	// count overestimates by 1.
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	_integerPool.resize(count);
 	if (count)
 		_integerPool[0] = 0;
 	for (unsigned int i = 1; i < count; ++i)
 	{
-		_integerPool[i] = static_cast<boost::int32_t> (_stream->read_V32());
+		_integerPool[i] = static_cast<std::int32_t> (_stream->read_V32());
 	}
 	return true;
 }
@@ -491,7 +491,7 @@ bool
 AbcBlock::read_unsigned_integer_constants()
 {
 	// count overestimates by 1.
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	_uIntegerPool.resize(count);
 	if (count)
 		_uIntegerPool[0] = 0;
@@ -506,7 +506,7 @@ AbcBlock::read_unsigned_integer_constants()
 bool
 AbcBlock::read_double_constants()
 {
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	_doublePool.resize(count);
 	if (count) _doublePool[0] = 0.0;
 
@@ -523,7 +523,7 @@ bool
 AbcBlock::read_string_constants()
 {
 	log_abc("Begin reading string constants.");
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	log_abc("There are %u string constants.", count);
 	_stringPool.resize(count);
 
@@ -532,7 +532,7 @@ AbcBlock::read_string_constants()
 	}
 
     for (size_t i = 1; i < count; ++i) {
-		boost::uint32_t length = _stream->read_V32();
+		std::uint32_t length = _stream->read_V32();
 		_stream->read_string_with_length(length, _stringPool[i]);
 		log_abc("Adding string constant to string pool: index=%u %s",
                 i, _stringPool[i]);
@@ -547,7 +547,7 @@ bool
 AbcBlock::read_namespaces()
 {	
 	log_abc("Begin reading namespaces.");
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	log_abc("There are %u namespaces.", count);
 	_namespacePool.resize(count);
 	if (count) {
@@ -559,7 +559,7 @@ AbcBlock::read_namespaces()
 		NamespaceConstant kind =
             static_cast<NamespaceConstant>(_stream->read_u8());
 
-		boost::uint32_t nameIndex = _stream->read_V32();
+		std::uint32_t nameIndex = _stream->read_V32();
 		log_abc("Namespace %u: %s, index %u, name %s", i, kind,
                 nameIndex, _stringPool[nameIndex]);
 
@@ -591,7 +591,7 @@ AbcBlock::read_namespaces()
 bool
 AbcBlock::read_namespace_sets()
 {
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	_namespaceSetPool.resize(count);
 	if (count)
 	{
@@ -599,11 +599,11 @@ AbcBlock::read_namespace_sets()
 	}
 	for (unsigned int i = 1; i < count; ++i)
 	{
-		boost::uint32_t icount = _stream->read_V32();
+		std::uint32_t icount = _stream->read_V32();
 		_namespaceSetPool[i].resize(icount);
 		for (unsigned int j = 0; j < icount; ++j)
 		{
-			boost::uint32_t selection = _stream->read_V32();
+			std::uint32_t selection = _stream->read_V32();
 			if (!selection || selection >= _namespacePool.size())
 			{
 				log_error(_("ABC: Bad namespace for namespace set."));
@@ -619,7 +619,7 @@ AbcBlock::read_namespace_sets()
 bool
 AbcBlock::read_multinames()
 {
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	log_abc("There are %u multinames.", count);
 	_multinamePool.resize(count);
 	if (count)
@@ -631,9 +631,9 @@ AbcBlock::read_multinames()
 	for (unsigned int i = 1; i < count; ++i)
 	{
         MultiName::Kind kind = static_cast<MultiName::Kind>(_stream->read_u8());
-		boost::uint32_t ns = 0;
-		boost::uint32_t name = 0;
-		boost::uint32_t nsset = 0;
+		std::uint32_t ns = 0;
+		std::uint32_t name = 0;
+		std::uint32_t nsset = 0;
 
 		log_abc("Multiname %u has kind %s", i, static_cast<int>(kind));
 
@@ -697,7 +697,7 @@ AbcBlock::read_multinames()
 }
 
 bool
-AbcBlock::pool_value(boost::uint32_t index, PoolConstant type, as_value &v)
+AbcBlock::pool_value(std::uint32_t index, PoolConstant type, as_value &v)
 {
 	if (!index)
 		return true;
@@ -785,7 +785,7 @@ AbcBlock::read_method_infos()
 {
 	log_abc("Begin read_method_infos.");
 
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
     log_abc("Method count: %u", count);
 
 	_methods.resize(count);
@@ -795,8 +795,8 @@ AbcBlock::read_method_infos()
 		Method *pMethod = mCH->newMethod();
 		pMethod->setMethodID(i);
 		_methods[i] = pMethod;
-		boost::uint32_t param_count = _stream->read_V32();
-		boost::uint32_t return_type = _stream->read_V32();
+		std::uint32_t param_count = _stream->read_V32();
+		std::uint32_t return_type = _stream->read_V32();
 
         const std::string& rt = return_type ? 
             _stringPool[_multinamePool[return_type].getABCName()] :
@@ -830,7 +830,7 @@ AbcBlock::read_method_infos()
 		for (size_t j = 0; j < param_count; ++j) {
 			log_abc("  Reading parameter %u", j);
 			// The parameter type.
-			boost::uint32_t ptype = _stream->read_V32();
+			std::uint32_t ptype = _stream->read_V32();
             
             const std::string& pt = return_type ? 
                 _stringPool[_multinamePool[ptype].getABCName()] :
@@ -860,9 +860,9 @@ AbcBlock::read_method_infos()
             }
 		}
 
-		boost::uint32_t method_name = _stream->read_V32();
+		std::uint32_t method_name = _stream->read_V32();
 		log_abc(  "Method name=%s %d", _stringPool[method_name], method_name);
-		boost::uint8_t flags = _stream->read_u8();
+		std::uint8_t flags = _stream->read_u8();
 		log_abc("  Flags: %X", flags | 0x0);
 //		log_abc("Check if flags and optional args.");
 		// If there are default parameters, read them now.
@@ -870,13 +870,13 @@ AbcBlock::read_method_infos()
 		// be assigned to the corresponding parameters.
 		if (flags & METHOD_OPTIONAL_ARGS) {
 			
-            boost::uint32_t ocount = _stream->read_V32();
+            std::uint32_t ocount = _stream->read_V32();
 			log_abc("  Optional args: %u", ocount);
 			pMethod->setMinArgumentCount(pMethod->maxArgumentCount() - ocount);
 			
             for (unsigned int j = 0; j < ocount; ++j) {
 				log_abc("  Reading optional arg: %u", j);
-				boost::uint32_t index = _stream->read_V32();
+				std::uint32_t index = _stream->read_V32();
 				
                 PoolConstant kindof =
                     static_cast<PoolConstant>(_stream->read_u8());
@@ -910,11 +910,11 @@ AbcBlock::read_method_infos()
 bool
 AbcBlock::skip_metadata()
 {
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	for (unsigned int i = 0; i < count; ++i)
 	{
 		_stream->skip_V32(); // A name index.
-		boost::uint32_t icount = _stream->read_V32();
+		std::uint32_t icount = _stream->read_V32();
 		for (unsigned int j = 0; j < icount; ++j)
 		{
 			// key/values may not be stored together, but this still works.
@@ -929,12 +929,12 @@ AbcBlock::skip_metadata()
 bool
 AbcBlock::read_instances()
 {
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	log_abc("There are %u instances.", count);
 	_classes.resize(count);
 	for (size_t i = 0; i < count; ++i) {
 		//Read multiname index.
-		boost::uint32_t index = _stream->read_V32();
+		std::uint32_t index = _stream->read_V32();
 		// 0 is allowed as a name, typically for the last entry.
 		if (index >= _multinamePool.size()) {
 			log_error(_("ABC: Out of bounds instance name."));
@@ -978,7 +978,7 @@ AbcBlock::read_instances()
 		}
 		cl->setDeclared();
 		_classes[i] = cl;
-		boost::uint32_t super_index = _stream->read_V32();
+		std::uint32_t super_index = _stream->read_V32();
 
 		if (super_index && super_index >= _multinamePool.size()) {
 			log_error(_("ABC: Bad super type."));
@@ -1018,7 +1018,7 @@ AbcBlock::read_instances()
 			pSuper->setInherited();
 		}
 
-		boost::uint8_t flags = _stream->read_u8();
+		std::uint8_t flags = _stream->read_u8();
 		log_abc("Instance %u(%s) multiname index=%u name=%s super index=%u "
                 "flags=%X", i, cl, index, 
                 _stringPool[_multinamePool[index].getABCName()],
@@ -1030,7 +1030,7 @@ AbcBlock::read_instances()
 		if ((flags & 7) == INSTANCE_DYNAMIC) cl->setDynamic();
 
 		if (flags & INSTANCE_PROTECTED_NS) {
-			boost::uint32_t ns_index = _stream->read_V32();
+			std::uint32_t ns_index = _stream->read_V32();
 			if (ns_index >= _namespacePool.size()) {
 				log_error(_("ABC: Bad namespace for protected."));
 				return false;
@@ -1044,10 +1044,10 @@ AbcBlock::read_instances()
 
 		// This is the list of interfaces which the instances has agreed to
 		// implement. They must be interfaces, and they must exist.
-		boost::uint32_t intcount = _stream->read_V32();
+		std::uint32_t intcount = _stream->read_V32();
 		log_abc("This instance has %u interfaces.", intcount);
 		for (size_t j = 0; j < intcount; ++j) {
-			boost::uint32_t i_index = _stream->read_V32();
+			std::uint32_t i_index = _stream->read_V32();
 			log_abc("Interface %u has multiname index=%u", i, i_index);
 			// 0 is allowed as an interface, typically for the last one.
 			if (i_index >= _multinamePool.size()) {
@@ -1067,7 +1067,7 @@ AbcBlock::read_instances()
 		// The next thing should be the constructor.
 		// TODO: What does this mean exactly? How does it differ from the one in
 		// the class info block?
-		boost::uint32_t offset = _stream->read_V32();
+		std::uint32_t offset = _stream->read_V32();
 		log_abc("Moffset: %u", offset);
 		if (offset >= _methods.size()) {
 			log_error(_("ABC: Out of bounds method for initializer."));
@@ -1077,7 +1077,7 @@ AbcBlock::read_instances()
 		cl->setConstructor(_methods[offset]);
 
 		// Next come the 'traits' of the instance. (The members.)
-		boost::uint32_t tcount = _stream->read_V32();
+		std::uint32_t tcount = _stream->read_V32();
 		log_abc("Trait count: %u", tcount);
 		for (unsigned int j = 0; j < tcount; ++j)
 		{
@@ -1096,12 +1096,12 @@ AbcBlock::read_classes()
 {
 	// Count was found in read_instances().
 	log_abc("Begin reading classes.");
-	boost::uint32_t count = _classes.size();
+	std::uint32_t count = _classes.size();
 	log_abc("There are %u classes.", count);
 	
     for (size_t i = 0; i < count; ++i) {
 		abc::Class* cl = _classes[i];
-		boost::uint32_t offset = _stream->read_V32();
+		std::uint32_t offset = _stream->read_V32();
 		log_abc("Class %u(%s) static constructor index=%u", i, cl, offset);
 
         if (offset >= _methods.size()) {
@@ -1112,7 +1112,7 @@ AbcBlock::read_classes()
 		// Don't validate for previous owner.
 		cl->setStaticConstructor(_methods[offset]);
 
-		boost::uint32_t tcount = _stream->read_V32();
+		std::uint32_t tcount = _stream->read_V32();
 		log_abc("This class has %u traits.", tcount);
 		for (size_t j = 0; j < tcount; ++j) {
             Trait t;
@@ -1131,7 +1131,7 @@ AbcBlock::read_scripts()
 {
 	log_abc("Begin reading scripts.");
 
-	const boost::uint32_t scriptcount = _stream->read_V32();
+	const std::uint32_t scriptcount = _stream->read_V32();
 	log_abc("There are %u scripts.", scriptcount);
 
 	_scripts.resize(scriptcount);
@@ -1140,7 +1140,7 @@ AbcBlock::read_scripts()
 		abc::Class* script = mCH->newClass();
 		_scripts[i] = script;
 
-		boost::uint32_t offset = _stream->read_V32();
+		std::uint32_t offset = _stream->read_V32();
 		log_abc("Reading script %u(%s) initializer method index=%u", i,
                 script, offset);
 		if (offset >= _methods.size()) {
@@ -1150,7 +1150,7 @@ AbcBlock::read_scripts()
 
 		script->setConstructor(_methods[offset]);
 
-		const boost::uint32_t tcount = _stream->read_V32();
+		const std::uint32_t tcount = _stream->read_V32();
 		for (size_t j = 0; j < tcount; ++j) {
 			
             Trait t;
@@ -1172,11 +1172,11 @@ AbcBlock::read_scripts()
 bool
 AbcBlock::read_method_bodies()
 {
-	boost::uint32_t count = _stream->read_V32();
+	std::uint32_t count = _stream->read_V32();
 	log_abc("There are %u method bodies.", count);
 	for (unsigned int i = 0; i < count; ++i)
 	{
-		boost::uint32_t offset = _stream->read_V32();
+		std::uint32_t offset = _stream->read_V32();
 		log_abc("Method body %u method offset=%u", i, offset);
 
 		if (offset >= _methods.size()) {
@@ -1204,7 +1204,7 @@ AbcBlock::read_method_bodies()
 		method.setMaxScope(_stream->read_V32());
 		
         // Code length
-		boost::uint32_t clength = _stream->read_V32();
+		std::uint32_t clength = _stream->read_V32();
 		method.setBodyLength(clength);
 
 		// The code.
@@ -1219,7 +1219,7 @@ AbcBlock::read_method_bodies()
         // Note: catch type and variable name are documented to be
         // indices in the string pool, but they are in fact indices
         // in the multiname pool.
-		const boost::uint32_t ecount = _stream->read_V32();
+		const std::uint32_t ecount = _stream->read_V32();
 		for (unsigned int j = 0; j < ecount; ++j) {
 			asException *ex = mCH->newException();
 
@@ -1231,7 +1231,7 @@ AbcBlock::read_method_bodies()
 			ex->setCatch(_stream->read_V32());
 
 			// What types should be caught.
-			boost::uint32_t catch_type = _stream->read_V32();
+			std::uint32_t catch_type = _stream->read_V32();
 			if (catch_type >= _multinamePool.size()) {
 				log_error(_("ABC: Out of bound type for exception."));
 				return false;
@@ -1259,7 +1259,7 @@ AbcBlock::read_method_bodies()
 			// A variable name for the catch type.
 			// In version 46.15, no names.
 			if (mVersion != ((46 << 16) | 15)) {
-				boost::uint32_t cvn = _stream->read_V32();
+				std::uint32_t cvn = _stream->read_V32();
 				if (cvn >= _multinamePool.size()) {
 					log_error(_("ABC: Out of bound name for caught "
                                 "exception."));
@@ -1271,7 +1271,7 @@ AbcBlock::read_method_bodies()
 		} 
 
         // Traits
-		boost::uint32_t tcount = _stream->read_V32();
+		std::uint32_t tcount = _stream->read_V32();
 		for (unsigned int j = 0; j < tcount; ++j)
 		{
 			Trait t;
diff --git a/libcore/abc/AbcBlock.h b/libcore/abc/AbcBlock.h
index b75c422..2a25d0a 100644
--- a/libcore/abc/AbcBlock.h
+++ b/libcore/abc/AbcBlock.h
@@ -29,7 +29,6 @@
 
 #include <vector>
 #include <string>
-#include <boost/scoped_array.hpp>
 #include <stdexcept>
 
 namespace gnash {
@@ -132,9 +131,9 @@ private:
 
 	bool _hasValue;
 	Kind _kind;
-	boost::uint32_t _slotID;
-	boost::uint32_t _typeIndex;
-	boost::uint32_t _classInfoIndex;
+	std::uint32_t _slotID;
+	std::uint32_t _typeIndex;
+	std::uint32_t _classInfoIndex;
 	as_value _value;
 
 	URI _name;
@@ -273,7 +272,7 @@ public:
         return _scripts;
     }
 
-    boost::uint32_t uIntegerPoolAt(size_t i) const {
+    std::uint32_t uIntegerPoolAt(size_t i) const {
         checkBounds(i, _uIntegerPool);
         return _uIntegerPool[i];
     }
@@ -283,7 +282,7 @@ public:
         return _stringPool[i];
     }
 
-    boost::int32_t integerPoolAt(size_t i) const {
+    std::int32_t integerPoolAt(size_t i) const {
         checkBounds(i, _integerPool);
         return _integerPool[i];
     }
@@ -319,7 +318,7 @@ private:
 	
     friend class abc::Trait;
 
-	bool pool_value(boost::uint32_t index, PoolConstant type, as_value &v);
+	bool pool_value(std::uint32_t index, PoolConstant type, as_value &v);
 
 	bool read_version();
 	bool read_integer_constants();
@@ -336,18 +335,18 @@ private:
 	bool read_scripts();
 	bool read_method_bodies();
 
-	void check_multiname_name(boost::uint32_t name);
+	void check_multiname_name(std::uint32_t name);
 
-	void check_multiname_namespace(boost::uint32_t ns);
+	void check_multiname_namespace(std::uint32_t ns);
 
-	void check_multiname_namespaceset(boost::uint32_t nsset);
+	void check_multiname_namespaceset(std::uint32_t nsset);
 
 	void setMultinameNames(MultiName *n, abc::URI ABCName);
 
 	void setNamespaceURI(Namespace *ns, abc::URI ABCName);
 
-	std::vector<boost::int32_t> _integerPool;
-	std::vector<boost::uint32_t> _uIntegerPool;
+	std::vector<std::int32_t> _integerPool;
+	std::vector<std::uint32_t> _uIntegerPool;
 	std::vector<double> _doublePool;
 	std::vector<std::string> _stringPool;
 	std::vector<Namespace*> _namespacePool;
@@ -363,7 +362,7 @@ private:
 	abc::Class *mTheObject;
 	ClassHierarchy *mCH;
 
-	boost::uint32_t mVersion;
+	std::uint32_t mVersion;
 
 
 };
diff --git a/libcore/abc/Class.cpp b/libcore/abc/Class.cpp
index 37b2692..0faf13b 100644
--- a/libcore/abc/Class.cpp
+++ b/libcore/abc/Class.cpp
@@ -33,14 +33,14 @@
 #include "Method.h"
 #include "abc_function.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 
 namespace gnash {
 namespace abc {
 
 bool
 Class::addValue(string_table::key name, Namespace *ns,
-        boost::uint32_t slotId, Class *type, as_value& val, bool isconst,
+        std::uint32_t slotId, Class *type, as_value& val, bool isconst,
         bool isstatic)
 {
     Global_as* g = VM::get().getGlobal();
@@ -80,22 +80,22 @@ void
 Class::initTraits(AbcBlock& bl)
 {
     std::for_each(_instanceTraits.begin(), _instanceTraits.end(),
-            boost::bind(&Trait::finalize, _1, &bl));
+            std::bind(&Trait::finalize, _1, &bl));
 
     std::for_each(_staticTraits.begin(), _staticTraits.end(),
-            boost::bind(&Trait::finalize, _1, &bl));
+            std::bind(&Trait::finalize, _1, &bl));
 }
 
 bool
 Class::addMemberScript(string_table::key name, Namespace *ns,
-	boost::uint32_t slotId, Class *type, bool isstatic)
+	std::uint32_t slotId, Class *type, bool isstatic)
 {
 	return addSlot(name, ns, slotId, type, isstatic);
 }
 
 bool
 Class::addSlotFunction(string_table::key name, Namespace *ns,
-	boost::uint32_t slotId, Method *method, bool isstatic)
+	std::uint32_t slotId, Method *method, bool isstatic)
 {
 	Class a;
 	a.setName(NSV::CLASS_FUNCTION);
@@ -105,7 +105,7 @@ Class::addSlotFunction(string_table::key name, Namespace *ns,
 
 bool
 Class::addSlot(string_table::key name, Namespace* ns,
-        boost::uint32_t slotId, Class* /*type*/, bool /*isstatic*/)
+        std::uint32_t slotId, Class* /*type*/, bool /*isstatic*/)
 {
 	string_table::key nsname = ns ? ns->getURI() : 0;
 
@@ -172,7 +172,7 @@ Class::addSetter(string_table::key name, Namespace *ns, Method *method,
 
 #if 0 // TODO
 bool
-Class::addValue(string_table::key name, Namespace *ns, boost::uint32_t slotId,
+Class::addValue(string_table::key name, Namespace *ns, std::uint32_t slotId,
 	Class *type, as_value& val, bool isconst, bool isstatic,
 	ClassHierarchy *CH)
 {
@@ -185,7 +185,7 @@ Class::addValue(string_table::key name, Namespace *ns, boost::uint32_t slotId,
 }
 
 bool
-Class::addSlot(string_table::key name, Namespace *ns, boost::uint32_t slotId,
+Class::addSlot(string_table::key name, Namespace *ns, std::uint32_t slotId,
 	Class *type, bool isstatic, ClassHierarchy *CH)
 {
 	asBoundValue *bv = CH->newBoundValue();
@@ -207,7 +207,7 @@ Class::addMethod(string_table::key name, Namespace *ns, Method *method,
 
 bool
 Class::addMemberScript(string_table::key name, Namespace *ns,
-	boost::uint32_t slotId, Class *type, bool isstatic)
+	std::uint32_t slotId, Class *type, bool isstatic)
 {
 	if (!isstatic)
 		return addBinding(name, asBinding(ns, type, slotId, isstatic));
@@ -217,7 +217,7 @@ Class::addMemberScript(string_table::key name, Namespace *ns,
 // TODO: Figure out how this differs from addMethod
 bool
 Class::addSlotFunction(string_table::key name, Namespace *ns,
-	boost::uint32_t slotId, Method *method, bool isstatic)
+	std::uint32_t slotId, Method *method, bool isstatic)
 {
 	if (!isstatic)
 		return addBinding(name, asBinding(ns, method, slotId, isstatic));
diff --git a/libcore/abc/Class.h b/libcore/abc/Class.h
index 9143082..8a793ff 100644
--- a/libcore/abc/Class.h
+++ b/libcore/abc/Class.h
@@ -111,11 +111,11 @@ public:
 	void dump();
 
 	bool addValue(string_table::key name, Namespace *ns,
-            boost::uint32_t slotID, Class *type, as_value& val,
+            std::uint32_t slotID, Class *type, as_value& val,
             bool isconst, bool isstatic);
 
 	bool addSlot(string_table::key name, Namespace *ns,
-            boost::uint32_t slotID, Class *type, bool isstatic);
+            std::uint32_t slotID, Class *type, bool isstatic);
 
 	bool addMethod(string_table::key name, Namespace *ns, Method *method,
 		bool isstatic);
@@ -127,11 +127,11 @@ public:
 		bool isstatic);
 
 	bool addMemberScript(string_table::key name, Namespace *ns,
-		boost::uint32_t slotID, Class *type, bool isstatic);
+		std::uint32_t slotID, Class *type, bool isstatic);
 
 	// TODO: Figure out how this differs from addMethod
 	bool addSlotFunction(string_table::key name, Namespace *ns,
-		boost::uint32_t slotID, Method *method, bool isstatic);
+		std::uint32_t slotID, Method *method, bool isstatic);
 
 	/// Is the class final?
 	bool isFinal() const { return _final; }
diff --git a/libcore/abc/CodeStream.cpp b/libcore/abc/CodeStream.cpp
index 5141ffc..73776e7 100644
--- a/libcore/abc/CodeStream.cpp
+++ b/libcore/abc/CodeStream.cpp
@@ -23,13 +23,13 @@
 namespace gnash {
 
 /// Read a variable length encoded 32 bit unsigned integer
-boost::uint32_t
+std::uint32_t
 CodeStream::read_V32()
 {
 	char data;
 
 	read(&data,1);
-	boost::uint32_t result = data;
+	std::uint32_t result = data;
 	if (!(result & 0x00000080))	return result;
 
 	read(&data,1);
@@ -50,7 +50,7 @@ CodeStream::read_V32()
 }
 
 /// Read an opcode for ActionScript 3
-boost::uint8_t
+std::uint8_t
 CodeStream::read_as3op()
 {
 	char data;
@@ -59,7 +59,7 @@ CodeStream::read_as3op()
 		return 0;
 	}
 	else{
-		return static_cast<boost::uint8_t> (data);
+		return static_cast<std::uint8_t> (data);
 	}
 }
 
@@ -78,7 +78,7 @@ CodeStream::seekTo(unsigned int set)
 }
 
 //TODO: Is there a better way to read a 24 bit signed int?
-boost::int32_t
+std::int32_t
 CodeStream::read_S24()
 {
 	char buffer[3];
@@ -90,7 +90,7 @@ CodeStream::read_S24()
 	       	result |= -1 << 24;
    	}
 
-	return static_cast<boost::int32_t>(result);
+	return static_cast<std::int32_t>(result);
 }
 	
 /// Read a signed 8-bit character.
@@ -103,12 +103,12 @@ CodeStream::read_s8()
 }
 
 /// Read an unsigned 8-bit character.
-boost::uint8_t
+std::uint8_t
 CodeStream::read_u8()
 {
 	char data;
 	read(&data,1);
-	return static_cast<boost::uint8_t> (data);
+	return static_cast<std::uint8_t> (data);
 }
 
 /// Same as read_V32(), but doesn't bother with the arithmetic for
diff --git a/libcore/abc/CodeStream.h b/libcore/abc/CodeStream.h
index 8d8b826..17e5b21 100644
--- a/libcore/abc/CodeStream.h
+++ b/libcore/abc/CodeStream.h
@@ -22,7 +22,7 @@
 
 #include <string>
 #include <boost/utility.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <istream>
 #include <sstream>
 
@@ -45,10 +45,10 @@ public:
 	}
 
 /// Read a variable length encoded 32 bit unsigned integer
-boost::uint32_t read_V32();
+std::uint32_t read_V32();
 
 /// Read an opcode for ActionScript 3
-boost::uint8_t read_as3op();
+std::uint8_t read_as3op();
 
 /// Change the current position by a relative value.
 void seekBy(int change);
@@ -57,13 +57,13 @@ void seekBy(int change);
 void seekTo(unsigned int set);
 
 ///Read a signed 24 bit interger.
-boost::int32_t read_S24();
+std::int32_t read_S24();
 
 /// Read a signed 8-bit character.
 int8_t read_s8();
 
 /// Read an unsigned 8-bit character.
-boost::uint8_t read_u8();
+std::uint8_t read_u8();
 
 /// Same as read_V32(), but doesn't bother with the arithmetic for
 /// calculating the value.
diff --git a/libcore/abc/Method.cpp b/libcore/abc/Method.cpp
index 2faa041..4d5f6c2 100644
--- a/libcore/abc/Method.cpp
+++ b/libcore/abc/Method.cpp
@@ -28,7 +28,7 @@
 #include "VM.h"
 #include "namedStrings.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 
 namespace gnash {
 namespace abc {
@@ -60,8 +60,8 @@ Method::print_body()
 			return;
 		}
 		std::stringstream ss("Method Body:");
-		for(boost::uint32_t i = 0; i < _bodyLength ; ++i) {
-			const boost::uint8_t opcode = _body->read_as3op();
+		for(std::uint32_t i = 0; i < _bodyLength ; ++i) {
+			const std::uint8_t opcode = _body->read_as3op();
 			ss << "0x" << std::uppercase << std::hex << (opcode | 0x0) << " ";
 		}
 		_body->seekTo(0);
@@ -82,7 +82,7 @@ void
 Method::initTraits(AbcBlock& bl)
 {
     std::for_each(_traits.begin(), _traits.end(),
-            boost::bind(&Trait::finalize, _1, &bl));
+            std::bind(&Trait::finalize, _1, &bl));
 }
 
 void
@@ -93,7 +93,7 @@ Method::setReturnType(Class* /*type*/)
 
 bool
 Method::addValue(string_table::key name, Namespace *ns,
-        boost::uint32_t slotId, Class *type, as_value& val, bool isconst)
+        std::uint32_t slotId, Class *type, as_value& val, bool isconst)
 {
     Global_as* g = VM::get().getGlobal();
 	if (val.is_object()) {
@@ -160,13 +160,13 @@ Method::addSetter(string_table::key name, Namespace *ns, Method *method)
 
 bool
 Method::addMemberScript(string_table::key name, Namespace *ns,
-	boost::uint32_t slotId, Class *type)
+	std::uint32_t slotId, Class *type)
 {
 	return addSlot(name, ns, slotId, type);
 }
 
 bool
-Method::addSlot(string_table::key name, Namespace* ns, boost::uint32_t slotId,
+Method::addSlot(string_table::key name, Namespace* ns, std::uint32_t slotId,
 	Class* /*type*/)
 {
 	string_table::key nsname = ns ? ns->getURI() : string_table::key(0);
@@ -178,7 +178,7 @@ Method::addSlot(string_table::key name, Namespace* ns, boost::uint32_t slotId,
 
 bool
 Method::addSlotFunction(string_table::key name, Namespace *ns,
-	boost::uint32_t slotId, Method *method)
+	std::uint32_t slotId, Method *method)
 {
 	Class a;
 	a.setName(NSV::CLASS_FUNCTION);
diff --git a/libcore/abc/Method.h b/libcore/abc/Method.h
index 0aa6cd2..1dd5a26 100644
--- a/libcore/abc/Method.h
+++ b/libcore/abc/Method.h
@@ -58,47 +58,47 @@ public:
 
 	Method();
 
-    boost::uint32_t methodID() const {
+    std::uint32_t methodID() const {
         return _methodID;
     }
 
-    void setMethodID(boost::uint32_t m) {
+    void setMethodID(std::uint32_t m) {
         _methodID = m;
     }
 
 	void initPrototype(Machine* machine);
 
-	boost::uint32_t getMaxRegisters() { return _maxRegisters;}
+	std::uint32_t getMaxRegisters() { return _maxRegisters;}
 
-	void setMaxRegisters(boost::uint32_t maxRegisters) { 
+	void setMaxRegisters(std::uint32_t maxRegisters) {
         _maxRegisters = maxRegisters;
     }
 
-	boost::uint32_t getBodyLength(){ return _bodyLength;}
+	std::uint32_t getBodyLength(){ return _bodyLength;}
 
-	void setBodyLength(boost::uint32_t length){ _bodyLength = length;}
+	void setBodyLength(std::uint32_t length){ _bodyLength = length;}
 
-    void setMaxStack(boost::uint32_t max) {
+    void setMaxStack(std::uint32_t max) {
         _maxStack = max;
     }
  
-    boost::uint32_t maxStack() const {
+    std::uint32_t maxStack() const {
         return _maxStack;
     }
 
-    void setMaxScope(boost::uint32_t max) {
+    void setMaxScope(std::uint32_t max) {
         _maxScope = max;
     }
  
-    boost::uint32_t maxScope() const {
+    std::uint32_t maxScope() const {
         return _maxScope;
     }
     
-    void setScopeDepth(boost::uint32_t depth) {
+    void setScopeDepth(std::uint32_t depth) {
         _scopeDepth = depth;
     }
  
-    boost::uint32_t scopeDepth() const {
+    std::uint32_t scopeDepth() const {
         return _scopeDepth;
     }
 
@@ -137,10 +137,10 @@ public:
 	void setBody(CodeStream *b) { _body = b; }
 
 	bool addValue(string_table::key name, Namespace *ns,
-            boost::uint32_t slotID, Class *type, as_value& val, bool isconst);
+            std::uint32_t slotID, Class *type, as_value& val, bool isconst);
 
 	bool addSlot(string_table::key name, Namespace *ns,
-            boost::uint32_t slotID, Class *type);
+            std::uint32_t slotID, Class *type);
 
 	bool addMethod(string_table::key name, Namespace *ns, Method *method);
 
@@ -149,10 +149,10 @@ public:
 	bool addSetter(string_table::key name, Namespace *ns, Method *method);
 
 	bool addMemberScript(string_table::key name, Namespace *ns,
-		boost::uint32_t slotID, Class *type);
+		std::uint32_t slotID, Class *type);
 	
 	bool addSlotFunction(string_table::key name, Namespace *ns,
-		boost::uint32_t slotID, Method *method);
+		std::uint32_t slotID, Method *method);
 
 	/// \brief
 	/// Set the owner of this method.
@@ -275,23 +275,23 @@ private:
     
     std::vector<Trait> _traits;
 	
-    boost::uint32_t _methodID;
+    std::uint32_t _methodID;
 
     abc_function* _prototype;
 	int _minArguments;
 	int _maxArguments;
-	boost::uint32_t _bodyLength;
+	std::uint32_t _bodyLength;
 	bool _isNative;
 	ArgumentList _arguments;
 	std::list<as_value> _optionalArguments;
 	as_function* _implementation;
 	unsigned char _flags;
 	CodeStream* _body;
-	boost::uint32_t _maxRegisters;
+	std::uint32_t _maxRegisters;
 
-    boost::uint32_t _scopeDepth;
-    boost::uint32_t _maxScope;
-    boost::uint32_t _maxStack;
+    std::uint32_t _scopeDepth;
+    std::uint32_t _maxScope;
+    std::uint32_t _maxStack;
 
     bool _needsActivation;
 
diff --git a/libcore/abc/MultiName.h b/libcore/abc/MultiName.h
index e9b3696..d02481a 100644
--- a/libcore/abc/MultiName.h
+++ b/libcore/abc/MultiName.h
@@ -79,7 +79,7 @@ public:
         _flags = kind;
     }
 
-    boost::uint8_t flags() const {
+    std::uint8_t flags() const {
         return _flags;
     }
 
@@ -126,7 +126,7 @@ private:
 		FLAG_NSSET = 0x10
 	};
 
-    boost::uint8_t _flags;
+    std::uint8_t _flags;
 
     std::vector<Namespace*>* _namespaceSet;
 
diff --git a/libcore/abc/abc_function.h b/libcore/abc/abc_function.h
index fd3b2b3..b3358bf 100644
--- a/libcore/abc/abc_function.h
+++ b/libcore/abc/abc_function.h
@@ -49,7 +49,7 @@ public:
         return _methodInfo->getBody();
     }
 
-	boost::uint32_t getMaxRegisters() const {
+	std::uint32_t getMaxRegisters() const {
         return _methodInfo->getMaxRegisters();
     }
 
diff --git a/libcore/abc/asException.h b/libcore/abc/asException.h
index 73e381d..6baa4ac 100644
--- a/libcore/abc/asException.h
+++ b/libcore/abc/asException.h
@@ -31,18 +31,18 @@ namespace gnash {
 class asException
 {
 public:
-	void setStart(boost::uint32_t i) { _start = i; }
-	void setEnd(boost::uint32_t i) { mEnd = i; }
-	void setCatch(boost::uint32_t i) { mCatch = i; }
+	void setStart(std::uint32_t i) { _start = i; }
+	void setEnd(std::uint32_t i) { mEnd = i; }
+	void setCatch(std::uint32_t i) { mCatch = i; }
 	void catchAny() { mCatchAny = true; }
 	void setCatchType(abc::Class* p) { mCatchType = p; }
 	void setNamespace(abc::Namespace* n) { _namespace = n; }
 	void setName(string_table::key name) { _name = name; }
 
 private:
-	boost::uint32_t _start;
-	boost::uint32_t mEnd;
-	boost::uint32_t mCatch;
+	std::uint32_t _start;
+	std::uint32_t mEnd;
+	std::uint32_t mCatch;
 	bool mCatchAny;
 	abc::Class *mCatchType;
     abc::Namespace *_namespace;
diff --git a/libcore/as_environment.cpp b/libcore/as_environment.cpp
index dc03fc7..57c0676 100644
--- a/libcore/as_environment.cpp
+++ b/libcore/as_environment.cpp
@@ -88,7 +88,7 @@ namespace {
     as_value getVariableRaw(const as_environment& env,
         const std::string& varname,
         const as_environment::ScopeStack& scope,
-        as_object** retTarget = 0);
+        as_object** retTarget = nullptr);
 
     void setVariableRaw(const as_environment& env, const std::string& varname,
         const as_value& val, const as_environment::ScopeStack& scope);
@@ -107,8 +107,8 @@ as_environment::as_environment(VM& vm)
     :
     _vm(vm),
     _stack(_vm.getStack()),
-    _target(0),
-    _original_target(0)
+    _target(nullptr),
+    _original_target(nullptr)
 {
 }
 
@@ -135,13 +135,13 @@ findObject(const as_environment& ctx, const std::string& path,
     // Check if it's an absolute path
     if (*p == '/') {
 
-        MovieClip* root = 0;
+        MovieClip* root = nullptr;
         if (ctx.target()) root = ctx.target()->getAsRoot();
         else {
             if (ctx.get_original_target()) {
                 root = ctx.get_original_target()->getAsRoot();
             }
-            return 0;
+            return nullptr;
         }
 
         // If the path is just "/" return the root.
@@ -182,7 +182,7 @@ findObject(const as_environment& ctx, const std::string& path,
                 log_aserror(_("invalid path '%s' (p=next_slash=%s)"),
                 path, next_slash);
             );
-            return 0;
+            return nullptr;
         }
 
         if (next_slash) {
@@ -193,7 +193,7 @@ findObject(const as_environment& ctx, const std::string& path,
                         log_aserror(_("invalid path '%s' (dot not allowed "
                                 "after having seen a slash)"), path);
                     );
-                    return 0;
+                    return nullptr;
                 }
                 // No dot allowed after a double-dot.
                 if (next_slash[1] == '.') dot_allowed = false;
@@ -214,7 +214,7 @@ findObject(const as_environment& ctx, const std::string& path,
         const ObjectURI subpartURI(getURI(vm, subpart));
 
         if (!firstElementParsed) {
-            as_object* element(0);
+            as_object* element(nullptr);
 
             do {
                 // Try scope stack
@@ -252,7 +252,7 @@ findObject(const as_environment& ctx, const std::string& path,
 
             } while (0);
 
-            if (!element) return 0;
+            if (!element) return nullptr;
 
             env = element;
             firstElementParsed = true;
@@ -261,7 +261,7 @@ findObject(const as_environment& ctx, const std::string& path,
 
             assert(env);
             as_object* element = getElement(env, subpartURI);
-            if (!element) return 0;
+            if (!element) return nullptr;
             env = element;
         }
 
@@ -317,7 +317,7 @@ getVariable(const as_environment& env, const std::string& varname,
         if (target) {
             // ... but only if it resolves to a sprite
             DisplayObject* d = target->displayObject();
-            MovieClip* m = d ? d->to_movie() : 0;
+            MovieClip* m = d ? d->to_movie() : nullptr;
             if (m) return as_value(getObject(m));
         }
     }
@@ -539,7 +539,7 @@ getVariableRaw(const as_environment& env, const std::string& varname,
     // Looking for "this" 
     if (eq(key, NSV::PROP_THIS)) {
         val.set_as_object(getObject(env.get_original_target()));
-        if (retTarget) *retTarget = NULL; 
+        if (retTarget) *retTarget = nullptr;
         return val;
     }
 
@@ -549,7 +549,7 @@ getVariableRaw(const as_environment& env, const std::string& varname,
         log_debug("Took %s as _global, returning _global", varname);
 #endif
         // The "_global" ref was added in SWF6
-        if (retTarget) *retTarget = NULL; // correct ??
+        if (retTarget) *retTarget = nullptr; // correct ??
         return as_value(global);
     }
 
@@ -623,7 +623,7 @@ next_slash_or_dot(const char* word)
             return p;
         }
     }
-    return 0;
+    return nullptr;
 }
 
 } // unnamed namespace 
diff --git a/libcore/as_environment.h b/libcore/as_environment.h
index 2f6b677..13654fc 100644
--- a/libcore/as_environment.h
+++ b/libcore/as_environment.h
@@ -151,7 +151,7 @@ private:
 /// @param retTarget   If not null, the pointer will be set to the actual
 ///                    object containing the found variable (if found).
 as_value getVariable(const as_environment& ctx, const std::string& varname,
-    const as_environment::ScopeStack& scope, as_object** retTarget = 0);
+    const as_environment::ScopeStack& scope, as_object** retTarget = nullptr);
 
 /// Given a path to variable, set its value.
 //
@@ -206,7 +206,7 @@ DSOEXPORT bool parsePath(const std::string& var_path, std::string& path,
 /// @param path    Variable path. 
 /// @param scope   The Scope stack to use for lookups.
 DSOEXPORT as_object* findObject(const as_environment& ctx, const std::string& path,
-        const as_environment::ScopeStack* scope = 0);
+        const as_environment::ScopeStack* scope = nullptr);
 
 /// Find the DisplayObject referenced by the given path.
 //
diff --git a/libcore/as_function.cpp b/libcore/as_function.cpp
index 2a6484d..911d5d8 100644
--- a/libcore/as_function.cpp
+++ b/libcore/as_function.cpp
@@ -78,7 +78,7 @@ as_function::construct(as_object& newobj, const as_environment& env,
     
     // Don't set a super so that it will be constructed only if required
     // by the function.
-    fn_call fn(&newobj, env, args, 0, true);
+    fn_call fn(&newobj, env, args, nullptr, true);
     as_value ret;
 
     try {
diff --git a/libcore/as_object.cpp b/libcore/as_object.cpp
index f3a06ff..ed0a53a 100644
--- a/libcore/as_object.cpp
+++ b/libcore/as_object.cpp
@@ -52,7 +52,7 @@ public:
         _object(top),
         _uri(uri),
         _iterations(0),
-        _condition(cmp)
+        _condition(std::move(cmp))
     {
         _visited.insert(top);
     }
@@ -84,7 +84,7 @@ public:
     /// Return the wanted property if it exists and satisfies the predicate.
     //
     /// This will abort if there is no current object.
-    Property* getProperty(as_object** owner = 0) const {
+    Property* getProperty(as_object** owner = nullptr) const {
 
         assert(_object);
         Property* prop = _object->_members.getProperty(_uri);
@@ -93,7 +93,7 @@ public:
             if (owner) *owner = _object;
             return prop;
         }
-        return 0;
+        return nullptr;
     }
 
 private:
@@ -112,7 +112,7 @@ getConstructor(as_object& o)
 {
 	as_value ctorVal;
 	if (!o.get_member(NSV::PROP_uuCONSTRUCTORuu, &ctorVal)) {
-		return 0;
+		return nullptr;
 	}
 	return ctorVal.to_function();
 }
@@ -181,11 +181,11 @@ protected:
 private:
 
     as_object* prototype() {
-        return _super ? _super->get_prototype() : 0;
+        return _super ? _super->get_prototype() : nullptr;
     }
 
     as_function* constructor() {
-        return _super ? getConstructor(*_super) : 0;
+        return _super ? getConstructor(*_super) : nullptr;
     }
 
     as_object* _super;
@@ -200,15 +200,15 @@ as_super::get_super(const ObjectURI& fname)
 
     // Our class prototype is __proto__.
     as_object* proto = get_prototype(); 
-    if (!proto) return new as_super(getGlobal(*this), 0);
+    if (!proto) return new as_super(getGlobal(*this), nullptr);
 
     if (fname.empty() || getSWFVersion(*this) <= 6) {
         return new as_super(getGlobal(*this), proto);
     }
 
-    as_object* owner = 0;
+    as_object* owner = nullptr;
     proto->findProperty(fname, &owner);
-    if (!owner) return 0;
+    if (!owner) return nullptr;
 
     if (owner == proto) return new as_super(getGlobal(*this), proto);
 
@@ -280,9 +280,8 @@ const int as_object::DefaultFlags;
 as_object::as_object(const Global_as& gl)
     :
     GcResource(getRoot(gl).gc()),
-    _displayObject(0),
+    _displayObject(nullptr),
     _array(false),
-    _relay(0),
     _vm(getVM(gl)),
     _members(*this)
 {
@@ -291,9 +290,8 @@ as_object::as_object(const Global_as& gl)
 as_object::as_object(VM& vm)
     :
     GcResource(vm.getRoot().gc()),
-    _displayObject(0),
+    _displayObject(nullptr),
     _array(false),
-    _relay(0),
     _vm(vm),
     _members(*this)
 {
@@ -454,7 +452,7 @@ as_object::get_super(const ObjectURI& fname)
     as_object* proto = get_prototype();
 
     if ( ! fname.empty() && getSWFVersion(*this) > 6) {
-        as_object* owner = 0;
+        as_object* owner = nullptr;
         findProperty(fname, &owner);
         // should be 0 if findProperty returned 0
         if (owner != this) proto = owner; 
@@ -489,7 +487,7 @@ as_object::findProperty(const ObjectURI& uri, as_object** owner)
     } while (pr());
 
     // No Property found
-    return 0;
+    return nullptr;
 }
 
 Property*
@@ -513,7 +511,7 @@ as_object::findUpdatableProperty(const ObjectURI& uri)
             }
         }
     }
-    return 0;
+    return nullptr;
 }
 
 void
@@ -558,8 +556,9 @@ as_object::executeTriggers(Property* prop, const ObjectURI& uri,
     const as_value& newVal = trig.call(curVal, val, *this);
     
     // This is a particularly clear and concise way of removing dead triggers.
-    EraseIf(*_trigs, boost::bind(boost::mem_fn(&Trigger::dead), 
-             boost::bind(&TriggerContainer::value_type::second, _1)));
+    EraseIf(*_trigs, std::bind(std::mem_fn(&Trigger::dead),
+             std::bind(&TriggerContainer::value_type::second,
+             std::placeholders::_1)));
                     
     // The trigger call could have deleted the property,
     // so we check for its existence again, and do NOT put
@@ -615,7 +614,7 @@ as_object::set_member(const ObjectURI& uri, const as_value& val, bool ifFound)
                 if ((prop->isGetterSetter()) && visible(*prop, version)) {
                     break;
                 }
-                else prop = 0;
+                else prop = nullptr;
             }
         }
     }
@@ -935,8 +934,8 @@ as_object::get_prototype() const
     int swfVersion = getSWFVersion(*this);
     
     Property* prop = _members.getProperty(NSV::PROP_uuPROTOuu);
-    if (!prop) return 0;
-    if (!visible(*prop, swfVersion)) return 0;
+    if (!prop) return nullptr;
+    if (!visible(*prop, swfVersion)) return nullptr;
     
     const as_value& proto = prop->getValue(*this);
     
@@ -1090,8 +1089,8 @@ as_object*
 getPathElement(as_object& o, const ObjectURI& uri)
 {
     as_value tmp;
-    if (!o.get_member(uri, &tmp)) return 0;
-    if (!tmp.is_object()) return 0;
+    if (!o.get_member(uri, &tmp)) return nullptr;
+    if (!tmp.is_object()) return nullptr;
     return toObject(tmp, getVM(o));
 }
 
@@ -1111,7 +1110,7 @@ getObjectWithPrototype(Global_as& gl, const ObjectURI& c)
 {
     as_object* ctor = toObject(getMember(gl, c), getVM(gl));
     as_object* proto = ctor ? 
-        toObject(getMember(*ctor, NSV::PROP_PROTOTYPE), getVM(gl)) : 0;
+        toObject(getMember(*ctor, NSV::PROP_PROTOTYPE), getVM(gl)) : nullptr;
 
     as_object* o = createObject(gl);
     o->set_prototype(proto ? proto : as_value());
diff --git a/libcore/as_object.h b/libcore/as_object.h
index 639b49b..00db6cd 100644
--- a/libcore/as_object.h
+++ b/libcore/as_object.h
@@ -27,7 +27,7 @@
 #include <vector>
 #include <cmath>
 #include <utility> 
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include <boost/noncopyable.hpp>
 
 #include "GC.h" // for inheritance from GcResource (to complete)
@@ -60,12 +60,12 @@ class Trigger
 {
 public:
 
-    Trigger(const std::string& propname, as_function& trig,
-            const as_value& customArg)
+    Trigger(std::string propname, as_function& trig,
+            as_value customArg)
         :
-        _propname(propname),
+        _propname(std::move(propname)),
         _func(&trig),
-        _customArg(customArg),
+        _customArg(std::move(customArg)),
         _executing(false),
         _dead(false)
     {}
@@ -199,7 +199,7 @@ public:
     ///                 an inherited property.
     /// @returns        A property if found and visible, NULL if not found or
     ///                 not visible in current VM version
-    Property* findProperty(const ObjectURI& uri, as_object** owner = 0);
+    Property* findProperty(const ObjectURI& uri, as_object** owner = nullptr);
 
     /// Return a reference to this as_object's global object.
     VM& vm() const {
@@ -468,7 +468,7 @@ public:
     void set_member_flags(const ObjectURI& uri, int setTrue, int setFalse = 0);
 
     /// Cast to a as_function, or return NULL
-    virtual as_function* to_function() { return 0; }
+    virtual as_function* to_function() { return nullptr; }
 
     /// Return true if this is a 'super' object
     virtual bool isSuper() const { return false; }
@@ -707,7 +707,7 @@ private:
     //
     /// This is owned by the as_object and destroyed when the as_object's
     /// destructor is called.
-    boost::scoped_ptr<Relay> _relay;
+    std::unique_ptr<Relay> _relay;
 
     /// The VM containing this object.
     VM& _vm;
@@ -722,7 +722,7 @@ private:
     std::vector<as_object*> _interfaces;
 
     typedef std::map<ObjectURI, Trigger, ObjectURI::LessThan> TriggerContainer;
-    boost::scoped_ptr<TriggerContainer> _trigs;
+    std::unique_ptr<TriggerContainer> _trigs;
 };
 
 /// Send a system event
@@ -841,7 +841,7 @@ template<typename T>
 T*
 get(as_object* o)
 {
-    if (!o) return 0;
+    if (!o) return nullptr;
     return dynamic_cast<T*>(o->displayObject());
 }
 
diff --git a/libcore/as_value.cpp b/libcore/as_value.cpp
index 98b347c..62039f0 100644
--- a/libcore/as_value.cpp
+++ b/libcore/as_value.cpp
@@ -20,7 +20,6 @@
 
 #include "as_value.h"
 
-#include <boost/shared_ptr.hpp>
 #include <cmath> 
 #include <cctype> 
 #include <boost/lexical_cast.hpp>
@@ -88,12 +87,12 @@ enum Base
 /// @param base     The base (8 or 16) to use.
 /// @param s        The string to parse.
 /// @return         The converted number.
-boost::int32_t
+std::int32_t
 parsePositiveInt(const std::string& s, Base base, bool whole = true)
 {
 
     std::istringstream is(s);
-    boost::uint32_t target;
+    std::uint32_t target;
 
     switch (base)
     {
@@ -272,7 +271,7 @@ as_value::to_primitive(AsType hint) const
     // TODO: implement as_object::DefaultValue (ECMA-262 - 8.6.2.6)
 
     as_value method;
-    as_object* obj(0);
+    as_object* obj(nullptr);
 
     if (hint == NUMBER) {
         assert(_type == OBJECT);
@@ -473,24 +472,24 @@ as_value::to_object(VM& vm) const
 
         default:
             // Invalid to convert exceptions.
-            return NULL;
+            return nullptr;
     }
 }
 
 MovieClip*
 as_value::toMovieClip(bool allowUnloaded) const
 {
-    if (_type != DISPLAYOBJECT) return 0;
+    if (_type != DISPLAYOBJECT) return nullptr;
 
     DisplayObject *ch = getCharacter(allowUnloaded);
-    if (!ch) return 0;
+    if (!ch) return nullptr;
     return ch->to_movie();
 }
 
 DisplayObject*
 as_value::toDisplayObject(bool allowUnloaded) const
 {
-    if (_type != DISPLAYOBJECT) return 0;
+    if (_type != DISPLAYOBJECT) return nullptr;
     return getCharacter(allowUnloaded);
 }
 
@@ -503,7 +502,7 @@ as_value::to_function() const
         return getObj()->to_function();
     }
 
-    return 0;
+    return nullptr;
 }
 
 as_object*
@@ -513,7 +512,7 @@ as_value::get_object() const
         return getObj();
     }
 
-    return 0;
+    return nullptr;
 }
 
 void
@@ -643,7 +642,7 @@ as_value::typeOf() const
         default:
             if (is_exception()) return "exception";
             std::abort();
-            return 0;
+            return nullptr;
     }
 }
 
diff --git a/libcore/as_value.h b/libcore/as_value.h
index 0adc302..22ac59a 100644
--- a/libcore/as_value.h
+++ b/libcore/as_value.h
@@ -23,8 +23,8 @@
 #include <string>
 #include <boost/variant.hpp>
 #include <iosfwd> // for inlined output operator
-#include <boost/utility/enable_if.hpp>
-#include <boost/cstdint.hpp>
+#include <type_traits>
+#include <cstdint>
 
 #include "utility.h" // for UNUSED
 #include "dsodefs.h" // for DSOTEXPORT
@@ -132,6 +132,14 @@ public:
     {
     }
 
+    /// Move constructor.
+    DSOEXPORT as_value(as_value&& other)
+        : _type(other._type),
+          _value(std::move(other._value))
+    {
+        other._type = UNDEFINED;
+    }
+
     ~as_value() {}
     
     /// Construct a primitive String value 
@@ -142,15 +150,15 @@ public:
     {}
 
     /// Construct a primitive String value 
-    DSOEXPORT as_value(const std::string& str)
+    DSOEXPORT as_value(std::string str)
         :
         _type(STRING),
-        _value(std::string(str))
+        _value(std::move(str))
     {}
     
     /// Construct a primitive Boolean value
     template <typename T>
-    as_value(T val, typename boost::enable_if<boost::is_same<bool, T> >::type*
+    as_value(T val, typename std::enable_if<std::is_same<bool, T>::value>::type*
              dummy = 0)
         :
         _type(BOOLEAN),
@@ -182,6 +190,14 @@ public:
         return *this;
     }
 
+    DSOEXPORT as_value& operator=(as_value&& other)
+    {
+        _type = other._type;
+        _value = std::move(other._value);
+        other._type = UNDEFINED;
+        return *this;
+    }
+
     friend std::ostream& operator<<(std::ostream& o, const as_value&);
     
     /// Return the primitive type of this value as a string.
diff --git a/libcore/asobj/ASConversions.cpp b/libcore/asobj/ASConversions.cpp
index caba969..08c019a 100644
--- a/libcore/asobj/ASConversions.cpp
+++ b/libcore/asobj/ASConversions.cpp
@@ -20,7 +20,7 @@
 
 #include "ASConversions.h"
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <cmath>
 #include <limits>
 
@@ -38,7 +38,7 @@ namespace gnash {
 
 namespace {
     // Handle overflows from AS ColorTransform double.
-    inline boost::int16_t truncateDouble(double d);
+    inline std::int16_t truncateDouble(double d);
 }
 
 SWFMatrix
@@ -64,18 +64,18 @@ toSWFMatrix(as_object& m)
     }
 
     // Convert input matrix to SWFMatrix.
-    const boost::int32_t a = truncateWithFactor<65536>(
+    const std::int32_t a = truncateWithFactor<65536>(
             toNumber(getMember(m, NSV::PROP_A), vm));
-    const boost::int32_t b = truncateWithFactor<65536>(
+    const std::int32_t b = truncateWithFactor<65536>(
             toNumber(getMember(m, NSV::PROP_B), vm));
-    const boost::int32_t c = truncateWithFactor<65536>(
+    const std::int32_t c = truncateWithFactor<65536>(
             toNumber(getMember(m, NSV::PROP_C), vm));
-    const boost::int32_t d = truncateWithFactor<65536>(
+    const std::int32_t d = truncateWithFactor<65536>(
             toNumber(getMember(m, NSV::PROP_D), vm));
 
-    const boost::int32_t tx = pixelsToTwips(
+    const std::int32_t tx = pixelsToTwips(
             toNumber(getMember(m, NSV::PROP_TX), vm));
-    const boost::int32_t ty = pixelsToTwips(
+    const std::int32_t ty = pixelsToTwips(
             toNumber(getMember(m, NSV::PROP_TY), vm));
     return SWFMatrix(a, b, c, d, tx, ty);
 
@@ -99,16 +99,16 @@ toCxForm(const ColorTransform_as& tr)
 
 namespace {
 
-inline boost::int16_t
+inline std::int16_t
 truncateDouble(double d)
 {
 
-    if (d > std::numeric_limits<boost::int16_t>::max() ||
-        d < std::numeric_limits<boost::int16_t>::min())
+    if (d > std::numeric_limits<std::int16_t>::max() ||
+        d < std::numeric_limits<std::int16_t>::min())
     {
-       return std::numeric_limits<boost::int16_t>::min();
+       return std::numeric_limits<std::int16_t>::min();
     }
-    return static_cast<boost::int16_t>(d);
+    return static_cast<std::int16_t>(d);
 }
 
 }
diff --git a/libcore/asobj/Array_as.cpp b/libcore/asobj/Array_as.cpp
index 80b3803..98118ac 100644
--- a/libcore/asobj/Array_as.cpp
+++ b/libcore/asobj/Array_as.cpp
@@ -23,6 +23,8 @@
 #include <string>
 #include <algorithm>
 #include <cmath>
+#include <functional>
+#include <iterator>
 #include <boost/algorithm/string/case_conv.hpp>
 #include <boost/lexical_cast.hpp>
 
@@ -63,7 +65,7 @@ namespace {
 
     struct indexed_as_value;
 
-    typedef boost::function2<bool, const as_value&, const as_value&> as_cmp_fn;
+    typedef std::function<bool(const as_value&, const as_value&)> as_cmp_fn;
 
     void attachArrayInterface(as_object& proto);
     void attachArrayStatics(as_object& proto);
@@ -117,8 +119,8 @@ struct indexed_as_value : public as_value
 {
     int vec_index;
     
-    indexed_as_value(const as_value& val, int index)
-	: as_value(val)
+    indexed_as_value(as_value val, int index)
+	: as_value(std::move(val))
 	{
 	    vec_index = index;
 	}
@@ -153,7 +155,7 @@ class PushToIndexedVector
 public:
     PushToIndexedVector(std::vector<indexed_as_value>& v) : _v(v), _i(0) {}
     void operator()(const as_value& val) {
-        _v.push_back(indexed_as_value(val, _i));
+        _v.emplace_back(val, _i);
         ++_i;
     }
 private:
@@ -215,8 +217,10 @@ inplaceMerge(IterType begin, IterType middle, const IterType& end, ComparatorTyp
             // Find the first element that is not less than next_high. Then, shift all
             // elements before that element one position to the left, and copy
             // next_high into the vacant spot.
-            IterType it = std::find_if(middle, end, !boost::bind<bool>(compare, _1, next_high));
-            std::copy(boost::next(middle), it, middle);
+            IterType it = std::find_if(middle, end, 
+                [&](const value_type& v) { return !compare(v, next_high); });
+
+            std::copy(std::next(middle), it, middle);
             *(--it) = next_high;
         }
         ++begin;
@@ -581,7 +585,7 @@ struct as_value_num_nocase_eq : public as_value_lt
 // Note:
 // SORT_UNIQUE and SORT_RETURN_INDEX must first be stripped from the flag
 as_cmp_fn
-get_basic_cmp(boost::uint8_t flags, const fn_call& fn)
+get_basic_cmp(std::uint8_t flags, const fn_call& fn)
 {
     as_cmp_fn f;
 
@@ -638,7 +642,7 @@ get_basic_cmp(boost::uint8_t flags, const fn_call& fn)
 // Note:
 // SORT_UNIQUE and SORT_RETURN_INDEX must first be stripped from the flag
 as_cmp_fn
-get_basic_eq(boost::uint8_t flags, const fn_call& fn)
+get_basic_eq(std::uint8_t flags, const fn_call& fn)
 {
     as_cmp_fn f;
     flags &= ~(SORT_DESCENDING);
@@ -707,8 +711,8 @@ public:
     // Note: cmpfn must implement a strict weak ordering
     as_value_prop(ObjectURI name, as_cmp_fn cmpfn, const as_object& o)
         :
-        _comp(cmpfn),
-        _prop(name),
+        _comp(std::move(cmpfn)),
+        _prop(std::move(name)),
         _obj(o)
     {
     }
@@ -823,8 +827,8 @@ private:
 
 // Convenience function to strip SORT_UNIQUE and SORT_RETURN_INDEX from sort
 // flag. Presence of flags recorded in douniq and doindex.
-inline boost::uint8_t
-flag_preprocess(boost::uint8_t flgs, bool* douniq, bool* doindex)
+inline std::uint8_t
+flag_preprocess(std::uint8_t flgs, bool* douniq, bool* doindex)
 {
     *douniq = (flgs & SORT_UNIQUE);
     *doindex = (flgs & SORT_RETURN_INDEX);
@@ -865,7 +869,7 @@ private:
 class GetMultiFlags
 {
 public:
-    GetMultiFlags(std::vector<boost::uint8_t>& v, const fn_call& fn)
+    GetMultiFlags(std::vector<std::uint8_t>& v, const fn_call& fn)
         :
         _v(v),
         _i(0),
@@ -876,15 +880,15 @@ public:
     void operator()(const as_value& val) {
         // extract SORT_UNIQUE and SORT_RETURN_INDEX from first flag
         if (!_i) {
-            boost::uint8_t flag =
-                static_cast<boost::uint8_t>(toNumber(val, getVM(_fn)));
+            std::uint8_t flag =
+                static_cast<std::uint8_t>(toNumber(val, getVM(_fn)));
             flag = flag_preprocess(flag, &_uniq, &_index);
             _v.push_back(flag);
             ++_i;
             return;
         }
-        boost::uint8_t flag = 
-                static_cast<boost::uint8_t>(toNumber(val, getVM(_fn)));
+        std::uint8_t flag =
+                static_cast<std::uint8_t>(toNumber(val, getVM(_fn)));
         flag &= ~(SORT_RETURN_INDEX);
         flag &= ~(SORT_UNIQUE);
         _v.push_back(flag);
@@ -894,7 +898,7 @@ public:
     bool index() const { return _index; }
 
 private:
-    std::vector<boost::uint8_t>& _v;
+    std::vector<std::uint8_t>& _v;
     size_t _i;
     bool _uniq;
     bool _index;
@@ -991,7 +995,7 @@ ObjectURI
 arrayKey(VM& vm, size_t i)
 {
     // TODO: tell getURI that the string is already lowercase!
-    return getURI(vm, boost::lexical_cast<std::string>(i), true);
+    return getURI(vm, std::to_string(i), true);
 }
 
 namespace {
@@ -1117,10 +1121,10 @@ array_sort(const fn_call& fn)
     
     if (fn.arg(0).is_undefined()) return as_value();
 
-    boost::uint8_t flags = 0;
+    std::uint8_t flags = 0;
 
     if (fn.nargs == 1 && fn.arg(0).is_number()) {
-        flags = static_cast<boost::uint8_t>(toNumber(fn.arg(0), getVM(fn)));
+        flags = static_cast<std::uint8_t>(toNumber(fn.arg(0), getVM(fn)));
     }
     else if (fn.arg(0).is_function()) {
         // Get comparison function
@@ -1131,7 +1135,7 @@ array_sort(const fn_call& fn)
         bool (*icmp)(int);
     
         if (fn.nargs == 2 && fn.arg(1).is_number()) {
-            flags=static_cast<boost::uint8_t>(toNumber(fn.arg(1), getVM(fn)));
+            flags=static_cast<std::uint8_t>(toNumber(fn.arg(1), getVM(fn)));
         }
 
         if (flags & SORT_DESCENDING) icmp = &int_lt_or_eq;
@@ -1179,7 +1183,7 @@ array_sortOn(const fn_call& fn)
     as_object* array = ensure<ValidThis>(fn);
 
     bool do_unique = false, do_index = false;
-    boost::uint8_t flags = 0;
+    std::uint8_t flags = 0;
 
     const int version = getSWFVersion(fn);
     VM& vm = getVM(fn);
@@ -1193,7 +1197,7 @@ array_sortOn(const fn_call& fn)
             getURI(vm, fn.arg(0).to_string(version));
 
         if (fn.nargs > 1 && fn.arg(1).is_number()) {
-            flags = static_cast<boost::uint8_t>(toNumber(fn.arg(1), getVM(fn)));
+            flags = static_cast<std::uint8_t>(toNumber(fn.arg(1), getVM(fn)));
             flags = flag_preprocess(flags, &do_unique, &do_index);
         }
 
@@ -1246,13 +1250,13 @@ array_sortOn(const fn_call& fn)
             // Only an array will do for this case.
             if (farray->array() && arrayLength(*farray) == optnum) {
 
-                std::vector<boost::uint8_t> flgs;
+                std::vector<std::uint8_t> flgs;
                 GetMultiFlags mf(flgs, fn);
                 foreachArray(*farray, mf);
                 do_unique = mf.unique();
                 do_index = mf.index();
                 
-                std::vector<boost::uint8_t>::const_iterator it = 
+                std::vector<std::uint8_t>::const_iterator it =
                     flgs.begin();
 
                 while (it != flgs.end()) {
@@ -1272,8 +1276,8 @@ array_sortOn(const fn_call& fn)
         }
         // case: sortOn(["prop1", "prop2"], Array.FLAG)
         else {
-            boost::uint8_t flags = 
-                static_cast<boost::uint8_t>(toInt(fn.arg(1), getVM(fn)));
+            std::uint8_t flags =
+                static_cast<std::uint8_t>(toInt(fn.arg(1), getVM(fn)));
             flags = flag_preprocess(flags, &do_unique, &do_index);
             as_cmp_fn c = get_basic_cmp(flags, fn);
 
@@ -1517,7 +1521,7 @@ array_new(const fn_call& fn)
     as_object* ao = fn.isInstantiation() ? ensure<ValidThis>(fn) :
                                            getGlobal(fn).createArray();
 
-    ao->setRelay(0);
+    ao->setRelay(nullptr);
     ao->setArray();
     ao->init_member(NSV::PROP_LENGTH, 0.0);
 
@@ -1555,7 +1559,7 @@ join(as_object* array, const std::string& separator)
 
     for (size_t i = 0; i < size; ++i) {
         if (i) s += separator;
-        const std::string& index = boost::lexical_cast<std::string>(i);
+        const std::string& index = std::to_string(i);
         const as_value& el = getOwnProperty(*array, getURI(vm, index));
         s += el.to_string(version);
     }
@@ -1597,9 +1601,8 @@ void foreachArray(as_object& array, int start, int end, T& pred)
 void
 pushIndices(as_object& o, const std::vector<indexed_as_value>& elems)
 {
-    for (std::vector<indexed_as_value>::const_iterator it = elems.begin();
-        it != elems.end(); ++it) {
-        callMethod(&o, NSV::PROP_PUSH, it->vec_index);
+    for (const auto& elem : elems) {
+        callMethod(&o, NSV::PROP_PUSH, elem.vec_index);
     }
 }
 
diff --git a/libcore/asobj/AsBroadcaster.cpp b/libcore/asobj/AsBroadcaster.cpp
index 198f325..88a3db6 100644
--- a/libcore/asobj/AsBroadcaster.cpp
+++ b/libcore/asobj/AsBroadcaster.cpp
@@ -217,7 +217,7 @@ AsBroadcaster::init(as_object& where, const ObjectURI& uri)
 {
     // AsBroadcaster is a class, even though it doesn't look much like one.
     // Its prototype has no properties.
-    registerBuiltinClass(where, emptyFunction, 0,
+    registerBuiltinClass(where, emptyFunction, nullptr,
             attachAsBroadcasterStaticInterface, uri);
 }
 
diff --git a/libcore/asobj/Camera_as.cpp b/libcore/asobj/Camera_as.cpp
index 0fb3878..485b9d5 100644
--- a/libcore/asobj/Camera_as.cpp
+++ b/libcore/asobj/Camera_as.cpp
@@ -20,7 +20,7 @@
 #include "Camera_as.h"
 
 #include <sstream>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include <memory>
 
 #include "as_object.h" // for inheritance
@@ -153,7 +153,7 @@ class Camera_as: public Relay
 {
 public:
 
-    Camera_as(std::auto_ptr<media::VideoInput> input)
+    Camera_as(std::unique_ptr<media::VideoInput> input)
         :
         _input(input.release()),
         _loopback(false)
@@ -229,7 +229,7 @@ public:
 
 private:
 
-    boost::scoped_ptr<media::VideoInput> _input;
+    std::unique_ptr<media::VideoInput> _input;
 
     // TODO: see whether this should be handled in the VideoInput class
     bool _loopback;
@@ -259,7 +259,7 @@ camera_get(const fn_call& fn)
         log_error(_("No MediaHandler exists! Cannot create a Camera object"));
         return as_value();
     }
-    std::auto_ptr<media::VideoInput> input(handler->getVideoInput(0));
+    std::unique_ptr<media::VideoInput> input(handler->getVideoInput(0));
 
     if (!input.get()) {
         // TODO: what should happen if the index is not available?
@@ -280,7 +280,7 @@ camera_get(const fn_call& fn)
     attachCameraInterface(*cam_obj);
     attachCameraProperties(*cam_obj);
 
-    cam_obj->setRelay(new Camera_as(input));
+    cam_obj->setRelay(new Camera_as(std::move(input)));
 
     return as_value(cam_obj); 
 }
diff --git a/libcore/asobj/Color_as.cpp b/libcore/asobj/Color_as.cpp
index 7cb526f..ae61ea3 100644
--- a/libcore/asobj/Color_as.cpp
+++ b/libcore/asobj/Color_as.cpp
@@ -44,7 +44,7 @@ namespace {
 
     void attachColorInterface(as_object& o);
     inline void parseColorTransProp(as_object& obj, const ObjectURI& key,
-            boost::int16_t& target, bool scale);
+            std::int16_t& target, bool scale);
     inline MovieClip* getTarget(as_object* obj, const fn_call& fn);
 }
 
@@ -64,7 +64,7 @@ void
 color_class_init(as_object& where, const ObjectURI& uri)
 {
     as_object* cl = registerBuiltinClass(where, color_ctor,
-            attachColorInterface, 0, uri);
+            attachColorInterface, nullptr, uri);
 
     as_object* proto = toObject(
         getMember(*cl, NSV::PROP_PROTOTYPE), getVM(where));
@@ -110,7 +110,7 @@ color_getrgb(const fn_call& fn)
     const int g = trans.gb;
     const int b = trans.bb;
 
-    const boost::int32_t rgb = (r<<16) | (g<<8) | b;
+    const std::int32_t rgb = (r<<16) | (g<<8) | b;
 
 	return as_value(rgb);
 }
@@ -158,16 +158,16 @@ color_setrgb(const fn_call& fn)
     MovieClip* sp = getTarget(obj, fn);
     if (!sp) return as_value();
 
-	boost::int32_t color = toInt(fn.arg(0), getVM(fn));
+	std::int32_t color = toInt(fn.arg(0), getVM(fn));
 
 	const int r = (color & 0xff0000) >> 16;
 	const int g = (color & 0x00ff00) >> 8;
 	const int b = (color & 0x0000ff);
 
 	SWFCxForm newTrans = getCxForm(*sp);
-	newTrans.rb = static_cast<boost::int16_t>(r);
-	newTrans.gb = static_cast<boost::int16_t>(g);
-	newTrans.bb = static_cast<boost::int16_t>(b);
+	newTrans.rb = static_cast<std::int16_t>(r);
+	newTrans.gb = static_cast<std::int16_t>(g);
+	newTrans.bb = static_cast<std::int16_t>(b);
 	newTrans.ra = 0;
 	newTrans.ga = 0;
 	newTrans.ba = 0;
@@ -243,14 +243,14 @@ color_ctor(const fn_call& fn)
     obj->set_member(NSV::PROP_TARGET, target);
 
     Global_as& gl = getGlobal(fn);
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, obj, null, 7);
 
 	return as_value(); 
 }
 
 inline void
-parseColorTransProp(as_object& obj, const ObjectURI& key, boost::int16_t&
+parseColorTransProp(as_object& obj, const ObjectURI& key, std::int16_t&
         target, bool scale)
 {
 	as_value tmp;
@@ -258,10 +258,10 @@ parseColorTransProp(as_object& obj, const ObjectURI& key, boost::int16_t&
     
 	const double d = toNumber(tmp, getVM(obj));
 	if (scale) {   
-        target = static_cast<boost::int16_t>(d * 2.56);
+        target = static_cast<std::int16_t>(d * 2.56);
     }
 	else {
-        target = static_cast<boost::int16_t>(d);
+        target = static_cast<std::int16_t>(d);
     }
 }
 
@@ -275,7 +275,7 @@ getTarget(as_object* obj, const fn_call& fn)
     if (sp) return sp;
     DisplayObject* o = findTarget(fn.env(), target.to_string());
     if (o) return o->to_movie();
-    return 0;
+    return nullptr;
 }
 
 } // anonymous namespace 
diff --git a/libcore/asobj/ContextMenuItem_as.cpp b/libcore/asobj/ContextMenuItem_as.cpp
index f8f11b4..5a97954 100644
--- a/libcore/asobj/ContextMenuItem_as.cpp
+++ b/libcore/asobj/ContextMenuItem_as.cpp
@@ -40,7 +40,7 @@ void
 contextmenuitem_class_init(as_object& where, const ObjectURI& uri)
 {
     registerBuiltinClass(where, contextmenuitem_ctor,
-            attachContextMenuItemInterface, 0, uri);
+            attachContextMenuItemInterface, nullptr, uri);
 }
 
 namespace {
diff --git a/libcore/asobj/ContextMenu_as.cpp b/libcore/asobj/ContextMenu_as.cpp
index 7d7f306..8134bae 100644
--- a/libcore/asobj/ContextMenu_as.cpp
+++ b/libcore/asobj/ContextMenu_as.cpp
@@ -45,7 +45,7 @@ void
 contextmenu_class_init(as_object& where, const ObjectURI& uri)
 {
     registerBuiltinClass(where, contextmenu_ctor, attachContextMenuInterface,
-            0, uri);
+            nullptr, uri);
 }
 
 
@@ -58,7 +58,7 @@ namespace {
 class CopyMenuItems
 {
 public:
-    CopyMenuItems(const ObjectURI& c, as_object& nc) : _c(c), _target(nc) {}
+    CopyMenuItems(ObjectURI c, as_object& nc) : _c(std::move(c)), _target(nc) {}
 
     void operator()(const as_value& val) {
         as_object* obj = toObject(val, getVM(_target));
diff --git a/libcore/asobj/Date_as.cpp b/libcore/asobj/Date_as.cpp
index ee5d12b..e518c86 100644
--- a/libcore/asobj/Date_as.cpp
+++ b/libcore/asobj/Date_as.cpp
@@ -89,15 +89,15 @@ namespace {
     // A time struct to contain the broken-down time.
     struct GnashTime
     {
-        boost::int32_t millisecond;
-        boost::int32_t second;
-        boost::int32_t minute;
-        boost::int32_t hour;
-        boost::int32_t monthday;
-        boost::int32_t weekday;
-        boost::int32_t month;
-        boost::int32_t year;
-        boost::int32_t timeZoneOffset;
+        std::int32_t millisecond;
+        std::int32_t second;
+        std::int32_t minute;
+        std::int32_t hour;
+        std::int32_t monthday;
+        std::int32_t weekday;
+        std::int32_t month;
+        std::int32_t year;
+        std::int32_t timeZoneOffset;
     };
 
     static const int daysInMonth[2][12] = {
@@ -281,15 +281,15 @@ namespace {
 
 // Helpers for calendar algorithms
 inline bool
-isLeapYear(boost::int32_t year)
+isLeapYear(std::int32_t year)
 {
     return !((year + 1900) % 400) ||
             ( !((year + 1900) % 4) && ((year + 1900) % 100));
 }
 
 
-inline boost::int32_t
-countLeapYears(boost::int32_t year)
+inline std::int32_t
+countLeapYears(std::int32_t year)
 {
     return year / 4 - year / 100 + year / 400;
 }
@@ -517,7 +517,7 @@ bool invalidDate(double timeValue)
 /// @param timeValue    The time value to break into elements.
 /// @param adjustment   Adjust the result by this amount (used for full year).
 template<typename T>
-inline as_value timeElement(T dateFunc, boost::int32_t GnashTime::* element,
+inline as_value timeElement(T dateFunc, std::int32_t GnashTime::* element,
         double timeValue, int adjustment = 0)
 {
     if (invalidDate(timeValue)) return as_value();
@@ -766,6 +766,9 @@ date_setTime(const fn_call& fn)
 // if an additional extra parameter is passed, switch to working in UTC
 // instead. Apart from the bottom-level conversions they are identical.
 
+// If the Date object has been set to NaN previously (see date_setTime()),
+// then all functions that set Date components are no-ops.
+
 void
 gnashTimeToDate(GnashTime& gt, Date_as& date, bool utc)
 {
@@ -839,15 +842,15 @@ date_setfullyear(const fn_call& fn)
     else if (rogue_date_args(fn, 3) != 0.0) {
         date->setTimeValue(NaN);
     }
-    else {
+    else if (!isNaN(date->getTimeValue())) {
         GnashTime gt;
         dateToGnashTime(*date, gt, utc);
         gt.year = toInt(fn.arg(0), getVM(fn)) - 1900;
         if (fn.nargs >= 2) gt.month = toInt(fn.arg(1), getVM(fn));
         if (fn.nargs >= 3) gt.monthday = toInt(fn.arg(2), getVM(fn));
         gnashTimeToDate(gt, *date, utc);
-  }
-  return as_value(date->getTimeValue());
+    }
+    return as_value(date->getTimeValue());
 }
 
 /// \brief Date.setYear(year[,month[,day]])
@@ -879,7 +882,7 @@ date_setYear(const fn_call& fn)
     else if (rogue_date_args(fn, 3) != 0.0) {
         date->setTimeValue(NaN);
     }
-    else {
+    else if (!isNaN(date->getTimeValue())) {
         GnashTime gt;
 
         dateToGnashTime(*date, gt, false);
@@ -934,7 +937,7 @@ date_setmonth(const fn_call& fn)
     else if (rogue_date_args(fn, 2) != 0.0) {
         date->setTimeValue(NaN);
     }
-    else {
+    else if (!isNaN(date->getTimeValue())) {
 
         GnashTime gt;
 
@@ -986,7 +989,7 @@ date_setDate(const fn_call& fn)
       date->setTimeValue(NaN);  // Is what FlashPlayer sets
   } else if (rogue_date_args(fn, 1) != 0.0) {
       date->setTimeValue(NaN);
-  } else {
+  } else if (!isNaN(date->getTimeValue())) {
     GnashTime gt;
 
     dateToGnashTime(*date, gt, utc);
@@ -1030,7 +1033,7 @@ date_setHours(const fn_call& fn)
     else if (rogue_date_args(fn, 4) != 0.0) {
         date->setTimeValue(NaN);
     }
-    else {
+    else if (!isNaN(date->getTimeValue())) {
       
         GnashTime gt;
 
@@ -1076,7 +1079,7 @@ date_setMinutes(const fn_call& fn)
     else if (rogue_date_args(fn, 3) != 0.0) {
         date->setTimeValue(NaN);
     }
-    else {
+    else if (!isNaN(date->getTimeValue())) {
         GnashTime gt;
 
         dateToGnashTime(*date, gt, utc);
@@ -1116,7 +1119,7 @@ date_setSeconds(const fn_call& fn)
     else if (rogue_date_args(fn, 2) != 0.0) {
         date->setTimeValue(NaN);
     }
-    else {
+    else if (!isNaN(date->getTimeValue())) {
         // We *could* set seconds [and milliseconds] without breaking the
         // structure out and reasembling it. We do it the same way as the
         // rest for simplicity and in case anyone's date routines ever
@@ -1154,7 +1157,7 @@ date_setMilliseconds(const fn_call& fn)
     else if (rogue_date_args(fn, 1) != 0.0) {
         date->setTimeValue(NaN);
     }
-    else {
+    else if (!isNaN(date->getTimeValue())) {
     
         GnashTime gt;
 
@@ -1266,7 +1269,7 @@ date_UTC(const fn_call& fn) {
         case 2:   // these last two are always performed
             gt.month = toInt(fn.arg(1), getVM(fn));
             {
-                boost::int32_t year = 0;
+                std::int32_t year = 0;
                 truncateDouble(year, toNumber(fn.arg(0), getVM(fn)));
                 if (year < 100) gt.year = year;
                 else gt.year = year - 1900;
@@ -1366,13 +1369,13 @@ makeTimeValue(GnashTime& t)
     // Now work out the years from 1970 in days.
 
     // Use a temporary 1970-based year for clarity.
-    const boost::int32_t ouryear = t.year - 70;
+    const std::int32_t ouryear = t.year - 70;
     
     // Count the leap years between 1970-1-1 and the beginning of our year.
     // 1970 - 1972: no leap years
     // 1970 - 1968: one leap year
     // Adding one less than the required year gives this behaviour.
-    boost::int32_t day = countLeapYears(ouryear + 1969) - countLeapYears(1970);
+    std::int32_t day = countLeapYears(ouryear + 1969) - countLeapYears(1970);
     day += ouryear * 365;
 
     /// The year 0 was a leap year, but countLeapYears won't calculate it.
@@ -1401,10 +1404,10 @@ makeTimeValue(GnashTime& t)
 // The brute force way of converting days into years since the epoch.
 // This also reduces the number of days accurately. Its disadvantage is,
 // of course, that it iterates; its advantage that it's always correct.
-boost::int32_t
-getYearBruteForce(boost::int32_t& days)
+std::int32_t
+getYearBruteForce(std::int32_t& days)
 {
-    boost::int32_t year = 1970;
+    std::int32_t year = 1970;
 
     // Handle 400-year blocks - which always have the same
     // number of days (14097) - to cut down on iterations.
@@ -1448,11 +1451,11 @@ fillGnashTime(double t, GnashTime& gt)
     // Get the sub-day part of the time, if any and reduce time
     // to number of complete days.
     // This is a safe cast.
-    boost::int32_t remainder = 
-        static_cast<boost::int32_t>(std::fmod(time, 86400.0));
+    std::int32_t remainder =
+        static_cast<std::int32_t>(std::fmod(time, 86400.0));
 
     // This could overflow.
-    boost::int32_t days;
+    std::int32_t days;
     truncateDouble(days, time / 86400.0); // complete days
    
     gt.second = remainder % 60;
diff --git a/libcore/asobj/Error_as.cpp b/libcore/asobj/Error_as.cpp
index 447d9fd..97d242d 100644
--- a/libcore/asobj/Error_as.cpp
+++ b/libcore/asobj/Error_as.cpp
@@ -45,7 +45,7 @@ namespace {
 void
 Error_class_init(as_object& where, const ObjectURI& uri)
 {
-    registerBuiltinClass(where, error_ctor, attachErrorInterface, 0, uri);   
+    registerBuiltinClass(where, error_ctor, attachErrorInterface, nullptr, uri);
 }
 
 
diff --git a/libcore/asobj/Function_as.cpp b/libcore/asobj/Function_as.cpp
index 32839a6..f276109 100644
--- a/libcore/asobj/Function_as.cpp
+++ b/libcore/asobj/Function_as.cpp
@@ -119,7 +119,7 @@ function_apply(const fn_call& fn)
         // detrimental effect on memory usage!
         // Normal supers will be created when needed in the function
         // call.
-        new_fn_call.super = 0;
+        new_fn_call.super = nullptr;
 
 		// Check for second argument ('arguments' array)
 		if (fn.nargs > 1) {
@@ -161,7 +161,7 @@ function_call(const fn_call& fn)
     else tp = toObject(fn.arg(0), getVM(fn));
 
     new_fn_call.this_ptr = tp;
-    new_fn_call.super = 0;
+    new_fn_call.super = nullptr;
     if (fn.nargs) new_fn_call.drop_bottom();
 
 	// Call the function 
diff --git a/libcore/asobj/Global_as.cpp b/libcore/asobj/Global_as.cpp
index 5f18296..952e6b5 100644
--- a/libcore/asobj/Global_as.cpp
+++ b/libcore/asobj/Global_as.cpp
@@ -28,7 +28,6 @@
 #include <limits> 
 #include <sstream>
 #include <boost/lexical_cast.hpp>
-#include <boost/assign/list_of.hpp>
 
 #include "as_object.h"
 #include "builtin_function.h"
@@ -147,7 +146,7 @@ Global_as::Global_as(VM& vm)
 #ifdef USE_EXTENSIONS
     _et(new Extension()),
 #endif
-    _classes(this, _et.get()),
+    _classes(this),
     _objectProto(new as_object(*this))
 {
 }
@@ -344,41 +343,41 @@ avm1Classes()
     // Since we maintain separate lists for AVM1 and AVM2, these are all
     // considered to be in the 'Global' namespace (AVM1 has no namespaces)
     // An ObjectURI constructed without a namespace is in the global namespace.
-    static const ClassHierarchy::NativeClasses s = boost::assign::list_of
-
-        (N(system_class_init, NSV::CLASS_SYSTEM, 1))
-        (N(stage_class_init, NSV::CLASS_STAGE, 1))
-        (N(movieclip_class_init, NSV::CLASS_MOVIE_CLIP, 3))
-        (N(textfield_class_init, NSV::CLASS_TEXT_FIELD, 3))
-        (N(math_class_init, NSV::CLASS_MATH, 4))
-        (N(boolean_class_init, NSV::CLASS_BOOLEAN, 5))
-        (N(button_class_init, NSV::CLASS_BUTTON, 5))
-        (N(color_class_init, NSV::CLASS_COLOR, 5))
-        (N(selection_class_init, NSV::CLASS_SELECTION, 5))
-        (N(sound_class_init, NSV::CLASS_SOUND, 5))
-        (N(xmlsocket_class_init, NSV::CLASS_XMLSOCKET, 5))
-        (N(date_class_init, NSV::CLASS_DATE, 5))
-        (N(xmlnode_class_init, NSV::CLASS_XMLNODE, 5))
-        (N(xml_class_init, NSV::CLASS_XML, 5))
-        (N(mouse_class_init, NSV::CLASS_MOUSE, 5))
-        (N(number_class_init, NSV::CLASS_NUMBER, 5))
-        (N(textformat_class_init, NSV::CLASS_TEXT_FORMAT, 5))
-        (N(key_class_init, NSV::CLASS_KEY, 5))
-        (N(AsBroadcaster::init, NSV::CLASS_AS_BROADCASTER, 5))
-        (N(textsnapshot_class_init, NSV::CLASS_TEXT_SNAPSHOT, 5))
-        (N(video_class_init, NSV::CLASS_VIDEO, 6))
-        (N(camera_class_init, NSV::CLASS_CAMERA, 5))
-        (N(microphone_class_init, NSV::CLASS_MICROPHONE, 5))
-        (N(sharedobject_class_init, NSV::CLASS_SHARED_OBJECT, 5))
-        (N(loadvars_class_init, NSV::CLASS_LOAD_VARS, 5))
-        (N(localconnection_class_init, NSV::CLASS_LOCALCONNECTION, 6))
-        (N(netconnection_class_init, NSV::CLASS_NET_CONNECTION, 6))
-        (N(netstream_class_init, NSV::CLASS_NET_STREAM, 6))
-        (N(contextmenu_class_init, NSV::CLASS_CONTEXTMENU, 5))
-        (N(contextmenuitem_class_init, NSV::CLASS_CONTEXTMENUITEM, 5))
-        (N(moviecliploader_class_init, NSV::CLASS_MOVIE_CLIP_LOADER, 5))
-        (N(Error_class_init, NSV::CLASS_ERROR, 5))
-        (N(accessibility_class_init, NSV::CLASS_ACCESSIBILITY, 5));
+    static const ClassHierarchy::NativeClasses s = {
+        N(system_class_init, NSV::CLASS_SYSTEM, 1),
+        N(stage_class_init, NSV::CLASS_STAGE, 1),
+        N(movieclip_class_init, NSV::CLASS_MOVIE_CLIP, 3),
+        N(textfield_class_init, NSV::CLASS_TEXT_FIELD, 3),
+        N(math_class_init, NSV::CLASS_MATH, 4),
+        N(boolean_class_init, NSV::CLASS_BOOLEAN, 5),
+        N(button_class_init, NSV::CLASS_BUTTON, 5),
+        N(color_class_init, NSV::CLASS_COLOR, 5),
+        N(selection_class_init, NSV::CLASS_SELECTION, 5),
+        N(sound_class_init, NSV::CLASS_SOUND, 5),
+        N(xmlsocket_class_init, NSV::CLASS_XMLSOCKET, 5),
+        N(date_class_init, NSV::CLASS_DATE, 5),
+        N(xmlnode_class_init, NSV::CLASS_XMLNODE, 5),
+        N(xml_class_init, NSV::CLASS_XML, 5),
+        N(mouse_class_init, NSV::CLASS_MOUSE, 5),
+        N(number_class_init, NSV::CLASS_NUMBER, 5),
+        N(textformat_class_init, NSV::CLASS_TEXT_FORMAT, 5),
+        N(key_class_init, NSV::CLASS_KEY, 5),
+        N(AsBroadcaster::init, NSV::CLASS_AS_BROADCASTER, 5),
+        N(textsnapshot_class_init, NSV::CLASS_TEXT_SNAPSHOT, 5),
+        N(video_class_init, NSV::CLASS_VIDEO, 6),
+        N(camera_class_init, NSV::CLASS_CAMERA, 5),
+        N(microphone_class_init, NSV::CLASS_MICROPHONE, 5),
+        N(sharedobject_class_init, NSV::CLASS_SHARED_OBJECT, 5),
+        N(loadvars_class_init, NSV::CLASS_LOAD_VARS, 5),
+        N(localconnection_class_init, NSV::CLASS_LOCALCONNECTION, 6),
+        N(netconnection_class_init, NSV::CLASS_NET_CONNECTION, 6),
+        N(netstream_class_init, NSV::CLASS_NET_STREAM, 6),
+        N(contextmenu_class_init, NSV::CLASS_CONTEXTMENU, 5),
+        N(contextmenuitem_class_init, NSV::CLASS_CONTEXTMENUITEM, 5),
+        N(moviecliploader_class_init, NSV::CLASS_MOVIE_CLIP_LOADER, 5),
+        N(Error_class_init, NSV::CLASS_ERROR, 5),
+        N(accessibility_class_init, NSV::CLASS_ACCESSIBILITY, 5)
+    };
 
     return s;
 }
@@ -757,7 +756,7 @@ global_assetnative(const fn_call& fn)
 
     const std::string& props = fn.arg(2).to_string();
     const int minor =
-        fn.nargs > 3 ? std::max<boost::int32_t>(toInt(fn.arg(3), getVM(fn)), 0) : 0;
+        fn.nargs > 3 ? std::max<std::int32_t>(toInt(fn.arg(3), getVM(fn)), 0) : 0;
 
     std::string::const_iterator pos = props.begin();
 
@@ -826,7 +825,7 @@ global_assetnativeaccessor(const fn_call& fn)
 
     const std::string& props = fn.arg(2).to_string();
     const int minor =
-        fn.nargs > 3 ? std::max<boost::int32_t>(toInt(fn.arg(3), getVM(fn)), 0) : 0;
+        fn.nargs > 3 ? std::max<std::int32_t>(toInt(fn.arg(3), getVM(fn)), 0) : 0;
 
     std::string::const_iterator pos = props.begin();
 
@@ -995,7 +994,7 @@ global_setInterval(const fn_call& fn)
 		args += fn.arg(i);
 	}
 
-	std::auto_ptr<Timer> timer;
+	std::unique_ptr<Timer> timer;
 	if (as_func) {
 		timer.reset(new Timer(*as_func, ms, fn.this_ptr, args));
 	}
@@ -1006,7 +1005,7 @@ global_setInterval(const fn_call& fn)
 	movie_root& root = getRoot(fn);
 
     // TODO: check what should happen to overflows.
-	const int id = root.addIntervalTimer(timer);
+	const int id = root.addIntervalTimer(std::move(timer));
 	return as_value(id);
 }
 
@@ -1065,7 +1064,7 @@ global_setTimeout(const fn_call& fn)
 		args += fn.arg(i);
 	}
 
-	std::auto_ptr<Timer> timer;
+	std::unique_ptr<Timer> timer;
 	if (as_func) {
 		timer.reset(new Timer(*as_func, ms, fn.this_ptr, args, true));
 	}
@@ -1076,7 +1075,7 @@ global_setTimeout(const fn_call& fn)
 	movie_root& root = getRoot(fn);
 
     // TODO: check what should happen to overflows.
-	const int id = root.addIntervalTimer(timer);
+	const int id = root.addIntervalTimer(std::move(timer));
 	return as_value(id);
 }
   
@@ -1090,7 +1089,7 @@ global_clearInterval(const fn_call& fn)
         return as_value();
     }
 
-    const boost::uint32_t id = toInt(fn.arg(0), getVM(fn));
+    const std::uint32_t id = toInt(fn.arg(0), getVM(fn));
 
 	movie_root& root = getRoot(fn);
 	return as_value(root.clearIntervalTimer(id));
diff --git a/libcore/asobj/Global_as.h b/libcore/asobj/Global_as.h
index e8cae06..a8a581c 100644
--- a/libcore/asobj/Global_as.h
+++ b/libcore/asobj/Global_as.h
@@ -21,13 +21,7 @@
 #define GNASH_GLOBAL_H
 
 #include <string>
-#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>
-#include <boost/preprocessor/facilities/empty.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #include "as_object.h" 
 #include "fn_call.h"
@@ -89,7 +83,7 @@ protected:
 private:
 
     void loadExtensions();
-    boost::scoped_ptr<Extension> _et;
+    std::unique_ptr<Extension> _et;
 
     ClassHierarchy _classes;
     
@@ -170,8 +164,8 @@ registerBuiltinClass(as_object& where, Global_as::ASFunction ctor,
 /// The call will fail harmlessly if the as_value is not callable.
 inline DSOEXPORT as_value
 invoke(const as_value& method, const as_environment& env, as_object* this_ptr,
-        fn_call::Args& args, as_object* super = 0,
-        const movie_definition* callerDef = 0)
+        fn_call::Args& args, as_object* super = nullptr,
+        const movie_definition* callerDef = nullptr)
 {
 
 	as_value val;
@@ -201,13 +195,9 @@ invoke(const as_value& method, const as_environment& env, as_object* this_ptr,
 	return val;
 }
 
-/// Helper macros for callMethod arguments.
-#define FUNC_PARAM(z, n, t) BOOST_PP_COMMA_IF(n) t arg##n
-#define VALUE_ARG(z, n, t) BOOST_PP_COMMA_IF(n) arg##n
-
 /// Call a member function of this object in an AS-compatible way
 //
-/// This is a macro to cope with a varying number of arguments. The function
+/// This is a variadic function to cope with a varying number of arguments. Its
 /// signature is as follows:
 //
 /// as_value callMethod(as_object* obj, const ObjectURI& uri,
@@ -224,26 +214,33 @@ invoke(const as_value& method, const as_environment& env, as_object* this_ptr,
 /// @param arg0..argN   The arguments to pass
 ///
 /// @return             The return value of the call (possibly undefined).
-#define CALL_METHOD(x, n, t) \
-inline as_value \
-callMethod(as_object* obj, const ObjectURI& uri BOOST_PP_COMMA_IF(n)\
-        BOOST_PP_REPEAT(n, FUNC_PARAM, const as_value&)) {\
-    if (!obj) return as_value();\
-    as_value func;\
-    if (!obj->get_member(uri, &func)) return as_value();\
-    fn_call::Args args;\
-    BOOST_PP_EXPR_IF(n, (args += BOOST_PP_REPEAT(n, VALUE_ARG, BOOST_PP_EMPTY));)\
-    return invoke(func, as_environment(getVM(*obj)), obj, args);\
+
+inline as_value
+callMethod(fn_call::Args& args, as_object* obj, const ObjectURI& uri)
+{
+    if (!obj) return as_value();
+    as_value func;
+    if (!obj->get_member(uri, &func)) return as_value();
+
+    return invoke(func, as_environment(getVM(*obj)), obj, args);
+}
+
+template <typename Param, typename... Params>
+inline as_value
+callMethod(fn_call::Args& args, as_object* obj, const ObjectURI& uri, Param param, Params... params)
+{
+    args += param;
+    return callMethod(args, obj, uri, params...);
 }
 
-/// The maximum number of as_value arguments allowed in callMethod functions.
-#define MAX_ARGS 4
-BOOST_PP_REPEAT(BOOST_PP_INC(MAX_ARGS), CALL_METHOD, BOOST_PP_EMPTY)
 
-#undef VALUE_ARG
-#undef FUNC_PARAM
-#undef MAX_ARGS
-#undef CALL_METHOD
+template <typename... Params>
+inline as_value
+callMethod(as_object* obj, const ObjectURI& uri, Params... params)
+{
+    fn_call::Args args;
+    return callMethod(args, obj, uri, params...);
+}
 
 /// Convenience function for finding a class constructor.
 //
diff --git a/libcore/asobj/Key_as.cpp b/libcore/asobj/Key_as.cpp
index dfcc9e1..66bf755 100644
--- a/libcore/asobj/Key_as.cpp
+++ b/libcore/asobj/Key_as.cpp
@@ -162,7 +162,7 @@ key_class_init(as_object& where, const ObjectURI& uri)
 
     // All properties are protected using ASSetPropFlags.
     Global_as& gl = getGlobal(where);
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, key, null, 7);
 }
 
diff --git a/libcore/asobj/LoadVars_as.cpp b/libcore/asobj/LoadVars_as.cpp
index 756d5d1..a376fda 100644
--- a/libcore/asobj/LoadVars_as.cpp
+++ b/libcore/asobj/LoadVars_as.cpp
@@ -52,7 +52,7 @@ namespace {
 void
 loadvars_class_init(as_object& where, const ObjectURI& uri)
 {
-    registerBuiltinClass(where, loadvars_ctor, attachLoadVarsInterface, 0, uri);
+    registerBuiltinClass(where, loadvars_ctor, attachLoadVarsInterface, nullptr, uri);
 }
 
 namespace {
diff --git a/libcore/asobj/LoadableObject.cpp b/libcore/asobj/LoadableObject.cpp
index 959591a..ca514d5 100644
--- a/libcore/asobj/LoadableObject.cpp
+++ b/libcore/asobj/LoadableObject.cpp
@@ -342,7 +342,7 @@ loadableobject_sendAndLoad(const fn_call& fn)
 
     URL url(urlstr, ri.streamProvider().baseURL());
 
-    std::auto_ptr<IOChannel> str;
+    std::unique_ptr<IOChannel> str;
 
     if (post) {
         as_value customHeaders;
@@ -401,7 +401,7 @@ loadableobject_sendAndLoad(const fn_call& fn)
     /// All objects get a loaded member, set to false.
     target->set_member(NSV::PROP_LOADED, false);
 
-    mr.addLoadableObject(target, str);
+    mr.addLoadableObject(target, std::move(str));
     return as_value(true);
 }
 
@@ -437,10 +437,10 @@ loadableobject_load(const fn_call& fn)
     URL url(urlstr, ri.streamProvider().baseURL());
 
     // Checks whether access is allowed.
-    std::auto_ptr<IOChannel> str(ri.streamProvider().getStream(url));
+    std::unique_ptr<IOChannel> str(ri.streamProvider().getStream(url));
 
     movie_root& mr = getRoot(fn);
-    mr.addLoadableObject(obj, str);
+    mr.addLoadableObject(obj, std::move(str));
 
     obj->set_member(NSV::PROP_uBYTES_LOADED, 0.0);
     obj->set_member(NSV::PROP_uBYTES_TOTAL, as_value());
diff --git a/libcore/asobj/LocalConnection_as.cpp b/libcore/asobj/LocalConnection_as.cpp
index d147f72..705d3a9 100644
--- a/libcore/asobj/LocalConnection_as.cpp
+++ b/libcore/asobj/LocalConnection_as.cpp
@@ -19,12 +19,10 @@
 
 #include "LocalConnection_as.h"
 
-#include <boost/shared_ptr.hpp>
 #include <cerrno>
 #include <cstring>
-#include <boost/cstdint.hpp> // for boost::?int??_t
-#include <boost/assign/list_of.hpp>
-#include <boost/bind.hpp>
+#include <cstdint> // for boost::?int??_t
+#include <functional>
 
 #include "GnashSystemIOHeaders.h"
 
@@ -141,7 +139,7 @@ namespace {
     bool findListener(const std::string& name, SharedMem& mem);
     void getMarker(SharedMem::iterator& i, SharedMem::iterator end);
     void markRead(SharedMem& m);
-    inline boost::uint32_t getTimestamp(const VM& vm);
+    inline std::uint32_t getTimestamp(const VM& vm);
 
     /// Read the AMF data and invoke the function.
     void executeAMFFunction(as_object& owner, amf::Reader& rd);
@@ -149,14 +147,14 @@ namespace {
     struct ConnectionData
     {
         std::string name;
-        boost::uint32_t ts;
+        std::uint32_t ts;
         SimpleBuffer data; 
     };
 }
 
 
 void
-writeLong(boost::uint8_t*& ptr, boost::uint32_t i)
+writeLong(std::uint8_t*& ptr, std::uint32_t i)
 {
     *ptr = i & 0xff;
     ++ptr;
@@ -168,9 +166,9 @@ writeLong(boost::uint8_t*& ptr, boost::uint32_t i)
     ++ptr;
 }
 
-inline boost::uint32_t
-readLong(const boost::uint8_t* buf) {
-	boost::uint32_t s = buf[0] | buf[1] << 8 | buf[2] << 16 | buf[3] << 24;
+inline std::uint32_t
+readLong(const std::uint8_t* buf) {
+	std::uint32_t s = buf[0] | buf[1] << 8 | buf[2] << 16 | buf[3] << 24;
 	return s;
 }
 
@@ -226,12 +224,12 @@ public:
 
     void connect(const std::string& name);
 
-    void send(boost::shared_ptr<ConnectionData> d)
+    void send(std::unique_ptr<ConnectionData> d)
     {
         assert(d.get());
         VM& vm = getVM(owner());
         d->ts = getTimestamp(vm);
-        _queue.push_back(d);
+        _queue.push_back(std::move(d));
         
         // Register callback so we can send the data on the next advance.
         movie_root& mr = getRoot(owner());
@@ -250,10 +248,10 @@ private:
 
     SharedMem _shm;
 
-    std::deque<boost::shared_ptr<ConnectionData> > _queue;
+    std::deque<std::unique_ptr<ConnectionData>> _queue;
 
     // The timestamp of our last write to the shared memory.
-    boost::uint32_t _lastTime;
+    std::uint32_t _lastTime;
 
 };
 
@@ -303,8 +301,8 @@ LocalConnection_as::update()
 
     // These are not network byte order by default, but not sure about 
     // host byte order.
-    const boost::uint32_t timestamp = readLong(ptr + 8);
-    const boost::uint32_t size = readLong(ptr + 12);
+    const std::uint32_t timestamp = readLong(ptr + 8);
+    const std::uint32_t size = readLong(ptr + 12);
 
     // As long as there is a timestamp in the shared memory, we mustn't
     // write anything.
@@ -318,10 +316,10 @@ LocalConnection_as::update()
     if (timestamp) {
 
         // Start after 16-byte header.
-        const boost::uint8_t* b = ptr + 16;
+        const std::uint8_t* b = ptr + 16;
 
         // End at reported size of AMF sequence.
-        const boost::uint8_t* end = b + size;
+        const std::uint8_t* end = b + size;
 
         amf::Reader rd(b, end, getGlobal(owner()));
         as_value a;
@@ -341,7 +339,7 @@ LocalConnection_as::update()
             const size_t timeout = 4 * 1000;
 
             VM& vm = getVM(owner());
-            const boost::uint32_t timeNow = getTimestamp(vm);
+            const std::uint32_t timeNow = getTimestamp(vm);
 
             if (timeNow - timestamp > timeout) {
                 log_debug("Data %s expired at %s. Removing its target "
@@ -378,7 +376,7 @@ LocalConnection_as::update()
     }
 
     // Get the first buffer.
-    boost::shared_ptr<ConnectionData> cd = _queue.front();
+    std::unique_ptr<ConnectionData> cd = std::move(_queue.front());
     _queue.pop_front();
 
     // If the correct listener isn't there, iterate until we find one or
@@ -389,7 +387,7 @@ LocalConnection_as::update()
             cd->ts = 0;
             break;
         }
-        cd = _queue.front();
+        cd = std::move(_queue.front());
         _queue.pop_front();
     }
 
@@ -484,7 +482,7 @@ void
 localconnection_class_init(as_object& where, const ObjectURI& uri)
 {
     registerBuiltinClass(where, localconnection_new,
-            attachLocalConnectionInterface, 0, uri);
+            attachLocalConnectionInterface, nullptr, uri);
 }
 
 void
@@ -615,7 +613,7 @@ localconnection_send(const fn_call& fn)
         return as_value(false);
     }
     
-    boost::shared_ptr<ConnectionData> cd(new ConnectionData());
+    std::unique_ptr<ConnectionData> cd(new ConnectionData());
 
     SimpleBuffer& buf = cd->data;
 
@@ -635,7 +633,7 @@ localconnection_send(const fn_call& fn)
 
     cd->name = name;
 
-    relay->send(cd);
+    relay->send(std::move(cd));
 
     return as_value(true);
 }
@@ -660,17 +658,17 @@ validFunctionName(const std::string& func)
 
     typedef std::vector<std::string> ReservedNames;
 
-    static const ReservedNames reserved = boost::assign::list_of
-        ("send")
-        ("onStatus")
-        ("close")
-        ("connect")
-        ("domain")
-        ("allowDomain");
+    static const ReservedNames reserved = {
+        "send",
+        "onStatus",
+        "close",
+        "connect",
+        "domain",
+        "allowDomain"};
 
     const ReservedNames::const_iterator it =
         std::find_if(reserved.begin(), reserved.end(),
-                boost::bind(StringNoCaseEqual(), _1, func));
+                std::bind(StringNoCaseEqual(), std::placeholders::_1, func));
         
     return (it == reserved.end());
 }
@@ -688,7 +686,7 @@ removeListener(const std::string& name, SharedMem& mem)
     // No listeners if the first byte is 0.
     if (!*ptr) return;
 
-    SharedMem::iterator found = 0;
+    SharedMem::iterator found = nullptr;
 
     SharedMem::iterator next;
     
@@ -916,7 +914,7 @@ markRead(SharedMem& m)
 /// Version 10 fails if it recieves a value outside the signed 32-bit int
 /// range, so we surmise that there is an undocumented conversion to signed
 /// in that player. We make sure the value never exceeds 0x7fffffff.
-inline boost::uint32_t
+inline std::uint32_t
 getTimestamp(const VM& vm)
 {
     return vm.getTime() & 0x7fffffff;
diff --git a/libcore/asobj/Microphone_as.cpp b/libcore/asobj/Microphone_as.cpp
index 3502b04..0128ba2 100644
--- a/libcore/asobj/Microphone_as.cpp
+++ b/libcore/asobj/Microphone_as.cpp
@@ -21,7 +21,6 @@
 #include "Microphone_as.h"
 
 #include <algorithm>
-#include <boost/scoped_ptr.hpp>
 #include <memory>
 
 #include "as_object.h" // for inheritance
@@ -144,7 +143,7 @@ class Microphone_as : public Relay
 
 public:
 
-    Microphone_as(std::auto_ptr<media::AudioInput> input)
+    Microphone_as(std::unique_ptr<media::AudioInput> input)
         :
         _input(input.release())
     {
@@ -226,7 +225,7 @@ public:
     }
 
 private:
-    boost::scoped_ptr<media::AudioInput> _input;
+    std::unique_ptr<media::AudioInput> _input;
 
 };
 
@@ -253,7 +252,7 @@ microphone_get(const fn_call& fn)
                     "object"));
         return as_value();
     }
-    std::auto_ptr<media::AudioInput> input(handler->getAudioInput(0));
+    std::unique_ptr<media::AudioInput> input(handler->getAudioInput(0));
 
     if (!input.get()) {
         // TODO: what should happen if the index is not available?
@@ -268,7 +267,7 @@ microphone_get(const fn_call& fn)
     attachMicrophoneInterface(*mic_obj);
     attachMicrophoneProperties(*mic_obj);
 
-    mic_obj->setRelay(new Microphone_as(input));
+    mic_obj->setRelay(new Microphone_as(std::move(input)));
 
     return as_value(mic_obj);
 }
@@ -285,7 +284,7 @@ microphone_setgain(const fn_call& fn)
         return as_value();
     } 
 
-    const boost::int32_t gain = clamp<boost::int32_t>(toInt(fn.arg(0), getVM(fn)), 0, 100);
+    const std::int32_t gain = clamp<std::int32_t>(toInt(fn.arg(0), getVM(fn)), 0, 100);
     ptr->setGain(gain);
     return as_value();
 }
@@ -442,7 +441,7 @@ microphone_setsilencelevel(const fn_call& fn)
     
     if (numargs > 1) {
         // If it's less than 0, it's set to 0.
-        const int timeout = std::max<boost::int32_t>(toInt(fn.arg(1), getVM(fn)), 0);
+        const int timeout = std::max<std::int32_t>(toInt(fn.arg(1), getVM(fn)), 0);
         ptr->setSilenceTimeout(timeout);
     }
     return as_value();
diff --git a/libcore/asobj/Mouse_as.cpp b/libcore/asobj/Mouse_as.cpp
index 79abd8c..9e162fb 100644
--- a/libcore/asobj/Mouse_as.cpp
+++ b/libcore/asobj/Mouse_as.cpp
@@ -79,7 +79,7 @@ attachMouseInterface(as_object& o)
     AsBroadcaster::initialize(o);
 
     Global_as& gl = getGlobal(o);
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, &o, null, 7);
 }
 
diff --git a/libcore/asobj/MovieClipLoader.cpp b/libcore/asobj/MovieClipLoader.cpp
index c1e6eee..602e268 100644
--- a/libcore/asobj/MovieClipLoader.cpp
+++ b/libcore/asobj/MovieClipLoader.cpp
@@ -73,7 +73,7 @@ moviecliploader_class_init(as_object& where, const ObjectURI& uri)
   
 	AsBroadcaster::initialize(*proto);
 
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, proto, null, 1027);
 
 	where.init_member(uri, cl, as_object::DefaultFlags); 
diff --git a/libcore/asobj/MovieClip_as.cpp b/libcore/asobj/MovieClip_as.cpp
index 3b8c0f4..391f037 100644
--- a/libcore/asobj/MovieClip_as.cpp
+++ b/libcore/asobj/MovieClip_as.cpp
@@ -311,7 +311,7 @@ movieclip_createEmptyMovieClip(const fn_call& fn)
 
     Movie* m = ptr->get_root();
     as_object* o = getObjectWithPrototype(getGlobal(fn), NSV::CLASS_MOVIE_CLIP);
-    MovieClip* mc = new MovieClip(o, 0, m, ptr);
+    MovieClip* mc = new MovieClip(o, nullptr, m, ptr);
 
     VM& vm = getVM(fn);
     mc->set_name(getURI(vm, fn.arg(0).to_string()));
@@ -476,7 +476,7 @@ movieclip_attachMovie(const fn_call& fn)
     const double depth = toNumber(fn.arg(2), getVM(fn));
     
     // This also checks for overflow, as both numbers are expressible as
-    // boost::int32_t.
+    // std::int32_t.
     if (depth < DisplayObject::lowerAccessibleBound ||
             depth > DisplayObject::upperAccessibleBound)
     {
@@ -487,7 +487,7 @@ movieclip_attachMovie(const fn_call& fn)
         return as_value();
     }
     
-    boost::int32_t depthValue = static_cast<boost::int32_t>(depth);
+    std::int32_t depthValue = static_cast<std::int32_t>(depth);
 
     Global_as& gl = getGlobal(fn);
     DisplayObject* newch = exported_movie->createDisplayObject(gl, movieclip);
@@ -496,7 +496,7 @@ movieclip_attachMovie(const fn_call& fn)
     newch->set_name(getURI(vm, newname));
     newch->setDynamic();
 
-    as_object* initObj(0);
+    as_object* initObj(nullptr);
 
     if (fn.nargs > 3 ) {
         initObj = toObject(fn.arg(3), getVM(fn));
@@ -724,7 +724,7 @@ movieclip_duplicateMovieClip(const fn_call& fn)
     const double depth = toNumber(fn.arg(1), getVM(fn));
     
     // This also checks for overflow, as both numbers are expressible as
-    // boost::int32_t.
+    // std::int32_t.
     if (depth < DisplayObject::lowerAccessibleBound ||
             depth > DisplayObject::upperAccessibleBound)
     {
@@ -735,7 +735,7 @@ movieclip_duplicateMovieClip(const fn_call& fn)
         return as_value();
     }
     
-    boost::int32_t depthValue = static_cast<boost::int32_t>(depth);
+    std::int32_t depthValue = static_cast<std::int32_t>(depth);
 
     MovieClip* ch;
 
@@ -1013,17 +1013,17 @@ movieclip_hitTest(const fn_call& fn)
 
         case 2: // x, y
         {
-            boost::int32_t x = pixelsToTwips(toNumber(fn.arg(0), getVM(fn)));
-            boost::int32_t y = pixelsToTwips(toNumber(fn.arg(1), getVM(fn)));
+            std::int32_t x = pixelsToTwips(toNumber(fn.arg(0), getVM(fn)));
+            std::int32_t y = pixelsToTwips(toNumber(fn.arg(1), getVM(fn)));
 
             return movieclip->pointInBounds(x, y);
         }
 
         case 3: // x, y, shapeFlag
         {
-             const boost::int32_t x = pixelsToTwips(toNumber(fn.arg(0),
+             const std::int32_t x = pixelsToTwips(toNumber(fn.arg(0),
                          getVM(fn)));
-             const boost::int32_t y = pixelsToTwips(toNumber(fn.arg(1),
+             const std::int32_t y = pixelsToTwips(toNumber(fn.arg(1),
                          getVM(fn)));
              const bool shapeFlag = toBool(fn.arg(2), getVM(fn));
 
@@ -1287,8 +1287,8 @@ movieclip_globalToLocal(const fn_call& fn)
     }
 
     as_value tmp;
-    boost::int32_t    x = 0;
-    boost::int32_t    y = 0;
+    std::int32_t    x = 0;
+    std::int32_t    y = 0;
 
     if ( ! obj->get_member(NSV::PROP_X, &tmp) )
     {
@@ -1348,8 +1348,8 @@ movieclip_localToGlobal(const fn_call& fn)
     }
 
     as_value tmp;
-    boost::int32_t x = 0;
-    boost::int32_t y = 0;
+    std::int32_t x = 0;
+    std::int32_t y = 0;
 
     if (!obj->get_member(NSV::PROP_X, &tmp)) {
         IF_VERBOSE_ASCODING_ERRORS(
@@ -1402,7 +1402,7 @@ movieclip_setMask(const fn_call& fn)
     if ( arg.is_null() || arg.is_undefined() )
     {
         // disable mask
-        maskee->setMask(0);
+        maskee->setMask(nullptr);
     }
     else
     {
@@ -1499,11 +1499,11 @@ movieclip_lineStyle(const fn_call& fn)
         return as_value();
     }
 
-    boost::uint8_t r = 0;
-    boost::uint8_t g = 0;
-    boost::uint8_t b = 0;
-    boost::uint8_t a = 255;
-    boost::uint16_t thickness = 0;
+    std::uint8_t r = 0;
+    std::uint8_t g = 0;
+    std::uint8_t b = 0;
+    std::uint8_t a = 255;
+    std::uint16_t thickness = 0;
     bool scaleThicknessVertically = true;
     bool scaleThicknessHorizontally = true;
     bool pixelHinting = false;
@@ -1594,20 +1594,20 @@ movieclip_lineStyle(const fn_call& fn)
         {
             const float alphaval = clamp<float>(toNumber(fn.arg(2), getVM(fn)),
                                      0, 100);
-            a = boost::uint8_t(255 * (alphaval / 100));
+            a = std::uint8_t(255 * (alphaval / 100));
         }
         case 2:
         {
             // See pollock.swf for eventual regressions.
             // It sets color to a random number from
             // 0 to 160000000 (about 10 times more then the max).
-            boost::uint32_t rgbval = toInt(fn.arg(1), getVM(fn));
-            r = boost::uint8_t((rgbval & 0xFF0000) >> 16);
-            g = boost::uint8_t((rgbval & 0x00FF00) >> 8);
-            b = boost::uint8_t((rgbval & 0x0000FF) );
+            std::uint32_t rgbval = toInt(fn.arg(1), getVM(fn));
+            r = std::uint8_t((rgbval & 0xFF0000) >> 16);
+            g = std::uint8_t((rgbval & 0x00FF00) >> 8);
+            b = std::uint8_t((rgbval & 0x0000FF) );
         }
         case 1:
-            thickness = boost::uint16_t(pixelsToTwips(clamp<float>(
+            thickness = std::uint16_t(pixelsToTwips(clamp<float>(
                             toNumber(fn.arg(0), getVM(fn)), 0, 255)));
             break;
     }
@@ -1675,13 +1675,13 @@ movieclip_beginFill(const fn_call& fn)
     }
 
     // 2^24 is the max here
-    const boost::uint32_t rgbval =
+    const std::uint32_t rgbval =
         clamp<float>(toNumber(fn.arg(0), getVM(fn)), 0, 16777216);
 
-    const boost::uint8_t r = (rgbval & 0xFF0000) >> 16;
-    const boost::uint8_t g = (rgbval & 0x00FF00) >> 8;
-    const boost::uint8_t b = rgbval & 0x0000FF;
-    boost::uint8_t a = 255;
+    const std::uint8_t r = (rgbval & 0xFF0000) >> 16;
+    const std::uint8_t g = (rgbval & 0x00FF00) >> 8;
+    const std::uint8_t b = rgbval & 0x0000FF;
+    std::uint8_t a = 255;
 
     if (fn.nargs > 1) {
         a = 255 * clamp<int>(toInt(fn.arg(1), getVM(fn)), 0, 100) / 100;
@@ -1804,16 +1804,16 @@ movieclip_beginGradientFill(const fn_call& fn)
     gradients.reserve(stops);
     for (size_t i = 0; i < stops; ++i) {
 
-        const ObjectURI& key = getURI(vm, boost::lexical_cast<std::string>(i));
+        const ObjectURI& key = getURI(vm, std::to_string(i));
 
         as_value colVal = getMember(*colors, key);
-        boost::uint32_t col = colVal.is_number() ? toInt(colVal, getVM(fn)) : 0;
+        std::uint32_t col = colVal.is_number() ? toInt(colVal, getVM(fn)) : 0;
 
         /// Alpha is the range 0..100.
         as_value alpVal = getMember(*alphas, key);
         const double a = alpVal.is_number() ?
             clamp<double>(toNumber(alpVal, getVM(fn)), 0, 100) : 0;
-        const boost::uint8_t alp = 0xff * (a / 100);
+        const std::uint8_t alp = 0xff * (a / 100);
 
         // Ratio is the range 0..255, but a ratio may never be smaller than
         // the previous value. The pp adjusts it to be greater than the
@@ -1824,12 +1824,12 @@ movieclip_beginGradientFill(const fn_call& fn)
         // steps of 1 appear to be adjusted.
         const int step = 2;
         const as_value& ratVal = getMember(*ratios, key);
-        const boost::uint32_t minRatio =
+        const std::uint32_t minRatio =
             gradients.empty() ? 0 :
-            std::min<boost::uint32_t>(gradients[i - 1].ratio + step, 0xff);
+            std::min<std::uint32_t>(gradients[i - 1].ratio + step, 0xff);
 
-        boost::uint8_t rat = ratVal.is_number() ? 
-            clamp<boost::uint32_t>(toInt(ratVal, getVM(fn)), minRatio, 0xff)
+        std::uint8_t rat = ratVal.is_number() ?
+            clamp<std::uint32_t>(toInt(ratVal, getVM(fn)), minRatio, 0xff)
             : minRatio;
 
         // The renderer may expect successively larger ratios; failure to
@@ -1843,7 +1843,7 @@ movieclip_beginGradientFill(const fn_call& fn)
         color.parseRGB(col);
         color.m_a = alp;
 
-        gradients.push_back(GradientRecord(rat, color));
+        gradients.emplace_back(rat, color);
     }
 
     // Make sure we don't try to construct a GradientFill with only 1 stop!
@@ -2057,8 +2057,8 @@ movieclip_attachBitmap(const fn_call& fn)
 
     int depth = toInt(fn.arg(1), getVM(fn));
 
-    DisplayObject* bm = new Bitmap(getRoot(fn), 0, bd, ptr);
-    ptr->attachCharacter(*bm, depth, 0);
+    DisplayObject* bm = new Bitmap(getRoot(fn), nullptr, bd, ptr);
+    ptr->attachCharacter(*bm, depth, nullptr);
 
     return as_value();
 }
diff --git a/libcore/asobj/NetConnection_as.cpp b/libcore/asobj/NetConnection_as.cpp
index 2c9a160..4b987de 100644
--- a/libcore/asobj/NetConnection_as.cpp
+++ b/libcore/asobj/NetConnection_as.cpp
@@ -26,10 +26,9 @@
 
 #include <string>
 #include <utility>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include <boost/lexical_cast.hpp>
 #include <boost/noncopyable.hpp>
-#include <boost/mem_fn.hpp>
 #include <iomanip>
 
 #include "GnashSystemNetHeaders.h"
@@ -71,8 +70,8 @@ namespace {
         getStatusCodeInfo(NetConnection_as::StatusCode code);
 
     /// Parse and send any invoke messages from an HTTP connection.
-    void handleAMFInvoke(amf::Reader& rd, const boost::uint8_t*& b,
-            const boost::uint8_t* end, as_object& owner);
+    void handleAMFInvoke(amf::Reader& rd, const std::uint8_t*& b,
+            const std::uint8_t* end, as_object& owner);
 
     void replyBWCheck(rtmp::RTMP& r, double txn);
 
@@ -97,9 +96,9 @@ public:
     /// Get an stream by name
     //
     /// @param name     Stream identifier
-    virtual std::auto_ptr<IOChannel> getStream(const std::string& /*name*/) {
+    virtual std::unique_ptr<IOChannel> getStream(const std::string& /*name*/) {
         log_unimpl("%s doesn't support fetching streams", typeName(*this));
-        return std::auto_ptr<IOChannel>(0);
+        return std::unique_ptr<IOChannel>();
     }
 
     /// Process pending traffic, out or in bound
@@ -137,7 +136,7 @@ public:
             _callbacks.erase(it);
             return callback;
         }
-        return 0;
+        return nullptr;
     }
 
 protected:
@@ -202,8 +201,8 @@ private:
     /// Handle replies to server functions we invoked with a callback.
     //
     /// This needs access to the stored callbacks.
-    void handleAMFReplies(amf::Reader& rd, const boost::uint8_t*& b,
-            const boost::uint8_t* end);
+    void handleAMFReplies(amf::Reader& rd, const std::uint8_t*& b,
+            const std::uint8_t* end);
 
     Connection& _handler;
 
@@ -217,7 +216,7 @@ private:
     size_t _calls;
 
     /// A single HTTP request.
-    boost::scoped_ptr<IOChannel> _connection;
+    std::unique_ptr<IOChannel> _connection;
     
     /// Headers to be sent with this request.
     NetworkAdapter::RequestHeaders _headers;
@@ -235,10 +234,10 @@ public:
     //
     /// @param nc   The NetConnection AS object to send status/error events to
     /// @param url  URL to post calls to
-    HTTPConnection(NetConnection_as& nc, const URL& url)
+    HTTPConnection(NetConnection_as& nc, URL url)
         :
         Connection(nc),
-        _url(url)
+        _url(std::move(url))
     {
     }
 
@@ -258,10 +257,10 @@ private:
     const URL _url;
 
     /// The queue of sent requests.
-    std::vector<boost::shared_ptr<HTTPRequest> > _requestQueue;
+    std::vector<std::unique_ptr<HTTPRequest>> _requestQueue;
 
     /// The current request.
-    boost::shared_ptr<HTTPRequest> _currentRequest;
+    std::unique_ptr<HTTPRequest> _currentRequest;
     
 };
 
@@ -290,8 +289,8 @@ public:
             aw.writeString("play");
             aw.writeNumber(0);
             aw.writeNull();
-            for (size_t i = 0; i < args.size(); ++i) {
-               args[i].writeAMF0(aw);
+            for (auto& arg : args) {
+               arg.writeAMF0(aw);
             }
            // TODO Use the play method and the streamId from createStream
            _rtmp.call(buf);
@@ -303,8 +302,8 @@ public:
             const size_t id = asCallback ? callNo() : 0;
             aw.writeNumber(id);
 
-            for (size_t i = 0; i < args.size(); ++i) {
-               args[i].writeAMF0(aw);
+            for (auto& arg : args) {
+               arg.writeAMF0(aw);
             }
            _rtmp.call(buf);
             if (asCallback) {
@@ -380,7 +379,7 @@ public:
 
         }
         
-        boost::shared_ptr<SimpleBuffer> b = _rtmp.getMessage();
+        std::shared_ptr<SimpleBuffer> b = _rtmp.getMessage();
 
         if (b && !_nc.isConnected()) {
             _nc.setConnected();
@@ -398,7 +397,7 @@ public:
 
 private:
 
-    void handleInvoke(const boost::uint8_t* payload, const boost::uint8_t* end);
+    void handleInvoke(const std::uint8_t* payload, const std::uint8_t* end);
 
     rtmp::RTMP _rtmp;
     bool _connectionComplete;
@@ -425,7 +424,7 @@ void
 netconnection_class_init(as_object& where, const ObjectURI& uri)
 {
     registerBuiltinClass(where, netconnection_new,
-            attachNetConnectionInterface, 0, uri);
+            attachNetConnectionInterface, nullptr, uri);
 }
 
 void
@@ -433,7 +432,7 @@ NetConnection_as::markReachableResources() const
 {
     owner().setReachable();
     std::for_each(_oldConnections.begin(), _oldConnections.end(),
-            boost::mem_fn(&Connection::setReachable));
+            std::mem_fn(&Connection::setReachable));
     if (_currentConnection.get()) _currentConnection->setReachable();
 }
 
@@ -568,8 +567,7 @@ NetConnection_as::close()
 
     /// Queue the current call queue if it has pending calls
     if (_currentConnection.get() && _currentConnection->hasPendingCalls()) {
-        boost::shared_ptr<Connection> c(_currentConnection.release());
-        _oldConnections.push_back(c);
+        _oldConnections.emplace_back(std::move(_currentConnection));
     }
 
     /// TODO: what should actually happen here? Should an attached
@@ -626,7 +624,7 @@ NetConnection_as::createStream(as_object* asCallback) {
     startAdvanceTimer();
 }
 
-std::auto_ptr<IOChannel>
+std::unique_ptr<IOChannel>
 NetConnection_as::getStream(const std::string& name)
 {
     const RunResources& ri = getRunResources(owner());
@@ -734,7 +732,7 @@ netconnection_call(const fn_call& fn)
 #endif
 
     // TODO: arg(1) is the response object. let it know when data comes back
-    as_object* asCallback(0);
+    as_object* asCallback(nullptr);
     if (fn.nargs > 1) {
 
         if (fn.arg(1).is_object()) {
@@ -929,11 +927,11 @@ getStatusCodeInfo(NetConnection_as::StatusCode code)
 }
 
 void
-handleAMFInvoke(amf::Reader& rd, const boost::uint8_t*& b,
-        const boost::uint8_t* end, as_object& owner)
+handleAMFInvoke(amf::Reader& rd, const std::uint8_t*& b,
+        const std::uint8_t* end, as_object& owner)
 {
 
-    const boost::uint16_t invokecount = amf::readNetworkShort(b);
+    const std::uint16_t invokecount = amf::readNetworkShort(b);
     b += 2; 
 
     if (!invokecount) return;
@@ -942,7 +940,7 @@ handleAMFInvoke(amf::Reader& rd, const boost::uint8_t*& b,
         if (b + 2 > end) {
             throw amf::AMFException("Invoke buffer too short");
         }
-        const boost::uint16_t namelength = amf::readNetworkShort(b);
+        const std::uint16_t namelength = amf::readNetworkShort(b);
         b += 2;
         if (b + namelength > end) {
             throw amf::AMFException("Invoke buffer too short");
@@ -978,10 +976,10 @@ handleAMFInvoke(amf::Reader& rd, const boost::uint8_t*& b,
 //
 /// Note that fatal errors will throw an amf::AMFException.
 void
-HTTPRequest::handleAMFReplies(amf::Reader& rd, const boost::uint8_t*& b,
-        const boost::uint8_t* end)
+HTTPRequest::handleAMFReplies(amf::Reader& rd, const std::uint8_t*& b,
+        const std::uint8_t* end)
 {
-    const boost::uint16_t numreplies = amf::readNetworkShort(b);
+    const std::uint16_t numreplies = amf::readNetworkShort(b);
     b += 2; // number of replies
 
     // TODO: test if this value is relevant at all.
@@ -997,7 +995,7 @@ HTTPRequest::handleAMFReplies(amf::Reader& rd, const boost::uint8_t*& b,
 
         if (b + 2 > end) return;
 
-        const boost::uint16_t replylength = amf::readNetworkShort(b);
+        const std::uint16_t replylength = amf::readNetworkShort(b);
         b += 2; 
 
         if (replylength < 4 || b + replylength > end) {
@@ -1028,7 +1026,7 @@ HTTPRequest::handleAMFReplies(amf::Reader& rd, const boost::uint8_t*& b,
 
         // parse past unused string in header
         if (b + 2 > end) return;
-        const boost::uint16_t unusedlength = amf::readNetworkShort(b);
+        const std::uint16_t unusedlength = amf::readNetworkShort(b);
 
         b += 2; 
         if (b + unusedlength > end) return;
@@ -1087,20 +1085,16 @@ HTTPConnection::advance()
 {
     // If there is data waiting to be sent, send it and push it
     // to the queue.
-    if (_currentRequest.get()) {
+    if (_currentRequest) {
         _currentRequest->send(_url, _nc);
-        _requestQueue.push_back(_currentRequest);
-
         // Clear the current request for the next go.
-        _currentRequest.reset();
+        _requestQueue.emplace_back(std::move(_currentRequest));
     }
 
     // Process all replies and clear finished requests.
-    for (std::vector<boost::shared_ptr<HTTPRequest> >::iterator i = 
-            _requestQueue.begin(); i != _requestQueue.end();) {
-        if (!(*i)->process(_nc)) i = _requestQueue.erase(i);
-        else ++i;
-    }
+    auto rm = std::remove_if(_requestQueue.begin(), _requestQueue.end(),
+        [&](std::unique_ptr<HTTPRequest>& req) { return !req->process(_nc); });
+    _requestQueue.erase(rm, _requestQueue.end());
 
     return true;
 }
@@ -1113,7 +1107,7 @@ HTTPRequest::send(const URL& url, NetConnection_as& nc)
     log_debug("creating connection");
 
     // Fill in header
-    (reinterpret_cast<boost::uint16_t*>(_data.data() + 4))[0] = htons(_calls);
+    (reinterpret_cast<std::uint16_t*>(_data.data() + 4))[0] = htons(_calls);
     std::string postdata(reinterpret_cast<char*>(_data.data()), _data.size());
 
 #ifdef GNASH_DEBUG_REMOTING
@@ -1200,8 +1194,8 @@ HTTPRequest::process(NetConnection_as& nc)
 #ifdef GNASH_DEBUG_REMOTING
         log_debug("hit eof");
 #endif
-        const boost::uint8_t *b = _reply.data();
-        const boost::uint8_t *end = _reply.data() + _reply.size();
+        const std::uint8_t *b = _reply.data();
+        const std::uint8_t *end = _reply.data() + _reply.size();
         
         amf::Reader rd(b, end, getGlobal(nc.owner()));
         
@@ -1230,7 +1224,7 @@ void
 HTTPConnection::call(as_object* asCallback, const std::string& methodName,
             const std::vector<as_value>& args)
 {
-    if (!_currentRequest.get()) {
+    if (!_currentRequest) {
         _currentRequest.reset(new HTTPRequest(*this));
     }
 
@@ -1283,8 +1277,8 @@ HTTPConnection::call(as_object* asCallback, const std::string& methodName,
 }
  
 void
-RTMPConnection::handleInvoke(const boost::uint8_t* payload,
-        const boost::uint8_t* end)
+RTMPConnection::handleInvoke(const std::uint8_t* payload,
+        const std::uint8_t* end)
 {
     // TODO: clean up the logic in this function to reduce duplication.
 
diff --git a/libcore/asobj/NetConnection_as.h b/libcore/asobj/NetConnection_as.h
index f053b7e..f56e0fc 100644
--- a/libcore/asobj/NetConnection_as.h
+++ b/libcore/asobj/NetConnection_as.h
@@ -24,7 +24,6 @@
 #include <string>
 #include <list>
 #include <memory>
-#include <boost/shared_ptr.hpp>
 
 #include "Relay.h"
 
@@ -104,7 +103,7 @@ public:
     void notifyStatus(StatusCode code);
 
     /// Get an stream by name
-    std::auto_ptr<IOChannel> getStream(const std::string& name);
+    std::unique_ptr<IOChannel> getStream(const std::string& name);
 
     /// Mark responders associated with remoting calls
     void markReachableResources() const;
@@ -118,7 +117,7 @@ private:
     /// Extend the URL to be used for playing
     void addToURL(const std::string& url);
 
-    typedef std::list<boost::shared_ptr<Connection> > Connections;
+    typedef std::list<std::unique_ptr<Connection> > Connections;
 
     /// Queue of call groups
     //
@@ -129,7 +128,7 @@ private:
     Connections _oldConnections;
 
     /// The current conceptual network connection.
-    std::auto_ptr<Connection> _currentConnection; 
+    std::unique_ptr<Connection> _currentConnection; 
 
     /// the url prefix optionally passed to connect()
     std::string _uri;
diff --git a/libcore/asobj/NetStream_as.cpp b/libcore/asobj/NetStream_as.cpp
index 386a227..99d2a7a 100644
--- a/libcore/asobj/NetStream_as.cpp
+++ b/libcore/asobj/NetStream_as.cpp
@@ -26,8 +26,8 @@
 
 #include <functional>
 #include <algorithm>
-#include <boost/cstdint.hpp>
-#include <boost/thread/mutex.hpp>
+#include <cstdint>
+#include <mutex>
 
 #include "RunResources.h"
 #include "CharacterProxy.h"
@@ -100,16 +100,16 @@ namespace {
 NetStream_as::NetStream_as(as_object* owner)
     :
     ActiveRelay(owner),
-    _netCon(0),
+    _netCon(nullptr),
     _bufferTime(100), 
     _imageframe(),
-    _parser(NULL),
+    _parser(),
     _inputPos(0),
-    _invalidatedVideoCharacter(0),
+    _invalidatedVideoCharacter(nullptr),
     _decoding_state(DEC_NONE),
-    _videoDecoder(0),
+    _videoDecoder(),
     _videoInfoKnown(false),
-    _audioDecoder(0),
+    _audioDecoder(),
     _audioInfoKnown(false),
 
     // Playback clock starts in 'stop' mode
@@ -132,7 +132,7 @@ netstream_class_init(as_object& where, const ObjectURI& uri)
     // NetStream is genuinely a built-in class, but its constructor calls
     // several native functions. It also calls NetConnection.call.
     registerBuiltinClass(where, netstream_new, attachNetStreamInterface,
-            NULL, uri); 
+            nullptr, uri);
 }
 
 void
@@ -160,12 +160,9 @@ NetStream_as::processStatusNotifications()
     // TODO: check for System.onStatus too ! use a private
     // getStatusHandler() method for this.
     // Copy it to prevent threads changing it.
-    StatusCode code = invalidStatus;
+    StatusCode code = static_cast<StatusCode>(_statusCode.load());
 
-    {
-        boost::mutex::scoped_lock lock(_statusMutex);
-        std::swap(code, _statusCode);
-    }
+    setStatus(invalidStatus);
 
     // Nothing to do if no more valid notifications.
     if (code == invalidStatus) return; 
@@ -180,12 +177,11 @@ void
 NetStream_as::setStatus(StatusCode status)
 {
     // Get a lock to avoid messing with statuses while processing them
-    boost::mutex::scoped_lock lock(_statusMutex);
     _statusCode = status;
 }
 
 void
-NetStream_as::setBufferTime(boost::uint32_t time)
+NetStream_as::setBufferTime(std::uint32_t time)
 {
     // The argument is in milliseconds,
     _bufferTime = time;
@@ -196,17 +192,17 @@ long
 NetStream_as::bufferLength()
 {
 #ifdef USE_MEDIA
-    if (_parser.get() == NULL) return 0;
+    if (_parser.get() == nullptr) return 0;
     return _parser->getBufferLength();
 #endif  // USE_MEDIA
 }
 
-std::auto_ptr<image::GnashImage>
+std::unique_ptr<image::GnashImage>
 NetStream_as::get_video()
 {
-    boost::mutex::scoped_lock lock(image_mutex);
+    std::lock_guard<std::mutex> lock(image_mutex);
 
-    return _imageframe;    
+    return std::move(_imageframe);
 }
 
 void
@@ -504,7 +500,7 @@ NetStream_as::startPlayback()
             "parse NetStream input")) );
         return false;
     }
-    _parser = _mediaHandler->createMediaParser(_inputStream);
+    _parser = std::move(_mediaHandler->createMediaParser(std::move(_inputStream)));
     assert(!_inputStream.get());
 
     if (!_parser.get()) {
@@ -548,12 +544,12 @@ NetStream_as::startPlayback()
 }
 
 
-std::auto_ptr<image::GnashImage> 
-NetStream_as::getDecodedVideoFrame(boost::uint32_t ts)
+std::unique_ptr<image::GnashImage> 
+NetStream_as::getDecodedVideoFrame(std::uint32_t ts)
 {
     assert(_videoDecoder.get());
     
-    std::auto_ptr<image::GnashImage> video;
+    std::unique_ptr<image::GnashImage> video;
 
 #ifdef USE_MEDIA
     assert(_parser.get());
@@ -562,7 +558,7 @@ NetStream_as::getDecodedVideoFrame(boost::uint32_t ts)
         return video; 
     }
 
-    boost::uint64_t nextTimestamp;
+    std::uint64_t nextTimestamp;
     bool parsingComplete = _parser->parsingCompleted();
     if (!_parser->nextVideoFrameTimestamp(nextTimestamp)) {
         
@@ -631,10 +627,10 @@ NetStream_as::getDecodedVideoFrame(boost::uint32_t ts)
     return video;
 }
 
-std::auto_ptr<image::GnashImage> 
+std::unique_ptr<image::GnashImage> 
 NetStream_as::decodeNextVideoFrame()
 {
-    std::auto_ptr<image::GnashImage> video;
+    std::unique_ptr<image::GnashImage> video;
 
 #ifdef USE_MEDIA
     if (!_parser.get()) {
@@ -642,7 +638,7 @@ NetStream_as::decodeNextVideoFrame()
         return video; 
     }
 
-    std::auto_ptr<media::EncodedVideoFrame> frame = _parser->nextVideoFrame(); 
+    std::unique_ptr<media::EncodedVideoFrame> frame = _parser->nextVideoFrame(); 
     if (!frame.get()) {
 #ifdef GNASH_DEBUG_DECODING
         log_debug(_("%p.decodeNextVideoFrame(): "
@@ -673,21 +669,21 @@ NetStream_as::decodeNextAudioFrame()
 {
     assert (_parser.get());
 
-    // TODO: make the buffer cursored later ?
-    BufferedAudioStreamer::CursoredBuffer* raw =
-        new BufferedAudioStreamer::CursoredBuffer();
-
 #ifdef USE_MEDIA
-    std::auto_ptr<media::EncodedAudioFrame> frame = _parser->nextAudioFrame(); 
+    std::unique_ptr<media::EncodedAudioFrame> frame = _parser->nextAudioFrame(); 
     if (!frame.get()) {
 #ifdef GNASH_DEBUG_DECODING
         log_debug(_("%p.decodeNextAudioFrame: "
                     "no more video frames in input"),
                     this);
 #endif
-        return 0;
+        return nullptr;
     }
 
+    // TODO: make the buffer cursored later ?
+    BufferedAudioStreamer::CursoredBuffer* raw =
+        new BufferedAudioStreamer::CursoredBuffer();
+
     raw->m_data = _audioDecoder->decode(*frame, raw->m_size);
 
     // TODO: let the sound_handler do this .. sounds cleaner
@@ -699,8 +695,8 @@ NetStream_as::decodeNextAudioFrame()
                 // NOTE: adjust_volume assumes samples 
                 // are 16 bits in size, and signed.
                 // Size is still given in bytes..
-                boost::int16_t* const start =
-                    reinterpret_cast<boost::int16_t*>(raw->m_data);
+                std::int16_t* const start =
+                    reinterpret_cast<std::int16_t*>(raw->m_data);
                 sound::adjustVolume(start, start + raw->m_size / 2, vol / 100.0);
             }
         }
@@ -721,7 +717,7 @@ NetStream_as::decodeNextAudioFrame()
 }
 
 void
-NetStream_as::seek(boost::uint32_t posSeconds)
+NetStream_as::seek(std::uint32_t posSeconds)
 {
     GNASH_REPORT_FUNCTION;
 
@@ -733,7 +729,7 @@ NetStream_as::seek(boost::uint32_t posSeconds)
     }
 
     // Don't ask me why, but NetStream_as::seek() takes seconds...
-    boost::uint32_t pos = posSeconds*1000;
+    std::uint32_t pos = posSeconds*1000;
 
     // We'll pause the clock source and mark decoders as buffering.
     // In this way, next advance won't find the source time to 
@@ -744,7 +740,7 @@ NetStream_as::seek(boost::uint32_t posSeconds)
     _playbackClock->pause();
 
     // Seek to new position
-    boost::uint32_t newpos = pos;
+    std::uint32_t newpos = pos;
     if ( ! _parser->seek(newpos) )
     {
 #ifdef GNASH_DEBUG_STATUS
@@ -792,9 +788,9 @@ NetStream_as::refreshAudioBuffer()
 #ifdef GNASH_DEBUG_DECODING
     // bufferLength() would lock the mutex (which we already hold),
     // so this is to avoid that.
-    boost::uint32_t parserTime = _parser->getBufferLength();
-    boost::uint32_t playHeadTime = time();
-    boost::uint32_t bufferLen = 
+    std::uint32_t parserTime = _parser->getBufferLength();
+    std::uint32_t playHeadTime = time();
+    std::uint32_t bufferLen =
         parserTime > playHeadTime ? parserTime-playHeadTime : 0;
 #endif
 
@@ -818,7 +814,7 @@ NetStream_as::refreshAudioBuffer()
     }
 
     // Calculate the current time
-    boost::uint64_t curPos = _playHead.getPosition();
+    std::uint64_t curPos = _playHead.getPosition();
 
 #ifdef GNASH_DEBUG_DECODING
     log_debug(_("%p.refreshAudioBuffer: currentPosition=%d, playHeadState=%d, bufferLength=%d, bufferTime=%d"),
@@ -833,7 +829,7 @@ NetStream_as::refreshAudioBuffer()
 }
 
 void
-NetStream_as::pushDecodedAudioFrames(boost::uint32_t ts)
+NetStream_as::pushDecodedAudioFrames(std::uint32_t ts)
 {
     assert(_parser.get());
     
@@ -884,11 +880,11 @@ NetStream_as::pushDecodedAudioFrames(boost::uint32_t ts)
 
     bool consumed = false;
 
-    boost::uint64_t nextTimestamp;
+    std::uint64_t nextTimestamp;
     while (1) {
 
         // FIXME: use services of BufferedAudioStreamer for this
-        boost::mutex::scoped_lock lock(_audioStreamer._audioQueueMutex);
+        std::unique_lock<std::mutex> lock(_audioStreamer._audioQueueMutex);
 
         // The sound_handler mixer will pull decoded
         // audio frames off the _audioQueue whenever 
@@ -1107,7 +1103,7 @@ NetStream_as::refreshVideoFrame(bool alsoIfPaused)
     }
 
 #ifdef GNASH_DEBUG_DECODING
-    boost::uint32_t bufferLen = bufferLength();
+    std::uint32_t bufferLen = bufferLength();
 #endif
 
     if ( ! alsoIfPaused && _playHead.getState() == PlayHead::PLAY_PAUSED )
@@ -1132,7 +1128,7 @@ NetStream_as::refreshVideoFrame(bool alsoIfPaused)
     }
 
     // Calculate the current time
-    boost::uint64_t curPos = _playHead.getPosition();
+    std::uint64_t curPos = _playHead.getPosition();
 
 #ifdef GNASH_DEBUG_DECODING
     log_debug(_("%p.refreshVideoFrame: currentPosition=%d, playHeadState=%d, "
@@ -1141,7 +1137,7 @@ NetStream_as::refreshVideoFrame(bool alsoIfPaused)
 #endif 
 
     // Get next decoded video frame from parser, will have the lowest timestamp
-    std::auto_ptr<image::GnashImage> video = getDecodedVideoFrame(curPos);
+    std::unique_ptr<image::GnashImage> video = getDecodedVideoFrame(curPos);
 
     // to be decoded or we're out of data
     if (!video.get())
@@ -1171,7 +1167,7 @@ NetStream_as::refreshVideoFrame(bool alsoIfPaused)
     }
     else
     {
-        _imageframe = video; // ownership transferred
+        _imageframe = std::move(video); // ownership transferred
         assert(!video.get());
         // A frame is ready for pickup
         if ( _invalidatedVideoCharacter )
@@ -1293,10 +1289,10 @@ NetStream_as::update()
     // If playhead position needs to be updated
     // is set to Set playhead to first available frame, if any
     // TODO: use another flag to signify 'initialization-needed'
-    boost::uint64_t curPosition = _playHead.getPosition();
+    std::uint64_t curPosition = _playHead.getPosition();
     if ( curPosition == 0 )
     {
-        boost::uint64_t firstFrameTimestamp;
+        std::uint64_t firstFrameTimestamp;
         if ( _parser->nextFrameTimestamp(firstFrameTimestamp) )
         {
              _playHead.seekTo(firstFrameTimestamp);
@@ -1339,13 +1335,15 @@ NetStream_as::update()
     if ( ! _parser->getVideoInfo() ) 
     {
         // FIXME: use services of BufferedAudioStreamer for this
-        boost::mutex::scoped_lock lock(_audioStreamer._audioQueueMutex);
-        bool emptyAudioQueue = _audioStreamer._audioQueue.empty();
-        lock.unlock();
+        bool emptyAudioQueue;
+        {
+            std::lock_guard<std::mutex> lock(_audioStreamer._audioQueueMutex);
+            emptyAudioQueue = _audioStreamer._audioQueue.empty();
+        }
 
         if ( emptyAudioQueue )
         {
-            boost::uint64_t nextTimestamp;
+            std::uint64_t nextTimestamp;
             if ( _parser->nextAudioFrameTimestamp(nextTimestamp) )
             {
                 log_debug(_("Moving NetStream playhead "
@@ -1365,14 +1363,13 @@ NetStream_as::update()
 
     if (tags.empty()) return;
 
-    for (media::MediaParser::OrderedMetaTags::iterator i = tags.begin(),
-            e = tags.end(); i != e; ++i) {
-        executeTag(**i, owner());
+    for (auto& tag : tags) {
+        executeTag(*tag, owner());
     }
 #endif  // USE_MEDIA
 }
 
-boost::int32_t
+std::int32_t
 NetStream_as::time()
 {
     return _playHead.getPosition();
@@ -1433,13 +1430,11 @@ NetStream_as::bytesTotal ()
 NetStream_as::DecodingState
 NetStream_as::decodingStatus(DecodingState newstate)
 {
-    boost::mutex::scoped_lock lock(_state_mutex);
-
     if (newstate != DEC_NONE) {
         _decoding_state = newstate;
     }
 
-    return _decoding_state;
+    return static_cast<DecodingState>(_decoding_state.load());
 }
 
 //------- BufferedAudioStreamer (move in his own file)
@@ -1453,7 +1448,7 @@ BufferedAudioStreamer::attachAuxStreamer()
         log_debug(_("attachAuxStreamer called while already attached"));
         // Let's detach first..
         _soundHandler->unplugInputStream(_auxStreamer);
-        _auxStreamer=0;
+        _auxStreamer=nullptr;
     }
 
     try {
@@ -1476,12 +1471,12 @@ BufferedAudioStreamer::detachAuxStreamer()
         return;
     }
     _soundHandler->unplugInputStream(_auxStreamer);
-    _auxStreamer = 0;
+    _auxStreamer = nullptr;
 }
 
 // audio callback, possibly running in a separate thread
 unsigned int
-BufferedAudioStreamer::fetchWrapper(void *owner, boost::int16_t* samples,
+BufferedAudioStreamer::fetchWrapper(void *owner, std::int16_t* samples,
         unsigned int nSamples, bool& eof)
 {
     BufferedAudioStreamer* streamer =
@@ -1495,19 +1490,19 @@ BufferedAudioStreamer::BufferedAudioStreamer(sound::sound_handler* handler)
     _soundHandler(handler),
     _audioQueue(),
     _audioQueueSize(0),
-    _auxStreamer(0)
+    _auxStreamer(nullptr)
 {
 }
 
 unsigned int
-BufferedAudioStreamer::fetch(boost::int16_t* samples, unsigned int nSamples, bool& eof)
+BufferedAudioStreamer::fetch(std::int16_t* samples, unsigned int nSamples, bool& eof)
 {
     //GNASH_REPORT_FUNCTION;
 
-    boost::uint8_t* stream = reinterpret_cast<boost::uint8_t*>(samples);
+    std::uint8_t* stream = reinterpret_cast<std::uint8_t*>(samples);
     int len = nSamples*2;
 
-    boost::mutex::scoped_lock lock(_audioQueueMutex);
+    std::lock_guard<std::mutex> lock(_audioQueueMutex);
 
 #if 0
     log_debug("audio_streamer called, audioQueue size: %d, "
@@ -1552,7 +1547,7 @@ BufferedAudioStreamer::fetch(boost::int16_t* samples, unsigned int nSamples, boo
 void
 BufferedAudioStreamer::push(CursoredBuffer* audio)
 {
-    boost::mutex::scoped_lock lock(_audioQueueMutex);
+    std::lock_guard<std::mutex> lock(_audioQueueMutex);
 
     if ( _auxStreamer )
     {
@@ -1570,7 +1565,7 @@ BufferedAudioStreamer::push(CursoredBuffer* audio)
 void
 BufferedAudioStreamer::cleanAudioQueue()
 {
-    boost::mutex::scoped_lock lock(_audioQueueMutex);
+    std::lock_guard<std::mutex> lock(_audioQueueMutex);
     _audioQueue.clear();
 }
 
@@ -1667,9 +1662,9 @@ as_value
 netstream_seek(const fn_call& fn)
 {
     NetStream_as* ns = ensure<ThisIsNative<NetStream_as> >(fn);
-    boost::uint32_t time = 0;
+    std::uint32_t time = 0;
     if (fn.nargs > 0) {
-        time = static_cast<boost::uint32_t>(toNumber(fn.arg(0), getVM(fn)));
+        time = static_cast<std::uint32_t>(toNumber(fn.arg(0), getVM(fn)));
     }
     ns->seek(time);
 
@@ -1690,7 +1685,7 @@ netstream_setbuffertime(const fn_call& fn)
 
     // TODO: don't allow a limit < 100 
 
-    ns->setBufferTime(boost::uint32_t(time * 1000));
+    ns->setBufferTime(std::uint32_t(time * 1000));
 
     return as_value();
 }
@@ -1888,8 +1883,8 @@ attachPrototypeProperties(as_object& o)
 void
 executeTag(const SimpleBuffer& _buffer, as_object& thisPtr)
 {
-	const boost::uint8_t* ptr = _buffer.data();
-	const boost::uint8_t* endptr = ptr + _buffer.size();
+	const std::uint8_t* ptr = _buffer.data();
+	const std::uint8_t* endptr = ptr + _buffer.size();
 
     std::string funcName;
 
diff --git a/libcore/asobj/NetStream_as.h b/libcore/asobj/NetStream_as.h
index d55c611..4024e76 100644
--- a/libcore/asobj/NetStream_as.h
+++ b/libcore/asobj/NetStream_as.h
@@ -25,11 +25,13 @@
 #define __STDC_CONSTANT_MACROS
 #endif
 
-#include <boost/intrusive_ptr.hpp>
+#include <atomic>
 #include <string>
+#include <memory>
+#include <mutex>
+
+#include <boost/intrusive_ptr.hpp>
 #include <boost/ptr_container/ptr_deque.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/thread/mutex.hpp>
 
 #include "PlayHead.h" // for composition
 #include "Relay.h" // for ActiveRelay inheritance
@@ -93,8 +95,8 @@ public:
         CursoredBuffer()
             :
             m_size(0),
-            m_data(NULL),
-            m_ptr(NULL)
+            m_data(nullptr),
+            m_ptr(nullptr)
         {}
 
         ~CursoredBuffer()
@@ -103,16 +105,16 @@ public:
         }
 
         /// Number of samples left in buffer starting from cursor
-        boost::uint32_t m_size;
+        std::uint32_t m_size;
 
         /// Actual data
         //
         /// The data must be allocated with new []
         /// as will be delete []'d by the dtor
-        boost::uint8_t* m_data;
+        std::uint8_t* m_data;
 
         /// Cursor into the data
-        boost::uint8_t* m_ptr;
+        std::uint8_t* m_ptr;
     };
 
     typedef boost::ptr_deque<CursoredBuffer> AudioQueue;
@@ -131,7 +133,7 @@ public:
 
     /// The queue needs to be protected as sound_handler callback
     /// is invoked by a separate thread (dunno if it makes sense actually)
-    boost::mutex _audioQueueMutex;
+    std::mutex _audioQueueMutex;
 
     // Id of an attached audio streamer, 0 if none
     sound::InputStream* _auxStreamer;
@@ -151,11 +153,11 @@ public:
     void detachAuxStreamer();
 
     /// Fetch samples from the audio queue
-    unsigned int fetch(boost::int16_t* samples, unsigned int nSamples,
+    unsigned int fetch(std::int16_t* samples, unsigned int nSamples,
                     bool& eof);
 
     /// Fetch samples from the audio queue
-    static unsigned int fetchWrapper(void* owner, boost::int16_t* samples,
+    static unsigned int fetchWrapper(void* owner, std::int16_t* samples,
                     unsigned int nSamples, bool& eof);
 
     /// Push a buffer to the audio queue
@@ -235,13 +237,13 @@ public:
     ///     Defines in seconds where to seek to
     ///     @todo take milliseconds !!
     ///
-    void seek(boost::uint32_t pos);
+    void seek(std::uint32_t pos);
 
     /// Tells where the playhead currently is
     //
     /// @return The time in milliseconds of the current playhead position
     ///
-    boost::int32_t time();
+    std::int32_t time();
 
     /// Called at the heart-beat frequency. Used to process queued status messages
     /// and (re)start after a buffering pause. In NetStreamFfmpeg it is also
@@ -270,14 +272,14 @@ public:
     /// @param time
     /// The time in milliseconds that should be buffered.
     ///
-    void setBufferTime(boost::uint32_t time);
+    void setBufferTime(std::uint32_t time);
 
     /// Returns what the buffer time has been set to. (100 milliseconds
     /// is default)
     //
     /// @return The size of the buffer in milliseconds.
     ///
-    boost::uint32_t bufferTime() { return _bufferTime; }
+    std::uint32_t bufferTime() { return _bufferTime; }
 
     /// Returns the number of bytes of the media file that have been buffered.
     long bytesLoaded();
@@ -298,10 +300,10 @@ public:
 
     /// Returns the video frame closest to current cursor. See time().
     //
-    /// @return a image containing the video frame, a NULL auto_ptr if
+    /// @return a image containing the video frame, a NULL unique_ptr if
     /// none were ready
     ///
-    std::auto_ptr<image::GnashImage> get_video();
+    std::unique_ptr<image::GnashImage> get_video();
     
     /// Register the DisplayObject to invalidate on video updates
     void setInvalidatedVideo(DisplayObject* ch)
@@ -318,7 +320,7 @@ public:
     /// It might be invoked by a separate thread (neither main,
     /// nor decoder thread).
     ///
-    static unsigned int audio_streamer(void *udata, boost::int16_t* samples,
+    static unsigned int audio_streamer(void *udata, std::int16_t* samples,
             unsigned int nSamples, bool& eof);
 
 private:
@@ -431,7 +433,7 @@ private:
     //
     /// @return 0 on EOF or error, a decoded video otherwise
     ///
-    std::auto_ptr<image::GnashImage> decodeNextVideoFrame();
+    std::unique_ptr<image::GnashImage> decodeNextVideoFrame();
 
     /// Decode next audio frame fetching it MediaParser cursor
     //
@@ -442,7 +444,7 @@ private:
     /// \brief
     /// Decode input audio frames with timestamp <= ts
     /// and push them to the output audio queue
-    void pushDecodedAudioFrames(boost::uint32_t ts);
+    void pushDecodedAudioFrames(std::uint32_t ts);
 
     /// Decode input frames up to the one with timestamp <= ts.
     //
@@ -454,7 +456,7 @@ private:
     /// 3. next element in cursor has timestamp > tx
     /// 4. there was an error decoding
     ///
-    std::auto_ptr<image::GnashImage> getDecodedVideoFrame(boost::uint32_t ts);
+    std::unique_ptr<image::GnashImage> getDecodedVideoFrame(std::uint32_t ts);
 
     DecodingState decodingStatus(DecodingState newstate = DEC_NONE);
 
@@ -503,22 +505,22 @@ private:
 
     NetConnection_as* _netCon;
 
-    boost::scoped_ptr<CharacterProxy> _audioController;
+    std::unique_ptr<CharacterProxy> _audioController;
     
     // The size of the buffer in milliseconds
-    boost::uint32_t _bufferTime;
+    std::uint32_t _bufferTime;
 
     // Mutex to insure we don't corrupt the image
-    boost::mutex image_mutex;
+    std::mutex image_mutex;
 
     // The image/videoframe which is given to the renderer
-    std::auto_ptr<image::GnashImage> _imageframe;
+    std::unique_ptr<image::GnashImage> _imageframe;
 
     // The video URL
     std::string url;
 
     // The input media parser
-    std::auto_ptr<media::MediaParser> _parser;
+    std::unique_ptr<media::MediaParser> _parser;
 
     // The position in the inputfile, only used when not playing a FLV
     long _inputPos;
@@ -526,26 +528,23 @@ private:
     /// The DisplayObject to invalidate on video updates
     DisplayObject* _invalidatedVideoCharacter;
 
-    DecodingState _decoding_state;
+    /// Stores DecodingState
+    std::atomic<int> _decoding_state;
 
-    // Mutex protecting _playback_state and _decoding_state
-    // (not sure a single one is appropriate)
-    boost::mutex _state_mutex;
-    
     /// Video decoder
-    std::auto_ptr<media::VideoDecoder> _videoDecoder;
+    std::unique_ptr<media::VideoDecoder> _videoDecoder;
 
     /// True if video info are known
     bool _videoInfoKnown;
 
     /// Audio decoder
-    std::auto_ptr<media::AudioDecoder> _audioDecoder;
+    std::unique_ptr<media::AudioDecoder> _audioDecoder;
 
     /// True if an audio info are known
     bool _audioInfoKnown;
 
     /// Virtual clock used as playback clock source
-    boost::scoped_ptr<InterruptableVirtualClock> _playbackClock;
+    std::unique_ptr<InterruptableVirtualClock> _playbackClock;
 
     /// Playback control device 
     PlayHead _playHead;
@@ -561,17 +560,15 @@ private:
     /// This should just be a temporary variable, transferred
     /// to MediaParser constructor.
     ///
-    std::auto_ptr<IOChannel> _inputStream;
+    std::unique_ptr<IOChannel> _inputStream;
 
     /// The buffered audio streamer
     BufferedAudioStreamer _audioStreamer;
 
     /// List of status messages to be processed
-    StatusCode _statusCode;
-
-    /// Mutex protecting _statusQueue
-    boost::mutex _statusMutex;
-
+    //
+    /// Stores StatusCode
+    std::atomic<int> _statusCode;
 };
 
 void netstream_class_init(as_object& global, const ObjectURI& uri);
diff --git a/libcore/asobj/Object.cpp b/libcore/asobj/Object.cpp
index 1193f89..c1dea0b 100644
--- a/libcore/asobj/Object.cpp
+++ b/libcore/asobj/Object.cpp
@@ -222,7 +222,7 @@ object_addproperty(const fn_call& fn)
         return as_value(false);
     }
 
-    as_function* setter = NULL;
+    as_function* setter = nullptr;
     const as_value& setterval = fn.arg(2);
     if (!setterval.is_null())
     {
@@ -305,7 +305,7 @@ object_registerClass(const fn_call& fn)
     const movie_definition* def = relRoot->definition();
     
     // We only care about definitions, not other exportable resources.
-    const boost::uint16_t id = def->exportID(symbolid);
+    const std::uint16_t id = def->exportID(symbolid);
     SWF::DefinitionTag* d = def->getDefinitionTag(id);
 
     if (!d) {
diff --git a/libcore/asobj/PlayHead.cpp b/libcore/asobj/PlayHead.cpp
index ab783ab..de7e857 100644
--- a/libcore/asobj/PlayHead.cpp
+++ b/libcore/asobj/PlayHead.cpp
@@ -54,7 +54,7 @@ PlayHead::setState(PlaybackStatus newState)
         // if we go from PAUSED to PLAYING, reset
         // _clockOffset to yank current position
         // when querying clock source *now*
-        boost::uint64_t now = _clockSource->elapsed();
+        std::uint64_t now = _clockSource->elapsed();
         _clockOffset = ( now - _position );
 
         // check if we did the right thing
@@ -101,7 +101,7 @@ PlayHead::advanceIfConsumed()
     }
 
     // Advance position
-    boost::uint64_t now = _clockSource->elapsed();
+    std::uint64_t now = _clockSource->elapsed();
     _position = now-_clockOffset;
 
     // Reset consumers state
@@ -109,9 +109,9 @@ PlayHead::advanceIfConsumed()
 }
 
 void
-PlayHead::seekTo(boost::uint64_t position)
+PlayHead::seekTo(std::uint64_t position)
 {
-    boost::uint64_t now = _clockSource->elapsed();
+    std::uint64_t now = _clockSource->elapsed();
     _position = position;
 
     _clockOffset = ( now - _position );
diff --git a/libcore/asobj/PlayHead.h b/libcore/asobj/PlayHead.h
index e5348ac..5e70e52 100644
--- a/libcore/asobj/PlayHead.h
+++ b/libcore/asobj/PlayHead.h
@@ -21,7 +21,7 @@
 #ifndef GNASH_PLAYHEAD_H
 #define GNASH_PLAYHEAD_H
 
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 
 // Forward declarations
 namespace gnash {
@@ -74,7 +74,7 @@ public:
     }
 
     /// Get current playhead position (milliseconds)
-    boost::uint64_t getPosition() const { return _position; }
+    std::uint64_t getPosition() const { return _position; }
 
     /// Get current playback state
     PlaybackStatus getState() const { return _state; }
@@ -121,7 +121,7 @@ public:
     /// - isAudioConsumed() == false
     /// - getPosition() == position
     ///
-    void seekTo(boost::uint64_t position);
+    void seekTo(std::uint64_t position);
 
     /// Advance position if all available consumers consumed the current one
     //
@@ -146,7 +146,7 @@ private:
     };
 
     /// Current playhead position
-    boost::uint64_t _position;
+    std::uint64_t _position;
 
     /// Current playback state
     PlaybackStatus _state;
@@ -166,7 +166,7 @@ private:
     /// to get current position
     //
     /// The offset will be 
-    boost::uint64_t _clockOffset; 
+    std::uint64_t _clockOffset;
 
 };
 
diff --git a/libcore/asobj/Selection_as.cpp b/libcore/asobj/Selection_as.cpp
index 9064482..1e2af65 100644
--- a/libcore/asobj/Selection_as.cpp
+++ b/libcore/asobj/Selection_as.cpp
@@ -59,7 +59,7 @@ selection_class_init(as_object& where, const ObjectURI& uri)
 
     // All properties are protected using ASSetPropFlags.
     Global_as& gl = getGlobal(where);
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, o, null, 7);
 }
 
@@ -198,7 +198,7 @@ selection_setFocus(const fn_call& fn)
 
     /// These should remove focus.
     if (focus.is_null() || focus.is_undefined()) {
-        mr.setFocus(0);
+        mr.setFocus(nullptr);
         return as_value(true);
     }
 
diff --git a/libcore/asobj/SharedObject_as.cpp b/libcore/asobj/SharedObject_as.cpp
index 81035f9..404a55d 100644
--- a/libcore/asobj/SharedObject_as.cpp
+++ b/libcore/asobj/SharedObject_as.cpp
@@ -24,8 +24,6 @@
 
 #include "SharedObject_as.h"
 
-#include <boost/scoped_array.hpp>
-#include <boost/shared_ptr.hpp>
 #include <cstdio>
 
 #include "movie_root.h"
@@ -109,7 +107,7 @@ public:
 
     SOLPropsBufSerializer(amf::Writer w, VM& vm)
         :
-        _writer(w),
+        _writer(std::move(w)),
         _vm(vm),
         _error(false),
         _count(0)
@@ -169,7 +167,7 @@ public:
         }
 
         // This is SOL specific.
-        boost::uint8_t end(0);
+        std::uint8_t end(0);
         _writer.writeData(&end, 1);
         ++_count;
         return true;
@@ -201,7 +199,7 @@ public:
     SharedObject_as(as_object& owner)
         :
         _owner(owner),
-        _data(0),
+        _data(nullptr),
         _connected(false)
     { 
     }
@@ -341,45 +339,40 @@ SharedObject_as::flush(int space) const
     }
 
     if (rcfile.getSOLReadOnly()) {
-        log_security(_("Attempting to write object %s when it's SOL "
-                       "Read Only is set! Refusing..."), filespec);
-        return false;
-    }
-
-    // Open file
-    std::ofstream ofs(filespec.c_str(), std::ios::binary);
-    if (!ofs) {
-        log_error(_("SharedObject::flush(): Failed opening file '%s' in "
-                    "binary mode"), filespec.c_str());
+        log_security(_("Refusing attempt to write object %s while SOLreadonly "
+                       "is set!"), filespec);
         return false;
     }
 
     // Encode data part.
     SimpleBuffer buf;
     if (!encodeData(_name, *_data, buf)) {
-        std::remove(filespec.c_str());
         return true;
     }
 
     // Encode header part.
     SimpleBuffer header;
     encodeHeader(buf.size(), header);
-    
-    // Write header
-    ofs.write(reinterpret_cast<const char*>(header.data()), header.size());
+
+    std::ofstream ofs(filespec.c_str(), std::ios::binary);
     if (!ofs) {
-        log_error(_("Error writing SOL header"));
+        log_error(_("SharedObject::flush(): Failed opening file '%s' in binary"
+                    " mode"), filespec);
         return false;
     }
 
-    // Write AMF data
-    ofs.write(reinterpret_cast<const char*>(buf.data()), buf.size());
-    if (!ofs) {
-        log_error(_("Error writing %d bytes to output file %s"),
-                buf.size(), filespec.c_str());
+    bool success = ofs.write(reinterpret_cast<const char*>(header.data()), header.size())
+                   && ofs.write(reinterpret_cast<const char*>(buf.data()), buf.size());
+    ofs.close();
+
+    if (!success) {
+        log_error(_("Error writing AMF data to output file %s"), filespec);
+        if (std::remove(filespec.c_str()) != 0) {
+            log_error(_("Error removing SOL output file %s: %s"), filespec,
+                      strerror(errno));
+        }
         return false;
     }
-    ofs.close();
 
     log_security(_("SharedObject '%s' written to filesystem."), filespec);
     return true;
@@ -486,17 +479,17 @@ SharedObjectLibrary::getLocal(const std::string& objName,
     assert (!objName.empty());
 
     // already warned about it at construction time
-    if (_solSafeDir.empty()) return 0;
+    if (_solSafeDir.empty()) return nullptr;
 
     if (rcfile.getSOLLocalDomain() && !_baseDomain.empty()) 
     {
         log_security(_("Attempting to open SOL file from non "
                        "localhost-loaded SWF"));
-        return 0;
+        return nullptr;
     }
 
     // Check that the name is valid; if not, return null
-    if (!validateName(objName)) return 0;
+    if (!validateName(objName)) return nullptr;
 
     // The 'root' argument, otherwise known as localPath, specifies where
     // in the SWF path the SOL should be stored. It cannot be outside this
@@ -521,7 +514,7 @@ SharedObjectLibrary::getLocal(const std::string& objName,
             log_security(_("SharedObject path %s is outside the SWF domain "
                         "%s. Cannot access this object."), localPath, 
                         _baseDomain);
-            return 0;
+            return nullptr;
         }
 
         requestedPath = localPath.path();
@@ -534,7 +527,7 @@ SharedObjectLibrary::getLocal(const std::string& objName,
             log_security(_("SharedObject path %s is not part of the SWF path "
                         "%s. Cannot access this object."), requestedPath, 
                         _basePath);
-            return 0;
+            return nullptr;
         }
 
     }
@@ -570,7 +563,7 @@ SharedObjectLibrary::getLocal(const std::string& objName,
 
     // Otherwise create a new one and register to the lib
     SharedObject_as* sh = createSharedObject(*_vm.getGlobal());
-    if (!sh) return 0;
+    if (!sh) return nullptr;
 
     sh->setObjectName(objName);
 
@@ -906,9 +899,9 @@ readSOL(VM& vm, const std::string& filespec)
         return data;
     }
 
-    boost::scoped_array<boost::uint8_t> sbuf(new boost::uint8_t[size]);
-    const boost::uint8_t *buf = sbuf.get();
-    const boost::uint8_t *end = buf + size;
+    std::unique_ptr<std::uint8_t[]> sbuf(new std::uint8_t[size]);
+    const std::uint8_t *buf = sbuf.get();
+    const std::uint8_t *end = buf + size;
 
     try {
         std::ifstream ifs(filespec.c_str(), std::ios::binary);
@@ -919,7 +912,7 @@ readSOL(VM& vm, const std::string& filespec)
         buf += 16; // skip const-length headers
 
         // skip past name   TODO add sanity check
-        buf += ntohs(*(reinterpret_cast<const boost::uint16_t*>(buf)));
+        buf += ntohs(*(reinterpret_cast<const std::uint16_t*>(buf)));
         buf += 2;
         
         buf += 4; // skip past padding
@@ -943,8 +936,8 @@ readSOL(VM& vm, const std::string& filespec)
                 break;
             }
 
-            const boost::uint16_t len = 
-                ntohs(*(reinterpret_cast<const boost::uint16_t*>(buf)));
+            const std::uint16_t len =
+                ntohs(*(reinterpret_cast<const std::uint16_t*>(buf)));
             buf += 2;
 
             if (!len) {
@@ -966,7 +959,7 @@ readSOL(VM& vm, const std::string& filespec)
             if (!rd(as)) {
                 log_error(_("SharedObject: error parsing SharedObject '%s'"),
                         filespec);
-                return 0;
+                return nullptr;
             }
 
             log_debug("parsed sol member named '%s' (len %s),  value '%s'",
@@ -985,7 +978,7 @@ readSOL(VM& vm, const std::string& filespec)
     catch (std::exception& e) {
         log_error(_("readSOL: Reading SharedObject %s: %s"),
 		  filespec, e.what());
-        return 0;
+        return nullptr;
     }
 
 }
@@ -1001,12 +994,12 @@ SharedObject_as*
 createSharedObject(Global_as& gl)
 {
     as_function* ctor = getMember(gl, NSV::CLASS_SHARED_OBJECT).to_function();
-    if (!ctor) return 0;
+    if (!ctor) return nullptr;
     as_environment env(getVM(gl));
     fn_call::Args args;
     as_object* o = constructInstance(*ctor, env, args);
 
-    std::auto_ptr<SharedObject_as> sh(new SharedObject_as(*o));
+    std::unique_ptr<SharedObject_as> sh(new SharedObject_as(*o));
     o->setRelay(sh.release());
 
     // We know what it is...
@@ -1019,7 +1012,7 @@ createSharedObject(Global_as& gl)
 void
 encodeHeader(const size_t size, SimpleBuffer& buf)
 {
-    const boost::uint8_t header[] = { 0x00, 0xbf };
+    const std::uint8_t header[] = { 0x00, 0xbf };
     
     // Initial header byters
     buf.append(header, arraySize(header));
@@ -1033,19 +1026,19 @@ bool
 encodeData(const std::string& name, as_object& data, SimpleBuffer& buf)
 {
     // Write the remaining header-like information.
-    const boost::uint8_t magic[] = { 'T', 'C', 'S', 'O',
+    const std::uint8_t magic[] = { 'T', 'C', 'S', 'O',
         0x00, 0x04, 0x00, 0x00, 0x00, 0x00 };
 
     // Magic SharedObject bytes.
     buf.append(magic, arraySize(magic)); 
 
     // SharedObject name
-    const boost::uint16_t len = name.length();
+    const std::uint16_t len = name.length();
     buf.appendNetworkShort(len);
     buf.append(name.c_str(), len);
 
     // Padding
-    const boost::uint8_t padding[] = { 0, 0, 0, 0 };
+    const std::uint8_t padding[] = { 0, 0, 0, 0 };
     buf.append(padding, arraySize(padding));
     
     // see http://osflash.org/documentation/amf/envelopes/sharedobject
diff --git a/libcore/asobj/Sound_as.cpp b/libcore/asobj/Sound_as.cpp
index 1a05109..4a6d11c 100644
--- a/libcore/asobj/Sound_as.cpp
+++ b/libcore/asobj/Sound_as.cpp
@@ -24,10 +24,7 @@
 #include "Sound_as.h"
 
 #include <string>
-#include <boost/scoped_ptr.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <boost/optional.hpp>
 
 #include "RunResources.h"
@@ -183,7 +180,7 @@ private:
 
     void markReachableResources() const;
 
-    boost::scoped_ptr<CharacterProxy> _attachedCharacter;
+    std::unique_ptr<CharacterProxy> _attachedCharacter;
     int soundId;
     bool externalSound;
     bool isStreaming;
@@ -192,24 +189,24 @@ private:
 
     media::MediaHandler* _mediaHandler;
 
-    boost::scoped_ptr<media::MediaParser> _mediaParser;
+    std::unique_ptr<media::MediaParser> _mediaParser;
 
-    boost::scoped_ptr<media::AudioDecoder> _audioDecoder;
+    std::unique_ptr<media::AudioDecoder> _audioDecoder;
 
     /// Number of milliseconds into the sound to start it
     //
     /// This is set by start()
-    boost::uint64_t _startTime;
+    std::uint64_t _startTime;
 
-    boost::scoped_array<boost::uint8_t> _leftOverData;
-    boost::uint8_t* _leftOverPtr;
-    boost::uint32_t _leftOverSize;
+    std::unique_ptr<std::uint8_t[]> _leftOverData;
+    std::uint8_t* _leftOverPtr;
+    std::uint32_t _leftOverSize;
 
     /// This is a sound_handler::aux_streamer_ptr type.
-    static unsigned int getAudioWrapper(void *owner, boost::int16_t* samples,
+    static unsigned int getAudioWrapper(void *owner, std::int16_t* samples,
             unsigned int nSamples, bool& etEOF);
 
-    unsigned int getAudio(boost::int16_t* samples, unsigned int nSamples,
+    unsigned int getAudio(std::int16_t* samples, unsigned int nSamples,
             bool& atEOF);
 
     /// The aux streamer for sound handler
@@ -239,11 +236,9 @@ private:
     /// Probe audio
     void probeAudio();
 
-    bool _soundCompleted;
+    std::atomic<bool> _soundCompleted;
 
-    boost::mutex _soundCompletedMutex;
-
-    /// Thread-safe setter for _soundCompleted
+    /// Setter for _soundCompleted
     void markSoundCompleted(bool completed);
 
     bool _soundLoaded;
@@ -258,7 +253,7 @@ private:
 Sound_as::Sound_as(as_object* owner) 
     :
     ActiveRelay(owner),
-    _attachedCharacter(0),
+    _attachedCharacter(),
     soundId(-1),
     externalSound(false),
     isStreaming(false),
@@ -266,9 +261,9 @@ Sound_as::Sound_as(as_object* owner)
     _mediaHandler(getRunResources(*owner).mediaHandler()),
     _startTime(0),
     _leftOverData(),
-    _leftOverPtr(0),
+    _leftOverPtr(nullptr),
     _leftOverSize(0),
-    _inputStream(0),
+    _inputStream(nullptr),
     remainingLoops(0),
     _soundCompleted(false),
     _soundLoaded(false)
@@ -280,7 +275,7 @@ Sound_as::~Sound_as()
     // Just in case...
     if (_inputStream && _soundHandler) {
         _soundHandler->unplugInputStream(_inputStream);
-        _inputStream=0;
+        _inputStream=nullptr;
     }
 
 }
@@ -358,7 +353,7 @@ Sound_as::probeAudio()
     if ( ! externalSound ) {
         // Only probe for sound complete
         assert(_soundHandler);
-        assert(!_soundCompleted);
+        assert(!_soundCompleted.load());
         if (!_soundHandler->isSoundPlaying(soundId)) {
             stopProbeTimer();
             // dispatch onSoundComplete 
@@ -380,7 +375,7 @@ Sound_as::probeAudio()
             if (!isStreaming) {
                 stopProbeTimer(); // will be re-started on Sound.start()
             }
-            bool success = _mediaParser->getAudioInfo() != 0;
+            bool success = _mediaParser->getAudioInfo() != nullptr;
             callMethod(&owner(), NSV::PROP_ON_LOAD, success);
 
             // TODO: check if this should be called anyway.
@@ -399,15 +394,14 @@ Sound_as::probeAudio()
         log_debug("Probing audio for end");
 #endif
 
-        boost::mutex::scoped_lock lock(_soundCompletedMutex);
-        if (_soundCompleted) {
+        if (_soundCompleted.load()) {
             // when _soundCompleted is true we're NOT attached !
             // MediaParser may be still needed,
             // if this is a non-streaming sound
             if ( isStreaming ) {
                 _mediaParser.reset(); // no use for this anymore...
             }
-            _inputStream = 0;
+            _inputStream = nullptr;
             _soundCompleted = false;
             stopProbeTimer();
 
@@ -461,7 +455,6 @@ Sound_as::markReachableResources() const
 void
 Sound_as::markSoundCompleted(bool completed)
 {
-    boost::mutex::scoped_lock lock(_soundCompletedMutex);
     _soundCompleted=completed;
 }
 
@@ -566,7 +559,7 @@ Sound_as::loadSound(const std::string& file, bool streaming)
     /// the media parser
     if (_inputStream) {
         _soundHandler->unplugInputStream(_inputStream);
-        _inputStream = 0;
+        _inputStream = nullptr;
     }
     
     /// Mark sound as not being loaded
@@ -586,7 +579,7 @@ Sound_as::loadSound(const std::string& file, bool streaming)
     const RcInitFile& rcfile = RcInitFile::getDefaultInstance();
 
     const StreamProvider& streamProvider = rr.streamProvider();
-    std::auto_ptr<IOChannel> inputStream(streamProvider.getStream(url,
+    std::unique_ptr<IOChannel> inputStream(streamProvider.getStream(url,
                 rcfile.saveStreamingMedia()));
 
     if (!inputStream.get()) {
@@ -599,7 +592,7 @@ Sound_as::loadSound(const std::string& file, bool streaming)
     externalSound = true;
     isStreaming = streaming;
 
-    _mediaParser.reset(_mediaHandler->createMediaParser(inputStream).release());
+    _mediaParser = std::move(_mediaHandler->createMediaParser(std::move(inputStream)));
     if (!_mediaParser) {
         log_error(_("Unable to create parser for Sound at %s"), url);
         // not necessarely correct, the stream might have been found...
@@ -614,7 +607,7 @@ Sound_as::loadSound(const std::string& file, bool streaming)
     } else {
         // If this is an event sound, we must not limit buffering (parsing),
         // because onLoad will not be called until we have finished doing so.
-        _mediaParser->setBufferTime(std::numeric_limits<boost::uint64_t>::max());
+        _mediaParser->setBufferTime(std::numeric_limits<std::uint64_t>::max());
     }
 
     startProbeTimer();
@@ -627,7 +620,7 @@ sound::InputStream*
 Sound_as::attachAuxStreamerIfNeeded()
 {
     media::AudioInfo* audioInfo =  _mediaParser->getAudioInfo();
-    if (!audioInfo) return 0;
+    if (!audioInfo) return nullptr;
 
     // the following may throw an exception
     _audioDecoder.reset(_mediaHandler->createAudioDecoder(*audioInfo).release());
@@ -712,8 +705,8 @@ Sound_as::start(double secOff, int loops)
         // Always seek as we might be called during or after some playing...
         {
             _startTime = secOff * 1000;
-            boost::uint32_t seekms = boost::uint32_t(secOff * 1000);
-            // TODO: boost::mutex::scoped_lock parserLock(_parserMutex);
+            std::uint32_t seekms = std::uint32_t(secOff * 1000);
+            // TODO: std::lock_guard<std::mutex> parserLock(_parserMutex);
             bool seeked = _mediaParser->seek(seekms); // well, we try...
             log_debug("Seeked MediaParser to %d, returned: %d", seekms, seeked);
         }
@@ -738,7 +731,7 @@ Sound_as::start(double secOff, int loops)
         _soundHandler->startSound(
                     soundId,
                     loops,
-                    0, // envelopes
+                    nullptr, // envelopes
                     true, // allow multiple instances (checked)
                     inPoint
                     );
@@ -762,7 +755,7 @@ Sound_as::stop(int si)
         if (externalSound) {
             if ( _inputStream ) {
                 _soundHandler->unplugInputStream(_inputStream);
-                _inputStream=0;
+                _inputStream=nullptr;
             }
         } else {
             if ( ! _attachedCharacter ) {
@@ -818,7 +811,7 @@ Sound_as::getPosition() const
     }
 
     if (_mediaParser) {
-        boost::uint64_t ts;
+        std::uint64_t ts;
         if ( _mediaParser->nextAudioFrameTimestamp(ts) ) {
             return ts;
         }
@@ -830,9 +823,9 @@ Sound_as::getPosition() const
 
 
 unsigned int
-Sound_as::getAudio(boost::int16_t* samples, unsigned int nSamples, bool& atEOF)
+Sound_as::getAudio(std::int16_t* samples, unsigned int nSamples, bool& atEOF)
 {
-    boost::uint8_t* stream = reinterpret_cast<boost::uint8_t*>(samples);
+    std::uint8_t* stream = reinterpret_cast<std::uint8_t*>(samples);
     int len = nSamples*2;
 
 #ifdef USE_SOUND
@@ -841,7 +834,7 @@ Sound_as::getAudio(boost::int16_t* samples, unsigned int nSamples, bool& atEOF)
     while (len) {
         if ( ! _leftOverData ) {
             bool parsingComplete = _mediaParser->parsingCompleted(); // check *before* calling nextAudioFrame
-            std::auto_ptr<media::EncodedAudioFrame> frame = _mediaParser->nextAudioFrame();
+            std::unique_ptr<media::EncodedAudioFrame> frame = _mediaParser->nextAudioFrame();
             if ( ! frame.get() ) {
                 // just wait some more if parsing isn't complete yet
                 if ( ! parsingComplete ) {
@@ -897,7 +890,7 @@ Sound_as::getAudio(boost::int16_t* samples, unsigned int nSamples, bool& atEOF)
 
         if (_leftOverSize == 0) {
             _leftOverData.reset();
-            _leftOverPtr = 0;
+            _leftOverPtr = nullptr;
         }
 
     }
@@ -912,7 +905,7 @@ Sound_as::getAudio(boost::int16_t* samples, unsigned int nSamples, bool& atEOF)
 
 // audio callback is running in sound handler thread
 unsigned int
-Sound_as::getAudioWrapper(void* owner, boost::int16_t* samples,
+Sound_as::getAudioWrapper(void* owner, std::int16_t* samples,
         unsigned int nSamples, bool& atEOF)
 {
     Sound_as* so = static_cast<Sound_as*>(owner);
@@ -1043,7 +1036,7 @@ sound_stop(const fn_call& fn)
         const movie_definition* def = fn.callerDef;
         assert(def);
 
-        const boost::uint16_t id = def->exportID(name);
+        const std::uint16_t id = def->exportID(name);
         if (!id) {
             IF_VERBOSE_MALFORMED_SWF(
                 log_swferror(_("No such export '%s'"),
@@ -1098,7 +1091,7 @@ sound_attachsound(const fn_call& fn)
     assert(def);
 
 
-    const boost::uint16_t id = def->exportID(name);
+    const std::uint16_t id = def->exportID(name);
     if (!id) {
         IF_VERBOSE_MALFORMED_SWF(
             log_swferror(_("No such export '%s'"),
diff --git a/libcore/asobj/String_as.cpp b/libcore/asobj/String_as.cpp
index 5a5231c..6477904 100644
--- a/libcore/asobj/String_as.cpp
+++ b/libcore/asobj/String_as.cpp
@@ -73,9 +73,9 @@ namespace {
 
 }
 
-String_as::String_as(const std::string& s)
+String_as::String_as(std::string s)
     :
-    _string(s)
+    _string(std::move(s))
 {
 }
 
@@ -524,8 +524,8 @@ string_fromCharCode(const fn_call& fn)
         for (unsigned int i = 0; i < fn.nargs; i++)
         {
             // Maximum 65535, as with all DisplayObject codes.
-            const boost::uint16_t c = 
-                static_cast<boost::uint16_t>(toInt(fn.arg(i), getVM(fn)));
+            const std::uint16_t c =
+                static_cast<std::uint16_t>(toInt(fn.arg(i), getVM(fn)));
             
             // If more than 255, push 'overflow' byte.
             if (c > 255) {
@@ -544,8 +544,8 @@ string_fromCharCode(const fn_call& fn)
 
     for (unsigned int i = 0; i < fn.nargs; i++)
     {
-        const boost::uint16_t c = 
-            static_cast<boost::uint16_t>(toInt(fn.arg(i), getVM(fn)));
+        const std::uint16_t c =
+            static_cast<std::uint16_t>(toInt(fn.arg(i), getVM(fn)));
         if (c == 0) break;
         wstr.push_back(c);
     }
@@ -607,7 +607,7 @@ string_charAt(const fn_call& fn)
 
     std::string::const_iterator it = str.begin(), e = str.end();
 
-    while (boost::uint32_t code = utf8::decodeNextUnicodeCharacter(it, e))
+    while (std::uint32_t code = utf8::decodeNextUnicodeCharacter(it, e))
     {
         if (currentIndex == index)
         {
diff --git a/libcore/asobj/String_as.h b/libcore/asobj/String_as.h
index 48d7c28..2f81c53 100644
--- a/libcore/asobj/String_as.h
+++ b/libcore/asobj/String_as.h
@@ -35,7 +35,7 @@ class String_as : public Relay
 
 public:
 
-    explicit String_as(const std::string& s);
+    explicit String_as(std::string s);
 
     const std::string& value() {
         return _string;
diff --git a/libcore/asobj/TextField_as.cpp b/libcore/asobj/TextField_as.cpp
index 36d5275..58aded3 100644
--- a/libcore/asobj/TextField_as.cpp
+++ b/libcore/asobj/TextField_as.cpp
@@ -90,7 +90,7 @@ createTextFieldObject(Global_as& gl)
 {
     as_value tf(getMember(gl, NSV::CLASS_TEXT_FIELD));
     as_function* ctor = tf.to_function();
-    if (!ctor) return 0;
+    if (!ctor) return nullptr;
     fn_call::Args args;
     as_environment env(getVM(gl));
     return constructInstance(*ctor, env, args);
@@ -115,7 +115,7 @@ textfield_class_init(as_object& where, const ObjectURI& uri)
     where.init_member(uri, cl, as_object::DefaultFlags);
 
     // ASSetPropFlags is called on the TextField class.
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, cl, null, 131);
 }
 
@@ -315,7 +315,7 @@ textfield_backgroundColor(const fn_call& fn)
     }
     else {
         rgba newColor;
-        newColor.parseRGB(static_cast<boost::uint32_t>(toInt(fn.arg(0), getVM(fn))));
+        newColor.parseRGB(static_cast<std::uint32_t>(toInt(fn.arg(0), getVM(fn))));
         ptr->setBackgroundColor(newColor);
     }
 
@@ -332,7 +332,7 @@ textfield_borderColor(const fn_call& fn)
     }
     else {
         rgba newColor;
-        newColor.parseRGB(static_cast<boost::uint32_t>(toNumber(fn.arg(0), getVM(fn))));
+        newColor.parseRGB(static_cast<std::uint32_t>(toNumber(fn.arg(0), getVM(fn))));
         ptr->setBorderColor(newColor);
     }
 
@@ -352,7 +352,7 @@ textfield_textColor(const fn_call& fn)
 
     // Setter
     rgba newColor;
-    newColor.parseRGB(static_cast<boost::uint32_t>(toNumber(fn.arg(0), getVM(fn))));
+    newColor.parseRGB(static_cast<std::uint32_t>(toNumber(fn.arg(0), getVM(fn))));
     ptr->setTextColor(newColor);
 
     return as_value();
@@ -833,7 +833,7 @@ textfield_maxChars(const fn_call& fn)
 
     if (!fn.nargs)
     {
-        boost::int32_t maxChars = text->maxChars();
+        std::int32_t maxChars = text->maxChars();
         if (maxChars == 0)
         {
             as_value null;
@@ -1082,7 +1082,7 @@ textfield_ctor(const fn_call& fn)
     // It's not clear why this happens. Attaching a relay would have the
     // same effect as both following statements.
     obj->setArray(false);
-    obj->setRelay(0);
+    obj->setRelay(nullptr);
 
     as_object* proto = obj->get_prototype();
 
@@ -1122,7 +1122,7 @@ attachTextFieldInterface(as_object& o)
 
     // Finally ASSetPropFlags is called on the prototype.
     Global_as& gl = getGlobal(o);
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, &o, null, 131);
 }
 
diff --git a/libcore/asobj/TextFormat_as.cpp b/libcore/asobj/TextFormat_as.cpp
index c09e5bb..467142c 100644
--- a/libcore/asobj/TextFormat_as.cpp
+++ b/libcore/asobj/TextFormat_as.cpp
@@ -72,7 +72,7 @@ struct
 PixelsToTwips : SetBase
 {
     PixelsToTwips(const fn_call& fn) : SetBase(fn) {}
-    boost::int32_t operator()(const as_value& val) const {
+    std::int32_t operator()(const as_value& val) const {
         return pixelsToTwips(toNumber(val, getVM(fn())));
     }
 };
@@ -256,11 +256,11 @@ registerTextFormatNative(as_object& o)
             110, 2);
     
     vm.registerNative(
-            Get<const TextFormat_as, boost::uint16_t,
+            Get<const TextFormat_as, std::uint16_t,
             &TextFormat_as::size, TwipsToPixels>::get,
             110, 3);
     vm.registerNative(
-            Set<TextFormat_as, boost::uint16_t, &TextFormat_as::sizeSet,
+            Set<TextFormat_as, std::uint16_t, &TextFormat_as::sizeSet,
             PixelsToTwips>::set, 
             110, 4);
     
@@ -311,47 +311,47 @@ registerTextFormatNative(as_object& o)
     vm.registerNative(textformat_align, 110, 18);
 
     vm.registerNative(
-            Get<const TextFormat_as, boost::uint16_t,
+            Get<const TextFormat_as, std::uint16_t,
             &TextFormat_as::leftMargin, TwipsToPixels>::get,
             110, 19);
     vm.registerNative(
-            Set<TextFormat_as, boost::uint16_t, &TextFormat_as::leftMarginSet,
+            Set<TextFormat_as, std::uint16_t, &TextFormat_as::leftMarginSet,
             PositiveTwips>::set, 
             110, 20);
 
     vm.registerNative(
-            Get<const TextFormat_as, boost::uint16_t,
+            Get<const TextFormat_as, std::uint16_t,
             &TextFormat_as::rightMargin, TwipsToPixels>::get,
             110, 21);
     vm.registerNative(
-            Set<TextFormat_as, boost::uint16_t, &TextFormat_as::rightMarginSet,
+            Set<TextFormat_as, std::uint16_t, &TextFormat_as::rightMarginSet,
             PositiveTwips>::set, 
             110, 22);
 
     vm.registerNative(
-            Get<const TextFormat_as, boost::uint16_t,
+            Get<const TextFormat_as, std::uint16_t,
             &TextFormat_as::indent,
             TwipsToPixels>::get, 110, 23);
     vm.registerNative(
-            Set<TextFormat_as, boost::uint16_t, &TextFormat_as::indentSet,
+            Set<TextFormat_as, std::uint16_t, &TextFormat_as::indentSet,
             PositiveTwips>::set, 
             110, 24);
     
     vm.registerNative(
-            Get<const TextFormat_as, boost::uint16_t,
+            Get<const TextFormat_as, std::uint16_t,
             &TextFormat_as::leading,
             TwipsToPixels>::get, 110, 25);
     vm.registerNative(
-            Set<TextFormat_as, boost::uint16_t, &TextFormat_as::leadingSet,
+            Set<TextFormat_as, std::uint16_t, &TextFormat_as::leadingSet,
             PositiveTwips>::set, 
             110, 26);
 
     vm.registerNative(
-            Get<const TextFormat_as, boost::uint32_t,
+            Get<const TextFormat_as, std::uint32_t,
             &TextFormat_as::blockIndent,
             TwipsToPixels>::get, 110, 27);
     vm.registerNative(
-            Set<TextFormat_as, boost::uint32_t, &TextFormat_as::blockIndentSet,
+            Set<TextFormat_as, std::uint32_t, &TextFormat_as::blockIndentSet,
             PositiveTwips>::set,
             110, 28);
 
@@ -398,7 +398,7 @@ textformat_new(const fn_call& fn)
 
     as_object* obj = ensure<ValidThis>(fn);
 
-    std::auto_ptr<TextFormat_as> tf(new TextFormat_as);
+    std::unique_ptr<TextFormat_as> tf(new TextFormat_as);
 
 	const size_t args = fn.nargs;
 	
@@ -584,13 +584,13 @@ textformat_getTextExtent(const fn_call& fn)
     // getTextExtent currently only takes account of device fonts we don't
     // need it.
 
-    Font* f = 0;
+    Font* f = nullptr;
     if (relay->font()) {
         const std::string& name = *relay->font();
         const movie_definition* md = getRoot(fn).getRootMovie().definition();
 
         // Option 1. Name refers to an imported font ('asset') symbol.
-        boost::uint16_t fontId = md->exportID(name);
+        std::uint16_t fontId = md->exportID(name);
         if (fontId != 0) {
             f = md->get_font(fontId);
         }
diff --git a/libcore/asobj/TextFormat_as.h b/libcore/asobj/TextFormat_as.h
index 9acbd5d..df27293 100644
--- a/libcore/asobj/TextFormat_as.h
+++ b/libcore/asobj/TextFormat_as.h
@@ -23,7 +23,7 @@
 #define GNASH_TEXTFORMAT_H
 
 #include <vector>
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 #include <string>
 #include <boost/optional.hpp>
 
@@ -76,7 +76,7 @@ public:
     }
 
     /// Indentation from left margin to the first character in the paragraph
-    const boost::optional<boost::uint16_t>& indent() const { return _indent; }
+    const boost::optional<std::uint16_t>& indent() const { return _indent; }
     
     /// Paragraph alignment
     const boost::optional<TextField::TextAlignment>& align() const { return _align; }
@@ -91,24 +91,24 @@ public:
     const boost::optional<std::string>& url() const { return _url; }
 
     /// The block indent.
-    const boost::optional<boost::uint32_t>& blockIndent() const {
+    const boost::optional<std::uint32_t>& blockIndent() const {
         return _blockIndent;
     }
 
     /// Return a number that indicates the amount of leading vertical
     /// space between lines.
-    const boost::optional<boost::uint16_t>& leading() const { return _leading; }
+    const boost::optional<std::uint16_t>& leading() const { return _leading; }
 
     /// Indicates the left margin of the paragraph, in points.
-    const boost::optional<boost::uint16_t>& leftMargin() const { return _leftMargin; }
+    const boost::optional<std::uint16_t>& leftMargin() const { return _leftMargin; }
 
     /// Indicates the right margin of the paragraph in twips
-    const boost::optional<boost::uint16_t>& rightMargin() const {
+    const boost::optional<std::uint16_t>& rightMargin() const {
         return _rightMargin;
     }
 
     /// Return a float that indicates the point size in twips.
-    const boost::optional<boost::uint16_t>& size() const { return _pointSize; }
+    const boost::optional<std::uint16_t>& size() const { return _pointSize; }
 
     /// Setters
 
@@ -126,7 +126,7 @@ public:
 
     void colorSet(const boost::optional<rgba>& x) { _color = x; }
 
-    void indentSet(const boost::optional<boost::uint16_t>& x) { _indent = x; }
+    void indentSet(const boost::optional<std::uint16_t>& x) { _indent = x; }
 
     void fontSet(const boost::optional<std::string>& font) { _font=font; }
     
@@ -134,19 +134,19 @@ public:
     
     void alignSet(const std::string& align);
     
-    void blockIndentSet(const boost::optional<boost::uint32_t>& x) {
+    void blockIndentSet(const boost::optional<std::uint32_t>& x) {
         _blockIndent = x;
     }
     
-    void leadingSet(const boost::optional<boost::uint16_t>& x) { _leading = x; }
+    void leadingSet(const boost::optional<std::uint16_t>& x) { _leading = x; }
 
-    void leftMarginSet(const boost::optional<boost::uint16_t>& x) { _leftMargin = x; }
+    void leftMarginSet(const boost::optional<std::uint16_t>& x) { _leftMargin = x; }
 
-    void rightMarginSet(const boost::optional<boost::uint16_t>& x) {
+    void rightMarginSet(const boost::optional<std::uint16_t>& x) {
         _rightMargin = x;
     }
 
-    void sizeSet(const boost::optional<boost::uint16_t>& x) { _pointSize = x; }
+    void sizeSet(const boost::optional<std::uint16_t>& x) { _pointSize = x; }
 
     void tabStopsSet(const std::vector<int>& tabStops) { _tabStops = tabStops; }
 
@@ -178,7 +178,7 @@ private:
     boost::optional<TextField::TextAlignment> _align;
 
     // 
-    boost::optional<boost::uint32_t> _blockIndent;
+    boost::optional<std::uint32_t> _blockIndent;
 
     /// The color of text using this text format.
     //
@@ -195,20 +195,20 @@ private:
 
     /// An integer that indicates the indentation from the left
     /// margin to the first DisplayObject in the paragraph (twips)
-    boost::optional<boost::uint16_t> _indent;
+    boost::optional<std::uint16_t> _indent;
 
     /// A number that indicates the amount of leading vertical
     /// space between lines (twips)
-    boost::optional<boost::uint16_t> _leading;
+    boost::optional<std::uint16_t> _leading;
 
     /// Indicates the left margin of the paragraph, in points (twips)
-    boost::optional<boost::uint16_t> _leftMargin;
+    boost::optional<std::uint16_t> _leftMargin;
 
     /// Indicates the right margin of the paragraph, in points (twips).
-    boost::optional<boost::uint16_t> _rightMargin;
+    boost::optional<std::uint16_t> _rightMargin;
 
     /// Point size in twips.
-    boost::optional<boost::uint16_t> _pointSize;
+    boost::optional<std::uint16_t> _pointSize;
 
     ///
     boost::optional<std::vector<int> > _tabStops;
diff --git a/libcore/asobj/TextSnapshot_as.cpp b/libcore/asobj/TextSnapshot_as.cpp
index e2f83ad..9fc042e 100644
--- a/libcore/asobj/TextSnapshot_as.cpp
+++ b/libcore/asobj/TextSnapshot_as.cpp
@@ -59,10 +59,10 @@ public:
     ///                 AS return values.
     TextSnapshot_as(const MovieClip* mc);
 
-    std::string getText(boost::int32_t start, boost::int32_t end,
+    std::string getText(std::int32_t start, std::int32_t end,
             bool nl) const;
 
-    boost::int32_t findText(boost::int32_t start, const std::string& text,
+    std::int32_t findText(std::int32_t start, const std::string& text,
             bool ignoreCase) const;
 
     bool valid() const { return _valid; }
@@ -233,19 +233,16 @@ TextSnapshot_as::getTextRunInfo(size_t start, size_t end, as_object& ri) const
 
     std::string::size_type len = end - start;
 
-    for (TextFields::const_iterator field = _textFields.begin(),
-            e = _textFields.end(); field != e; ++field) {
+    for (const auto& field : _textFields) {
 
-        const Records& rec = field->second;
-        const SWFMatrix& mat = getMatrix(*field->first);
-        const boost::dynamic_bitset<>& selected = field->first->getSelected();
+        const Records& rec = field.second;
+        const SWFMatrix& mat = getMatrix(*field.first);
+        const boost::dynamic_bitset<>& selected = field.first->getSelected();
 
         const std::string::size_type fieldStartIndex = pos;
 
-        for (Records::const_iterator j = rec.begin(), end = rec.end();
-                j != end; ++j) {
+        for (const SWF::TextRecord* tr : rec) {
         
-            const SWF::TextRecord* tr = *j;
             assert(tr);
 
             const SWF::TextRecord::Glyphs& glyphs = tr->glyphs();
@@ -260,11 +257,10 @@ TextSnapshot_as::getTextRunInfo(size_t start, size_t end, as_object& ri) const
             assert(font);
 
             double x = tr->xOffset();
-            for (SWF::TextRecord::Glyphs::const_iterator k = glyphs.begin(),
-                    e = glyphs.end(); k != e; ++k) {
+            for (const auto& glyph : glyphs) {
                 
                 if (pos < start) {
-                    x += k->advance;
+                    x += glyph.advance;
                     ++pos;
                     continue;
                 }
@@ -292,7 +288,7 @@ TextSnapshot_as::getTextRunInfo(size_t start, size_t end, as_object& ri) const
                 callMethod(&ri, NSV::PROP_PUSH, el);
 
                 ++pos;
-                x += k->advance;
+                x += glyph.advance;
                 if (pos - start > len) return;
             }
         }
@@ -307,23 +303,20 @@ TextSnapshot_as::makeString(std::string& to, bool newline, bool selectedOnly,
 
     std::string::size_type pos = 0;
 
-    for (TextFields::const_iterator field = _textFields.begin(),
-            e = _textFields.end(); field != e; ++field)
+    for (const auto& field: _textFields)
     {
         // When newlines are requested, insert one after each individual
         // text field is processed.
         if (newline && pos > start) to += '\n';
 
-        const Records& records = field->second;
-        const boost::dynamic_bitset<>& selected = field->first->getSelected();
+        const Records& records = field.second;
+        const boost::dynamic_bitset<>& selected = field.first->getSelected();
 
         /// Remember the position at the beginning of the StaticText.
         const std::string::size_type fieldStartIndex = pos;
 
-        for (Records::const_iterator j = records.begin(), end = records.end();
-                j != end; ++j) {
+        for (const SWF::TextRecord* tr : records) {
         
-            const SWF::TextRecord* tr = *j;
             assert(tr);
 
             const SWF::TextRecord::Glyphs& glyphs = tr->glyphs();
@@ -337,8 +330,7 @@ TextSnapshot_as::makeString(std::string& to, bool newline, bool selectedOnly,
             const Font* font = tr->getFont();
             assert(font);
 
-            for (SWF::TextRecord::Glyphs::const_iterator k = glyphs.begin(),
-                    e = glyphs.end(); k != e; ++k) {
+            for (const auto& glyph : glyphs) {
                 
                 if (pos < start) {
                     ++pos;
@@ -346,7 +338,7 @@ TextSnapshot_as::makeString(std::string& to, bool newline, bool selectedOnly,
                 }
                 
                 if (!selectedOnly || selected.test(pos - fieldStartIndex)) {
-                    to += font->codeTableLookup(k->index, true);
+                    to += font->codeTableLookup(glyph.index, true);
                 }
                 ++pos;
                 if (pos - start == len) return;
@@ -356,13 +348,13 @@ TextSnapshot_as::makeString(std::string& to, bool newline, bool selectedOnly,
 }
 
 std::string
-TextSnapshot_as::getText(boost::int32_t start, boost::int32_t end, bool nl)
+TextSnapshot_as::getText(std::int32_t start, std::int32_t end, bool nl)
     const
 {
 
     // Start is always moved to between 0 and len - 1.
-    start = std::max<boost::int32_t>(start, 0);
-    start = std::min<boost::int32_t>(start, _count - 1);
+    start = std::max<std::int32_t>(start, 0);
+    start = std::min<std::int32_t>(start, _count - 1);
 
     // End is always moved to between start and end. We don't really care
     // about the end of the string.
@@ -384,8 +376,8 @@ TextSnapshot_as::getSelectedText(bool newline) const
     return sel;
 }
 
-boost::int32_t
-TextSnapshot_as::findText(boost::int32_t start, const std::string& text,
+std::int32_t
+TextSnapshot_as::findText(std::int32_t start, const std::string& text,
         bool ignoreCase) const
 {
 
@@ -496,9 +488,9 @@ textsnapshot_getTextRunInfo(const fn_call& fn)
         return as_value();
     }
 
-    const size_t start = std::max<boost::int32_t>(0,
+    const size_t start = std::max<std::int32_t>(0,
             toInt(fn.arg(0), getVM(fn)));
-    const size_t end = std::max<boost::int32_t>(start + 1,
+    const size_t end = std::max<std::int32_t>(start + 1,
             toInt(fn.arg(1), getVM(fn)));
 
     Global_as& gl = getGlobal(fn);
@@ -523,7 +515,7 @@ textsnapshot_findText(const fn_call& fn)
         return as_value();
     }
 
-    boost::int32_t start = toInt(fn.arg(0), getVM(fn));
+    std::int32_t start = toInt(fn.arg(0), getVM(fn));
     const std::string& text = fn.arg(1).to_string();
 
     /// Yes, the pp is case-insensitive by default. We don't write
@@ -562,9 +554,9 @@ textsnapshot_getSelected(const fn_call& fn)
         return as_value();
     }
 
-    const size_t start = std::max<boost::int32_t>(0,
+    const size_t start = std::max<std::int32_t>(0,
             toInt(fn.arg(0), getVM(fn)));
-    const size_t end = std::max<boost::int32_t>(start + 1,
+    const size_t end = std::max<std::int32_t>(start + 1,
             toInt(fn.arg(1), getVM(fn)));
 
     return as_value(ts->getSelected(start, end));
@@ -603,8 +595,8 @@ textsnapshot_getText(const fn_call& fn)
         return as_value();
     }
 
-    const boost::int32_t start = toInt(fn.arg(0), getVM(fn));
-    const boost::int32_t end = toInt(fn.arg(1), getVM(fn));
+    const std::int32_t start = toInt(fn.arg(0), getVM(fn));
+    const std::int32_t end = toInt(fn.arg(1), getVM(fn));
 
     const bool newline = (fn.nargs > 2) ? toBool(fn.arg(2), getVM(fn)) : false;
 
@@ -648,9 +640,9 @@ textsnapshot_setSelected(const fn_call& fn)
         return as_value();
     }
 
-    const size_t start = std::max<boost::int32_t>(0,
+    const size_t start = std::max<std::int32_t>(0,
             toInt(fn.arg(0), getVM(fn)));
-    const size_t end = std::max<boost::int32_t>(start,
+    const size_t end = std::max<std::int32_t>(start,
             toInt(fn.arg(1), getVM(fn)));
 
     const bool selected = (fn.nargs > 2) ? toBool(fn.arg(2), getVM(fn)) : true;
@@ -665,7 +657,7 @@ textsnapshot_ctor(const fn_call& fn)
 {
     as_object* ptr = ensure<ValidThis>(fn);
 
-    MovieClip* mc = (fn.nargs == 1) ? fn.arg(0).toMovieClip() : 0;
+    MovieClip* mc = (fn.nargs == 1) ? fn.arg(0).toMovieClip() : nullptr;
 
     ptr->setRelay(new TextSnapshot_as(mc));
     return as_value();
diff --git a/libcore/asobj/XMLNode_as.cpp b/libcore/asobj/XMLNode_as.cpp
index 9865783..6b3f43a 100644
--- a/libcore/asobj/XMLNode_as.cpp
+++ b/libcore/asobj/XMLNode_as.cpp
@@ -19,7 +19,7 @@
 
 #include "XMLNode_as.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 #include <string>
 #include <sstream>
 #include <vector>
@@ -79,33 +79,32 @@ namespace {
 XMLNode_as::XMLNode_as(Global_as& gl)
     :
     _global(gl),
-    _object(0),
-    _parent(0),
+    _object(nullptr),
+    _parent(nullptr),
     _attributes(new as_object(gl)),
-    _childNodes(0),
-    _type(Element),
-    _gcMarkInProgress(false)
+    _childNodes(nullptr),
+    _type(Element)
 {
 }
 
 XMLNode_as::XMLNode_as(const XMLNode_as& tpl, bool deep)
     :
     _global(tpl._global),
-    _object(0),
-    _parent(0), 
+    _object(nullptr),
+    _parent(nullptr),
     _attributes(new as_object(_global)),
-    _childNodes(0),
+    _childNodes(nullptr),
     _name(tpl._name),
     _value(tpl._value),
-    _type(tpl._type),
-    _gcMarkInProgress(false)
+    _type(tpl._type)
 {
     // only clone children if in deep mode
     if (deep) {
         const Children& from=tpl._children;
-        for (Children::const_iterator it=from.begin(), itEnd=from.end();
-                        it != itEnd; ++it) {
-            _children.push_back(new XMLNode_as(*(*it), deep));
+        for (const auto& child : from) {
+            XMLNode_as* copy = new XMLNode_as(*child, deep);
+            copy->setParent(this);
+            _children.push_back(copy);
         }
     }
 }
@@ -120,7 +119,7 @@ XMLNode_as::~XMLNode_as()
         //       (due to updateChildNodes)
         // See https://savannah.gnu.org/bugs/?40439
         _parent->_children.remove(this);
-        _parent = 0; 
+        _parent = nullptr;
     }
 
     clearChildren();
@@ -191,7 +190,7 @@ XMLNode_as::hasChildNodes() const
 XMLNode_as*
 XMLNode_as::firstChild() const
 {
-    if (_children.empty()) return 0;
+    if (_children.empty()) return nullptr;
     return _children.front();
 }
 
@@ -206,7 +205,7 @@ XMLNode_as*
 XMLNode_as::lastChild() const
 {
 	if (_children.empty()) {
-        return 0;
+        return nullptr;
 	}
 	return _children.back();
 }
@@ -214,7 +213,7 @@ XMLNode_as::lastChild() const
 void
 XMLNode_as::removeChild(XMLNode_as* node)
 {
-    node->setParent(0);
+    node->setParent(nullptr);
     _children.remove(node);
     updateChildNodes();
 }
@@ -228,6 +227,20 @@ XMLNode_as::appendChild(XMLNode_as* node)
     updateChildNodes();
 }
 
+bool
+XMLNode_as::descendsFrom(XMLNode_as* node) const
+{
+    if (node == this) {
+        return true;
+    }
+    XMLNode_as* parent = getParent();
+    if (parent) {
+        return parent->descendsFrom(node);
+    }
+
+    return false;
+}
+
 void
 XMLNode_as::insertBefore(XMLNode_as* newnode, XMLNode_as* pos)
 {
@@ -257,30 +270,29 @@ XMLNode_as::insertBefore(XMLNode_as* newnode, XMLNode_as* pos)
 XMLNode_as*
 XMLNode_as::previousSibling() const
 {
-    if (!_parent) return 0;
- 	if (_parent->_children.size() <= 1) return 0;
+    if (!_parent) return nullptr;
+ 	if (_parent->_children.size() <= 1) return nullptr;
 
-    XMLNode_as *previous_node = 0;
-    for (Children::iterator itx = _parent->_children.begin();
-            itx != _parent->_children.end(); ++itx) {
+    XMLNode_as *previous_node = nullptr;
+    for (XMLNode_as * child : _parent->_children) {
 
-        if (*itx == this) return previous_node;
+        if (child == this) return previous_node;
 		
-        previous_node = *itx;
+        previous_node = child;
     }
 
-    return 0;
+    return nullptr;
 }
 
 XMLNode_as*
 XMLNode_as::nextSibling() const
 {
 
-    if (!_parent) return 0;
+    if (!_parent) return nullptr;
 
-    if (_parent->_children.size() <= 1) return 0;
+    if (_parent->_children.size() <= 1) return nullptr;
 
-    XMLNode_as *previous_node = 0;
+    XMLNode_as *previous_node = nullptr;
     for (Children::reverse_iterator itx = _parent->_children.rbegin();
             itx != _parent->_children.rend(); ++itx) {
 
@@ -288,7 +300,7 @@ XMLNode_as::nextSibling() const
 		previous_node = *itx;
     }
 
-    return 0;
+    return nullptr;
 }
 
 void
@@ -319,7 +331,7 @@ XMLNode_as::getPrefixForNamespace(const std::string& ns, std::string& prefix)
         if (!attrs.empty())
         {
             it = std::find_if(attrs.begin(), attrs.end(), 
-                        boost::bind(namespaceMatches, _1, ns));
+                        std::bind(namespaceMatches, std::placeholders::_1, ns));
             if (it != attrs.end()) break;
         }
         node = node->getParent();
@@ -359,7 +371,7 @@ XMLNode_as::getNamespaceForPrefix(const std::string& prefix, std::string& ns)
         if (!attrs.empty()) {
 
             it = std::find_if(attrs.begin(), attrs.end(), 
-                        boost::bind(prefixMatches, _1, prefix));
+                        std::bind(prefixMatches, std::placeholders::_1, prefix));
             if (it != attrs.end()) break;
         }
         node = node->getParent();
@@ -391,11 +403,9 @@ XMLNode_as::extractPrefix(std::string& prefix) const
 void
 XMLNode_as::clearChildren()
 {
-    for (Children::iterator it = _children.begin(), e = _children.end();
-            it != e; ++it) {
-        XMLNode_as* node = *it;
+    for (XMLNode_as* node : _children) {
 
-        node->setParent(0);
+        node->setParent(nullptr);
         if (!node->_object) {
             // The node is not GC'd because it has no associated object. 
             // See XMLNode_as class docs.
@@ -405,7 +415,7 @@ XMLNode_as::clearChildren()
     _children.clear();
 
     // Reset so that it is reinitialized on next access.
-    _childNodes = 0;
+    _childNodes = nullptr;
 }
 
 void
@@ -431,10 +441,9 @@ XMLNode_as::stringify(const XMLNode_as& xml, std::ostream& xmlout, bool encode)
         enumerateAttributes(xml, attrs);
         if (!attrs.empty()) {
 
-            for (StringPairs::iterator i = 
-                    attrs.begin(), e = attrs.end(); i != e; ++i) { 
-                escapeXML(i->second);
-                xmlout << " " << i->first << "=\"" << i->second << "\"";
+            for (auto& attr : attrs) { 
+                escapeXML(attr.second);
+                xmlout << " " << attr.first << "=\"" << attr.second << "\"";
             }
         }
 
@@ -465,10 +474,9 @@ XMLNode_as::stringify(const XMLNode_as& xml, std::ostream& xmlout, bool encode)
     }
 
     // Childs, after node as_value.
-    for (Children::const_iterator itx = xml._children.begin(); 
-            itx != xml._children.end(); ++itx) {
+    for (XMLNode_as* child : xml._children) {
 
-        (*itx)->toString(xmlout, encode);
+        child->toString(xmlout, encode);
     }
 
     if (!nodeName.empty() || type == Element) {
@@ -482,15 +490,11 @@ XMLNode_as::setReachable()
     // If there is a parent, make sure its object is reachable. This goes
     // up towards the root node of tree without marking the XMLNode
     // resources (which would cause infinite recursion).
-    if ( _gcMarkInProgress ) return;
-
-    GCMarkGuard markGuard(this);
-
     if (_parent && _parent->_object) _parent->_object->setReachable();
 
 	// Mark children
     std::for_each(_children.begin(), _children.end(),
-            boost::mem_fn(&XMLNode_as::setReachable));
+            std::mem_fn(&XMLNode_as::setReachable));
 
 	// Mark attributes object
 	if (_attributes) _attributes->setReachable();
@@ -581,7 +585,7 @@ xmlnode_new(const fn_call& fn)
         return as_value();
     }
 
-    std::auto_ptr<XMLNode_as> xml(new XMLNode_as(getGlobal(fn)));
+    std::unique_ptr<XMLNode_as> xml(new XMLNode_as(getGlobal(fn)));
     xml->nodeTypeSet(XMLNode_as::NodeType(toInt(fn.arg(0), getVM(fn))));
 
     if (fn.nargs > 1) {
@@ -628,6 +632,14 @@ xmlnode_appendChild(const fn_call& fn)
 		return as_value();
 	}
 
+    if (ptr->descendsFrom(node)) {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("XMLNode.appendChild(): attempted to move a node to "
+            "among its own descendants."));
+        );
+        return as_value();
+    }
+
     XMLNode_as* parent = node->getParent();
     if (parent) {
         parent->removeChild(node);
@@ -688,6 +700,14 @@ xmlnode_insertBefore(const fn_call& fn)
 		return as_value();
 	}
 
+    if (pos->descendsFrom(newnode)) {
+        IF_VERBOSE_ASCODING_ERRORS(
+        log_aserror(_("XMLNode.insertBefore(): attempted to move a node to "
+            "among its own descendants."));
+        );
+        return as_value();
+    }
+
     ptr->insertBefore(newnode, pos);
     return as_value();
     
diff --git a/libcore/asobj/XMLNode_as.h b/libcore/asobj/XMLNode_as.h
index 45c7254..f62d78e 100644
--- a/libcore/asobj/XMLNode_as.h
+++ b/libcore/asobj/XMLNode_as.h
@@ -113,6 +113,9 @@ public:
         return _namespaceURI;
     }
 
+    /// Returns true if 'this' descends from the specified node.
+    bool descendsFrom(XMLNode_as* node) const;
+
     ///  Returns true if the specified node has child nodes; otherwise,
     ///  returns false.
     bool hasChildNodes() const;
@@ -265,26 +268,6 @@ private:
 
     static void stringify(const XMLNode_as& xml, std::ostream& xmlout,
             bool encode);
-
-    /// Is GC mark scan in progress ? 
-    //
-    /// Used to guard against infinite loops
-    ///
-    bool _gcMarkInProgress;
-
-    /// Class to prevent infinite loops
-    //
-    /// could probably be replaced with a templated class taking an
-    /// object and two values to toggle between.
-    /// See also FrameGuard, TargetGuard and PoolGuard
-    class GCMarkGuard {
-        XMLNode_as* _x;
-    public:
-        GCMarkGuard(XMLNode_as* x): _x(x) { _x->_gcMarkInProgress = true; }
-        ~GCMarkGuard() { _x->_gcMarkInProgress = false; }
-    };
-    friend class GCMarkGuard;
-
 };
 
 // Initialize the global XMLNode class
diff --git a/libcore/asobj/XMLSocket_as.cpp b/libcore/asobj/XMLSocket_as.cpp
index cea7fc5..4ff2fbd 100644
--- a/libcore/asobj/XMLSocket_as.cpp
+++ b/libcore/asobj/XMLSocket_as.cpp
@@ -20,9 +20,7 @@
 
 #include "XMLSocket_as.h"
 
-#include <boost/thread.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include <string>
 
 #include "namedStrings.h"
@@ -79,7 +77,7 @@ public:
     /// @return         false if the connection is not allowed, otherwise true.
     ///                 Note that a return of true does not mean a successful
     ///                 connection.
-    bool connect(const std::string& host, boost::uint16_t port);
+    bool connect(const std::string& host, std::uint16_t port);
 
     /// Send a string with a null-terminator to the socket.
     //
@@ -161,7 +159,7 @@ XMLSocket_as::update()
 
 
 bool
-XMLSocket_as::connect(const std::string& host, boost::uint16_t port)
+XMLSocket_as::connect(const std::string& host, std::uint16_t port)
 {
 
     if (!URLAccessManager::allowXMLSocket(host, port)) {
@@ -193,7 +191,7 @@ XMLSocket_as::checkForIncomingData()
     std::vector<std::string> msgs;
     
     const int bufSize = 10000;
-    boost::scoped_array<char> buf(new char[bufSize]);
+    std::unique_ptr<char[]> buf(new char[bufSize]);
 
     const size_t bytesRead = _socket.readNonBlocking(buf.get(), bufSize - 1);
 
@@ -280,7 +278,7 @@ void
 xmlsocket_class_init(as_object& where, const ObjectURI& uri)
 {
     registerBuiltinClass(where, xmlsocket_new, attachXMLSocketInterface,
-            0, uri);
+            nullptr, uri);
 }
 
 void
@@ -331,7 +329,7 @@ xmlsocket_connect(const fn_call& fn)
     // TODO: find out.
     // Other ports and hosts are checked against security policy before
     // acceptance or rejection.
-    if (port > std::numeric_limits<boost::uint16_t>::max()) {
+    if (port > std::numeric_limits<std::uint16_t>::max()) {
         return as_value(false);
     }
     
diff --git a/libcore/asobj/XML_as.cpp b/libcore/asobj/XML_as.cpp
index a361856..052bfa5 100644
--- a/libcore/asobj/XML_as.cpp
+++ b/libcore/asobj/XML_as.cpp
@@ -23,7 +23,6 @@
 #include <sstream>
 #include <vector>
 #include <algorithm>
-#include <boost/assign/list_of.hpp>
 #include <boost/algorithm/string/compare.hpp>
 #include <boost/algorithm/string/replace.hpp>
 
@@ -106,10 +105,9 @@ escapeXML(std::string& text)
 {
     const Entities& ent = getEntities();
 
-    for (Entities::const_iterator i = ent.begin(), e = ent.end();
-            i != e; ++i)
+    for (const auto& entity : ent)
     {
-        boost::replace_all(text, i->second, i->first);
+        boost::replace_all(text, entity.second, entity.first);
     }
 }
 
@@ -118,9 +116,8 @@ unescapeXML(std::string& text)
 {
     const Entities& ent = getEntities();
 
-    for (Entities::const_iterator i = ent.begin(), e = ent.end();
-            i != e; ++i) {
-        boost::replace_all(text, i->first, i->second);
+    for (const auto& entity : ent) {
+        boost::replace_all(text, entity.first, entity.second);
     }
 
     // Additionally, the   entity is unescaped (but never escaped).
@@ -311,10 +308,6 @@ XML_as::parseTag(XMLNode_as*& node, xml_iterator& it,
 
     if (!closing) {
 
-        XMLNode_as* childNode = new XMLNode_as(_global);
-        childNode->nodeNameSet(tagName);
-        childNode->nodeTypeSet(Element);
-
         // Skip to the end of any whitespace after the tag name
         it = endName;
 
@@ -323,6 +316,10 @@ XML_as::parseTag(XMLNode_as*& node, xml_iterator& it,
            return;
         }
 
+        XMLNode_as* childNode = new XMLNode_as(_global);
+        childNode->nodeNameSet(tagName);
+        childNode->nodeTypeSet(Element);
+
         // Parse any attributes in an opening tag only, stopping at "/>" or
         // '>'
         // Attributes are added in reverse order and without any duplicates.
@@ -343,7 +340,10 @@ XML_as::parseTag(XMLNode_as*& node, xml_iterator& it,
         }
         
         // Do nothing more if there was an error in attributes parsing.
-        if (_status != XML_OK) return;
+        if (_status != XML_OK) {
+            delete childNode;
+            return;
+        }
 
         // testsuite/swfdec/xml-id-map.as tests that the node is appended
         // first.
@@ -519,7 +519,7 @@ void
 xml_class_init(as_object& where, const ObjectURI& uri)
 {
     Global_as& gl = getGlobal(where);
-    as_object* cl = gl.createClass(&xml_new, 0);
+    as_object* cl = gl.createClass(&xml_new, nullptr);
 
     as_function* ctor = getMember(gl, NSV::CLASS_XMLNODE).to_function();
 
@@ -655,11 +655,11 @@ xml_status(const fn_call& fn)
 
     const double status = toNumber(fn.arg(0), getVM(fn));
     if (isNaN(status) ||
-            status > std::numeric_limits<boost::int32_t>::max() ||
-            status < std::numeric_limits<boost::int32_t>::min()) {
+            status > std::numeric_limits<std::int32_t>::max() ||
+            status < std::numeric_limits<std::int32_t>::min()) {
 
         ptr->setStatus(static_cast<XML_as::ParseStatus>(
-                    std::numeric_limits<boost::int32_t>::min()));
+                    std::numeric_limits<std::int32_t>::min()));
     }
     else ptr->setStatus(static_cast<XML_as::ParseStatus>(int(status)));
     return as_value();
@@ -937,12 +937,13 @@ setIdMap(as_object& xml, XMLNode_as& childNode, const std::string& val)
 const Entities&
 getEntities()
 {
-    static const Entities entities = boost::assign::map_list_of
-        ("&", "&")
-        (""", "\"")
-        ("<", "<")
-        (">", ">")
-        ("'", "'");
+    static const Entities entities = {
+        {"&", "&"},
+        {""", "\""},
+        {"<", "<"},
+        {">", ">"},
+        {"'", "'"}
+    };
 
     return entities;
 }
diff --git a/libcore/asobj/XML_as.h b/libcore/asobj/XML_as.h
index 0284c2f..36d1c50 100644
--- a/libcore/asobj/XML_as.h
+++ b/libcore/asobj/XML_as.h
@@ -120,7 +120,7 @@ public:
     ///
     void parseXML(const std::string& xml);
 
-    ParseStatus status() const {
+    int status() const {
         return _status;
     }
 
@@ -177,7 +177,8 @@ private:
     //  1 if successfully loaded
     LoadStatus _loaded;
 
-    ParseStatus _status;	
+    // Nominally used to store ParseStatus, but can be any int value.
+    int _status;
  
     std::string _docTypeDecl;
 
diff --git a/libcore/asobj/flash/display/BitmapData_as.cpp b/libcore/asobj/flash/display/BitmapData_as.cpp
index 273aabc..34b4287 100644
--- a/libcore/asobj/flash/display/BitmapData_as.cpp
+++ b/libcore/asobj/flash/display/BitmapData_as.cpp
@@ -27,7 +27,7 @@
 #include <boost/random.hpp>
 #include <boost/iterator/zip_iterator.hpp>
 #include <boost/tuple/tuple.hpp>
-#include <boost/array.hpp>
+#include <array>
 #include <cmath>
 
 #include "MovieClip.h"
@@ -102,7 +102,7 @@ namespace {
     //
     /// Note: calls pixelAt(), so do not use this more than necessary!
     void setPixel32(const BitmapData_as& bd, size_t x, size_t y,
-            boost::uint32_t color);
+            std::uint32_t color);
 
     /// Set the RGB values at (x, y) to the RGB components of a colour.
     //
@@ -110,9 +110,9 @@ namespace {
     //
     /// Note: calls pixelAt(), so do not use this more than necessary!
     void setPixel(const BitmapData_as& bd, size_t x, size_t y,
-            boost::uint32_t color);
+            std::uint32_t color);
 
-    boost::uint32_t getPixel(const BitmapData_as& bd, size_t x, size_t y);
+    std::uint32_t getPixel(const BitmapData_as& bd, size_t x, size_t y);
 
     /// Get the overlapping part of a rectangle and a Bitmap
     //
@@ -126,13 +126,13 @@ namespace {
     /// @param h    The height of the rectangle.
     void adjustRect(int& x, int& y, int& w, int& h, const BitmapData_as& b);
 
-    boost::uint32_t setChannel(boost::uint32_t targ, boost::uint8_t bitmask,
-            boost::uint8_t value);
+    std::uint32_t setChannel(std::uint32_t targ, std::uint8_t bitmask,
+            std::uint8_t value);
 
-    boost::uint8_t getChannel(boost::uint32_t src, boost::uint8_t bitmask);
+    std::uint8_t getChannel(std::uint32_t src, std::uint8_t bitmask);
 
     void floodFill(const BitmapData_as& bd, size_t startx, size_t starty,
-            boost::uint32_t old, boost::uint32_t fill);
+            std::uint32_t old, std::uint32_t fill);
 
     /// Fill a rectangle of the BitmapData_as
     //
@@ -145,9 +145,9 @@ namespace {
     /// @param h        The height of the rectangle.
     /// @param color    The ARGB colour to fill with.
     void fillRect(const BitmapData_as& bd, int x, int y, int w, int h,
-            boost::uint32_t color);
+            std::uint32_t color);
 
-    inline bool oneBitSet(boost::uint8_t mask) {
+    inline bool oneBitSet(std::uint8_t mask) {
         return mask == (mask & -mask);
     }
 }
@@ -202,7 +202,7 @@ private:
 template<typename NoiseGenerator>
 struct NoiseAdapter
 {
-    NoiseAdapter(NoiseGenerator& n, boost::uint8_t bitmask, bool grey)
+    NoiseAdapter(NoiseGenerator& n, std::uint8_t bitmask, bool grey)
         :
         _gen(n),
         _bitmask(bitmask),
@@ -210,14 +210,14 @@ struct NoiseAdapter
     {}
 
     /// Generate a 32-bit ARGB noise value.
-    boost::uint32_t operator()() {
+    std::uint32_t operator()() {
 
         if (_greyscale) {
-            boost::uint8_t val = _gen();
+            std::uint8_t val = _gen();
             return 0xff000000 | val | val << 8 | val << 16;
         }
 
-        boost::uint32_t ret = 0xff000000;
+        std::uint32_t ret = 0xff000000;
 
         if (_bitmask & BitmapData_as::CHANNEL_RED) {
             ret |= (_gen() << 16);
@@ -230,7 +230,7 @@ struct NoiseAdapter
         }
         if (_bitmask & BitmapData_as::CHANNEL_ALPHA) {
             // Alpha is 0xff by default.
-            const boost::uint8_t rd = _gen();
+            const std::uint8_t rd = _gen();
             ret &= (~rd) << 24;
         }
         return ret;
@@ -238,7 +238,7 @@ struct NoiseAdapter
 
 private:
     NoiseGenerator& _gen;
-    const boost::uint8_t _bitmask;
+    const std::uint8_t _bitmask;
     const bool _greyscale;
 };
 
@@ -252,26 +252,26 @@ struct CopyChannel
     typedef boost::tuple<Iterator, Iterator> iterator_tuple;
     typedef boost::zip_iterator<iterator_tuple> iterator_type;
 
-    CopyChannel(bool multiple, boost::uint8_t srcchans,
-            boost::uint8_t destchans)
+    CopyChannel(bool multiple, std::uint8_t srcchans,
+            std::uint8_t destchans)
         :
         _multiple(multiple),
         _srcchans(srcchans),
         _destchans(destchans)
     {}
 
-    boost::uint32_t operator()(typename iterator_type::value_type p) const {
+    std::uint32_t operator()(typename iterator_type::value_type p) const {
         // If multiple source channels, we set the destination channel
         // to black. Else to the value of the requested channel.
-        const boost::uint8_t val = _multiple ?
+        const std::uint8_t val = _multiple ?
             0 : getChannel(boost::get<0>(p), _srcchans);
         return setChannel(boost::get<1>(p), _destchans, val);
     }
 
 private:
     const bool _multiple;
-    const boost::uint8_t _srcchans;
-    const boost::uint8_t _destchans;
+    const std::uint8_t _srcchans;
+    const std::uint8_t _destchans;
 
 };
 
@@ -295,8 +295,8 @@ void normalize(T& a, T& b)
 /// @tparam B       The size of the permutation table.
 /// @tparam Offset  An offset for generating non-identical patterns with the
 ///                 same Perlin noise generator.
-template<typename T, boost::uint32_t Size = 0x100,
-    boost::uint32_t Offset = 1327>
+template<typename T, std::uint32_t Size = 0x100,
+    std::uint32_t Offset = 1327>
 struct PerlinNoise
 {
     typedef T value_type;
@@ -310,7 +310,7 @@ struct PerlinNoise
         init(seed);
     }
 
-    boost::uint32_t size() const {
+    std::uint32_t size() const {
         return Size;
     }
 
@@ -421,18 +421,18 @@ private:
     }
 
     // A random permutation table.
-    boost::array<size_t, Size * 2 + 2> permTable;
+    std::array<size_t, Size * 2 + 2> permTable;
 
     // The gradient stuff.
-    boost::array<boost::array<T, 2>, Size * 2 + 2> g2;
+    std::array<std::array<T, 2>, Size * 2 + 2> g2;
 };
 
 /// Store offsets.
 struct Vector
 {
-    Vector(boost::int32_t x, boost::int32_t y) : x(x), y(y) {}
-    boost::int32_t x;
-    boost::int32_t y;
+    Vector(std::int32_t x, std::int32_t y) : x(x), y(y) {}
+    std::int32_t x;
+    std::int32_t y;
 };
 
 /// Transform negative offsets into positive ones
@@ -586,7 +586,7 @@ struct VectorPusher
         as_value x, y;
         if (!p->get_member(NSV::PROP_X, &x)) return;
         if (!p->get_member(NSV::PROP_Y, &y)) return;
-        _offsets.push_back(Vector(toInt(x, _vm), toInt(y, _vm)));
+        _offsets.emplace_back(toInt(x, _vm), toInt(y, _vm));
     }
 
 private:
@@ -597,17 +597,17 @@ private:
 } // anonymous namespace
 
 BitmapData_as::BitmapData_as(as_object* owner,
-        std::auto_ptr<image::GnashImage> im)
+        std::unique_ptr<image::GnashImage> im)
     :
     _owner(owner),
-    _cachedBitmap(0)
+    _cachedBitmap(nullptr)
 {
     assert(im->width() <= 2880);
     assert(im->height() <= 2880);
     
     // If there is a renderer, cache the image there, otherwise we store it.
     Renderer* r = getRunResources(*_owner).renderer();
-    if (r) _cachedBitmap = r->createCachedBitmap(im);
+    if (r) _cachedBitmap = r->createCachedBitmap(std::move(im));
     else _image.reset(im.release());
 }
     
@@ -630,7 +630,7 @@ void
 BitmapData_as::dispose()
 {
     if (_cachedBitmap) _cachedBitmap->dispose();
-    _cachedBitmap = 0;
+    _cachedBitmap = nullptr;
     _image.reset();
     updateObjects();
 }
@@ -728,7 +728,7 @@ bitmapdata_clone(const fn_call& fn)
     const size_t width = bm->width();
     const size_t height = bm->height();
 
-    std::auto_ptr<image::GnashImage> im;
+    std::unique_ptr<image::GnashImage> im;
     if (bm->transparent()) {
         im.reset(new image::ImageRGBA(width, height));
     }
@@ -746,7 +746,7 @@ bitmapdata_clone(const fn_call& fn)
         ret->set_member(NSV::PROP_uuPROTOuu, proto);
     }
 
-    ret->setRelay(new BitmapData_as(ret, im));
+    ret->setRelay(new BitmapData_as(ret, std::move(im)));
 
     return as_value(ret);
 }
@@ -802,11 +802,11 @@ bitmapdata_copyChannel(const fn_call& fn)
     // is negative (currently it is truncated and made positive.
 
     // The source channel mask
-    const boost::uint8_t srcchans = 
+    const std::uint8_t srcchans =
         std::abs(toInt(fn.arg(3), getVM(fn))) & 15;
 
     // The destination channel mask
-    const boost::uint8_t destchans = 
+    const std::uint8_t destchans =
         std::abs(toInt(fn.arg(4), getVM(fn))) & 15;
 
     // If more than one destination channel is specified,
@@ -933,25 +933,30 @@ bitmapdata_copyPixels(const fn_call& fn)
     rect->get_member(NSV::PROP_X, &x);
     rect->get_member(NSV::PROP_Y, &y);
     rect->get_member(NSV::PROP_WIDTH, &w);
-    rect->get_member(NSV::PROP_HEIGHT, &h);    
+    rect->get_member(NSV::PROP_HEIGHT, &h);
+
+    int destX = 0;
+    int destY = 0;
     
+    // Find true source rect and true dest rect.
     as_object* destpoint = toObject(fn.arg(2), getVM(fn));
-    as_value px, py;
+    if (destpoint) {
+        as_value px, py;
     
-    destpoint->get_member(NSV::PROP_X, &px);
-    destpoint->get_member(NSV::PROP_Y, &py);
+        destpoint->get_member(NSV::PROP_X, &px);
+        destpoint->get_member(NSV::PROP_Y, &py);
+
+        destX = toInt(px, getVM(fn));
+        destY = toInt(py, getVM(fn));
+    }
 
     // TODO: remaining arguments.
 
-    // Find true source rect and true dest rect.
     int sourceX = toInt(x, getVM(fn));
     int sourceY = toInt(y, getVM(fn));
     int sourceW = toInt(w, getVM(fn));
     int sourceH = toInt(h, getVM(fn));
 
-    int destX = toInt(px, getVM(fn));
-    int destY = toInt(py, getVM(fn));
-
     // Any part of the source rect that is not in the image (i.e.
     // above or left) is concatenated to the destination offset.
     if (sourceX < 0) destX -= sourceX;
@@ -1137,7 +1142,7 @@ bitmapdata_fillRect(const fn_call& fn)
     obj->get_member(NSV::PROP_WIDTH, &w);
     obj->get_member(NSV::PROP_HEIGHT, &h);    
 
-    const boost::uint32_t color = toInt(fn.arg(1), getVM(fn));
+    const std::uint32_t color = toInt(fn.arg(1), getVM(fn));
        
     fillRect(*ptr, toInt(x, getVM(fn)), toInt(y, getVM(fn)),
             toInt(w, getVM(fn)), toInt(h, getVM(fn)), color);
@@ -1170,8 +1175,8 @@ bitmapdata_floodFill(const fn_call& fn)
         return as_value();
     }
 
-    const boost::uint32_t fill = toInt(fn.arg(2), getVM(fn));
-    const boost::uint32_t old = *pixelAt(*ptr, x, y);
+    const std::uint32_t fill = toInt(fn.arg(2), getVM(fn));
+    const std::uint32_t old = *pixelAt(*ptr, x, y);
 
     // This checks whether the colours are the same.
     floodFill(*ptr, x, y, old, fill);
@@ -1218,7 +1223,7 @@ bitmapdata_getPixel(const fn_call& fn)
 
     // Note: x and y are converted to size_t, so negative values becomre
     // very large and are also outside the image. This is perfectly legal!
-    return static_cast<boost::int32_t>(getPixel(*ptr, x, y) & 0xffffff);
+    return static_cast<std::int32_t>(getPixel(*ptr, x, y) & 0xffffff);
 }
 
 as_value
@@ -1242,7 +1247,7 @@ bitmapdata_getPixel32(const fn_call& fn)
     
     // Note: x and y are converted to size_t, so negative values becomre
     // very large and are also outside the image. This is perfectly legal!
-    return static_cast<boost::int32_t>(getPixel(*ptr, x, y));
+    return static_cast<std::int32_t>(getPixel(*ptr, x, y));
 }
 
 
@@ -1276,13 +1281,13 @@ bitmapdata_noise(const fn_call& fn)
     }
     const int seed = toInt(fn.arg(0), getVM(fn));
 
-    const boost::uint8_t low = fn.nargs > 1 ?
+    const std::uint8_t low = fn.nargs > 1 ?
         clamp(toInt(fn.arg(1), getVM(fn)), 0, 255) : 0;
 
-    const boost::uint8_t high = fn.nargs > 2 ?
+    const std::uint8_t high = fn.nargs > 2 ?
         clamp<int>(toInt(fn.arg(2), getVM(fn)), low, 255) : 255;
 
-    const boost::uint8_t chans = fn.nargs > 3 ?
+    const std::uint8_t chans = fn.nargs > 3 ?
         std::abs(toInt(fn.arg(3), getVM(fn))) & 15 :
             BitmapData_as::CHANNEL_RED |
             BitmapData_as::CHANNEL_GREEN |
@@ -1338,7 +1343,7 @@ bitmapdata_perlinNoise(const fn_call& fn)
         toBool(fn.arg(5), getVM(fn)) : false;
 
     // Which channels to use.
-    const boost::uint8_t channels = fn.nargs > 6 ?
+    const std::uint8_t channels = fn.nargs > 6 ?
         clamp<int>(toInt(fn.arg(6), getVM(fn)), 0, 255) :
             BitmapData_as::CHANNEL_RED |
             BitmapData_as::CHANNEL_GREEN |
@@ -1386,7 +1391,7 @@ bitmapdata_perlinNoise(const fn_call& fn)
         const size_t x = pixel % width;
         const size_t y = pixel / width;
 
-        boost::uint8_t rv = 0;
+        std::uint8_t rv = 0;
 
         if (greyscale || channels & BitmapData_as::CHANNEL_RED) {
             // Create one noise channel.
@@ -1394,7 +1399,7 @@ bitmapdata_perlinNoise(const fn_call& fn)
             rv = clamp(r, 0.0, 255.0);
         }
 
-        boost::uint8_t av = 0xff;
+        std::uint8_t av = 0xff;
 
         // It's just a waste of time if the BitmapData has no alpha.
         if (transparent && channels & BitmapData_as::CHANNEL_ALPHA) {
@@ -1413,8 +1418,8 @@ bitmapdata_perlinNoise(const fn_call& fn)
         // Otherwise create data for the other channels too by using the
         // PerlinNoise object's pattern offset (this is cheaper than using a
         // separate generator)
-        boost::uint8_t gv = 0;
-        boost::uint8_t bv = 0;
+        std::uint8_t gv = 0;
+        std::uint8_t bv = 0;
 
         if (channels & BitmapData_as::CHANNEL_GREEN) {
             const double g = pa(x, y, 1);
@@ -1467,7 +1472,7 @@ bitmapdata_setPixel(const fn_call& fn)
     }
 
     // Ignore any transparency here.
-    const boost::uint32_t color = toInt(fn.arg(2), getVM(fn));
+    const std::uint32_t color = toInt(fn.arg(2), getVM(fn));
 
     setPixel(*ptr, x, y, color);
 
@@ -1491,7 +1496,7 @@ bitmapdata_setPixel32(const fn_call& fn)
     }
 
     // TODO: multiply.
-    const boost::uint32_t color = toInt(fn.arg(2), getVM(fn));
+    const std::uint32_t color = toInt(fn.arg(2), getVM(fn));
 
     setPixel32(*ptr, x, y, color);
 
@@ -1599,7 +1604,7 @@ bitmapdata_loadBitmap(const fn_call& fn)
 
     const movie_definition* def = root->definition();
 
-    const boost::uint16_t id = def->exportID(linkage);
+    const std::uint16_t id = def->exportID(linkage);
     CachedBitmap* bit = def->getBitmap(id);
 
     if (!bit) return as_value();
@@ -1612,7 +1617,7 @@ bitmapdata_loadBitmap(const fn_call& fn)
         return as_value();
     }
  
-    std::auto_ptr<image::GnashImage> newImage;
+    std::unique_ptr<image::GnashImage> newImage;
     if (im.type() == image::TYPE_RGBA) {
         newImage.reset(new image::ImageRGBA(width, height));
     }
@@ -1626,7 +1631,7 @@ bitmapdata_loadBitmap(const fn_call& fn)
     ret->set_member(NSV::PROP_uuPROTOuu, getMember(*ptr, NSV::PROP_PROTOTYPE));
     
     newImage->update(im.begin());
-    ret->setRelay(new BitmapData_as(ret, newImage));
+    ret->setRelay(new BitmapData_as(ret, std::move(newImage)));
 
     return as_value(ret);
 }
@@ -1659,7 +1664,7 @@ bitmapdata_ctor(const fn_call& fn)
     const size_t width = toInt(fn.arg(0), getVM(fn));
     const size_t height = toInt(fn.arg(1), getVM(fn));
     const bool transparent = fn.nargs > 2 ? toBool(fn.arg(2), getVM(fn)) : true;
-    boost::uint32_t fillColor =
+    std::uint32_t fillColor =
         fn.nargs > 3 ? toInt(fn.arg(3), getVM(fn)) : 0xffffffff;
     
     if (width > 2880 || height > 2880 || width < 1 || height < 1) {
@@ -1670,7 +1675,7 @@ bitmapdata_ctor(const fn_call& fn)
         throw ActionTypeError();
     }
 
-    std::auto_ptr<image::GnashImage> im;
+    std::unique_ptr<image::GnashImage> im;
     if (transparent) {
         im.reset(new image::ImageRGBA(width, height));
     }
@@ -1686,7 +1691,7 @@ bitmapdata_ctor(const fn_call& fn)
     std::fill(image::begin<image::ARGB>(*im), image::end<image::ARGB>(*im),
             fillColor);
 
-    ptr->setRelay(new BitmapData_as(ptr, im));
+    ptr->setRelay(new BitmapData_as(ptr, std::move(im)));
 
     return as_value(); 
 }
@@ -1748,7 +1753,7 @@ pixelAt(const BitmapData_as& bd, size_t x, size_t y)
     return (bd.begin() + y * width + x);
 }
 
-boost::uint32_t
+std::uint32_t
 getPixel(const BitmapData_as& bd, size_t x, size_t y)
 {
     if (x >= bd.width() || y >= bd.height()) return 0;
@@ -1756,18 +1761,18 @@ getPixel(const BitmapData_as& bd, size_t x, size_t y)
 }
 
 void
-setPixel(const BitmapData_as& bd, size_t x, size_t y, boost::uint32_t color) 
+setPixel(const BitmapData_as& bd, size_t x, size_t y, std::uint32_t color)
 {
     if (bd.disposed()) return;
     if (x >= bd.width() || y >= bd.height()) return;
 
     BitmapData_as::iterator it = pixelAt(bd, x, y);
-    const boost::uint32_t val = *it;
+    const std::uint32_t val = *it;
     *it = (color & 0xffffff) | (val & 0xff000000);
 }
 
 void
-setPixel32(const BitmapData_as& bd, size_t x, size_t y, boost::uint32_t color) 
+setPixel32(const BitmapData_as& bd, size_t x, size_t y, std::uint32_t color)
 {
     if (bd.disposed()) return;
     if (x >= bd.width() || y >= bd.height()) return;
@@ -1778,7 +1783,7 @@ setPixel32(const BitmapData_as& bd, size_t x, size_t y, boost::uint32_t color)
 
 void
 fillRect(const BitmapData_as& bd, int x, int y, int w, int h,
-        boost::uint32_t color)
+        std::uint32_t color)
 {
     adjustRect(x, y, w, h, bd);
 
@@ -1804,7 +1809,7 @@ fillRect(const BitmapData_as& bd, int x, int y, int w, int h,
 
 void
 floodFill(const BitmapData_as& bd, size_t startx, size_t starty,
-        boost::uint32_t old, boost::uint32_t fill)
+        std::uint32_t old, std::uint32_t fill)
 {
     const size_t width = bd.width();
     const size_t height = bd.height();
@@ -1919,8 +1924,8 @@ adjustRect(int& x, int& y, int& w, int& h, const BitmapData_as& b)
 }
 
 
-boost::uint8_t
-getChannel(boost::uint32_t src, boost::uint8_t bitmask)
+std::uint8_t
+getChannel(std::uint32_t src, std::uint8_t bitmask)
 {
     if (bitmask & BitmapData_as::CHANNEL_RED) {
         // Red
@@ -1941,11 +1946,11 @@ getChannel(boost::uint32_t src, boost::uint8_t bitmask)
     return 0;
 }
 
-boost::uint32_t
-setChannel(boost::uint32_t targ, boost::uint8_t bitmask, boost::uint8_t value)
+std::uint32_t
+setChannel(std::uint32_t targ, std::uint8_t bitmask, std::uint8_t value)
 {
-    boost::uint32_t bytemask = 0;
-    boost::uint32_t valmask = 0;
+    std::uint32_t bytemask = 0;
+    std::uint32_t valmask = 0;
     if (bitmask & BitmapData_as::CHANNEL_RED) {
         // Red
         bytemask = 0xff0000;
diff --git a/libcore/asobj/flash/display/BitmapData_as.h b/libcore/asobj/flash/display/BitmapData_as.h
index ac288e9..a028ffa 100644
--- a/libcore/asobj/flash/display/BitmapData_as.h
+++ b/libcore/asobj/flash/display/BitmapData_as.h
@@ -22,8 +22,8 @@
 #define GNASH_ASOBJ_BITMAPDATA_H
 
 #include <list>
-#include <boost/cstdint.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <cstdint>
+#include <memory>
 #include <cassert>
 #include <boost/intrusive_ptr.hpp>
 #include <memory>
@@ -77,7 +77,7 @@ public:
     //
     /// The constructor sets the immutable size of the
     /// bitmap, as well as whether it can handle transparency or not.
-	BitmapData_as(as_object* owner, std::auto_ptr<image::GnashImage> im);
+	BitmapData_as(as_object* owner, std::unique_ptr<image::GnashImage> im);
 
     virtual ~BitmapData_as() {}
 
@@ -166,7 +166,7 @@ private:
 
     boost::intrusive_ptr<CachedBitmap> _cachedBitmap;
 
-    boost::scoped_ptr<image::GnashImage> _image;
+    std::unique_ptr<image::GnashImage> _image;
 
     std::list<DisplayObject*> _attachedObjects;
 
diff --git a/libcore/asobj/flash/external/ExternalInterface_as.cpp b/libcore/asobj/flash/external/ExternalInterface_as.cpp
index 86530e6..a72fd4a 100644
--- a/libcore/asobj/flash/external/ExternalInterface_as.cpp
+++ b/libcore/asobj/flash/external/ExternalInterface_as.cpp
@@ -234,7 +234,7 @@ attachExternalInterfaceStaticInterface(as_object& o)
     // here, but it seems that the properties actually are visible in SWF6
     // and SWF7, at least for the flashplayer 9. So we just make sure they
     // are read-only.
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, &o, null, 7);
 }
 
@@ -320,8 +320,7 @@ externalinterface_available(const fn_call& fn)
       {
           const RunResources& r = m.runResources();
           const std::string& baseurl = r.streamProvider().baseURL().str();
-          char hostname[MAXHOSTNAMELEN];
-          std::memset(hostname, 0, MAXHOSTNAMELEN);
+          char hostname[MAXHOSTNAMELEN] = {};
           
           if (::gethostname(hostname, MAXHOSTNAMELEN) != 0) {
               mode = false;
diff --git a/libcore/asobj/flash/filters/BevelFilter_as.cpp b/libcore/asobj/flash/filters/BevelFilter_as.cpp
index c28c859..28bc2c8 100644
--- a/libcore/asobj/flash/filters/BevelFilter_as.cpp
+++ b/libcore/asobj/flash/filters/BevelFilter_as.cpp
@@ -125,7 +125,7 @@ bevelfilter_highlightColor(const fn_call& fn)
     if (fn.nargs == 0) {
         return as_value(ptr->m_highlightColor );
     }
-    boost::uint32_t sp_highlightColor = toNumber(fn.arg(0), getVM(fn));
+    std::uint32_t sp_highlightColor = toNumber(fn.arg(0), getVM(fn));
     ptr->m_highlightColor = sp_highlightColor;
     return as_value();
 }
@@ -137,7 +137,7 @@ bevelfilter_highlightAlpha(const fn_call& fn)
     if (fn.nargs == 0) {
         return as_value(ptr->m_highlightAlpha );
     }
-    boost::uint8_t sp_highlightAlpha = toNumber(fn.arg(0), getVM(fn));
+    std::uint8_t sp_highlightAlpha = toNumber(fn.arg(0), getVM(fn));
     ptr->m_highlightAlpha = sp_highlightAlpha;
     return as_value();
 }
@@ -149,7 +149,7 @@ bevelfilter_shadowColor(const fn_call& fn)
     if (fn.nargs == 0) {
         return as_value(ptr->m_shadowColor );
     }
-    boost::uint32_t sp_shadowColor = toNumber(fn.arg(0), getVM(fn));
+    std::uint32_t sp_shadowColor = toNumber(fn.arg(0), getVM(fn));
     ptr->m_shadowColor = sp_shadowColor;
     return as_value();
 }
@@ -161,7 +161,7 @@ bevelfilter_shadowAlpha(const fn_call& fn)
     if (fn.nargs == 0) {
         return as_value(ptr->m_shadowAlpha );
     }
-    boost::uint8_t sp_shadowAlpha = toNumber(fn.arg(0), getVM(fn));
+    std::uint8_t sp_shadowAlpha = toNumber(fn.arg(0), getVM(fn));
     ptr->m_shadowAlpha = sp_shadowAlpha;
     return as_value();
 }
@@ -209,7 +209,7 @@ bevelfilter_quality(const fn_call& fn)
     if (fn.nargs == 0) {
 		return as_value(ptr->m_quality );
     }
-    boost::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
+    std::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
     ptr->m_quality = sp_quality;
     return as_value();
 }
diff --git a/libcore/asobj/flash/filters/BitmapFilter_as.cpp b/libcore/asobj/flash/filters/BitmapFilter_as.cpp
index b201270..aa27fa0 100644
--- a/libcore/asobj/flash/filters/BitmapFilter_as.cpp
+++ b/libcore/asobj/flash/filters/BitmapFilter_as.cpp
@@ -89,7 +89,7 @@ registerBitmapClass(as_object& where, Global_as::ASFunction ctor,
         VM& vm = getVM(where);
         proto = constructInstance(*constructor, as_environment(vm), args);
     }
-    else proto = 0;
+    else proto = nullptr;
 
     as_object* cl = gl.createClass(ctor, createObject(gl));
     if (proto) p(*proto);
diff --git a/libcore/asobj/flash/filters/BlurFilter_as.cpp b/libcore/asobj/flash/filters/BlurFilter_as.cpp
index 6c709f4..6da489f 100644
--- a/libcore/asobj/flash/filters/BlurFilter_as.cpp
+++ b/libcore/asobj/flash/filters/BlurFilter_as.cpp
@@ -92,7 +92,7 @@ blurfilter_quality(const fn_call& fn)
     if (fn.nargs == 0) {
 		return as_value(ptr->m_quality );
     }
-    boost::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
+    std::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
     ptr->m_quality = sp_quality;
     return as_value();
 }
diff --git a/libcore/asobj/flash/filters/DropShadowFilter_as.cpp b/libcore/asobj/flash/filters/DropShadowFilter_as.cpp
index 20ae315..7060223 100644
--- a/libcore/asobj/flash/filters/DropShadowFilter_as.cpp
+++ b/libcore/asobj/flash/filters/DropShadowFilter_as.cpp
@@ -184,7 +184,7 @@ dropshadowfilter_quality(const fn_call& fn)
     if (fn.nargs == 0) {
 		return as_value(ptr->m_quality );
     }
-    boost::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
+    std::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
     ptr->m_quality = sp_quality;
     return as_value();
 }
diff --git a/libcore/asobj/flash/filters/GlowFilter_as.cpp b/libcore/asobj/flash/filters/GlowFilter_as.cpp
index 1a85c2e..77ccc51 100644
--- a/libcore/asobj/flash/filters/GlowFilter_as.cpp
+++ b/libcore/asobj/flash/filters/GlowFilter_as.cpp
@@ -90,7 +90,7 @@ glowfilter_inner(const fn_call& fn)
     if (fn.nargs == 0) {
         return as_value(ptr->m_inner );
     }
-    boost::uint32_t sp_inner = toNumber(fn.arg(0), getVM(fn));
+    std::uint32_t sp_inner = toNumber(fn.arg(0), getVM(fn));
     ptr->m_inner = sp_inner;
     return as_value();
 }
@@ -162,7 +162,7 @@ glowfilter_quality(const fn_call& fn)
     if (fn.nargs == 0) {
 		return as_value(ptr->m_quality );
     }
-    boost::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
+    std::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
     ptr->m_quality = sp_quality;
     return as_value();
 }
diff --git a/libcore/asobj/flash/filters/GradientBevelFilter_as.cpp b/libcore/asobj/flash/filters/GradientBevelFilter_as.cpp
index 14c414d..f58659a 100644
--- a/libcore/asobj/flash/filters/GradientBevelFilter_as.cpp
+++ b/libcore/asobj/flash/filters/GradientBevelFilter_as.cpp
@@ -184,7 +184,7 @@ gradientbevelfilter_quality(const fn_call& fn)
     if (fn.nargs == 0) {
 		return as_value(ptr->m_quality );
     }
-    boost::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
+    std::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
     ptr->m_quality = sp_quality;
     return as_value();
 }
diff --git a/libcore/asobj/flash/filters/GradientGlowFilter_as.cpp b/libcore/asobj/flash/filters/GradientGlowFilter_as.cpp
index 9f7ba4a..f580c19 100644
--- a/libcore/asobj/flash/filters/GradientGlowFilter_as.cpp
+++ b/libcore/asobj/flash/filters/GradientGlowFilter_as.cpp
@@ -185,7 +185,7 @@ gradientglowfilter_quality(const fn_call& fn)
     if (fn.nargs == 0) {
 		return as_value(ptr->m_quality );
     }
-    boost::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
+    std::uint8_t sp_quality = toNumber(fn.arg(0), getVM(fn));
     ptr->m_quality = sp_quality;
     return as_value();
 }
diff --git a/libcore/asobj/flash/geom/ColorTransform_as.cpp b/libcore/asobj/flash/geom/ColorTransform_as.cpp
index 25c4643..bd0fb17 100644
--- a/libcore/asobj/flash/geom/ColorTransform_as.cpp
+++ b/libcore/asobj/flash/geom/ColorTransform_as.cpp
@@ -322,20 +322,20 @@ colortransform_rgb(const fn_call& fn)
     if (!fn.nargs)
     {
         // Getter
-        boost::uint32_t r = static_cast<boost::uint32_t>(
+        std::uint32_t r = static_cast<std::uint32_t>(
                 std::fmod(relay->getRedOffset(), 4294967296.0));
-        boost::uint32_t g = static_cast<boost::uint32_t>(
+        std::uint32_t g = static_cast<std::uint32_t>(
                 std::fmod(relay->getGreenOffset(), 4294967296.0));
-        boost::uint32_t b = static_cast<boost::uint32_t>(
+        std::uint32_t b = static_cast<std::uint32_t>(
                 std::fmod(relay->getBlueOffset(), 4294967296.0));
-        boost::uint32_t rgb = (r << 16) + (g << 8) + b;
+        std::uint32_t rgb = (r << 16) + (g << 8) + b;
 
         return as_value(rgb);
     }
 
     // Setter
 
-    boost::uint32_t rgb = toInt(fn.arg(0), getVM(fn));
+    std::uint32_t rgb = toInt(fn.arg(0), getVM(fn));
     relay->setRedOffset((rgb & 0xFF0000) >> 16);
     relay->setGreenOffset((rgb & 0x00FF00) >> 8);
     relay->setBlueOffset(rgb & 0x0000FF);
diff --git a/libcore/asobj/flash/geom/Matrix_as.cpp b/libcore/asobj/flash/geom/Matrix_as.cpp
index 65ef537..9cec893 100644
--- a/libcore/asobj/flash/geom/Matrix_as.cpp
+++ b/libcore/asobj/flash/geom/Matrix_as.cpp
@@ -135,7 +135,7 @@ instanceOfMatrix(const fn_call& fn)
 
     as_function* ctor = getClassConstructor(fn, "flash.geom.Matrix");
     if (obj->instanceOf(ctor)) return obj;
-    return 0;
+    return nullptr;
 }
 
 /// Return an exact copy of the matrix.
diff --git a/libcore/asobj/flash/geom/Rectangle_as.cpp b/libcore/asobj/flash/geom/Rectangle_as.cpp
index 4b60e0b..369260c 100644
--- a/libcore/asobj/flash/geom/Rectangle_as.cpp
+++ b/libcore/asobj/flash/geom/Rectangle_as.cpp
@@ -200,7 +200,7 @@ Rectangle_containsPoint(const fn_call& fn)
 {
     as_object* ptr = ensure<ValidThis>(fn);
 
-    as_object* arg = (fn.nargs > 0) ? toObject(fn.arg(0), getVM(fn)) : 0;
+    as_object* arg = (fn.nargs > 0) ? toObject(fn.arg(0), getVM(fn)) : nullptr;
     
     VM& vm = getVM(fn);
 
@@ -365,7 +365,7 @@ Rectangle_offsetPoint(const fn_call& fn)
 {
     as_object* ptr = ensure<ValidThis>(fn);
 
-    as_object* arg = (fn.nargs > 0) ? toObject(fn.arg(0), getVM(fn)) : 0;
+    as_object* arg = (fn.nargs > 0) ? toObject(fn.arg(0), getVM(fn)) : nullptr;
     if (!arg) return as_value();
 
     as_value xdelta = getMember(*arg, NSV::PROP_X);
diff --git a/libcore/asobj/flash/net/FileReferenceList_as.h b/libcore/asobj/flash/net/FileReferenceList_as.h
index 7e07f73..cb15c5b 100644
--- a/libcore/asobj/flash/net/FileReferenceList_as.h
+++ b/libcore/asobj/flash/net/FileReferenceList_as.h
@@ -32,7 +32,7 @@ struct ObjectURI;
 void filereferencelist_class_init(as_object& where, const ObjectURI& uri);
 
 /// Return a FileReferenceList instance (in case the core lib needs it)
-//std::auto_ptr<as_object> init_FileReferenceList_instance();
+//std::unique_ptr<as_object> init_FileReferenceList_instance();
 
 } // end of gnash namespace
 
diff --git a/libcore/asobj/flash/net/FileReference_as.cpp b/libcore/asobj/flash/net/FileReference_as.cpp
index 5f19926..b3c3b24 100644
--- a/libcore/asobj/flash/net/FileReference_as.cpp
+++ b/libcore/asobj/flash/net/FileReference_as.cpp
@@ -35,11 +35,14 @@
 namespace gnash {
 
 namespace {
+#if 0
+    // Not yet implemented.
     as_value filereference_addListener(const fn_call& fn);
+    as_value filereference_removeListener(const fn_call& fn);
+#endif
     as_value filereference_browse(const fn_call& fn);
     as_value filereference_cancel(const fn_call& fn);
     as_value filereference_download(const fn_call& fn);
-    as_value filereference_removeListener(const fn_call& fn);
     as_value filereference_upload(const fn_call& fn);
     as_value filereference_creationDate(const fn_call& fn);
     as_value filereference_creator(const fn_call& fn);
@@ -65,7 +68,7 @@ filereference_class_init(as_object& where, const ObjectURI& uri)
   
 	AsBroadcaster::initialize(*proto);
 
-    as_object* null = 0;
+    as_object* null = nullptr;
     callMethod(&gl, NSV::PROP_AS_SET_PROP_FLAGS, proto, null, 3);
 
 	where.init_member(uri, cl, as_object::DefaultFlags); 
diff --git a/libcore/asobj/flash/net/FileReference_as.h b/libcore/asobj/flash/net/FileReference_as.h
index f72af70..682ffd0 100644
--- a/libcore/asobj/flash/net/FileReference_as.h
+++ b/libcore/asobj/flash/net/FileReference_as.h
@@ -32,7 +32,7 @@ struct ObjectURI;
 void filereference_class_init(as_object& where, const ObjectURI& uri);
 
 /// Return a FileReference instance (in case the core lib needs it)
-//std::auto_ptr<as_object> init_FileReference_instance();
+//std::unique_ptr<as_object> init_FileReference_instance();
 
 } // end of gnash namespace
 
diff --git a/libcore/asobj/flash/text/TextRenderer_as.cpp b/libcore/asobj/flash/text/TextRenderer_as.cpp
index c5152b9..5fec41c 100644
--- a/libcore/asobj/flash/text/TextRenderer_as.cpp
+++ b/libcore/asobj/flash/text/TextRenderer_as.cpp
@@ -43,7 +43,7 @@ namespace {
 void
 textrenderer_class_init(as_object& where, const ObjectURI& uri)
 {
-    registerBuiltinClass(where, textrenderer_ctor, 0,
+    registerBuiltinClass(where, textrenderer_ctor, nullptr,
             attachTextRendererStaticProperties, uri);
 }
 
diff --git a/libcore/asobj/flash/text/TextRenderer_as.h b/libcore/asobj/flash/text/TextRenderer_as.h
index bdc3e4e..a0edffe 100644
--- a/libcore/asobj/flash/text/TextRenderer_as.h
+++ b/libcore/asobj/flash/text/TextRenderer_as.h
@@ -32,7 +32,7 @@ struct ObjectURI;
 void textrenderer_class_init(as_object& where, const ObjectURI& uri);
 
 /// Return a TextRenderer instance (in case the core lib needs it)
-//std::auto_ptr<as_object> init_TextRenderer_instance();
+//std::unique_ptr<as_object> init_TextRenderer_instance();
 
 } // end of gnash namespace
 
diff --git a/libcore/builtin_function.h b/libcore/builtin_function.h
index 1508282..ac270b6 100644
--- a/libcore/builtin_function.h
+++ b/libcore/builtin_function.h
@@ -20,11 +20,14 @@
 #define GNASH_BUILTIN_FUNCTION_H
 
 #include "UserFunction.h" 
-#include "fn_call.h"
 
 #include <cassert>
 
 namespace gnash {
+    class fn_call;
+}
+
+namespace gnash {
 
 
 /// This is a special type of function implementing AS-code in C++
@@ -58,7 +61,7 @@ public:
     /// Return the number of registers required for function execution
     //
     /// Gnash's C++ implementations of AS functions don't need any registers!
-    virtual boost::uint8_t registers() const {
+    virtual std::uint8_t registers() const {
         return 0;
     }
 
diff --git a/libcore/event_id.cpp b/libcore/event_id.cpp
index e2c6b0c..78f1757 100644
--- a/libcore/event_id.cpp
+++ b/libcore/event_id.cpp
@@ -29,7 +29,6 @@
 #include <algorithm>
 #include <boost/format.hpp>
 #include <cassert>
-#include <boost/assign/list_of.hpp>
 
 namespace gnash {
 
@@ -37,27 +36,28 @@ const std::string&
 event_id::functionName() const
 {
     typedef std::map<EventCode, std::string> EventFunctionNameMap;
-    static const EventFunctionNameMap e = boost::assign::map_list_of
-        (INVALID, "INVALID")
-		(PRESS, "onPress")
-		(RELEASE, "onRelease")
-		(RELEASE_OUTSIDE, "onReleaseOutside")
-		(ROLL_OVER, "onRollOver")
-		(ROLL_OUT, "onRollOut")	
-		(DRAG_OVER, "onDragOver")
-		(DRAG_OUT, "onDragOut")	
-		(KEY_PRESS, "onKeyPress")
-		(INITIALIZE, "onInitialize")
-		(LOAD, "onLoad")
-		(UNLOAD, "onUnload")
-		(ENTER_FRAME, "onEnterFrame")
-		(MOUSE_DOWN, "onMouseDown")	
-		(MOUSE_UP, "onMouseUp")
-		(MOUSE_MOVE, "onMouseMove")
-		(KEY_DOWN, "onKeyDown")
-		(KEY_UP, "onKeyUp")	
-		(DATA, "onData")
-		(CONSTRUCT, "onConstruct");
+    static const EventFunctionNameMap e = {
+        {INVALID, "INVALID"},
+		{PRESS, "onPress"},
+		{RELEASE, "onRelease"},
+		{RELEASE_OUTSIDE, "onReleaseOutside"},
+		{ROLL_OVER, "onRollOver"},
+		{ROLL_OUT, "onRollOut"},	
+		{DRAG_OVER, "onDragOver"},
+		{DRAG_OUT, "onDragOut"},	
+		{KEY_PRESS, "onKeyPress"},
+		{INITIALIZE, "onInitialize"},
+		{LOAD, "onLoad"},
+		{UNLOAD, "onUnload"},
+		{ENTER_FRAME, "onEnterFrame"},
+		{MOUSE_DOWN, "onMouseDown"},	
+		{MOUSE_UP, "onMouseUp"},
+		{MOUSE_MOVE, "onMouseMove"},
+		{KEY_DOWN, "onKeyDown"},
+		{KEY_UP, "onKeyUp"},	
+		{DATA, "onData"},
+		{CONSTRUCT, "onConstruct"}
+    };
 
     EventFunctionNameMap::const_iterator it = e.find(_id);
     assert(it != e.end());
@@ -73,26 +73,27 @@ event_id::functionURI() const
     //       it contains string_table-dependent
     //       mutable entries
     //
-    static const EventFunctionMap e = boost::assign::map_list_of
-		(PRESS, NSV::PROP_ON_PRESS)
-		(RELEASE, NSV::PROP_ON_RELEASE)
-		(RELEASE_OUTSIDE, NSV::PROP_ON_RELEASE_OUTSIDE)
-		(ROLL_OVER, NSV::PROP_ON_ROLL_OVER )
-		(ROLL_OUT, NSV::PROP_ON_ROLL_OUT)
-		(DRAG_OVER, NSV::PROP_ON_DRAG_OVER)
-		(DRAG_OUT, NSV::PROP_ON_DRAG_OUT)
-		(KEY_PRESS, NSV::PROP_ON_KEY_PRESS)
-		(INITIALIZE, NSV::PROP_ON_INITIALIZE)
-		(LOAD, NSV::PROP_ON_LOAD)
-		(UNLOAD, NSV::PROP_ON_UNLOAD)
-		(ENTER_FRAME, NSV::PROP_ON_ENTER_FRAME)
-		(MOUSE_DOWN, NSV::PROP_ON_MOUSE_DOWN)
-		(MOUSE_UP, NSV::PROP_ON_MOUSE_UP)
-		(MOUSE_MOVE, NSV::PROP_ON_MOUSE_MOVE)
-		(KEY_DOWN, NSV::PROP_ON_KEY_DOWN)
-		(KEY_UP, NSV::PROP_ON_KEY_UP)
-		(DATA, NSV::PROP_ON_DATA)
-		(CONSTRUCT, NSV::PROP_ON_CONSTRUCT);
+    static const EventFunctionMap e = {
+		{PRESS, NSV::PROP_ON_PRESS},
+		{RELEASE, NSV::PROP_ON_RELEASE},
+		{RELEASE_OUTSIDE, NSV::PROP_ON_RELEASE_OUTSIDE},
+		{ROLL_OVER, NSV::PROP_ON_ROLL_OVER },
+		{ROLL_OUT, NSV::PROP_ON_ROLL_OUT},
+		{DRAG_OVER, NSV::PROP_ON_DRAG_OVER},
+		{DRAG_OUT, NSV::PROP_ON_DRAG_OUT},
+		{KEY_PRESS, NSV::PROP_ON_KEY_PRESS},
+		{INITIALIZE, NSV::PROP_ON_INITIALIZE},
+		{LOAD, NSV::PROP_ON_LOAD},
+		{UNLOAD, NSV::PROP_ON_UNLOAD},
+		{ENTER_FRAME, NSV::PROP_ON_ENTER_FRAME},
+		{MOUSE_DOWN, NSV::PROP_ON_MOUSE_DOWN},
+		{MOUSE_UP, NSV::PROP_ON_MOUSE_UP},
+		{MOUSE_MOVE, NSV::PROP_ON_MOUSE_MOVE},
+		{KEY_DOWN, NSV::PROP_ON_KEY_DOWN},
+		{KEY_UP, NSV::PROP_ON_KEY_UP},
+		{DATA, NSV::PROP_ON_DATA},
+		{CONSTRUCT, NSV::PROP_ON_CONSTRUCT}
+    };
 
     EventFunctionMap::const_iterator it = e.find(_id);
     assert(it != e.end());
diff --git a/libcore/event_id.h b/libcore/event_id.h
index 6890be5..14d2bde 100644
--- a/libcore/event_id.h
+++ b/libcore/event_id.h
@@ -110,7 +110,7 @@ public:
     //
     /// @param SWFKey   The SWF code matched to the event. This
     ///                 must be converted to a unique gnash::key::code.
-    void setKeyCode(boost::uint8_t SWFkey)
+    void setKeyCode(std::uint8_t SWFkey)
     {
         // Lookup the SWFcode in the gnash::key::code table.
         // Some are not unique (keypad numbers are the
diff --git a/libcore/fontlib.cpp b/libcore/fontlib.cpp
index 24e63dc..5adb695 100644
--- a/libcore/fontlib.cpp
+++ b/libcore/fontlib.cpp
@@ -50,13 +50,12 @@ Font*
 get_font(const std::string& name, bool bold, bool italic)
 {
     // Dumb linear search.
-    for (unsigned int i = 0; i < s_fonts.size(); i++)
+    for (auto& font : s_fonts)
     {
-        Font*	f = s_fonts[i].get();
-        assert(f);
-        if ( f->matches(name, bold, italic) )
+        assert(font);
+        if ( font->matches(name, bold, italic) )
         {
-            return f;
+            return font.get();
         }
     }
     Font* f = new Font(name, bold, italic);
@@ -70,9 +69,9 @@ add_font(Font* f)
     assert(f);
 #ifndef NDEBUG
     // Make sure font isn't already in the list.
-    for (unsigned int i = 0; i < s_fonts.size(); i++)
+    for (auto& font : s_fonts)
     {
-        assert(s_fonts[i] != f);
+        assert(font != f);
     }
 #endif // not NDEBUG
 
diff --git a/libcore/movie_root.cpp b/libcore/movie_root.cpp
index 3ec506c..952e063 100644
--- a/libcore/movie_root.cpp
+++ b/libcore/movie_root.cpp
@@ -30,7 +30,7 @@
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/ptr_container/ptr_deque.hpp>
 #include <boost/algorithm/string/case_conv.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 
 #include "GnashSystemIOHeaders.h" // write()
 #include "log.h"
@@ -126,7 +126,7 @@ void
 clear(movie_root::ActionQueue& aq)
 {
     std::for_each(aq.begin(), aq.end(), 
-            boost::mem_fn(&movie_root::ActionQueue::value_type::clear));
+            std::mem_fn(&movie_root::ActionQueue::value_type::clear));
 }
 
 } // anonymous namespace
@@ -137,8 +137,8 @@ movie_root::movie_root(VirtualClock& clock, const RunResources& runResources)
     _gc(*this),
     _runResources(runResources),
     _vm(*this, clock),
-    _interfaceHandler(0),
-    _fsCommandHandler(0),
+    _interfaceHandler(nullptr),
+    _fsCommandHandler(nullptr),
     _stageWidth(1),
     _stageHeight(1),
     m_background_color(255, 255, 255, 255),
@@ -147,9 +147,9 @@ movie_root::movie_root(VirtualClock& clock, const RunResources& runResources)
     _mouseY(0),
     _lastTimerId(0),
     _lastKeyEvent(key::INVALID),
-    _currentFocus(0),
+    _currentFocus(nullptr),
     _movies(),
-    _rootMovie(0),
+    _rootMovie(nullptr),
     _invalidated(true),
     _disableScripts(false),
     _processingActionLevel(PRIORITY_SIZE),
@@ -286,7 +286,7 @@ as_function*
 movie_root::getRegisteredClass(const SWF::DefinitionTag* sprite) const
 {
     RegisteredClasses::const_iterator it = _registeredClasses.find(sprite);
-    if (it == _registeredClasses.end()) return 0;
+    if (it == _registeredClasses.end()) return nullptr;
     return it->second;
 }
 
@@ -305,7 +305,7 @@ movie_root::cleanupAndCollect()
     _vm.getStack().clear();
 
     // Reset the constant pool
-    _vm.setConstantPool(0);
+    _vm.setConstantPool(nullptr);
 
     cleanupDisplayList();
     _gc.fuzzyCollect();
@@ -315,7 +315,7 @@ movie_root::cleanupAndCollect()
 void
 movie_root::setLevel(unsigned int num, Movie* movie)
 {
-    assert(movie != NULL);
+    assert(movie != nullptr);
     assert(static_cast<unsigned int>(movie->get_depth()) ==
                             num + DisplayObject::staticDepthOffset);
 
@@ -480,7 +480,10 @@ movie_root::dropLevel(int depth)
     }
 
     // TOCHECK: safe to erase here ?
-    mo->unload();
+
+    // Ignoring return value of unload(), because the only way to handle
+    // an unload failure is to call destroy, which is done anyway.
+    (void)mo->unload();
     mo->destroy();
     _movies.erase(it);
 
@@ -507,7 +510,7 @@ movie_root::getLevel(unsigned int num) const
     Levels::const_iterator i =
         _movies.find(num + DisplayObject::staticDepthOffset);
 
-    if (i == _movies.end()) return 0;
+    if (i == _movies.end()) return nullptr;
 
     return i->second;
 }
@@ -576,7 +579,7 @@ movie_root::setDimensions(size_t w, size_t h)
 }
 
 bool
-movie_root::mouseMoved(boost::int32_t x, boost::int32_t y)
+movie_root::mouseMoved(std::int32_t x, std::int32_t y)
 {
     assert(testInvariant());
 
@@ -596,10 +599,8 @@ movie_root::keyEvent(key::code k, bool down)
     }
 
     LiveChars copy = _liveChars;
-    for (LiveChars::iterator iter = copy.begin(), itEnd=copy.end();
-            iter != itEnd; ++iter) {
+    for (MovieClip* const ch : copy) {
 
-        MovieClip* const ch = *iter;
         if (ch->unloaded()) continue;
 
         if (down) {
@@ -637,10 +638,10 @@ movie_root::keyEvent(key::code k, bool down)
         // However, the previous attempt to fix caused real-life failures:
         // see bug #33889.
         ButtonListeners copy = _buttonListeners;
-        for (ButtonListeners::const_iterator it = copy.begin(), e = copy.end();
-                it != e; ++it) {
-            if ((*it)->unloaded()) continue;
-            (*it)->keyPress(k);
+        for (Button* button : copy) {
+            if (!button->unloaded()) {
+                button->keyPress(k);
+            }
         }
 
         // If we're focused on an editable text field, finally the text
@@ -661,8 +662,8 @@ movie_root::mouseWheel(int delta)
         getBuiltinObject(*this, getURI(_vm, NSV::CLASS_MOUSE));
     if (!mouseObj) return false;
     
-    const boost::int32_t x = pixelsToTwips(_mouseX);
-    const boost::int32_t y = pixelsToTwips(_mouseY);
+    const std::int32_t x = pixelsToTwips(_mouseX);
+    const std::int32_t y = pixelsToTwips(_mouseY);
 
     DisplayObject* i = getTopmostMouseEntity(x, y);
 
@@ -692,8 +693,8 @@ movie_root::fire_mouse_event()
 {
     assert(testInvariant());
 
-    boost::int32_t x = pixelsToTwips(_mouseX);
-    boost::int32_t y = pixelsToTwips(_mouseY);
+    std::int32_t x = pixelsToTwips(_mouseX);
+    std::int32_t y = pixelsToTwips(_mouseY);
 
     // Generate a mouse event
     _mouseButtonState.topmostEntity = getTopmostMouseEntity(x, y);
@@ -731,7 +732,7 @@ movie_root::fire_mouse_event()
     return need_redraw;
 }
 
-std::pair<boost::int32_t, boost::int32_t>
+std::pair<std::int32_t, std::int32_t>
 movie_root::mousePosition() const
 {
     assert(testInvariant());
@@ -755,8 +756,8 @@ movie_root::setDragState(const DragState& st)
         // Get current mouse coordinates
         const point world_mouse(pixelsToTwips(_mouseX), pixelsToTwips(_mouseY));
 
-        boost::int32_t xoffset = world_mouse.x - world_origin.x;
-        boost::int32_t yoffset = world_mouse.y - world_origin.y;
+        std::int32_t xoffset = world_mouse.x - world_origin.x;
+        std::int32_t yoffset = world_mouse.y - world_origin.y;
 
         _dragState->setOffset(xoffset, yoffset);
     }
@@ -808,8 +809,8 @@ movie_root::doMouseDrag()
     dragChar->setMatrix(local);
 }
 
-boost::uint32_t
-movie_root::addIntervalTimer(std::auto_ptr<Timer> timer)
+std::uint32_t
+movie_root::addIntervalTimer(std::unique_ptr<Timer> timer)
 {
     assert(timer.get());
     assert(testInvariant());
@@ -818,14 +819,13 @@ movie_root::addIntervalTimer(std::auto_ptr<Timer> timer)
 
     assert(_intervalTimers.find(id) == _intervalTimers.end());
 
-    boost::shared_ptr<Timer> t(timer);
-    _intervalTimers.insert(std::make_pair(id, t));
+    _intervalTimers.insert(std::make_pair(id, std::move(timer)));
 
     return id;
 }
     
 bool
-movie_root::clearIntervalTimer(boost::uint32_t x)
+movie_root::clearIntervalTimer(std::uint32_t x)
 {
     TimerMap::iterator it = _intervalTimers.find(x);
     if (it == _intervalTimers.end()) {
@@ -854,9 +854,9 @@ movie_root::advance()
 
     bool advanced = false;
 
-#ifdef USE_SOUND
     try {
         
+#ifdef USE_SOUND
         sound::sound_handler* s = _runResources.soundHandler();
 
         if (s && _timelineSound) {
@@ -925,6 +925,7 @@ movie_root::advance()
             }
         }
         else {
+#endif  // USE_SOUND
             // Driven by frame rate
             const size_t elapsed = now - _lastMovieAdvancement;
             if (elapsed >= _movieAdvancementDelay) {
@@ -932,7 +933,9 @@ movie_root::advance()
                 advanceMovie();
                 _lastMovieAdvancement = now;
             }
+#ifdef USE_SOUND
         }
+#endif  // USE_SOUND
         
         // Always do this.
         executeAdvanceCallbacks();
@@ -949,7 +952,6 @@ movie_root::advance()
         log_error(_("Buffer overread during advance: %s"), e.what());
         clear(_actionQueue);
     }
-#endif  // USE_SOUND
     
     return advanced;
 }
@@ -1019,8 +1021,8 @@ movie_root::display()
             frame_size.get_x_min(), frame_size.get_x_max(),
             frame_size.get_y_min(), frame_size.get_y_max());
 
-    for (Levels::iterator i=_movies.begin(), e=_movies.end(); i!=e; ++i) {
-        MovieClip* movie = i->second;
+    for (auto& elem : _movies) {
+        MovieClip* movie = elem.second;
 
         movie->clear_invalidated();
 
@@ -1030,7 +1032,7 @@ movie_root::display()
         const SWFRect& sub_frame_size = movie->get_frame_size();
 
         if (sub_frame_size.is_null()) {
-            log_debug("_level%u has null frame size, skipping", i->first);
+            log_debug("_level%u has null frame size, skipping", elem.first);
             continue;
         }
 
@@ -1042,10 +1044,8 @@ bool
 movie_root::notify_mouse_listeners(const event_id& event)
 {
     LiveChars copy = _liveChars;
-    for (LiveChars::iterator iter = copy.begin(), itEnd=copy.end();
-            iter != itEnd; ++iter)
+    for (MovieClip* const ch : copy)
     {
-        MovieClip* const ch = *iter;
         if (!ch->unloaded()) {
             ch->mouseEvent(event);
         }
@@ -1148,14 +1148,14 @@ movie_root::getActiveEntityUnderPointer() const
 DisplayObject*
 movie_root::getDraggingCharacter() const
 {
-    return _dragState ? _dragState->getCharacter() : 0;
+    return _dragState ? _dragState->getCharacter() : nullptr;
 }
 
 const DisplayObject*
 movie_root::getEntityUnderPointer() const
 {
-    const boost::int32_t x = pixelsToTwips(_mouseX);
-    const boost::int32_t y = pixelsToTwips(_mouseY);
+    const std::int32_t x = pixelsToTwips(_mouseX);
+    const std::int32_t y = pixelsToTwips(_mouseY);
     return findDropTarget(x, y, getDraggingCharacter()); 
 }
 
@@ -1399,7 +1399,7 @@ movie_root::processActionQueue(size_t lvl)
     // and a final call to .clear() 
     while (!q.empty()) {
 
-        std::auto_ptr<ExecutableCode> code(q.pop_front().release());
+        const std::unique_ptr<ExecutableCode> code(q.pop_front().release());
         code->execute();
 
         size_t minLevel = minPopulatedPriorityQueue();
@@ -1449,10 +1449,9 @@ movie_root::flushHigherPriorityActionQueues()
 }
 
 void
-movie_root::addLoadableObject(as_object* obj, std::auto_ptr<IOChannel> str)
+movie_root::addLoadableObject(as_object* obj, std::unique_ptr<IOChannel> str)
 {
-    boost::shared_ptr<IOChannel> io(str.release());
-    _loadCallbacks.push_back(LoadCallback(io, obj));
+    _loadCallbacks.emplace_back(std::move(str), obj);
 }
 
 void
@@ -1494,10 +1493,10 @@ movie_root::removeQueuedConstructor(MovieClip* target)
 }
 
 void
-movie_root::pushAction(std::auto_ptr<ExecutableCode> code, size_t lvl)
+movie_root::pushAction(std::unique_ptr<ExecutableCode> code, size_t lvl)
 {
     assert(lvl < PRIORITY_SIZE);
-    _actionQueue[lvl].push_back(code);
+    _actionQueue[lvl].push_back(code.release());
 }
 
 void
@@ -1508,9 +1507,9 @@ movie_root::pushAction(const action_buffer& buf, DisplayObject* target)
             target->getTargetPath());
 #endif
 
-    std::auto_ptr<ExecutableCode> code(new GlobalCode(buf, target));
+    std::unique_ptr<ExecutableCode> code(new GlobalCode(buf, target));
 
-    _actionQueue[PRIORITY_DOACTION].push_back(code);
+    _actionQueue[PRIORITY_DOACTION].push_back(code.release());
 }
 
 void
@@ -1536,8 +1535,9 @@ movie_root::executeAdvanceCallbacks()
 
         std::transform(_objectCallbacks.begin(), _objectCallbacks.end(),
             std::back_inserter(currentCallbacks),
-            boost::bind(CreatePointer<as_object>(),
-                boost::bind(std::mem_fun(&ActiveRelay::owner), _1)));
+            std::bind(CreatePointer<as_object>(),
+                std::bind(std::mem_fun(&ActiveRelay::owner),
+                    std::placeholders::_1)));
 
         std::for_each(currentCallbacks.begin(), currentCallbacks.end(),
                 ExecuteCallback());
@@ -1552,7 +1552,7 @@ movie_root::executeAdvanceCallbacks()
     // application. If it is set, we have to check the socket connection
     // for XML messages.
     if (_controlfd > 0) {
-    boost::shared_ptr<ExternalInterface::invoke_t> invoke = 
+    std::unique_ptr<ExternalInterface::invoke_t> invoke =
         ExternalInterface::ExternalEventCheck(_controlfd);
         if (invoke) {
             if (processInvoke(invoke.get()) == false) {
@@ -1705,7 +1705,7 @@ movie_root::executeTimers()
 
     unsigned long now = _vm.getTime();
 
-    typedef std::multimap<unsigned int, boost::shared_ptr<Timer> >
+    typedef std::multimap<unsigned long, Timer*>
         ExpiredTimers;
 
     ExpiredTimers expiredTimers;
@@ -1716,7 +1716,7 @@ movie_root::executeTimers()
         TimerMap::iterator nextIterator = it;
         ++nextIterator;
 
-        boost::shared_ptr<Timer> timer(it->second);
+        Timer* timer = it->second.get();
 
         if (timer->cleared()) {
             // this timer was cleared, erase it
@@ -1735,8 +1735,8 @@ movie_root::executeTimers()
     foreachSecond(expiredTimers.begin(), expiredTimers.end(),
                   &Timer::executeAndReset);
 
-    if (!expiredTimers.empty()) processActionQueue();
-
+    if (!expiredTimers.empty())
+        processActionQueue();
 }
 
 void
@@ -1760,7 +1760,6 @@ movie_root::markReachableResources() const
 
     std::for_each(_objectCallbacks.begin(), _objectCallbacks.end(),
             std::mem_fun(&ActiveRelay::setReachable));
-
     std::for_each(_loadCallbacks.begin(), _loadCallbacks.end(),
             std::mem_fun_ref(&movie_root::LoadCallback::setReachable));
 
@@ -1798,7 +1797,7 @@ movie_root::markReachableResources() const
 }
 
 InteractiveObject*
-movie_root::getTopmostMouseEntity(boost::int32_t x, boost::int32_t y) const
+movie_root::getTopmostMouseEntity(std::int32_t x, std::int32_t y) const
 {
     for (Levels::const_reverse_iterator i=_movies.rbegin(), e=_movies.rend();
             i != e; ++i)
@@ -1807,11 +1806,11 @@ movie_root::getTopmostMouseEntity(boost::int32_t x, boost::int32_t y) const
         if (ret) return ret;
     }
 
-    return 0;
+    return nullptr;
 }
 
 const DisplayObject *
-movie_root::findDropTarget(boost::int32_t x, boost::int32_t y,
+movie_root::findDropTarget(std::int32_t x, std::int32_t y,
         DisplayObject* dragging) const
 {
     for (Levels::const_reverse_iterator i=_movies.rbegin(), e=_movies.rend();
@@ -1820,7 +1819,7 @@ movie_root::findDropTarget(boost::int32_t x, boost::int32_t y,
         const DisplayObject* ret = i->second->findDropTarget(x, y, dragging);
         if (ret) return ret;
     }
-    return 0;
+    return nullptr;
 }
 
 /// This should store a callback object in movie_root.
@@ -1939,8 +1938,7 @@ movie_root::callExternalCallback(const std::string &name,
 void
 movie_root::removeButton(Button* listener)
 {
-    _buttonListeners.remove_if(
-            std::bind2nd(std::equal_to<Button*>(), listener));
+    _buttonListeners.remove(listener);
 }
 
 void
@@ -1956,7 +1954,7 @@ movie_root::registerButton(Button* listener)
 void
 movie_root::cleanupDisplayList()
 {
-#define GNASH_DEBUG_INSTANCE_LIST 1
+//#define GNASH_DEBUG_INSTANCE_LIST 1
 
 #ifdef GNASH_DEBUG_INSTANCE_LIST
     static size_t maxLiveChars = 0;
@@ -2002,9 +2000,7 @@ movie_root::cleanupDisplayList()
         needScan=false;
 
         // Remove unloaded MovieClips from the _liveChars list
-        for (LiveChars::iterator i = _liveChars.begin(), e = _liveChars.end();
-                i != e;) {
-            MovieClip* ch = *i;
+        _liveChars.remove_if([&](MovieClip* ch) {
             if (ch->unloaded()) {
                 // the sprite might have been destroyed already
                 // by effect of an unload() call with no onUnload
@@ -2028,14 +2024,13 @@ movie_root::cleanupDisplayList()
                 }
 #endif
 
-                i = _liveChars.erase(i);
-
 #ifdef GNASH_DEBUG_DLIST_CLEANUP
                 cleaned++;
 #endif
+                return true;
             }
-            else ++i; 
-        }
+            return false;
+        });
 
 #ifdef GNASH_DEBUG_DLIST_CLEANUP
         cout << " Scan " << scansCount << " cleaned " << cleaned <<
@@ -2044,8 +2039,9 @@ movie_root::cleanupDisplayList()
     } while (needScan);
 
 #ifdef GNASH_DEBUG_INSTANCE_LIST
-    if (_liveChars.size() > maxLiveChars) {
-        maxLiveChars = _liveChars.size();
+    size_t count = std::distance(begin(_liveChars), end(_liveChars));
+    if (count > maxLiveChars) {
+        maxLiveChars = count;
         log_debug("Global instance list grew to %d entries", maxLiveChars);
     }
 #endif
@@ -2061,11 +2057,11 @@ movie_root::advanceLiveChars()
 
     // Advance all characters, then notify them.
     LiveChars::iterator it;
-    for (it=_liveChars.begin(); it != _liveChars.end(); ++it) {
-        advanceLiveChar(*it);
+    for (MovieClip* liveChar : _liveChars) {
+        advanceLiveChar(liveChar);
     }
-    for (it=_liveChars.begin(); it != _liveChars.end(); ++it) {
-        notifyLoad(*it);
+    for (MovieClip* liveChar : _liveChars) {
+        notifyLoad(liveChar);
     }
 }
 
@@ -2087,7 +2083,7 @@ movie_root::set_background_color(const rgba& color)
 void
 movie_root::set_background_alpha(float alpha)
 {
-    const boost::uint8_t newAlpha = clamp<int>(frnd(alpha * 255.0f), 0, 255);
+    const std::uint8_t newAlpha = clamp<int>(frnd(alpha * 255.0f), 0, 255);
 
     if (m_background_color.m_a != newAlpha) {
         setInvalidated();
@@ -2098,7 +2094,7 @@ movie_root::set_background_alpha(float alpha)
 DisplayObject*
 movie_root::findCharacterByTarget(const std::string& tgtstr) const
 {
-    if (tgtstr.empty()) return 0;
+    if (tgtstr.empty()) return nullptr;
 
     // NOTE: getRootMovie() would be problematic in case the original
     //       root movie is replaced by a load to _level0... 
@@ -2122,7 +2118,7 @@ movie_root::findCharacterByTarget(const std::string& tgtstr) const
             log_debug("Evaluating DisplayObject target path: element"
                       "'%s' of path '%s' not found", part, tgtstr);
 #endif
-            return NULL;
+            return nullptr;
         }
         if (to == std::string::npos) break;
         from = to + 1;
@@ -2194,34 +2190,34 @@ movie_root::getURL(const std::string& urlstr, const std::string& target,
     /// This is when there is a hosting application.
     std::vector<as_value> fnargs;
     // The first argument we push on the stack is the URL
-    fnargs.push_back(as_value(urlstr));
+    fnargs.emplace_back(urlstr);
     
     // The second argument we push is the method
     switch (method) {
       case MovieClip::METHOD_POST:
-          fnargs.push_back(as_value("POST"));
+          fnargs.emplace_back("POST");
           break;
       case MovieClip::METHOD_GET:
-          fnargs.push_back(as_value("GET"));
+          fnargs.emplace_back("GET");
           break;
       case MovieClip::METHOD_NONE:
       default:
-          fnargs.push_back(as_value("GET"));
+          fnargs.emplace_back("GET");
           break;
     }
 
     // The third argument is the target, which is something like _blank
     // or _self.
     if (!target.empty()) {
-        fnargs.push_back(as_value(target));
+        fnargs.emplace_back(target);
     }
     // Add any data as the optional 4th argument
     if (!data.empty()) {
         // We have to write a value here so the data field is the fourth
         if (target.empty()) {
-            fnargs.push_back(as_value("none"));
+            fnargs.emplace_back("none");
         }
-        fnargs.push_back(as_value(data));
+        fnargs.emplace_back(data);
     }
 
     // TODO: should mutex-protect this ?
@@ -2239,7 +2235,7 @@ movie_root::getURL(const std::string& urlstr, const std::string& target,
 }
 
 void
-movie_root::setScriptLimits(boost::uint16_t recursion, boost::uint16_t timeout)
+movie_root::setScriptLimits(std::uint16_t recursion, std::uint16_t timeout)
 {
     if ( recursion == _recursionLimit && _timeoutLimit == timeout ) {
         // avoid the debug log...
@@ -2320,7 +2316,7 @@ movie_root::getCharacterTree(InfoTree& tr, InfoTree::iterator it)
 
     /// Stage: number of live MovieClips.
     std::ostringstream os;
-    os << _liveChars.size();
+    os << std::distance(begin(_liveChars), end(_liveChars));
     localIter = tr.append_child(it, std::make_pair(_("Live MovieClips"),
                 os.str()));
 
@@ -2355,7 +2351,7 @@ isLevelTarget(int version, const std::string& name, unsigned int& levelno)
         return false;
     }
     // getting 0 here for "_level" is intentional
-    levelno = std::strtoul(name.c_str() + 6, NULL, 0); 
+    levelno = std::strtoul(name.c_str() + 6, nullptr, 0);
     return true;
 }
 
@@ -2401,7 +2397,7 @@ movie_root::LoadCallback::processLoad()
     }
 
     const size_t chunksize = 65535;
-    boost::uint8_t chunk[chunksize];
+    std::uint8_t chunk[chunksize];
 
     size_t actuallyRead = _stream->readNonBlocking(chunk, chunksize);
 
@@ -2448,7 +2444,8 @@ movie_root::LoadCallback::processLoad()
     size_t size = _buf.size();
 
     // NOTE: the call below will possibly change 'size' parameter
-    char* bufptr = utf8::stripBOM((char*)_buf.data(), size, encoding);
+    const char* bufptr = utf8::stripBOM(
+        reinterpret_cast<const char*>(_buf.data()), size, encoding);
     if (encoding != utf8::encUTF8 && encoding != utf8::encUNSPECIFIED) {
         log_unimpl(_("%s to UTF8 conversion in LoadableObject input parsing"),
                 utf8::textEncodingName(encoding));
@@ -2463,8 +2460,7 @@ movie_root::LoadCallback::processLoad()
     // providing memory release except destruction. Will be
     // destroyed as soon as we return though...
 
-    // NOTE: Another data copy here !
-    callMethod(_obj, NSV::PROP_ON_DATA, dataVal);
+    callMethod(_obj, NSV::PROP_ON_DATA, std::move(dataVal));
 
     return true;
 }
@@ -2548,7 +2544,7 @@ generate_mouse_button_events(movie_root& mr, MouseButtonState& ms)
                     ms.activeEntity->mouseEvent(
                             event_id(event_id::RELEASE_OUTSIDE));
                     // We got out of active entity
-                    ms.activeEntity = 0; // so we don't get RollOut next...
+                    ms.activeEntity = nullptr; // so we don't get RollOut next...
                     need_redisplay = true;
                 }
             }
@@ -2615,7 +2611,7 @@ getBuiltinObject(movie_root& mr, const ObjectURI& cl)
     Global_as& gl = *mr.getVM().getGlobal();
 
     as_value val;
-    if (!gl.get_member(cl, &val)) return 0;
+    if (!gl.get_member(cl, &val)) return nullptr;
     return toObject(val, mr.getVM());
 }
 
diff --git a/libcore/movie_root.h b/libcore/movie_root.h
index a89787b..743bfeb 100644
--- a/libcore/movie_root.h
+++ b/libcore/movie_root.h
@@ -71,10 +71,10 @@
 #include <map>
 #include <string>
 #include <vector>
-#include <list>
+#include <forward_list>
 #include <set>
 #include <bitset>
-#include <boost/array.hpp>
+#include <array>
 #include <boost/ptr_container/ptr_deque.hpp>
 #include <boost/noncopyable.hpp>
 #include <boost/any.hpp>
@@ -93,6 +93,7 @@
 #include "VM.h"
 #include "HostInterface.h"
 #include "log.h"
+#include "IOChannel.h"
 
 #ifdef USE_SWFTREE
 # include "tree.hh"
@@ -114,7 +115,6 @@ namespace gnash {
     class Timer;
     class MovieClip;
     class VirtualClock;
-    class IOChannel;
     class RunResources;
     class Button;
     class VM;
@@ -153,19 +153,19 @@ public:
     
     class LoadCallback {
     public:
-        LoadCallback(boost::shared_ptr<IOChannel> s, as_object* o)
+        LoadCallback(std::unique_ptr<IOChannel> s, as_object* o)
             :
-            _stream(s),
+            _stream(std::move(s)),
             _obj(o)
         {}
         bool processLoad();
         void setReachable() const;
     private:
-        boost::shared_ptr<IOChannel> _stream;
+        std::unique_ptr<IOChannel> _stream;
         SimpleBuffer _buf;
         as_object* _obj;
     };
-    typedef std::list<LoadCallback> LoadCallbacks;        
+    typedef std::list<LoadCallback> LoadCallbacks;
 
     typedef std::bitset<key::KEYCOUNT> Keys;
 
@@ -267,7 +267,7 @@ public:
     ///
     /// TODO: take twips (or float pixels), or we won't be able to
     ///       support sub-pixel accuracy in collision detection.
-    DSOEXPORT bool mouseMoved(boost::int32_t x, boost::int32_t y);
+    DSOEXPORT bool mouseMoved(std::int32_t x, std::int32_t y);
 
     /// Inform the Stage that a mouse click has occurred.
     //
@@ -293,7 +293,7 @@ public:
     /// Use this to retrieve the last state of the mouse.
     //
     /// Coordinates are in PIXELS, NOT TWIPS.
-    std::pair<boost::int32_t, boost::int32_t> mousePosition() const;
+    std::pair<std::int32_t, std::int32_t> mousePosition() const;
 
     void setDragState(const DragState& st);
 
@@ -319,7 +319,7 @@ public:
     /// @return An integer indentifying the timer
     ///         for subsequent call to clear_interval_timer.
     ///         It will NEVER be zero.
-    boost::uint32_t addIntervalTimer(std::auto_ptr<Timer> timer);
+    std::uint32_t addIntervalTimer(std::unique_ptr<Timer> timer);
 
     /// Register an object for loading data to.
     //
@@ -337,7 +337,7 @@ public:
     //
     /// It may be possible for this function to handle all connections if
     /// it also takes a callback function to call on each advance.
-    void addLoadableObject(as_object* obj, std::auto_ptr<IOChannel> str);
+    void addLoadableObject(as_object* obj, std::unique_ptr<IOChannel> str);
 
     void addAdvanceCallback(ActiveRelay* obj);
 
@@ -346,7 +346,7 @@ public:
     /// Remove timer identified by given integer
     //
     /// @return true on success, false on error (no such timer)
-    bool clearIntervalTimer(boost::uint32_t x);
+    bool clearIntervalTimer(std::uint32_t x);
 
     void set_background_color(const rgba& color);
 
@@ -546,11 +546,11 @@ public:
     /// This is a ptr_deque because it needs no insertion in the middle but
     /// frequent push_back and pop_front. We also have to traverse it, so
     /// a queue is not usable.
-    typedef boost::array<boost::ptr_deque<ExecutableCode>, PRIORITY_SIZE>
+    typedef std::array<boost::ptr_deque<ExecutableCode>, PRIORITY_SIZE>
         ActionQueue;
 
     /// Push an executable code to the ActionQueue
-    void pushAction(std::auto_ptr<ExecutableCode> code, size_t lvl);
+    void pushAction(std::unique_ptr<ExecutableCode> code, size_t lvl);
 
     /// Push an executable code to the ActionQueue
     void pushAction(const action_buffer& buf, DisplayObject* target);
@@ -635,7 +635,7 @@ public:
     ///                 
     void loadMovie(const std::string& url, const std::string& target,
             const std::string& data, MovieClip::VariablesMethod method,
-            as_object* handler=0)
+            as_object* handler=nullptr)
     {
         _movieLoader.loadMovie(url, target, data, method, handler);
     }
@@ -762,17 +762,17 @@ public:
     ///             The default value for this (i.e. when no
     ///             ScriptLimits tag is present) is documented to be
     ///             15 to 20 seconds, depending on platform.
-    void setScriptLimits(boost::uint16_t recursion, boost::uint16_t timeout);
+    void setScriptLimits(std::uint16_t recursion, std::uint16_t timeout);
     
     /// Get the current global recursion limit for this movie: it can
     /// be changed by loaded movies.
-    boost::uint16_t getRecursionLimit() const {
+    std::uint16_t getRecursionLimit() const {
         return _recursionLimit;
     }
 
     /// Get the current global script timeout limit for this movie: it
     /// can be changed by loaded movies.
-    boost::uint16_t getTimeoutLimit() const
+    std::uint16_t getTimeoutLimit() const
     {
         return _timeoutLimit;
     }
@@ -897,8 +897,8 @@ private:
     /// @param y
     ///     Y ordinate of the pointer, in world coordiante space (twips).
     ///
-    InteractiveObject* getTopmostMouseEntity(boost::int32_t x,
-            boost::int32_t y) const;
+    InteractiveObject* getTopmostMouseEntity(std::int32_t x,
+            std::int32_t y) const;
 
     /// Delete DisplayObjects removed from the stage
     /// from the display lists
@@ -943,12 +943,12 @@ private:
         return (_processingActionLevel < PRIORITY_SIZE);
     }
 
-    const DisplayObject* findDropTarget(boost::int32_t x, boost::int32_t y,
+    const DisplayObject* findDropTarget(std::int32_t x, std::int32_t y,
             DisplayObject* dragging) const;
 
     void handleActionLimitHit(const std::string& ref);
 
-    typedef std::list<Button*> ButtonListeners;
+    typedef std::forward_list<Button*> ButtonListeners;
     ButtonListeners _buttonListeners;
 
     GC _gc;
@@ -971,7 +971,7 @@ private:
     /// ::advance of each element to insert new DisplayObjects before
     /// the start w/out invalidating iterators scanning the
     /// list forward for proper movie advancement
-    typedef std::list<MovieClip*> LiveChars;
+    typedef std::forward_list<MovieClip*> LiveChars;
 
     /// The list of advanceable DisplayObject, in placement order
     LiveChars _liveChars;
@@ -988,8 +988,8 @@ private:
     rgba m_background_color;
     bool m_background_color_set;
 
-    boost::int32_t _mouseX;
-    boost::int32_t _mouseY;
+    std::int32_t _mouseX;
+    std::int32_t _mouseY;
 
     MouseButtonState  _mouseButtonState;
 
@@ -999,7 +999,7 @@ private:
 
     LoadCallbacks _loadCallbacks;
     
-    typedef std::map<boost::uint32_t, boost::shared_ptr<Timer> > TimerMap;
+    typedef std::map<std::uint32_t, std::unique_ptr<Timer>> TimerMap;
 
     TimerMap _intervalTimers;
 
@@ -1068,10 +1068,10 @@ private:
     DisplayState _displayState;
     
     // Maximum number of recursions set in the ScriptLimits tag.
-    boost::uint16_t _recursionLimit;
+    std::uint16_t _recursionLimit;
 
     // Timeout in seconds for script execution, set in the ScriptLimits tag.
-    boost::uint16_t _timeoutLimit;
+    std::uint16_t _timeoutLimit;
 
     // delay between movie advancement, in milliseconds
     size_t _movieAdvancementDelay;
diff --git a/libcore/parser/BitmapMovieDefinition.cpp b/libcore/parser/BitmapMovieDefinition.cpp
index 6a15034..69d8a03 100644
--- a/libcore/parser/BitmapMovieDefinition.cpp
+++ b/libcore/parser/BitmapMovieDefinition.cpp
@@ -39,16 +39,16 @@ BitmapMovieDefinition::createMovie(Global_as& gl, DisplayObject* parent)
 }
 
 BitmapMovieDefinition::BitmapMovieDefinition(
-        std::auto_ptr<image::GnashImage> image,
-		Renderer* renderer, const std::string& url)
+        std::unique_ptr<image::GnashImage> image,
+		Renderer* renderer, std::string url)
 	:
 	_version(6),
 	_framesize(0, 0, image->width()*20, image->height()*20),
 	_framecount(1),
 	_framerate(12),
-	_url(url),
+	_url(std::move(url)),
 	_bytesTotal(image->size()),
-	_bitmap(renderer ? renderer->createCachedBitmap(image) : 0)
+	_bitmap(renderer ? renderer->createCachedBitmap(std::move(image)) : nullptr)
 {
 }
 
@@ -57,7 +57,7 @@ BitmapMovieDefinition::createDisplayObject(Global_as& /*gl*/,
         DisplayObject* /*parent*/) const
 {
     std::abort();
-    return 0;
+    return nullptr;
 }
 
 } // namespace gnash
diff --git a/libcore/parser/BitmapMovieDefinition.h b/libcore/parser/BitmapMovieDefinition.h
index 7992626..1caddf3 100644
--- a/libcore/parser/BitmapMovieDefinition.h
+++ b/libcore/parser/BitmapMovieDefinition.h
@@ -58,8 +58,8 @@ public:
 	///  - image->size() bytes (for get_bytes_loaded()/get_bytes_total())
 	///  - provided url
 	///
-	BitmapMovieDefinition(std::auto_ptr<image::GnashImage> image,
-            Renderer* renderer, const std::string& url);
+	BitmapMovieDefinition(std::unique_ptr<image::GnashImage> image,
+            Renderer* renderer, std::string url);
 
     virtual DisplayObject* createDisplayObject(Global_as&, DisplayObject*)
         const;
@@ -106,7 +106,7 @@ public:
 	}
 	
 	/// Create a playable Movie from this def.
-	virtual Movie* createMovie(Global_as& gl, DisplayObject* parent = 0);
+	virtual Movie* createMovie(Global_as& gl, DisplayObject* parent = nullptr);
 
 	virtual const std::string& get_url() const {
 		return _url;
diff --git a/libcore/parser/SWFMovieDefinition.cpp b/libcore/parser/SWFMovieDefinition.cpp
index beebe69..442e51e 100644
--- a/libcore/parser/SWFMovieDefinition.cpp
+++ b/libcore/parser/SWFMovieDefinition.cpp
@@ -24,9 +24,10 @@
 
 #include "SWFMovieDefinition.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 #include <boost/version.hpp>
-#include <boost/thread.hpp>
+#include <thread>
+#include <mutex>
 #include <iomanip>
 #include <memory>
 #include <string>
@@ -71,10 +72,7 @@ namespace gnash
 {
 
 SWFMovieLoader::SWFMovieLoader(SWFMovieDefinition& md)
-    :
-    _movie_def(md),
-    _thread(NULL),
-    _barrier(2) // us and the main thread..
+    : _movie_def(md)
 {
 }
 
@@ -82,44 +80,30 @@ SWFMovieLoader::~SWFMovieLoader()
 {
     // we should assert _movie_def._loadingCanceled
     // but we're not friend yet (anyone introduce us ?)
-    if ( _thread.get() )
+    if ( _thread.joinable() )
     {
         //cout << "Joining thread.." << endl;
-        _thread->join();
+        _thread.join();
     }
 }
 
 bool
 SWFMovieLoader::started() const
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
-    return _thread.get() != NULL;
+    return _thread.joinable();
 }
 
 bool
 SWFMovieLoader::isSelfThread() const
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
-    if (!_thread.get()) {
+    if (!_thread.joinable()) {
         return false;
     }
-#if BOOST_VERSION < 103500
-    boost::thread this_thread;
-    return this_thread == *_thread;
-#else
-    return boost::this_thread::get_id() == _thread->get_id();
-#endif
-
-}
-
-// static..
-void
-SWFMovieLoader::execute(SWFMovieLoader& ml, SWFMovieDefinition* md)
-{
-    ml._barrier.wait(); // let _thread assignment happen before going on
-    md->read_all_swf();
+    return std::this_thread::get_id() == _thread.get_id();
 }
 
 bool
@@ -129,15 +113,12 @@ SWFMovieLoader::start()
     std::abort();
 #endif
     // don't start SWFMovieLoader thread() which rely
-    // on boost::thread() returning before they are executed. Therefore,
+    // on std::thread() returning before they are executed. Therefore,
     // we must employ locking.
     // Those tests do seem a bit redundant, though...
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
-    _thread.reset(new boost::thread(boost::bind(
-                    execute, boost::ref(*this), &_movie_def)));
-
-    _barrier.wait(); // let execution start befor returning
+    _thread = std::thread(&SWFMovieDefinition::read_all_swf, &_movie_def);
 
     return true;
 }
@@ -157,7 +138,7 @@ SWFMovieDefinition::SWFMovieDefinition(const RunResources& runResources)
     _bytes_loaded(0),
     m_loading_sound_stream(-1),
     m_file_length(0),
-    m_jpeg_in(0),
+    m_jpeg_in(),
     _swf_end_pos(0),
     _loader(*this),
     _loadingCanceled(false),
@@ -169,22 +150,23 @@ SWFMovieDefinition::SWFMovieDefinition(const RunResources& runResources)
 SWFMovieDefinition::~SWFMovieDefinition()
 {
     // Request cancellation of the loading thread
+    std::lock_guard<std::mutex> lock(_loadingCanceledMutex);
     _loadingCanceled = true;
 }
 
 void
-SWFMovieDefinition::addDisplayObject(boost::uint16_t id, SWF::DefinitionTag* c)
+SWFMovieDefinition::addDisplayObject(std::uint16_t id, SWF::DefinitionTag* c)
 {
     assert(c);
-    boost::mutex::scoped_lock lock(_dictionaryMutex);
+    std::lock_guard<std::mutex> lock(_dictionaryMutex);
     _dictionary.addDisplayObject(id, c);
     addControlTag(c);
 }
 
 SWF::DefinitionTag*
-SWFMovieDefinition::getDefinitionTag(boost::uint16_t id) const
+SWFMovieDefinition::getDefinitionTag(std::uint16_t id) const
 {
-    boost::mutex::scoped_lock lock(_dictionaryMutex);
+    std::lock_guard<std::mutex> lock(_dictionaryMutex);
     boost::intrusive_ptr<SWF::DefinitionTag> ch = 
         _dictionary.getDisplayObject(id);
     return ch.get(); 
@@ -202,7 +184,7 @@ SWFMovieDefinition::get_font(int font_id) const
 {
 
     FontMap::const_iterator it = m_fonts.find(font_id);
-    if ( it == m_fonts.end() ) return NULL;
+    if ( it == m_fonts.end() ) return nullptr;
     boost::intrusive_ptr<Font> f = it->second;
     assert(f->get_ref_count() > 1);
     return f.get();
@@ -213,19 +195,19 @@ SWFMovieDefinition::get_font(const std::string& name, bool bold, bool italic)
     const
 {
 
-    for (FontMap::const_iterator it=m_fonts.begin(), itEnd=m_fonts.end(); it != itEnd; ++it)
+    for (const auto& elem : m_fonts)
     {
-       Font* f = it->second.get();
+       Font* f = elem.second.get();
        if ( f->matches(name, bold, italic) ) return f;
     }
-    return 0;
+    return nullptr;
 }
 
 CachedBitmap*
 SWFMovieDefinition::getBitmap(int id) const
 {
     const Bitmaps::const_iterator it = _bitmaps.find(id);
-    if (it == _bitmaps.end()) return 0;
+    if (it == _bitmaps.end()) return nullptr;
     return it->second.get();
 }
 
@@ -240,7 +222,7 @@ sound_sample*
 SWFMovieDefinition::get_sound_sample(int id) const
 {
     SoundSampleMap::const_iterator it = m_sound_samples.find(id);
-    if (it == m_sound_samples.end()) return 0;
+    if (it == m_sound_samples.end()) return nullptr;
 
     boost::intrusive_ptr<sound_sample> ch = it->second;
 
@@ -261,19 +243,19 @@ SWFMovieDefinition::add_sound_sample(int id, sound_sample* sam)
 
 // Read header and assign url
 bool
-SWFMovieDefinition::readHeader(std::auto_ptr<IOChannel> in,
+SWFMovieDefinition::readHeader(std::unique_ptr<IOChannel> in,
         const std::string& url)
 {
 
-    _in = in;
+    _in = std::move(in);
 
     // we only read a movie once
     assert(!_str.get());
 
     _url = url.empty() ? "<anonymous>" : url;
 
-    boost::uint32_t file_start_pos = _in->tell();
-    boost::uint32_t header = _in->read_le32();
+    std::uint32_t file_start_pos = _in->tell();
+    std::uint32_t header = _in->read_le32();
     m_file_length = _in->read_le32();
     _swf_end_pos = file_start_pos + m_file_length;
 
@@ -302,7 +284,7 @@ SWFMovieDefinition::readHeader(std::auto_ptr<IOChannel> in,
         );
 
         // Uncompress the input as we read it.
-        _in = zlib_adapter::make_inflater(_in);
+        _in = std::move(zlib_adapter::make_inflater(std::move(_in)));
 #endif
     }
 
@@ -324,7 +306,7 @@ SWFMovieDefinition::readHeader(std::auto_ptr<IOChannel> in,
     _str->ensureBytes(2 + 2); // frame rate, frame count.
     m_frame_rate = _str->read_u16() / 256.0f;
     if (!m_frame_rate) {
-        m_frame_rate = std::numeric_limits<boost::uint16_t>::max();
+        m_frame_rate = std::numeric_limits<std::uint16_t>::max();
     }
 
     m_frame_count = _str->read_u16();
@@ -378,20 +360,26 @@ SWFMovieDefinition::completeLoad()
 bool
 SWFMovieDefinition::ensure_frame_loaded(size_t framenum) const
 {
-    boost::mutex::scoped_lock lock(_frames_loaded_mutex);
-
 #ifndef LOAD_MOVIES_IN_A_SEPARATE_THREAD
-    return (framenum <= _frames_loaded);
+    return (framenum <= _frames_loaded.load());
 #endif
-
-    if ( framenum <= _frames_loaded ) return true;
+    if ( framenum <= _frames_loaded.load() ) {
+        return true;
+    }
 
     _waiting_for_frame = framenum;
 
+    std::unique_lock<std::mutex> lock(_loadingCanceledMutex);
+
     // TODO: return false on timeout
-    _frame_reached_condition.wait(lock);
 
-    return ( framenum <= _frames_loaded );
+    // Make sure we don't wait here if the frame has been loaded, or the
+    // loading thread has finished.
+    _frame_reached_condition.wait(lock, [&] () {
+            return framenum <= _frames_loaded.load() || _loadingCanceled;
+        });
+
+    return ( framenum <= _frames_loaded.load() );
 }
 
 Movie*
@@ -410,12 +398,11 @@ std::ostream&
 operator<<(std::ostream& o, const CharacterDictionary& cd)
 {
 
-       for (CharacterDictionary::CharacterConstIterator it = cd.begin(), 
-            endIt = cd.end(); it != endIt; ++it)
+       for (const auto& elem : cd)
        {
            o << std::endl
-             << "Character: " << it->first
-             << " at address: " << static_cast<void*>(it->second.get());
+             << "Character: " << elem.first
+             << " at address: " << static_cast<void*>(elem.second.get());
        }
        
        return o;
@@ -469,13 +456,16 @@ SWFMovieDefinition::read_all_swf()
     try {
         while (left) {
 
-            if (_loadingCanceled) {
-                log_debug("Loading thread cancellation requested, "
-                        "returning from read_all_swf");
-                return;
+            {
+                std::lock_guard<std::mutex> lock(_loadingCanceledMutex);
+                if (_loadingCanceled) {
+                    log_debug("Loading thread cancellation requested, "
+                              "returning from read_all_swf");
+                    return;
+                }
             }
             if (!parser.read(std::min<size_t>(left, chunkSize))) break;
-            
+
             left -= parser.bytesRead();
             setBytesLoaded(startPos + parser.bytesRead());
         }
@@ -511,45 +501,45 @@ SWFMovieDefinition::read_all_swf()
                 "SHOWFRAME tags found in stream. Pretending we loaded "
                 "all advertised frames"), m_frame_count, floaded);
         );
-        boost::mutex::scoped_lock lock(_frames_loaded_mutex);
         _frames_loaded = m_frame_count;
         // Notify any thread waiting on frame reached condition
-        _frame_reached_condition.notify_all();
     }
+    {
+        std::lock_guard<std::mutex> lock(_loadingCanceledMutex);
+        _loadingCanceled = true;
+    }
+    _frame_reached_condition.notify_all();
 }
 
 size_t
 SWFMovieDefinition::get_loading_frame() const
 {
-    boost::mutex::scoped_lock lock(_frames_loaded_mutex);
-    return _frames_loaded;
+    return _frames_loaded.load();
 }
 
 void
 SWFMovieDefinition::incrementLoadedFrames()
 {
-    boost::mutex::scoped_lock lock(_frames_loaded_mutex);
-
     ++_frames_loaded;
 
-    if ( _frames_loaded > m_frame_count )
+    if ( _frames_loaded.load() > m_frame_count )
     {
         IF_VERBOSE_MALFORMED_SWF(
             log_swferror(_("number of SHOWFRAME tags "
                 "in SWF stream '%s' (%d) exceeds "
                 "the advertised number in header (%d)."),
-                get_url(), _frames_loaded,
+                get_url(), _frames_loaded.load(),
                 m_frame_count);
         )
     }
 
 #ifdef DEBUG_FRAMES_LOAD
-    log_debug("Loaded frame %u/%u", _frames_loaded, m_frame_count);
+    log_debug("Loaded frame %u/%u", _frames_loaded.load(), m_frame_count);
 #endif
 
     // signal load of frame if anyone requested it
     // FIXME: _waiting_for_frame needs mutex ?
-    if (_waiting_for_frame && _frames_loaded >= _waiting_for_frame )
+    if (_frames_loaded.load() >= _waiting_for_frame.load() )
     {
         // or should we notify_one ?
         // See: http://boost.org/doc/html/condition.html
@@ -560,11 +550,11 @@ SWFMovieDefinition::incrementLoadedFrames()
 
 void
 SWFMovieDefinition::registerExport(const std::string& symbol,
-        boost::uint16_t id)
+        std::uint16_t id)
 {
     assert(id);
 
-    boost::mutex::scoped_lock lock(_exportedResourcesMutex);
+    std::lock_guard<std::mutex> lock(_exportedResourcesMutex);
 #ifdef DEBUG_EXPORTS
     log_debug("%s registering export %s, %s", get_url(), symbol, id);
 #endif
@@ -575,17 +565,16 @@ SWFMovieDefinition::registerExport(const std::string& symbol,
 void
 SWFMovieDefinition::add_frame_name(const std::string& n)
 {
-    boost::mutex::scoped_lock lock1(_namedFramesMutex);
-    boost::mutex::scoped_lock lock2(_frames_loaded_mutex);
+    std::lock_guard<std::mutex> lock1(_namedFramesMutex);
 
-    _namedFrames.insert(std::make_pair(n, _frames_loaded));
+    _namedFrames.insert(std::make_pair(n, _frames_loaded.load()));
 }
 
 bool
 SWFMovieDefinition::get_labeled_frame(const std::string& label,
         size_t& frame_number) const
 {
-    boost::mutex::scoped_lock lock(_namedFramesMutex);
+    std::lock_guard<std::mutex> lock(_namedFramesMutex);
     NamedFrameMap::const_iterator it = _namedFrames.find(label);
     if (it == _namedFrames.end()) return false;
     frame_number = it->second;
@@ -593,7 +582,7 @@ SWFMovieDefinition::get_labeled_frame(const std::string& label,
 }
 
 void
-SWFMovieDefinition::set_jpeg_loader(std::auto_ptr<image::JpegInput> j_in)
+SWFMovieDefinition::set_jpeg_loader(std::unique_ptr<image::JpegInput> j_in)
 {
     if (m_jpeg_in.get()) {
         /// There should be only one JPEGTABLES tag in an SWF (see: 
@@ -606,13 +595,13 @@ SWFMovieDefinition::set_jpeg_loader(std::auto_ptr<image::JpegInput> j_in)
                     "resetting JPEG loader"));
         return;
     }
-    m_jpeg_in = j_in;
+    m_jpeg_in = std::move(j_in);
 }
 
-boost::uint16_t
+std::uint16_t
 SWFMovieDefinition::exportID(const std::string& symbol) const
 {
-    boost::mutex::scoped_lock lock(_exportedResourcesMutex);
+    std::lock_guard<std::mutex> lock(_exportedResourcesMutex);
     Exports::const_iterator it = _exportTable.find(symbol);
     return (it == _exportTable.end()) ? 0 : it->second;
 }
@@ -626,8 +615,7 @@ SWFMovieDefinition::importResources(
 
     // Mutex scope.
 
-    for (Imports::const_iterator i = imports.begin(), e = imports.end(); i != e;
-            ++i) {
+    for (const auto& import : imports) {
     
         size_t new_loading_frame = source->get_loading_frame();
         
@@ -641,14 +629,14 @@ SWFMovieDefinition::importResources(
         size_t timeout = def_timeout;
         size_t loading_frame = (size_t)-1; // used to keep track of advancements
 
-        const int id = i->first;
-        const std::string& symbolName = i->second;
+        const int id = import.first;
+        const std::string& symbolName = import.second;
 
 #ifdef DEBUG_EXPORTS
         log_debug("%s importing %s from %s", get_url(), symbolName,
                 source->get_url());
 #endif
-        boost::uint16_t targetID;
+        std::uint16_t targetID;
 
         while(!(targetID = source->exportID(symbolName))) {
             
diff --git a/libcore/parser/SWFMovieDefinition.h b/libcore/parser/SWFMovieDefinition.h
index 94f85e8..f9aa5a9 100644
--- a/libcore/parser/SWFMovieDefinition.h
+++ b/libcore/parser/SWFMovieDefinition.h
@@ -28,18 +28,18 @@
 #endif
 
 #include <boost/intrusive_ptr.hpp>
+
+#include <atomic>
 #include <vector>
 #include <map>
 #include <set> 
 #include <string>
 #include <memory> 
-#include <boost/thread/thread.hpp>
-#include <boost/thread/condition.hpp>
-#include <boost/thread/barrier.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <mutex>
+#include <thread>
+#include <condition_variable>
 
 #include "movie_definition.h" // for inheritance
-#include "DefinitionTag.h" // for boost::intrusive_ptr visibility of dtor
 #include "StringPredicates.h" 
 #include "SWFRect.h"
 #include "GnashNumeric.h"
@@ -58,6 +58,9 @@ namespace gnash {
     class SWFMovie;
     class RunResources;
     class Font;
+    namespace SWF {
+        class DefinitionTag;
+    }
 }
 
 namespace gnash {
@@ -89,17 +92,8 @@ private:
 
     SWFMovieDefinition& _movie_def;
 
-    mutable boost::mutex _mutex;
-    std::auto_ptr<boost::thread> _thread;
-
-    // Barrier to ensure that _thread
-    // is initialized before the loader thread
-    // continues execution
-    boost::barrier _barrier;
-
-    /// Entry point for the actual thread
-    static void execute(SWFMovieLoader& ml, SWFMovieDefinition* md);
-
+    mutable std::mutex _mutex;
+    std::thread _thread;
 };
 
 /// The Characters dictionary associated with each SWF file.
@@ -203,7 +197,7 @@ public:
     
     /// Check whether tags should be executed using AVM2
     bool isAS3() const {
-        return _as3;
+        return _as3.load();
     }
 
     /// Return the advertised version for the SWFMovie.
@@ -219,17 +213,11 @@ public:
     /// except when parsing finishes, in which case
     /// it an index to on-past-last frame.
     ///
-    /// NOTE: this method locks _frames_loaded_mutex
-    ///
     virtual size_t get_loading_frame() const;
 
     /// Get number of bytes loaded from input stream
-    //
-    /// NOTE: this method locks _bytes_loaded_mutex
-    ///
     size_t get_bytes_loaded() const {
-        boost::mutex::scoped_lock lock(_bytes_loaded_mutex);
-        return _bytes_loaded;
+        return _bytes_loaded.load();
     }
 
     /// Get total number of bytes as parsed from the SWF header
@@ -240,10 +228,10 @@ public:
     DSOTEXPORT virtual void importResources(boost::intrusive_ptr<movie_definition> source,
             const Imports& imports);
 
-    virtual void addDisplayObject(boost::uint16_t id, SWF::DefinitionTag* c);
+    virtual void addDisplayObject(std::uint16_t id, SWF::DefinitionTag* c);
 
     /// Return a DisplayObject from the dictionary
-    DSOTEXPORT SWF::DefinitionTag* getDefinitionTag(boost::uint16_t id) const;
+    DSOTEXPORT SWF::DefinitionTag* getDefinitionTag(std::uint16_t id) const;
 
     // See dox in movie_definition
     //
@@ -282,19 +270,19 @@ public:
     // See dox in movie_definition.h
     void addControlTag(boost::intrusive_ptr<SWF::ControlTag> tag) {
         assert(tag);
-        boost::mutex::scoped_lock lock(_frames_loaded_mutex);
-        m_playlist[_frames_loaded].push_back(tag);
+        size_t frames_loaded = get_loading_frame();
+        m_playlist[frames_loaded].push_back(tag);
     }
 
     // See dox in movie_definition.h
     //
-    // locks _namedFramesMutex and _frames_loaded_mutex
+    // locks _namedFramesMutex
     //
     DSOTEXPORT void add_frame_name(const std::string& name);
 
     /// Set an input object for later loading DefineBits
     /// images (JPEG images without the table info).
-    DSOTEXPORT void set_jpeg_loader(std::auto_ptr<image::JpegInput> j_in);
+    DSOTEXPORT void set_jpeg_loader(std::unique_ptr<image::JpegInput> j_in);
 
     // See dox in movie_definition.h
     image::JpegInput* get_jpeg_loader() const {
@@ -304,12 +292,11 @@ public:
     virtual const PlayList* getPlaylist(size_t frame_number) const {
 
 #ifndef NDEBUG
-        boost::mutex::scoped_lock lock(_frames_loaded_mutex);
-        assert(frame_number <= _frames_loaded);
+        assert(frame_number <= _frames_loaded.load());
 #endif
 
         PlayListMap::const_iterator it = m_playlist.find(frame_number);
-        if ( it == m_playlist.end() ) return NULL;
+        if ( it == m_playlist.end() ) return nullptr;
         else return &(it->second);
     }
 
@@ -322,7 +309,7 @@ public:
     /// @param in the IOChannel from which to read SWF
     /// @param url the url associated with the input
     /// @return false if SWF header could not be parsed
-    bool readHeader(std::auto_ptr<IOChannel> in, const std::string& url);
+    bool readHeader(std::unique_ptr<IOChannel> in, const std::string& url);
 
     /// Complete load of the SWF file
     //
@@ -355,11 +342,11 @@ public:
     /// TOCHECK:
     /// The _root reference of the newly created movie_root
     /// will be set to a newly created Movie.
-    Movie* createMovie(Global_as& gl, DisplayObject* parent = 0);
+    Movie* createMovie(Global_as& gl, DisplayObject* parent = nullptr);
 
     virtual DisplayObject* createDisplayObject(Global_as&, DisplayObject*)
         const {
-        return 0;
+        return nullptr;
     }
 
     virtual const std::string& get_url() const { return _url; }
@@ -372,7 +359,7 @@ public:
     /// @return         The id corresponding to the passed symbol. 0 is not a
     ///                 valid id and signifies that the symbol was not (yet)
     ///                 exported.
-    boost::uint16_t exportID(const std::string& symbol) const;
+    std::uint16_t exportID(const std::string& symbol) const;
     
     /// Register a symbol to refer to a character id
     //
@@ -381,7 +368,7 @@ public:
     /// @param id       The id of the character to map to the symbol. NB: this
     ///                 must never be 0!
     /// @param symbol   The symbol to map to the id.
-    void registerExport(const std::string& symbol, boost::uint16_t id);
+    void registerExport(const std::string& symbol, std::uint16_t id);
 
     
 #ifdef USE_SWFTREE
@@ -409,7 +396,7 @@ private:
     CharacterDictionary    _dictionary;
 
     /// Mutex protecting _dictionary
-    mutable boost::mutex _dictionaryMutex;
+    mutable std::mutex _dictionaryMutex;
 
     typedef std::map<int, boost::intrusive_ptr<Font> > FontMap;
     FontMap m_fonts;
@@ -430,17 +417,17 @@ private:
     NamedFrameMap _namedFrames;
 
     // Mutex protecting access to _namedFrames
-    mutable boost::mutex _namedFramesMutex;
+    mutable std::mutex _namedFramesMutex;
 
     /// Allow mapping symbol to id case insensitively.
-    typedef std::map<std::string, boost::uint16_t,
+    typedef std::map<std::string, std::uint16_t,
             StringNoCaseLessThan> Exports;
 
     /// A map of symbol to character id.
     Exports _exportTable;
 
     // Mutex protecting access to the export map.
-    mutable boost::mutex _exportedResourcesMutex;
+    mutable std::mutex _exportedResourcesMutex;
 
     /// Movies we import from; hold a ref on these,
     /// to keep them alive
@@ -453,48 +440,33 @@ private:
     int    m_version;
 
     /// Number of fully loaded frames
-    size_t    _frames_loaded;
-
-    /// A mutex protecting access to _frames_loaded
-    //
-    /// This is needed because the loader thread will
-    /// increment this number, while the virtual machine
-    /// thread will read it.
-    mutable boost::mutex _frames_loaded_mutex;
+    std::atomic<size_t>    _frames_loaded;
 
     /// A semaphore to signal load of a specific frame
-    mutable boost::condition _frame_reached_condition;
+    mutable std::condition_variable _frame_reached_condition;
 
     /// Set this to trigger signaling of loaded frame
-    //
-    /// Make sure you _frames_loaded_mutex is locked
-    /// when accessing this member !
-    mutable size_t _waiting_for_frame;
+    mutable std::atomic<size_t> _waiting_for_frame;
 
     /// Number bytes loaded / parsed
-    unsigned long _bytes_loaded;
-
-    /// A mutex protecting access to _bytes_loaded
-    //
-    /// This is needed because the loader thread will
-    /// increment this number, while the virtual machine
-    /// thread will read it.
-    mutable boost::mutex _bytes_loaded_mutex;
+    std::atomic<unsigned long> _bytes_loaded;
 
     int m_loading_sound_stream;
 
-    boost::uint32_t m_file_length;
+    std::uint32_t m_file_length;
 
-    std::auto_ptr<image::JpegInput> m_jpeg_in;
+    std::unique_ptr<image::JpegInput> m_jpeg_in;
 
     std::string _url;
 
     /// Non transferable stream.
-    boost::scoped_ptr<SWFStream> _str;
+    std::unique_ptr<SWFStream> _str;
 
-    std::auto_ptr<IOChannel> _in;
+    std::unique_ptr<IOChannel> _in;
 
     /// swf end position (as read from header)
+    // This is set by readHeader, and used in the parsing thread, which starts
+    // after readHeader() runs.
     size_t _swf_end_pos;
 
     /// asyncronous SWF loader and parser
@@ -503,22 +475,16 @@ private:
     /// \brief
     /// Increment loaded frames count, signaling frame reached condition if
     /// any thread is waiting for that. See ensure_frame_loaded().
-    ///
-    /// NOTE: this method locks _frames_loaded_mutex
-    ///
-    /// @return the new value of _frames_loaded
     DSOTEXPORT virtual void incrementLoadedFrames();
 
     /// Set number of bytes loaded from input stream
-    //
-    /// NOTE: this method locks _bytes_loaded_mutex
     void setBytesLoaded(unsigned long bytes)
     {
-        boost::mutex::scoped_lock lock(_bytes_loaded_mutex);
         _bytes_loaded=bytes;
     }
 
     /// A flag set to true when load cancellation is requested
+    mutable std::mutex _loadingCanceledMutex;
     bool _loadingCanceled;
 
     /// Movies we import resources from
@@ -534,7 +500,7 @@ private:
     ///         movie_root with the same RunResources as its first definition.
     const RunResources& _runResources;
 
-    bool _as3;
+    std::atomic<bool> _as3;
 
 };
 
diff --git a/libcore/parser/SWFParser.cpp b/libcore/parser/SWFParser.cpp
index d897efd..ecf689f 100644
--- a/libcore/parser/SWFParser.cpp
+++ b/libcore/parser/SWFParser.cpp
@@ -83,7 +83,7 @@ SWFParser::read(std::streamsize bytes)
                 return false;
             }
 
-            SWF::TagLoadersTable::TagLoader lf = 0;
+            SWF::TagLoadersTable::TagLoader lf = nullptr;
 
             if (_tag == SWF::SHOWFRAME) {
                 // show frame tag -- advance to the next frame.
diff --git a/libcore/parser/SWFParser.h b/libcore/parser/SWFParser.h
index c7b50ac..b360b9d 100644
--- a/libcore/parser/SWFParser.h
+++ b/libcore/parser/SWFParser.h
@@ -59,7 +59,8 @@ public:
         _bytesRead(0),
         _tagOpen(false),
         _endRead(0),
-        _nextTagEnd(0)
+        _nextTagEnd(0),
+        _tag(SWF::END) // Initialized to zero to have a well known value
 
     {
     }
diff --git a/libcore/parser/TypesParser.cpp b/libcore/parser/TypesParser.cpp
index 15faccd..0e14efc 100644
--- a/libcore/parser/TypesParser.cpp
+++ b/libcore/parser/TypesParser.cpp
@@ -53,33 +53,36 @@ readSWFMatrix(SWFStream& in)
     in.ensureBits(1);
     const bool has_scale = in.read_bit(); 
 
-    boost::int32_t sx = 65536;
-    boost::int32_t sy = 65536;
+    std::int32_t sx = 65536;
+    std::int32_t sy = 65536;
     if (has_scale) {
         in.ensureBits(5);
-        const boost::uint8_t scale_nbits = in.read_uint(5);
-        in.ensureBits(scale_nbits * 2);
-        sx = in.read_sint(scale_nbits);
-        sy = in.read_sint(scale_nbits);
+        const std::uint8_t scale_nbits = in.read_uint(5);
+        if (scale_nbits) {
+            in.ensureBits(scale_nbits * 2);
+            sx = in.read_sint(scale_nbits);
+            sy = in.read_sint(scale_nbits);
+        }
     }
 
     in.ensureBits(1);
     const bool has_rotate = in.read_bit();
-    boost::int32_t shx = 0;
-    boost::int32_t shy = 0;
+    std::int32_t shx = 0;
+    std::int32_t shy = 0;
     if (has_rotate) {
         in.ensureBits(5);
-        int rotate_nbits = in.read_uint(5);
-
-        in.ensureBits(rotate_nbits * 2);
-        shx = in.read_sint(rotate_nbits);
-        shy = in.read_sint(rotate_nbits);
+        unsigned int rotate_nbits = in.read_uint(5);
+        if (rotate_nbits) {
+            in.ensureBits(rotate_nbits * 2);
+            shx = in.read_sint(rotate_nbits);
+            shy = in.read_sint(rotate_nbits);
+        }
     }
 
     in.ensureBits(5);
-    const boost::uint8_t translate_nbits = in.read_uint(5);
-    boost::int32_t tx = 0;
-    boost::int32_t ty = 0;
+    const std::uint8_t translate_nbits = in.read_uint(5);
+    std::int32_t tx = 0;
+    std::int32_t ty = 0;
     if (translate_nbits) {
         in.ensureBits(translate_nbits * 2);
         tx = in.read_sint(translate_nbits);
@@ -92,10 +95,10 @@ rgba
 readRGBA(SWFStream& in)
 {
     in.ensureBytes(4);
-    const boost::uint8_t r = in.read_u8();
-    const boost::uint8_t g = in.read_u8();
-    const boost::uint8_t b = in.read_u8();
-    const boost::uint8_t a = in.read_u8();
+    const std::uint8_t r = in.read_u8();
+    const std::uint8_t g = in.read_u8();
+    const std::uint8_t b = in.read_u8();
+    const std::uint8_t a = in.read_u8();
     return rgba(r, g, b, a);
 }
 
@@ -103,10 +106,10 @@ rgba
 readRGB(SWFStream& in)
 {
     in.ensureBytes(3);
-    const boost::uint8_t r = in.read_u8();
-    const boost::uint8_t g = in.read_u8();
-    const boost::uint8_t b = in.read_u8();
-    const boost::uint8_t a = 0xff;
+    const std::uint8_t r = in.read_u8();
+    const std::uint8_t g = in.read_u8();
+    const std::uint8_t b = in.read_u8();
+    const std::uint8_t a = 0xff;
     return rgba(r, g, b, a);
 }
 
@@ -129,12 +132,16 @@ readRect(SWFStream& in)
     in.align();
     in.ensureBits(5);
     const int nbits = in.read_uint(5);
-    in.ensureBits(nbits*4);
+
+    int minx = 0, maxx = 0, miny = 0, maxy = 0;
     
-    const int minx = in.read_sint(nbits);
-    const int maxx = in.read_sint(nbits);
-    const int miny = in.read_sint(nbits);
-    const int maxy = in.read_sint(nbits);
+    if (nbits > 0) {
+       in.ensureBits(nbits*4);
+       minx = in.read_sint(nbits);
+       maxx = in.read_sint(nbits);
+       miny = in.read_sint(nbits);
+       maxy = in.read_sint(nbits);
+    }
 
     // Check if this SWFRect is valid.
     if (maxx < minx || maxy < miny) {
@@ -200,9 +207,9 @@ readFills(SWFStream& in, SWF::TagType t, movie_definition& md, bool readMorph)
             }
             
             in.ensureBytes(1);
-            const boost::uint8_t grad_props = in.read_u8();
+            const std::uint8_t grad_props = in.read_u8();
             
-            const boost::uint8_t num_gradients = grad_props & 0xF;
+            const std::uint8_t num_gradients = grad_props & 0xF;
             IF_VERBOSE_PARSE(
                 log_parse(_("  gradients count: %d"), +num_gradients);
             );
@@ -317,10 +324,10 @@ readCxFormRGB(SWFStream& in)
     in.align();
 
     in.ensureBits(6);
-    const boost::uint8_t field =  in.read_uint(6);
+    const std::uint8_t field =  in.read_uint(6);
     const bool has_add = field & (1 << 5);
     const bool has_mult = field & (1 << 4);
-    const boost::uint8_t nbits = field & 0x0f;
+    const std::uint8_t nbits = field & 0x0f;
     const size_t reads = has_mult + has_add; // 0, 1 or 2
 
     SWFCxForm ret;
@@ -349,10 +356,10 @@ readCxFormRGBA(SWFStream& in)
     in.align();
 
     in.ensureBits(6);
-    const boost::uint8_t field =  in.read_uint(6);
+    const std::uint8_t field =  in.read_uint(6);
     const bool has_add = field & (1 << 5);
     const bool has_mult = field & (1 << 4);
-    const boost::uint8_t nbits = field & 0x0f;
+    const std::uint8_t nbits = field & 0x0f;
     const size_t reads = has_mult + has_add; // 0, 1 or 2
 
     SWFCxForm ret;
@@ -416,7 +423,7 @@ readBitmapFill(SWFStream& in, SWF::FillType type, movie_definition& md,
 {
 
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     SWFMatrix m = readSWFMatrix(in).invert();
 
@@ -435,7 +442,7 @@ GradientRecord
 readGradientRecord(SWFStream& in, SWF::TagType tag)
 {
     in.ensureBytes(1);
-    const boost::uint8_t ratio = in.read_u8();
+    const std::uint8_t ratio = in.read_u8();
 
     switch (tag) {
         case SWF::DEFINESHAPE:
diff --git a/libcore/parser/action_buffer.cpp b/libcore/parser/action_buffer.cpp
index 23ddab2..021f41e 100644
--- a/libcore/parser/action_buffer.cpp
+++ b/libcore/parser/action_buffer.cpp
@@ -22,7 +22,6 @@
 
 #include <string>
 #include <cstring> // for memcpy
-#include <boost/static_assert.hpp>
 
 #include "log.h"
 #include "SWFStream.h"
@@ -112,8 +111,8 @@ action_buffer::readConstantPool(size_t start_pc, size_t stop_pc) const
     ConstantPool& pool = _pools[start_pc];
 
     size_t i = start_pc;
-    const boost::uint16_t length = read_uint16(i + 1);
-    const boost::uint16_t count = read_uint16(i + 3); 
+    const std::uint16_t length = read_uint16(i + 1);
+    const std::uint16_t count = read_uint16(i + 3);
     i += 2;
     
     assert(start_pc + 3 + length == stop_pc);
@@ -301,8 +300,8 @@ disasm_instruction(const unsigned char* instruction_data,
 
                         case 7:
                         {
-                            // boost::int32_t
-                            boost::int32_t val = instruction_data[3 + i]
+                            // std::int32_t
+                            std::int32_t val = instruction_data[3 + i]
                             | (instruction_data[3 + i + 1] << 8)
                             | (instruction_data[3 + i + 2] << 16)
                             | (instruction_data[3 + i + 3] << 24);
@@ -373,17 +372,17 @@ disasm_instruction(const unsigned char* instruction_data,
                 if (i + 6 > length) break;
                 ++i;
                        
-                boost::uint16_t argCount = instruction_data[3 + i] | (instruction_data[3 + i + 1] << 8);
+                std::uint16_t argCount = instruction_data[3 + i] | (instruction_data[3 + i + 1] << 8);
                 i += 2;
                 
-                boost::uint8_t registerCount = instruction_data[3 + i];
+                std::uint8_t registerCount = instruction_data[3 + i];
                 i++;
 
                 ss << "\tname = '" << functionName << "'"
                        << " arg count = " << argCount
                        << " register count = " << static_cast<int>(registerCount);
                 
-                const boost::uint16_t flags =
+                const std::uint16_t flags =
                     (instruction_data[3 + i]) |
                     (instruction_data[3 + i + 1] << 8);
 
@@ -505,16 +504,16 @@ convert_float_little(const void *p)
     // Hairy union for endian detection and munging
     union {
         float f;
-        boost::uint32_t i;
+        std::uint32_t i;
         struct {    // for endian detection
-            boost::uint16_t s0;
-            boost::uint16_t s1;
+            std::uint16_t s0;
+            std::uint16_t s1;
         } s;
         struct {    // for byte-swapping
-            boost::uint8_t c0;
-            boost::uint8_t c1;
-            boost::uint8_t c2;
-            boost::uint8_t c3;
+            std::uint8_t c0;
+            std::uint8_t c1;
+            std::uint8_t c2;
+            std::uint8_t c3;
         } c;
     } u;
 
@@ -526,7 +525,7 @@ convert_float_little(const void *p)
             break;
         case 0x3f80:    // big-endian host
         {
-            const boost::uint8_t *cp = static_cast<const boost::uint8_t*>(p);
+            const std::uint8_t *cp = static_cast<const std::uint8_t*>(p);
             u.c.c0 = cp[3];
             u.c.c1 = cp[2];
             u.c.c2 = cp[1];
@@ -548,33 +547,33 @@ convert_float_little(const void *p)
 double
 convert_double_wacky(const void *p)
 {
-    const boost::uint8_t *cp = static_cast<const boost::uint8_t*>(p);
+    const std::uint8_t *cp = static_cast<const std::uint8_t*>(p);
     union {
         double d;
-        boost::uint64_t i;
+        std::uint64_t i;
         struct {
-            boost::uint32_t l0;
-            boost::uint32_t l1;
+            std::uint32_t l0;
+            std::uint32_t l1;
         } l;
         struct {
-            boost::uint16_t s0;
-            boost::uint16_t s1;
-            boost::uint16_t s2;
-            boost::uint16_t s3;
+            std::uint16_t s0;
+            std::uint16_t s1;
+            std::uint16_t s2;
+            std::uint16_t s3;
         } s;
         struct {
-            boost::uint8_t c0;
-            boost::uint8_t c1;
-            boost::uint8_t c2;
-            boost::uint8_t c3;
-            boost::uint8_t c4;
-            boost::uint8_t c5;
-            boost::uint8_t c6;
-            boost::uint8_t c7;
+            std::uint8_t c0;
+            std::uint8_t c1;
+            std::uint8_t c2;
+            std::uint8_t c3;
+            std::uint8_t c4;
+            std::uint8_t c5;
+            std::uint8_t c6;
+            std::uint8_t c7;
         } c;
     } u;
 
-    BOOST_STATIC_ASSERT(sizeof(u) == sizeof(u.i)) __attribute__((unused));
+    static_assert(sizeof(u) == sizeof(u.i), "u must be 8 bytes");
 
     // Detect endianness of doubles by storing a value that is
     // exactly representable and that has different values in the
diff --git a/libcore/parser/action_buffer.h b/libcore/parser/action_buffer.h
index 4cdd729..6ebd125 100644
--- a/libcore/parser/action_buffer.h
+++ b/libcore/parser/action_buffer.h
@@ -23,7 +23,7 @@
 #include <vector> 
 #include <map> 
 #include <boost/noncopyable.hpp>
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 
 #include "GnashException.h"
 #include "ConstantPool.h"
@@ -64,7 +64,7 @@ public:
 
 	size_t size() const { return m_buffer.size(); }
 
-	boost::uint8_t operator[] (size_t off) const
+	std::uint8_t operator[] (size_t off) const
 	{
 		if (off >= m_buffer.size()) {
 		    throw ActionParserException (_("Attempt to read outside "
@@ -102,33 +102,33 @@ public:
 	//
 	/// Useful to hide complexity of underlying buffer access.
 	///
-	boost::int16_t read_int16(size_t pc) const
+	std::int16_t read_int16(size_t pc) const
 	{
 	    if (pc + 1 >= m_buffer.size()) {
 	        throw ActionParserException(_("Attempt to read outside action buffer limits"));
 	    }
-		boost::int16_t ret = (m_buffer[pc] | (m_buffer[pc + 1] << 8));
+		std::int16_t ret = (m_buffer[pc] | (m_buffer[pc + 1] << 8));
 		return ret;
 	}
 
 	/// Get an unsigned short integer value from given offset
     /// read_int16 should check buffer boundaries.
-	boost::uint16_t read_uint16(size_t pc) const
+	std::uint16_t read_uint16(size_t pc) const
 	{
-		return static_cast<boost::uint16_t>(read_int16(pc));
+		return static_cast<std::uint16_t>(read_int16(pc));
 	}
 
 	/// Read a 32-bit integer starting at given offset.
 	//
 	/// Useful to hide complexity of underlying buffer access.
 	///
-	boost::int32_t read_int32(size_t pc) const
+	std::int32_t read_int32(size_t pc) const
 	{
 		if (pc + 3 >= m_buffer.size()) {
 	        throw ActionParserException(_("Attempt to read outside action buffer limits"));
 	    }
 	    
-		boost::int32_t	val = m_buffer[pc]
+		std::int32_t	val = m_buffer[pc]
 		      | (m_buffer[pc + 1] << 8)
 		      | (m_buffer[pc + 2] << 16)
 		      | (m_buffer[pc + 3] << 24);
@@ -151,14 +151,14 @@ public:
 	/// Return a value from the constant pool
 	const char* dictionary_get(size_t n) const
 	{
-        if ( _pools.empty() ) return 0;
+        if ( _pools.empty() ) return nullptr;
 
         // We'll query the last inserted one for now (highest PC)
         const ConstantPool& pool = _pools.rbegin()->second;
 
         if ( n < pool.size() ) return pool[n];
 
-        else return 0;
+        else return nullptr;
 	}
 
 	/// Read an SWF::ACTION_CONSTANTPOOL opcode and return as a dictionary
@@ -189,7 +189,7 @@ public:
 private:
 
 	/// the code itself, as read from the SWF
-	std::vector<boost::uint8_t> m_buffer;
+	std::vector<std::uint8_t> m_buffer;
 
 	/// The set of ConstantPools found in this action_buffer
 	typedef std::map<size_t, ConstantPool> PoolsMap;
diff --git a/libcore/parser/filter_factory.cpp b/libcore/parser/filter_factory.cpp
index c7eb8bb..b17640c 100644
--- a/libcore/parser/filter_factory.cpp
+++ b/libcore/parser/filter_factory.cpp
@@ -56,7 +56,7 @@ filter_factory::read(SWFStream& in, bool read_multiple, Filters* store)
 
     for (int i = 0; i < count; ++i)
     {
-        BitmapFilter *the_filter = NULL;
+        BitmapFilter *the_filter = nullptr;
 
         in.ensureBytes(1);
         filter_types filter_type = static_cast<filter_types> (in.read_u8());
@@ -95,7 +95,7 @@ filter_factory::read(SWFStream& in, bool read_multiple, Filters* store)
         }
 
         // Protect against exceptions and such by storing before we read.
-        boost::shared_ptr<BitmapFilter> p(the_filter);
+        std::unique_ptr<BitmapFilter> p(the_filter);
         if (!p->read(in))
         {
             IF_VERBOSE_MALFORMED_SWF(
@@ -103,7 +103,7 @@ filter_factory::read(SWFStream& in, bool read_multiple, Filters* store)
             );
             return i; // We're already broken.
         }
-        store->push_back(p);
+        store->emplace_back(std::move(p));
     }
 
     return count;
@@ -145,7 +145,7 @@ bool BlurFilter::read(SWFStream& in)
     m_blurX = in.read_ufixed();
     m_blurY = in.read_ufixed();
 
-    m_quality = static_cast<boost::uint8_t> (in.read_uint(5));
+    m_quality = static_cast<std::uint8_t> (in.read_uint(5));
 
     static_cast<void> (in.read_uint(3)); // Throw these away.
 
@@ -225,7 +225,7 @@ bool GradientGlowFilter::read(SWFStream& in)
 {
     in.ensureBytes(1);
 
-    boost::uint8_t count = in.read_u8(); // How many colorings.
+    std::uint8_t count = in.read_u8(); // How many colorings.
 
     m_colors.reserve(count);
     m_alphas.reserve(count);
@@ -259,7 +259,7 @@ bool GradientGlowFilter::read(SWFStream& in)
 
     m_type = outer ? (inner ? FULL_GLOW : OUTER_GLOW) : INNER_GLOW;
 
-    m_quality = static_cast<boost::uint8_t> (in.read_uint(4));
+    m_quality = static_cast<std::uint8_t> (in.read_uint(4));
 
     IF_VERBOSE_PARSE(
         log_parse(_("   GradientGlowFilter "));
@@ -336,7 +336,7 @@ bool ColorMatrixFilter::read(SWFStream& in)
 bool GradientBevelFilter::read(SWFStream& in)
 {
     in.ensureBytes(1);
-    boost::uint8_t count = in.read_u8(); // How many colorings.
+    std::uint8_t count = in.read_u8(); // How many colorings.
 
     in.ensureBytes(count*5 + 8 + 8 + 2 + 1);
 
@@ -369,7 +369,7 @@ bool GradientBevelFilter::read(SWFStream& in)
 
     m_type = outer ? (inner ? FULL_BEVEL : OUTER_BEVEL) : INNER_BEVEL;
 
-    m_quality = static_cast<boost::uint8_t> (in.read_uint(4));
+    m_quality = static_cast<std::uint8_t> (in.read_uint(4));
 
     IF_VERBOSE_PARSE(
         log_parse(_("   GradientBevelFilter "));
diff --git a/libcore/parser/filter_factory.h b/libcore/parser/filter_factory.h
index 82e01a8..8f777fe 100644
--- a/libcore/parser/filter_factory.h
+++ b/libcore/parser/filter_factory.h
@@ -20,7 +20,7 @@
 #define GNASH_FILTER_FACTORY_H
 
 #include <vector>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 namespace gnash {
     class SWFStream;
@@ -29,7 +29,7 @@ namespace gnash {
 
 namespace gnash {
 
-typedef std::vector<boost::shared_ptr<BitmapFilter> > Filters;
+typedef std::vector<std::unique_ptr<BitmapFilter> > Filters;
 
 class filter_factory
 {
diff --git a/libcore/parser/movie_definition.h b/libcore/parser/movie_definition.h
index bf6a133..6d615c8 100644
--- a/libcore/parser/movie_definition.h
+++ b/libcore/parser/movie_definition.h
@@ -53,10 +53,10 @@
 #endif
 
 #include <string>
-#include <memory> // for auto_ptr
+#include <memory> // for unique_ptr
 #include <vector> // for PlayList typedef
 #include <boost/intrusive_ptr.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "DefinitionTag.h"
 #include "log.h"
@@ -140,9 +140,9 @@ public:
 	/// SWFMovieDefinition is one such example, future examples
 	/// should include jpeg_movie_def and similar..
 	///
-	virtual Movie* createMovie(Global_as& /*gl*/, DisplayObject* /*parent*/=0)
+	virtual Movie* createMovie(Global_as& /*gl*/, DisplayObject* /*parent*/=nullptr)
 	{
-		return NULL;
+		return nullptr;
 	}
 
     virtual void incrementLoadedFrames() {}
@@ -158,7 +158,7 @@ public:
 	///
 	virtual const PlayList* getPlaylist(size_t /*frame_number*/) const
 	{
-		return 0;
+		return nullptr;
 	}
 
 
@@ -193,9 +193,9 @@ public:
 	///
 	/// @return NULL if no DisplayObject with the given ID is found
 	///         (this is the default)
-	virtual DefinitionTag* getDefinitionTag(boost::uint16_t /*id*/) const
+	virtual DefinitionTag* getDefinitionTag(std::uint16_t /*id*/) const
 	{
-		return NULL;
+		return nullptr;
 	}
 
 	/// Get 0-based index of the frame with given label.
@@ -230,7 +230,7 @@ public:
     //
 	/// This method is here to be called by DEFINE tags loaders.
 	/// The default implementation does nothing.
-	virtual void addDisplayObject(boost::uint16_t /*id*/, DefinitionTag* /*c*/)
+	virtual void addDisplayObject(std::uint16_t /*id*/, DefinitionTag* /*c*/)
 	{
 	}
 
@@ -252,14 +252,14 @@ public:
 	///
 	virtual Font* get_font(int /*id*/) const
 	{
-		return NULL;
+		return nullptr;
 	}
 
 	/// Find a font from the movie (not shared) lib
 	virtual Font* get_font(const std::string& /*name*/,
             bool /*bold*/, bool /*italic*/) const
 	{
-		return 0;
+		return nullptr;
 	}
 
 	/// Add an ControlTag to this movie_definition's playlist
@@ -291,9 +291,9 @@ public:
 	///
 	/// The default implementation is a no-op. Actually, an implicit op
 	/// *is* performed, and it is deleting the jpeg::input instance since
-	/// it is passed in an auto_ptr...
+	/// it is passed in an unique_ptr...
 	///
-	virtual void set_jpeg_loader(std::auto_ptr<image::JpegInput> /*j_in*/)
+	virtual void set_jpeg_loader(std::unique_ptr<image::JpegInput> /*j_in*/)
 	{
 	}
 
@@ -310,7 +310,7 @@ public:
 	///
 	virtual image::JpegInput* get_jpeg_loader() const
 	{
-		return NULL;
+		return nullptr;
 	}
 
 	/// \brief
@@ -328,7 +328,7 @@ public:
 	///
 	virtual CachedBitmap* getBitmap(int /*DisplayObject_id*/) const
 	{
-		return 0;
+		return nullptr;
 	}
 
 	/// \brief
@@ -350,7 +350,7 @@ public:
 	///
 	virtual sound_sample* get_sound_sample(int /*DisplayObject_id*/) const
 	{
-		return NULL;
+		return nullptr;
 	}
 
 	/// \brief
@@ -387,13 +387,13 @@ public:
     /// Register a symbol to refer to a character id
     //
     /// The default implementation does nothing.
-    virtual void registerExport(const std::string&, boost::uint16_t) {}
+    virtual void registerExport(const std::string&, std::uint16_t) {}
     
     /// Get the id that corresponds to a symbol.
     //
     /// @return         The id corresponding to the passed symbol. The default
     ///                 implementation returns 0, as it has no export table.
-    virtual boost::uint16_t exportID(const std::string& /*symbol*/) const {
+    virtual std::uint16_t exportID(const std::string& /*symbol*/) const {
         return 0;
     }
 
@@ -458,7 +458,7 @@ public:
 #endif
 protected:
 
-    movie_definition(boost::uint16_t id = 0)
+    movie_definition(std::uint16_t id = 0)
         :
         DefinitionTag(id)
     {}
diff --git a/libcore/parser/sprite_definition.cpp b/libcore/parser/sprite_definition.cpp
index 13ff968..75796fe 100644
--- a/libcore/parser/sprite_definition.cpp
+++ b/libcore/parser/sprite_definition.cpp
@@ -108,7 +108,7 @@ sprite_definition::get_labeled_frame(const std::string& label,
 }
 
 sprite_definition::sprite_definition(movie_definition& m, SWFStream& in, 
-        const RunResources& runResources, boost::uint16_t id)
+        const RunResources& runResources, std::uint16_t id)
 	:
     movie_definition(id),
 	m_movie_def(m),
diff --git a/libcore/parser/sprite_definition.h b/libcore/parser/sprite_definition.h
index 80a2dce..1aa0177 100644
--- a/libcore/parser/sprite_definition.h
+++ b/libcore/parser/sprite_definition.h
@@ -22,7 +22,7 @@
 #define GNASH_SPRITE_DEFINITION_H
 
 #include <boost/intrusive_ptr.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <string>
 #include <map>
 #include "movie_definition.h" // for inheritance
@@ -65,7 +65,7 @@ public:
 	///	to be already positioned right before the frame count
 	///
 	sprite_definition(movie_definition& m, SWFStream& in,
-            const RunResources& runResources, boost::uint16_t id);
+            const RunResources& runResources, std::uint16_t id);
 
 	/// Destructor, releases playlist data
 	~sprite_definition();
@@ -176,11 +176,11 @@ public:
 		return _loadingSoundStream;
 	}
 
-    virtual boost::uint16_t exportID(const std::string& symbol) const {
+    virtual std::uint16_t exportID(const std::string& symbol) const {
         return m_movie_def.exportID(symbol);
     }
     
-    virtual void registerExport(const std::string& s, boost::uint16_t id) {
+    virtual void registerExport(const std::string& s, std::uint16_t id) {
         m_movie_def.registerExport(s, id);
     }
 
@@ -188,13 +188,13 @@ public:
 	/// Get a SWF::DefinitionTag from this Sprite's root movie
 	/// CharacterDictionary.
 	///
-	virtual SWF::DefinitionTag*	getDefinitionTag(boost::uint16_t id) const
+	virtual SWF::DefinitionTag*	getDefinitionTag(std::uint16_t id) const
 	{
 	    return m_movie_def.getDefinitionTag(id);
 	}
 
 	/// Delegate call to associated root movie
-	virtual void addDisplayObject(boost::uint16_t id, SWF::DefinitionTag* c)
+	virtual void addDisplayObject(std::uint16_t id, SWF::DefinitionTag* c)
 	{
 		m_movie_def.addDisplayObject(id, c);
 	}
@@ -250,7 +250,7 @@ private:
 		//assert(frame_number < m_loading_frame);
 
 		PlayListMap::const_iterator it = m_playlist.find(frame_number);
-		if ( it == m_playlist.end() ) return NULL;
+		if ( it == m_playlist.end() ) return nullptr;
 		else return &(it->second);
 	}
 
diff --git a/libcore/swf/CSMTextSettingsTag.cpp b/libcore/swf/CSMTextSettingsTag.cpp
index 0627fba..993fb06 100644
--- a/libcore/swf/CSMTextSettingsTag.cpp
+++ b/libcore/swf/CSMTextSettingsTag.cpp
@@ -20,7 +20,7 @@
 
 #include "CSMTextSettingsTag.h"
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "utility.h"
 #include "RunResources.h"
@@ -52,7 +52,7 @@ CSMTextSettingsTag::loader(SWFStream& in, TagType tag, movie_definition& /*m*/,
 
     in.ensureBytes(2 + 1 + 4 + 4 + 1);
 
-    boost::uint16_t textID = in.read_u16();
+    std::uint16_t textID = in.read_u16();
     
     // Should be either 1 or 0. TODO: what if it's something else?
     bool flashType = in.read_uint(2); 
@@ -60,10 +60,10 @@ CSMTextSettingsTag::loader(SWFStream& in, TagType tag, movie_definition& /*m*/,
     // 0: no grid fitting.
     // 1: Pixel grid fit (only for left-aligned dynamic text)
     // 2: Sub-pixel grid fit.
-    boost::uint8_t gridFit = in.read_uint(3);
+    std::uint8_t gridFit = in.read_uint(3);
 
     // Should be 0:
-    boost::uint8_t reserved = in.read_uint(3);
+    std::uint8_t reserved = in.read_uint(3);
     UNUSED(reserved);
 
     float thickness = in.read_long_float();
diff --git a/libcore/swf/DefaultTagLoaders.cpp b/libcore/swf/DefaultTagLoaders.cpp
index da5e6f6..a8953ee 100644
--- a/libcore/swf/DefaultTagLoaders.cpp
+++ b/libcore/swf/DefaultTagLoaders.cpp
@@ -22,7 +22,6 @@
 
 #include "DefaultTagLoaders.h"
 
-#include <boost/assign.hpp>
 #include <set>
 
 #include "SWF.h"
@@ -112,136 +111,136 @@ addDefaultLoaders(TagLoadersTable& table)
     // expected not to be used. They are generally documented
     // by Alexis to exist (without any known structure), but not
     // by Adobe.
-    const std::vector<TagPair> tags = boost::assign::list_of
+    const std::vector<TagPair> tags = {
         // 01: nothing to do for an end tag.
-        (TagPair(SWF::END, ignore))
+        {SWF::END,ignore},
         // 02
-        (TagPair(SWF::DEFINESHAPE, DefineShapeTag::loader))
+        {SWF::DEFINESHAPE,DefineShapeTag::loader},
         // 03
-        (TagPair(SWF::FREECHARACTER, unexpected)) 
-        (TagPair(SWF::PLACEOBJECT, PlaceObject2Tag::loader))
-        (TagPair(SWF::REMOVEOBJECT, RemoveObjectTag::loader)) // 05
-        (TagPair(SWF::DEFINEBITS, DefineBitsTag::loader))
-        (TagPair(SWF::DEFINEBUTTON, DefineButtonTag::loader))
-        (TagPair(SWF::JPEGTABLES, jpeg_tables_loader))
-        (TagPair(SWF::SETBACKGROUNDCOLOR, SetBackgroundColorTag::loader))
-        (TagPair(SWF::DEFINEFONT, DefineFontTag::loader))
-        (TagPair(SWF::DEFINETEXT, DefineTextTag::loader))
-        (TagPair(SWF::DOACTION, DoActionTag::loader))
-        (TagPair(SWF::DEFINEFONTINFO, DefineFontInfoTag::loader))
-        (TagPair(SWF::DEFINESOUND, define_sound_loader))
-        (TagPair(SWF::STARTSOUND, StartSoundTag::loader))
-        (TagPair(SWF::STOPSOUND, unexpected)) // 16 
+        {SWF::FREECHARACTER,unexpected},
+        {SWF::PLACEOBJECT,PlaceObject2Tag::loader},
+        {SWF::REMOVEOBJECT,RemoveObjectTag::loader},// 05
+        {SWF::DEFINEBITS,DefineBitsTag::loader},
+        {SWF::DEFINEBUTTON,DefineButtonTag::loader},
+        {SWF::JPEGTABLES,jpeg_tables_loader},
+        {SWF::SETBACKGROUNDCOLOR,SetBackgroundColorTag::loader},
+        {SWF::DEFINEFONT,DefineFontTag::loader},
+        {SWF::DEFINETEXT,DefineTextTag::loader},
+        {SWF::DOACTION,DoActionTag::loader},
+        {SWF::DEFINEFONTINFO,DefineFontInfoTag::loader},
+        {SWF::DEFINESOUND,define_sound_loader},
+        {SWF::STARTSOUND,StartSoundTag::loader},
+        {SWF::STOPSOUND,unexpected},// 16
         // 17
-        (TagPair(SWF::DEFINEBUTTONSOUND, DefineButtonSoundTag::loader))
+        {SWF::DEFINEBUTTONSOUND,DefineButtonSoundTag::loader},
         // 18
-        (TagPair(SWF::SOUNDSTREAMHEAD, SoundStreamHeadTag::loader))
+        {SWF::SOUNDSTREAMHEAD,SoundStreamHeadTag::loader},
         // 19
-        (TagPair(SWF::SOUNDSTREAMBLOCK, StreamSoundBlockTag::loader))
-        (TagPair(SWF::DEFINELOSSLESS, DefineBitsTag::loader))
-        (TagPair(SWF::DEFINEBITSJPEG2, DefineBitsTag::loader))
-        (TagPair(SWF::DEFINESHAPE2, DefineShapeTag::loader))
-        (TagPair(SWF::DEFINEBUTTONCXFORM, DefineButtonCxformTag::loader)) // 23
-        (TagPair(SWF::PROTECT, ignore))
-        (TagPair(SWF::PATHSAREPOSTSCRIPT, unexpected)) // 25
-        (TagPair(SWF::PLACEOBJECT2, PlaceObject2Tag::loader))
+        {SWF::SOUNDSTREAMBLOCK,StreamSoundBlockTag::loader},
+        {SWF::DEFINELOSSLESS,DefineBitsTag::loader},
+        {SWF::DEFINEBITSJPEG2,DefineBitsTag::loader},
+        {SWF::DEFINESHAPE2,DefineShapeTag::loader},
+        {SWF::DEFINEBUTTONCXFORM,DefineButtonCxformTag::loader},// 23
+        {SWF::PROTECT,ignore},
+        {SWF::PATHSAREPOSTSCRIPT,unexpected},// 25
+        {SWF::PLACEOBJECT2,PlaceObject2Tag::loader},
         // 28
-        (TagPair(SWF::REMOVEOBJECT2, RemoveObjectTag::loader)) 
-        (TagPair(SWF::SYNCFRAME, unexpected)) // 29
-        (TagPair(SWF::FREEALL, unexpected)) // 31
-        (TagPair(SWF::DEFINESHAPE3, DefineShapeTag::loader))
-        (TagPair(SWF::DEFINETEXT2, DefineText2Tag::loader))
+        {SWF::REMOVEOBJECT2,RemoveObjectTag::loader},
+        {SWF::SYNCFRAME,unexpected},// 29
+        {SWF::FREEALL,unexpected},// 31
+        {SWF::DEFINESHAPE3,DefineShapeTag::loader},
+        {SWF::DEFINETEXT2,DefineText2Tag::loader},
         // 37
-        (TagPair(SWF::DEFINEBUTTON2, DefineButton2Tag::loader))
-        (TagPair(SWF::DEFINEBITSJPEG3, DefineBitsTag::loader))
-        (TagPair(SWF::DEFINELOSSLESS2, DefineBitsTag::loader))
-        (TagPair(SWF::DEFINEEDITTEXT, DefineEditTextTag::loader))
-        (TagPair(SWF::DEFINEVIDEO, unexpected)) // 38
-        (TagPair(SWF::DEFINESPRITE, sprite_loader))
-        (TagPair(SWF::NAMECHARACTER, unexpected)) // 40
-        (TagPair(SWF::SERIALNUMBER, serialnumber_loader)) // 41
-        (TagPair(SWF::DEFINETEXTFORMAT, unexpected)) // 42
-        (TagPair(SWF::FRAMELABEL, frame_label_loader)) // 43
-        (TagPair(SWF::DEFINEBEHAVIOR, unexpected)) // 44
+        {SWF::DEFINEBUTTON2,DefineButton2Tag::loader},
+        {SWF::DEFINEBITSJPEG3,DefineBitsTag::loader},
+        {SWF::DEFINELOSSLESS2,DefineBitsTag::loader},
+        {SWF::DEFINEEDITTEXT,DefineEditTextTag::loader},
+        {SWF::DEFINEVIDEO,unexpected},// 38
+        {SWF::DEFINESPRITE,sprite_loader},
+        {SWF::NAMECHARACTER,unexpected},// 40
+        {SWF::SERIALNUMBER,serialnumber_loader},// 41
+        {SWF::DEFINETEXTFORMAT,unexpected},// 42
+        {SWF::FRAMELABEL,frame_label_loader},// 43
+        {SWF::DEFINEBEHAVIOR,unexpected},// 44
         // 45
-        (TagPair(SWF::SOUNDSTREAMHEAD2, SoundStreamHeadTag::loader))
+        {SWF::SOUNDSTREAMHEAD2,SoundStreamHeadTag::loader},
         // 46
-        (TagPair(SWF::DEFINEMORPHSHAPE, DefineMorphShapeTag::loader))
+        {SWF::DEFINEMORPHSHAPE,DefineMorphShapeTag::loader},
         // 47
-        (TagPair(SWF::FRAMETAG, unexpected))
+        {SWF::FRAMETAG,unexpected},
         // 48
-        (TagPair(SWF::DEFINEFONT2, DefineFontTag::loader))
-        (TagPair(SWF::GENCOMMAND, unexpected)) // 49
-        (TagPair(SWF::DEFINECOMMANDOBJ, unexpected)) // 50
-        (TagPair(SWF::CHARACTERSET, unexpected)) // 51
-        (TagPair(SWF::FONTREF, unexpected)) // 52
-        (TagPair(SWF::DEFINEFUNCTION, unexpected)) // 53 
-        (TagPair(SWF::PLACEFUNCTION, unexpected)) // 54 
-        (TagPair(SWF::GENTAGOBJECT, unexpected)) // 55 
-        (TagPair(SWF::EXPORTASSETS, ExportAssetsTag::loader)) // 56
-        (TagPair(SWF::IMPORTASSETS, ImportAssetsTag::loader)) // 57
-        (TagPair(SWF::ENABLEDEBUGGER, ignore))    // 58
+        {SWF::DEFINEFONT2,DefineFontTag::loader},
+        {SWF::GENCOMMAND,unexpected},// 49
+        {SWF::DEFINECOMMANDOBJ,unexpected},// 50
+        {SWF::CHARACTERSET,unexpected},// 51
+        {SWF::FONTREF,unexpected},// 52
+        {SWF::DEFINEFUNCTION,unexpected},// 53
+        {SWF::PLACEFUNCTION,unexpected},// 54
+        {SWF::GENTAGOBJECT,unexpected},// 55
+        {SWF::EXPORTASSETS,ExportAssetsTag::loader},// 56
+        {SWF::IMPORTASSETS,ImportAssetsTag::loader},// 57
+        {SWF::ENABLEDEBUGGER,ignore},   // 58
         // 59
-        (TagPair(SWF::INITACTION, DoInitActionTag::loader)) 
+        {SWF::INITACTION,DoInitActionTag::loader},
         // 60
-        (TagPair(SWF::DEFINEVIDEOSTREAM, DefineVideoStreamTag::loader))
+        {SWF::DEFINEVIDEOSTREAM,DefineVideoStreamTag::loader},
         // 61
-        (TagPair(SWF::VIDEOFRAME, VideoFrameTag::loader))
+        {SWF::VIDEOFRAME,VideoFrameTag::loader},
         // 62
-        (TagPair(SWF::DEFINEFONTINFO2, DefineFontInfoTag::loader))
+        {SWF::DEFINEFONTINFO2,DefineFontInfoTag::loader},
         // 63
-        (TagPair(SWF::DEBUGID, ignore))
+        {SWF::DEBUGID,ignore},
         // 64
-        (TagPair(SWF::ENABLEDEBUGGER2, ignore))
-        (TagPair(SWF::SCRIPTLIMITS, ScriptLimitsTag::loader)) //65
-        (TagPair(SWF::SETTABINDEX, SetTabIndexTag::loader)) //66 
-        // TODO: Alexis reference says these are 83, 84. The 67, 68 comes from
+        {SWF::ENABLEDEBUGGER2,ignore},
+        {SWF::SCRIPTLIMITS,ScriptLimitsTag::loader},//65
+        {SWF::SETTABINDEX,SetTabIndexTag::loader},//66
+        // TODO: Alexis reference says these are 83,84. The 67,68 comes from
         // Tamarin. Figure out which one is correct (possibly both are).
         // 67
-        (TagPair(SWF::DEFINESHAPE4_, DefineShapeTag::loader))
+        {SWF::DEFINESHAPE4_,DefineShapeTag::loader},
         // 68
-        (TagPair(SWF::DEFINEMORPHSHAPE2_, DefineMorphShapeTag::loader))
+        {SWF::DEFINEMORPHSHAPE2_,DefineMorphShapeTag::loader},
         // 69
-        (TagPair(SWF::FILEATTRIBUTES, file_attributes_loader))
+        {SWF::FILEATTRIBUTES,file_attributes_loader},
         // 70
-        (TagPair(SWF::PLACEOBJECT3, PlaceObject2Tag::loader))
+        {SWF::PLACEOBJECT3,PlaceObject2Tag::loader},
         // 71
-        (TagPair(SWF::IMPORTASSETS2, ImportAssetsTag::loader))
+        {SWF::IMPORTASSETS2,ImportAssetsTag::loader},
         // 73
-        (TagPair(SWF::DEFINEALIGNZONES, DefineFontAlignZonesTag::loader))
+        {SWF::DEFINEALIGNZONES,DefineFontAlignZonesTag::loader},
         // 74
-        (TagPair(SWF::CSMTEXTSETTINGS, CSMTextSettingsTag::loader))
+        {SWF::CSMTEXTSETTINGS,CSMTextSettingsTag::loader},
         // 75
-        (TagPair(SWF::DEFINEFONT3, DefineFontTag::loader))
+        {SWF::DEFINEFONT3,DefineFontTag::loader},
         // 77
-        (TagPair(SWF::METADATA, metadata_loader))
+        {SWF::METADATA,metadata_loader},
         // 78
-        (TagPair(SWF::DEFINESCALINGGRID, DefineScalingGridTag::loader))
+        {SWF::DEFINESCALINGGRID,DefineScalingGridTag::loader},
         // 83
-        (TagPair(SWF::DEFINESHAPE4, DefineShapeTag::loader))
+        {SWF::DEFINESHAPE4,DefineShapeTag::loader},
         // 84
-        (TagPair(SWF::DEFINEMORPHSHAPE2, DefineMorphShapeTag::loader))
+        {SWF::DEFINEMORPHSHAPE2,DefineMorphShapeTag::loader},
         // 88
-        (TagPair(SWF::DEFINEFONTNAME, DefineFontNameTag::loader))
+        {SWF::DEFINEFONTNAME,DefineFontNameTag::loader},
         // 89
-        (TagPair(SWF::STARTSOUND2, StartSound2Tag::loader))
+        {SWF::STARTSOUND2,StartSound2Tag::loader},
         // 90
-        (TagPair(SWF::DEFINEBITSJPEG4, DefineBitsTag::loader))
+        {SWF::DEFINEBITSJPEG4,DefineBitsTag::loader},
         // 777
-        (TagPair(SWF::REFLEX, reflex_loader))
+        {SWF::REFLEX,reflex_loader}
 #ifdef ENABLE_AVM2
         // The following tags are AVM2 only.
         // 72 -- AS3 codeblock.
-        (TagPair(SWF::DOABC, DoABCTag::loader)) 
+        ,{SWF::DOABC,DoABCTag::loader},
         // 76
-        (TagPair(SWF::SYMBOLCLASS, SymbolClassTag::loader))
+        {SWF::SYMBOLCLASS,SymbolClassTag::loader},
         // 82
-        (TagPair(SWF::DOABCDEFINE, DoABCTag::loader))
+        {SWF::DOABCDEFINE,DoABCTag::loader},
         // 86
-        (TagPair(SWF::DEFINESCENEANDFRAMELABELDATA,
-                DefineSceneAndFrameLabelDataTag::loader))
+        {SWF::DEFINESCENEANDFRAMELABELDATA,
+                DefineSceneAndFrameLabelDataTag::loader}
 #endif
-        ;
+        };
 
     std::for_each(tags.begin(), tags.end(), AddLoader(table));
 
diff --git a/libcore/swf/DefineBitsTag.cpp b/libcore/swf/DefineBitsTag.cpp
index 9967921..1e20bd8 100644
--- a/libcore/swf/DefineBitsTag.cpp
+++ b/libcore/swf/DefineBitsTag.cpp
@@ -26,8 +26,6 @@
 
 #include <limits>
 #include <cassert>
-#include <boost/static_assert.hpp>
-#include <boost/scoped_array.hpp>
 
 #include "IOChannel.h"
 #include "utility.h"
@@ -55,12 +53,12 @@ namespace SWF {
 namespace {
     void inflateWrapper(SWFStream& in, void* buffer, size_t buffer_bytes);
 
-    std::auto_ptr<image::GnashImage> readDefineBitsJpeg(SWFStream& in,
+    std::unique_ptr<image::GnashImage> readDefineBitsJpeg(SWFStream& in,
             movie_definition& m);
-    std::auto_ptr<image::GnashImage> readDefineBitsJpeg2(SWFStream& in);
+    std::unique_ptr<image::GnashImage> readDefineBitsJpeg2(SWFStream& in);
     /// DefineBitsJpeg3, also DefineBitsJpeg4!
-    std::auto_ptr<image::GnashImage> readDefineBitsJpeg3(SWFStream& in, TagType tag);
-    std::auto_ptr<image::GnashImage> readLossless(SWFStream& in, TagType tag);
+    std::unique_ptr<image::GnashImage> readDefineBitsJpeg3(SWFStream& in, TagType tag);
+    std::unique_ptr<image::GnashImage> readLossless(SWFStream& in, TagType tag);
 
 }
 
@@ -79,7 +77,7 @@ class StreamAdapter : public IOChannel
         :
         s(str),
         startPos(s.tell()),
-        endPos(maxPos),
+        endPos(std::move(maxPos)),
         currPos(startPos)
     {
         assert(endPos >= startPos);
@@ -133,9 +131,9 @@ class StreamAdapter : public IOChannel
 public:
 
     /// Get an IOChannel from a gnash::SWFStream
-    static std::auto_ptr<IOChannel> getFile(SWFStream& str,
+    static std::unique_ptr<IOChannel> getFile(SWFStream& str,
             unsigned long endPos) {
-        std::auto_ptr<IOChannel> ret(new StreamAdapter(str, endPos));
+        std::unique_ptr<IOChannel> ret(new StreamAdapter(str, endPos));
         return ret;
     }
 };
@@ -166,7 +164,7 @@ jpeg_tables_loader(SWFStream& in, TagType tag, movie_definition& m,
                 currPos);
     }
 
-    std::auto_ptr<image::JpegInput> input;
+    std::unique_ptr<image::JpegInput> input;
 
     try {
         // NOTE: we cannot limit input SWFStream here as the same jpeg::input
@@ -176,7 +174,7 @@ jpeg_tables_loader(SWFStream& in, TagType tag, movie_definition& m,
         // Anyway the actual reads are limited to currently opened tag as 
         // of gnash::SWFStream::read(), so this is not a problem.
         //
-        boost::shared_ptr<IOChannel> ad(StreamAdapter::getFile(in,
+        std::shared_ptr<IOChannel> ad(StreamAdapter::getFile(in,
                     std::numeric_limits<std::streamsize>::max()).release());
         //  transfer ownership to the image::JpegInput
         input = image::JpegInput::createSWFJpeg2HeaderOnly(ad, jpegHeaderSize);
@@ -191,7 +189,7 @@ jpeg_tables_loader(SWFStream& in, TagType tag, movie_definition& m,
     }
 
     log_debug("Setting jpeg loader to %p", (void*)input.get());
-    m.set_jpeg_loader(input);
+    m.set_jpeg_loader(std::move(input));
 }
 
 void
@@ -199,7 +197,7 @@ DefineBitsTag::loader(SWFStream& in, TagType tag, movie_definition& m,
         const RunResources& r)
 {
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     if (m.getBitmap(id)) {
         IF_VERBOSE_MALFORMED_SWF(
@@ -209,7 +207,7 @@ DefineBitsTag::loader(SWFStream& in, TagType tag, movie_definition& m,
         return;
     }
 
-    std::auto_ptr<image::GnashImage> im;
+    std::unique_ptr<image::GnashImage> im;
 
     switch (tag) {
         case SWF::DEFINEBITS:
@@ -244,7 +242,7 @@ DefineBitsTag::loader(SWFStream& in, TagType tag, movie_definition& m,
         );
         return;
     }    
-    boost::intrusive_ptr<CachedBitmap> bi = renderer->createCachedBitmap(im);
+    boost::intrusive_ptr<CachedBitmap> bi = renderer->createCachedBitmap(std::move(im));
 
     IF_VERBOSE_PARSE(
         log_parse(_("Adding bitmap id %1%"), id);
@@ -257,10 +255,10 @@ namespace {
 
 // A JPEG image without included tables; those should be in an
 // existing image::JpegInput object stored in the movie.
-std::auto_ptr<image::GnashImage>
+std::unique_ptr<image::GnashImage>
 readDefineBitsJpeg(SWFStream& /*in*/, movie_definition& m)
 {
-    std::auto_ptr<image::GnashImage> im;
+    std::unique_ptr<image::GnashImage> im;
 
     // Read the image data.
     image::JpegInput* j_in = m.get_jpeg_loader();
@@ -321,25 +319,25 @@ checkFileType(SWFStream& in)
 }
 
 
-std::auto_ptr<image::GnashImage>
+std::unique_ptr<image::GnashImage>
 readDefineBitsJpeg2(SWFStream& in)
 {
     const FileType ft = checkFileType(in);
 
     // Read the image data.
-    boost::shared_ptr<IOChannel> ad(StreamAdapter::getFile(in,
+    std::unique_ptr<IOChannel> ad(StreamAdapter::getFile(in,
                 in.get_tag_end_position()).release());
 
-    return image::Input::readImageData(ad, ft);
+    return image::Input::readImageData(std::move(ad), ft);
 }
 
 
 /// Parse a DefineBitsJpeg3 or 4 tag.
-std::auto_ptr<image::GnashImage>
+std::unique_ptr<image::GnashImage>
 readDefineBitsJpeg3(SWFStream& in, TagType tag)
 {
     in.ensureBytes(4);
-    const boost::uint32_t jpeg_size = in.read_u32();
+    const std::uint32_t jpeg_size = in.read_u32();
 
     if (tag == DEFINEBITSJPEG4) {
         in.ensureBytes(2);
@@ -356,26 +354,26 @@ readDefineBitsJpeg3(SWFStream& in, TagType tag)
     if (ft != GNASH_FILETYPE_JPEG) {
         log_debug("TESTING: non-JPEG data in DefineBitsJpeg3");
         // Read the image data.
-        boost::shared_ptr<IOChannel> ad(StreamAdapter::getFile(in,
+        std::unique_ptr<IOChannel> ad(StreamAdapter::getFile(in,
                     in.get_tag_end_position()).release());
-        return image::Input::readImageData(ad, ft);
+        return image::Input::readImageData(std::move(ad), ft);
     }
 
     // We assume it's a JPEG with alpha data.
-    const boost::uint32_t alpha_position = in.tell() + jpeg_size;
+    const std::uint32_t alpha_position = in.tell() + jpeg_size;
 
 #ifndef HAVE_ZLIB_H
     log_error(_("gnash is not linked to zlib -- can't load jpeg3 image data"));
-    return std::auto_ptr<image::GnashImage>();
+    return std::unique_ptr<image::GnashImage>();
 #else
 
     // Read rgb data.
-    boost::shared_ptr<IOChannel> ad(StreamAdapter::getFile(in,
+    std::unique_ptr<IOChannel> ad(StreamAdapter::getFile(in,
                 alpha_position).release());
-    std::auto_ptr<image::ImageRGBA> im = image::Input::readSWFJpeg3(ad);
+    std::unique_ptr<image::ImageRGBA> im = image::Input::readSWFJpeg3(std::move(ad));
     
     /// Failure to read the jpeg.
-    if (!im.get()) return std::auto_ptr<image::GnashImage>();
+    if (!im.get()) return std::unique_ptr<image::GnashImage>();
 
     // Read alpha channel.
     in.seek(alpha_position);
@@ -384,7 +382,7 @@ readDefineBitsJpeg3(SWFStream& in, TagType tag)
     const size_t imHeight = im->height();
     const size_t bufferLength = imWidth * imHeight;
 
-    boost::scoped_array<boost::uint8_t> buffer(new boost::uint8_t[bufferLength]);
+    std::unique_ptr<std::uint8_t[]> buffer(new std::uint8_t[bufferLength]);
 
     inflateWrapper(in, buffer.get(), bufferLength);
 
@@ -394,27 +392,27 @@ readDefineBitsJpeg3(SWFStream& in, TagType tag)
     image::mergeAlpha(*im, buffer.get(), bufferLength);
 
 #endif
-    return static_cast<std::auto_ptr<image::GnashImage> >(im);
+    return std::move(im);
 }
 
 
-std::auto_ptr<image::GnashImage>
+std::unique_ptr<image::GnashImage>
 readLossless(SWFStream& in, TagType tag)
 {
     assert(tag == SWF::DEFINELOSSLESS || tag == SWF::DEFINELOSSLESS2);
     in.ensureBytes(2 + 2 + 1); // the initial header 
 
     // 3 == 8 bit, 4 == 16 bit, 5 == 32 bit
-    const boost::uint8_t bitmap_format = in.read_u8();
-    const boost::uint16_t width = in.read_u16();
-    const boost::uint16_t height = in.read_u16();
+    const std::uint8_t bitmap_format = in.read_u8();
+    const std::uint16_t width = in.read_u16();
+    const std::uint16_t height = in.read_u16();
 
     IF_VERBOSE_PARSE(
         log_parse(_("  defbitslossless2: tag = %d, fmt = %d, "
                 "w = %d, h = %d"), tag, +bitmap_format, width, height);
     );
 
-    std::auto_ptr<image::GnashImage> image;  
+    std::unique_ptr<image::GnashImage> image;  
     if (!width || !height) {
          IF_VERBOSE_MALFORMED_SWF(
             log_swferror(_("Bitmap has a height or width of 0"));
@@ -475,12 +473,12 @@ readLossless(SWFStream& in, TagType tag)
 
         default:
             log_error(_("Unknown bitmap format. Ignoring"));
-            return std::auto_ptr<image::GnashImage>();
+            return std::unique_ptr<image::GnashImage>();
     }
 
     const size_t pitch = (width * bytes_per_pixel + 3) &~ 3;
     const size_t bufSize = colorTableSize * channels + pitch * height;
-    boost::scoped_array<boost::uint8_t> buffer(new boost::uint8_t[bufSize]);
+    std::unique_ptr<std::uint8_t[]> buffer(new std::uint8_t[bufSize]);
 
     inflateWrapper(in, buffer.get(), bufSize);
     assert(in.tell() <= in.get_tag_end_position());
@@ -490,15 +488,15 @@ readLossless(SWFStream& in, TagType tag)
         case 3:
         {
             // 8-bit data, preceded by a palette.
-            boost::uint8_t* colorTable = buffer.get();
+            std::uint8_t* colorTable = buffer.get();
 
             for (size_t j = 0; j < height; ++j) {
-                boost::uint8_t* inRow = buffer.get() + 
+                std::uint8_t* inRow = buffer.get() +
                     colorTableSize * channels + j * pitch;
 
-                boost::uint8_t* outRow = scanline(*image, j);
+                std::uint8_t* outRow = scanline(*image, j);
                 for (size_t i = 0; i < width; ++i) {
-                    boost::uint8_t pixel = inRow[i * bytes_per_pixel];
+                    std::uint8_t pixel = inRow[i * bytes_per_pixel];
                     outRow[i * channels + 0] = colorTable[pixel * channels + 0];
                     outRow[i * channels + 1] = colorTable[pixel * channels + 1];
                     outRow[i * channels + 2] = colorTable[pixel * channels + 2];
@@ -516,10 +514,10 @@ readLossless(SWFStream& in, TagType tag)
 
             for (size_t j = 0; j < height; ++j) {
 
-                boost::uint8_t* inRow = buffer.get() + j * pitch;
-                boost::uint8_t* outRow = scanline(*image, j);
+                std::uint8_t* inRow = buffer.get() + j * pitch;
+                std::uint8_t* outRow = scanline(*image, j);
                 for (size_t i = 0; i < width; ++i) {
-                    const boost::uint16_t pix = ( inRow[i * 2]     << 8 )
+                    const std::uint16_t pix = ( inRow[i * 2]     << 8 )
                                               | ( inRow[i * 2 + 1]      ) ;
                     const double g = 255.0/31.0; // gamma correction
 
@@ -540,8 +538,8 @@ readLossless(SWFStream& in, TagType tag)
         case 5:
             // Need to re-arrange ARGB into RGB or RGBA.
             for (size_t j = 0; j < height; ++j) {
-                boost::uint8_t* inRow = buffer.get() + j * pitch;
-                boost::uint8_t* outRow = scanline(*image, j);
+                std::uint8_t* inRow = buffer.get() + j * pitch;
+                std::uint8_t* outRow = scanline(*image, j);
                 const int inChannels = 4;
 
                 for (size_t i = 0; i < width; ++i) {
@@ -576,10 +574,10 @@ inflateWrapper(SWFStream& in, void* buffer, size_t buffer_bytes)
 
     z_stream d_stream;
 
-    d_stream.zalloc = 0;
-    d_stream.zfree = 0;
-    d_stream.opaque = 0;
-    d_stream.next_in  = 0;
+    d_stream.zalloc = nullptr;
+    d_stream.zfree = nullptr;
+    d_stream.opaque = nullptr;
+    d_stream.next_in  = nullptr;
     d_stream.avail_in = 0;
 
     d_stream.next_out = static_cast<Byte*>(buffer);
@@ -596,7 +594,7 @@ inflateWrapper(SWFStream& in, void* buffer, size_t buffer_bytes)
 
     const size_t CHUNKSIZE = 256;
 
-    boost::uint8_t buf[CHUNKSIZE];
+    std::uint8_t buf[CHUNKSIZE];
     unsigned long endTagPos = in.get_tag_end_position();
 
     for (;;) {
@@ -616,8 +614,8 @@ inflateWrapper(SWFStream& in, void* buffer, size_t buffer_bytes)
             chunkSize = availableBytes;
         }
     
-        BOOST_STATIC_ASSERT(sizeof(char) == sizeof(boost::uint8_t))
-            __attribute__((unused));
+        static_assert(sizeof(char) == sizeof(std::uint8_t),
+            "char must be 1 byte");
 
         // Fill the buffer    
         in.read(reinterpret_cast<char*>(buf), chunkSize);
diff --git a/libcore/swf/DefineButtonCxformTag.cpp b/libcore/swf/DefineButtonCxformTag.cpp
index 74b2fef..e43de12 100644
--- a/libcore/swf/DefineButtonCxformTag.cpp
+++ b/libcore/swf/DefineButtonCxformTag.cpp
@@ -36,7 +36,7 @@ DefineButtonCxformTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     assert(tag == SWF::DEFINEBUTTONCXFORM);
 
     in.ensureBytes(2);
-    const boost::uint16_t buttonID = in.read_u16();
+    const std::uint16_t buttonID = in.read_u16();
 
     IF_VERBOSE_PARSE (
         log_parse("DefineButtonCxformTag: ButtonId=%d", buttonID);
@@ -65,12 +65,11 @@ DefineButtonCxformTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     }
     
     DefineButtonTag::ButtonRecords& br = ch->buttonRecords();
-    for (DefineButtonTag::ButtonRecords::iterator i = br.begin(),
-            e = br.end(); i != e; ++i)
+    for (ButtonRecord& record : br)
     {
         // This will throw a parser exception if not enough bytes are
         // left.
-        i->readRGBTransform(in);
+        record.readRGBTransform(in);
     }
 }
 
diff --git a/libcore/swf/DefineButtonSoundTag.cpp b/libcore/swf/DefineButtonSoundTag.cpp
index 7fd7a4f..3b061ae 100644
--- a/libcore/swf/DefineButtonSoundTag.cpp
+++ b/libcore/swf/DefineButtonSoundTag.cpp
@@ -75,9 +75,9 @@ DefineButtonSoundTag::loader(SWFStream& in, TagType tag, movie_definition& m,
         return;
     }
 
-    std::auto_ptr<DefineButtonSoundTag> bs(
+    std::unique_ptr<DefineButtonSoundTag> bs(
             new DefineButtonSoundTag(in, m));
-    button->addSoundTag(bs);
+    button->addSoundTag(std::move(bs));
 }
 
 
@@ -85,9 +85,8 @@ void
 DefineButtonSoundTag::read(SWFStream& in, movie_definition& m)
 {
 
-	for (Sounds::iterator i = _sounds.begin(), e = _sounds.end(); i != e; ++i)
+	for (ButtonSound& sound : _sounds)
 	{
-		ButtonSound& sound = *i;
 		in.ensureBytes(2);
 		sound.soundID = in.read_u16();
 		if (sound.soundID)
diff --git a/libcore/swf/DefineButtonSoundTag.h b/libcore/swf/DefineButtonSoundTag.h
index 0359e21..fa412e4 100644
--- a/libcore/swf/DefineButtonSoundTag.h
+++ b/libcore/swf/DefineButtonSoundTag.h
@@ -43,14 +43,14 @@ public:
 
 	struct ButtonSound
 	{
-		boost::uint16_t soundID;
+		std::uint16_t soundID;
 		sound_sample* sample;
 		SoundInfoRecord soundInfo;
 
 		ButtonSound()
 			:
 			soundID(0),
-			sample(0)
+			sample(nullptr)
 		{}
 
 	};
diff --git a/libcore/swf/DefineButtonTag.cpp b/libcore/swf/DefineButtonTag.cpp
index 99e9ce6..ee3eecb 100644
--- a/libcore/swf/DefineButtonTag.cpp
+++ b/libcore/swf/DefineButtonTag.cpp
@@ -48,10 +48,9 @@ namespace {
 }
 
 DefineButtonTag::DefineButtonTag(SWFStream& in, movie_definition& m,
-        TagType tag, boost::uint16_t id)
+        TagType tag, std::uint16_t id)
     :
     DefinitionTag(id),
-    _soundTag(0),
     _trackAsMenu(false),
     _movieDef(m)
 {
@@ -79,13 +78,13 @@ DefineButtonTag::loader(SWFStream& in, TagType tag, movie_definition& m,
 {
     assert(tag == DEFINEBUTTON);
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     IF_VERBOSE_PARSE(
         log_parse(_("  DefineButton loader: character id = %d"), id);
     );
 
-    std::auto_ptr<DefineButtonTag> bt(new DefineButtonTag(in, m, tag, id));
+    std::unique_ptr<DefineButtonTag> bt(new DefineButtonTag(in, m, tag, id));
 
     m.addDisplayObject(id, bt.release());
 }
@@ -96,13 +95,13 @@ DefineButton2Tag::loader(SWFStream& in, TagType tag, movie_definition& m,
 {
     assert(tag == DEFINEBUTTON2);
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     IF_VERBOSE_PARSE(
         log_parse(_("  DefineButton2 loader: chararacter id = %d"), id);
     );
 
-    std::auto_ptr<DefineButtonTag> bt(new DefineButtonTag(in, m, tag, id));
+    std::unique_ptr<DefineButtonTag> bt(new DefineButtonTag(in, m, tag, id));
 
     m.addDisplayObject(id, bt.release());
 }
@@ -126,7 +125,7 @@ DefineButtonTag::readDefineButtonTag(SWFStream& in, movie_definition& m)
 
         // SAFETY CHECK:
         // if the ButtonRecord is corrupted, discard it
-        if (r.valid()) _buttonRecords.push_back(r);
+        if (r.valid()) _buttonRecords.push_back(std::move(r));
     }
 
     if (in.tell() >= endTagPos) {
@@ -152,7 +151,7 @@ DefineButtonTag::readDefineButton2Tag(SWFStream& in, movie_definition& m)
 
     // Read the menu flag
     // (this is a single bit, the first 7 bits are reserved)
-    const boost::uint8_t flags = in.read_u8();
+    const std::uint8_t flags = in.read_u8();
     _trackAsMenu = flags & (1 << 0);
     if (_trackAsMenu) {
         LOG_ONCE(log_unimpl("DefineButton2: trackAsMenu"));
@@ -191,7 +190,7 @@ DefineButtonTag::readDefineButton2Tag(SWFStream& in, movie_definition& m)
         // SAFETY CHECK:
         // if the ButtonRecord is corrupted, discard it
         if (r.valid()) {
-            _buttonRecords.push_back(r);
+            _buttonRecords.push_back(std::move(r));
         }
     }
 
@@ -252,7 +251,7 @@ bool
 DefineButtonTag::hasKeyPressHandler() const
 {
     return std::find_if(_buttonActions.begin(), _buttonActions.end(),
-            boost::mem_fn(&ButtonAction::triggeredByKeyPress)) !=
+            std::mem_fn(&ButtonAction::triggeredByKeyPress)) !=
             _buttonActions.end();
 }
 
@@ -263,14 +262,11 @@ DefineButtonTag::hasKeyPressHandler() const
 ButtonAction::ButtonAction(SWFStream& in, TagType t, unsigned long endPos,
         movie_definition& mdef)
     :
-    _actions(mdef)
+    _actions(mdef),
+    _conditions(OVER_DOWN_TO_OVER_UP)
 {
     // Read condition flags.
-    if (t == SWF::DEFINEBUTTON) {
-        _conditions = OVER_DOWN_TO_OVER_UP;
-    }
-    else {
-        
+    if (t != SWF::DEFINEBUTTON) {
         assert(t == SWF::DEFINEBUTTON2);
 
         if ( in.tell()+2 > endPos ) 
@@ -366,7 +362,7 @@ ButtonRecord::read(SWFStream& in, TagType t,
     }
 
     in.ensureBytes(1);
-    boost::uint8_t flags = in.read_u8();
+    std::uint8_t flags = in.read_u8();
     if (!flags) return false;
 
     // Upper 4 bits are:
@@ -386,7 +382,7 @@ ButtonRecord::read(SWFStream& in, TagType t,
         return false;
     }
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     // Get DisplayObject definition now (safer)
     _definitionTag = m.getDefinitionTag(id);
diff --git a/libcore/swf/DefineButtonTag.h b/libcore/swf/DefineButtonTag.h
index 9910e06..ea7164f 100644
--- a/libcore/swf/DefineButtonTag.h
+++ b/libcore/swf/DefineButtonTag.h
@@ -22,15 +22,16 @@
 
 #include <vector>
 #include <boost/ptr_container/ptr_vector.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/cstdint.hpp> 
+#include <memory>
+#include <cstdint>
 #include <memory>
 
 #include "DefinitionTag.h"
 #include "SWFMatrix.h" 
 #include "SWFCxForm.h" 
 #include "action_buffer.h" 
-#include "filter_factory.h" 
+#include "filter_factory.h"
+#include "Filters.h"
 #include "TypesParser.h"
 #include "DefineButtonSoundTag.h"
 #include "SWF.h"
@@ -56,10 +57,18 @@ public:
 
     ButtonRecord()
         :
-        _definitionTag(0)
+        _blendMode(0),
+        _hitTest(false),
+        _down(false),
+        _over(false),
+        _up(false),
+        _definitionTag(nullptr),
+        _buttonLayer(0)
     {
     }
 
+    ButtonRecord(ButtonRecord&&) = default;
+
     /// Create a DisplayObject from a ButtonRecord.
     //
     /// @param name     Whether the created DisplayObject requires its own
@@ -98,7 +107,7 @@ public:
     /// A ButtonRecord is invalid if it refers to a DisplayObject
     /// which has not been defined.
     bool valid() const {
-        return (_definitionTag);
+        return _definitionTag.get();
     }
 
 private:
@@ -113,7 +122,7 @@ private:
     /// associated with button records.
     //
     /// Currently unused by Gnash.
-    boost::uint8_t _blendMode;
+    std::uint8_t _blendMode;
 
     bool _hitTest;
     bool _down;
@@ -180,7 +189,7 @@ private:
         KEYPRESS = 0xFE00  // highest 7 bits
     };
 
-    boost::uint16_t _conditions;
+    std::uint16_t _conditions;
 
 };
 
@@ -214,7 +223,7 @@ public:
 
     /// Add a DefineButtonSoundTag to the button. This should not be
     /// done twice, so check hasSound() first.
-    void addSoundTag(std::auto_ptr<SWF::DefineButtonSoundTag> soundTag) {
+    void addSoundTag(std::unique_ptr<SWF::DefineButtonSoundTag> soundTag) {
         // Do not replace a sound tag.
         assert(!_soundTag.get());
         _soundTag.reset(soundTag.release());
@@ -258,8 +267,8 @@ public:
     template<class E>
     void visitKeyCodes(E& f) const {
         std::for_each(_buttonActions.begin(), _buttonActions.end(),
-            boost::bind(f, boost::bind(
-                    boost::mem_fn(&ButtonAction::getKeyCode), _1)));
+            std::bind(f, std::bind(
+                    std::mem_fn(&ButtonAction::getKeyCode), std::placeholders::_1)));
     }
     
 private:
@@ -271,7 +280,7 @@ private:
     //
     /// This can only be constructed using a loader() function.
     DefineButtonTag(SWFStream& in, movie_definition& m, TagType tag, 
-            boost::uint16_t id);
+            std::uint16_t id);
 
     /// Read a DEFINEBUTTON tag
     void readDefineButtonTag(SWFStream& in, movie_definition& m);
@@ -279,7 +288,7 @@ private:
     /// Read a DEFINEBUTTON2 tag
     void readDefineButton2Tag(SWFStream& in, movie_definition& m);
 
-    boost::scoped_ptr<SWF::DefineButtonSoundTag> _soundTag;
+    std::unique_ptr<SWF::DefineButtonSoundTag> _soundTag;
 
     ButtonRecords _buttonRecords;
 
diff --git a/libcore/swf/DefineEditTextTag.cpp b/libcore/swf/DefineEditTextTag.cpp
index d6cf67f..18f4258 100644
--- a/libcore/swf/DefineEditTextTag.cpp
+++ b/libcore/swf/DefineEditTextTag.cpp
@@ -37,9 +37,9 @@ DefineEditTextTag::loader(SWFStream& in, TagType tag, movie_definition& m,
 	assert(tag == SWF::DEFINEEDITTEXT); // 37
 
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
-    std::auto_ptr<DefineEditTextTag> editText(new DefineEditTextTag(in, m, id));
+    std::unique_ptr<DefineEditTextTag> editText(new DefineEditTextTag(in, m, id));
 
     m.addDisplayObject(id, editText.release());
 }
@@ -176,7 +176,7 @@ DefineEditTextTag::read(SWFStream& in, movie_definition& m)
 }
 
 DefineEditTextTag::DefineEditTextTag(SWFStream& in, movie_definition& m,
-        boost::uint16_t id)
+        std::uint16_t id)
     :
     DefinitionTag(id),
 	_hasText(true),
diff --git a/libcore/swf/DefineEditTextTag.h b/libcore/swf/DefineEditTextTag.h
index 677c52b..9c92889 100644
--- a/libcore/swf/DefineEditTextTag.h
+++ b/libcore/swf/DefineEditTextTag.h
@@ -27,7 +27,7 @@
 
 #include <boost/intrusive_ptr.hpp>
 #include <string>
-#include <boost/cstdint.hpp> // for boost::uint16_t and friends
+#include <cstdint> // for std::uint16_t and friends
  
 
 // Forward declarations
@@ -93,23 +93,23 @@ public:
 	}
 
 	/// Get right margin in twips
-	boost::uint16_t rightMargin() const {
+	std::uint16_t rightMargin() const {
 		return _rightMargin;
 	}
 
 	/// Get left margin in twips
-	boost::uint16_t leftMargin() const {
+	std::uint16_t leftMargin() const {
 		return _leftMargin;
 	}
 
 	/// Get indentation in  twips
-	boost::uint16_t indent() const {
+	std::uint16_t indent() const {
 		return _indent;
 	}
 
 	/// Get height of font  in twips.
 	// @@ what if has_font is false ??
-	boost::uint16_t textHeight() const {
+	std::uint16_t textHeight() const {
 		return _textHeight;
 	}
 
@@ -122,7 +122,7 @@ public:
 	/// Get extra space between lines (in twips).
 	//
 	/// This is in addition to default font line spacing.
-	boost::uint16_t leading() const {
+	std::uint16_t leading() const {
 		return _leading;
 	}
 
@@ -190,7 +190,7 @@ private:
     /// Construct a DefineEditTextTag.
     //
     /// This should only be used from the loader() function.
-	DefineEditTextTag(SWFStream& in, movie_definition& m, boost::uint16_t id);
+	DefineEditTextTag(SWFStream& in, movie_definition& m, std::uint16_t id);
 
     /// Read a tag from the SWFStream.
     void read(SWFStream& in, movie_definition& m);
@@ -261,7 +261,7 @@ private:
     // TODO: initialize to a meaningful value (see MovieClip::add_textfield)
     //       and make sure get_font_height is not called for rendering purposes
     //       (instead call a method of TextField) (?)
-	boost::uint16_t _textHeight;
+	std::uint16_t _textHeight;
 
 	/// Text color
 	rgba _color;
@@ -275,18 +275,18 @@ private:
     TextField::TextAlignment _alignment;
 	
 	/// extra space between box's left border and text (in twips)
-	boost::uint16_t _leftMargin;
+	std::uint16_t _leftMargin;
 
 	/// extra space between box's right border and text (in twips)
-	boost::uint16_t _rightMargin;
+	std::uint16_t _rightMargin;
 
 	/// how much to indent the first line of multiline text (in twips)
-	boost::uint16_t	_indent;
+	std::uint16_t	_indent;
 
 	/// \brief
 	/// Extra space between lines
 	/// (in addition to default font line spacing)
-	boost::uint16_t	_leading;
+	std::uint16_t	_leading;
 
 	/// The default text to be displayed
 	std::string	_defaultText;
diff --git a/libcore/swf/DefineFontAlignZonesTag.cpp b/libcore/swf/DefineFontAlignZonesTag.cpp
index 5c27fbd..620828e 100644
--- a/libcore/swf/DefineFontAlignZonesTag.cpp
+++ b/libcore/swf/DefineFontAlignZonesTag.cpp
@@ -20,7 +20,7 @@
 
 #include "DefineFontAlignZonesTag.h"
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "RunResources.h"
 #include "Font.h"
@@ -45,7 +45,7 @@ DefineFontAlignZonesTag::loader(SWFStream& in, TagType tag,
 	in.ensureBytes(2);
 
     // must reference a valid DEFINEFONT3 tag
-    const boost::uint16_t ref = in.read_u16(); 
+    const std::uint16_t ref = in.read_u16();
 	Font* referencedFont = m.get_font(ref);
 	if (!referencedFont) {
 		IF_VERBOSE_MALFORMED_SWF(
@@ -58,10 +58,10 @@ DefineFontAlignZonesTag::loader(SWFStream& in, TagType tag,
 
 	in.ensureBytes(1);
     // 2bits are cms table, 6bits are reserved
-	const boost::uint8_t flags = in.read_u8();
+	const std::uint8_t flags = in.read_u8();
 
     // What is this?
-	const boost::uint16_t csm_table_int = flags >> 6;
+	const std::uint16_t csm_table_int = flags >> 6;
 
 	// TODO:
     // The first thing to to is test what this does. According to some
@@ -84,8 +84,8 @@ DefineFontAlignZonesTag::loader(SWFStream& in, TagType tag,
         
         for (size_t j = 0; j != 2; ++j) {
             in.ensureBytes(4);
-            const boost::uint16_t zone_position = in.read_u16();
-            const boost::uint16_t zone_size = in.read_u16();
+            const std::uint16_t zone_position = in.read_u16();
+            const std::uint16_t zone_size = in.read_u16();
 
             IF_VERBOSE_PARSE(
                 log_parse("Zone position: %s, size: %s", zone_position,
@@ -95,7 +95,7 @@ DefineFontAlignZonesTag::loader(SWFStream& in, TagType tag,
         
         in.ensureBytes(1);
         // What is this?
-        const boost::uint8_t u = in.read_u8();
+        const std::uint8_t u = in.read_u8();
         const bool zone_x = u & 0x01;
         const bool zone_y = (u >> 1) & 0x01;
 
diff --git a/libcore/swf/DefineFontNameTag.h b/libcore/swf/DefineFontNameTag.h
index ea52720..849240b 100644
--- a/libcore/swf/DefineFontNameTag.h
+++ b/libcore/swf/DefineFontNameTag.h
@@ -45,7 +45,7 @@ public:
         assert(tag == SWF::DEFINEFONTNAME);
 
         in.ensureBytes(2);
-        boost::uint16_t fontID = in.read_u16();
+        std::uint16_t fontID = in.read_u16();
 
         Font* f = m.get_font(fontID);
         if (!f)
diff --git a/libcore/swf/DefineFontTag.cpp b/libcore/swf/DefineFontTag.cpp
index 4ad7954..94988e5 100644
--- a/libcore/swf/DefineFontTag.cpp
+++ b/libcore/swf/DefineFontTag.cpp
@@ -44,10 +44,10 @@ DefineFontTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     assert(tag == DEFINEFONT || tag == DEFINEFONT2 || tag == DEFINEFONT3);
 
     in.ensureBytes(2);
-    const boost::uint16_t fontID = in.read_u16();
+    const std::uint16_t fontID = in.read_u16();
 
-    std::auto_ptr<DefineFontTag> ft(new DefineFontTag(in, m, tag, r));
-    boost::intrusive_ptr<Font> f(new Font(ft));
+    std::unique_ptr<DefineFontTag> ft(new DefineFontTag(in, m, tag, r));
+    boost::intrusive_ptr<Font> f(new Font(std::move(ft)));
 
     m.add_font(fontID, f);
 }
@@ -66,9 +66,9 @@ DefineFontTag::readCodeTable(SWFStream& in, Font::CodeTable& table,
 
     if (wideCodes) {
         in.ensureBytes(2 * glyphCount);
-        // Code table is made of boost::uint16_t's.
+        // Code table is made of std::uint16_t's.
         for (size_t i=0; i < glyphCount; ++i) {
-            const boost::uint16_t code = in.read_u16();
+            const std::uint16_t code = in.read_u16();
             table.insert(std::make_pair(code, i));
         }
     }
@@ -76,7 +76,7 @@ DefineFontTag::readCodeTable(SWFStream& in, Font::CodeTable& table,
         // Code table is made of bytes.
         in.ensureBytes(1 * glyphCount);
         for (size_t i = 0; i < glyphCount; ++i) {
-            const boost::uint8_t code = in.read_u8();
+            const std::uint8_t code = in.read_u8();
             table.insert(std::make_pair(code, i));
         }
     }
@@ -92,7 +92,6 @@ DefineFontTag::DefineFontTag(SWFStream& in, movie_definition& m, TagType tag,
     _ansiChars(true),
     _italic(false),
     _bold(false),
-    _wideCodes(false),
     _ascent(0),
     _descent(0),
     _leading(0)
@@ -193,7 +192,7 @@ DefineFontTag::readDefineFont2Or3(SWFStream& in, movie_definition& m,
     in.read_string_with_length(_name);
 
     in.ensureBytes(2); 
-    const boost::uint16_t glyph_count = in.read_u16();
+    const std::uint16_t glyph_count = in.read_u16();
 
     IF_VERBOSE_PARSE (
         log_parse(" has_layout = %d", has_layout);
@@ -213,14 +212,14 @@ DefineFontTag::readDefineFont2Or3(SWFStream& in, movie_definition& m,
     // Read the glyph offsets.  Offsets
     // are measured from the start of the
     // offset table. Make sure wide offsets fit into elements
-    std::vector<boost::uint32_t> offsets;
+    std::vector<std::uint32_t> offsets;
     int	font_code_offset;
 
     if (wide_offsets) {
         // 32-bit offsets.
         in.ensureBytes(4*glyph_count + 4); 
         for (size_t i = 0; i < glyph_count; ++i) {
-            const boost::uint32_t off = in.read_u32();	
+            const std::uint32_t off = in.read_u32();
             IF_VERBOSE_PARSE (
                 log_parse(_("Glyph %d at offset %u"), i, off);
             );
@@ -232,7 +231,7 @@ DefineFontTag::readDefineFont2Or3(SWFStream& in, movie_definition& m,
         // 16-bit offsets.
         in.ensureBytes(2*glyph_count + 2); 
         for (size_t i = 0; i < glyph_count; ++i) {
-            const boost::uint16_t off = in.read_u16();	
+            const std::uint16_t off = in.read_u16();
             IF_VERBOSE_PARSE(
                 log_parse(_("Glyph %d at offset %u"), i, off);
             );
@@ -268,7 +267,7 @@ DefineFontTag::readDefineFont2Or3(SWFStream& in, movie_definition& m,
         return;
     }
 
-    std::auto_ptr<Font::CodeTable> table(new Font::CodeTable);
+    std::unique_ptr<Font::CodeTable> table(new Font::CodeTable);
 
     readCodeTable(in, *table, wideCodes, _glyphTable.size());
     _codeTable.reset(table.release());
@@ -298,12 +297,12 @@ DefineFontTag::readDefineFont2Or3(SWFStream& in, movie_definition& m,
 
         // Kerning pairs.
         in.ensureBytes(2);
-        const boost::uint16_t kerning_count = in.read_u16();
+        const std::uint16_t kerning_count = in.read_u16();
 
         in.ensureBytes(kerning_count * (wideCodes ? 6 : 4));
 
         for (int i = 0; i < kerning_count; ++i) {
-            boost::uint16_t	char0, char1;
+            std::uint16_t	char0, char1;
             if (wideCodes) {
                 char0 = in.read_u16();
                 char1 = in.read_u16();
@@ -312,7 +311,7 @@ DefineFontTag::readDefineFont2Or3(SWFStream& in, movie_definition& m,
                 char0 = in.read_u8();
                 char1 = in.read_u8();
             }
-            const boost::int16_t adjustment = in.read_s16();
+            const std::int16_t adjustment = in.read_s16();
 
             kerning_pair k;
             k.m_char0 = char0;
@@ -336,7 +335,7 @@ DefineFontInfoTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     assert(tag == DEFINEFONTINFO || tag == DEFINEFONTINFO2); 
 
     in.ensureBytes(2);
-    const boost::uint16_t fontID = in.read_u16();
+    const std::uint16_t fontID = in.read_u16();
 
     Font* f = m.get_font(fontID);
     if (!f) {
@@ -356,17 +355,17 @@ DefineFontInfoTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     in.read_string_with_length(name);
 
     in.ensureBytes(1);
-    const boost::uint8_t flags = in.read_u8();
+    const std::uint8_t flags = in.read_u8();
 
     const bool wideCodes = flags & (1 << 0);
 
-    std::auto_ptr<Font::CodeTable> table(new Font::CodeTable);
+    std::unique_ptr<Font::CodeTable> table(new Font::CodeTable);
 
     DefineFontTag::readCodeTable(in, *table, wideCodes, f->glyphCount());
 
     f->setName(name);
     f->setFlags(flags);
-    f->setCodeTable(table);
+    f->setCodeTable(std::move(table));
 }
 
 
diff --git a/libcore/swf/DefineFontTag.h b/libcore/swf/DefineFontTag.h
index 660834f..e009be3 100644
--- a/libcore/swf/DefineFontTag.h
+++ b/libcore/swf/DefineFontTag.h
@@ -34,7 +34,7 @@
 #include "Font.h"
 #include <map>
 #include <string>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 // Forward declarations
 namespace gnash {
@@ -79,7 +79,7 @@ public:
     /// @return     shared ownership of the tag's Font::CodeTable. This
     ///             may be NULL, which can be checked first with
     ///             hasCodeTable().
-    boost::shared_ptr<const Font::CodeTable> getCodeTable() const {
+    std::shared_ptr<const Font::CodeTable> getCodeTable() const {
         return _codeTable;
     }
 
@@ -93,21 +93,21 @@ public:
     /// The font leading value
     //
     /// This is documented to be int16_t, but may be uint16_t like advance.
-    boost::int16_t leading() const {
+    std::int16_t leading() const {
         return _leading;
     }
 
     /// The font ascent value
     //
     /// This is documented to be int16_t, but may be uint16_t like advance.
-    boost::int16_t ascent() const {
+    std::int16_t ascent() const {
         return _ascent;
     }
 
     /// The font descent value
     //
     /// This is documented to be int16_t, but may be uint16_t like advance.
-    boost::int16_t descent() const {
+    std::int16_t descent() const {
         return _descent;
     }
 
@@ -135,22 +135,20 @@ private:
 
     std::string _name;
     bool _subpixelFont;
-	bool _hasLayout;
 	bool _unicodeChars;
 	bool _shiftJISChars;
 	bool _ansiChars;
 	bool _italic;
 	bool _bold;
-	bool _wideCodes;
 
-    boost::int16_t _ascent;
-    boost::int16_t _descent;
-    boost::int16_t _leading;
+    std::int16_t _ascent;
+    std::int16_t _descent;
+    std::int16_t _leading;
 
-	typedef std::map<kerning_pair, boost::int16_t> KerningTable;
+	typedef std::map<kerning_pair, std::int16_t> KerningTable;
 	KerningTable _kerningPairs;
 
-    boost::shared_ptr<const Font::CodeTable> _codeTable;
+    std::shared_ptr<const Font::CodeTable> _codeTable;
 };
 
 
diff --git a/libcore/swf/DefineMorphShapeTag.cpp b/libcore/swf/DefineMorphShapeTag.cpp
index 13927f8..50382ac 100644
--- a/libcore/swf/DefineMorphShapeTag.cpp
+++ b/libcore/swf/DefineMorphShapeTag.cpp
@@ -25,7 +25,7 @@
 
 #include "DefineMorphShapeTag.h"
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "TypesParser.h"
 #include "MorphShape.h"
@@ -47,7 +47,7 @@ DefineMorphShapeTag::loader(SWFStream& in, TagType tag, movie_definition& md,
         const RunResources& r)
 {
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     IF_VERBOSE_PARSE(
             log_parse("DefineMorphShapeTag: id = %d", id);
@@ -58,7 +58,7 @@ DefineMorphShapeTag::loader(SWFStream& in, TagType tag, movie_definition& md,
 }
 
 DefineMorphShapeTag::DefineMorphShapeTag(SWFStream& in, TagType tag,
-        movie_definition& md, const RunResources& r, boost::uint16_t id)
+        movie_definition& md, const RunResources& r, std::uint16_t id)
     :
     DefinitionTag(id)
 {
@@ -69,7 +69,7 @@ DisplayObject*
 DefineMorphShapeTag::createDisplayObject(Global_as& gl,
         DisplayObject* parent) const
 {
-    return new MorphShape(getRoot(gl), 0, this, parent);
+    return new MorphShape(getRoot(gl), nullptr, this, parent);
 }
 
 void
@@ -110,7 +110,7 @@ DefineMorphShapeTag::read(SWFStream& in, TagType tag, movie_definition& md,
     static_cast<void>(in.read_u32());
 
     // Next line will throw ParserException on malformed SWF
-    const boost::uint16_t fillCount = in.read_variable_count();
+    const std::uint16_t fillCount = in.read_variable_count();
     
     SWF::Subshape subshape1;
     SWF::Subshape subshape2;
@@ -121,7 +121,7 @@ DefineMorphShapeTag::read(SWFStream& in, TagType tag, movie_definition& md,
         subshape2.addFillStyle(*fp.second);
     }
 
-    const boost::uint16_t lineCount = in.read_variable_count();
+    const std::uint16_t lineCount = in.read_variable_count();
     LineStyle ls1, ls2;
     for (size_t i = 0; i < lineCount; ++i) {
         ls1.read_morph(in, tag, md, r, &ls2);
diff --git a/libcore/swf/DefineMorphShapeTag.h b/libcore/swf/DefineMorphShapeTag.h
index 54add1b..e2c5810 100644
--- a/libcore/swf/DefineMorphShapeTag.h
+++ b/libcore/swf/DefineMorphShapeTag.h
@@ -68,7 +68,7 @@ public:
 private:
 
     DefineMorphShapeTag(SWFStream& in, SWF::TagType tag, movie_definition& md,
-            const RunResources& r, boost::uint16_t id);
+            const RunResources& r, std::uint16_t id);
     
     /// Read a DefineMorphShape tag from stream
     //
diff --git a/libcore/swf/DefineScalingGridTag.cpp b/libcore/swf/DefineScalingGridTag.cpp
index 892b919..4954409 100644
--- a/libcore/swf/DefineScalingGridTag.cpp
+++ b/libcore/swf/DefineScalingGridTag.cpp
@@ -36,7 +36,7 @@ DefineScalingGridTag::loader(SWFStream& in, TagType /*tag*/,
         movie_definition& /*md*/, const RunResources& /*r*/)
 {
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     IF_VERBOSE_PARSE(
         log_parse("DefineScalingGridTag: id = %d", id);
diff --git a/libcore/swf/DefineSceneAndFrameLabelDataTag.h b/libcore/swf/DefineSceneAndFrameLabelDataTag.h
index 5f29288..456d5d6 100644
--- a/libcore/swf/DefineSceneAndFrameLabelDataTag.h
+++ b/libcore/swf/DefineSceneAndFrameLabelDataTag.h
@@ -77,22 +77,22 @@ private:
 
     void read(SWFStream& in) {
         
-        boost::uint32_t scenes = in.read_V32();
+        std::uint32_t scenes = in.read_V32();
 
         IF_VERBOSE_PARSE(log_parse("Scene count: %d", scenes));
 
         for (size_t i = 0; i < scenes; ++i) {
-            boost::uint32_t offset = in.read_V32();
+            std::uint32_t offset = in.read_V32();
             std::string name;
             in.read_string(name);
             IF_VERBOSE_PARSE(log_parse("Offset %d name: %s", offset, name));
             _scenes[offset] = name;
         }
 
-        boost::uint32_t labels = in.read_V32();
+        std::uint32_t labels = in.read_V32();
 
         for (size_t i = 0; i < labels; ++i) {
-            boost::uint32_t num = in.read_V32();
+            std::uint32_t num = in.read_V32();
             std::string label;
             in.read_string(label);
             IF_VERBOSE_PARSE(log_parse("Frame %d label: %s", num, label));
@@ -101,8 +101,8 @@ private:
 
     }
 
-    std::map<boost::uint32_t, std::string> _scenes;
-    std::map<boost::uint32_t, std::string> _frames;
+    std::map<std::uint32_t, std::string> _scenes;
+    std::map<std::uint32_t, std::string> _frames;
 
 };
 
diff --git a/libcore/swf/DefineShapeTag.cpp b/libcore/swf/DefineShapeTag.cpp
index faa279a..b51e2a6 100644
--- a/libcore/swf/DefineShapeTag.cpp
+++ b/libcore/swf/DefineShapeTag.cpp
@@ -52,7 +52,7 @@ DefineShapeTag::loader(SWFStream& in, TagType tag, movie_definition& m,
            tag == DEFINESHAPE4_);
 
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     IF_VERBOSE_PARSE(
         log_parse(_("DefineShapeTag(%s): id = %d"), tag, id);
@@ -66,11 +66,11 @@ DefineShapeTag::loader(SWFStream& in, TagType tag, movie_definition& m,
 DisplayObject*
 DefineShapeTag::createDisplayObject(Global_as& gl, DisplayObject* parent) const
 {
-	return new Shape(getRoot(gl), 0, this, parent);
+	return new Shape(getRoot(gl), nullptr, this, parent);
 }
     
 bool
-DefineShapeTag::pointTestLocal(boost::int32_t x, boost::int32_t y, 
+DefineShapeTag::pointTestLocal(std::int32_t x, std::int32_t y,
      const SWFMatrix& wm) const
 {
     return _shape.pointTest(x, y, wm);
@@ -78,7 +78,7 @@ DefineShapeTag::pointTestLocal(boost::int32_t x, boost::int32_t y,
 
 
 DefineShapeTag::DefineShapeTag(SWFStream& in, TagType tag,
-        movie_definition& m, const RunResources& r, boost::uint16_t id)
+        movie_definition& m, const RunResources& r, std::uint16_t id)
     :
     DefinitionTag(id),
     _shape(in, tag, m, r)
diff --git a/libcore/swf/DefineShapeTag.h b/libcore/swf/DefineShapeTag.h
index 2291606..093783c 100644
--- a/libcore/swf/DefineShapeTag.h
+++ b/libcore/swf/DefineShapeTag.h
@@ -53,13 +53,13 @@ public:
     /// a matrix is given to allow computing proper line
     /// thickness based on display scale.
     ///
-    bool pointTestLocal(boost::int32_t x, boost::int32_t y, 
+    bool pointTestLocal(std::int32_t x, std::int32_t y,
             const SWFMatrix& wm) const;
 
 private:
 
     DefineShapeTag(SWFStream& in, TagType tag, movie_definition& m,
-            const RunResources& r, boost::uint16_t id);
+            const RunResources& r, std::uint16_t id);
 
     /// The actual shape data is stored in this record.
     const ShapeRecord _shape;
diff --git a/libcore/swf/DefineTextTag.cpp b/libcore/swf/DefineTextTag.cpp
index 5ed0b51..2f38af2 100644
--- a/libcore/swf/DefineTextTag.cpp
+++ b/libcore/swf/DefineTextTag.cpp
@@ -45,9 +45,9 @@ DefineTextTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     assert(tag == DEFINETEXT);
 
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
-    std::auto_ptr<DefineTextTag> t(new DefineTextTag(in, m, tag, id));
+    std::unique_ptr<DefineTextTag> t(new DefineTextTag(in, m, tag, id));
     IF_VERBOSE_PARSE(
         log_parse(_("DefineTextTag, id = %d"), id);
     );
@@ -59,7 +59,7 @@ DisplayObject*
 DefineTextTag::createDisplayObject(Global_as& gl, DisplayObject* parent)
     const
 {
-    return new StaticText(getRoot(gl), 0, this, parent);
+    return new StaticText(getRoot(gl), nullptr, this, parent);
 }
 
 bool
@@ -86,9 +86,9 @@ DefineText2Tag::loader(SWFStream& in, TagType tag, movie_definition& m,
     assert(tag == DEFINETEXT2);
 
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
-    std::auto_ptr<DefineTextTag> t(new DefineTextTag(in, m, tag, id));
+    std::unique_ptr<DefineTextTag> t(new DefineTextTag(in, m, tag, id));
     IF_VERBOSE_PARSE(
         log_parse(_("Text DisplayObject, id = %d"), id);
     );
diff --git a/libcore/swf/DefineTextTag.h b/libcore/swf/DefineTextTag.h
index afcd437..7dcf068 100644
--- a/libcore/swf/DefineTextTag.h
+++ b/libcore/swf/DefineTextTag.h
@@ -76,7 +76,7 @@ private:
     //
     /// This should only be constructed using the loader() functions.
 	DefineTextTag(SWFStream& in, movie_definition& m, TagType tag,
-            boost::uint16_t id)
+            std::uint16_t id)
         :
         DefinitionTag(id)
     {
diff --git a/libcore/swf/DefineVideoStreamTag.cpp b/libcore/swf/DefineVideoStreamTag.cpp
index e337777..37e4484 100644
--- a/libcore/swf/DefineVideoStreamTag.cpp
+++ b/libcore/swf/DefineVideoStreamTag.cpp
@@ -18,8 +18,7 @@
 
 #include "DefineVideoStreamTag.h"
 
-#include <boost/shared_array.hpp>
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 #include <boost/ptr_container/ptr_vector.hpp>
 #include <memory> 
 #include <vector> 
@@ -37,7 +36,7 @@
 namespace gnash {
 namespace SWF {
 
-DefineVideoStreamTag::DefineVideoStreamTag(SWFStream& in, boost::uint16_t id)
+DefineVideoStreamTag::DefineVideoStreamTag(SWFStream& in, std::uint16_t id)
 	:
     DefinitionTag(id),
 	_width(0),
@@ -58,9 +57,9 @@ DefineVideoStreamTag::loader(SWFStream& in, SWF::TagType tag,
     assert(tag == SWF::DEFINEVIDEOSTREAM); // 60
     
     in.ensureBytes(2);
-    boost::uint16_t id = in.read_u16();
+    std::uint16_t id = in.read_u16();
 
-    std::auto_ptr<DefineVideoStreamTag> vs(new DefineVideoStreamTag(in, id));
+    std::unique_ptr<DefineVideoStreamTag> vs(new DefineVideoStreamTag(in, id));
 
     m.addDisplayObject(id, vs.release());
 
@@ -106,10 +105,10 @@ DefineVideoStreamTag::read(SWFStream& in)
 
 void
 DefineVideoStreamTag::addVideoFrameTag(
-        std::auto_ptr<media::EncodedVideoFrame> frame)
+        std::unique_ptr<media::EncodedVideoFrame> frame)
 {
-	boost::mutex::scoped_lock lock(_video_mutex);
-    _video_frames.push_back(frame);
+	std::lock_guard<std::mutex> lock(_video_mutex);
+    _video_frames.push_back(frame.release());
 }
 
 DisplayObject*
diff --git a/libcore/swf/DefineVideoStreamTag.h b/libcore/swf/DefineVideoStreamTag.h
index fe1e406..2185dd5 100644
--- a/libcore/swf/DefineVideoStreamTag.h
+++ b/libcore/swf/DefineVideoStreamTag.h
@@ -19,8 +19,7 @@
 #ifndef GNASH_SWF_DEFINEVIDEOSTREAMTAG_H
 #define GNASH_SWF_DEFINEVIDEOSTREAMTAG_H
 
-#include <boost/shared_array.hpp>
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 #include <boost/ptr_container/ptr_vector.hpp>
 #include <memory> 
 #include <vector> 
@@ -39,29 +38,6 @@ namespace gnash {
 
 namespace gnash {
 
-/// Class used to store data for the undecoded embedded video frames.
-/// Contains the data, the data size and the type of the frame
-class VideoData
-{
-public:
-	VideoData(boost::shared_array<boost::uint8_t> data, boost::uint32_t size,
-            media::videoFrameType ft)
-		:
-		videoData(data),
-		dataSize(size),
-		frameType(ft)
-	{
-	}
-
-	~VideoData()
-	{
-	}
-
-	boost::shared_array<boost::uint8_t> videoData;
-	boost::uint32_t dataSize;
-	media::videoFrameType frameType;
-};
-
 namespace SWF {
 
 class DefineVideoStreamTag : public DefinitionTag
@@ -138,9 +114,9 @@ public:
     /// @tparam t       A visitor that should accept a const
     ///                 media::EncodedVideoFrame.
     template<typename T>
-    size_t visitSlice(const T& t, boost::uint32_t from, boost::uint32_t to) const {
+    size_t visitSlice(const T& t, std::uint32_t from, std::uint32_t to) const {
 
-        boost::mutex::scoped_lock lock(_video_mutex);
+        std::lock_guard<std::mutex> lock(_video_mutex);
 
         // It's assumed that frame numbers are in order.
         EmbeddedFrames::const_iterator lower = std::lower_bound(
@@ -153,7 +129,7 @@ public:
         return (upper - lower);
     }
     
-    void addVideoFrameTag(std::auto_ptr<media::EncodedVideoFrame> frame);
+    void addVideoFrameTag(std::unique_ptr<media::EncodedVideoFrame> frame);
 
 private:
 
@@ -164,26 +140,26 @@ private:
     ///       constructor, as that's the one which will eventually get passed
     ///       the id.
     /// NOTE: What dynamically created definitions?
-	DefineVideoStreamTag(SWFStream& in, boost::uint16_t id);
+	DefineVideoStreamTag(SWFStream& in, std::uint16_t id);
 
 	void read(SWFStream& in);
 
 	/// Reserved flags read from DEFINEVIDEOSTREAM tag
-	boost::uint8_t m_reserved_flags;
+	std::uint8_t m_reserved_flags;
 
 	/// Flags read from DEFINEVIDEOSTREAM tag
-	boost::uint8_t m_deblocking_flags;
+	std::uint8_t m_deblocking_flags;
 
 	/// Smoothing flag, as read from DEFINEVIDEOSTREAM tag
 	bool m_smoothing_flags;
 
 	/// Frame in which the DEFINEVIDEOSTREAM was found
-	//boost::uint16_t m_start_frame;
+	//std::uint16_t m_start_frame;
 
 	/// Number of frames in the embedded video, as reported
 	/// by the DEFINEVIDEOSTREAM tag
 	///
-	boost::uint16_t m_num_frames;
+	std::uint16_t m_num_frames;
 
 	/// Codec ID as read from DEFINEVIDEOSTREAM tag
 	//
@@ -199,21 +175,21 @@ private:
 	SWFRect m_bound;
 
     // Mutable for locking in const member functions.
-	mutable boost::mutex _video_mutex;
+	mutable std::mutex _video_mutex;
 	
 	EmbeddedFrames _video_frames;
 
 	/// Width of the video
-	boost::uint32_t _width;
+	std::uint32_t _width;
 
 	/// Height of the video
-	boost::uint32_t _height;
+	std::uint32_t _height;
 
 	/// Info about embedded video
 	//
 	/// TODO: drop _width/_height/m_codec_id leaving all in this member
     /// instead ?
-	std::auto_ptr<media::VideoInfo> _videoInfo;
+	std::unique_ptr<media::VideoInfo> _videoInfo;
 
 };
 
diff --git a/libcore/swf/DefinitionTag.h b/libcore/swf/DefinitionTag.h
index 7d3db70..77556e2 100644
--- a/libcore/swf/DefinitionTag.h
+++ b/libcore/swf/DefinitionTag.h
@@ -20,8 +20,7 @@
 #define GNASH_DEFINITION_TAG_H
 
 
-#include <boost/noncopyable.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "ControlTag.h"
 #include "dsodefs.h" // for DSOTEXPORT
@@ -74,17 +73,17 @@ public:
     /// The immutable id of the DefinitionTag.
     //
     /// @return     the id of the DefinitionTag as parsed from a SWF.
-    boost::uint16_t id() const {
+    std::uint16_t id() const {
         return _id;
     }
 
 protected:
 
-    DefinitionTag(boost::uint16_t id) : _id(id) {}
+    DefinitionTag(std::uint16_t id) : _id(id) {}
 
 private:
 
-    const boost::uint16_t _id;
+    const std::uint16_t _id;
 	
 };
 
diff --git a/libcore/swf/DoABCTag.h b/libcore/swf/DoABCTag.h
index a71d3a5..a804f55 100644
--- a/libcore/swf/DoABCTag.h
+++ b/libcore/swf/DoABCTag.h
@@ -87,7 +87,7 @@ public:
 			in.read_string(name);
 		}
 
-        std::auto_ptr<abc::AbcBlock> block(new abc::AbcBlock());
+        std::unique_ptr<abc::AbcBlock> block(new abc::AbcBlock());
 		if (!block->read(in)) {
             log_error("ABC parsing error while processing DoABCTag. This "
                     "tag will never be executed");
diff --git a/libcore/swf/DoInitActionTag.h b/libcore/swf/DoInitActionTag.h
index d4fe198..ca90153 100644
--- a/libcore/swf/DoInitActionTag.h
+++ b/libcore/swf/DoInitActionTag.h
@@ -72,7 +72,7 @@ public:
         }
         
         in.ensureBytes(2);
-        const boost::uint16_t cid = in.read_u16();
+        const std::uint16_t cid = in.read_u16();
 
         IF_VERBOSE_PARSE(
             log_parse(_("  tag %d: do_init_action_loader"), tag);
diff --git a/libcore/swf/ExportAssetsTag.h b/libcore/swf/ExportAssetsTag.h
index 5e0a92f..3ce8c54 100644
--- a/libcore/swf/ExportAssetsTag.h
+++ b/libcore/swf/ExportAssetsTag.h
@@ -53,9 +53,8 @@ public:
     // TODO: use Movie to store the actual exports.
     virtual void executeState(MovieClip* m, DisplayList& /*l*/) const {
         Movie* mov = m->get_root();
-        for (Exports::const_iterator it = _exports.begin(), e = _exports.end();
-                it != e; ++it) {
-            const boost::uint16_t id = mov->definition()->exportID(*it);
+        for (const std::string& the_export : _exports) {
+            const std::uint16_t id = mov->definition()->exportID(the_export);
 
             // We exported it, so we assume it is known.
             assert(id);
@@ -73,7 +72,7 @@ private:
     void read(SWFStream& in, movie_definition& m) {
         
         in.ensureBytes(2);
-        const boost::uint16_t count = in.read_u16();
+        const std::uint16_t count = in.read_u16();
 
         IF_VERBOSE_PARSE(
             log_parse(_("  export: count = %d"), count);
@@ -82,7 +81,7 @@ private:
         // Read the exports.
         for (size_t i = 0; i < count; ++i) {
             in.ensureBytes(2);
-            const boost::uint16_t id = in.read_u16();
+            const std::uint16_t id = in.read_u16();
 
             if (!id) continue;
 
diff --git a/libcore/swf/ImportAssetsTag.h b/libcore/swf/ImportAssetsTag.h
index ca2ff0f..0508e40 100644
--- a/libcore/swf/ImportAssetsTag.h
+++ b/libcore/swf/ImportAssetsTag.h
@@ -59,9 +59,8 @@ public:
     /// genuine id of the DefinitionTag.
     virtual void executeState(MovieClip* m, DisplayList& /*l*/) const {
         Movie* mov = m->get_root();
-        for (Imports::const_iterator it = _imports.begin(), e = _imports.end();
-                it != e; ++it) {
-            mov->addCharacter(it->first);
+        for (const Import& import : _imports) {
+            mov->addCharacter(import.first);
         }
     }
 
@@ -87,12 +86,12 @@ private:
         if (t == SWF::IMPORTASSETS2) {
             in.ensureBytes(2);
             import_version = in.read_uint(8);
-            boost::uint8_t reserved = in.read_uint(8);
+            std::uint8_t reserved = in.read_uint(8);
             UNUSED(reserved);
         }
 
         in.ensureBytes(2);
-        const boost::uint16_t count = in.read_u16();
+        const std::uint16_t count = in.read_u16();
 
         IF_VERBOSE_PARSE(
             log_parse(_("  import: version = %u, source_url = %s (%s), "
@@ -130,7 +129,7 @@ private:
         for (size_t i = 0; i < count; ++i)
         {
             in.ensureBytes(2);
-            const boost::uint16_t id = in.read_u16();
+            const std::uint16_t id = in.read_u16();
 
             // We don't consider 0 valid.
             if (!id) continue;
diff --git a/libcore/swf/PlaceObject2Tag.cpp b/libcore/swf/PlaceObject2Tag.cpp
index cb63557..bc6e0fb 100644
--- a/libcore/swf/PlaceObject2Tag.cpp
+++ b/libcore/swf/PlaceObject2Tag.cpp
@@ -33,6 +33,7 @@
 #include "swf_event.h"
 #include "log.h"
 #include "SWFStream.h"
+#include "Filters.h"
 #include "filter_factory.h"
 #include "GnashAlgorithm.h"
 #include "action_buffer.h"
@@ -99,7 +100,7 @@ PlaceObject2Tag::readPlaceActions(SWFStream& in)
     const int movie_version = _movie_def.get_version();
 
     in.ensureBytes(2);
-    boost::uint16_t reserved = in.read_u16();
+    std::uint16_t reserved = in.read_u16();
     IF_VERBOSE_MALFORMED_SWF(
         if (reserved != 0) {
             log_swferror(_("Reserved field in PlaceObject actions == "
@@ -107,7 +108,7 @@ PlaceObject2Tag::readPlaceActions(SWFStream& in)
         }
     );
     
-    boost::uint32_t all_event_flags;
+    std::uint32_t all_event_flags;
 
     // The logical 'or' of all the following handlers.
     if (movie_version >= 6) {
@@ -136,7 +137,7 @@ PlaceObject2Tag::readPlaceActions(SWFStream& in)
             // Read event.
             in.align();
     
-            boost::uint32_t flags;
+            std::uint32_t flags;
             if (movie_version >= 6) {
                 in.ensureBytes(4);
                 flags = in.read_u32();
@@ -152,7 +153,7 @@ PlaceObject2Tag::readPlaceActions(SWFStream& in)
             }
     
             in.ensureBytes(4);
-            boost::uint32_t event_length = in.read_u32();
+            std::uint32_t event_length = in.read_u32();
             if (in.get_tag_end_position() - in.tell() <  event_length) {
                 IF_VERBOSE_MALFORMED_SWF(
                 log_swferror(_("swf_event::read(), "
@@ -182,10 +183,10 @@ PlaceObject2Tag::readPlaceActions(SWFStream& in)
             }
     
             // Read the actions for event(s)
-            // auto_ptr here prevents leaks on malformed swf
-            std::auto_ptr<action_buffer> action(new action_buffer(_movie_def));
+            // unique_ptr here prevents leaks on malformed swf
+            std::unique_ptr<action_buffer> action(new action_buffer(_movie_def));
             action->read(in, in.tell() + event_length);
-            _actionBuffers.push_back(action); 
+            _actionBuffers.push_back(action.release()); 
     
             // If there is no end tag, action_buffer appends a null-terminator,
             // and fails this check. As action_buffer should check bounds, we
@@ -241,13 +242,13 @@ PlaceObject2Tag::readPlaceActions(SWFStream& in)
 
                     const event_id id(s_code_bits[i], (i == 17 ? ch : key::INVALID));
 
-                    std::auto_ptr<swf_event> ev(new swf_event(id, thisAction));
+                    std::unique_ptr<swf_event> ev(new swf_event(id, thisAction));
 
                     IF_VERBOSE_PARSE(
                         log_parse("---- actions for event %s", ev->event());
                     );
     
-                    _eventHandlers.push_back(ev);
+                    _eventHandlers.push_back(ev.release());
                 }
             }
         }
@@ -398,7 +399,7 @@ PlaceObject2Tag::readPlaceObject3(SWFStream& in)
         LOG_ONCE(log_unimpl("Blend mode in PlaceObject tag"));
     }
 
-    boost::uint8_t bitmask = 0;
+    std::uint8_t bitmask = 0;
     if (hasBitmapCaching()) {
         // cacheAsBitmap is a boolean value, so the flag itself ought to be
         // enough. Alexis' SWF reference is unsure about this, but suggests
diff --git a/libcore/swf/PlaceObject2Tag.h b/libcore/swf/PlaceObject2Tag.h
index cf43f68..d41dc34 100644
--- a/libcore/swf/PlaceObject2Tag.h
+++ b/libcore/swf/PlaceObject2Tag.h
@@ -106,9 +106,9 @@ public:
         return m_has_flags2 & (HAS_CHARACTER_MASK | MOVE_MASK);
     } 
 
-    boost::uint16_t getRatio() const { return _ratio; }
+    std::uint16_t getRatio() const { return _ratio; }
     int getClipDepth() const { return m_clip_depth; }
-    boost::uint16_t getID() const { return _id; }
+    std::uint16_t getID() const { return _id; }
     const std::string& getName() const { return m_name; }
     const SWFMatrix& getMatrix() const { return m_matrix; }
     const SWFCxForm& getCxform() const { return m_color_transform; }
@@ -144,7 +144,7 @@ public:
     //
     /// This is stored as a uint8_t to allow for future expansion of
     /// blend modes.
-    boost::uint8_t getBlendMode() const {
+    std::uint8_t getBlendMode() const {
         return _blendMode;
     }
 
@@ -162,16 +162,16 @@ private:
     // read SWF::PLACEOBJECT3
     void readPlaceObject3(SWFStream& in);
 
-    boost::uint8_t m_has_flags2;
-    boost::uint8_t m_has_flags3;
-    boost::uint16_t _id;
+    std::uint8_t m_has_flags2;
+    std::uint8_t m_has_flags3;
+    std::uint16_t _id;
     SWFCxForm  m_color_transform;
     SWFMatrix  m_matrix;
-    boost::uint16_t _ratio;
+    std::uint16_t _ratio;
     std::string m_name;
     int     m_clip_depth;
     
-    boost::uint8_t _blendMode;
+    std::uint8_t _blendMode;
 
     /// NOTE: getPlaceType() is dependent on the enum values.
     enum PlaceType
diff --git a/libcore/swf/ScriptLimitsTag.h b/libcore/swf/ScriptLimitsTag.h
index f51e535..3953757 100644
--- a/libcore/swf/ScriptLimitsTag.h
+++ b/libcore/swf/ScriptLimitsTag.h
@@ -74,8 +74,8 @@ private:
 
     }
     
-    boost::uint16_t _recursionLimit;
-    boost::uint16_t _timeoutLimit;
+    std::uint16_t _recursionLimit;
+    std::uint16_t _timeoutLimit;
 };
 
 } // namespace gnash::SWF
diff --git a/libcore/swf/SetTabIndexTag.cpp b/libcore/swf/SetTabIndexTag.cpp
index 9cfa7c8..fda4f34 100644
--- a/libcore/swf/SetTabIndexTag.cpp
+++ b/libcore/swf/SetTabIndexTag.cpp
@@ -33,14 +33,14 @@ SetTabIndexTag::loader(SWFStream& in, TagType /*tag*/, movie_definition& /*md*/,
         const RunResources& /*r*/)
 {
     in.ensureBytes(2);
-    boost::uint16_t depth = in.read_u16();
+    std::uint16_t depth = in.read_u16();
 
     IF_VERBOSE_PARSE(
             log_parse("SetTabIndexTag: depth = %d", depth);
     );
 
     in.ensureBytes(2);
-    boost::uint16_t tab_index = in.read_u16();
+    std::uint16_t tab_index = in.read_u16();
     UNUSED(tab_index);
 
     LOG_ONCE( log_unimpl("SetTabIndexTag") );
diff --git a/libcore/swf/ShapeRecord.cpp b/libcore/swf/ShapeRecord.cpp
index 23d8b0a..44e5fde 100644
--- a/libcore/swf/ShapeRecord.cpp
+++ b/libcore/swf/ShapeRecord.cpp
@@ -52,8 +52,8 @@ public:
     Lerp(typename T::const_iterator style1, typename T::const_iterator style2,
             const double ratio)
         :
-        _style1(style1),
-        _style2(style2),
+        _style1(std::move(style1)),
+        _style2(std::move(style2)),
         _ratio(ratio)
     {}
 
@@ -69,71 +69,6 @@ private:
     const double _ratio;
 };
 
-// Facilities for working with list of paths.
-class PathList
-{
-    typedef SWF::ShapeRecord::Paths Paths;
-public:
-
-    PathList(const Paths& paths)
-        :
-        _paths(paths),
-        _currpath(0),
-        _curredge(0),
-        _nedges(computeNumberOfEdges(_paths))
-    {}
-
-    /// Return number of edges in the path list
-    size_t size() const
-    {
-        return _nedges;
-    }
-
-    /// Get next edge in the path list.
-    //
-    /// After last edge in the list has been fetched,
-    /// next call to this function will return first
-    /// edge again.
-    ///
-    const Edge& getNextEdge()
-    {
-        const Edge& ret = _paths[_currpath][_curredge];
-        if ( ++_curredge >= _paths[_currpath].size() ) {
-            if ( ++_currpath >= _paths.size() ) {
-                // this is not really needed,
-                // but it's simpler to do so that
-                // to make next call fail or abort..
-                _currpath = 0;
-                _curredge = 0;
-            }
-        }
-        return ret;
-    }
-
-    /// Compute total number of edges
-    static size_t computeNumberOfEdges(const Paths& paths)
-    {
-        size_t count=0;
-        for (Paths::const_iterator i = paths.begin(), e = paths.end();
-                i != e; ++i) {
-
-            count += i->size();
-        }
-        return count;
-    }
-
-private:
-
-    const Paths& _paths;
-
-    size_t _currpath;
-
-    size_t _curredge;
-
-    size_t _nedges;
-
-};
-
 } // anonymous namespace
 
 ShapeRecord::ShapeRecord(SWFStream& in, SWF::TagType tag, movie_definition& m,
@@ -170,8 +105,7 @@ Subshape::computeBounds(int swfVersion) const
 {
     SWFRect bounds;
 
-    for (unsigned int i = 0; i < _paths.size(); i++) {
-        const Path& p = _paths[i];
+    for (const Path& p : _paths) {
 
         unsigned thickness = 0;
         if ( p.m_line ) {
@@ -198,7 +132,9 @@ void
 ShapeRecord::setLerp(const ShapeRecord& aa, const ShapeRecord& bb,
         const double ratio)
 {
-	assert(_subshapes.size() == 1);
+    if (_subshapes.empty()) {
+       return;
+    }
 
     // Update current bounds.
     _bounds.set_lerp(aa.getBounds(), bb.getBounds(), ratio);
@@ -332,7 +268,7 @@ ShapeRecord::read(SWFStream& in, SWF::TagType tag, movie_definition& m,
     
     // Use read_u8 to force alignment.
     in.ensureBytes(1);
-    boost::uint8_t num_bits = in.read_u8();
+    std::uint8_t num_bits = in.read_u8();
     int num_fill_bits = (num_bits & 0xF0) >> 4;
     int num_line_bits = (num_bits & 0x0F);
     
@@ -402,17 +338,22 @@ ShapeRecord::read(SWFStream& in, SWF::TagType tag, movie_definition& m,
                 }
                 in.ensureBits(5);
                 int num_move_bits = in.read_uint(5);
-                in.ensureBits(2 * num_move_bits);
-                int move_x = in.read_sint(num_move_bits);
-                int move_y = in.read_sint(num_move_bits);
-    
-                x = move_x;
-                y = move_y;
+                if (num_move_bits > 0) {
+                    in.ensureBits(2 * num_move_bits);
+                    int move_x = in.read_sint(num_move_bits);
+                    int move_y = in.read_sint(num_move_bits);
     
-                // Set the beginning of the path.
-                current_path.ap.x = x;
-                current_path.ap.y = y;
+                    x = move_x;
+                    y = move_y;
     
+                    // Set the beginning of the path.
+                    current_path.ap.x = x;
+                    current_path.ap.y = y;
+                } else {
+                    IF_VERBOSE_MALFORMED_SWF(
+                        log_swferror(_("Shape move-to missing destination"));
+                    );
+                }
 #if SHAPE_LOG
                 IF_VERBOSE_PARSE(
                     log_parse(_("  Shape read: moveto %d %d"), x, y);
@@ -601,7 +542,7 @@ readFillStyles(ShapeRecord::FillStyles& styles, SWFStream& in,
          SWF::TagType tag, movie_definition& m, const RunResources& /*r*/)
 {
     in.ensureBytes(1);
-    boost::uint16_t fillcount = in.read_u8();
+    std::uint16_t fillcount = in.read_u8();
     if (tag != SWF::DEFINESHAPE) {
         if (fillcount == 0xff) {
             in.ensureBytes(2);
@@ -615,7 +556,7 @@ readFillStyles(ShapeRecord::FillStyles& styles, SWFStream& in,
 
     // Read the styles.
     styles.reserve(styles.size() + fillcount);
-    for (boost::uint16_t i = 0; i < fillcount; ++i) {
+    for (std::uint16_t i = 0; i < fillcount; ++i) {
         OptionalFillPair fp = readFills(in, tag, m, false);
         styles.push_back(fp.first);
         IF_VERBOSE_PARSE(
@@ -661,10 +602,9 @@ operator<<(std::ostream& o, const ShapeRecord& sh)
     o << boost::format("Shape Record: bounds %1%") % sh.getBounds();
 
 
-    for (ShapeRecord::Subshapes::const_iterator it = sh.subshapes().begin(),
-         end = sh.subshapes().end(); it != end; ++it) {
+    for (const Subshape& subshape : sh.subshapes()) {
 
-        const ShapeRecord::FillStyles& fills = it->fillStyles();
+        const ShapeRecord::FillStyles& fills = subshape.fillStyles();
         std::copy(fills.begin(), fills.end(),
                 std::ostream_iterator<FillStyle>(o, ","));
 	}
diff --git a/libcore/swf/ShapeRecord.h b/libcore/swf/ShapeRecord.h
index 2f73612..478cd83 100644
--- a/libcore/swf/ShapeRecord.h
+++ b/libcore/swf/ShapeRecord.h
@@ -180,12 +180,11 @@ public:
         _bounds = bounds;
     }
 
-    bool pointTest(boost::int32_t x, boost::int32_t y,
+    bool pointTest(std::int32_t x, std::int32_t y,
                    const SWFMatrix& wm) const {
-        for (SWF::ShapeRecord::Subshapes::const_iterator it = _subshapes.begin(),
-             end = _subshapes.end(); it != end; ++it) {
+        for (const Subshape& subshape : _subshapes) {
 
-            if (geometry::pointTest(it->paths(), it->lineStyles(), x, y, wm)) {
+            if (geometry::pointTest(subshape.paths(), subshape.lineStyles(), x, y, wm)) {
         	    return true;
             }
         }
diff --git a/libcore/swf/SoundStreamHeadTag.cpp b/libcore/swf/SoundStreamHeadTag.cpp
index 516393f..3b20909 100644
--- a/libcore/swf/SoundStreamHeadTag.cpp
+++ b/libcore/swf/SoundStreamHeadTag.cpp
@@ -18,7 +18,7 @@
 
 #include "SoundStreamHeadTag.h"
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <memory>
 
 #include "SWF.h"
@@ -54,9 +54,9 @@ SoundStreamHeadTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     // These are all unused by current implementation
     int reserved = in.read_uint(4); UNUSED(reserved);
 
-    const boost::uint32_t samplerates[] = { 5512, 11025, 22050, 44100 };
+    const std::uint32_t samplerates[] = { 5512, 11025, 22050, 44100 };
 
-    boost::uint8_t pbSoundRate = in.read_uint(2);
+    std::uint8_t pbSoundRate = in.read_uint(2);
     if (pbSoundRate >= arraySize(samplerates)) {
         IF_VERBOSE_MALFORMED_SWF(
             log_swferror("SOUNDSTREAMHEAD: playback sound rate %d (expected "
@@ -64,14 +64,14 @@ SoundStreamHeadTag::loader(SWFStream& in, TagType tag, movie_definition& m,
         );
         pbSoundRate = 0;
     }
-    const boost::uint32_t playbackSoundRate = samplerates[pbSoundRate];
+    const std::uint32_t playbackSoundRate = samplerates[pbSoundRate];
     const bool playbackSound16bit = in.read_bit();
     const bool playbackSoundStereo = in.read_bit();
 
     // These are the used ones
     media::audioCodecType format =
         static_cast<media::audioCodecType>(in.read_uint(4)); // TODO: check input !
-    boost::uint8_t stSoundRate = in.read_uint(2);
+    std::uint8_t stSoundRate = in.read_uint(2);
 
     if (stSoundRate >= arraySize(samplerates)) {
         IF_VERBOSE_MALFORMED_SWF(
@@ -80,7 +80,7 @@ SoundStreamHeadTag::loader(SWFStream& in, TagType tag, movie_definition& m,
         );
         stSoundRate=0;
     }
-    const boost::uint32_t streamSoundRate = samplerates[stSoundRate];
+    const std::uint32_t streamSoundRate = samplerates[stSoundRate];
     const bool streamSound16bit = in.read_bit(); 
     const bool streamSoundStereo = in.read_bit(); 
 
@@ -112,7 +112,7 @@ SoundStreamHeadTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     }
 
     // 2 bytes here
-    const boost::uint16_t sampleCount = in.read_u16();
+    const std::uint16_t sampleCount = in.read_u16();
 
     if (!sampleCount) {
         // this seems common too, we'd need to reproduce with a custom
@@ -123,7 +123,7 @@ SoundStreamHeadTag::loader(SWFStream& in, TagType tag, movie_definition& m,
         );
     }
 
-    boost::int16_t latency = 0;
+    std::int16_t latency = 0;
     if (format == media::AUDIO_CODEC_MP3) {
         try {
             in.ensureBytes(2);
diff --git a/libcore/swf/SoundStreamHeadTag.h b/libcore/swf/SoundStreamHeadTag.h
index 318e111..f3de563 100644
--- a/libcore/swf/SoundStreamHeadTag.h
+++ b/libcore/swf/SoundStreamHeadTag.h
@@ -20,8 +20,6 @@
 #define GNASH_SWF_SOUNDSTREAMHEAD_TAG_H
 
 
-#include <boost/cstdint.hpp> 
- 
 #include "SWF.h"
 
 // Forward declarations
diff --git a/libcore/swf/StartSoundTag.cpp b/libcore/swf/StartSoundTag.cpp
index b6a9eb2..0e1ae40 100644
--- a/libcore/swf/StartSoundTag.cpp
+++ b/libcore/swf/StartSoundTag.cpp
@@ -27,6 +27,7 @@
 #include "RunResources.h"
 #include "SoundInfoRecord.h"
 #include "MovieClip.h"
+#include "sound_handler.h"
 
 #include <limits>
 
@@ -91,7 +92,7 @@ StartSoundTag::executeActions(MovieClip* m, DisplayList& /* dlist */) const
         else {
 
             const sound::SoundEnvelopes* env = 
-                _soundInfo.envelopes.empty() ? 0 : &_soundInfo.envelopes;
+                _soundInfo.envelopes.empty() ? nullptr : &_soundInfo.envelopes;
 
             handler->startSound(m_handler_id,
                     _soundInfo.loopCount,
diff --git a/libcore/swf/StartSoundTag.h b/libcore/swf/StartSoundTag.h
index 6d6dd63..6a24543 100644
--- a/libcore/swf/StartSoundTag.h
+++ b/libcore/swf/StartSoundTag.h
@@ -23,7 +23,7 @@
 #include "SWF.h" // for TagType definition
 #include "SoundInfoRecord.h"
 
-#include <boost/cstdint.hpp> // for boost::uint16_t and friends
+#include <cstdint> // for std::uint16_t and friends
  
 
 // Forward declarations
@@ -51,7 +51,7 @@ class StartSoundTag : public ControlTag
 	/// This one is the latter, probably so with the intention of avoiding
 	/// a lookup at every execution...
 	///
-	boost::uint16_t	m_handler_id;
+	std::uint16_t	m_handler_id;
 
 	/// Create a StartSoundTag for starting the given sound sample
 	//
diff --git a/libcore/swf/StreamSoundBlockTag.cpp b/libcore/swf/StreamSoundBlockTag.cpp
index ce3510a..eea639c 100644
--- a/libcore/swf/StreamSoundBlockTag.cpp
+++ b/libcore/swf/StreamSoundBlockTag.cpp
@@ -20,7 +20,7 @@
 #include "StreamSoundBlockTag.h"
 
 #include <boost/intrusive_ptr.hpp>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "utility.h"
 #include "sound_handler.h" 
@@ -82,8 +82,8 @@ StreamSoundBlockTag::loader(SWFStream& in, TagType tag, movie_definition& m,
 
     media::audioCodecType format = sinfo->getFormat();
 
-    boost::uint16_t sampleCount;
-    boost::int16_t seekSamples = 0;
+    std::uint16_t sampleCount;
+    std::int16_t seekSamples = 0;
 
     // MP3 format blocks have additional info
     if (format == media::AUDIO_CODEC_MP3) {
@@ -104,10 +104,10 @@ StreamSoundBlockTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     const size_t padding = mh ? mh->getInputPaddingSize() : 0;
 
     // Reserve padding too.
-    std::auto_ptr<SimpleBuffer> buf(new SimpleBuffer(dataLength + padding));
-    buf->resize(dataLength);
+    SimpleBuffer buf(dataLength + padding);
+    buf.resize(dataLength);
 
-    const unsigned int bytesRead = in.read((char*)buf->data(), dataLength);
+    const unsigned int bytesRead = in.read((char*)buf.data(), dataLength);
     
     if (bytesRead < dataLength) {
         throw ParserException(_("Tag boundary reported past end of stream!"));
@@ -120,7 +120,7 @@ StreamSoundBlockTag::loader(SWFStream& in, TagType tag, movie_definition& m,
     // not on the size of the data. Currently the sound_handler ignores
     // sampleCount completely.
     sound::sound_handler::StreamBlockId blockId =
-        handler->addSoundBlock(buf, sampleCount, seekSamples, sId);
+        handler->addSoundBlock(std::move(buf), sampleCount, seekSamples, sId);
 
     boost::intrusive_ptr<ControlTag> s(new StreamSoundBlockTag(sId, blockId));
 
diff --git a/libcore/swf/StreamSoundBlockTag.h b/libcore/swf/StreamSoundBlockTag.h
index 3f60414..03905db 100644
--- a/libcore/swf/StreamSoundBlockTag.h
+++ b/libcore/swf/StreamSoundBlockTag.h
@@ -19,7 +19,7 @@
 #ifndef GNASH_SWF_STREAMSOUNDBLOCK_TAG_H
 #define GNASH_SWF_STREAMSOUNDBLOCK_TAG_H
 
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 
 #include "ControlTag.h" // for inheritance
 #include "SWF.h" // for TagType definition
@@ -66,7 +66,7 @@ private:
     /// @param blockId      identifier of the stream block to play.
     ///
     /// This should only be constructed using the loader() function.
-    StreamSoundBlockTag(boost::uint16_t streamId,
+    StreamSoundBlockTag(std::uint16_t streamId,
                         sound::sound_handler::StreamBlockId blockId)
         :
         _handler_id(streamId),
@@ -74,7 +74,7 @@ private:
     {}
 
     /// Id of the stream this tag should play
-    const boost::uint16_t _handler_id;
+    const std::uint16_t _handler_id;
 
     /// Offset in the stream buffer to play
     const sound::sound_handler::StreamBlockId _blockId;
diff --git a/libcore/swf/SymbolClassTag.h b/libcore/swf/SymbolClassTag.h
index 6576998..53b384d 100644
--- a/libcore/swf/SymbolClassTag.h
+++ b/libcore/swf/SymbolClassTag.h
@@ -65,11 +65,11 @@ public:
         }
 		
         in.ensureBytes(2);
-		boost::uint16_t num_symbols = in.read_u16();
+		std::uint16_t num_symbols = in.read_u16();
 		log_debug("There are %u symbols.", num_symbols);
 		for (unsigned int i = 0; i < num_symbols; ++i) {
 			in.ensureBytes(2);
-			boost::uint16_t id = in.read_u16();
+			std::uint16_t id = in.read_u16();
 			std::string name;
 			in.read_string(name);
 			IF_VERBOSE_PARSE(
diff --git a/libcore/swf/TagLoadersTable.h b/libcore/swf/TagLoadersTable.h
index 4269c18..b550685 100644
--- a/libcore/swf/TagLoadersTable.h
+++ b/libcore/swf/TagLoadersTable.h
@@ -54,9 +54,9 @@ public:
 	TagLoadersTable() {}
 
     /// Construct a TagLoadersTable by copying another table
-    TagLoadersTable(const Loaders& loaders)
+    TagLoadersTable(Loaders loaders)
         :
-        _loaders(loaders)
+        _loaders(std::move(loaders))
     {}
 	
     ~TagLoadersTable() {}
diff --git a/libcore/swf/TextRecord.cpp b/libcore/swf/TextRecord.cpp
index 879c907..e7ab1dd 100644
--- a/libcore/swf/TextRecord.cpp
+++ b/libcore/swf/TextRecord.cpp
@@ -18,7 +18,6 @@
 
 #include "TextRecord.h"
 
-#include <boost/assign/list_of.hpp>
 #include <vector>
 
 #include "TypesParser.h"
@@ -43,7 +42,7 @@ TextRecord::read(SWFStream& in, movie_definition& m, int glyphBits,
     _glyphs.clear();
 
     in.ensureBytes(1);
-    boost::uint8_t flags = in.read_u8();
+    std::uint8_t flags = in.read_u8();
         
     if (!flags)
     {
@@ -62,7 +61,7 @@ TextRecord::read(SWFStream& in, movie_definition& m, int glyphBits,
     if (hasFont)
     {
         in.ensureBytes(2);
-        boost::uint16_t fontID = in.read_u16();
+        std::uint16_t fontID = in.read_u16();
 
         _font = m.get_font(fontID);
         if (!_font)
@@ -119,7 +118,7 @@ TextRecord::read(SWFStream& in, movie_definition& m, int glyphBits,
     }
 
     in.ensureBytes(1);
-    boost::uint8_t glyphCount = in.read_u8();
+    std::uint8_t glyphCount = in.read_u8();
     if (!glyphCount) return false;
 
     IF_VERBOSE_PARSE(
@@ -172,12 +171,10 @@ TextRecord::displayRecords(Renderer& renderer, const Transform& xform,
     double x = 0.0;
     double y = 0.0;
 
-    for (TextRecords::const_iterator i = records.begin(), e = records.end();
-            i !=e; ++i) {
+    for (const TextRecord& rec : records) {
 
         // Draw the DisplayObjects within the current record; i.e. consecutive
         // chars that share a particular style.
-        const TextRecord& rec = *i;
 
         const Font* fnt = rec.getFont();
         if (!fnt) {
@@ -208,17 +205,14 @@ TextRecord::displayRecords(Renderer& renderer, const Transform& xform,
         if (rec.hasYOffset()) y = rec.yOffset();
 
         // Save for the underline, if any
-        const boost::int16_t startX = x; 
+        const std::int16_t startX = x;
 
         rgba textColor = cx.transform(rec.color());
 
         // Device fonts have no transparency.
         if (!embedded) textColor.m_a = 0xff;
 
-        for (Glyphs::const_iterator j = rec.glyphs().begin(),
-                je = rec.glyphs().end(); j != je; ++j) {
-
-            const TextRecord::GlyphEntry& ge = *j;
+        for (const TextRecord::GlyphEntry& ge : rec.glyphs()) {
 
             const int index = ge.index;
                 
@@ -248,12 +242,13 @@ TextRecord::displayRecords(Renderer& renderer, const Transform& xform,
                 //       square is not hard-coded anymore but can be
                 //       queried from the font class
                 //
-                static const std::vector<point> emptyCharBox =
-                    boost::assign::list_of (point(32, 32))
-                                           (point(480, 32))
-                                           (point(480, -656))
-                                           (point(32, -656))
-                                           (point(32,32));
+                static const std::vector<point> emptyCharBox = {
+                    point(32, 32),
+                    point(480, 32),
+                    point(480, -656),
+                    point(32, -656),
+                    point(32,32)
+                };
                 renderer.drawLine(emptyCharBox, textColor, m);
 #endif
 
@@ -276,17 +271,18 @@ TextRecord::displayRecords(Renderer& renderer, const Transform& xform,
             // This will only be known if a glyph was actually found,
             // or would be the size of the empty box (arbitrary size)
             //
-            boost::int16_t endX = static_cast<boost::int16_t>(x); 
+            std::int16_t endX = static_cast<std::int16_t>(x);
 
             // The underline is made to be some pixels below the baseline (0)
             // and scaled so it's further as font size increases.
             //
             // 1/4 the EM square offset far from baseline 
-            boost::int16_t posY = int(y+int((unitsPerEM/4)*scale));
+            std::int16_t posY = int(y+int((unitsPerEM/4)*scale));
 
-            const std::vector<point> underline = boost::assign::list_of
-                (point(startX, posY))
-                (point(endX, posY));
+            const std::vector<point> underline = {
+                point(startX, posY),
+                point(endX, posY)
+            };
 
             renderer.drawLine(underline, textColor, mat);
         }
diff --git a/libcore/swf/TextRecord.h b/libcore/swf/TextRecord.h
index c2c7a67..ec11028 100644
--- a/libcore/swf/TextRecord.h
+++ b/libcore/swf/TextRecord.h
@@ -64,7 +64,7 @@ public:
         _hasYOffset(false),
         _xOffset(0.0f),
         _yOffset(0.0f),
-        _font(0),
+        _font(nullptr),
         _underline(false)
     {}
           
@@ -134,20 +134,20 @@ public:
         return _font.get();
     }
 
-    void setTextHeight(boost::uint16_t height) {
+    void setTextHeight(std::uint16_t height) {
         _textHeight = height;
     }
 
 	float recordWidth() const {
 		float width = 0.0f;
-		for (size_t i = 0; i < glyphs().size(); ++i)
+		for (const auto& glyph : glyphs())
 		{
-			width += glyphs()[i].advance;
+			width += glyph.advance;
 		}
         return width;
 	}
 
-    boost::uint16_t textHeight() const {
+    std::uint16_t textHeight() const {
         return _textHeight;
     }
 
@@ -201,7 +201,7 @@ private:
     rgba _color;
 
     /// The height of the text in TWIPS.
-    boost::uint16_t _textHeight;
+    std::uint16_t _textHeight;
 
     /// Whether the TextRecord has an x offset.
     bool _hasXOffset;
diff --git a/libcore/swf/VideoFrameTag.cpp b/libcore/swf/VideoFrameTag.cpp
index c3bfa21..b975fe5 100644
--- a/libcore/swf/VideoFrameTag.cpp
+++ b/libcore/swf/VideoFrameTag.cpp
@@ -38,7 +38,7 @@ VideoFrameTag::loader(SWFStream& in, SWF::TagType tag, movie_definition& m,
     assert(tag == SWF::VIDEOFRAME);
 
     in.ensureBytes(2);
-    boost::uint16_t id = in.read_u16();
+    std::uint16_t id = in.read_u16();
     DefinitionTag* chdef = m.getDefinitionTag(id);
 
     if (!chdef)
@@ -80,7 +80,7 @@ VideoFrameTag::loader(SWFStream& in, SWF::TagType tag, movie_definition& m,
     const unsigned int dataLength = in.get_tag_end_position() - in.tell();
 
     // FIXME: catch bad_alloc
-    boost::uint8_t* buffer = new boost::uint8_t[dataLength + padding]; 
+    std::uint8_t* buffer = new std::uint8_t[dataLength + padding];
 
     const size_t bytesRead = in.read(reinterpret_cast<char*>(buffer),
                                      dataLength);
@@ -96,10 +96,10 @@ VideoFrameTag::loader(SWFStream& in, SWF::TagType tag, movie_definition& m,
 
     using namespace media;
 
-    std::auto_ptr<EncodedVideoFrame> frame(
+    std::unique_ptr<EncodedVideoFrame> frame(
             new EncodedVideoFrame(buffer, dataLength, frameNum));
 
-    vs->addVideoFrameTag(frame);
+    vs->addVideoFrameTag(std::move(frame));
 }
 
 } // namespace SWF
diff --git a/libcore/swf/tag_loaders.cpp b/libcore/swf/tag_loaders.cpp
index 0d2418c..c0da0ce 100644
--- a/libcore/swf/tag_loaders.cpp
+++ b/libcore/swf/tag_loaders.cpp
@@ -35,6 +35,7 @@
 #include "swf/TagLoadersTable.h"
 #include "URL.h"
 #include "GnashException.h"
+#include "GnashAlgorithm.h"
 #include "sound_definition.h"
 #include "SoundInfo.h"
 #include "MediaHandler.h"
@@ -48,7 +49,7 @@ namespace SWF {
 // Anonymous namespace
 namespace {
 
-const boost::uint32_t samplerates[] = { 5512, 11025, 22050, 44100 };
+const std::uint32_t samplerates[] = { 5512, 11025, 22050, 44100 };
 
 } 
 
@@ -101,7 +102,7 @@ sprite_loader(SWFStream& in, TagType tag, movie_definition& m,
     assert(tag == SWF::DEFINESPRITE); // 39 - DefineSprite
 
     in.ensureBytes(2);
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
     IF_VERBOSE_PARSE(
         log_parse(_("  sprite:  char id = %d"), id);
@@ -156,13 +157,13 @@ define_sound_loader(SWFStream& in, TagType tag, movie_definition& m,
 
     in.ensureBytes(2+4+1+4); // DisplayObject id + flags + sample count
 
-    const boost::uint16_t id = in.read_u16();
+    const std::uint16_t id = in.read_u16();
 
 #ifdef USE_SOUND
     media::audioCodecType format = static_cast<media::audioCodecType>(
             in.read_uint(4));
 
-    boost::uint8_t sample_rate_in = in.read_uint(2);
+    std::uint8_t sample_rate_in = in.read_uint(2);
 
     if (sample_rate_in >= arraySize(samplerates)) {
         IF_VERBOSE_MALFORMED_SWF(
@@ -171,14 +172,14 @@ define_sound_loader(SWFStream& in, TagType tag, movie_definition& m,
         );
         sample_rate_in = 0;
     }
-    const boost::uint32_t sample_rate = samplerates[sample_rate_in];
+    const std::uint32_t sample_rate = samplerates[sample_rate_in];
 
     const bool sample_16bit = in.read_bit(); 
     const bool stereo = in.read_bit(); 
 
-    const boost::uint32_t sample_count = in.read_u32();
+    const std::uint32_t sample_count = in.read_u32();
 
-    boost::int16_t delaySeek = 0;
+    std::int16_t delaySeek = 0;
 
     if (format == media::AUDIO_CODEC_MP3) {
         in.ensureBytes(2);
@@ -204,7 +205,7 @@ define_sound_loader(SWFStream& in, TagType tag, movie_definition& m,
         media::MediaHandler* mh = r.mediaHandler();
         if (mh) allocSize += mh->getInputPaddingSize();
 
-        std::auto_ptr<SimpleBuffer> data(new SimpleBuffer(allocSize));
+        std::unique_ptr<SimpleBuffer> data(new SimpleBuffer(allocSize));
 
         // dataLength is already calculated from the end of the tag, which
         // should be inside the end of the file. TODO: check that this is 
@@ -224,7 +225,7 @@ define_sound_loader(SWFStream& in, TagType tag, movie_definition& m,
 
         // Stores the sounddata in the soundhandler, and the ID returned
         // can be used to starting, stopping and deleting that sound
-        const int handler_id = handler->create_sound(data, sinfo);
+        const int handler_id = handler->create_sound(std::move(data), sinfo);
 
         if (handler_id >= 0) {
             sound_sample* sam = new sound_sample(handler_id, r);
@@ -346,21 +347,21 @@ serialnumber_loader(SWFStream& in, TagType tag, movie_definition& /*m*/,
 
     in.ensureBytes(26);
 
-    const boost::uint32_t id = in.read_u32();
-    const boost::uint32_t edition = in.read_u32();
-    const boost::uint8_t major = in.read_u8();
-    const boost::uint8_t minor = in.read_u8();
+    const std::uint32_t id = in.read_u32();
+    const std::uint32_t edition = in.read_u32();
+    const std::uint8_t major = in.read_u8();
+    const std::uint8_t minor = in.read_u8();
 
-    const boost::uint32_t buildL = in.read_u32();
-    const boost::uint32_t buildH = in.read_u32();
-    const boost::uint64_t build =
-        (static_cast<boost::uint64_t>(buildH) << 32) + buildL;
+    const std::uint32_t buildL = in.read_u32();
+    const std::uint32_t buildH = in.read_u32();
+    const std::uint64_t build =
+        (static_cast<std::uint64_t>(buildH) << 32) + buildL;
 
-    const boost::uint32_t timestampL = in.read_u32();
-    const boost::uint32_t timestampH = in.read_u32();
+    const std::uint32_t timestampL = in.read_u32();
+    const std::uint32_t timestampH = in.read_u32();
     // This timestamp is number of milliseconds since 1 Jan 1970 (epoch)
-    boost::uint64_t timestamp = 
-        (static_cast<boost::uint64_t>(timestampH) << 32) + timestampL;
+    std::uint64_t timestamp =
+        (static_cast<std::uint64_t>(timestampH) << 32) + timestampL;
 
     std::stringstream ss;
     ss << "SERIALNUMBER: Version " << id << "." << edition 
@@ -380,9 +381,9 @@ reflex_loader(SWFStream& in, TagType tag, movie_definition& /*m*/,
     assert(tag == SWF::REFLEX); // 777
 
     in.ensureBytes(3);
-    const boost::uint8_t first = in.read_u8();
-    const boost::uint8_t second = in.read_u8();
-    const boost::uint8_t third = in.read_u8();
+    const std::uint8_t first = in.read_u8();
+    const std::uint8_t second = in.read_u8();
+    const std::uint8_t third = in.read_u8();
 
     IF_VERBOSE_PARSE(
         log_parse(_("  reflex = \"%c%c%c\""), first, second, third);
diff --git a/libcore/swf_event.h b/libcore/swf_event.h
index 01e14b7..808fade 100644
--- a/libcore/swf_event.h
+++ b/libcore/swf_event.h
@@ -21,6 +21,7 @@
 #define GNASH_SWF_EVENT_H
 
 #include "event_id.h" // for composition
+#include <utility>
 
 namespace gnash {
     class action_buffer;
@@ -40,9 +41,9 @@ class swf_event
 {
 public:
 
-	swf_event(const event_id& ev, action_buffer& buf)
+	swf_event(event_id ev, action_buffer& buf)
 		:
-		m_event(ev),
+		m_event(std::move(ev)),
 		m_action_buffer(buf)
 	{
 	}
diff --git a/libcore/vm/ASHandlers.cpp b/libcore/vm/ASHandlers.cpp
index 05121d1..60a3fd7 100644
--- a/libcore/vm/ASHandlers.cpp
+++ b/libcore/vm/ASHandlers.cpp
@@ -26,9 +26,7 @@
 
 #include <string>
 #include <vector>
-#include <boost/scoped_array.hpp>
 #include <boost/random.hpp>
-#include <boost/lexical_cast.hpp>
 #include <algorithm> 
 
 #include "log.h"
@@ -85,7 +83,7 @@ namespace {
     /// @param target         the target window or _level1 to _level10
     /// @param method       0:NONE, 1:GET, 2:POST
     void commonGetURL(as_environment& env, as_value target,
-            const std::string& url, boost::uint8_t method);
+            const std::string& url, std::uint8_t method);
     
     /// Common code for SetTarget and SetTargetExpression
     ///
@@ -219,6 +217,7 @@ namespace SWF {
 
 ActionHandler::ActionHandler()
     :
+    _type(ACTION_END), // initialized to zero to have well known value
     _callback(ActionUnsupported),
     _arg_format(ARG_NONE)
 {
@@ -462,7 +461,7 @@ ActionNextFrame(ActionExec& thread)
 #endif
 
     DisplayObject* tgtch = env.target();
-    MovieClip* tgt = tgtch ? tgtch->to_movie() : 0;
+    MovieClip* tgt = tgtch ? tgtch->to_movie() : nullptr;
     if (tgt) tgt->goto_frame(tgt->get_current_frame() + 1);
     else {
         log_debug("ActionNextFrame: as_environment target is null "
@@ -480,7 +479,7 @@ ActionPrevFrame(ActionExec& thread)
 #endif
 
     DisplayObject* tgtch = env.target();
-    MovieClip* tgt = tgtch ? tgtch->to_movie() : 0;
+    MovieClip* tgt = tgtch ? tgtch->to_movie() : nullptr;
     if (tgt) tgt->goto_frame(tgt->get_current_frame() - 1);
     else log_debug("ActionPrevFrame: as_environment target is null or not a sprite");
 }
@@ -495,7 +494,7 @@ ActionPlay(ActionExec& thread)
 #endif
 
     DisplayObject* tgtch = env.target();
-    MovieClip* tgt = tgtch ? tgtch->to_movie() : 0;
+    MovieClip* tgt = tgtch ? tgtch->to_movie() : nullptr;
     if (tgt) tgt->setPlayState(MovieClip::PLAYSTATE_PLAY);
     else log_debug("ActionPlay: as_environment target is null or not a sprite");
 }
@@ -510,7 +509,7 @@ ActionStop(ActionExec& thread)
 #endif
 
     DisplayObject* tgtch = env.target();
-    MovieClip* tgt = tgtch ? tgtch->to_movie() : 0;
+    MovieClip* tgt = tgtch ? tgtch->to_movie() : nullptr;
     if (tgt) tgt->setPlayState(MovieClip::PLAYSTATE_STOP);
     else log_debug("ActionStop: as_environment target is null or not a sprite");
 }
@@ -553,7 +552,7 @@ ActionGotoFrame(ActionExec& thread)
     size_t frame = code.read_int16(thread.getCurrentPC() + 3);
 
     DisplayObject* tgtch = env.target();
-    MovieClip* tgt = tgtch ? tgtch->to_movie() : 0;
+    MovieClip* tgt = tgtch ? tgtch->to_movie() : nullptr;
 
     // frame number within this tag is hard-coded and 0-based
     if (tgt) tgt->goto_frame(frame);
@@ -621,10 +620,10 @@ ActionWaitForFrame(ActionExec& thread)
     // skip the specified number of actions.
     //
     unsigned int framenum = code.read_int16(thread.getCurrentPC()+3);
-    boost::uint8_t skip = code[thread.getCurrentPC()+5];
+    std::uint8_t skip = code[thread.getCurrentPC()+5];
 
     DisplayObject* target = env.target();
-    MovieClip* target_sprite = target ? target->to_movie() : 0;
+    MovieClip* target_sprite = target ? target->to_movie() : nullptr;
     if (!target_sprite) {
         log_error(_("%s: environment target is null or not a MovieClip"),
                 __FUNCTION__);
@@ -674,7 +673,7 @@ ActionGotoLabel(ActionExec& thread)
 
     const char* frame_label = code.read_string(thread.getCurrentPC()+3);
     DisplayObject *target = env.target();
-    MovieClip *target_sprite = target ? target->to_movie() : 0;
+    MovieClip *target_sprite = target ? target->to_movie() : nullptr;
     if (!target_sprite) {
         log_error(_("GotoLabel: environment target is null or not a "
                     "MovieClip"));
@@ -1102,7 +1101,7 @@ ActionDuplicateClip(ActionExec& thread)
         DisplayObject::staticDepthOffset;
   
     // This also checks for overflow, as both numbers are expressible as
-    // boost::int32_t.
+    // std::int32_t.
     if (depth < DisplayObject::lowerAccessibleBound ||
       depth > DisplayObject::upperAccessibleBound) {
 
@@ -1114,7 +1113,7 @@ ActionDuplicateClip(ActionExec& thread)
         return;
     }
   
-    boost::int32_t depthValue = static_cast<boost::int32_t>(depth);
+    std::int32_t depthValue = static_cast<std::int32_t>(depth);
     
     const std::string& newname = env.top(1).to_string();
     const std::string& path = env.top(2).to_string();
@@ -1214,10 +1213,10 @@ ActionStartDragMovie(ActionExec& thread)
     // it should actually convert to false!
     if (toNumber(env.top(2), getVM(env))) {
 
-        boost::int32_t y1 = pixelsToTwips(toNumber(env.top(3), getVM(env)));
-        boost::int32_t x1 = pixelsToTwips(toNumber(env.top(4), getVM(env)));
-        boost::int32_t y0 = pixelsToTwips(toNumber(env.top(5), getVM(env)));
-        boost::int32_t x0 = pixelsToTwips(toNumber(env.top(6), getVM(env)));
+        std::int32_t y1 = pixelsToTwips(toNumber(env.top(3), getVM(env)));
+        std::int32_t x1 = pixelsToTwips(toNumber(env.top(4), getVM(env)));
+        std::int32_t y0 = pixelsToTwips(toNumber(env.top(5), getVM(env)));
+        std::int32_t x0 = pixelsToTwips(toNumber(env.top(6), getVM(env)));
 
         // check for swapped values
         if (y1 < y0) {
@@ -1504,7 +1503,7 @@ ActionChr(ActionExec& thread)
     as_environment& env = thread.env;
     
     // This is UB:
-    const boost::uint16_t c = toInt(env.top(0), getVM(env));
+    const std::uint16_t c = toInt(env.top(0), getVM(env));
 
     // If the argument to chr() is '0', we return
     // nothing, not NULL
@@ -1628,7 +1627,7 @@ ActionMbOrd(ActionExec& thread)
     
     std::string::const_iterator it = s.begin(), e = s.end();
     
-    boost::uint32_t out = utf8::decodeNextUnicodeCharacter(it, e);
+    std::uint32_t out = utf8::decodeNextUnicodeCharacter(it, e);
     
     /// Always valid, or can it be undefined?
     env.top(0).set_double(out);
@@ -1650,7 +1649,7 @@ ActionMbChr(ActionExec& thread)
     }
 
     // This is UB
-    const boost::uint16_t i = toInt(env.top(0), getVM(env));
+    const std::uint16_t i = toInt(env.top(0), getVM(env));
     
     std::string out = utf8::encodeUnicodeCharacter(i);
     
@@ -1683,14 +1682,14 @@ ActionWaitForFrameExpression(ActionExec& thread)
     const action_buffer& code = thread.code;
 
     // how many actions to skip if frame has not been loaded
-    const boost::uint8_t skip = code[thread.getCurrentPC() + 3];
+    const std::uint8_t skip = code[thread.getCurrentPC() + 3];
 
     // env.top(0) contains frame specification,
     // evaluated as for ActionGotoExpression
     as_value framespec = env.pop();
 
     DisplayObject* tgtch = env.target();
-    MovieClip* target_sprite = tgtch ? tgtch->to_movie() : 0;
+    MovieClip* target_sprite = tgtch ? tgtch->to_movie() : nullptr;
     if (!target_sprite) {
         log_error(_("%s: environment target is null or not a MovieClip"),
             __FUNCTION__);
@@ -1775,14 +1774,14 @@ ActionPushData(ActionExec& thread)
     const action_buffer& code = thread.code;
 
     const size_t pc = thread.getCurrentPC();
-    const boost::uint16_t length = code.read_uint16(pc + 1);
+    const std::uint16_t length = code.read_uint16(pc + 1);
 
     //---------------
     size_t i = pc;
     size_t count = 0;
     while (i - pc < length) {
 
-        const boost::uint8_t type = code[3 + i];
+        const std::uint8_t type = code[3 + i];
         ++i;
 
         switch (type)
@@ -1859,7 +1858,7 @@ ActionPushData(ActionExec& thread)
 
             case pushInt32: // 7
             {
-                const boost::int32_t val = code.read_int32(i + 3);
+                const std::int32_t val = code.read_int32(i + 3);
                 i += 4;
                 env.push(val);
                 break;
@@ -1867,7 +1866,7 @@ ActionPushData(ActionExec& thread)
 
             case pushDict8: // 8
             {
-                const boost::uint8_t id = code[3 + i];
+                const std::uint8_t id = code[3 + i];
                 ++i;
                 pushConstant(thread, id);    
                 break;
@@ -1875,7 +1874,7 @@ ActionPushData(ActionExec& thread)
 
             case pushDict16: // 9
             {
-                const boost::uint16_t id = code.read_int16(i + 3);
+                const std::uint16_t id = code.read_int16(i + 3);
                 i += 2;
                 pushConstant(thread, id);    
                 break;
@@ -1894,7 +1893,7 @@ ActionPushData(ActionExec& thread)
 void
 ActionBranchAlways(ActionExec& thread)
 {
-    boost::int16_t offset = thread.code.read_int16(thread.getCurrentPC()+3);
+    std::int16_t offset = thread.code.read_int16(thread.getCurrentPC()+3);
     thread.adjustNextPC(offset);
     // @@ TODO range checks
 }
@@ -1910,7 +1909,7 @@ ActionGetUrl2(ActionExec& thread)
     assert(thread.atActionTag(SWF::ACTION_GETURL2));
 #endif
 
-    const boost::uint8_t method = code[thread.getCurrentPC() + 3];
+    const std::uint8_t method = code[thread.getCurrentPC() + 3];
 
     as_value url_val = env.top(1);
     if (url_val.is_undefined()) {
@@ -1937,7 +1936,7 @@ ActionBranchIfTrue(ActionExec& thread)
     assert(thread.atActionTag(SWF::ACTION_BRANCHIFTRUE));
 #endif
 
-    boost::int16_t offset = code.read_int16(pc+3);
+    std::int16_t offset = code.read_int16(pc+3);
 
     const bool test = toBool(env.pop(), getVM(env));
     if (test) {
@@ -1963,7 +1962,7 @@ ActionCallFrame(ActionExec& thread)
     std::string target_path;
     std::string frame_var;
 
-    DisplayObject* target = 0;
+    DisplayObject* target = nullptr;
     if (parsePath(target_frame, target_path, frame_var)) {
         target = findTarget(env, target_path);
     }
@@ -1974,7 +1973,7 @@ ActionCallFrame(ActionExec& thread)
 
     env.drop(1);
 
-    MovieClip* target_sprite = target ? target->to_movie() : 0;
+    MovieClip* target_sprite = target ? target->to_movie() : nullptr;
     if (target_sprite) {
         target_sprite->call_frame_actions(frame_var);
     }
@@ -2013,7 +2012,7 @@ ActionGotoExpression(ActionExec& thread)
     std::string target_path;
     std::string frame_var;
 
-    DisplayObject* target = NULL;
+    DisplayObject* target = nullptr;
     if (parsePath(target_frame, target_path, frame_var)) {
         target = findTarget(env, target_path);
     }
@@ -2026,7 +2025,7 @@ ActionGotoExpression(ActionExec& thread)
         frame_var = target_frame;
     }
 
-    MovieClip *target_sprite = target ? target->to_movie() : NULL;
+    MovieClip *target_sprite = target ? target->to_movie() : nullptr;
     if (target_sprite) {
         size_t frame_number;
         if (!target_sprite->get_frame_number(frame_var, frame_number)) {
@@ -2076,7 +2075,7 @@ ActionDelete(ActionExec& thread)
 
     std::string propertyname = env.top(0).to_string();
 
-    as_object* obj(0);
+    as_object* obj(nullptr);
 
     // Behaviour is different according to version. For SWF7 and above,
     // the delete fails if there aren't two items on the stack. For SWF6
@@ -2210,7 +2209,7 @@ ActionCallFunction(ActionExec& thread)
     // is dropped from the stack.
     const std::string& funcname = env.pop().to_string();
 
-    as_object* super(0);
+    as_object* super(nullptr);
 
     as_object* this_ptr;
     as_value function = thread.getVariable(funcname, &this_ptr);
@@ -2371,7 +2370,7 @@ ActionInitArray(ActionExec& thread)
     // Fill the elements with the initial values from the stack.
     for (int i = 0; i < array_size; i++) {
         const ObjectURI& k = 
-            getURI(vm, boost::lexical_cast<std::string>(i));
+            getURI(vm, std::to_string(i));
         ao->set_member(k, env.pop());
     }
 
@@ -2734,7 +2733,7 @@ ActionCallMethod(ActionExec& thread)
     as_object* method_obj; // The method to call, as an object
 
     // The object to be the 'this' pointer during the call.
-    as_object* this_ptr(0);
+    as_object* this_ptr(nullptr);
 
     // Will be used to find super later
     ObjectURI methURI;
@@ -2797,7 +2796,7 @@ ActionCallMethod(ActionExec& thread)
     if (func && func->isBuiltin()) {
         // Do not construct super if method is a builtin
         // TODO: check if this is correct!!
-        super = 0;
+        super = nullptr;
     }
     else {
         super = obj->get_super(methURI);
@@ -2915,7 +2914,7 @@ ActionInstanceOf(ActionExec& thread)
 
     // Get the "instance" (but avoid implicit conversion of primitive values!)
     as_object* instance = env.top(1).is_object() ?
-        safeToObject(getVM(thread.env), env.top(1)) : 0;
+        safeToObject(getVM(thread.env), env.top(1)) : nullptr;
 
     // Invalid args!
     if (!super || ! instance) {
@@ -2994,13 +2993,13 @@ ActionBitwiseXor(ActionExec& thread)
     env.drop(1);
 }
 
-inline boost::uint32_t
-saneShiftParam(boost::int32_t value)
+inline std::uint32_t
+saneShiftParam(std::int32_t value)
 {
     // NOTE: ISO-IEC 14882:2003 5.8.1: "The behavior is undefined if the right
     // operand is negative, or greater than or equal to the length in bits of
     // the promoted left operand."
-    boost::uint32_t rv = value;
+    std::uint32_t rv = value;
     return rv % 32;
 }
 
@@ -3009,10 +3008,10 @@ ActionShiftLeft(ActionExec& thread)
 {
     as_environment& env = thread.env;
 
-    boost::uint32_t amount = saneShiftParam(toInt(env.top(0), getVM(env)));
-    boost::int32_t value = toInt(env.top(1), getVM(env));
+    std::uint32_t amount = saneShiftParam(toInt(env.top(0), getVM(env)));
+    std::int32_t value = toInt(env.top(1), getVM(env));
 
-    value = value << amount;
+    value = static_cast<std::uint32_t>(value) << amount;
 
     env.top(1) = value;
     env.drop(1);
@@ -3023,8 +3022,8 @@ ActionShiftRight(ActionExec& thread)
 {
     as_environment& env = thread.env;
 
-    boost::uint32_t amount = saneShiftParam(toInt(env.top(0), getVM(env)));
-    boost::int32_t value = toInt(env.top(1), getVM(env));
+    std::uint32_t amount = saneShiftParam(toInt(env.top(0), getVM(env)));
+    std::int32_t value = toInt(env.top(1), getVM(env));
 
     value = value >> amount;
 
@@ -3037,10 +3036,10 @@ ActionShiftRight2(ActionExec& thread)
 {
     as_environment& env = thread.env;
 
-    boost::uint32_t amount = saneShiftParam(toInt(env.top(0), getVM(env))); 
-    boost::int32_t value = toInt(env.top(1), getVM(env));
+    std::uint32_t amount = saneShiftParam(toInt(env.top(0), getVM(env)));
+    std::int32_t value = toInt(env.top(1), getVM(env));
 
-    value = static_cast<boost::uint32_t>(value) >> amount;
+    value = static_cast<std::uint32_t>(value) >> amount;
 
     env.top(1) = value;
     env.drop(1);
@@ -3157,24 +3156,24 @@ ActionDefineFunction2(ActionExec& thread)
     i += name.length() + 1; // add NULL-termination
 
     // Get number of arguments.
-    const boost::uint16_t nargs = code.read_uint16(i);
+    const std::uint16_t nargs = code.read_uint16(i);
     i += 2;
 
     // Get the count of local registers used by this function.
-    const boost::uint8_t register_count = code[i];
+    const std::uint8_t register_count = code[i];
     ++i;
 
     func->setRegisterCount(register_count);
 
     // Flags, for controlling register assignment of implicit args.
-    const boost::uint16_t flags = code.read_uint16(i);
+    const std::uint16_t flags = code.read_uint16(i);
     i += 2;
 
     func->setFlags(flags);
 
     // Get the register assignments and names of the arguments.
     for (size_t n = 0; n < nargs; ++n) {
-        boost::uint8_t arg_register = code[i];
+        std::uint8_t arg_register = code[i];
         ++i;
 
         // @@ security: watch out for possible missing terminator here!
@@ -3185,7 +3184,7 @@ ActionDefineFunction2(ActionExec& thread)
     }
 
     // Get the length of the actual function code.
-    boost::uint16_t code_size = code.read_int16(i);
+    std::uint16_t code_size = code.read_int16(i);
 
     // Check code_size value consistency
     const size_t actionbuf_size = thread.code.size();
@@ -3241,20 +3240,20 @@ ActionTry(ActionExec& thread)
 
     size_t i = thread.getCurrentPC() + 3; // skip tag id and length
 
-    boost::uint8_t flags = code[i];
+    std::uint8_t flags = code[i];
     ++i;
 
     bool doCatch = flags & 1;
     bool doFinally = flags & (1<<1);
     bool catchInRegister = flags&(1<<2);
-    boost::uint8_t reserved = flags&0xE0;
+    std::uint8_t reserved = flags&0xE0;
 
-    boost::uint16_t trySize = code.read_uint16(i); i += 2;
-    boost::uint16_t catchSize = code.read_uint16(i); i += 2;
-    boost::uint16_t finallySize = code.read_uint16(i); i += 2;
+    std::uint16_t trySize = code.read_uint16(i); i += 2;
+    std::uint16_t catchSize = code.read_uint16(i); i += 2;
+    std::uint16_t finallySize = code.read_uint16(i); i += 2;
 
-    const char* catchName = NULL;
-    boost::uint8_t catchRegister = 0;
+    const char* catchName = nullptr;
+    std::uint8_t catchRegister = 0;
 
     if (!doFinally) finallySize = 0;
     if (!doCatch) catchSize = 0;
@@ -3351,7 +3350,7 @@ ActionDefineFunction(ActionExec& thread)
 
 #ifndef NDEBUG
     // TODO: check effects of the following 'length' 
-    boost::int16_t length = code.read_int16(thread.getCurrentPC()+1);
+    std::int16_t length = code.read_int16(thread.getCurrentPC()+1);
     assert( length >= 0 );
 #endif
 
@@ -3396,7 +3395,7 @@ ActionDefineFunction(ActionExec& thread)
     }
 
     // Get the length of the actual function code.
-    const boost::uint16_t code_size = code.read_uint16(i);
+    const std::uint16_t code_size = code.read_uint16(i);
 
     func->setLength(code_size);
 
@@ -3451,7 +3450,7 @@ safeToObject(VM& vm, const as_value& val)
         return toObject(val, vm);
     }
     catch (const GnashException&) {
-        return 0;
+        return nullptr;
     }
 }
 
@@ -3497,7 +3496,7 @@ construct_object(as_function* ctor_as_func, as_environment& env,
 /// @param target        the target window, or _level1..10
 void
 commonGetURL(as_environment& env, as_value target,
-        const std::string& url, boost::uint8_t method)
+        const std::string& url, std::uint8_t method)
 {
     if (url.empty()) {
         log_error(_("Bogus empty GetUrl URL in SWF file, skipping"));
@@ -3565,7 +3564,7 @@ commonGetURL(as_environment& env, as_value target,
             sendVarsMethod, loadTargetFlag, loadVariableFlag);
 
     DisplayObject* target_ch = findTarget(env, target_string);
-    MovieClip* target_movie = target_ch ? target_ch->to_movie() : 0;
+    MovieClip* target_movie = target_ch ? target_ch->to_movie() : nullptr;
 
     if (loadVariableFlag) {
         log_debug("getURL2 loadVariable");
diff --git a/libcore/vm/ActionExec.cpp b/libcore/vm/ActionExec.cpp
index 4b2ac0c..be7b0b9 100644
--- a/libcore/vm/ActionExec.cpp
+++ b/libcore/vm/ActionExec.cpp
@@ -69,9 +69,8 @@ ActionExec::ActionExec(const Function& func, as_environment& newEnv,
     _func(&func),
     _this_ptr(this_ptr),
     _initialStackSize(0),
-    _originalTarget(0),
+    _originalTarget(nullptr),
     _origExecSWFVersion(0),
-    _tryList(),
     _returning(false),
     _abortOnUnload(false),
     pc(func.getStartPC()),
@@ -106,15 +105,14 @@ ActionExec::ActionExec(const action_buffer& abuf, as_environment& newEnv,
     :
     code(abuf),
     env(newEnv),
-    retval(0),
+    retval(nullptr),
     _withStack(),
     _scopeStack(),
-    _func(0),
-    _this_ptr(0),
+    _func(nullptr),
+    _this_ptr(nullptr),
     _initialStackSize(0),
-    _originalTarget(0),
+    _originalTarget(nullptr),
     _origExecSWFVersion(0),
-    _tryList(),
     _returning(false),
     _abortOnUnload(abortOnUnloaded),
     pc(0),
@@ -146,7 +144,7 @@ ActionExec::operator()()
     IF_VERBOSE_ACTION (
             log_action(_("at ActionExec operator() start, pc=%d"
                    ", stop_pc=%d, code.size=%d, func=%d, codeVersion=%d"),
-                pc, stop_pc, code.size(), _func ? _func : 0, codeVersion);
+                pc, stop_pc, code.size(), _func ? _func : nullptr, codeVersion);
         std::stringstream ss;
         getVM(env).dumpState(ss, STACK_DUMP_LIMIT);
 	    log_action(_("%s"), ss.str());
@@ -197,7 +195,7 @@ ActionExec::operator()()
                 }
 
                 // If we are in a try block, check to see if we have thrown.
-                TryBlock& t = _tryList.back();
+                TryBlock& t = _tryList.top();
                 
                 if (!processExceptions(t)) break;
 
@@ -216,7 +214,7 @@ ActionExec::operator()()
             }
 
             // Get the opcode.
-            boost::uint8_t action_id = code[pc];
+            std::uint8_t action_id = code[pc];
 
             IF_VERBOSE_ACTION (
                 log_action(_("PC:%d - EX: %s"), pc, code.disasm(pc));
@@ -231,7 +229,7 @@ ActionExec::operator()()
             else {
                 // action with extra data
                 // Note this converts from int to uint!
-                boost::uint16_t length(code.read_int16(pc + 1));
+                std::uint16_t length(code.read_int16(pc + 1));
 
                 next_pc = pc + length + 3;
                 if (next_pc > stop_pc) {
@@ -485,7 +483,7 @@ ActionExec::processExceptions(TryBlock& t)
                 log_debug("END: exception thrown in finally(%s). "
                           "Leaving on the stack", ex);
 #endif
-                _tryList.pop_back();
+                _tryList.pop();
                 return true;
             }
             else if (t._lastThrow.is_exception()) {
@@ -501,7 +499,7 @@ ActionExec::processExceptions(TryBlock& t)
                 env.push(t._lastThrow);
  
 
-                _tryList.pop_back();
+                _tryList.pop();
                 return true;
             }
 #ifdef GNASH_DEBUG_TRY
@@ -512,7 +510,7 @@ ActionExec::processExceptions(TryBlock& t)
             stop_pc = t._savedEndOffset;
             
             // Finished with this TryBlock.
-            _tryList.pop_back();
+            _tryList.pop();
             
             // Will break out of action execution.
             if (_returning) return false;
@@ -531,7 +529,7 @@ ActionExec::cleanupAfterRun()
     VM& vm = getVM(env);
 
     env.set_target(_originalTarget);
-    _originalTarget = NULL;
+    _originalTarget = nullptr;
 
     vm.setSWFVersion(_origExecSWFVersion);
 
@@ -571,7 +569,7 @@ ActionExec::skip_actions(size_t offset)
         }
 
         // Get the opcode.
-        const boost::uint8_t action_id = code[next_pc];
+        const std::uint8_t action_id = code[next_pc];
 
         // Set default next_pc offset, control flow action handlers
         // will be able to reset it.
@@ -581,7 +579,7 @@ ActionExec::skip_actions(size_t offset)
         }
         else {
             // action with extra data
-            const boost::int16_t length = code.read_int16(next_pc + 1);
+            const std::int16_t length = code.read_int16(next_pc + 1);
             assert(length >= 0);
             next_pc += length + 3;
         }
@@ -654,7 +652,7 @@ ActionExec::pushTryBlock(TryBlock t)
     t._savedEndOffset = stop_pc;
     stop_pc = t._catchOffset;
 
-    _tryList.push_back(t);
+    _tryList.push(std::move(t));
 }
 
 void
@@ -684,7 +682,7 @@ ActionExec::dumpActions(size_t from, size_t to, std::ostream& os)
     size_t lpc = from;
     while (lpc < to) {
         // Get the opcode.
-        const boost::uint8_t action_id = code[lpc];
+        const std::uint8_t action_id = code[lpc];
 
         os << " PC:" << lpc << " - EX: " <<  code.disasm(lpc) << std::endl;
 
@@ -696,7 +694,7 @@ ActionExec::dumpActions(size_t from, size_t to, std::ostream& os)
         } 
         else {
             // action with extra data
-            const boost::int16_t length = code.read_int16(lpc + 1);
+            const std::int16_t length = code.read_int16(lpc + 1);
             assert(length >= 0);
             lpc += length + 3;
         }
diff --git a/libcore/vm/ActionExec.h b/libcore/vm/ActionExec.h
index 546a342..4edd528 100644
--- a/libcore/vm/ActionExec.h
+++ b/libcore/vm/ActionExec.h
@@ -20,7 +20,7 @@
 #define GNASH_ACTIONEXEC_H
 
 #include <string>
-#include <list>
+#include <stack>
 #include <vector>
 #include <boost/noncopyable.hpp>
 
@@ -56,19 +56,21 @@ public:
 		_catchOffset(cur_off + try_size),
 		_finallyOffset(cur_off + try_size + catch_size),
 		_afterTriedOffset(cur_off + try_size + catch_size + finally_size),
+		_savedEndOffset(0),
 		_hasName(true),
-		_name(catchName),
+		_name(std::move(catchName)),
 		_registerIndex(0),
 		_tryState(TryBlock::TRY_TRY),
 		_lastThrow()
 	{}
 
 	TryBlock(size_t cur_off, size_t try_size, size_t catch_size,
-		size_t finally_size, boost::uint8_t register_index)
+		size_t finally_size, std::uint8_t register_index)
 		:
 		_catchOffset(cur_off + try_size),
 		_finallyOffset(cur_off + try_size + catch_size),
 		_afterTriedOffset(cur_off + try_size + catch_size + finally_size),
+		_savedEndOffset(0),
 		_hasName(false),
 		_name(),
 		_registerIndex(register_index),
@@ -157,7 +159,7 @@ public:
 	as_value* retval;
 
 	/// Is this execution thread a function call ?
-	bool isFunction() const { return _func != 0; }
+	bool isFunction() const { return _func != nullptr; }
 
 	/// Get the current 'this' pointer, for use in function calls
 	as_object* getThisPointer();
@@ -203,7 +205,7 @@ public:
 	///	                containing any found variable. If you aren't interested,
     ///                 pass null (default). If the variable does not belong
     ///                 to an object, target will be set to null.
-	as_value getVariable(const std::string& name, as_object** target = 0);
+	as_value getVariable(const std::string& name, as_object** target = nullptr);
 
 	/// Get current target.
 	//
@@ -310,7 +312,7 @@ private:
 
 	int _origExecSWFVersion;
 
-	std::list<TryBlock> _tryList;
+	std::stack<TryBlock> _tryList;
 
 	bool _returning;
 
diff --git a/libcore/vm/CallStack.h b/libcore/vm/CallStack.h
index 3ccb1df..c14f64c 100644
--- a/libcore/vm/CallStack.h
+++ b/libcore/vm/CallStack.h
@@ -85,7 +85,7 @@ public:
     /// @return     A pointer to the value in the register or 0 if no such
     ///             register exists.
     const as_value* getLocalRegister(size_t i) const {
-        if (i >= _registers.size()) return 0;
+        if (i >= _registers.size()) return nullptr;
         return &_registers[i];
     }
 
diff --git a/libcore/vm/ExecutableCode.h b/libcore/vm/ExecutableCode.h
index db1014d..215e5d9 100644
--- a/libcore/vm/ExecutableCode.h
+++ b/libcore/vm/ExecutableCode.h
@@ -92,10 +92,10 @@ public:
         ExecutableCode(nTarget)
     {}
 
-    EventCode(DisplayObject* nTarget, const BufferList& buffers)
+    EventCode(DisplayObject* nTarget, BufferList buffers)
         :
         ExecutableCode(nTarget),
-        _buffers(buffers)
+        _buffers(std::move(buffers))
     {}
 
     /// Add an action buffer to this event handler
@@ -114,15 +114,14 @@ public:
     }
 
     virtual void execute() {
-        for (BufferList::iterator it = _buffers.begin(),
-            itEnd = _buffers.end(); it != itEnd; ++it) {
+        for (const action_buffer* buffer : _buffers) {
 
             // onClipEvents code are guarded by isDestroyed(),
             // still might be also guarded by unloaded()
             if (target()->isDestroyed()) break;
 
-            PoolGuard guard(getVM(target()->get_environment()), 0);
-            ActionExec exec(*(*it), target()->get_environment(), false);
+            PoolGuard guard(getVM(target()->get_environment()), nullptr);
+            ActionExec exec(*buffer, target()->get_environment(), false);
             exec();
         }
     }
@@ -147,14 +146,14 @@ class DelayedFunctionCall : public ExecutableCode
 public:
 
     DelayedFunctionCall(DisplayObject* target,
-            as_object* obj, const ObjectURI& name,
-            const as_value& arg1, const as_value& arg2)
+            as_object* obj, ObjectURI name,
+            as_value arg1, as_value arg2)
         :
         ExecutableCode(target),
         _obj(obj),
-        _name(name),
-        _arg1(arg1),
-        _arg2(arg2)
+        _name(std::move(name)),
+        _arg1(std::move(arg1)),
+        _arg2(std::move(arg2))
     {}
 
     virtual void execute() {
diff --git a/libcore/vm/Machine.cpp b/libcore/vm/Machine.cpp
index 1cd2d35..94c9941 100644
--- a/libcore/vm/Machine.cpp
+++ b/libcore/vm/Machine.cpp
@@ -68,7 +68,7 @@ public:
 namespace {
 
 inline const std::string&
-pool_string(boost::uint32_t index, AbcBlock *pool)
+pool_string(std::uint32_t index, AbcBlock *pool)
 {
 	if (!pool) throw ASException();
     try {
@@ -80,7 +80,7 @@ pool_string(boost::uint32_t index, AbcBlock *pool)
 }
 
 inline int
-pool_int(boost::uint32_t index, AbcBlock *pool)
+pool_int(std::uint32_t index, AbcBlock *pool)
 {
 	if (!pool) throw ASException();
     try {
@@ -92,7 +92,7 @@ pool_int(boost::uint32_t index, AbcBlock *pool)
 }
 
 inline unsigned int
-pool_uint(boost::uint32_t index, AbcBlock *pool)
+pool_uint(std::uint32_t index, AbcBlock *pool)
 {
 	if (!pool) throw ASException();
     try {
@@ -104,7 +104,7 @@ pool_uint(boost::uint32_t index, AbcBlock *pool)
 }
 
 inline double
-pool_double(boost::uint32_t index, AbcBlock *pool)
+pool_double(std::uint32_t index, AbcBlock *pool)
 {
 	if (!pool) throw ASException();
     try {
@@ -116,7 +116,7 @@ pool_double(boost::uint32_t index, AbcBlock *pool)
 }
 
 inline Namespace*
-pool_namespace(boost::uint32_t index, AbcBlock *pool)
+pool_namespace(std::uint32_t index, AbcBlock *pool)
 {
 	if (!pool) throw ASException();
     try {
@@ -129,7 +129,7 @@ pool_namespace(boost::uint32_t index, AbcBlock *pool)
 }
 
 inline Method*
-pool_method(boost::uint32_t index, AbcBlock* pool)
+pool_method(std::uint32_t index, AbcBlock* pool)
 {
 	if (!pool) throw ASException();
     try {
@@ -141,7 +141,7 @@ pool_method(boost::uint32_t index, AbcBlock* pool)
 }
 
 inline Class*
-pool_script(boost::uint32_t index, AbcBlock* pool)
+pool_script(std::uint32_t index, AbcBlock* pool)
 {
 	if (!pool) throw ASException();
     try {
@@ -154,7 +154,7 @@ pool_script(boost::uint32_t index, AbcBlock* pool)
 
 // Don't make this a reference or you'll taint the pool.
 inline MultiName
-pool_name(boost::uint32_t index, AbcBlock* pool)
+pool_name(std::uint32_t index, AbcBlock* pool)
 {
 	if (!pool) throw ASException();
 	try {
@@ -291,7 +291,7 @@ inline bool abstractEquality(const as_value& a, const as_value& b,
 
 #define JUMPIF(jtruth)														\
 {																			\
-	boost::int32_t jumpOffset = mStream->read_S24();								\
+	std::int32_t jumpOffset = mStream->read_S24();								\
 	if (jtruth)																\
 		mStream->seekBy(jumpOffset);										\
 	break;																	\
@@ -506,7 +506,7 @@ Machine::execute()
                 /// this the default XML namespace. 
                 case SWF::ABC_ACTION_DXNS:
                 {
-                    boost::uint32_t soffset = mStream->read_V32();
+                    std::uint32_t soffset = mStream->read_V32();
                     const std::string& uri = pool_string(soffset, mPoolObject);
 
                     ClassHierarchy& ch = _global->classHierarchy();
@@ -539,7 +539,7 @@ Machine::execute()
                 /// Equivalent: ACTION_DELETE
                 case SWF::ABC_ACTION_KILL:
                 {
-                    boost::uint32_t regNum = mStream->read_V32();
+                    std::uint32_t regNum = mStream->read_V32();
                     setRegister(regNum, as_value());
                     break;
                 }
@@ -632,7 +632,7 @@ Machine::execute()
                 /// Equivalent: ACTION_BRANCHALWAYS
                 case SWF::ABC_ACTION_JUMP:
                 {
-                    const boost::int32_t bytes = mStream->read_S24();
+                    const std::int32_t bytes = mStream->read_S24();
                     log_abc("ABC_ACTION_JUMP: Jumping %d bytes.",bytes);
                     mStream->seekBy(bytes);
                     break;
@@ -649,7 +649,7 @@ Machine::execute()
                 /// Equivalent: ACTION_BRANCHIFTRUE
                 case SWF::ABC_ACTION_IFTRUE:
                 {
-                    const boost::int32_t bytes = mStream->read_S24();
+                    const std::int32_t bytes = mStream->read_S24();
                     if (pop_stack().to_bool()) {
                         log_abc("ABC_ACTION_IFTRUE: Jumping %d bytes.",bytes);
                         mStream->seekBy(bytes);
@@ -671,7 +671,7 @@ Machine::execute()
                 /// ABC_ACTION_JUMP does.
                 case SWF::ABC_ACTION_IFFALSE:
                 {
-                    const boost::int32_t bytes = mStream->read_S24();
+                    const std::int32_t bytes = mStream->read_S24();
                     const bool truth = pop_stack().to_bool();
                     if (!truth) {
                         log_abc("ABC_ACTION_IFFALSE: Jumping %d bytes.", bytes);
@@ -691,7 +691,7 @@ Machine::execute()
                 /// ABC_ACTION_JUMP does.
                 case SWF::ABC_ACTION_IFEQ:
                 {
-                    const boost::int32_t bytes = mStream->read_S24();
+                    const std::int32_t bytes = mStream->read_S24();
                     const as_value b = pop_stack();
                     const as_value a = pop_stack();
                     if (a.equals(b)) {
@@ -717,7 +717,7 @@ Machine::execute()
                 {
                     as_value a = pop_stack();
                     as_value b = pop_stack();
-                    const boost::int32_t bytes = mStream->read_S24();
+                    const std::int32_t bytes = mStream->read_S24();
                     if (!a.equals(b)) {
                         log_abc("Jumping... %d bytes.", bytes);
                         mStream->seekBy(bytes);
@@ -741,7 +741,7 @@ Machine::execute()
                 {
                     as_value b = pop_stack();
                     as_value a = pop_stack();
-                    const boost::int32_t bytes = mStream->read_S24();
+                    const std::int32_t bytes = mStream->read_S24();
                     const bool jump = newLessThan(a, b, _vm).to_bool();
                     if (jump) {
                         log_abc("Jumping... %d bytes.", bytes);
@@ -781,7 +781,7 @@ Machine::execute()
                 /// Do: If a > b move by jump in stream, as ABC_ACTION_JUMP does.
                 case SWF::ABC_ACTION_IFGT:
                 {
-                    boost::int32_t bytes = mStream->read_S24();
+                    std::int32_t bytes = mStream->read_S24();
                     bool truth;
                     // If b < a, then a > b, with undefined as false
                     ABSTRACT_COMPARE(truth, _stack.top(0), _stack.top(1), false);
@@ -865,12 +865,12 @@ Machine::execute()
                     std::size_t npos = mStream->tellg();
                     if (!_stack.top(0).is_number()) throw ASException();
 
-                    boost::uint32_t index =
+                    std::uint32_t index =
                         toNumber(_stack.top(0), getVM(fn));
                     _stack.drop(1);
 
                     mStream->seekBy(3); // Skip the intial offset.
-                    boost::uint32_t cases = mStream->read_V32();
+                    std::uint32_t cases = mStream->read_V32();
                     // Read from our original position and use it to skip
                     // if the case is out of range.
                     if (index > cases) {
@@ -879,7 +879,7 @@ Machine::execute()
                     }
                     else {
                         mStream->seekTo(npos + 3 * (index + 1));
-                        boost::uint32_t newpos = mStream->read_S24();
+                        std::uint32_t newpos = mStream->read_S24();
                         mStream->seekTo(npos - 1 + newpos);
                     }
                     break;
@@ -954,7 +954,7 @@ Machine::execute()
                     ENSURE_NUMBER(_stack.top(0));
                     ENSURE_OBJECT(_stack.top(1));
                     as_object *obj = _stack.top(1).to_object(*_global);
-                    const boost::uint32_t index =
+                    const std::uint32_t index =
                         toNumber(_stack.top(0), getVM(fn));
                     
                     if (!obj) {
@@ -986,7 +986,7 @@ Machine::execute()
                     ENSURE_NUMBER(_stack.top(0));
                     ENSURE_OBJECT(_stack.top(1));
                     as_object *obj = _stack.top(1).to_object(*_global);
-                    boost::uint32_t index =
+                    std::uint32_t index =
                         toNumber(_stack.top(0), getVM(fn));
                     _stack.drop(1);
                     assert(obj);
@@ -1026,7 +1026,7 @@ Machine::execute()
                     ENSURE_NUMBER(_stack.top(0));
                     ENSURE_OBJECT(_stack.top(1));
                     as_object *obj = _stack.top(1).to_object(*_global);
-                    const boost::uint32_t index =
+                    const std::uint32_t index =
                         toNumber(_stack.top(0), getVM(fn));
                     const Property *b = obj->getByIndex(index);
                     _stack.drop(1);
@@ -1044,7 +1044,7 @@ Machine::execute()
                 ///  byte -- as a raw byte
                 case SWF::ABC_ACTION_PUSHBYTE:
                 {
-                    const boost::int8_t b = mStream->read_s8();
+                    const std::int8_t b = mStream->read_s8();
                     push_stack(b);
                     break;
                 }
@@ -1055,8 +1055,8 @@ Machine::execute()
                 ///  value -- as a raw integer
                 case SWF::ABC_ACTION_PUSHSHORT:
                 {
-                    const boost::int16_t s =
-                        static_cast<boost::int16_t>(mStream->read_V32());
+                    const std::int16_t s =
+                        static_cast<std::int16_t>(mStream->read_V32());
                     push_stack(s);
                     break;
                 }
@@ -1190,8 +1190,8 @@ Machine::execute()
                 /// first logical property.
                 case SWF::ABC_ACTION_HASNEXT2:
                 {
-                    const boost::int32_t oindex = mStream->read_V32();
-                    const boost::int32_t iindex = mStream->read_V32();
+                    const std::int32_t oindex = mStream->read_V32();
+                    const std::int32_t iindex = mStream->read_V32();
 
                     const as_value& objv = getRegister(oindex);
                     const as_value& indexv = getRegister(iindex);
@@ -1209,7 +1209,7 @@ Machine::execute()
                         break;
                     }
                     
-                    boost::uint32_t index = toInt(indexv);
+                    std::uint32_t index = toInt(indexv);
 
                     as_object *owner = 0;
                     int next = obj->nextIndex(index, &owner);
@@ -1243,7 +1243,7 @@ Machine::execute()
                 /// the function from this information and bind the current scope.
                 case SWF::ABC_ACTION_NEWFUNCTION:
                 {
-                    boost::int32_t method_index = mStream->read_V32();
+                    std::int32_t method_index = mStream->read_V32();
                     log_abc("Creating new abc_function: method index=%u",method_index);
                     Method *m = pool_method(method_index, mPoolObject);
                     abc_function* new_function = m->getPrototype();
@@ -1262,7 +1262,7 @@ Machine::execute()
                 ///  value -- the value returned by obj->func(arg1, ...., argN)
                 case SWF::ABC_ACTION_CALL:
                 {
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t argc = mStream->read_V32();
                     ENSURE_OBJECT(_stack.top(argc + 1)); // The func
                     ENSURE_OBJECT(_stack.top(argc)); // The 'this'
                     as_function *f = _stack.top(argc + 1).to_function();
@@ -1289,7 +1289,7 @@ Machine::execute()
                 ///  obj(arg1, ..., argN)
                 case SWF::ABC_ACTION_CONSTRUCT:
                 {
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t argc = mStream->read_V32();
                     as_function *f = _stack.top(argc).to_function();
                     if (!f) {
                         log_abc("CONSTRUCT: No function on stack!");
@@ -1310,8 +1310,8 @@ Machine::execute()
                 ///         ..., argN)
                 case SWF::ABC_ACTION_CALLMETHOD:
                 {
-                    boost::uint32_t dispatch_id = mStream->read_V32() - 1;
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t dispatch_id = mStream->read_V32() - 1;
+                    std::uint32_t argc = mStream->read_V32();
                     ENSURE_OBJECT(_stack.top(argc));
                     as_object *obj = _stack.top(argc).to_object(*_global);
                     const Property *f = obj->getByIndex(dispatch_id);
@@ -1346,7 +1346,7 @@ Machine::execute()
                 case SWF::ABC_ACTION_CALLSTATIC:
                 {
                     Method *m = pool_method(mStream->read_V32(), mPoolObject);
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t argc = mStream->read_V32();
                     as_function *func = m->getPrototype();
                     ENSURE_OBJECT(_stack.top(argc));
                     as_object *obj = _stack.top(argc).to_object(*_global);
@@ -1368,7 +1368,7 @@ Machine::execute()
                 case SWF::ABC_ACTION_CALLSUPERVOID:
                 {
                     MultiName a = pool_name(mStream->read_V32(), mPoolObject);
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t argc = mStream->read_V32();
                     int dropsize = completeName(a);
                     ENSURE_OBJECT(_stack.top(argc + dropsize));
                     _stack.drop(dropsize);
@@ -1419,7 +1419,7 @@ Machine::execute()
                 {
                     as_value result;
                     MultiName a = pool_name(mStream->read_V32(), mPoolObject);
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t argc = mStream->read_V32();
 
                     fn_call::Args args;
                     get_args(argc, args);
@@ -1537,7 +1537,7 @@ Machine::execute()
                 ///  .
                 case SWF::ABC_ACTION_CONSTRUCTSUPER:
                 {
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t argc = mStream->read_V32();
                     fn_call::Args args;
                     get_args(argc, args);
                     
@@ -1575,7 +1575,7 @@ Machine::execute()
                     as_environment env = as_environment(_vm);
                     MultiName a = pool_name(mStream->read_V32(), mPoolObject);
                     
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t argc = mStream->read_V32();
                     fn_call::Args args;
                     get_args(argc, args);
                     
@@ -1652,7 +1652,7 @@ Machine::execute()
                 case SWF::ABC_ACTION_NEWOBJECT:
                 {
                     as_object *obj = _global->createObject();
-                    boost::uint32_t argc = mStream->read_V32();
+                    std::uint32_t argc = mStream->read_V32();
                     int i = argc;
                     while (i--)
                     {
@@ -1675,8 +1675,8 @@ Machine::execute()
             ///  array -- an array { value_1, value_2, ..., value_n }
                 case SWF::ABC_ACTION_NEWARRAY:
                 {
-                    boost::uint32_t asize = mStream->read_V32();
-                    boost::uint32_t i = asize;
+                    std::uint32_t asize = mStream->read_V32();
+                    std::uint32_t i = asize;
 
                     as_object* arr = _global->createArray();
                     while (i--) {
@@ -1718,7 +1718,7 @@ Machine::execute()
                 ///     lifetime(?))
                 case SWF::ABC_ACTION_NEWCLASS:
                 {
-                    boost::uint32_t cid = mStream->read_V32();
+                    std::uint32_t cid = mStream->read_V32();
                     log_abc("Class index: %s", cid);
                     Class* c = pool_script(cid, mPoolObject);
                     log_abc("Creating new class id=%u name=%s", c->getName(),
@@ -1911,7 +1911,7 @@ Machine::execute()
                 ///  value
                 case SWF::ABC_ACTION_GETLOCAL:
                 {
-                    boost::uint32_t index = mStream->read_V32();
+                    std::uint32_t index = mStream->read_V32();
                     push_stack(getRegister(index));
                     break;
                 }
@@ -1925,7 +1925,7 @@ Machine::execute()
                 ///  .
                 case SWF::ABC_ACTION_SETLOCAL:
                 {
-                    boost::uint32_t index = mStream->read_V32();
+                    std::uint32_t index = mStream->read_V32();
                     log_abc("Register index: %u",index);
                     setRegister(index, pop_stack());
                     break;
@@ -1946,7 +1946,7 @@ Machine::execute()
                 ///  scope -- The scope object at depth
                 case SWF::ABC_ACTION_GETSCOPEOBJECT:
                 {
-                    boost::uint8_t depth = mStream->read_u8();
+                    std::uint8_t depth = mStream->read_u8();
                     push_stack(get_scope_stack(depth));
                     print_scope_stack();
                     break;
@@ -2020,7 +2020,7 @@ Machine::execute()
                 /// from the context.
                 case SWF::ABC_ACTION_INITPROPERTY:
                 {
-                    boost::uint32_t index = mStream->read_V32();
+                    std::uint32_t index = mStream->read_V32();
                     MultiName a = pool_name(index, mPoolObject);
                     as_value v = pop_stack();
                     // TODO: If multiname is a runtime mutiname we need to also
@@ -2079,7 +2079,7 @@ Machine::execute()
                 case SWF::ABC_ACTION_GETSLOT:
                 {
                     as_value val;
-                    boost::uint32_t sindex = mStream->read_V32();
+                    std::uint32_t sindex = mStream->read_V32();
                     as_object* object = pop_stack().to_object(*_global);
                     if (!object) {
                         log_abc("GETSLOT: Did not find expected object on "
@@ -2109,7 +2109,7 @@ Machine::execute()
                 /// equal to the number of slots (so one-based index?).
                 case SWF::ABC_ACTION_SETSLOT:
                 {
-                    boost::uint32_t sindex = mStream->read_V32();
+                    std::uint32_t sindex = mStream->read_V32();
                     as_value value = pop_stack();
                     as_value object = pop_stack();
                     log_abc("SETSLOT object: %s, value: %s, index: %s",
@@ -2151,7 +2151,7 @@ Machine::execute()
                 /// NB: Deprecated
                 case SWF::ABC_ACTION_GETGLOBALSLOT:
                 {
-                    boost::uint32_t sindex = mStream->read_V32();
+                    std::uint32_t sindex = mStream->read_V32();
                     if (!sindex)
                         throw ASException();
                     --sindex;
@@ -2170,7 +2170,7 @@ Machine::execute()
                 /// NB: Deprecated
                 case SWF::ABC_ACTION_SETGLOBALSLOT:
                 {
-                    boost::uint32_t sindex = mStream->read_V32();
+                    std::uint32_t sindex = mStream->read_V32();
                     if (!sindex)
                         throw ASException();
                     --sindex;
@@ -2228,7 +2228,7 @@ Machine::execute()
                 ///  int_value -- value as an unsigned integer object
                 case SWF::ABC_ACTION_CONVERT_U:
                 case SWF::ABC_ACTION_COERCE_U:
-                    _stack.top(0) = static_cast<boost::uint32_t>(
+                    _stack.top(0) = static_cast<std::uint32_t>(
                             toNumber(_stack.top(0), getVM(fn)));
                     break;
 
@@ -2412,7 +2412,7 @@ Machine::execute()
                 /// Frame: Load i from frame_addr and increment it.
                 case SWF::ABC_ACTION_INCLOCAL:
                 {
-                    boost::uint32_t foff = mStream->read_V32();
+                    std::uint32_t foff = mStream->read_V32();
                     setRegister(foff, toNumber(getRegister(foff), getVM(fn)) + 1);
                     break;
                 }
@@ -2433,7 +2433,7 @@ Machine::execute()
                 /// Frame: Load i from frame_addr and decrement it.
                 case SWF::ABC_ACTION_DECLOCAL:
                 {
-                    const boost::uint32_t foff = mStream->read_V32();
+                    const std::uint32_t foff = mStream->read_V32();
                     setRegister(foff, toNumber(getRegister(foff), getVM(fn)) - 1);
                     break;
                 }
@@ -2561,7 +2561,7 @@ Machine::execute()
                 case SWF::ABC_ACTION_URSHIFT:
                 {
                     _stack.top(1) =
-                        static_cast<boost::uint32_t>(toNumber(_stack.top(1), getVM(fn)))
+                        static_cast<std::uint32_t>(toNumber(_stack.top(1), getVM(fn)))
                         >> toInt(_stack.top(0));
                     _stack.drop(1);
                     break;
@@ -2784,7 +2784,7 @@ Machine::execute()
                 /// not double
                 case SWF::ABC_ACTION_INCLOCAL_I:
                 {
-                    const boost::uint32_t foff = mStream->read_V32();
+                    const std::uint32_t foff = mStream->read_V32();
                     setRegister(foff,  toInt(getRegister(foff)) + 1);
                     break;
                 }
@@ -2794,7 +2794,7 @@ Machine::execute()
                 /// not double
                 case SWF::ABC_ACTION_DECLOCAL_I:
                 {
-                    const boost::uint32_t foff = mStream->read_V32();
+                    const std::uint32_t foff = mStream->read_V32();
                     setRegister(foff, toInt(getRegister(foff)) - 1);
                     break;
                 }
@@ -3350,7 +3350,7 @@ Machine::get_args(size_t argc, fn_call::Args& args)
 }
 
 void
-Machine::clearRegisters(boost::uint32_t maxRegisters)
+Machine::clearRegisters(std::uint32_t maxRegisters)
 {
 	_registers.clear();
 	_registers.resize(maxRegisters);
diff --git a/libcore/vm/Machine.h b/libcore/vm/Machine.h
index ce6c891..0cd9893 100644
--- a/libcore/vm/Machine.h
+++ b/libcore/vm/Machine.h
@@ -300,11 +300,11 @@ private:
 
 	void get_args(size_t argc, FunctionArgs<as_value>& args);
 	
-	void load_function(CodeStream* stream, boost::uint32_t maxRegisters);
+	void load_function(CodeStream* stream, std::uint32_t maxRegisters);
 
 	void executeCodeblock(CodeStream* stream);
 
-	void clearRegisters(boost::uint32_t maxRegsiters);
+	void clearRegisters(std::uint32_t maxRegsiters);
 
 	const as_value& getRegister(int index){
 		log_abc("Getting value at a register %d ", index);
@@ -340,7 +340,7 @@ private:
 		return _scopeStack.pop();
 	}
 
-	as_object* get_scope_stack(boost::uint8_t depth) const {
+	as_object* get_scope_stack(std::uint8_t depth) const {
 		log_abc("Getting value from scope stack %u from the bottom.",
                 depth | 0x0);
 		return _scopeStack.value(depth);
diff --git a/libcore/vm/SafeStack.h b/libcore/vm/SafeStack.h
index 01b33e4..4dd9444 100644
--- a/libcore/vm/SafeStack.h
+++ b/libcore/vm/SafeStack.h
@@ -215,7 +215,7 @@ public:
 	/// Delete the allocated data. 
 	~SafeStack()
 	{
-		for (StackSize i = 0; i < _data.size(); ++i) delete [] _data[i];
+		for (auto& elem : _data) delete [] elem;
 	}
 
 private:
diff --git a/libcore/vm/VM.cpp b/libcore/vm/VM.cpp
index 4214097..f6f13e9 100644
--- a/libcore/vm/VM.cpp
+++ b/libcore/vm/VM.cpp
@@ -59,7 +59,7 @@ VM::VM(movie_root& root, VirtualClock& clock)
 	_stack(),
     _shLib(new SharedObjectLibrary(*this)),
     _rng(clock.elapsed()),
-    _constantPool(0)
+    _constantPool(nullptr)
 {
 	NSV::loadStrings(_stringTable);
     _global->registerClasses();
@@ -199,7 +199,7 @@ VM::getRegister(size_t index)
 
     // Otherwise it can be in the global registers.
     if (index < _globalRegisters.size()) return &_globalRegisters[index];
-    return 0;
+    return nullptr;
 }
 
 void
@@ -241,7 +241,7 @@ VM::pushCallFrame(UserFunction& func)
     // TODO: override from gnashrc.
     
     // A stack size of 0 is apparently legitimate.
-    const boost::uint16_t recursionLimit = getRoot().getRecursionLimit();
+    const std::uint16_t recursionLimit = getRoot().getRecursionLimit();
 
     // Don't proceed if local call frames would reach the recursion limit.
     if (_callStack.size() + 1 >= recursionLimit) {
@@ -253,7 +253,7 @@ VM::pushCallFrame(UserFunction& func)
         throw ActionLimitException(ss.str()); 
     }
 
-    _callStack.push_back(CallFrame(&func));
+    _callStack.emplace_back(&func);
     return _callStack.back();
 }
 
@@ -276,9 +276,9 @@ NativeFunction*
 VM::getNative(unsigned int x, unsigned int y) const
 {
     AsNativeTable::const_iterator row = _asNativeTable.find(x);
-    if (row == _asNativeTable.end()) return 0;
+    if (row == _asNativeTable.end()) return nullptr;
     FuncMap::const_iterator col = row->second.find(y);
-    if (col == row->second.end()) return 0;
+    if (col == row->second.end()) return nullptr;
     Global_as::ASFunction fun = col->second;
 
     NativeFunction* f = new NativeFunction(*_global, fun);
@@ -459,7 +459,7 @@ toObject(const as_value& v, VM& vm)
     return v.to_object(vm);
 }
 
-boost::int32_t
+std::int32_t
 toInt(const as_value& v, const VM& vm)
 {
     const double d = v.to_number(vm.getSWFVersion());
@@ -468,16 +468,16 @@ toInt(const as_value& v, const VM& vm)
         return 0;
     }
 
-    typedef std::numeric_limits<boost::int32_t> limit;
+    typedef std::numeric_limits<std::int32_t> limit;
     if (d >= limit::min() && d <= limit::max()) {
         return d;
     }
 
     if (d < 0) {   
-        return - static_cast<boost::uint32_t>(std::fmod(-d, 4294967296.0));
+        return - static_cast<std::uint32_t>(std::fmod(-d, 4294967296.0));
     }
     
-    return static_cast<boost::uint32_t>(std::fmod(d, 4294967296.0));
+    return static_cast<std::uint32_t>(std::fmod(d, 4294967296.0));
 }
 
 /// Force type to number.
diff --git a/libcore/vm/VM.h b/libcore/vm/VM.h
index 6e2edb0..b3a54d9 100644
--- a/libcore/vm/VM.h
+++ b/libcore/vm/VM.h
@@ -26,8 +26,8 @@
 
 #include <map>
 #include <memory> 
-#include <boost/array.hpp>
-#include <boost/cstdint.hpp> 
+#include <array>
+#include <cstdint>
 #include <boost/random/mersenne_twister.hpp>  // for mt11213b
 #include <boost/noncopyable.hpp>
 
@@ -270,13 +270,13 @@ private:
 
 	SafeStack<as_value>	_stack;
 
-    typedef boost::array<as_value, 4> GlobalRegisters;
+    typedef std::array<as_value, 4> GlobalRegisters;
     GlobalRegisters _globalRegisters;
 
 	CallStack _callStack;
 
 	/// Library of SharedObjects. Owned by the VM.
-    std::auto_ptr<SharedObjectLibrary> _shLib;
+    std::unique_ptr<SharedObjectLibrary> _shLib;
 
     RNG _rng;
 
@@ -425,7 +425,7 @@ as_object* toObject(const as_value& v, VM& vm);
 /// @param val  The value to return as an int.
 /// @param vm   The VM to use for the conversion.
 /// @return     The integer value of the passed as_value.
-boost::int32_t toInt(const as_value& val, const VM& vm);
+std::int32_t toInt(const as_value& val, const VM& vm);
 
 /// Force type to number.
 //
diff --git a/libcore/vm/fn_call.h b/libcore/vm/fn_call.h
index 6d234f3..16d7fb0 100644
--- a/libcore/vm/fn_call.h
+++ b/libcore/vm/fn_call.h
@@ -61,21 +61,31 @@ public:
     typedef std::vector<T> container_type;
     typedef T value_type;
 
-    FunctionArgs() {}
+    FunctionArgs() = default;
+    FunctionArgs(FunctionArgs&& other) = default;
 
     /// The copy constructor copies all the arguments.
-    FunctionArgs(const FunctionArgs& other)
-        :
-        _v(other._v)
-    {}
+    FunctionArgs(const FunctionArgs& other) = default;
+
+    FunctionArgs& operator+=(T t) {
+        _v.push_back(std::move(t));
+        return *this;
+    }
+
+    FunctionArgs& operator,(T t) {
+        _v.push_back(std::move(t));
+        return *this;
+    }
 
-    FunctionArgs& operator+=(const T& t) {
-        _v.push_back(t);
+    template <typename U>
+    FunctionArgs& operator,(U&& u) {
+        _v.emplace_back(std::forward<U>(u));
         return *this;
     }
 
-    FunctionArgs& operator,(const T& t) {
-        _v.push_back(t);
+    template <typename U>
+    FunctionArgs& operator+=(U&& u) {
+        _v.emplace_back(std::forward<U>(u));
         return *this;
     }
 
@@ -119,12 +129,12 @@ public:
     ///                     calculated from the this pointer (if that is not
     ///                     null) whenever a function requires it.
     fn_call(as_object* this_in, const as_environment& env_in,
-            Args& args, as_object* sup = 0, bool isNew = false)
+            Args& args, as_object* sup = nullptr, bool isNew = false)
         :
         this_ptr(this_in),
         super(sup),
         nargs(args.size()),
-        callerDef(0),
+        callerDef(nullptr),
         _env(env_in),
         _new(isNew)
     {
@@ -134,9 +144,9 @@ public:
     fn_call(as_object* this_in, const as_environment& env_in)
         :
         this_ptr(this_in),
-        super(0),
+        super(nullptr),
         nargs(0),
-        callerDef(0),
+        callerDef(nullptr),
         _env(env_in),
         _new(false)
 	{
@@ -252,7 +262,7 @@ struct IsDisplayObject
 {
     typedef T value_type;
     value_type* operator()(const as_object* o) const {
-        if (!o) return 0;
+        if (!o) return nullptr;
         return dynamic_cast<T*>(o->displayObject());
     }
 };
diff --git a/libdevice/DeviceGlue.cpp b/libdevice/DeviceGlue.cpp
index 30dae4f..4f454f8 100644
--- a/libdevice/DeviceGlue.cpp
+++ b/libdevice/DeviceGlue.cpp
@@ -51,7 +51,7 @@ DeviceGlue::setDevice(renderer::GnashDevice::dtype_t dtype)
 #ifdef BUILD_RAWFB_DEVICE
         case renderer::GnashDevice::RAWFB:
         {
-            _device.reset(new renderer::rawfb::RawFBDevice(0, 0));
+            _device.reset(new renderer::rawfb::RawFBDevice(0, nullptr));
             break;
         }
 #endif
diff --git a/libdevice/DeviceGlue.h b/libdevice/DeviceGlue.h
index 37c51cc..ca5ddda 100644
--- a/libdevice/DeviceGlue.h
+++ b/libdevice/DeviceGlue.h
@@ -24,8 +24,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/shared_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #include "GnashDevice.h"
 
@@ -45,7 +44,7 @@ public:
     /// available.
     ///
     /// @return a list of devices
-    boost::shared_array<renderer::GnashDevice::dtype_t> probeDevices() {
+    std::unique_ptr<renderer::GnashDevice::dtype_t[]> probeDevices() {
         GNASH_REPORT_FUNCTION;
         
         size_t total = 0;
@@ -62,7 +61,7 @@ public:
         total++;
 #endif
         total++;                // add one more for the list terminator
-        boost::shared_array<renderer::GnashDevice::dtype_t> devs
+        std::unique_ptr<renderer::GnashDevice::dtype_t[]> devs
             (new renderer::GnashDevice::dtype_t[total]);
         // terminate the list so it can easily be walked through later.
         devs[--total] = renderer::GnashDevice::GNASH_NODEV;
@@ -137,7 +136,7 @@ public:
     }
 
 protected:
-    boost::scoped_ptr<renderer::GnashDevice> _device;
+    std::unique_ptr<renderer::GnashDevice> _device;
 };
     
 } // namespace gnash
diff --git a/libdevice/GnashDevice.h b/libdevice/GnashDevice.h
index 24254e0..c809823 100644
--- a/libdevice/GnashDevice.h
+++ b/libdevice/GnashDevice.h
@@ -24,7 +24,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include "log.h"
 
 /// @note This file is the base class for all low level rendering and display
@@ -113,10 +113,10 @@ struct GnashDevice
     // These are only used for the Framebuffer
 
     /// Get the memory from the real framebuffer
-    virtual boost::uint8_t *getFBMemory() { return 0; };
+    virtual std::uint8_t *getFBMemory() { return nullptr; };
     
     /// Get the memory from an offscreen buffer to support Double Buffering
-    virtual boost::uint8_t *getOffscreenBuffer() { return 0; };
+    virtual std::uint8_t *getOffscreenBuffer() { return nullptr; };
 
     virtual size_t getFBMemSize() { return 0; };
 
diff --git a/libdevice/directfb/DirectFBDevice.h b/libdevice/directfb/DirectFBDevice.h
index a7b29e5..468b1c2 100644
--- a/libdevice/directfb/DirectFBDevice.h
+++ b/libdevice/directfb/DirectFBDevice.h
@@ -24,8 +24,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #ifdef HAVE_DIRECTFB_H
 # include <directfb/directfb.h>
diff --git a/libdevice/directfb/Renderer_DirectFB.cpp b/libdevice/directfb/Renderer_DirectFB.cpp
index 6c5d1be..f322de9 100644
--- a/libdevice/directfb/Renderer_DirectFB.cpp
+++ b/libdevice/directfb/Renderer_DirectFB.cpp
@@ -38,7 +38,7 @@
 #include "Renderer_DirectFB.h"
 
 #include <boost/utility.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 
 // Defined to 1 to disable (slow) anti-aliasing with the accumulation buffer
 #define NO_ANTIALIASING 1
@@ -83,7 +83,7 @@ Renderer_DirectFB::init(float x, float y)
 }
 
 CachedBitmap *
-Renderer_DirectFB::createCachedBitmap(std::auto_ptr<gnash::image::GnashImage>)
+Renderer_DirectFB::createCachedBitmap(std::unique_ptr<gnash::image::GnashImage>)
 {
 
 }
diff --git a/libdevice/directfb/Renderer_DirectFB.h b/libdevice/directfb/Renderer_DirectFB.h
index 0779d8c..8f76f82 100644
--- a/libdevice/directfb/Renderer_DirectFB.h
+++ b/libdevice/directfb/Renderer_DirectFB.h
@@ -50,7 +50,7 @@ public:
     ~Renderer_DirectFB();
         
     void init(float x, float y);
-    CachedBitmap *createCachedBitmap(std::auto_ptr<image::GnashImage> im);
+    CachedBitmap *createCachedBitmap(std::unique_ptr<image::GnashImage> im);
 
     void world_to_pixel(int& x, int& y, float world_x, float world_y);
     gnash::geometry::Range2d<int> world_to_pixel(const gnash::SWFRect& wb);
diff --git a/libdevice/egl/eglDevice.h b/libdevice/egl/eglDevice.h
index 5460cb2..401a069 100644
--- a/libdevice/egl/eglDevice.h
+++ b/libdevice/egl/eglDevice.h
@@ -24,8 +24,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #ifdef HAVE_X11_X_H
 #include "x11/X11Device.h"
diff --git a/libdevice/events/EventDevice.cpp b/libdevice/events/EventDevice.cpp
index 5351dcf..8dc72f2 100644
--- a/libdevice/events/EventDevice.cpp
+++ b/libdevice/events/EventDevice.cpp
@@ -43,11 +43,10 @@ EventDevice::EventDevice()
        keyb_lctrl(false),
        keyb_rctrl(false),
        keyb_lalt(false),
-       keyb_ralt(false)
+       keyb_ralt(false),
+       _device_info()
 {
     // GNASH_REPORT_FUNCTION;
-
-    memset(&_device_info, 0, sizeof(struct input_id));
 }
 
 bool
@@ -109,7 +108,7 @@ EventDevice::init(const std::string &filespec, size_t /* size */)
     log_debug(_("The device on %s says its name is %s"), filespec, name);
     // /dev/mxc_ts is the Touchscreen driver used by the Freescale Babbage board
     // For some reason it has an empty device info structure other than the name.
-    if (strstr(name, "mxc_ts") != 0) {
+    if (strstr(name, "mxc_ts") != nullptr) {
         _device_info.bustype = BUS_HOST;
     }
     log_debug(_("vendor %04hx product %04hx version %04hx"),
@@ -163,10 +162,10 @@ EventDevice::init(const std::string &filespec, size_t /* size */)
       case BUS_I8042:
           // This is for keyboards and mice
           log_debug(_("is an I8042 bus type"));
-          if (strstr(name, "keyboard") != 0) {
+          if (strstr(name, "keyboard") != nullptr) {
               _type = InputDevice::KEYBOARD;
           } else {
-              if (strstr(name, "Mouse") != 0) {
+              if (strstr(name, "Mouse") != nullptr) {
                   _type = InputDevice::MOUSE;
               }
           }
@@ -195,11 +194,11 @@ EventDevice::init(const std::string &filespec, size_t /* size */)
       case BUS_HOST:
           // log_debug("is Host bus type");
           // ON the Babbage board, this is the evdev driver version 1.0.0 
-          if (strstr(name, "mxc_ts") != 0) {
+          if (strstr(name, "mxc_ts") != nullptr) {
               log_debug(_("Babbage Touchscreen found!"));
               _type = InputDevice::TABLET;
           }
-          if (strstr(name, "mxckpd") != 0) {
+          if (strstr(name, "mxckpd") != nullptr) {
               log_debug(_("Babbage Power Button found!"));
               _type = InputDevice::POWERBUTTON;
           }
@@ -262,7 +261,7 @@ EventDevice::check()
     }
 
     // Try to read something from the device
-    boost::shared_array<boost::uint8_t> buf = readData(sizeof( struct input_event));
+    std::unique_ptr<std::uint8_t[]> buf = readData(sizeof( struct input_event));
     // time,type,code,value
     if (!buf) {
         return false;
@@ -311,7 +310,7 @@ EventDevice::check()
     switch (ev->type) {
       case EV_SYN:
       {
-          boost::shared_ptr<InputDevice::input_data_t> _newdata(new InputDevice::input_data_t);
+          std::shared_ptr<InputDevice::input_data_t> _newdata(new InputDevice::input_data_t);
 #if 0
           std::copy(_input_data.begin(), _input_data.end(), _newdata.begin());
 #else
@@ -409,13 +408,17 @@ EventDevice::check()
                 _input_data.rz = ev->value;
                 break;
             case REL_HWHEEL:
-                log_debug(_("REL_HWHEEL: %d"), ev->value);
+                log_unimpl(_("REL_HWHEEL: %d"), ev->value);
+                break;
             case REL_DIAL:
-                log_debug(_("REL_DIAL: %d"), ev->value);
+                log_unimpl(_("REL_DIAL: %d"), ev->value);
+                break;
             case REL_WHEEL:
-                log_debug(_("REL_WHEEL: %d"), ev->value);
+                log_unimpl(_("REL_WHEEL: %d"), ev->value);
+                break;
             case REL_MISC:
-                log_debug(_("REL_MISC: %d"), ev->value);
+                log_unimpl(_("REL_MISC: %d"), ev->value);
+                break;
             default:
                 log_unimpl(_("Relative move event %d from Input Event Device"),
                            ev->value);
@@ -672,7 +675,7 @@ EventDevice::scancode_to_gnash_key(int code, bool shift)
 }
 
 // This looks in the input event devices
-std::vector<boost::shared_ptr<InputDevice> > 
+std::vector<std::shared_ptr<InputDevice> >
 EventDevice::scanForDevices()
 {
     // GNASH_REPORT_FUNCTION;
@@ -680,7 +683,7 @@ EventDevice::scanForDevices()
     struct stat st;
 
     int total = 0;
-    std::vector<boost::shared_ptr<InputDevice> > devices;
+    std::vector<std::shared_ptr<InputDevice> > devices;
     
     // The default path for input event devices.
     char *filespec = strdup("/dev/input/eventX");
@@ -723,8 +726,8 @@ EventDevice::scanForDevices()
                   device_info.vendor, device_info.product,
                   device_info.version);
         close(fd);
-        boost::shared_ptr<InputDevice> dev;
-        dev = boost::shared_ptr<InputDevice>(new EventDevice());
+        std::shared_ptr<InputDevice> dev;
+        dev = std::shared_ptr<InputDevice>(new EventDevice());
         // The Uinput device has no product, vendor, or version data.
         if ((device_info.vendor + device_info.product + device_info.version) > 0) {
             if (dev->init(filespec, DEFAULT_BUFFER_SIZE)) {
diff --git a/libdevice/events/InputDevice.cpp b/libdevice/events/InputDevice.cpp
index 2157f90..5f1a5ed 100644
--- a/libdevice/events/InputDevice.cpp
+++ b/libdevice/events/InputDevice.cpp
@@ -31,21 +31,21 @@ namespace gnash {
 InputDevice::InputDevice()
     : _type(InputDevice::UNKNOWN),
       _fd(-1),
+      _input_data(),
       _screen_width(0),
       _screen_height(0)
 {
     // GNASH_REPORT_FUNCTION;
-    memset(&_input_data, 0, sizeof(InputDevice::input_data_t));
 }
 
 InputDevice::InputDevice(int x, int y)
     : _type(InputDevice::UNKNOWN),
       _fd(-1),
+      _input_data(),
       _screen_width(x),
       _screen_height(y)
 {
     // GNASH_REPORT_FUNCTION;
-    memset(&_input_data, 0, sizeof(InputDevice::input_data_t));
 }
 
 InputDevice::~InputDevice()
@@ -93,7 +93,7 @@ InputDevice::addData(bool pressed, key::code key, int modifier, int x, int y)
 {
     // GNASH_REPORT_FUNCTION;
     
-    boost::shared_ptr<input_data_t> _newdata(new input_data_t);
+    std::shared_ptr<input_data_t> _newdata(new input_data_t);
     _newdata->pressed = pressed;
     _newdata->key = key;
     _newdata->modifier = modifier;
@@ -108,12 +108,12 @@ InputDevice::addData(bool pressed, key::code key, int modifier, int x, int y)
 }
 
 // Read data into the Device input buffer.
-boost::shared_array<boost::uint8_t>
+std::unique_ptr<std::uint8_t[]>
 InputDevice::readData(size_t size)
 {
     // GNASH_REPORT_FUNCTION;
 
-    boost::shared_array<boost::uint8_t> inbuf;
+    std::unique_ptr<std::uint8_t[]> inbuf;
 
     if (_fd < 0) {
         return inbuf;   // no mouse available
@@ -126,7 +126,7 @@ InputDevice::readData(size_t size)
     tval.tv_sec  = 0;
     tval.tv_usec = 1;
     errno = 0;
-    int ret = ::select(_fd+1, &fdset, NULL, NULL, &tval);
+    int ret = ::select(_fd+1, &fdset, nullptr, nullptr, &tval);
     if (ret == 0) {
 //            log_debug(_("The pipe for fd #%d timed out waiting to read"), fd);
         return inbuf;
@@ -137,7 +137,7 @@ InputDevice::readData(size_t size)
         return inbuf;
     }
     
-    inbuf.reset(new boost::uint8_t[size]);
+    inbuf.reset(new std::uint8_t[size]);
     ret = ::read(_fd, inbuf.get(), size);
     if (ret > 0) {
         // log_debug(_("Read %d bytes, %s"), ret, hexify(inbuf.get(), ret, false));
@@ -175,11 +175,11 @@ InputDevice::dump() const
 // The Babbage touchscreen gives is relative coordinates, but they don't
 // match the actual screen resolution. So we convert the coordinates
 // to a new absolute location.
-boost::shared_array<int>
+std::unique_ptr<int[]>
 InputDevice::convertAbsCoords(int x, int y, int width, int height)
 {
     // GNASH_REPORT_FUNCTION;
-    boost::shared_array<int> coords(new int[2]);
+    std::unique_ptr<int[]> coords(new int[2]);
 
     coords[0] = int((x/256) * width);
     coords[1] = int((y/256) * height);
@@ -187,15 +187,15 @@ InputDevice::convertAbsCoords(int x, int y, int width, int height)
     return coords;
 }
 
-std::vector<boost::shared_ptr<InputDevice> > 
+std::vector<std::shared_ptr<InputDevice> >
 InputDevice::scanForDevices()
 {
     // GNASH_REPORT_FUNCTION;
     
-    std::vector<boost::shared_ptr<InputDevice> > devices;
+    std::vector<std::shared_ptr<InputDevice> > devices;
     
-    std::vector<boost::shared_ptr<InputDevice> > id;
-    std::vector<boost::shared_ptr<InputDevice> >::iterator it;
+    std::vector<std::shared_ptr<InputDevice> > id;
+    std::vector<std::shared_ptr<InputDevice> >::iterator it;
 #ifdef USE_INPUT_EVENTS
     id = EventDevice::scanForDevices();
     for (it=id.begin(); it!=id.end(); ++it) {
diff --git a/libdevice/events/InputDevice.h b/libdevice/events/InputDevice.h
index 6d36ed0..ee5d903 100644
--- a/libdevice/events/InputDevice.h
+++ b/libdevice/events/InputDevice.h
@@ -22,11 +22,8 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/scoped_array.hpp>
-#include <boost/shared_array.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/cstdint.hpp>
+#include <memory>
+#include <cstdint>
 #include <vector>
 #include <queue>
 #include <linux/input.h>
@@ -124,16 +121,16 @@ public:
     virtual bool init(const std::string &filespec, size_t size) = 0;
     virtual bool check() = 0;
 
-    static DSOEXPORT std::vector<boost::shared_ptr<InputDevice> > scanForDevices();
+    static DSOEXPORT std::vector<std::shared_ptr<InputDevice> > scanForDevices();
     
     InputDevice::devicetype_e getType() { return _type; };
     void setType(InputDevice::devicetype_e x) { _type = x; };
 
     // Read data into the Device input buffer.
-    boost::shared_array<boost::uint8_t> readData(size_t size);
-    boost::shared_ptr<input_data_t> popData()
+    std::unique_ptr<std::uint8_t[]> readData(size_t size);
+    std::shared_ptr<input_data_t> popData()
     {
-        boost::shared_ptr<InputDevice::input_data_t> input;
+        std::shared_ptr<InputDevice::input_data_t> input;
         if (_data.size()) {
             // std::cerr << "FIXME: " <<_data.size() << std::endl;
             input = _data.front();
@@ -142,7 +139,7 @@ public:
         return input;
     }
 
-    static DSOEXPORT boost::shared_array<int> convertAbsCoords(int x, int y,
+    static DSOEXPORT std::unique_ptr<int[]> convertAbsCoords(int x, int y,
                                                      int width, int height);
 
     void setScreenSize(int x, int y)
@@ -160,8 +157,8 @@ protected:
     int                 _fd;
     input_data_t        _input_data;
     // These hold the data queue
-    boost::scoped_array<boost::uint8_t> _buffer;
-    std::queue<boost::shared_ptr<input_data_t> > _data;
+    std::unique_ptr<std::uint8_t[]> _buffer;
+    std::queue<std::shared_ptr<input_data_t> > _data;
     int                 _screen_width;
     int                 _screen_height;    
 };
@@ -176,7 +173,7 @@ public:
     bool init(const std::string &filespec, size_t size);
     bool check();
 
-    static std::vector<boost::shared_ptr<InputDevice> > scanForDevices();
+    static std::vector<std::shared_ptr<InputDevice> > scanForDevices();
     
     /// Sends a command to the mouse and waits for the response
     bool command(unsigned char cmd, unsigned char *buf, int count);
@@ -198,7 +195,7 @@ public:
 
     void apply_ts_calibration(float* cx, float* cy, int rawx, int rawy);
     
-    static std::vector<boost::shared_ptr<InputDevice> > scanForDevices();
+    static std::vector<std::shared_ptr<InputDevice> > scanForDevices();
 private:
     // Although the value is only set when using a touchscreen, it takes up little
     // memory to initialize a pointer to avoid lots of messy ifdefs.
@@ -217,11 +214,11 @@ public:
     gnash::key::code scancode_to_gnash_key(int code, bool shift);
 
     // This looks for all the input event devices.
-    static std::vector<boost::shared_ptr<InputDevice> > scanForDevices();
+    static std::vector<std::shared_ptr<InputDevice> > scanForDevices();
     
 private:
     // Keyboard SHIFT/CTRL/ALT states (left + right)
-     bool keyb_lshift, keyb_rshift, keyb_lctrl, keyb_rctrl, keyb_lalt, keyb_ralt;
+    bool keyb_lshift, keyb_rshift, keyb_lctrl, keyb_rctrl, keyb_lalt, keyb_ralt;
     struct input_id _device_info;
 };
 
diff --git a/libdevice/events/MouseDevice.cpp b/libdevice/events/MouseDevice.cpp
index 2ae8c7d..11e49d9 100644
--- a/libdevice/events/MouseDevice.cpp
+++ b/libdevice/events/MouseDevice.cpp
@@ -24,7 +24,6 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
-#include <boost/shared_array.hpp>
 
 #include "GnashSleep.h"
 #include "log.h"
@@ -46,14 +45,14 @@ MouseDevice::~MouseDevice()
     // GNASH_REPORT_FUNCTION;
 }
 
-std::vector<boost::shared_ptr<InputDevice> >
+std::vector<std::shared_ptr<InputDevice> >
 MouseDevice::scanForDevices()
 {
     // GNASH_REPORT_FUNCTION;
 
     struct stat st;
 
-    std::vector<boost::shared_ptr<InputDevice> > devices;
+    std::vector<std::shared_ptr<InputDevice> > devices;
 
     // Look for these files for mouse input
     struct mouse_types {
@@ -99,9 +98,9 @@ MouseDevice::scanForDevices()
             log_debug(_("Found a %s device for mouse input using %s"),
                       debug[mice[i].type], mice[i].filespec);
             
-            boost::shared_ptr<InputDevice> dev;
+            std::shared_ptr<InputDevice> dev;
 #if defined(USE_MOUSE_PS2) || defined(USE_MOUSE_ETT)
-            dev = boost::shared_ptr<InputDevice>(new MouseDevice());
+            dev = std::shared_ptr<InputDevice>(new MouseDevice());
             // The User Mode Mouse is write only, so we don't consider
             // it an input device.
             dev->setType(mice[i].type);
@@ -239,7 +238,7 @@ MouseDevice::check()
     // GNASH_REPORT_FUNCTION;
 
     int xmove, ymove, btn;
-    boost::shared_array<boost::uint8_t> buf;
+    std::unique_ptr<std::uint8_t[]> buf;
     if (_type == InputDevice::TOUCHMOUSE) {
         // The eTurboTouch has a 4 byte packet
         buf = readData(4);
@@ -339,7 +338,7 @@ MouseDevice::check()
         if (_input_data.y < 0) {
             _input_data.y = 0;
         }
-        boost::shared_array<int> coords =
+        std::unique_ptr<int[]> coords =
             InputDevice::convertAbsCoords(_input_data.x, _input_data.y,
                                           _screen_width, _screen_height);
         // MouseDevice::convertCoordinates(_input_data.x, _input_data.y,
diff --git a/libdevice/events/TouchDevice.cpp b/libdevice/events/TouchDevice.cpp
index 61383d7..6c37f44 100644
--- a/libdevice/events/TouchDevice.cpp
+++ b/libdevice/events/TouchDevice.cpp
@@ -85,7 +85,7 @@ TouchDevice::init(const std::string &filespec, size_t /* size */)
     }
     
     _tsDev = ts_open(devname, 1);  //Open tslib non-blocking
-    if (_tsDev == 0) {
+    if (_tsDev == nullptr) {
         log_error(_("Could not open touchscreen %s: %s"), devname,
                   strerror(errno));
         return false;
@@ -114,7 +114,7 @@ TouchDevice::check()
     // Tslib should be setup so the output is pretty clean.
     struct ts_sample event;
     
-    if (_tsDev == 0) {
+    if (_tsDev == nullptr) {
         return false;           // No tslib device initialized, exit!
     }
     
@@ -128,7 +128,7 @@ TouchDevice::check()
             // arguments are a range, so hardcoding them is safe for
             // now. In the future more conversion may be done, making this
             // then be incorrect.
-            boost::shared_array<int> coords =
+            std::unique_ptr<int[]> coords =
                 InputDevice::convertAbsCoords(event.x, event.y,
                                                 _screen_width, _screen_height);
             log_debug(_("Touched x: %d, y: %d"), event.x , event.y);
@@ -267,14 +267,14 @@ TouchDevice::apply_ts_calibration(float* cx, float* cy, int rawx, int rawy)
     *cy = d * rawx + e * rawy + f;
 }
 
-std::vector<boost::shared_ptr<InputDevice> >
+std::vector<std::shared_ptr<InputDevice> >
 TouchDevice::scanForDevices()
 {
     // GNASH_REPORT_FUNCTION;
 
     struct stat st;
 
-    std::vector<boost::shared_ptr<InputDevice> > devices;
+    std::vector<std::shared_ptr<InputDevice> > devices;
 
     // Debug strings to make output more readable
     const char *debug[] = {
@@ -299,7 +299,7 @@ TouchDevice::scanForDevices()
     struct ts_types touch[] = {
         {InputDevice::TOUCHSCREEN, "/dev/input/ts0"},
         {InputDevice::TOUCHSCREEN, "/dev/ts"},
-        {InputDevice::UNKNOWN, 0}
+        {InputDevice::UNKNOWN, nullptr}
     };
 
     int i = 0;
@@ -317,8 +317,8 @@ TouchDevice::scanForDevices()
             close(fd);
             log_debug("Found a %s device for touchscreen input using %s",
                       debug[touch[i].type], touch[i].filespec);
-            boost::shared_ptr<InputDevice> dev
-                = boost::shared_ptr<InputDevice>(new TouchDevice());
+            std::shared_ptr<InputDevice> dev
+                = std::shared_ptr<InputDevice>(new TouchDevice());
             if (dev->init(touch[i].filespec, DEFAULT_BUFFER_SIZE)) {
                 devices.push_back(dev);
             }
diff --git a/libdevice/events/UinputDevice.cpp b/libdevice/events/UinputDevice.cpp
index 7459ece..51007c3 100644
--- a/libdevice/events/UinputDevice.cpp
+++ b/libdevice/events/UinputDevice.cpp
@@ -24,7 +24,6 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
-#include <boost/shared_array.hpp>
 
 #include "GnashSleep.h"
 #include "log.h"
@@ -66,7 +65,7 @@ UinputDevice::scanForDevice()
         "/dev/input/event4",
         "/dev/uinput",
         "/dev/input/uinput",
-        0
+        nullptr
     };
 
     int i = 0;
@@ -119,9 +118,8 @@ UinputDevice::init()
     }
 #else
 #if 1 // USE_ABSOLUTE_POINTER
-    struct uinput_user_dev uidev;
+    uinput_user_dev uidev = uinput_user_dev();
 
-    memset(&uidev, 0, sizeof(uidev));
     snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput");
     uidev.id.bustype = BUS_USB;
     // uidev.id.vendor  = 0x1;
@@ -192,10 +190,9 @@ UinputDevice::moveTo(int x, int y)
 {
     // GNASH_REPORT_FUNCTION;
 
-    struct input_event ev;
+    input_event ev = input_event();
     
-    memset(&ev, 0, sizeof(ev));
-    gettimeofday(&ev.time, NULL);
+    gettimeofday(&ev.time, nullptr);
     ev.type = EV_ABS;
     ev.code = ABS_X;
     ev.value = x;
diff --git a/libdevice/rawfb/RawFBDevice.cpp b/libdevice/rawfb/RawFBDevice.cpp
index bce2333..6c9bf2b 100644
--- a/libdevice/rawfb/RawFBDevice.cpp
+++ b/libdevice/rawfb/RawFBDevice.cpp
@@ -38,39 +38,31 @@ namespace renderer {
 
 namespace rawfb {
     
-// The debug log used by all the gnash libraries.
-static LogFile& dbglogfile = LogFile::getDefaultInstance();
-
-
 RawFBDevice::RawFBDevice()
     : _fd(0),
-      _fbmem(0)
+      _fbmem(nullptr)
 {
     // GNASH_REPORT_FUNCTION;
-
-    //    dbglogfile.setVerbosity();
 }
 
 RawFBDevice::RawFBDevice(int /* vid */)
     : _fd(0),
-      _fbmem(0)
+      _fbmem(nullptr),
+      _cmap()
 {
     // GNASH_REPORT_FUNCTION;
 
-    memset(&_cmap, 0, sizeof(struct fb_cmap));
-    
-    if (!initDevice(0, 0)) {
+    if (!initDevice(0, nullptr)) {
         log_error(_("Couldn't initialize RAWFB device!"));
     }
 }
 
 RawFBDevice::RawFBDevice(int /* argc */ , char ** /* argv */)
     : _fd(0),
-      _fbmem(0)
+      _fbmem(nullptr),
+      _cmap()
 {
     // GNASH_REPORT_FUNCTION;
-
-    memset(&_cmap, 0, sizeof(struct fb_cmap));    
 }
 
 void
@@ -93,7 +85,7 @@ RawFBDevice::~RawFBDevice()
     if (_fbmem) {
         munmap(_fbmem, 0);
         log_debug(_("Freeing framebuffer memory"));
-        _fbmem = 0;
+        _fbmem = nullptr;
     }
     
     if (_offscreen_buffer) {
@@ -112,7 +104,7 @@ RawFBDevice::initDevice(int /* argc */, char **/* argv[] */)
 {
     GNASH_REPORT_FUNCTION;
     
-    const char *devname = 0;
+    const char *devname = nullptr;
     // Open the framebuffer device
 #ifdef ENABLE_FAKE_FRAMEBUFFER
     _fd = open(FAKEFB, O_RDWR);
@@ -181,7 +173,7 @@ RawFBDevice::setGrayscaleLUT8()
     _cmap.red = (__u16*)malloc(CMAP_SIZE);
     _cmap.green = (__u16*)malloc(CMAP_SIZE);
     _cmap.blue = (__u16*)malloc(CMAP_SIZE);
-    _cmap.transp = NULL;
+    _cmap.transp = nullptr;
 
     for (i=0; i<256; i++) {
         int r = i;
@@ -219,7 +211,7 @@ RawFBDevice::attachWindow(GnashDevice::native_window_t window)
     // of the opened device. EGL wants the descriptor here too, so
     // this way we work in a similar manner.
     if (window) {
-        _fbmem = reinterpret_cast<boost::uint8_t *>(mmap(0, _fixinfo.smem_len,
+        _fbmem = reinterpret_cast<std::uint8_t *>(mmap(nullptr, _fixinfo.smem_len,
                                         PROT_READ|PROT_WRITE, MAP_SHARED,
                                         window, 0));
     }
@@ -232,7 +224,7 @@ RawFBDevice::attachWindow(GnashDevice::native_window_t window)
     
     if (!isSingleBuffered()) {
         // Create an offscreen buffer the same size as the Framebuffer
-        _offscreen_buffer.reset(new boost::uint8_t[_fixinfo.smem_len]);
+        _offscreen_buffer.reset(new std::uint8_t[_fixinfo.smem_len]);
         memset(_offscreen_buffer.get(), 0, _fixinfo.smem_len);
     }
     
@@ -262,7 +254,7 @@ RawFBDevice::swapBuffers()
 const char *
 RawFBDevice::getErrorString(int /* error */)
 {
-    return 0;
+    return nullptr;
 }
 
 // Create an RAWFB window to render in. This is only used by testing
diff --git a/libdevice/rawfb/RawFBDevice.h b/libdevice/rawfb/RawFBDevice.h
index 3aaf83a..45dde48 100644
--- a/libdevice/rawfb/RawFBDevice.h
+++ b/libdevice/rawfb/RawFBDevice.h
@@ -24,8 +24,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <sys/mman.h>
@@ -108,10 +107,10 @@ class DSOEXPORT RawFBDevice : public GnashDevice
     void createWindow(const char *name, int x, int y, int width, int height);
 
     // Get the memory from the real framebuffer
-    boost::uint8_t *getFBMemory() { return _fbmem; };
+    std::uint8_t *getFBMemory() { return _fbmem; };
 
     // // Get the memory from an offscreen buffer to support Double Buffering
-    boost::uint8_t *getOffscreenBuffer() { return _offscreen_buffer.get(); };
+    std::uint8_t *getOffscreenBuffer() { return _offscreen_buffer.get(); };
 
     size_t getStride() { return _fixinfo.line_length; };
     size_t getFBMemSize() { return _fixinfo.smem_len; };
@@ -148,9 +147,9 @@ protected:
     std::string                         _filespec;
     struct fb_fix_screeninfo            _fixinfo;
     struct fb_var_screeninfo            _varinfo;
-    boost::uint8_t                     *_fbmem;
+    std::uint8_t                     *_fbmem;
     
-    boost::scoped_ptr<boost::uint8_t>   _offscreen_buffer;
+    std::unique_ptr<std::uint8_t>     _offscreen_buffer;
     struct fb_cmap                      _cmap;       // the colormap
 };
 
diff --git a/libdevice/vaapi/VaapiContext.cpp b/libdevice/vaapi/VaapiContext.cpp
index 050afd1..70b422a 100644
--- a/libdevice/vaapi/VaapiContext.cpp
+++ b/libdevice/vaapi/VaapiContext.cpp
@@ -236,9 +236,9 @@ bool VaapiContext::initDecoder(unsigned int width, unsigned int height)
 }
 
 /// Get a free surface
-boost::shared_ptr<VaapiSurface> VaapiContext::acquireSurface()
+std::shared_ptr<VaapiSurface> VaapiContext::acquireSurface()
 {
-    boost::shared_ptr<VaapiSurface> surface = _surfaces.front();
+    std::shared_ptr<VaapiSurface> surface = _surfaces.front();
     _surfaces.pop();
     log_debug("VaapiContext::acquireSurface(): surface 0x%08x\n", surface->get());
 
@@ -246,7 +246,7 @@ boost::shared_ptr<VaapiSurface> VaapiContext::acquireSurface()
 }
 
 /// Release surface
-void VaapiContext::releaseSurface(boost::shared_ptr<VaapiSurface> surface)
+void VaapiContext::releaseSurface(std::shared_ptr<VaapiSurface> surface)
 {
     log_debug("VaapiContext::releaseSurface(): surface 0x%08x\n", surface->get());
     _surfaces.push(surface);
diff --git a/libdevice/vaapi/VaapiContext.h b/libdevice/vaapi/VaapiContext.h
index 963b023..8d9de72 100644
--- a/libdevice/vaapi/VaapiContext.h
+++ b/libdevice/vaapi/VaapiContext.h
@@ -49,7 +49,7 @@ public:
 
 /// VA context abstraction
 class DSOEXPORT VaapiContext {
-    typedef boost::shared_ptr<VaapiSurface> VaapiSurfaceSP;
+    typedef std::shared_ptr<VaapiSurface> VaapiSurfaceSP;
     
     VADisplay                           _display;
     VAConfigID                          _config;
@@ -60,7 +60,7 @@ class DSOEXPORT VaapiContext {
     std::queue<VaapiSurfaceSP>          _surfaces;
     unsigned int                        _picture_width;
     unsigned int                        _picture_height;
-    std::auto_ptr<VaapiContextData>     _user_data;
+    std::unique_ptr<VaapiContextData>     _user_data;
 
     bool construct();
     void destruct();
@@ -78,13 +78,13 @@ public:
     VAContextID get() const { return _context; }
 
     /// Get a free surface
-    boost::shared_ptr<VaapiSurface> acquireSurface();
+    std::shared_ptr<VaapiSurface> acquireSurface();
 
     /// Release surface
-    void releaseSurface(boost::shared_ptr<VaapiSurface> surface);
+    void releaseSurface(std::shared_ptr<VaapiSurface> surface);
 
     /// Set user data
-    void setData(std::auto_ptr<VaapiContextData> user_data) { _user_data = user_data; }
+    void setData(std::unique_ptr<VaapiContextData> user_data) { _user_data = user_data; }
 
     /// Get user data
     VaapiContextData *getData() const { return _user_data.get(); }
diff --git a/libdevice/vaapi/VaapiDevice.h b/libdevice/vaapi/VaapiDevice.h
index 87ca998..c89cb93 100644
--- a/libdevice/vaapi/VaapiDevice.h
+++ b/libdevice/vaapi/VaapiDevice.h
@@ -24,8 +24,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #include <va/va.h>
 
diff --git a/libdevice/vaapi/VaapiGlobalContext.cpp b/libdevice/vaapi/VaapiGlobalContext.cpp
index 0e2b559..c19ed07 100644
--- a/libdevice/vaapi/VaapiGlobalContext.cpp
+++ b/libdevice/vaapi/VaapiGlobalContext.cpp
@@ -32,7 +32,7 @@
 
 namespace gnash {
 
-VaapiGlobalContext::VaapiGlobalContext(std::auto_ptr<VaapiDisplay> display)
+VaapiGlobalContext::VaapiGlobalContext(std::unique_ptr<VaapiDisplay> display)
     : _display(display)
 {
     GNASH_REPORT_FUNCTION;
@@ -131,10 +131,10 @@ VaapiGlobalContext *VaapiGlobalContext::get()
 {
     LOG_ONCE(GNASH_REPORT_FUNCTION);
 
-    static std::auto_ptr<VaapiGlobalContext> vaapi_global_context;
+    static std::unique_ptr<VaapiGlobalContext> vaapi_global_context;
 
     if (!vaapi_global_context.get()) {
-        std::auto_ptr<VaapiDisplay> dpy;
+        std::unique_ptr<VaapiDisplay> dpy;
         /* XXX: this won't work with multiple renders built-in */
         try {
 #if HAVE_VA_VA_GLX_H
diff --git a/libdevice/vaapi/VaapiGlobalContext.h b/libdevice/vaapi/VaapiGlobalContext.h
index 904f661..c75dd4d 100644
--- a/libdevice/vaapi/VaapiGlobalContext.h
+++ b/libdevice/vaapi/VaapiGlobalContext.h
@@ -31,7 +31,7 @@ namespace gnash {
 
 /// VA API global context
 class DSOEXPORT VaapiGlobalContext {
-    std::auto_ptr<VaapiDisplay> _display;
+    std::unique_ptr<VaapiDisplay> _display;
     std::vector<VAProfile>      _profiles;
     std::vector<VAImageFormat>  _image_formats;
     std::vector<VAImageFormat>  _subpicture_formats;
@@ -39,7 +39,7 @@ class DSOEXPORT VaapiGlobalContext {
     bool init();
 
 public:
-    VaapiGlobalContext(std::auto_ptr<VaapiDisplay> display);
+    VaapiGlobalContext(std::unique_ptr<VaapiDisplay> display);
     ~VaapiGlobalContext();
 
     /// Get the unique global VA context
diff --git a/libdevice/vaapi/VaapiImage.cpp b/libdevice/vaapi/VaapiImage.cpp
index d4a6a17..f8c1996 100644
--- a/libdevice/vaapi/VaapiImage.cpp
+++ b/libdevice/vaapi/VaapiImage.cpp
@@ -33,11 +33,11 @@ VaapiImage::VaapiImage(unsigned int     width,
                        unsigned int     height,
                        VaapiImageFormat format)
     : _format(format)
+    , _image()
     , _image_data(NULL)
 {
     log_debug(_("VaapiImage::VaapiImage(): format '%s'\n"), string_of_FOURCC(format));
 
-    memset(&_image, 0, sizeof(_image));
     _image.image_id = VA_INVALID_ID;
 
     if (!create(width, height)) {
@@ -153,7 +153,7 @@ bool VaapiImage::unmap()
 }
 
 // Get pixels for the specified plane
-boost::uint8_t *VaapiImage::getPlane(int plane) const
+std::uint8_t *VaapiImage::getPlane(int plane) const
 {
     if (!isMapped()) {
         throw VaapiException("VaapiImage::getPixels(): unmapped image");
diff --git a/libdevice/vaapi/VaapiImage.h b/libdevice/vaapi/VaapiImage.h
index f17000e..a9f27f7 100644
--- a/libdevice/vaapi/VaapiImage.h
+++ b/libdevice/vaapi/VaapiImage.h
@@ -20,7 +20,6 @@
 #ifndef GNASH_VAAPIIMAGE_H
 #define GNASH_VAAPIIMAGE_H
 
-#include <boost/scoped_array.hpp>
 #include <memory>
 
 #include "dsodefs.h"
@@ -42,7 +41,7 @@ class DSOEXPORT VaapiImage
 {
     VaapiImageFormat    _format;
     VAImage             _image;
-    boost::uint8_t *    _image_data;
+    std::uint8_t *    _image_data;
 
     /// Create VA image
     bool create(unsigned int width, unsigned int height);
@@ -81,7 +80,7 @@ public:
     unsigned int getPlaneCount() const { return _image.num_planes; }
 
     /// Get pixels for the specified plane
-    boost::uint8_t *getPlane(int plane) const;
+    std::uint8_t *getPlane(int plane) const;
 
     /// Get scanline pitch for the specified plane
     unsigned int getPitch(int plane) const;
diff --git a/libdevice/vaapi/VaapiSubpicture.cpp b/libdevice/vaapi/VaapiSubpicture.cpp
index 227a05a..4a18938 100644
--- a/libdevice/vaapi/VaapiSubpicture.cpp
+++ b/libdevice/vaapi/VaapiSubpicture.cpp
@@ -28,7 +28,7 @@
 
 namespace gnash {
 
-VaapiSubpicture::VaapiSubpicture(boost::shared_ptr<VaapiImage> image)
+VaapiSubpicture::VaapiSubpicture(std::shared_ptr<VaapiImage> image)
     : _image(image)
     , _subpicture(VA_INVALID_ID)
 {
diff --git a/libdevice/vaapi/VaapiSubpicture.h b/libdevice/vaapi/VaapiSubpicture.h
index f730331..958158a 100644
--- a/libdevice/vaapi/VaapiSubpicture.h
+++ b/libdevice/vaapi/VaapiSubpicture.h
@@ -34,7 +34,7 @@ class VaapiImage;
 /// VA subpicture abstraction
 class DSOEXPORT VaapiSubpicture
 {
-    boost::shared_ptr<VaapiImage>       _image;
+    std::shared_ptr<VaapiImage>       _image;
     VASubpictureID                      _subpicture;
 
     /// Create VA subpicture
@@ -44,7 +44,7 @@ class DSOEXPORT VaapiSubpicture
     void destroy();
 
 public:
-    VaapiSubpicture(boost::shared_ptr<VaapiImage> image);
+    VaapiSubpicture(std::shared_ptr<VaapiImage> image);
     ~VaapiSubpicture();
 
     /// Return VA subpicture id
diff --git a/libdevice/vaapi/VaapiSurface.cpp b/libdevice/vaapi/VaapiSurface.cpp
index 7a16495..792aeb5 100644
--- a/libdevice/vaapi/VaapiSurface.cpp
+++ b/libdevice/vaapi/VaapiSurface.cpp
@@ -18,7 +18,7 @@
 //
 
 #include <algorithm>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "log.h"
 #include "VaapiSurface.h"
@@ -111,14 +111,14 @@ void VaapiSurface::clear()
     }
 
     // 0x10 is the black level for Y
-    boost::uint8_t *Y = background.getPlane(0);
+    std::uint8_t *Y = background.getPlane(0);
     unsigned int i, stride = background.getPitch(0);
     for (i = 0; i < background.height(); i++, Y += stride) {
         memset(Y, 0x10, stride);
     }
 
     // 0x80 is the black level for Cb and Cr
-    boost::uint8_t *UV = background.getPlane(1);
+    std::uint8_t *UV = background.getPlane(1);
     stride = background.getPitch(1);
     for (i = 0; i < background.height()/2; i++, UV += stride) {
         memset(UV, 0x80, stride);
@@ -141,14 +141,14 @@ void VaapiSurface::clear()
 }
 
 // Compare two subpictures
-static inline bool operator== (boost::shared_ptr<VaapiSubpicture> const &a,
-                               boost::shared_ptr<VaapiSubpicture> const &b)
+static inline bool operator== (std::shared_ptr<VaapiSubpicture> const &a,
+                               std::shared_ptr<VaapiSubpicture> const &b)
 {
     return a->get() == b->get();
 }
 
 // Associate subpicture to the surface
-bool VaapiSurface::associateSubpicture(boost::shared_ptr<VaapiSubpicture> subpicture,
+bool VaapiSurface::associateSubpicture(std::shared_ptr<VaapiSubpicture> subpicture,
                                        VaapiRectangle const & src_rect,
                                        VaapiRectangle const & dst_rect)
 {
@@ -177,9 +177,9 @@ bool VaapiSurface::associateSubpicture(boost::shared_ptr<VaapiSubpicture> subpic
 }
 
 // Deassociate subpicture from the surface
-bool VaapiSurface::deassociateSubpicture(boost::shared_ptr<VaapiSubpicture> subpicture)
+bool VaapiSurface::deassociateSubpicture(std::shared_ptr<VaapiSubpicture> subpicture)
 {
-    std::vector< boost::shared_ptr<VaapiSubpicture> >::iterator it;
+    std::vector< std::shared_ptr<VaapiSubpicture> >::iterator it;
     it = std::find(_subpictures.begin(), _subpictures.end(), subpicture);
     if (it == _subpictures.end()) {
         return false;
diff --git a/libdevice/vaapi/VaapiSurface.h b/libdevice/vaapi/VaapiSurface.h
index 4180576..551bd55 100644
--- a/libdevice/vaapi/VaapiSurface.h
+++ b/libdevice/vaapi/VaapiSurface.h
@@ -66,8 +66,8 @@ public:
 /// VA surface abstraction
 class DSOEXPORT VaapiSurface
 {
-    std::auto_ptr<VaapiSurfaceImplBase> _impl;
-    std::vector< boost::shared_ptr<VaapiSubpicture> > _subpictures;
+    std::unique_ptr<VaapiSurfaceImplBase> _impl;
+    std::vector< std::shared_ptr<VaapiSubpicture> > _subpictures;
 
     friend class VaapiContext;
     VaapiContext *_context;
@@ -94,12 +94,12 @@ public:
     void clear();
 
     /// Associate subpicture to the surface
-    bool associateSubpicture(boost::shared_ptr<VaapiSubpicture> subpicture,
+    bool associateSubpicture(std::shared_ptr<VaapiSubpicture> subpicture,
                              VaapiRectangle const & src_rect,
                              VaapiRectangle const & dst_rect);
 
     /// Deassociate subpicture from the surface
-    bool deassociateSubpicture(boost::shared_ptr<VaapiSubpicture> subpicture);
+    bool deassociateSubpicture(std::shared_ptr<VaapiSubpicture> subpicture);
 };
 
 } // gnash namespace
diff --git a/libdevice/vaapi/VaapiSurfaceGLX.cpp b/libdevice/vaapi/VaapiSurfaceGLX.cpp
index 91a7cc5..486142f 100644
--- a/libdevice/vaapi/VaapiSurfaceGLX.cpp
+++ b/libdevice/vaapi/VaapiSurfaceGLX.cpp
@@ -19,43 +19,15 @@
 
 #include <va/va_glx.h>
 #include <va/va_x11.h>
+#include <GL/glu.h>
 
 #include "log.h"
 #include "VaapiSurfaceGLX.h"
 #include "VaapiGlobalContext.h"
 #include "vaapi_utils.h"
 
-namespace gnash {
-
-// Returns a string representation of an OpenGL error
-static const char *gl_get_error_string(GLenum error)
-{
-    static const struct {
-        GLenum val;
-        const char *str;
-    }
-    gl_errors[] = {
-        { GL_NO_ERROR,          "no error" },
-        { GL_INVALID_ENUM,      "invalid enumerant" },
-        { GL_INVALID_VALUE,     "invalid value" },
-        { GL_INVALID_OPERATION, "invalid operation" },
-        { GL_STACK_OVERFLOW,    "stack overflow" },
-        { GL_STACK_UNDERFLOW,   "stack underflow" },
-        { GL_OUT_OF_MEMORY,     "out of memory" },
-#ifdef GL_INVALID_FRAMEBUFFER_OPERATION_EXT
-        { GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "invalid framebuffer operation" },
-#endif
-        { ~0, NULL }
-    };
 
-    int i;
-    for (i = 0; gl_errors[i].str; i++) {
-        if (gl_errors[i].val == error) {
-            return gl_errors[i].str;
-        }
-    }
-    return "unknown";
-}
+namespace gnash {
 
 static inline bool gl_do_check_error(int report)
 {
@@ -63,7 +35,7 @@ static inline bool gl_do_check_error(int report)
     bool is_error = false;
     while ((error = glGetError()) != GL_NO_ERROR) {
         if (report) {
-            vaapi_dprintf("glError: %s caught\n", gl_get_error_string(error));
+            vaapi_dprintf("glError: %s caught\n", gluErrorString(error));
         }
         is_error = true;
     }
@@ -174,7 +146,7 @@ public:
     VaapiSurfaceGLXImpl(GLenum target, GLuint texture);
     ~VaapiSurfaceGLXImpl();
 
-    bool update(boost::shared_ptr<VaapiSurface> surface);
+    bool update(std::shared_ptr<VaapiSurface> surface);
 };
 
 VaapiSurfaceGLXImpl::VaapiSurfaceGLXImpl(GLenum target, GLuint texture)
@@ -229,7 +201,7 @@ VaapiSurfaceGLXImpl::~VaapiSurfaceGLXImpl()
     reset(0);
 }
 
-bool VaapiSurfaceGLXImpl::update(boost::shared_ptr<VaapiSurface> surface)
+bool VaapiSurfaceGLXImpl::update(std::shared_ptr<VaapiSurface> surface)
 {
     GNASH_REPORT_FUNCTION;
 
@@ -261,7 +233,7 @@ VaapiSurfaceGLX::VaapiSurfaceGLX(GLenum target, GLuint texture)
 {
 }
 
-bool VaapiSurfaceGLX::update(boost::shared_ptr<VaapiSurface> surface)
+bool VaapiSurfaceGLX::update(std::shared_ptr<VaapiSurface> surface)
 {
     log_debug(_("VaapiSurfaceGLX::update(): from surface 0x%08x\n"), surface->get());
 
diff --git a/libdevice/vaapi/VaapiSurfaceGLX.h b/libdevice/vaapi/VaapiSurfaceGLX.h
index ae4e68d..8262880 100644
--- a/libdevice/vaapi/VaapiSurfaceGLX.h
+++ b/libdevice/vaapi/VaapiSurfaceGLX.h
@@ -31,7 +31,7 @@ namespace gnash {
 /// VA/GLX surface abstraction
 class DSOEXPORT VaapiSurfaceGLX 
 {
-    std::auto_ptr<VaapiSurfaceImplBase> _impl;
+    std::unique_ptr<VaapiSurfaceImplBase> _impl;
 
 public:
     VaapiSurfaceGLX(GLenum target, GLuint texture);
@@ -46,7 +46,7 @@ public:
     unsigned int height() const { return _impl->height(); }
 
     /// Update VA/GLX surface from VA surface
-    bool update(boost::shared_ptr<VaapiSurface> surface);
+    bool update(std::shared_ptr<VaapiSurface> surface);
 };
 
 } // gnash namespace
diff --git a/libdevice/vaapi/VaapiSurfaceProxy.cpp b/libdevice/vaapi/VaapiSurfaceProxy.cpp
index 8972587..84d3988 100644
--- a/libdevice/vaapi/VaapiSurfaceProxy.cpp
+++ b/libdevice/vaapi/VaapiSurfaceProxy.cpp
@@ -24,8 +24,8 @@
 
 namespace gnash {
 
-VaapiSurfaceProxy::VaapiSurfaceProxy(boost::shared_ptr<VaapiSurface> surface,
-                                     boost::shared_ptr<VaapiContext> context)
+VaapiSurfaceProxy::VaapiSurfaceProxy(std::shared_ptr<VaapiSurface> surface,
+                                     std::shared_ptr<VaapiContext> context)
     : _context(context), _surface(surface)
 {
     log_debug(_("VaapiSurfaceProxy::VaapiSurfaceProxy(): surface 0x%08x\n"), _surface->get());
diff --git a/libdevice/vaapi/VaapiSurfaceProxy.h b/libdevice/vaapi/VaapiSurfaceProxy.h
index 07fbb1c..4cd53ee 100644
--- a/libdevice/vaapi/VaapiSurfaceProxy.h
+++ b/libdevice/vaapi/VaapiSurfaceProxy.h
@@ -31,19 +31,19 @@ class VaapiImage;
 
 /// VA surface proxy used to release surface to context
 class DSOEXPORT VaapiSurfaceProxy {
-    boost::shared_ptr<VaapiContext> _context;
-    boost::shared_ptr<VaapiSurface> _surface;
+    std::shared_ptr<VaapiContext> _context;
+    std::shared_ptr<VaapiSurface> _surface;
 
 public:
-    VaapiSurfaceProxy(boost::shared_ptr<VaapiSurface> surface,
-                      boost::shared_ptr<VaapiContext> context);
+    VaapiSurfaceProxy(std::shared_ptr<VaapiSurface> surface,
+                      std::shared_ptr<VaapiContext> context);
     ~VaapiSurfaceProxy();
 
     /// Return VA surface
-    boost::shared_ptr<VaapiSurface> get() const { return _surface; }
+    std::shared_ptr<VaapiSurface> get() const { return _surface; }
 
     /// Return VA context
-    boost::shared_ptr<VaapiContext> getContext() const  { return _context; }
+    std::shared_ptr<VaapiContext> getContext() const  { return _context; }
 };
 
 } // gnash namespace
diff --git a/libdevice/vaapi/vaapi_common.h b/libdevice/vaapi/vaapi_common.h
index 8088e32..0870f10 100644
--- a/libdevice/vaapi/vaapi_common.h
+++ b/libdevice/vaapi/vaapi_common.h
@@ -25,10 +25,13 @@
 #endif
 
 #include <va/va.h>
+#if VA_CHECK_VERSION(0,34,0)
+#include <va/va_compat.h>
+#endif
+
 #include <memory>
 #include <stdint.h>
-#include <boost/cstdint.hpp>
-#include <boost/shared_ptr.hpp>
+#include <cstdint>
 #include "dsodefs.h"
 
 #endif // GNASH_VAAPI_COMMON_H
diff --git a/libdevice/vaapi/vaapi_utils.cpp b/libdevice/vaapi/vaapi_utils.cpp
index 8ddb5ac..98a347c 100644
--- a/libdevice/vaapi/vaapi_utils.cpp
+++ b/libdevice/vaapi/vaapi_utils.cpp
@@ -58,7 +58,7 @@ bool vaapi_check_status(VAStatus status, const char *msg)
 }
 
 /// Return a string representation of a FOURCC
-const char *string_of_FOURCC(boost::uint32_t fourcc)
+const char *string_of_FOURCC(std::uint32_t fourcc)
 {
     static int buf;
     static char str[2][5]; // XXX: 2 buffers should be enough for most purposes
diff --git a/libdevice/vaapi/vaapi_utils.h b/libdevice/vaapi/vaapi_utils.h
index a613995..5390b34 100644
--- a/libdevice/vaapi/vaapi_utils.h
+++ b/libdevice/vaapi/vaapi_utils.h
@@ -37,7 +37,7 @@ void DSOEXPORT vaapi_dprintf(const char *format, ...);
 bool DSOEXPORT vaapi_check_status(VAStatus status, const char *msg);
 
 /// Return a string representation of a FOURCC
-DSOEXPORT const char* string_of_FOURCC(boost::uint32_t fourcc);
+DSOEXPORT const char* string_of_FOURCC(std::uint32_t fourcc);
 
 /// Return a string representation of a VAProfile
 DSOEXPORT const char* string_of_VAProfile(VAProfile profile);
diff --git a/libdevice/x11/X11Device.h b/libdevice/x11/X11Device.h
index 5f143df..85836e5 100644
--- a/libdevice/x11/X11Device.h
+++ b/libdevice/x11/X11Device.h
@@ -24,8 +24,7 @@
 #include "gnashconfig.h"
 #endif
 
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #ifdef HAVE_X11_X_H
 # include <X11/X.h>
diff --git a/libmedia/AudioDecoder.h b/libmedia/AudioDecoder.h
index 6ceac76..fe36e18 100644
--- a/libmedia/AudioDecoder.h
+++ b/libmedia/AudioDecoder.h
@@ -20,7 +20,7 @@
 #ifndef GNASH_AUDIODECODER_H
 #define GNASH_AUDIODECODER_H
 
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 
 // Forward declarations
 namespace gnash {
@@ -60,11 +60,11 @@ public:
 	/// @return a pointer to the decoded data, or NULL if decoding fails.
 	///     The caller owns the decoded data, which was allocated with new [].
 	///
-	/// @todo return a SimpleBuffer by auto_ptr
+	/// @todo return a SimpleBuffer by unique_ptr
 	///
-	virtual boost::uint8_t* decode(const boost::uint8_t* input,
-        boost::uint32_t inputSize, boost::uint32_t& outputSize,
-        boost::uint32_t& decodedData);
+	virtual std::uint8_t* decode(const std::uint8_t* input,
+        std::uint32_t inputSize, std::uint32_t& outputSize,
+        std::uint32_t& decodedData);
 
 	/// Decodes an EncodedAudioFrame and returns a pointer to the decoded data
 	//
@@ -77,24 +77,24 @@ public:
 	/// @return a pointer to the decoded data, or NULL if decoding fails.
 	///     The caller owns the decoded data, which was allocated with new [].
 	///
-	/// @todo return a SimpleBuffer by auto_ptr
+	/// @todo return a SimpleBuffer by unique_ptr
 	///
-	virtual boost::uint8_t* decode(const EncodedAudioFrame& input,
-	                               boost::uint32_t& outputSize);
+	virtual std::uint8_t* decode(const EncodedAudioFrame& input,
+	                               std::uint32_t& outputSize);
 
 };
 
-inline boost::uint8_t*
-AudioDecoder::decode(const boost::uint8_t*, boost::uint32_t, boost::uint32_t&,
-        boost::uint32_t&)
+inline std::uint8_t*
+AudioDecoder::decode(const std::uint8_t*, std::uint32_t, std::uint32_t&,
+        std::uint32_t&)
 {
-    return 0;
+    return nullptr;
 }
 
-inline boost::uint8_t*
-AudioDecoder::decode(const EncodedAudioFrame&, boost::uint32_t&)
+inline std::uint8_t*
+AudioDecoder::decode(const EncodedAudioFrame&, std::uint32_t&)
 {
-    return 0;
+    return nullptr;
 }
 	
 } // gnash.media namespace 
diff --git a/libmedia/AudioDecoderSimple.cpp b/libmedia/AudioDecoderSimple.cpp
index e750afa..e4d71eb 100644
--- a/libmedia/AudioDecoderSimple.cpp
+++ b/libmedia/AudioDecoderSimple.cpp
@@ -28,7 +28,6 @@
 
 #include "log.h"
 
-#include <boost/scoped_array.hpp>
 #include <algorithm> // for std::swap
 
 namespace gnash {
@@ -96,17 +95,17 @@ private:
 	}
 
 	/* Uncompress 4096 mono samples of ADPCM. */
-	static boost::uint32_t doMonoBlock(boost::int16_t** out_data, int n_bits, BitsReader& in, int sample, int stepsize_index)
+	static std::uint32_t doMonoBlock(std::int16_t** out_data, int n_bits, BitsReader& in, int sample, int stepsize_index)
 	{
 		/* First sample doesn't need to be decompressed. */
-		boost::uint32_t sample_count = 1;
-		*(*out_data)++ = (boost::int16_t) sample;
+		std::uint32_t sample_count = 1;
+		*(*out_data)++ = (std::int16_t) sample;
 
 		while (sample_count < 4096 && in.gotBits(n_bits))
 		{
 			int	raw_code = in.read_uint(n_bits);
 			doSample(n_bits, sample, stepsize_index, raw_code);	/* sample & stepsize_index are in/out params */
-			*(*out_data)++ = (boost::int16_t) sample;
+			*(*out_data)++ = (std::int16_t) sample;
 
 			sample_count++;
 		}	
@@ -116,7 +115,7 @@ private:
 
 	/* Uncompress 4096 stereo sample pairs of ADPCM. */
 	static int doStereoBlock(
-			boost::int16_t** out_data,	// in/out param
+			std::int16_t** out_data,	// in/out param
 			int n_bits,
 			BitsReader& in,
 			int left_sample,
@@ -126,20 +125,20 @@ private:
 			)
 	{
 		/* First samples don't need to be decompressed. */
-		boost::uint32_t sample_count = 2;
-		*(*out_data)++ = (boost::int16_t) left_sample;
-		*(*out_data)++ = (boost::int16_t) right_sample;
+		std::uint32_t sample_count = 2;
+		*(*out_data)++ = (std::int16_t) left_sample;
+		*(*out_data)++ = (std::int16_t) right_sample;
 
 		unsigned bitsNeeded = n_bits*2;
 		while (sample_count < 4096 && in.gotBits(bitsNeeded))
 		{														
 			int	left_raw_code = in.read_uint(n_bits);
 			doSample(n_bits, left_sample, left_stepsize_index, left_raw_code);
-			*(*out_data)++ = (boost::int16_t) left_sample;
+			*(*out_data)++ = (std::int16_t) left_sample;
 
 			int	right_raw_code = in.read_uint(n_bits);
 			doSample(n_bits, right_sample, right_stepsize_index, right_raw_code);
-			*(*out_data)++ = (boost::int16_t) right_sample;
+			*(*out_data)++ = (std::int16_t) right_sample;
 
 			sample_count++;
 		}
@@ -150,7 +149,7 @@ public:
 
 	// Utility function: uncompress ADPCM data from in BitReader to
 	// out_data[]. Returns the output samplecount.
-	static boost::uint32_t adpcm_expand(
+	static std::uint32_t adpcm_expand(
 		unsigned char* &data,
 		BitsReader& in,
 		unsigned int insize,
@@ -167,10 +166,10 @@ public:
 		unsigned int n_bits = in.read_uint(2) + 2; // 2 to 5 bits 
 
 		// The compression ratio is 4:1, so this should be enough...
-		boost::int16_t* out_data = new boost::int16_t[insize * 5];
+		std::int16_t* out_data = new std::int16_t[insize * 5];
 		data = reinterpret_cast<unsigned char *>(out_data);
 
-		boost::uint32_t sample_count = 0;
+		std::uint32_t sample_count = 0;
 
 		while ( in.gotBits(22) )
 		{
@@ -264,15 +263,15 @@ int ADPCMDecoder::s_stepsize[STEPSIZE_CT] = {
 static void
 u8_expand(unsigned char * &data,
 	const unsigned char* input,
-	boost::uint32_t input_size) // This is also the number of u8bit samples
+	std::uint32_t input_size) // This is also the number of u8bit samples
 {
-	boost::int16_t	*out_data = new boost::int16_t[input_size];
+	std::int16_t	*out_data = new std::int16_t[input_size];
 
 	// Convert 8-bit to 16
-	const boost::uint8_t *inp = input;
-	boost::int16_t *outp = out_data;
+	const std::uint8_t *inp = input;
+	std::int16_t *outp = out_data;
 	for (unsigned int i = input_size; i>0; i--) {
-		*outp++ = ((boost::int16_t)(*inp++) - 128) * 256;
+		*outp++ = ((std::int16_t)(*inp++) - 128) * 256;
 	}
 	
 	data = (unsigned char *)out_data;
@@ -364,20 +363,20 @@ AudioDecoderSimple::setup(const AudioInfo& info)
 	}
 }
 
-boost::uint8_t*
-AudioDecoderSimple::decode(const boost::uint8_t* input, boost::uint32_t inputSize,
-        boost::uint32_t& outputSize, boost::uint32_t& decodedBytes)
+std::uint8_t*
+AudioDecoderSimple::decode(const std::uint8_t* input, std::uint32_t inputSize,
+        std::uint32_t& outputSize, std::uint32_t& decodedBytes)
 {
 
-	unsigned char* decodedData = NULL;
-	boost::uint32_t outsize = 0;
+	unsigned char* decodedData = nullptr;
+	std::uint32_t outsize = 0;
 
     switch (_codec) {
 	case AUDIO_CODEC_ADPCM:
 		{
-		//boost::uint32_t sample_count = inputSize * ( _stereo ? 1 : 2 ); //(_sampleCount == 0 ? inputSize / ( _stereo ? 4 : 2 ) : _sampleCount);
+		//std::uint32_t sample_count = inputSize * ( _stereo ? 1 : 2 ); //(_sampleCount == 0 ? inputSize / ( _stereo ? 4 : 2 ) : _sampleCount);
 		BitsReader br(input, inputSize);
-		boost::uint32_t sample_count = ADPCMDecoder::adpcm_expand(decodedData, br, inputSize, _stereo);
+		std::uint32_t sample_count = ADPCMDecoder::adpcm_expand(decodedData, br, inputSize, _stereo);
 		outsize = sample_count * (_stereo ? 4 : 2);
 		}
 		break;
@@ -416,10 +415,10 @@ AudioDecoderSimple::decode(const boost::uint8_t* input, boost::uint32_t inputSiz
 			// nothing and is less of a continual maintenance headache
 			// than compile-time detection.
 			union u {
-				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 = { 0x0001 };
 
@@ -439,12 +438,12 @@ AudioDecoderSimple::decode(const boost::uint8_t* input, boost::uint32_t inputSiz
 					// Cast the buffers to help the compiler understand that we
 					// swapping 16-bit words. This should produce a single-instruction
 					// swap for each 16-bit word.
-					const boost::uint16_t* input16 = reinterpret_cast<const boost::uint16_t*>(input);
-					boost::uint16_t* decodedData16 = reinterpret_cast<boost::uint16_t*>(decodedData);
-					unsigned inputSize16 = inputSize / sizeof(boost::uint16_t);
+					const std::uint16_t* input16 = reinterpret_cast<const std::uint16_t*>(input);
+					std::uint16_t* decodedData16 = reinterpret_cast<std::uint16_t*>(decodedData);
+					unsigned inputSize16 = inputSize / sizeof(std::uint16_t);
 					for ( unsigned i = 0; i < inputSize16; i++ )
 					{
-						boost::uint16_t sample = input16[i];
+						std::uint16_t sample = input16[i];
 						decodedData16[i] = ((sample << 8) & 0xFF00) | ((sample >> 8) & 0x00FF);
 					}
 					break;
@@ -456,13 +455,13 @@ AudioDecoderSimple::decode(const boost::uint8_t* input, boost::uint32_t inputSiz
 		// ???, this should only decode ADPCM, RAW and UNCOMPRESSED
 	}
 
-	boost::uint8_t* tmp_raw_buffer = decodedData;
-	boost::uint32_t tmp_raw_buffer_size = 0;
+	std::uint8_t* tmp_raw_buffer = decodedData;
+	std::uint32_t tmp_raw_buffer_size = 0;
 
 	// If we need to convert samplerate or/and from mono to stereo...
 	if (outsize > 0 && (_sampleRate != 44100 || !_stereo)) {
 
-		boost::int16_t* adjusted_data = 0;
+		std::int16_t* adjusted_data = nullptr;
 		int	adjusted_size = 0;
 		int sample_count = outsize / (_stereo ? 4 : 2); // samples are of size 2
 
@@ -479,12 +478,12 @@ AudioDecoderSimple::decode(const boost::uint8_t* input, boost::uint32_t inputSiz
 			delete[] tmp_raw_buffer;
 			outputSize = 0;
 			decodedBytes = 0;
-			return NULL;
+			return nullptr;
 		}
 
 		// Move the new data to the sound-struct
 		delete[] tmp_raw_buffer;
-		tmp_raw_buffer = reinterpret_cast<boost::uint8_t*>(adjusted_data);
+		tmp_raw_buffer = reinterpret_cast<std::uint8_t*>(adjusted_data);
 		tmp_raw_buffer_size = adjusted_size;
 
 	} else {
diff --git a/libmedia/AudioDecoderSimple.h b/libmedia/AudioDecoderSimple.h
index 5f302eb..e000621 100644
--- a/libmedia/AudioDecoderSimple.h
+++ b/libmedia/AudioDecoderSimple.h
@@ -61,7 +61,7 @@ public:
 	~AudioDecoderSimple();
 
     // See dox in AudioDecoder.h
-	boost::uint8_t* decode(const boost::uint8_t* input, boost::uint32_t inputSize, boost::uint32_t& outputSize, boost::uint32_t& decodedBytes);
+	std::uint8_t* decode(const std::uint8_t* input, std::uint32_t inputSize, std::uint32_t& outputSize, std::uint32_t& decodedBytes);
 
 private:
 
@@ -75,10 +75,10 @@ private:
 	audioCodecType _codec;
 
 	// samplerate
-	boost::uint16_t _sampleRate;
+	std::uint16_t _sampleRate;
 
 	// sampleCount
-	boost::uint32_t _sampleCount;
+	std::uint32_t _sampleCount;
 
 	// stereo
 	bool _stereo;
diff --git a/libmedia/AudioDecoderSpeex.cpp b/libmedia/AudioDecoderSpeex.cpp
index 521b07d..ae555a1 100644
--- a/libmedia/AudioDecoderSpeex.cpp
+++ b/libmedia/AudioDecoderSpeex.cpp
@@ -21,10 +21,9 @@
 #include "MediaParser.h" // for EncodedAudioFrame
 #include "log.h"
 
-#include <boost/bind.hpp>
-#include <boost/checked_delete.hpp>
-#include <boost/scoped_array.hpp>
-#include <boost/cstdint.hpp> // For C99 int types
+#include <functional>
+#include <boost/utility.hpp> // noncopyable
+#include <cstdint> // For C99 int types
 
 #ifdef RESAMPLING_SPEEX
 # include <boost/rational.hpp>
@@ -59,11 +58,11 @@ AudioDecoderSpeex::AudioDecoderSpeex()
     speex_resampler_get_ratio (_resampler, &num, &den);
     assert(num && den);
 
-    boost::rational<boost::uint32_t> numsamples(den, num);
+    boost::rational<std::uint32_t> numsamples(den, num);
 
     numsamples *= _speex_framesize * 2 /* convert to stereo */;
 
-    _target_frame_size = boost::rational_cast<boost::uint32_t>(numsamples);
+    _target_frame_size = boost::rational_cast<std::uint32_t>(numsamples);
 #endif
 }
 AudioDecoderSpeex::~AudioDecoderSpeex()
@@ -79,29 +78,29 @@ AudioDecoderSpeex::~AudioDecoderSpeex()
 
 struct DecodedFrame : boost::noncopyable
 {
-    DecodedFrame(boost::int16_t* newdata, size_t datasize)
+    DecodedFrame(std::int16_t* newdata, size_t datasize)
     : data(newdata),
       size(datasize)
     {}
 
-    boost::scoped_array<boost::int16_t> data;
+    std::unique_ptr<std::int16_t[]> data;
     size_t size;
 };
 
-boost::uint8_t*
+std::uint8_t*
 AudioDecoderSpeex::decode(const EncodedAudioFrame& input,
-    boost::uint32_t& outputSize)
+    std::uint32_t& outputSize)
 {
     speex_bits_read_from(&_speex_bits, reinterpret_cast<char*>(input.data.get()),
                          input.dataSize);
 
     std::vector<DecodedFrame*> decoded_frames;
 
-    boost::uint32_t total_size = 0;
+    std::uint32_t total_size = 0;
 
     while (speex_bits_remaining(&_speex_bits)) {
 
-        boost::scoped_array<short> output( new short[_speex_framesize] );
+        std::unique_ptr<short[]> output( new short[_speex_framesize] );
 
         int rv = speex_decode_int(_speex_dec_state, &_speex_bits, output.get());
         if (rv != 0) {
@@ -113,11 +112,11 @@ AudioDecoderSpeex::decode(const EncodedAudioFrame& input,
         }
 
         
-        boost::int16_t* conv_data = 0;
+        std::int16_t* conv_data = nullptr;
 
 #ifdef RESAMPLING_SPEEX
 		spx_uint32_t conv_size = 0;
-        conv_data = new boost::int16_t[_target_frame_size];
+        conv_data = new std::int16_t[_target_frame_size];
         memset(conv_data, 0, _target_frame_size * 2);
 
         spx_uint32_t in_size = _speex_framesize;
@@ -139,19 +138,19 @@ AudioDecoderSpeex::decode(const EncodedAudioFrame& input,
         conv_size *= 2;
 
         // Now, duplicate all the samples so we get a stereo sound.
-        for (boost::uint32_t i = 0; i < conv_size; i += 2) {
+        for (std::uint32_t i = 0; i < conv_size; i += 2) {
             conv_data[i+1] = conv_data[i];
         }
 
         // Our interface requires returning the audio size in bytes.
-        conv_size *= sizeof(boost::int16_t);
+        conv_size *= sizeof(std::int16_t);
 #else
         int outsize = 0;
         AudioResampler::convert_raw_data(&conv_data, &outsize, output.get(), 
             _speex_framesize /* sample count*/, 2 /* sample size */,
             16000, false /* stereo */, 44100 /* new rate */,
             true /* convert to stereo */);
-        boost::uint32_t conv_size = outsize;
+        std::uint32_t conv_size = outsize;
 #endif
         total_size += conv_size;
 
@@ -162,12 +161,10 @@ AudioDecoderSpeex::decode(const EncodedAudioFrame& input,
 
     // We have to jump through hoops because decode() requires as much
     // data to be returned as possible.
-    boost::uint8_t* rv = new boost::uint8_t[total_size];
-    boost::uint8_t* ptr = rv;
+    std::uint8_t* rv = new std::uint8_t[total_size];
+    std::uint8_t* ptr = rv;
 
-    for (std::vector<DecodedFrame*>::iterator it = decoded_frames.begin(),
-         end = decoded_frames.end(); it != end; ++it) {
-        DecodedFrame* frame = *it;
+    for (DecodedFrame* frame : decoded_frames) {
 
         memcpy(ptr, frame->data.get(), frame->size);
 
diff --git a/libmedia/AudioDecoderSpeex.h b/libmedia/AudioDecoderSpeex.h
index 5e7d85a..ae43ccb 100644
--- a/libmedia/AudioDecoderSpeex.h
+++ b/libmedia/AudioDecoderSpeex.h
@@ -43,8 +43,8 @@ public:
     AudioDecoderSpeex();
     ~AudioDecoderSpeex();
 
-    boost::uint8_t* decode(const EncodedAudioFrame& input,
-        boost::uint32_t& outputSize);
+    std::uint8_t* decode(const EncodedAudioFrame& input,
+        std::uint32_t& outputSize);
 
 private:
 
@@ -55,7 +55,7 @@ private:
 #ifdef RESAMPLING_SPEEX
     SpeexResamplerState* _resampler;
     /// Number of samples in a resampled 44kHz stereo frame.
-    boost::uint32_t _target_frame_size;
+    std::uint32_t _target_frame_size;
 #endif
 };
 
diff --git a/libmedia/AudioInput.h b/libmedia/AudioInput.h
index dc8cd08..426ba88 100644
--- a/libmedia/AudioInput.h
+++ b/libmedia/AudioInput.h
@@ -20,7 +20,7 @@
 #ifndef GNASH_AUDIOINPUT_H
 #define GNASH_AUDIOINPUT_H
 
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include <string>
 #include "dsodefs.h" //DSOEXPORT
 
diff --git a/libmedia/AudioResampler.cpp b/libmedia/AudioResampler.cpp
index 5e648ce..81ecc2e 100644
--- a/libmedia/AudioResampler.cpp
+++ b/libmedia/AudioResampler.cpp
@@ -27,7 +27,7 @@ namespace media {
 
 void 
 AudioResampler::convert_raw_data(
-    boost::int16_t** adjusted_data,
+    std::int16_t** adjusted_data,
     int* adjusted_size,
     void* data,
     int sample_count,	// A stereo pair counts as one
@@ -68,9 +68,9 @@ AudioResampler::convert_raw_data(
     }
 
     int	output_sample_count = (sample_count * dup * (stereo ? 2 : 1)) / inc;
-    boost::int16_t*	out_data = new boost::int16_t[output_sample_count];
+    std::int16_t*	out_data = new std::int16_t[output_sample_count];
     *adjusted_data = out_data;
-    *adjusted_size = output_sample_count * sizeof(boost::int16_t); // in bytes
+    *adjusted_size = output_sample_count * sizeof(std::int16_t); // in bytes
 
     // Either inc > 1 (decimate the audio)
     // or dup > 1 (repeat samples)
@@ -78,12 +78,12 @@ AudioResampler::convert_raw_data(
     if (inc == 1 && dup == 1)
     {
 	    // No tranformation required
-	    std::memcpy(out_data, data, output_sample_count * sizeof(boost::int16_t));
+	    std::memcpy(out_data, data, output_sample_count * sizeof(std::int16_t));
     }
     else if (inc > 1)
     {
 	// Downsample by skipping samples from the input
-	boost::int16_t*	in = (boost::int16_t*) data;
+	std::int16_t*	in = (std::int16_t*) data;
 	for (int i = output_sample_count; i > 0; i--)
 	{
 	    *out_data++ = *in;
@@ -100,7 +100,7 @@ AudioResampler::convert_raw_data(
 	// then the right sample in both channels alternately.
 	// So for stereo-stereo transforms we have a stereo routine.
 
-	boost::int16_t*	in = (boost::int16_t*) data;
+	std::int16_t*	in = (std::int16_t*) data;
 
 	if (stereo && m_stereo) {
 	    // Stereo-to-stereo upsampling: Replicate pairs of samples
diff --git a/libmedia/AudioResampler.h b/libmedia/AudioResampler.h
index 22b5e16..0f7f68e 100644
--- a/libmedia/AudioResampler.h
+++ b/libmedia/AudioResampler.h
@@ -21,7 +21,7 @@
 #ifndef __GNASH_UTIL_H
 #define __GNASH_UTIL_H
 
-#include <boost/cstdint.hpp> // for boost::int16_t
+#include <cstdint> // for std::int16_t
 
 namespace gnash {
 namespace media {
@@ -64,7 +64,7 @@ public:
 	///
 	/// @param m_stereo
 	/// Do we want the output data to be in stereo (output)?
-	static void convert_raw_data(boost::int16_t** adjusted_data,
+	static void convert_raw_data(std::int16_t** adjusted_data,
 		  int* adjusted_size, void* data, int sample_count,
 		  int sample_size, int sample_rate, bool stereo,
 		  int m_sample_rate, bool m_stereo);
diff --git a/libmedia/FLVParser.cpp b/libmedia/FLVParser.cpp
index 8210e34..2e984a0 100644
--- a/libmedia/FLVParser.cpp
+++ b/libmedia/FLVParser.cpp
@@ -18,6 +18,8 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
+#include <string>
+#include <iosfwd>
 
 #include "FLVParser.h"
 #include "log.h"
@@ -27,8 +29,6 @@
 #include "SimpleBuffer.h"
 #include "GnashAlgorithm.h"
 
-#include <string>
-#include <iosfwd>
 
 // Define the following macro the have seek() operations printed
 //#define GNASH_DEBUG_SEEK 1
@@ -38,16 +38,14 @@ namespace media {
 
 
 const size_t FLVParser::paddingBytes;
-const boost::uint16_t FLVParser::FLVAudioTag::flv_audio_rates [] = 
+const std::uint16_t FLVParser::FLVAudioTag::flv_audio_rates [] =
     { 5500, 11000, 22050, 44100 };
 
-FLVParser::FLVParser(std::auto_ptr<IOChannel> lt)
+FLVParser::FLVParser(std::unique_ptr<IOChannel> lt)
 	:
-	MediaParser(lt),
+	MediaParser(std::move(lt)),
 	_lastParsedPosition(0),
 	_nextPosToIndex(0),
-	_nextAudioFrame(0),
-	_nextVideoFrame(0),
 	_audio(false),
 	_video(false),
 	_cuePoints(),
@@ -68,10 +66,10 @@ FLVParser::~FLVParser()
 
 // would be called by main thread
 bool
-FLVParser::seek(boost::uint32_t& time)
+FLVParser::seek(std::uint32_t& time)
 {
 
-	boost::mutex::scoped_lock streamLock(_streamMutex);
+	std::lock_guard<std::mutex> streamLock(_streamMutex);
 	// we might obtain this lock while the parser is pushing the last
 	// encoded frame on the queue, or while it is waiting on the wakeup
 	// condition
@@ -130,7 +128,7 @@ FLVParser::parseNextChunk()
 
 // would be called by parser thread
 void
-FLVParser::indexAudioTag(const FLVTag& tag, boost::uint32_t thisTagPos)
+FLVParser::indexAudioTag(const FLVTag& tag, std::uint32_t thisTagPos)
 {
 	if ( _videoInfo.get()) {
 		// if we have video we let that drive cue points
@@ -149,7 +147,7 @@ FLVParser::indexAudioTag(const FLVTag& tag, boost::uint32_t thisTagPos)
 }
 
 void
-FLVParser::indexVideoTag(const FLVTag& tag, const FLVVideoTag& videotag, boost::uint32_t thisTagPos)
+FLVParser::indexVideoTag(const FLVTag& tag, const FLVVideoTag& videotag, std::uint32_t thisTagPos)
 {
 	if ( videotag.frametype != FLV_VIDEO_KEYFRAME ) {
 		return;
@@ -161,10 +159,10 @@ FLVParser::indexVideoTag(const FLVTag& tag, const FLVVideoTag& videotag, boost::
 }
 
 
-std::auto_ptr<EncodedAudioFrame>
-FLVParser::parseAudioTag(const FLVTag& flvtag, const FLVAudioTag& audiotag, boost::uint32_t thisTagPos)
+std::unique_ptr<EncodedAudioFrame>
+FLVParser::parseAudioTag(const FLVTag& flvtag, const FLVAudioTag& audiotag, std::uint32_t thisTagPos)
 {
-	std::auto_ptr<EncodedAudioFrame> frame;
+	std::unique_ptr<EncodedAudioFrame> frame;
 
 	if ( ! _audio ) {
 		log_error(_("Unexpected audio tag found at offset %d FLV stream "
@@ -174,10 +172,10 @@ FLVParser::parseAudioTag(const FLVTag& flvtag, const FLVAudioTag& audiotag, boos
 	}
 
 	bool header = false;
-	boost::uint32_t bodyLength = flvtag.body_size;
+	std::uint32_t bodyLength = flvtag.body_size;
 
 	if (audiotag.codec == AUDIO_CODEC_AAC) {
-		boost::uint8_t packettype = _stream->read_byte();
+		std::uint8_t packettype = _stream->read_byte();
 		header = (packettype == 0);
 		--bodyLength;
 	}
@@ -201,7 +199,7 @@ FLVParser::parseAudioTag(const FLVTag& flvtag, const FLVAudioTag& audiotag, boos
             // never smaller.
             const size_t bufSize = frame->dataSize + paddingBytes;
 
-            boost::uint8_t* data = new boost::uint8_t[bufSize];
+            std::uint8_t* data = new std::uint8_t[bufSize];
 
             std::copy(frame->data.get(), frame->data.get() + bufSize, data);
 
@@ -218,8 +216,8 @@ FLVParser::parseAudioTag(const FLVTag& flvtag, const FLVAudioTag& audiotag, boos
 	return frame;
 }
 
-std::auto_ptr<EncodedVideoFrame>
-FLVParser::parseVideoTag(const FLVTag& flvtag, const FLVVideoTag& videotag, boost::uint32_t thisTagPos)
+std::unique_ptr<EncodedVideoFrame>
+FLVParser::parseVideoTag(const FLVTag& flvtag, const FLVVideoTag& videotag, std::uint32_t thisTagPos)
 {
 	if ( ! _video ) {
 		log_error(_("Unexpected video tag found at offset %d of FLV stream "
@@ -229,7 +227,7 @@ FLVParser::parseVideoTag(const FLVTag& flvtag, const FLVVideoTag& videotag, boos
 	}
 
 	bool header = false;
-	boost::uint32_t bodyLength = flvtag.body_size;
+	std::uint32_t bodyLength = flvtag.body_size;
 
 	switch(videotag.codec) {
 		case VIDEO_CODEC_VP6:
@@ -241,14 +239,14 @@ FLVParser::parseVideoTag(const FLVTag& flvtag, const FLVVideoTag& videotag, boos
 		}
 		case VIDEO_CODEC_H264:
 		{
-			boost::uint8_t packettype = _stream->read_byte();
+			std::uint8_t packettype = _stream->read_byte();
 			IF_VERBOSE_PARSE( log_debug(_("AVC packet type: %d"),
                         (unsigned)packettype) );
 
 			header = (packettype == 0);
 
 			// 24-bits value for composition time offset ignored for now.
-			boost::uint8_t tmp[3];
+			std::uint8_t tmp[3];
 			_stream->read(tmp, 3);
 	
 			bodyLength -= 4;
@@ -258,7 +256,7 @@ FLVParser::parseVideoTag(const FLVTag& flvtag, const FLVVideoTag& videotag, boos
 			break;
 	}
 
-	std::auto_ptr<EncodedVideoFrame> frame = readVideoFrame(bodyLength-1,
+	std::unique_ptr<EncodedVideoFrame> frame = readVideoFrame(bodyLength-1,
             flvtag.timestamp);
 	if ( ! frame.get() ) {
             log_error(_("could not read video frame?"));
@@ -276,7 +274,7 @@ FLVParser::parseVideoTag(const FLVTag& flvtag, const FLVVideoTag& videotag, boos
             // never smaller.
             const size_t bufSize = frame->dataSize() + paddingBytes;
 
-            boost::uint8_t* data = new boost::uint8_t[bufSize];
+            std::uint8_t* data = new std::uint8_t[bufSize];
 
             std::copy(frame->data(), frame->data() + bufSize, data);
 			_videoInfo->extra.reset( 
@@ -297,7 +295,7 @@ FLVParser::parseNextTag(bool index_only)
 {
 	// lock the stream while reading from it, so actionscript
 	// won't mess with the parser on seek  or on getBytesLoaded
-	boost::mutex::scoped_lock streamLock(_streamMutex);
+	std::unique_lock<std::mutex> streamLock(_streamMutex);
 
 	if ( index_only && _indexingCompleted ) return false; 
 	if ( _parsingComplete ) return false;
@@ -308,7 +306,7 @@ FLVParser::parseNextTag(bool index_only)
 		_seekRequest = false;
 	}
 
-	boost::uint64_t& position = index_only ? _nextPosToIndex : _lastParsedPosition;
+	std::uint64_t& position = index_only ? _nextPosToIndex : _lastParsedPosition;
 	bool& completed = index_only ? _indexingCompleted : _parsingComplete;
 
 	//log_debug("parseNextTag: _lastParsedPosition:%d, _nextPosToIndex:%d, index_only:%d", _lastParsedPosition, _nextPosToIndex, index_only);
@@ -328,7 +326,7 @@ FLVParser::parseNextTag(bool index_only)
 	//log_debug("FLVParser::parseNextTag seeked to %d", thisTagPos+4);
 
 	// Read the tag info
-	boost::uint8_t chunk[12];
+	std::uint8_t chunk[12];
 	int actuallyRead = _stream->read(chunk, 12);
 	if ( actuallyRead < 12 )
 	{
@@ -340,7 +338,6 @@ FLVParser::parseNextTag(bool index_only)
 		completed = true;
 
         // update bytes loaded
-        boost::mutex::scoped_lock lock(_bytesLoadedMutex);
 		_bytesLoaded = _stream->tell(); 
 		return false;
 	}
@@ -358,7 +355,6 @@ FLVParser::parseNextTag(bool index_only)
 	}
 
 	if ( position > _bytesLoaded ) {
-		boost::mutex::scoped_lock lock(_bytesLoadedMutex);
 		_bytesLoaded = position;
 	}
 
@@ -377,7 +373,7 @@ FLVParser::parseNextTag(bool index_only)
 		}
 
 
-		std::auto_ptr<EncodedAudioFrame> frame = 
+		std::unique_ptr<EncodedAudioFrame> frame = 
             parseAudioTag(flvtag, audiotag, thisTagPos);
 		if (!frame.get()) {
 			return false;
@@ -388,7 +384,7 @@ FLVParser::parseNextTag(bool index_only)
 		// the _qMutex...
 		// We've done using the stream for this tag parsing anyway
 		streamLock.unlock();
-		pushEncodedAudioFrame(frame);
+		pushEncodedAudioFrame(std::move(frame));
 	}
 	else if (flvtag.type == FLV_VIDEO_TAG)
 	{
@@ -401,7 +397,7 @@ FLVParser::parseNextTag(bool index_only)
 			}
 		}
 
-		std::auto_ptr<EncodedVideoFrame> frame = 
+		std::unique_ptr<EncodedVideoFrame> frame = 
             parseVideoTag(flvtag, videotag, thisTagPos);
 		if (!frame.get()) {
 			return false;
@@ -412,7 +408,7 @@ FLVParser::parseNextTag(bool index_only)
 		// might block us waiting for buffers flush
 		// the _qMutex...
 		streamLock.unlock();
-		pushEncodedVideoFrame(frame);
+		pushEncodedVideoFrame(std::move(frame));
 
 	}
 	else if (flvtag.type == FLV_META_TAG)
@@ -425,7 +421,7 @@ FLVParser::parseNextTag(bool index_only)
                     static_cast<int>(chunk[11]));
 		}
 		// Extract information from the meta tag
-		std::auto_ptr<SimpleBuffer> metaTag(new SimpleBuffer(
+		std::unique_ptr<SimpleBuffer> metaTag(new SimpleBuffer(
                     flvtag.body_size-1));
 		size_t actuallyRead = _stream->read(metaTag->data(),
                 flvtag.body_size - 1);
@@ -439,15 +435,15 @@ FLVParser::parseNextTag(bool index_only)
 		}
 		metaTag->resize(actuallyRead);
 
-		boost::uint32_t terminus = getUInt24(metaTag->data() +
+		std::uint32_t terminus = getUInt24(metaTag->data() +
                 actuallyRead - 3);
 
         if (terminus != 9) {
 			log_error(_("Corrupt FLV: Meta tag unterminated!"));
 		}
 
-		boost::mutex::scoped_lock lock(_metaTagsMutex);
-		_metaTags.insert(std::make_pair(flvtag.timestamp, MetaTags::mapped_type(metaTag)));
+		std::lock_guard<std::mutex> lock(_metaTagsMutex);
+		_metaTags.insert(std::make_pair(flvtag.timestamp, std::move(metaTag)));
 	}
 	else
 	{
@@ -457,7 +453,7 @@ FLVParser::parseNextTag(bool index_only)
 	}
 
 	_stream->read(chunk, 4);
-	boost::uint32_t prevtagsize = chunk[0] << 24 | chunk[1] << 16 |
+	std::uint32_t prevtagsize = chunk[0] << 24 | chunk[1] << 16 |
         chunk[2] << 8 | chunk[3];
 	if (prevtagsize != flvtag.body_size + 11) {
 		log_error(_("Corrupt FLV: previous tag size record (%1%) unexpected "
@@ -475,7 +471,7 @@ FLVParser::parseHeader()
 
 	// We only use 5 bytes of the header, because the last 4 bytes represent
     // an integer which is always 1.
-	boost::uint8_t header[9];
+	std::uint8_t header[9];
 	if ( _stream->read(header, 9) != 9 )
 	{
             log_error(_("FLVParser::parseHeader: couldn't read 9 bytes of header"));
@@ -488,7 +484,7 @@ FLVParser::parseHeader()
 		return false;
 	}
 
-	const boost::uint8_t version = header[3];
+	const std::uint8_t version = header[3];
 
 	// Parse the audio+video bitmask
 	_audio = header[4]&(1<<2);
@@ -500,31 +496,30 @@ FLVParser::parseHeader()
 	return true;
 }
 
-inline boost::uint32_t
-FLVParser::getUInt24(boost::uint8_t* in)
+inline std::uint32_t
+FLVParser::getUInt24(std::uint8_t* in)
 {
 	// The bits are in big endian order
 	return (in[0] << 16) | (in[1] << 8) | in[2];
 }
 
-boost::uint64_t
+std::uint64_t
 FLVParser::getBytesLoaded() const
 {
-	boost::mutex::scoped_lock lock(_bytesLoadedMutex);
-	return _bytesLoaded;
+	return _bytesLoaded.load();
 }
 
 // would be called by parser thread
 /*private*/
-std::auto_ptr<EncodedAudioFrame>
-FLVParser::readAudioFrame(boost::uint32_t dataSize, boost::uint32_t timestamp)
+std::unique_ptr<EncodedAudioFrame>
+FLVParser::readAudioFrame(std::uint32_t dataSize, std::uint32_t timestamp)
 {
 
-	std::auto_ptr<EncodedAudioFrame> frame(new EncodedAudioFrame);
+	std::unique_ptr<EncodedAudioFrame> frame(new EncodedAudioFrame);
     
     const size_t bufSize = dataSize + paddingBytes;
 
-    boost::uint8_t* data = new boost::uint8_t[bufSize];
+    std::uint8_t* data = new std::uint8_t[bufSize];
 	const size_t bytesRead = _stream->read(data, dataSize);
 
     std::fill(data + bytesRead, data + bufSize, 0);
@@ -543,14 +538,14 @@ FLVParser::readAudioFrame(boost::uint32_t dataSize, boost::uint32_t timestamp)
 
 // would be called by parser thread
 /*private*/
-std::auto_ptr<EncodedVideoFrame>
-FLVParser::readVideoFrame(boost::uint32_t dataSize, boost::uint32_t timestamp)
+std::unique_ptr<EncodedVideoFrame>
+FLVParser::readVideoFrame(std::uint32_t dataSize, std::uint32_t timestamp)
 {
-	std::auto_ptr<EncodedVideoFrame> frame;
+	std::unique_ptr<EncodedVideoFrame> frame;
 
     const size_t bufSize = dataSize + paddingBytes;
 
-	boost::uint8_t* data = new boost::uint8_t[bufSize];
+	std::uint8_t* data = new std::uint8_t[bufSize];
 	const size_t bytesRead = _stream->read(data, dataSize);
 
     std::fill(data + bytesRead, data + bufSize, 0);
@@ -565,15 +560,15 @@ FLVParser::readVideoFrame(boost::uint32_t dataSize, boost::uint32_t timestamp)
 
 
 void
-FLVParser::fetchMetaTags(OrderedMetaTags& tags, boost::uint64_t ts)
+FLVParser::fetchMetaTags(OrderedMetaTags& tags, std::uint64_t ts)
 {
-	boost::mutex::scoped_lock lock(_metaTagsMutex);
+	std::lock_guard<std::mutex> lock(_metaTagsMutex);
 	if (!_metaTags.empty()) {
         MetaTags::iterator it = _metaTags.upper_bound(ts);
 
         // Copy the first value into the return container.
         std::transform(_metaTags.begin(), it, std::back_inserter(tags),
-                boost::bind(&MetaTags::value_type::second, _1));
+            [](const MetaTags::value_type& pair) { return pair.second; });
 
         _metaTags.erase(_metaTags.begin(), it);
 	}
diff --git a/libmedia/FLVParser.h b/libmedia/FLVParser.h
index 5a31c14..2349b31 100644
--- a/libmedia/FLVParser.h
+++ b/libmedia/FLVParser.h
@@ -24,13 +24,14 @@
 #ifndef GNASH_FLVPARSER_H
 #define GNASH_FLVPARSER_H
 
-#include "dsodefs.h"
-#include "MediaParser.h" // for inheritance
-
 #include <memory>
 #include <map>
+#include <mutex>
 
-#include <boost/thread/mutex.hpp>
+#include <boost/utility.hpp> // noncopyable
+
+#include "dsodefs.h"
+#include "MediaParser.h" // for inheritance
 
 namespace gnash {
 namespace media {
@@ -51,9 +52,9 @@ public:
     /// @param datasize
     ///     Video header data size
     ///
-    /// @todo take a SimpleBuffer by auto_ptr
+    /// @todo take a SimpleBuffer by unique_ptr
     ///
-    ExtraVideoInfoFlv(boost::uint8_t* extradata, size_t datasize)
+    ExtraVideoInfoFlv(std::uint8_t* extradata, size_t datasize)
         :
         data(extradata),
         size(datasize)
@@ -61,7 +62,7 @@ public:
     }
 
     /// Video stream header
-    boost::scoped_array<boost::uint8_t> data;
+    std::unique_ptr<std::uint8_t[]> data;
 
     /// Video stream header size
     size_t size;
@@ -83,9 +84,9 @@ public:
     /// @param datasize
     ///     Audio header data size
     ///
-    /// @todo take a SimpleBuffer by auto_ptr
+    /// @todo take a SimpleBuffer by unique_ptr
     ///
-    ExtraAudioInfoFlv(boost::uint8_t* extradata, size_t datasize)
+    ExtraAudioInfoFlv(std::uint8_t* extradata, size_t datasize)
         :
         data(extradata),
         size(datasize)
@@ -93,7 +94,7 @@ public:
     }
 
     /// Audio stream header
-    boost::scoped_array<boost::uint8_t> data;
+    std::unique_ptr<std::uint8_t[]> data;
 
     /// Audio stream header size
     size_t size;
@@ -120,19 +121,19 @@ public:
 	/// 	IOChannel to use for input.
 	/// 	Ownership transferred.
 	///
-	FLVParser(std::auto_ptr<IOChannel> lt);
+	FLVParser(std::unique_ptr<IOChannel> lt);
 
 	/// Kills the parser...
 	~FLVParser();
 
 	// see dox in MediaParser.h
-	virtual bool seek(boost::uint32_t&);
+	virtual bool seek(std::uint32_t&);
 
 	// see dox in MediaParser.h
 	virtual bool parseNextChunk();
 
 	// see dox in MediaParser.h
-	boost::uint64_t getBytesLoaded() const;
+	std::uint64_t getBytesLoaded() const;
 
 	// see dox in MediaParser.h
 	bool indexingCompleted() const
@@ -152,7 +153,7 @@ public:
     ///             timestamp order. Ownership of the data is shared. It
     ///             is destroyed automatically along with the last owner.
     //
-    virtual void fetchMetaTags(OrderedMetaTags& tags, boost::uint64_t ts);
+    virtual void fetchMetaTags(OrderedMetaTags& tags, std::uint64_t ts);
 
 private:
 
@@ -165,7 +166,7 @@ private:
 
 	struct FLVTag : public boost::noncopyable
 	{
-		FLVTag(boost::uint8_t* stream)
+		FLVTag(std::uint8_t* stream)
 		    :
             type(stream[0]),
             body_size(getUInt24(stream+1)),
@@ -173,14 +174,14 @@ private:
 		{}
 
 		/// Equals tagType
-		boost::uint8_t type;
-		boost::uint32_t body_size;
-		boost::uint32_t timestamp;
+		std::uint8_t type;
+		std::uint32_t body_size;
+		std::uint32_t timestamp;
 	};
 
 	struct FLVAudioTag : public boost::noncopyable
 	{
-		FLVAudioTag(const boost::uint8_t& byte)
+		FLVAudioTag(const std::uint8_t& byte)
 		    :
             codec( (byte & 0xf0) >> 4 ),
 		    samplerate( flv_audio_rates[(byte & 0x0C) >> 2] ),
@@ -190,18 +191,18 @@ private:
 		}
 
 		/// Equals audioCodecType
-		boost::uint8_t codec;
+		std::uint8_t codec;
 
-		boost::uint16_t samplerate;
+		std::uint16_t samplerate;
 
 		/// Size of each sample, in bytes
-		boost::uint8_t samplesize;
+		std::uint8_t samplesize;
 
 		bool stereo;
 
     private:
 	
-        static const boost::uint16_t flv_audio_rates[];
+        static const std::uint16_t flv_audio_rates[];
 	
     };
 
@@ -214,16 +215,16 @@ private:
 
 	struct FLVVideoTag : public boost::noncopyable
 	{
-		FLVVideoTag(const boost::uint8_t& byte)
+		FLVVideoTag(const std::uint8_t& byte)
             :
             frametype( (byte & 0xf0) >> 4 ),
 		    codec( byte & 0x0f )
 		{}
 
 		/// Equals frameType
-		boost::uint8_t frametype;
+		std::uint8_t frametype;
 		/// Equals videoCodecType
-		boost::uint8_t codec;
+		std::uint8_t codec;
 	};
 
 	/// Parses next tag from the file
@@ -233,16 +234,16 @@ private:
 	///
 	bool parseNextTag(bool index_only);
 
-	std::auto_ptr<EncodedAudioFrame> parseAudioTag(const FLVTag& flvtag,
-            const FLVAudioTag& audiotag, boost::uint32_t thisTagPos);
+	std::unique_ptr<EncodedAudioFrame> parseAudioTag(const FLVTag& flvtag,
+            const FLVAudioTag& audiotag, std::uint32_t thisTagPos);
 	
-    std::auto_ptr<EncodedVideoFrame> parseVideoTag(const FLVTag& flvtag,
-            const FLVVideoTag& videotag, boost::uint32_t thisTagPos);
+    std::unique_ptr<EncodedVideoFrame> parseVideoTag(const FLVTag& flvtag,
+            const FLVVideoTag& videotag, std::uint32_t thisTagPos);
 
-	void indexAudioTag(const FLVTag& tag, boost::uint32_t thisTagPos);
+	void indexAudioTag(const FLVTag& tag, std::uint32_t thisTagPos);
 	
     void indexVideoTag(const FLVTag& tag, const FLVVideoTag& videotag,
-            boost::uint32_t thisTagPos);
+            std::uint32_t thisTagPos);
 
 	/// Parses the header of the file
 	bool parseHeader();
@@ -250,28 +251,14 @@ private:
 	/// Reads three bytes in FLV (big endian) byte order.
 	/// @param in Pointer to read 3 bytes from.
 	/// @return 24-bit integer.
-	static boost::uint32_t getUInt24(boost::uint8_t* in);
+	static std::uint32_t getUInt24(std::uint8_t* in);
 
 	/// The position where the parsing should continue from.
 	/// Will be reset on seek, and will be protected by the _streamMutex
-	boost::uint64_t _lastParsedPosition;
+	std::uint64_t _lastParsedPosition;
 
 	/// Position of next tag to index
-	boost::uint64_t _nextPosToIndex;
-
-	/// Audio frame cursor position 
-	//
-	/// This is the video frame number that will
-	/// be referenced by nextVideoFrame and nextVideoFrameTimestamp
-	///
-	size_t _nextAudioFrame;
-
-	/// Video frame cursor position 
-	//
-	/// This is the video frame number that will
-	/// be referenced by nextVideoFrame and nextVideoFrameTimestamp
-	///
-	size_t _nextVideoFrame;
+	std::uint64_t _nextPosToIndex;
 
 	/// Audio stream is present
 	bool _audio;
@@ -279,23 +266,23 @@ private:
 	/// Audio stream is present
 	bool _video;
 
-	std::auto_ptr<EncodedAudioFrame>
-        readAudioFrame(boost::uint32_t dataSize, boost::uint32_t timestamp);
+	std::unique_ptr<EncodedAudioFrame>
+        readAudioFrame(std::uint32_t dataSize, std::uint32_t timestamp);
 
-	std::auto_ptr<EncodedVideoFrame>
-        readVideoFrame(boost::uint32_t dataSize, boost::uint32_t timestamp);
+	std::unique_ptr<EncodedVideoFrame>
+        readVideoFrame(std::uint32_t dataSize, std::uint32_t timestamp);
 
 	/// Position in input stream for each cue point
 	/// first: timestamp
 	/// second: position in input stream
-	typedef std::map<boost::uint64_t, long> CuePointsMap;
+	typedef std::map<std::uint64_t, long> CuePointsMap;
 	CuePointsMap _cuePoints;
 
 	bool _indexingCompleted;
 
     MetaTags _metaTags;
 
-    boost::mutex _metaTagsMutex;
+    std::mutex _metaTagsMutex;
 };
 
 } // end of gnash::media namespace
diff --git a/libmedia/MediaHandler.cpp b/libmedia/MediaHandler.cpp
index a84af29..9b08248 100644
--- a/libmedia/MediaHandler.cpp
+++ b/libmedia/MediaHandler.cpp
@@ -28,12 +28,19 @@
 #include "IOChannel.h"
 #include "AudioDecoderSimple.h"
 #include "log.h"
+#include "GnashFactory.h"
 
 #ifdef DECODING_SPEEX
 # include "AudioDecoderSpeex.h"
 #endif
 
 namespace gnash {
+    // Instantiate MediaFactory here.
+    template class GnashFactory<media::MediaHandler, media::RegisterAllHandlers,
+        std::string>;
+}
+
+namespace gnash {
 namespace media {
 
 bool
@@ -54,10 +61,10 @@ MediaHandler::isFLV(IOChannel& stream)
     return true;
 }
 
-std::auto_ptr<MediaParser>
-MediaHandler::createMediaParser(std::auto_ptr<IOChannel> stream)
+std::unique_ptr<MediaParser>
+MediaHandler::createMediaParser(std::unique_ptr<IOChannel> stream)
 {
-    std::auto_ptr<MediaParser> parser;
+    std::unique_ptr<MediaParser> parser;
 
     try {
         if (!isFLV(*stream))
@@ -72,13 +79,13 @@ MediaHandler::createMediaParser(std::auto_ptr<IOChannel> stream)
         return parser;
     }
 
-    parser.reset( new FLVParser(stream) );
+    parser.reset( new FLVParser(std::move(stream)) );
     assert(!stream.get()); // TODO: when ownership will be transferred...
 
     return parser;
 }
 
-std::auto_ptr<AudioDecoder>
+std::unique_ptr<AudioDecoder>
 MediaHandler::createFlashAudioDecoder(const AudioInfo& info)
 {
     assert (info.type == CODEC_TYPE_FLASH );
@@ -90,14 +97,14 @@ MediaHandler::createFlashAudioDecoder(const AudioInfo& info)
         case media::AUDIO_CODEC_RAW:
         case media::AUDIO_CODEC_UNCOMPRESSED:
         {
-            std::auto_ptr<AudioDecoder> ret(new AudioDecoderSimple(info));
+            std::unique_ptr<AudioDecoder> ret(new AudioDecoderSimple(info));
             return ret;
         }
 
 #ifdef DECODING_SPEEX
         case AUDIO_CODEC_SPEEX:
         {
-            std::auto_ptr<AudioDecoder> ret(new AudioDecoderSpeex);
+            std::unique_ptr<AudioDecoder> ret(new AudioDecoderSpeex);
             return ret;
         }
 #endif
diff --git a/libmedia/MediaHandler.h b/libmedia/MediaHandler.h
index 98f62ce..cf0465b 100644
--- a/libmedia/MediaHandler.h
+++ b/libmedia/MediaHandler.h
@@ -23,12 +23,13 @@
 
 #include "dsodefs.h" // DSOEXPORT
 #include "VideoConverter.h"
-#include "GnashFactory.h"
 
 #include <vector>
 #include <memory>
 #include <string>
 
+#include "GnashFactory.h"
+
 // Forward declarations
 namespace gnash {
     class IOChannel;
@@ -62,7 +63,7 @@ struct DSOEXPORT RegisterAllHandlers
     RegisterAllHandlers();
 };
 
-typedef GnashFactory<MediaHandler, RegisterAllHandlers> MediaFactory;
+typedef GnashFactory<MediaHandler, RegisterAllHandlers, std::string> MediaFactory;
 
 /// The MediaHandler class acts as a factory to provide parser and decoders
 class DSOEXPORT MediaHandler
@@ -84,8 +85,8 @@ public:
     /// NOTE: the default implementation returns an FLVParser for FLV input
     ///       or 0 for others.
     ///
-    virtual std::auto_ptr<MediaParser>
-        createMediaParser(std::auto_ptr<IOChannel> stream);
+    virtual std::unique_ptr<MediaParser>
+        createMediaParser(std::unique_ptr<IOChannel> stream);
 
     /// Create a VideoDecoder for decoding what's specified in the VideoInfo
     //
@@ -93,7 +94,7 @@ public:
     ///             the image stream correctly.
     /// @return     Will always return a valid VideoDecoder or throw a
     ///             gnash::MediaException if a fatal error occurs.
-    virtual std::auto_ptr<VideoDecoder>
+    virtual std::unique_ptr<VideoDecoder>
         createVideoDecoder(const VideoInfo& info)=0;
 
     /// Create an AudioDecoder for decoding what's specified in the AudioInfo
@@ -102,7 +103,7 @@ public:
     ///             the sound correctly.
     /// @return     Will always return a valid AudioDecoder or throw a
     ///             gnash::MediaException if a fatal error occurs.
-    virtual std::auto_ptr<AudioDecoder>
+    virtual std::unique_ptr<AudioDecoder>
         createAudioDecoder(const AudioInfo& info)=0;
 
     /// Create an VideoConverter for converting between color spaces.
@@ -110,9 +111,9 @@ public:
     /// @param srcFormat The source image color space
     /// @param dstFormat The destination image color space
     ///
-    /// @return A valid VideoConverter or a NULL auto_ptr if a fatal error
+    /// @return A valid VideoConverter or a NULL unique_ptr if a fatal error
     ///         occurs.
-    virtual std::auto_ptr<VideoConverter>
+    virtual std::unique_ptr<VideoConverter>
         createVideoConverter(ImgBuf::Type4CC srcFormat,
                 ImgBuf::Type4CC dstFormat)=0;
 
@@ -159,7 +160,7 @@ protected:
     ///     for info.type to be media::CODEC_TYPE_FLASH (caller should check
     ///     that before calling this).
     ///
-    std::auto_ptr<AudioDecoder> createFlashAudioDecoder(const AudioInfo& info);
+    std::unique_ptr<AudioDecoder> createFlashAudioDecoder(const AudioInfo& info);
 
     /// Return true if input stream is an FLV
     //
@@ -170,6 +171,13 @@ protected:
 
 
 } // gnash.media namespace 
+
+// In order for GnashFactory to work correctly, there must be only a single
+// instantiation of MediaFactory. Therefore, we declare its type as extern,
+// which we can now that its dependent types are fully specified.
+extern template class GnashFactory<media::MediaHandler,
+    media::RegisterAllHandlers, std::string>; // I.e., typedef MediaFactory.
+
 } // namespace gnash
 
 #endif 
diff --git a/libmedia/MediaParser.cpp b/libmedia/MediaParser.cpp
index e4de8ca..7a7642d 100644
--- a/libmedia/MediaParser.cpp
+++ b/libmedia/MediaParser.cpp
@@ -21,7 +21,8 @@
 
 #include "MediaParser.h"
 
-#include <boost/bind.hpp>
+#include <functional>
+#include <thread>
 
 #include "log.h"
 #include "GnashSleep.h" // for usleep.
@@ -33,14 +34,12 @@
 namespace gnash {
 namespace media {
 
-MediaParser::MediaParser(std::auto_ptr<IOChannel> stream)
+MediaParser::MediaParser(std::unique_ptr<IOChannel> stream)
 	:
 	_parsingComplete(false),
 	_bytesLoaded(0),
-	_stream(stream),
+	_stream(std::move(stream)),
 	_bufferTime(100), // 100 ms 
-	_parserThread(0),
-	_parserThreadStartBarrier(2),
 	_parserThreadKillRequested(false),
 	_seekRequest(false)
 {
@@ -52,17 +51,15 @@ MediaParser::startParserThread()
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
 	log_debug("Starting MediaParser thread");
-	_parserThread.reset(new boost::thread(
-                boost::bind(parserLoopStarter, this)));
-	_parserThreadStartBarrier.wait();
+	_parserThread = std::thread(&MediaParser::parserLoop, this);
 #endif
 }
 
-boost::uint64_t
+std::uint64_t
 MediaParser::getBufferLength() const
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+	std::lock_guard<std::mutex> lock(_qMutex);
 #endif
 	return getBufferLengthNoLock();
 }
@@ -72,7 +69,7 @@ bool
 MediaParser::isBufferEmpty() const
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+	std::lock_guard<std::mutex> lock(_qMutex);
 #endif
 	return _videoFrames.empty() && _audioFrames.empty();
 }
@@ -84,7 +81,7 @@ MediaParser::getId3Info() const
     return boost::optional<Id3Info>();
 }
 
-boost::uint64_t
+std::uint64_t
 MediaParser::getBufferLengthNoLock() const
 {
 	bool hasVideo = _videoInfo.get();
@@ -103,7 +100,7 @@ MediaParser::getBufferLengthNoLock() const
     return 0;
 }
 
-boost::uint64_t
+std::uint64_t
 MediaParser::videoBufferLength() const
 {
 	if (_videoFrames.empty()) return 0;
@@ -115,7 +112,7 @@ MediaParser::videoBufferLength() const
 	return _videoFrames.back()->timestamp() - _videoFrames.front()->timestamp(); 
 }
 
-boost::uint64_t
+std::uint64_t
 MediaParser::audioBufferLength() const
 {
 	if (_audioFrames.empty()) return 0;
@@ -140,15 +137,15 @@ MediaParser::peekNextVideoFrame() const
 	}
 #endif
 
-	if (!_videoInfo.get() || _videoFrames.empty()) return 0;
-	return _videoFrames.front();
+	if (!_videoInfo.get() || _videoFrames.empty()) return nullptr;
+	return _videoFrames.front().get();
 }
 
 bool
-MediaParser::nextFrameTimestamp(boost::uint64_t& ts) const
+MediaParser::nextFrameTimestamp(std::uint64_t& ts) const
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-    boost::mutex::scoped_lock lock(_qMutex);
+    std::lock_guard<std::mutex> lock(_qMutex);
 #else // ndef LOAD_MEDIA_IN_A_SEPARATE_THREAD
     while (!parsingCompleted() && _videoInfo.get() && _videoFrames.empty())
     {
@@ -185,10 +182,10 @@ MediaParser::nextFrameTimestamp(boost::uint64_t& ts) const
 }
 
 bool
-MediaParser::nextVideoFrameTimestamp(boost::uint64_t& ts) const
+MediaParser::nextVideoFrameTimestamp(std::uint64_t& ts) const
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+	std::lock_guard<std::mutex> lock(_qMutex);
 #endif // def LOAD_MEDIA_IN_A_SEPARATE_THREAD
 	const EncodedVideoFrame* ef = peekNextVideoFrame();
 	if ( ! ef ) return false;
@@ -196,11 +193,11 @@ MediaParser::nextVideoFrameTimestamp(boost::uint64_t& ts) const
 	return true;
 }
 
-std::auto_ptr<EncodedVideoFrame>
+std::unique_ptr<EncodedVideoFrame>
 MediaParser::nextVideoFrame()
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+	std::lock_guard<std::mutex> lock(_qMutex);
 #else // ndef LOAD_MEDIA_IN_A_SEPARATE_THREAD
 	while (!parsingCompleted() && _videoInfo.get() && _videoFrames.empty())
 	{
@@ -208,9 +205,9 @@ MediaParser::nextVideoFrame()
 	}
 #endif
 
-	std::auto_ptr<EncodedVideoFrame> ret;
+	std::unique_ptr<EncodedVideoFrame> ret;
 	if (_videoFrames.empty()) return ret;
-	ret.reset(_videoFrames.front());
+	ret = std::move(_videoFrames.front());
 	_videoFrames.pop_front();
 #ifdef GNASH_DEBUG_MEDIAPARSER
 	log_debug("nextVideoFrame: waking up parser (in case it was sleeping)");
@@ -219,11 +216,11 @@ MediaParser::nextVideoFrame()
 	return ret;
 }
 
-std::auto_ptr<EncodedAudioFrame>
+std::unique_ptr<EncodedAudioFrame>
 MediaParser::nextAudioFrame()
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+	std::lock_guard<std::mutex> lock(_qMutex);
 #else // ndef LOAD_MEDIA_IN_A_SEPARATE_THREAD
 	while (!parsingCompleted() && _audioInfo.get() && _audioFrames.empty())
 	{
@@ -231,9 +228,9 @@ MediaParser::nextAudioFrame()
 	}
 #endif
 
-	std::auto_ptr<EncodedAudioFrame> ret;
+	std::unique_ptr<EncodedAudioFrame> ret;
 	if (_audioFrames.empty()) return ret;
-	ret.reset(_audioFrames.front());
+	ret = std::move(_audioFrames.front());
 	_audioFrames.pop_front();
 #ifdef GNASH_DEBUG_MEDIAPARSER
 	log_debug("nextAudioFrame: waking up parser (in case it was sleeping)");
@@ -243,10 +240,10 @@ MediaParser::nextAudioFrame()
 }
 
 bool
-MediaParser::nextAudioFrameTimestamp(boost::uint64_t& ts) const
+MediaParser::nextAudioFrameTimestamp(std::uint64_t& ts) const
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+	std::lock_guard<std::mutex> lock(_qMutex);
 #endif // def LOAD_MEDIA_IN_A_SEPARATE_THREAD
 	const EncodedAudioFrame* ef = peekNextAudioFrame();
 	if ( ! ef ) return false;
@@ -266,57 +263,32 @@ MediaParser::peekNextAudioFrame() const
 		const_cast<MediaParser*>(this)->parseNextChunk();
 	}
 #endif
-	if (!_audioInfo.get() || _audioFrames.empty()) return 0;
-	return _audioFrames.front();
+	if (!_audioInfo.get() || _audioFrames.empty()) return nullptr;
+	return _audioFrames.front().get();
 }
 
 void
 MediaParser::stopParserThread()
 {
-	if ( _parserThread.get() )
+	if ( _parserThread.joinable() )
 	{
 		requestParserThreadKill();
-		_parserThread->join();
-		_parserThread.reset();
+		_parserThread.join();
 	}
 }
 
 MediaParser::~MediaParser()
 {
 	stopParserThread();
-
-	for (VideoFrames::iterator i=_videoFrames.begin(),
-		e=_videoFrames.end(); i!=e; ++i)
-	{
-		delete (*i);
-	}
-
-	for (AudioFrames::iterator i=_audioFrames.begin(),
-		e=_audioFrames.end(); i!=e; ++i)
-	{
-		delete (*i);
-	}
 }
 
 void
 MediaParser::clearBuffers()
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+	std::lock_guard<std::mutex> lock(_qMutex);
 #endif
 
-	for (VideoFrames::iterator i=_videoFrames.begin(),
-		e=_videoFrames.end(); i!=e; ++i)
-	{
-		delete (*i);
-	}
-
-	for (AudioFrames::iterator i=_audioFrames.begin(),
-		e=_audioFrames.end(); i!=e; ++i)
-	{
-		delete (*i);
-	}
-
 	_audioFrames.clear();
 	_videoFrames.clear();
 
@@ -324,10 +296,10 @@ MediaParser::clearBuffers()
 }
 
 void
-MediaParser::pushEncodedAudioFrame(std::auto_ptr<EncodedAudioFrame> frame)
+MediaParser::pushEncodedAudioFrame(std::unique_ptr<EncodedAudioFrame> frame)
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+    std::unique_lock<std::mutex> lock(_qMutex);
 #endif
 	
     // Find location to insert this new frame to, so that
@@ -354,7 +326,7 @@ MediaParser::pushEncodedAudioFrame(std::auto_ptr<EncodedAudioFrame> frame)
     }
 
 	//log_debug("Inserting audio frame with timestamp %d", frame->timestamp);
-	_audioFrames.insert(loc, frame.release());
+	_audioFrames.insert(loc, std::move(frame));
 
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
 	// if the push reaches a "buffer full" condition, or if we find the parsing
@@ -364,10 +336,10 @@ MediaParser::pushEncodedAudioFrame(std::auto_ptr<EncodedAudioFrame> frame)
 }
 
 void
-MediaParser::pushEncodedVideoFrame(std::auto_ptr<EncodedVideoFrame> frame)
+MediaParser::pushEncodedVideoFrame(std::unique_ptr<EncodedVideoFrame> frame)
 {
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
-	boost::mutex::scoped_lock lock(_qMutex);
+	std::unique_lock<std::mutex> lock(_qMutex);
 #endif
 
     // Find location to insert this new frame to, so that
@@ -394,7 +366,7 @@ MediaParser::pushEncodedVideoFrame(std::auto_ptr<EncodedVideoFrame> frame)
     }
 
 	//log_debug("Pushing video frame with timestamp %d", frame->timestamp());
-	_videoFrames.insert(loc, frame.release());
+	_videoFrames.insert(loc, std::move(frame));
 
 #ifdef LOAD_MEDIA_IN_A_SEPARATE_THREAD
 	waitIfNeeded(lock); // if the push reaches a "buffer full" condition, wait to be waken up
@@ -402,7 +374,7 @@ MediaParser::pushEncodedVideoFrame(std::auto_ptr<EncodedVideoFrame> frame)
 }
 
 void
-MediaParser::waitIfNeeded(boost::mutex::scoped_lock& lock) 
+MediaParser::waitIfNeeded(std::unique_lock<std::mutex>& lock)
 {
 	//  We hold a lock on the queue here...
 	bool pc=parsingCompleted();
@@ -424,8 +396,8 @@ bool
 MediaParser::bufferFull() const
 {
 	// Callers are expected to hold a lock on _qMutex
-	boost::uint64_t bl = getBufferLengthNoLock();
-	boost::uint64_t bt = getBufferTime();
+	std::uint64_t bl = getBufferLengthNoLock();
+	std::uint64_t bt = getBufferTime();
 #ifdef GNASH_DEBUG_MEDIAPARSER
 	log_debug("MediaParser::bufferFull: %d/%d", bl, bt);
 #endif // GNASH_DEBUG_MEDIAPARSER
@@ -435,7 +407,6 @@ MediaParser::bufferFull() const
 void
 MediaParser::parserLoop()
 {
-	_parserThreadStartBarrier.wait();
 	while (!parserThreadKillRequested())
 	{
 		parseNextChunk();
@@ -445,14 +416,14 @@ MediaParser::parserLoop()
 		// TODO: have a setParsingComplete() function
 		//       exposed in base class for taking care
 		//       of this on appropriate time.
-		boost::mutex::scoped_lock lock(_qMutex);
+		std::unique_lock<std::mutex> lock(_qMutex);
 		waitIfNeeded(lock);
 	}
 }
 
 
 void
-MediaParser::fetchMetaTags(OrderedMetaTags& /*tags*/, boost::uint64_t /*ts*/)
+MediaParser::fetchMetaTags(OrderedMetaTags& /*tags*/, std::uint64_t /*ts*/)
 {
 }
 
diff --git a/libmedia/MediaParser.h b/libmedia/MediaParser.h
index 35ed0d0..caaf413 100644
--- a/libmedia/MediaParser.h
+++ b/libmedia/MediaParser.h
@@ -20,11 +20,10 @@
 #ifndef GNASH_MEDIAPARSER_H
 #define GNASH_MEDIAPARSER_H
 
-#include <boost/scoped_array.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/thread/thread.hpp>
-#include <boost/thread/condition.hpp>
-#include <boost/thread/barrier.hpp>
+#include <atomic>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
 #include <memory>
 #include <deque>
 #include <map>
@@ -231,9 +230,9 @@ public:
     /// @param typei
     ///     Changes interpretation of the codeci parameter.
     ///
-	AudioInfo(int codeci, boost::uint16_t sampleRatei,
-            boost::uint16_t sampleSizei, bool stereoi,
-            boost::uint64_t durationi, codecType typei)
+	AudioInfo(int codeci, std::uint16_t sampleRatei,
+            std::uint16_t sampleSizei, bool stereoi,
+            std::uint64_t durationi, codecType typei)
 		:
         codec(codeci),
 		sampleRate(sampleRatei),
@@ -252,14 +251,14 @@ public:
 	///
 	int codec;
 
-	boost::uint16_t sampleRate;
+	std::uint16_t sampleRate;
 
 	/// Size of each sample, in bytes
-	boost::uint16_t sampleSize;
+	std::uint16_t sampleSize;
 
 	bool stereo;
 
-	boost::uint64_t duration;
+	std::uint64_t duration;
 
 	codecType type;
 
@@ -277,7 +276,7 @@ public:
     //
     /// Could be ExtraVideoInfoFlv or a media-handler specific info
     ///
-	std::auto_ptr<ExtraInfo> extra;
+	std::unique_ptr<ExtraInfo> extra;
 };
 
 /// Information about a video stream 
@@ -318,8 +317,8 @@ public:
     /// @param typei
     ///     Changes interpretation of the codeci parameter.
     ///     
-	VideoInfo(int codeci, boost::uint16_t widthi, boost::uint16_t heighti,
-            boost::uint16_t frameRatei, boost::uint64_t durationi,
+	VideoInfo(int codeci, std::uint16_t widthi, std::uint16_t heighti,
+            std::uint16_t frameRatei, std::uint64_t durationi,
             codecType typei)
 		:
         codec(codeci),
@@ -332,10 +331,10 @@ public:
 	}
 
 	int codec;
-	boost::uint16_t width;
-	boost::uint16_t height;
-	boost::uint16_t frameRate;
-	boost::uint64_t duration;
+	std::uint16_t width;
+	std::uint16_t height;
+	std::uint16_t frameRate;
+	std::uint64_t duration;
 	codecType type;
 
 	/// Extra info about a video stream
@@ -352,7 +351,7 @@ public:
     //
     /// Could be ExtraAudioInfoFlv or a media-handler specific info
     ///
-	std::auto_ptr<ExtraInfo> extra;
+	std::unique_ptr<ExtraInfo> extra;
 };
 
 DSOEXPORT std::ostream& operator << (std::ostream& os, const VideoInfo& vi);
@@ -384,9 +383,9 @@ public:
 	/// @param timestamp
 	///     Presentation timestamp, in milliseconds.
 	///
-	EncodedVideoFrame(boost::uint8_t* data, boost::uint32_t size,
+	EncodedVideoFrame(std::uint8_t* data, std::uint32_t size,
 			unsigned int frameNum,
-			boost::uint64_t timestamp=0)
+			std::uint64_t timestamp=0)
 		:
 		_size(size),
 		_data(data),
@@ -395,37 +394,37 @@ public:
 	{}
 
 	/// Return pointer to actual data. Ownership retained by this class.
-	const boost::uint8_t* data() const { return _data.get(); }
+	const std::uint8_t* data() const { return _data.get(); }
 
 	/// Return size of data buffer.
-	boost::uint32_t dataSize() const { return _size; }
+	std::uint32_t dataSize() const { return _size; }
 
 	/// Return video frame presentation timestamp
-	boost::uint64_t timestamp() const { return _timestamp; }
+	std::uint64_t timestamp() const { return _timestamp; }
 
 	/// Return video frame number
 	unsigned frameNum() const { return _frameNum; }
 
 	// FIXME: should have better encapsulation for this sort of stuff.
-	std::auto_ptr<EncodedExtraData> extradata;
+	std::unique_ptr<EncodedExtraData> extradata;
 private:
 
-	boost::uint32_t _size;
-	boost::scoped_array<boost::uint8_t> _data;
+	std::uint32_t _size;
+	std::unique_ptr<std::uint8_t[]> _data;
 	unsigned int _frameNum;
-	boost::uint64_t _timestamp;
+	std::uint64_t _timestamp;
 };
 
 /// An encoded audio frame
 class EncodedAudioFrame
 {
 public:
-	boost::uint32_t dataSize;
-	boost::scoped_array<boost::uint8_t> data;
-	boost::uint64_t timestamp;
+	std::uint32_t dataSize;
+	std::unique_ptr<std::uint8_t[]> data;
+	std::uint64_t timestamp;
 
 	// FIXME: should have better encapsulation for this sort of stuff.
-	std::auto_ptr<EncodedExtraData> extradata;
+	std::unique_ptr<EncodedExtraData> extradata;
 };
 
 /// The MediaParser class provides cursor-based access to encoded %media frames 
@@ -443,11 +442,12 @@ public:
     /// A container for executable MetaTags contained in media streams.
     //
     /// Presently only known in FLV.
-    typedef std::multimap<boost::uint64_t, boost::shared_ptr<SimpleBuffer> >
+    typedef std::multimap<std::uint64_t, std::shared_ptr<SimpleBuffer> >
         MetaTags;
     
     typedef std::vector<MetaTags::mapped_type> OrderedMetaTags;
-        MediaParser(std::auto_ptr<IOChannel> stream);
+
+        MediaParser(std::unique_ptr<IOChannel> stream);
 
 	// Classes with virtual methods (virtual classes)
 	// must have a virtual destructor, or the destructors
@@ -466,7 +466,7 @@ public:
 	/// 
 	/// @return true if the seek was valid, false otherwise.
 	///
-	virtual bool seek(boost::uint32_t& time)=0;
+	virtual bool seek(std::uint32_t& time)=0;
 
 	/// Returns mininum length of available buffers in milliseconds
 	//
@@ -477,7 +477,7 @@ public:
 	/// frames and let NetSTream::bufferLength() use that with playhead
 	/// time to find out...
 	///
-	DSOEXPORT boost::uint64_t getBufferLength() const;
+	DSOEXPORT std::uint64_t getBufferLength() const;
 
 	/// Return true if both audio and video buffers are empty
 	//
@@ -485,10 +485,9 @@ public:
 	DSOEXPORT bool isBufferEmpty() const;
 
 	/// Return the time we want the parser thread to maintain in the buffer
-	DSOEXPORT boost::uint64_t getBufferTime() const
+	DSOEXPORT std::uint_fast64_t getBufferTime() const
 	{
-		boost::mutex::scoped_lock lock(_bufferTimeMutex);
-		return _bufferTime;
+		return _bufferTime.load();
 	}
 
 	/// Set the time we want the parser thread to maintain in the buffer
@@ -496,9 +495,8 @@ public:
 	/// @param t
 	///	Number of milliseconds to keep in the buffers.
 	///
-	DSOEXPORT void setBufferTime(boost::uint64_t t)
+	DSOEXPORT void setBufferTime(std::uint_fast64_t t)
 	{
-		boost::mutex::scoped_lock lock(_bufferTimeMutex);
 		_bufferTime=t;
 	}
 
@@ -509,7 +507,7 @@ public:
 	///
 	/// NOTE: locks _qMutex
 	///
-	DSOEXPORT bool nextFrameTimestamp(boost::uint64_t& ts) const;
+	DSOEXPORT bool nextFrameTimestamp(std::uint64_t& ts) const;
 
 	/// Get timestamp of the video frame which would be returned on nextVideoFrame
 	//
@@ -518,7 +516,7 @@ public:
 	///
 	/// NOTE: locks _qMutex
 	///
-	DSOEXPORT bool nextVideoFrameTimestamp(boost::uint64_t& ts) const;
+	DSOEXPORT bool nextVideoFrameTimestamp(std::uint64_t& ts) const;
 
 	/// Returns the next video frame in the parsed buffer, advancing video cursor.
 	//
@@ -527,7 +525,7 @@ public:
 	/// you can check with parsingCompleted() to know wheter this is due to 
 	/// EOF reached.
 	///
-	DSOEXPORT std::auto_ptr<EncodedVideoFrame> nextVideoFrame();
+	DSOEXPORT std::unique_ptr<EncodedVideoFrame> nextVideoFrame();
 
 	/// Get timestamp of the audio frame which would be returned on nextAudioFrame
 	//
@@ -536,7 +534,7 @@ public:
 	///
 	/// NOTE: locks _qMutex
 	///
-	DSOEXPORT bool nextAudioFrameTimestamp(boost::uint64_t& ts) const;
+	DSOEXPORT bool nextAudioFrameTimestamp(std::uint64_t& ts) const;
 
 	/// Returns the next audio frame in the parsed buffer, advancing audio cursor.
 	//
@@ -545,7 +543,7 @@ public:
 	/// you can check with parsingCompleted() to know wheter this is due to 
 	/// EOF reached.
 	///
-	DSOEXPORT std::auto_ptr<EncodedAudioFrame> nextAudioFrame();
+	DSOEXPORT std::unique_ptr<EncodedAudioFrame> nextAudioFrame();
 
 	/// Returns a VideoInfo class about the videostream
 	//
@@ -581,10 +579,10 @@ public:
 	virtual bool indexingCompleted() const { return true; }
 
 	/// Return number of bytes parsed so far
-	virtual boost::uint64_t getBytesLoaded() const { return 0; }
+	virtual std::uint64_t getBytesLoaded() const { return 0; }
 
 	/// Return total number of bytes in input
-	boost::uint64_t getBytesTotal() const
+	std::uint64_t getBytesTotal() const
 	{
 		return _stream->size();
 	}
@@ -609,7 +607,7 @@ public:
     //
     /// Metadata is currently only parsed from FLV streams. The default
     /// is a no-op.
-    virtual void fetchMetaTags(OrderedMetaTags& tags, boost::uint64_t ts);
+    virtual void fetchMetaTags(OrderedMetaTags& tags, std::uint64_t ts);
 
     /// Get ID3 data from the parsed stream if it exists.
     //
@@ -621,16 +619,16 @@ protected:
 	/// Subclasses *must* set the following variables: @{ 
 
 	/// Info about the video stream (if any)
-	std::auto_ptr<VideoInfo> _videoInfo;
+	std::unique_ptr<VideoInfo> _videoInfo;
 
 	/// Info about the audio stream (if any)
-	std::auto_ptr<AudioInfo> _audioInfo;
+	std::unique_ptr<AudioInfo> _audioInfo;
 
 	/// Whether the parsing is complete or not
 	bool _parsingComplete;
 
 	/// Number of bytes loaded
-	boost::uint64_t _bytesLoaded;
+	std::atomic<std::uint_fast64_t> _bytesLoaded;
 
 	/// }@
 
@@ -653,22 +651,17 @@ protected:
 	//
 	/// Will wait on a condition if buffer is full or parsing was completed
 	///
-	void pushEncodedAudioFrame(std::auto_ptr<EncodedAudioFrame> frame);
+	void pushEncodedAudioFrame(std::unique_ptr<EncodedAudioFrame> frame);
 
 	/// Push an encoded video frame to buffer.
 	//
 	/// Will wait on a condition if buffer is full or parsing was completed
 	///
-	void pushEncodedVideoFrame(std::auto_ptr<EncodedVideoFrame> frame);
+	void pushEncodedVideoFrame(std::unique_ptr<EncodedVideoFrame> frame);
 
 	/// The stream used to access the file
-	std::auto_ptr<IOChannel> _stream;
-	mutable boost::mutex _streamMutex;
-
-	static void parserLoopStarter(MediaParser* mp)
-	{
-		mp->parserLoop();
-	}
+	std::unique_ptr<IOChannel> _stream;
+	mutable std::mutex _streamMutex;
 
 	/// The parser loop runs in a separate thread
 	/// and calls parseNextChunk until killed.
@@ -682,33 +675,26 @@ protected:
 
 	bool parserThreadKillRequested() const
 	{
-		boost::mutex::scoped_lock lock(_parserThreadKillRequestMutex);
-		return _parserThreadKillRequested;
+		return _parserThreadKillRequested.load();
 	}
 
-	boost::uint64_t _bufferTime;
-	mutable boost::mutex _bufferTimeMutex;
+        std::atomic<std::uint_fast64_t> _bufferTime;
 
-	std::auto_ptr<boost::thread> _parserThread;
-	boost::barrier _parserThreadStartBarrier;
-	mutable boost::mutex _parserThreadKillRequestMutex;
-	bool _parserThreadKillRequested;
-	boost::condition _parserThreadWakeup;
+	std::thread _parserThread;
+	std::atomic<bool> _parserThreadKillRequested;
+	std::condition_variable _parserThreadWakeup;
 
 	/// Wait on the _parserThreadWakeup condition if buffer is full
 	/// or parsing was completed.
 	/// 
 	/// Callers *must* pass a locked lock on _qMutex
 	///
-	void waitIfNeeded(boost::mutex::scoped_lock& qMutexLock);
+	void waitIfNeeded(std::unique_lock<std::mutex>& qMutexLock);
 
 	void wakeupParserThread();
 
 	/// mutex protecting access to the a/v encoded frames queues
-	mutable boost::mutex _qMutex;
-
-	/// Mutex protecting _bytesLoaded (read by main, set by parser)
-	mutable boost::mutex _bytesLoadedMutex;
+	mutable std::mutex _qMutex;
 
 	/// Method to check if buffer is full w/out locking the _qMutex
 	//
@@ -726,8 +712,8 @@ protected:
 
 private:
 
-	typedef std::deque<EncodedVideoFrame*> VideoFrames;
-	typedef std::deque<EncodedAudioFrame*> AudioFrames;
+	typedef std::deque<std::unique_ptr<EncodedVideoFrame>> VideoFrames;
+	typedef std::deque<std::unique_ptr<EncodedAudioFrame>> AudioFrames;
 
 	/// Return pointer to next encoded video frame in buffer
 	//
@@ -760,19 +746,18 @@ private:
 
 	void requestParserThreadKill()
 	{
-		boost::mutex::scoped_lock lock(_parserThreadKillRequestMutex);
 		_parserThreadKillRequested=true;
 		_parserThreadWakeup.notify_all();
 	}
 
 	/// Return diff between timestamp of last and first audio frame
-	boost::uint64_t audioBufferLength() const;
+	std::uint64_t audioBufferLength() const;
 
 	/// Return diff between timestamp of last and first video frame
-	boost::uint64_t videoBufferLength() const;
+	std::uint64_t videoBufferLength() const;
 
 	/// A getBufferLength method not locking the _qMutex (expected to be locked by caller already).
-	boost::uint64_t getBufferLengthNoLock() const;
+	std::uint64_t getBufferLengthNoLock() const;
 	
 };
 
diff --git a/libmedia/SoundInfo.h b/libmedia/SoundInfo.h
index dcfad25..01f9055 100644
--- a/libmedia/SoundInfo.h
+++ b/libmedia/SoundInfo.h
@@ -65,9 +65,9 @@ public:
 	///     and by 2 (two channels) to find number of output
 	///     samples to skip or fill.
 	///
-	SoundInfo(audioCodecType format, bool stereo, boost::uint32_t sampleRate,
-            boost::uint32_t sampleCount, bool is16bit,
-            boost::int16_t delaySeek=0)
+	SoundInfo(audioCodecType format, bool stereo, std::uint32_t sampleRate,
+            std::uint32_t sampleCount, bool is16bit,
+            std::int16_t delaySeek=0)
 	    :
         _format(format),
 		_stereo(stereo),
@@ -106,7 +106,7 @@ public:
 	// 
 	/// The number is to be considered in pre-resampling units.
 	///
-	boost::int16_t getDelaySeek() const { return _delaySeek; }
+	std::int16_t getDelaySeek() const { return _delaySeek; }
 
 	/// Returns the 16bit status of the sound
 	//
@@ -121,13 +121,13 @@ private:
 	bool _stereo;
 
 	/// Sample rate, one of 5512, 11025, 22050, 44100
-	boost::uint32_t _sampleRate;
+	std::uint32_t _sampleRate;
 
 	/// Number of samples
-	boost::uint32_t _sampleCount;
+	std::uint32_t _sampleCount;
 
 	/// Number of samples to seek forward or delay.
-	boost::int16_t _delaySeek;
+	std::int16_t _delaySeek;
 
 	/// Is the audio in 16bit format (samplesize == 2)? else it 
 	/// is 8bit (samplesize == 1). Used for streams when decoding adpcm.
diff --git a/libmedia/VideoConverter.h b/libmedia/VideoConverter.h
index 28f4784..6ca19a1 100644
--- a/libmedia/VideoConverter.h
+++ b/libmedia/VideoConverter.h
@@ -21,8 +21,8 @@
 #define GNASH_VIDEOCONVERTER_H
 
 #include <boost/noncopyable.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/array.hpp>
+#include <cstdint>
+#include <array>
 #include <memory>
 
 namespace gnash {
@@ -42,10 +42,10 @@ namespace media {
 
 struct ImgBuf : public boost::noncopyable
 {
-    typedef boost::uint32_t Type4CC;
+    typedef std::uint32_t Type4CC;
     typedef void (*FreeFunc)(void*);
 
-    ImgBuf(Type4CC t, boost::uint8_t* dataptr, size_t datasize, size_t w,
+    ImgBuf(Type4CC t, std::uint8_t* dataptr, size_t datasize, size_t w,
            size_t h)
     : type(t),
       data(dataptr),
@@ -62,7 +62,7 @@ struct ImgBuf : public boost::noncopyable
     
     static void array_delete(void* voidptr)
     {
-        boost::uint8_t* ptr = static_cast<boost::uint8_t*>(voidptr);
+        std::uint8_t* ptr = static_cast<std::uint8_t*>(voidptr);
         delete [] ptr;
     }
     
@@ -71,13 +71,13 @@ struct ImgBuf : public boost::noncopyable
     }
 
     Type4CC type;
-    boost::uint8_t* data;
+    std::uint8_t* data;
 
     size_t size; // in bytes
     size_t width; // in pixels
     size_t height; // in pixels
     
-    boost::array<size_t, 4> stride;
+    std::array<size_t, 4> stride;
     
     FreeFunc dealloc;
 };
@@ -101,8 +101,8 @@ public:
     /// Convert a (video) image from one colorspace to another.
     //
     /// @param src the image to convert
-    /// @return the converted image or a NULL auto_ptr if an error occurred.
-    virtual std::auto_ptr<ImgBuf> convert(const ImgBuf& src) = 0;
+    /// @return the converted image or a NULL unique_ptr if an error occurred.
+    virtual std::unique_ptr<ImgBuf> convert(const ImgBuf& src) = 0;
   
 protected:
     ImgBuf::Type4CC  _src_fmt;
diff --git a/libmedia/VideoDecoder.h b/libmedia/VideoDecoder.h
index 9f682de..e0e1438 100644
--- a/libmedia/VideoDecoder.h
+++ b/libmedia/VideoDecoder.h
@@ -58,9 +58,9 @@ public:
   
   /// Pop a decoded frame from the decoder. THIS METHOD MAY BLOCK.
   //
-  /// @return The decoded video frame, or a NULL-containing auto_ptr if an
+  /// @return The decoded video frame, or a NULL-containing unique_ptr if an
   ///         error occurred.
-  virtual std::auto_ptr<image::GnashImage> pop() = 0;
+  virtual std::unique_ptr<image::GnashImage> pop() = 0;
   
   /// \brief
   /// Check whether a decoded frame is ready to be popped.
diff --git a/libmedia/VideoInput.h b/libmedia/VideoInput.h
index 0ae6d16..7d3a581 100644
--- a/libmedia/VideoInput.h
+++ b/libmedia/VideoInput.h
@@ -20,7 +20,7 @@
 #ifndef GNASH_VIDEOINPUT_H
 #define GNASH_VIDEOINPUT_H
 
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include <string>
 
 #include "dsodefs.h" //DSOEXPORT
diff --git a/libmedia/ffmpeg/AudioDecoderFfmpeg.cpp b/libmedia/ffmpeg/AudioDecoderFfmpeg.cpp
index ce51e88..56b5248 100644
--- a/libmedia/ffmpeg/AudioDecoderFfmpeg.cpp
+++ b/libmedia/ffmpeg/AudioDecoderFfmpeg.cpp
@@ -27,7 +27,6 @@
 #include "FLVParser.h"
 #include "SoundInfo.h"
 #include "MediaParser.h" // for AudioInfo
-#include "GnashScopedPtr.h"
 
 //#define GNASH_DEBUG_AUDIO_DECODING
 
@@ -37,9 +36,9 @@ namespace ffmpeg {
     
 AudioDecoderFfmpeg::AudioDecoderFfmpeg(const AudioInfo& info)
     :
-    _audioCodec(NULL),
-    _audioCodecCtx(NULL),
-    _parser(NULL),
+    _audioCodec(nullptr),
+    _audioCodecCtx(nullptr),
+    _parser(nullptr),
     _needsParsing(false)
 {
     setup(info);
@@ -57,9 +56,9 @@ AudioDecoderFfmpeg::AudioDecoderFfmpeg(const AudioInfo& info)
 
 AudioDecoderFfmpeg::AudioDecoderFfmpeg(SoundInfo& info)
     :
-    _audioCodec(NULL),
-    _audioCodecCtx(NULL),
-    _parser(NULL)
+    _audioCodec(nullptr),
+    _audioCodecCtx(nullptr),
+    _parser(nullptr)
 {
     setup(info);
 
@@ -138,13 +137,13 @@ void AudioDecoderFfmpeg::setup(SoundInfo& info)
     }
 
 #if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,8,0)
-    int ret = avcodec_open2(_audioCodecCtx, _audioCodec, NULL);
+    int ret = avcodec_open2(_audioCodecCtx, _audioCodec, nullptr);
 #else
     int ret = avcodec_open(_audioCodecCtx, _audioCodec);
 #endif
     if (ret < 0) {
         av_free(_audioCodecCtx);
-        _audioCodecCtx=0;
+        _audioCodecCtx=nullptr;
         boost::format err = boost::format(
             _("AudioDecoderFfmpeg: avcodec_open failed to initialize "
             "FFmpeg codec %s (%d)")) % _audioCodec->name % (int)codec_id;
@@ -259,7 +258,7 @@ void AudioDecoderFfmpeg::setup(const AudioInfo& info)
     }
 
     _parser = av_parser_init(codec_id);
-    _needsParsing = (_parser != NULL);
+    _needsParsing = (_parser != nullptr);
 
     // Create an audioCodecCtx from the ffmpeg parser if exists/possible
 #if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,8,0)
@@ -318,14 +317,14 @@ void AudioDecoderFfmpeg::setup(const AudioInfo& info)
     log_debug("  Opening codec");
 #endif // GNASH_DEBUG_AUDIO_DECODING
 #if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,8,0)
-    int ret = avcodec_open2(_audioCodecCtx, _audioCodec, NULL);
+    int ret = avcodec_open2(_audioCodecCtx, _audioCodec, nullptr);
 #else
     int ret = avcodec_open(_audioCodecCtx, _audioCodec);
 #endif
     if (ret < 0) {
         //avcodec_close(_audioCodecCtx);
         av_free(_audioCodecCtx);
-        _audioCodecCtx = 0;
+        _audioCodecCtx = nullptr;
 
         boost::format err = boost::format(
             _("AudioDecoderFfmpeg: avcodec_open failed to initialize "
@@ -335,15 +334,15 @@ void AudioDecoderFfmpeg::setup(const AudioInfo& info)
 
 }
 
-boost::uint8_t*
-AudioDecoderFfmpeg::decode(const boost::uint8_t* input,
-        boost::uint32_t inputSize, boost::uint32_t&
-        outputSize, boost::uint32_t& decodedBytes)
+std::uint8_t*
+AudioDecoderFfmpeg::decode(const std::uint8_t* input,
+        std::uint32_t inputSize, std::uint32_t&
+        outputSize, std::uint32_t& decodedBytes)
 {
     //GNASH_REPORT_FUNCTION;
 
     size_t retCapacity = MAX_AUDIO_FRAME_SIZE;
-    boost::uint8_t* retBuf = new boost::uint8_t[retCapacity];
+    std::uint8_t* retBuf = new std::uint8_t[retCapacity];
     int retBufSize = 0;
 
 #ifdef GNASH_DEBUG_AUDIO_DECODING
@@ -353,7 +352,7 @@ AudioDecoderFfmpeg::decode(const boost::uint8_t* input,
     decodedBytes = 0; // nothing decoded yet
     while (decodedBytes < inputSize)
     {
-        const boost::uint8_t* frame=0; // parsed frame (pointer into input)
+        const std::uint8_t* frame=nullptr; // parsed frame (pointer into input)
         int framesize; // parsed frame size
 
         int consumed = parseInput(input+decodedBytes,
@@ -405,8 +404,8 @@ AudioDecoderFfmpeg::decode(const boost::uint8_t* input,
 
         // Now, decode the frame. We use the ::decodeFrame specialized function
         // here so resampling is done appropriately
-        boost::uint32_t outSize = 0;
-        boost::scoped_array<boost::uint8_t> outBuf(
+        std::uint32_t outSize = 0;
+        std::unique_ptr<std::uint8_t[]> outBuf(
                 decodeFrame(frame, framesize, outSize));
 
         if (!outBuf)
@@ -437,7 +436,7 @@ AudioDecoderFfmpeg::decode(const boost::uint8_t* input,
                     retBufSize+(unsigned)outSize, retCapacity);
 #endif 
 
-            boost::uint8_t* tmp = retBuf;
+            std::uint8_t* tmp = retBuf;
             retCapacity = std::max(retBufSize+static_cast<size_t>(outSize),
                     retCapacity * 2);
 
@@ -446,7 +445,7 @@ AudioDecoderFfmpeg::decode(const boost::uint8_t* input,
                     retCapacity);
 #endif // GNASH_DEBUG_AUDIO_DECODING
 
-            retBuf = new boost::uint8_t[retCapacity];
+            retBuf = new std::uint8_t[retCapacity];
             if ( retBufSize ) std::copy(tmp, tmp+retBufSize, retBuf);
             delete [] tmp;
         }
@@ -460,16 +459,16 @@ AudioDecoderFfmpeg::decode(const boost::uint8_t* input,
 
 }
 
-boost::uint8_t*
+std::uint8_t*
 AudioDecoderFfmpeg::decode(const EncodedAudioFrame& ef,
-        boost::uint32_t& outputSize)
+        std::uint32_t& outputSize)
 {
     return decodeFrame(ef.data.get(), ef.dataSize, outputSize);
 }
 
-boost::uint8_t*
-AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
-        boost::uint32_t inputSize, boost::uint32_t& outputSize)
+std::uint8_t*
+AudioDecoderFfmpeg::decodeFrame(const std::uint8_t* input,
+        std::uint32_t inputSize, std::uint32_t& outputSize)
 {
     //GNASH_REPORT_FUNCTION;
 
@@ -478,14 +477,15 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
     size_t outSize = MAX_AUDIO_FRAME_SIZE;
 
     // TODO: make this a private member, to reuse (see NetStreamFfmpeg in 0.8.3)
-    ScopedPtr<boost::int16_t> output( reinterpret_cast<boost::int16_t*>(av_malloc(outSize)), av_free );
+    std::unique_ptr<std::int16_t, decltype(av_free)*> output(
+        reinterpret_cast<std::int16_t*>(av_malloc(outSize)), av_free );
     if (!output.get()) {
         log_error(_("failed to allocate audio buffer."));
         outputSize = 0;
-        return NULL;
+        return nullptr;
     }
 
-    boost::int16_t* outPtr = output.get();
+    std::int16_t* outPtr = output.get();
 
 
 #ifdef GNASH_DEBUG_AUDIO_DECODING
@@ -500,10 +500,10 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
     av_init_packet(&pkt);
     pkt.data = const_cast<uint8_t*>(input);
     pkt.size = inputSize;
-    ScopedPtr<AVFrame> frm ( FRAMEALLOC(), av_free );
+    std::unique_ptr<AVFrame, decltype(av_free)*> frm ( FRAMEALLOC(), av_free );
     if (!frm.get()) {
         log_error(_("failed to allocate frame."));
-        return NULL;
+        return nullptr;
     }
     int tmp = avcodec_decode_audio4(_audioCodecCtx, frm.get(), &got_frm, &pkt);
 
@@ -522,7 +522,7 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
         if (static_cast<int>(outSize) < data_size) {
             log_error(_("output buffer size is too small for the current frame "
                 "(%d < %d)"), outSize, data_size);
-            return NULL;
+            return nullptr;
         }
 
         memcpy(outPtr, frm->extended_data[0], plane_size);
@@ -552,7 +552,7 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
                 "data."), outputSize, inputSize);
         log_error(_("Upgrading ffmpeg/libavcodec might fix this issue."));
         outputSize = 0;
-        return NULL;
+        return nullptr;
     }
 
     // Resampling is needed.
@@ -571,7 +571,7 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
         int resampledFrameSize = expectedMaxOutSamples*2*2;
 
         // Allocate just the required amount of bytes
-        boost::uint8_t* resampledOutput = new boost::uint8_t[resampledFrameSize]; 
+        std::uint8_t* resampledOutput = new std::uint8_t[resampledFrameSize];
 
 #ifdef GNASH_DEBUG_AUDIO_DECODING
         log_debug(" decodeFrame | Calling the resampler, resampleFactor: %d | "
@@ -588,7 +588,7 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
             &resampledOutput); // output
 
         // make sure to set outPtr *after* we use it as input to the resampler
-        outPtr = reinterpret_cast<boost::int16_t*>(resampledOutput);
+        outPtr = reinterpret_cast<std::int16_t*>(resampledOutput);
 
 #ifdef GNASH_DEBUG_AUDIO_DECODING
         log_debug("resampler returned %d samples ", outSamples);
@@ -618,9 +618,9 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
 
     }
     else {
-        boost::uint8_t* newOutput = new boost::uint8_t[outSize];
+        std::uint8_t* newOutput = new std::uint8_t[outSize];
         std::memcpy(newOutput, outPtr, outSize);
-        outPtr = reinterpret_cast<boost::int16_t*>(newOutput);
+        outPtr = reinterpret_cast<std::int16_t*>(newOutput);
     }
 
     outputSize = outSize;
@@ -628,9 +628,9 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
 }
 
 int
-AudioDecoderFfmpeg::parseInput(const boost::uint8_t* input,
-        boost::uint32_t inputSize,
-        boost::uint8_t const ** outFrame, int* outFrameSize)
+AudioDecoderFfmpeg::parseInput(const std::uint8_t* input,
+        std::uint32_t inputSize,
+        std::uint8_t const ** outFrame, int* outFrameSize)
 {
     if ( _needsParsing )
     {
@@ -641,7 +641,7 @@ AudioDecoderFfmpeg::parseInput(const boost::uint8_t* input,
 #endif
                     // as of 2008-10-28 SVN, ffmpeg doesn't
                     // accept a pointer to pointer to const..
-                    const_cast<boost::uint8_t**>(outFrame),
+                    const_cast<std::uint8_t**>(outFrame),
                     outFrameSize,
                     input, inputSize,
 #if LIBAVCODEC_VERSION_MAJOR >= 53
diff --git a/libmedia/ffmpeg/AudioDecoderFfmpeg.h b/libmedia/ffmpeg/AudioDecoderFfmpeg.h
index 9310830..96578bc 100644
--- a/libmedia/ffmpeg/AudioDecoderFfmpeg.h
+++ b/libmedia/ffmpeg/AudioDecoderFfmpeg.h
@@ -56,20 +56,20 @@ public:
 	~AudioDecoderFfmpeg();
 
     // See dox in AudioDecoder.h
-	boost::uint8_t* decode(const boost::uint8_t* input,
-            boost::uint32_t inputSize, boost::uint32_t& outputSize,
-            boost::uint32_t& decodedBytes);
+	std::uint8_t* decode(const std::uint8_t* input,
+            std::uint32_t inputSize, std::uint32_t& outputSize,
+            std::uint32_t& decodedBytes);
 
-	boost::uint8_t* decode(const EncodedAudioFrame& af,
-            boost::uint32_t& outputSize);
+	std::uint8_t* decode(const EncodedAudioFrame& af,
+            std::uint32_t& outputSize);
 
 private:
 
 	void setup(const AudioInfo& info);
 	void setup(SoundInfo& info);
 
-	boost::uint8_t* decodeFrame(const boost::uint8_t* input,
-            boost::uint32_t inputSize, boost::uint32_t& outputSize);
+	std::uint8_t* decodeFrame(const std::uint8_t* input,
+            std::uint32_t inputSize, std::uint32_t& outputSize);
 
 	AVCodec* _audioCodec;
 	AVCodecContext* _audioCodecCtx;
@@ -99,8 +99,8 @@ private:
     ///
     /// @return number of input bytes parsed, or -1 on error
     ///
-    int parseInput(const boost::uint8_t* input, boost::uint32_t inputSize,
-            boost::uint8_t const ** outFrame, int* outFrameSize);
+    int parseInput(const std::uint8_t* input, std::uint32_t inputSize,
+            std::uint8_t const ** outFrame, int* outFrameSize);
 };
 	
 } // gnash.media.ffmpeg namespace 
diff --git a/libmedia/ffmpeg/AudioInputFfmpeg.h b/libmedia/ffmpeg/AudioInputFfmpeg.h
index 5d647cd..32e7292 100644
--- a/libmedia/ffmpeg/AudioInputFfmpeg.h
+++ b/libmedia/ffmpeg/AudioInputFfmpeg.h
@@ -23,7 +23,7 @@
 #include "dsodefs.h" //DSOEXPORT
 #include "AudioInput.h"
 
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include <string>
 
 namespace gnash {
diff --git a/libmedia/ffmpeg/AudioResamplerFfmpeg.cpp b/libmedia/ffmpeg/AudioResamplerFfmpeg.cpp
index 41673b4..0b0dc6c 100644
--- a/libmedia/ffmpeg/AudioResamplerFfmpeg.cpp
+++ b/libmedia/ffmpeg/AudioResamplerFfmpeg.cpp
@@ -24,14 +24,13 @@
 
 #include <cmath>
 #include <vector>
-#include <boost/scoped_array.hpp>
 
 namespace gnash {
 namespace media {
 namespace ffmpeg {
 
 AudioResamplerFfmpeg::AudioResamplerFfmpeg()
-	:_context(NULL)
+	:_context(nullptr)
 {
 }
 AudioResamplerFfmpeg::~AudioResamplerFfmpeg() {
@@ -86,8 +85,9 @@ AudioResamplerFfmpeg::init(AVCodecContext* ctx) {
 }
 
 int
-AudioResamplerFfmpeg::resample(boost::uint8_t** input, int plane_size,
-    int samples, boost::uint8_t** output) {
+AudioResamplerFfmpeg::resample(std::uint8_t** input, int plane_size,
+    int samples, std::uint8_t** output) {
+    UNUSED( plane_size );
 #ifdef HAVE_SWRESAMPLE_H
     return swr_convert(_context,
         output, MAX_AUDIO_FRAME_SIZE,
@@ -97,7 +97,6 @@ AudioResamplerFfmpeg::resample(boost::uint8_t** input, int plane_size,
         output, 0, MAX_AUDIO_FRAME_SIZE,
         input, plane_size, samples);
 #else
-    UNUSED( plane_size );
     return audio_resample(_context, reinterpret_cast<short*>(*output),
         reinterpret_cast<short*>(*input), samples); 
 #endif
diff --git a/libmedia/ffmpeg/AudioResamplerFfmpeg.h b/libmedia/ffmpeg/AudioResamplerFfmpeg.h
index 3dc2748..5b21c83 100644
--- a/libmedia/ffmpeg/AudioResamplerFfmpeg.h
+++ b/libmedia/ffmpeg/AudioResamplerFfmpeg.h
@@ -25,7 +25,7 @@
 
 #include "ffmpegHeaders.h"
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 namespace gnash {
 namespace media {
@@ -67,8 +67,8 @@ public:
 	///
 	/// @return the number of samples in the output data.
 	///
-	DSOEXPORT int resample(boost::uint8_t** input, int plane_size,
-		int samples, boost::uint8_t** output);
+	DSOEXPORT int resample(std::uint8_t** input, int plane_size,
+		int samples, std::uint8_t** output);
 
 private:
     // The container of the resample format information.
diff --git a/libmedia/ffmpeg/MediaHandlerFfmpeg.cpp b/libmedia/ffmpeg/MediaHandlerFfmpeg.cpp
index 2c13eaf..127aaaa 100644
--- a/libmedia/ffmpeg/MediaHandlerFfmpeg.cpp
+++ b/libmedia/ffmpeg/MediaHandlerFfmpeg.cpp
@@ -42,27 +42,27 @@ std::string
 MediaHandlerFfmpeg::description() const
 {
     std::ostringstream ss;
-    const boost::uint32_t ver = avcodec_version();
+    const std::uint32_t ver = avcodec_version();
     ss << "FFmpeg (avcodec version: " << (ver >> 16) << "."
                       << ((ver & 0xff00) >> 8)  << "."
                       << (ver & 0xff) << ")";
     return ss.str();
 }
 
-std::auto_ptr<MediaParser>
-MediaHandlerFfmpeg::createMediaParser(std::auto_ptr<IOChannel> stream)
+std::unique_ptr<MediaParser>
+MediaHandlerFfmpeg::createMediaParser(std::unique_ptr<IOChannel> stream)
 {
-	std::auto_ptr<MediaParser> parser;
+    std::unique_ptr<MediaParser> parser;
 
     try {
         if (isFLV(*stream))
         {
-            parser.reset(new FLVParser(stream));
+            parser.reset(new FLVParser(std::move(stream)));
         }
         else
         {
-			parser.reset(new MediaParserFfmpeg(stream));
-		}
+            parser.reset(new MediaParserFfmpeg(std::move(stream)));
+        }
     }
     catch (GnashException& ex)
     {
@@ -71,21 +71,21 @@ MediaHandlerFfmpeg::createMediaParser(std::auto_ptr<IOChannel> stream)
         assert(!parser.get());
     }
 
-	return parser;
+    return parser;
 }
 
-std::auto_ptr<VideoDecoder>
+std::unique_ptr<VideoDecoder>
 MediaHandlerFfmpeg::createVideoDecoder(const VideoInfo& info)
 {
-	std::auto_ptr<VideoDecoder> ret(new VideoDecoderFfmpeg(info));
+	std::unique_ptr<VideoDecoder> ret(new VideoDecoderFfmpeg(info));
 	return ret;
 }
 
-std::auto_ptr<VideoConverter>
+std::unique_ptr<VideoConverter>
 MediaHandlerFfmpeg::createVideoConverter(ImgBuf::Type4CC srcFormat,
                                          ImgBuf::Type4CC dstFormat)
 {
-    std::auto_ptr<VideoConverter> converter;
+    std::unique_ptr<VideoConverter> converter;
 
     try
     {
@@ -101,11 +101,11 @@ MediaHandlerFfmpeg::createVideoConverter(ImgBuf::Type4CC srcFormat,
 }
 
 
-std::auto_ptr<AudioDecoder>
+std::unique_ptr<AudioDecoder>
 MediaHandlerFfmpeg::createAudioDecoder(const AudioInfo& info)
 {
 
-	std::auto_ptr<AudioDecoder> ret;
+	std::unique_ptr<AudioDecoder> ret;
 
     try {
         ret.reset(new AudioDecoderFfmpeg(info));
diff --git a/libmedia/ffmpeg/MediaHandlerFfmpeg.h b/libmedia/ffmpeg/MediaHandlerFfmpeg.h
index c231506..3c29cd3 100644
--- a/libmedia/ffmpeg/MediaHandlerFfmpeg.h
+++ b/libmedia/ffmpeg/MediaHandlerFfmpeg.h
@@ -47,17 +47,17 @@ public:
 
     std::string description() const;
 
-	virtual std::auto_ptr<MediaParser>
-        createMediaParser(std::auto_ptr<IOChannel> stream);
+	virtual std::unique_ptr<MediaParser>
+        createMediaParser(std::unique_ptr<IOChannel> stream);
 
-	virtual std::auto_ptr<VideoDecoder>
+	virtual std::unique_ptr<VideoDecoder>
         createVideoDecoder(const VideoInfo& info);
 	
-	virtual std::auto_ptr<VideoConverter>
+	virtual std::unique_ptr<VideoConverter>
 		createVideoConverter(ImgBuf::Type4CC srcFormat,
                 ImgBuf::Type4CC dstFormat);
 
-	virtual std::auto_ptr<AudioDecoder>
+	virtual std::unique_ptr<AudioDecoder>
         createAudioDecoder(const AudioInfo& info);
 
     virtual size_t getInputPaddingSize() const;
diff --git a/libmedia/ffmpeg/MediaParserFfmpeg.cpp b/libmedia/ffmpeg/MediaParserFfmpeg.cpp
index a90eef9..634254e 100644
--- a/libmedia/ffmpeg/MediaParserFfmpeg.cpp
+++ b/libmedia/ffmpeg/MediaParserFfmpeg.cpp
@@ -46,15 +46,15 @@ inline double as_double(AVRational time) {
 
 
 int
-MediaParserFfmpeg::readPacketWrapper(void* opaque, boost::uint8_t* buf,
+MediaParserFfmpeg::readPacketWrapper(void* opaque, std::uint8_t* buf,
         int buf_size)
 {
 	MediaParserFfmpeg* p = static_cast<MediaParserFfmpeg*>(opaque);
 	return p->readPacket(buf, buf_size);
 }
 
-boost::int64_t
-MediaParserFfmpeg::seekMediaWrapper(void *opaque, boost::int64_t offset, int whence)
+std::int64_t
+MediaParserFfmpeg::seekMediaWrapper(void *opaque, std::int64_t offset, int whence)
 {
 	MediaParserFfmpeg* p = static_cast<MediaParserFfmpeg*>(opaque);
 	return p->seekMedia(offset, whence);
@@ -66,7 +66,7 @@ MediaParserFfmpeg::probeStream()
     const size_t probeSize = 4096;
     const size_t bufSize = probeSize + FF_INPUT_BUFFER_PADDING_SIZE;
 
-	boost::scoped_array<boost::uint8_t> buffer(new boost::uint8_t[bufSize]);
+	std::unique_ptr<std::uint8_t[]> buffer(new std::uint8_t[bufSize]);
 
 	assert(_stream->tell() == static_cast<std::streampos>(0));
 	size_t actuallyRead = _stream->read(buffer.get(), probeSize);
@@ -92,11 +92,11 @@ MediaParserFfmpeg::probeStream()
 }
 
 bool
-MediaParserFfmpeg::seek(boost::uint32_t& pos)
+MediaParserFfmpeg::seek(std::uint32_t& pos)
 {
     // lock the stream while reading from it, so actionscript
     // won't mess with the parser on seek  or on getBytesLoaded
-    boost::mutex::scoped_lock streamLock(_streamMutex);
+    std::lock_guard<std::mutex> streamLock(_streamMutex);
 
     // NOTE: seeking when timestamps are unknown is a pain
     // See https://savannah.gnu.org/bugs/index.php?33085
@@ -158,7 +158,7 @@ MediaParserFfmpeg::parseVideoFrame(AVPacket& packet)
 	//    pkt->pts can be AV_NOPTS_VALUE if the video format has B frames,
 	//    so it is better to rely on pkt->dts if you do not decompress the payload.
 	//
-	boost::uint64_t timestamp = static_cast<boost::uint64_t>(packet.dts * as_double(_videoStream->time_base) * 1000.0); 
+	std::uint64_t timestamp = static_cast<std::uint64_t>(packet.dts * as_double(_videoStream->time_base) * 1000.0);
 
 #if 0
 	LOG_ONCE( log_unimpl("%s", __PRETTY_FUNCTION__) );
@@ -172,11 +172,11 @@ MediaParserFfmpeg::parseVideoFrame(AVPacket& packet)
 	//       we might do proper padding or (better) avoid the copy as a whole by making
 	//       EncodedVideoFrame virtual.
 	size_t allocSize = packet.size*2;
-	boost::uint8_t* data = new boost::uint8_t[allocSize];
+	std::uint8_t* data = new std::uint8_t[allocSize];
 	std::copy(packet.data, packet.data+packet.size, data);
-	std::auto_ptr<EncodedVideoFrame> frame(new EncodedVideoFrame(data, packet.size, 0, timestamp));
+	std::unique_ptr<EncodedVideoFrame> frame(new EncodedVideoFrame(data, packet.size, 0, timestamp));
 
-	pushEncodedVideoFrame(frame);
+	pushEncodedVideoFrame(std::move(frame));
 
 	return true;
 #endif
@@ -197,8 +197,8 @@ MediaParserFfmpeg::parseAudioFrame(AVPacket& packet)
 	//    so it is better to rely on pkt->dts if you do not decompress the payload.
 	//
 
-	boost::uint64_t dts = packet.dts;
-    if ( dts == static_cast<boost::uint64_t>(AV_NOPTS_VALUE) ) {
+	std::uint64_t dts = packet.dts;
+    if ( dts == static_cast<std::uint64_t>(AV_NOPTS_VALUE) ) {
         // We'll take 'nopts' value as zero.
         // Would likely be better to make it use timestamp
         // of previous frame, if any.
@@ -212,23 +212,23 @@ MediaParserFfmpeg::parseAudioFrame(AVPacket& packet)
                              "timestamp has no value, taking as zero")));
         dts = 0;
     }
-	boost::uint64_t timestamp = static_cast<boost::uint64_t>(dts * as_double(_audioStream->time_base) * 1000.0); 
+	std::uint64_t timestamp = static_cast<std::uint64_t>(dts * as_double(_audioStream->time_base) * 1000.0);
     //log_debug("On getting audio frame with timestamp %d, duration is %d", timestamp, _audioStream->duration);
 
-	std::auto_ptr<EncodedAudioFrame> frame ( new EncodedAudioFrame );
+	std::unique_ptr<EncodedAudioFrame> frame ( new EncodedAudioFrame );
 
 	// TODO: FIXME: *2 is an hack to avoid libavcodec reading past end of allocated space
 	//       we might do proper padding or (better) avoid the copy as a whole by making
 	//       EncodedVideoFrame virtual.
 	size_t allocSize = packet.size*2;
-	boost::uint8_t* data = new boost::uint8_t[allocSize];
+	std::uint8_t* data = new std::uint8_t[allocSize];
 	std::copy(packet.data, packet.data+packet.size, data);
 
 	frame->data.reset(data); 
 	frame->dataSize = packet.size;
 	frame->timestamp = timestamp;
 
-	pushEncodedAudioFrame(frame); 
+	pushEncodedAudioFrame(std::move(frame)); 
 
 	return true;
 }
@@ -238,7 +238,7 @@ MediaParserFfmpeg::parseNextFrame()
 {
 	// lock the stream while reading from it, so actionscript
 	// won't mess with the parser on seek  or on getBytesLoaded
-	boost::mutex::scoped_lock streamLock(_streamMutex);
+	std::lock_guard<std::mutex> streamLock(_streamMutex);
 
 	if ( _parsingComplete )
 	{
@@ -260,7 +260,7 @@ MediaParserFfmpeg::parseNextFrame()
   	int rc = av_read_frame(_formatCtx, &packet);
 
 	// Update _lastParsedPosition, even in case of error..
-	boost::uint64_t curPos = _stream->tell();
+	std::uint64_t curPos = _stream->tell();
 	if ( curPos > _lastParsedPosition )
 	{
 		_lastParsedPosition = curPos;
@@ -314,23 +314,22 @@ MediaParserFfmpeg::parseNextChunk()
 	return true;
 }
 
-boost::uint64_t
+std::uint64_t
 MediaParserFfmpeg::getBytesLoaded() const
 {
 	return _lastParsedPosition;
 }
 
-MediaParserFfmpeg::MediaParserFfmpeg(std::auto_ptr<IOChannel> stream)
+MediaParserFfmpeg::MediaParserFfmpeg(std::unique_ptr<IOChannel> stream)
 	:
-	MediaParser(stream),
-	_nextVideoFrame(0),
-	_nextAudioFrame(0),
-	_inputFmt(0),
-	_formatCtx(0),
+	MediaParser(std::move(stream)),
+	_inputFmt(nullptr),
+	_formatCtx(nullptr),
 	_videoStreamIndex(-1),
-	_videoStream(0),
+	_videoStream(nullptr),
 	_audioStreamIndex(-1),
-	_audioStream(0),
+	_audioStream(nullptr),
+        _avIOCxt(nullptr),
 	_lastParsedPosition(0)
 {
 	initializeParser();
@@ -344,10 +343,6 @@ MediaParserFfmpeg::initializeParser()
 {
     av_register_all(); // TODO: needs to be invoked only once ?
 
-#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
-    _byteIOCxt.buffer = NULL;
-#endif
-
     _inputFmt = probeStream();
 
 #ifdef GNASH_ALLOW_VCODEC_ENV	
@@ -368,72 +363,39 @@ MediaParserFfmpeg::initializeParser()
     // which isn't needed.
     _byteIOBuffer.reset(new unsigned char[byteIOBufferSize]);
 
-#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
-    init_put_byte(&_byteIOCxt,
-#else
     _avIOCxt = avio_alloc_context(
-#endif
 		  _byteIOBuffer.get(), // buffer
 		  byteIOBufferSize, // buffer size
 		  0, // write flags
 		  this, // opaque pointer to pass to the callbacks
 		  MediaParserFfmpeg::readPacketWrapper, // packet reader callback
-		  NULL, // packet writer callback
+		  nullptr, // packet writer callback
 		  MediaParserFfmpeg::seekMediaWrapper // seeker callback
 		  );
     
-#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
-    _byteIOCxt.is_streamed = 1;
-#else
     _avIOCxt->seekable = 0;
-#endif
 
-#if !defined(LIBAVCODEC_VERSION_MAJOR) || LIBAVCODEC_VERSION_MAJOR < 52
-    // Needed for Lenny.
-    _formatCtx = av_alloc_format_context();
-#else
     _formatCtx = avformat_alloc_context();
-#endif
-
     assert(_formatCtx);
 
-#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
-    // Otherwise av_open_input_stream will reallocate the context.
-    AVFormatParameters ap;
-    std::memset(&ap, 0, sizeof ap);
-    ap.prealloced_context = 1;
-
-    if (av_open_input_stream(&_formatCtx, &_byteIOCxt, "", _inputFmt, &ap) < 0)
-#else
-
     _formatCtx->pb = _avIOCxt;
 
-    if (avformat_open_input(&_formatCtx, "", _inputFmt, NULL) < 0)
-#endif
+    if (avformat_open_input(&_formatCtx, "", _inputFmt, nullptr) < 0)
     {
         throw IOException("MediaParserFfmpeg couldn't open input stream");
     }
 
-#if defined(LIBAVCODEC_VERSION_MAJOR) && LIBAVCODEC_VERSION_MAJOR >= 52
     // Note: in at least some versions of ffmpeg, av_open_input_stream does
     // not parse metadata; not sure why.
-#if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(51,5,0)
-    AVMetadata* md = _formatCtx->metadata;
-    if (md) {
-        AVMetadataTag* tag = av_metadata_get(md, "album", 0,
-                AV_METADATA_MATCH_CASE);
-#else
     AVDictionary* md = _formatCtx->metadata;
     if (md) {
-        AVDictionaryEntry* tag = av_dict_get(md, "album", 0,
+        AVDictionaryEntry* tag = av_dict_get(md, "album", nullptr,
                 AV_DICT_MATCH_CASE);
-#endif
         if (tag && tag->value) {
             setId3Info(&Id3Info::album, std::string(tag->value),
                     _id3Object);
         }
     }
-#endif
 
     log_debug("Parsing FFMPEG media file: format:%s; nstreams:%d",
         _inputFmt->name, _formatCtx->nb_streams);
@@ -454,11 +416,7 @@ MediaParserFfmpeg::initializeParser()
 	    }
 	    
 	    switch (enc->codec_type) {
-#if LIBAVCODEC_VERSION_MAJOR >= 53
             case AVMEDIA_TYPE_AUDIO:
-#else
-            case CODEC_TYPE_AUDIO:
-#endif
                 if (_audioStreamIndex < 0) {
                     _audioStreamIndex = i;
                     _audioStream = _formatCtx->streams[i];
@@ -469,11 +427,7 @@ MediaParserFfmpeg::initializeParser()
                 }
                 break;
 		
-#if LIBAVCODEC_VERSION_MAJOR >= 53
             case AVMEDIA_TYPE_VIDEO:
-#else
-            case CODEC_TYPE_VIDEO:
-#endif
                 if (_videoStreamIndex < 0) {
                     _videoStreamIndex = i;
                     _videoStream = _formatCtx->streams[i];
@@ -489,16 +443,16 @@ MediaParserFfmpeg::initializeParser()
     // Create VideoInfo
     if ( _videoStream) {
         const int codec = static_cast<int>(_videoStream->codec->codec_id); 
-        boost::uint16_t width = _videoStream->codec->width;
-        boost::uint16_t height = _videoStream->codec->height;
-        boost::uint16_t frameRate = static_cast<boost::uint16_t>(
+        std::uint16_t width = _videoStream->codec->width;
+        std::uint16_t height = _videoStream->codec->height;
+        std::uint16_t frameRate = static_cast<std::uint16_t>(
                 as_double(_videoStream->avg_frame_rate));
 #if !defined(HAVE_LIBAVFORMAT_AVFORMAT_H) && !defined(HAVE_FFMPEG_AVCODEC_H)
-        boost::uint64_t duration = _videoStream->codec_info_duration;
+        std::uint64_t duration = _videoStream->codec_info_duration;
 #else
-        boost::uint64_t duration = _videoStream->duration;
+        std::uint64_t duration = _videoStream->duration;
 #endif
-        if (duration == static_cast<boost::uint64_t>(AV_NOPTS_VALUE)) {
+        if (duration == static_cast<std::uint64_t>(AV_NOPTS_VALUE)) {
             log_error(_("Duration of video stream unknown"));
             duration=0; // TODO: guess!
         } else {
@@ -519,15 +473,15 @@ MediaParserFfmpeg::initializeParser()
     if (_audioStream) {
 
         const int codec = static_cast<int>(_audioStream->codec->codec_id); 
-        boost::uint16_t sampleRate = _audioStream->codec->sample_rate;
-        boost::uint16_t sampleSize = SampleFormatToSampleSize(_audioStream->codec->sample_fmt);
+        std::uint16_t sampleRate = _audioStream->codec->sample_rate;
+        std::uint16_t sampleSize = SampleFormatToSampleSize(_audioStream->codec->sample_fmt);
         bool stereo = (_audioStream->codec->channels == 2);
 #if !defined(HAVE_LIBAVFORMAT_AVFORMAT_H) && !defined(HAVE_FFMPEG_AVCODEC_H)
-        boost::uint64_t duration = _audioStream->codec_info_duration;
+        std::uint64_t duration = _audioStream->codec_info_duration;
 #else
-        boost::uint64_t duration = _audioStream->duration;
+        std::uint64_t duration = _audioStream->duration;
 #endif
-        if (duration == static_cast<boost::uint64_t>(AV_NOPTS_VALUE)) {
+        if (duration == static_cast<std::uint64_t>(AV_NOPTS_VALUE)) {
             log_error(_("Duration of audio stream unknown to ffmpeg"));
             duration=0; // TODO: guess!
         } 
@@ -552,12 +506,8 @@ MediaParserFfmpeg::~MediaParserFfmpeg()
 {
 	stopParserThread();
 
-	if ( _formatCtx )
-	{
-		// TODO: check if this is correct (should we create RIIA classes for ffmpeg stuff?)
-		//av_close_input_file(_formatCtx); // NOTE: this one triggers a mismatched free/delete on _byteIOBuffer with libavformat.so.52 !
-		av_free(_formatCtx);
-	}
+
+        avformat_close_input(&_formatCtx);
 
 	if ( _inputFmt )
 	{
@@ -565,6 +515,7 @@ MediaParserFfmpeg::~MediaParserFfmpeg()
 		//av_free(_inputFmt); // it seems this one blows up, could be due to av_free(_formatCtx) above
 	}
 
+        av_free(_avIOCxt);
 }
 
 // NOTE: as this function is used as a callback from FFMPEG, it should not
@@ -573,7 +524,7 @@ MediaParserFfmpeg::~MediaParserFfmpeg()
 // b) Even if we don't crash and burn, the FFMPEG parser is left in an
 //    undefined state.
 int 
-MediaParserFfmpeg::readPacket(boost::uint8_t* buf, int buf_size)
+MediaParserFfmpeg::readPacket(std::uint8_t* buf, int buf_size)
 {
 	//GNASH_REPORT_FUNCTION;
 	//log_debug("readPacket(%d)", buf_size);
@@ -595,8 +546,8 @@ MediaParserFfmpeg::getId3Info() const
 // a) The behaviour of C++ exceptions passed into C code is undefined.
 // b) Even if we don't crash and burn, the FFMPEG parser is left in an
 //    undefined state.
-boost::int64_t 
-MediaParserFfmpeg::seekMedia(boost::int64_t offset, int whence)
+std::int64_t
+MediaParserFfmpeg::seekMedia(std::int64_t offset, int whence)
 {
 	//GNASH_REPORT_FUNCTION;
 	//log_debug("::seekMedia(%1%, %2%)", offset, whence);
@@ -643,35 +594,10 @@ MediaParserFfmpeg::seekMedia(boost::int64_t offset, int whence)
 	return _stream->tell(); 
 }
 
-boost::uint16_t
+std::uint16_t
 MediaParserFfmpeg::SampleFormatToSampleSize(AVSampleFormat fmt)
 {
-#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(51,4,0)
         return av_get_bytes_per_sample(fmt);
-#else
-	switch (fmt)
-	{
-		case AV_SAMPLE_FMT_U8: // unsigned 8 bits
-			return 1;
-
-		case AV_SAMPLE_FMT_S16: // signed 16 bits
-		case AV_SAMPLE_FMT_FLT: // float
-			return 2;
-
-#if !defined (LIBAVCODEC_VERSION_MAJOR) || LIBAVCODEC_VERSION_MAJOR < 52
-// Was dropped for version 52.0.0
-		case AV_SAMPLE_FMT_S24: // signed 24 bits
-			return 3;
-#endif
-
-		case AV_SAMPLE_FMT_S32: // signed 32 bits
-			return 4;
-
-		case AV_SAMPLE_FMT_NONE:
-		default:
-			return 8; // arbitrary value
-	}
-#endif
 }
 
 
diff --git a/libmedia/ffmpeg/MediaParserFfmpeg.h b/libmedia/ffmpeg/MediaParserFfmpeg.h
index a14cfb6..e9e5fde 100644
--- a/libmedia/ffmpeg/MediaParserFfmpeg.h
+++ b/libmedia/ffmpeg/MediaParserFfmpeg.h
@@ -20,7 +20,6 @@
 #ifndef GNASH_MEDIAPARSER_FFMPEG_H
 #define GNASH_MEDIAPARSER_FFMPEG_H
 
-#include <boost/scoped_array.hpp>
 #include <memory>
 #include <boost/optional.hpp>
 
@@ -44,13 +43,13 @@ namespace ffmpeg {
 class ExtraAudioInfoFfmpeg : public AudioInfo::ExtraInfo
 {
 public:
-	ExtraAudioInfoFfmpeg(boost::uint8_t* nData, size_t nDataSize)
+	ExtraAudioInfoFfmpeg(std::uint8_t* nData, size_t nDataSize)
 		:
 		data(nData),
 		dataSize(nDataSize)
 	{
 	}
-	boost::uint8_t* data;
+	std::uint8_t* data;
 	size_t dataSize;
 };
 
@@ -61,13 +60,13 @@ public:
 class ExtraVideoInfoFfmpeg : public VideoInfo::ExtraInfo
 {
 public:
-	ExtraVideoInfoFfmpeg(boost::uint8_t* nData, size_t nDataSize)
+	ExtraVideoInfoFfmpeg(std::uint8_t* nData, size_t nDataSize)
 		:
 		data(nData),
 		dataSize(nDataSize)
 	{
 	}
-	boost::uint8_t* data;
+	std::uint8_t* data;
 	size_t dataSize;
 };
 
@@ -80,18 +79,18 @@ public:
 	//
 	/// Can throw a GnashException if input format couldn't be detected
 	///
-	MediaParserFfmpeg(std::auto_ptr<IOChannel> stream);
+	MediaParserFfmpeg(std::unique_ptr<IOChannel> stream);
 
 	~MediaParserFfmpeg();
 
 	// See dox in MediaParser.h
-	virtual bool seek(boost::uint32_t&);
+	virtual bool seek(std::uint32_t&);
 
 	// See dox in MediaParser.h
 	virtual bool parseNextChunk();
 
 	// See dox in MediaParser.h
-	virtual boost::uint64_t getBytesLoaded() const;
+	virtual std::uint64_t getBytesLoaded() const;
 
     virtual boost::optional<Id3Info> getId3Info() const;
 
@@ -101,20 +100,6 @@ private:
 	/// creating VideoInfo and AudioInfo objects
 	void initializeParser();
 
-	/// Video frame cursor position 
-	//
-	/// This is the video frame number that will
-	/// be referenced by nextVideoFrame and nextVideoFrameTimestamp
-	///
-	size_t _nextVideoFrame;
-
-	/// Audio frame cursor position 
-	//
-	/// This is the video frame number that will
-	/// be referenced by nextVideoFrame and nextVideoFrameTimestamp
-	///
-	size_t _nextAudioFrame;
-
 	/// Parse next media frame
 	//
 	/// @return false on error or eof, true otherwise
@@ -122,16 +107,16 @@ private:
 	bool parseNextFrame();
 
 	/// Input chunk reader, to be called by ffmpeg parser
-	int readPacket(boost::uint8_t* buf, int buf_size);
+	int readPacket(std::uint8_t* buf, int buf_size);
 
 	/// ffmpeg callback function
-	static int readPacketWrapper(void* opaque, boost::uint8_t* buf, int buf_size);
+	static int readPacketWrapper(void* opaque, std::uint8_t* buf, int buf_size);
 
 	/// Input stream seeker, to be called by ffmpeg parser
-	boost::int64_t seekMedia(boost::int64_t offset, int whence);
+	std::int64_t seekMedia(std::int64_t offset, int whence);
 
 	/// ffmpeg callback function
-	static boost::int64_t seekMediaWrapper(void *opaque, boost::int64_t offset, int whence);
+	static std::int64_t seekMediaWrapper(void *opaque, std::int64_t offset, int whence);
 
 	/// Read some of the input to figure an AVInputFormat
 	AVInputFormat* probeStream();
@@ -154,13 +139,7 @@ private:
 	AVStream* _audioStream;
 
 	/// ?
-#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(52,107,0)
-// AVIOContext was introduced a bit earlier but without version bump, so let's
-// be safe
-        ByteIOContext _byteIOCxt;
-#else
         AVIOContext* _avIOCxt;
-#endif
 
 	/// Size of the ByteIO context buffer
 	//
@@ -169,16 +148,16 @@ private:
 	///
 	static const size_t byteIOBufferSize = 1024;
 
-	boost::scoped_array<unsigned char> _byteIOBuffer;
+	std::unique_ptr<unsigned char[]> _byteIOBuffer;
 
 	/// The last parsed position, for getBytesLoaded
-	boost::uint64_t _lastParsedPosition;
+	std::uint64_t _lastParsedPosition;
 
 	/// Return sample size from SampleFormat
 	//
 	/// TODO: move somewhere in ffmpeg utils..
 	///
-	boost::uint16_t SampleFormatToSampleSize(AVSampleFormat fmt);
+	std::uint16_t SampleFormatToSampleSize(AVSampleFormat fmt);
 
 	/// Make an EncodedVideoFrame from an AVPacket and push to buffer
 	//
diff --git a/libmedia/ffmpeg/VideoConverterFfmpeg.cpp b/libmedia/ffmpeg/VideoConverterFfmpeg.cpp
index 5247ce3..74aa55f 100644
--- a/libmedia/ffmpeg/VideoConverterFfmpeg.cpp
+++ b/libmedia/ffmpeg/VideoConverterFfmpeg.cpp
@@ -130,10 +130,10 @@ VideoConverterFfmpeg::~VideoConverterFfmpeg()
 }
 
 
-std::auto_ptr<ImgBuf>
+std::unique_ptr<ImgBuf>
 VideoConverterFfmpeg::convert(const ImgBuf& src)
 {
-    std::auto_ptr<ImgBuf> ret;    
+    std::unique_ptr<ImgBuf> ret;    
     
     const int width = src.width;
     const int height = src.height;
@@ -147,8 +147,8 @@ VideoConverterFfmpeg::convert(const ImgBuf& src)
     if (!_swsContext.get()) {
 
         _swsContext.reset(new SwsContextWrapper(sws_getContext(width, height,
-            src_pixFmt, width, height, dst_pixFmt, SWS_BILINEAR, NULL, NULL,
-            NULL)));
+            src_pixFmt, width, height, dst_pixFmt, SWS_BILINEAR, nullptr, nullptr,
+            nullptr)));
 
         if (!_swsContext->getContext()) {
 
@@ -162,7 +162,7 @@ VideoConverterFfmpeg::convert(const ImgBuf& src)
 #endif
 
 
-    AVPicture srcpicture = {{src.data, 0, 0, 0},
+    AVPicture srcpicture = {{src.data, nullptr, nullptr, nullptr},
         {static_cast<int>(src.stride[0]), 0, 0, 0}};
     
     
@@ -171,7 +171,7 @@ VideoConverterFfmpeg::convert(const ImgBuf& src)
         return ret;
     }
 
-    boost::uint8_t* dstbuffer = new boost::uint8_t[bufsize];
+    std::uint8_t* dstbuffer = new std::uint8_t[bufsize];
 
     AVPicture dstpicture;
     avpicture_fill(&dstpicture, dstbuffer, dst_pixFmt, width, height);
diff --git a/libmedia/ffmpeg/VideoConverterFfmpeg.h b/libmedia/ffmpeg/VideoConverterFfmpeg.h
index 9714f5b..dc4ca64 100644
--- a/libmedia/ffmpeg/VideoConverterFfmpeg.h
+++ b/libmedia/ffmpeg/VideoConverterFfmpeg.h
@@ -35,12 +35,12 @@ public:
     
     ~VideoConverterFfmpeg();
 
-    std::auto_ptr<ImgBuf> convert(const ImgBuf& src);
+    std::unique_ptr<ImgBuf> convert(const ImgBuf& src);
   
 private:
 
 #if HAVE_SWSCALE_H
-    std::auto_ptr<SwsContextWrapper> _swsContext;
+    std::unique_ptr<SwsContextWrapper> _swsContext;
 #endif
 };
 
diff --git a/libmedia/ffmpeg/VideoDecoderFfmpeg.cpp b/libmedia/ffmpeg/VideoDecoderFfmpeg.cpp
index 1150dbb..81256ec 100644
--- a/libmedia/ffmpeg/VideoDecoderFfmpeg.cpp
+++ b/libmedia/ffmpeg/VideoDecoderFfmpeg.cpp
@@ -24,7 +24,6 @@
 
 #include "VideoDecoderFfmpeg.h"
 
-#include <boost/scoped_array.hpp>
 #include <boost/format.hpp>
 #include <algorithm>
 
@@ -51,7 +50,7 @@ namespace {
     VaapiContextFfmpeg* get_vaapi_context(AVCodecContext* avctx);
     void set_vaapi_context(AVCodecContext* avctx, VaapiContextFfmpeg* vactx);
     void clear_vaapi_context(AVCodecContext* avctx);
-    void reset_context(AVCodecContext* avctx, VaapiContextFfmpeg* vactx = 0);
+    void reset_context(AVCodecContext* avctx, VaapiContextFfmpeg* vactx = nullptr);
     PixelFormat get_format(AVCodecContext* avctx, const PixelFormat* fmt);
 #if LIBAVCODEC_VERSION_MAJOR >= 55
     int get_buffer(AVCodecContext* avctx, AVFrame* pic, int flags);
@@ -118,7 +117,7 @@ private:
 
 VideoDecoderFfmpeg::VideoDecoderFfmpeg(videoCodecType format, int width, int height)
     :
-    _videoCodec(NULL)
+    _videoCodec(nullptr)
 {
 
     CODECID codec_id = flashToFfmpegCodec(format);
@@ -128,7 +127,7 @@ VideoDecoderFfmpeg::VideoDecoderFfmpeg(videoCodecType format, int width, int hei
 
 VideoDecoderFfmpeg::VideoDecoderFfmpeg(const VideoInfo& info)
     :
-    _videoCodec(NULL)
+    _videoCodec(nullptr)
 {
 
     CODECID codec_id = AV_CODEC_ID_NONE;
@@ -147,7 +146,7 @@ VideoDecoderFfmpeg::VideoDecoderFfmpeg(const VideoInfo& info)
         throw MediaException(msg.str());
     }
 
-    boost::uint8_t* extradata=0;
+    std::uint8_t* extradata=nullptr;
     int extradataSize=0;
     if (info.extra.get())
     {
@@ -172,7 +171,7 @@ VideoDecoderFfmpeg::VideoDecoderFfmpeg(const VideoInfo& info)
 
 void
 VideoDecoderFfmpeg::init(enum CODECID codecId, int /*width*/, int /*height*/,
-        boost::uint8_t* extradata, int extradataSize)
+        std::uint8_t* extradata, int extradataSize)
 {
     // Init the avdecoder-decoder
 #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(52,6,2)
@@ -219,7 +218,7 @@ VideoDecoderFfmpeg::init(enum CODECID codecId, int /*width*/, int /*height*/,
 #endif
 
 #if LIBAVCODEC_VERSION_INT > AV_VERSION_INT(53,8,0)
-    int ret = avcodec_open2(ctx, _videoCodec, NULL);
+    int ret = avcodec_open2(ctx, _videoCodec, nullptr);
 #else
     int ret = avcodec_open(ctx, _videoCodec);
 #endif
@@ -255,7 +254,7 @@ VideoDecoderFfmpeg::height() const
     return _videoCodecCtx->getContext()->height;
 }
 
-std::auto_ptr<image::GnashImage>
+std::unique_ptr<image::GnashImage>
 VideoDecoderFfmpeg::frameToImage(AVCodecContext* srcCtx,
                                  const AVFrame& srcFrameRef)
 {
@@ -272,7 +271,7 @@ VideoDecoderFfmpeg::frameToImage(AVCodecContext* srcCtx,
     PixelFormat pixFmt = PIX_FMT_RGB24;
 #endif 
 
-    std::auto_ptr<image::GnashImage> im;
+    std::unique_ptr<image::GnashImage> im;
 
 #ifdef HAVE_VA_VA_H
     VaapiContextFfmpeg * const vactx = get_vaapi_context(srcCtx);
@@ -294,7 +293,7 @@ VideoDecoderFfmpeg::frameToImage(AVCodecContext* srcCtx,
 
         _swsContext.reset(new SwsContextWrapper(
             sws_getContext(width, height, srcPixFmt, width, height,
-                pixFmt, SWS_BILINEAR, NULL, NULL, NULL)
+                pixFmt, SWS_BILINEAR, nullptr, nullptr, nullptr)
         ));
         
         // Check that the context was assigned.
@@ -358,15 +357,15 @@ VideoDecoderFfmpeg::frameToImage(AVCodecContext* srcCtx,
 
 }
 
-std::auto_ptr<image::GnashImage>
-VideoDecoderFfmpeg::decode(const boost::uint8_t* input,
-        boost::uint32_t input_size)
+std::unique_ptr<image::GnashImage>
+VideoDecoderFfmpeg::decode(const std::uint8_t* input,
+        std::uint32_t input_size)
 {
     // This object shouldn't exist if there's no codec, as it can'
     // do anything anyway.
     assert(_videoCodecCtx.get());
 
-    std::auto_ptr<image::GnashImage> ret;
+    std::unique_ptr<image::GnashImage> ret;
 
     AVFrame* frame = FRAMEALLOC();
     if ( ! frame ) {
@@ -408,14 +407,13 @@ VideoDecoderFfmpeg::push(const EncodedVideoFrame& buffer)
     _video_frames.push_back(&buffer);
 }
 
-std::auto_ptr<image::GnashImage>
+std::unique_ptr<image::GnashImage>
 VideoDecoderFfmpeg::pop()
 {
-    std::auto_ptr<image::GnashImage> ret;
+    std::unique_ptr<image::GnashImage> ret;
 
-    for (std::vector<const EncodedVideoFrame*>::iterator it =
-             _video_frames.begin(), end = _video_frames.end(); it != end; ++it) {
-         ret = decode((*it)->data(), (*it)->dataSize());
+    for (const EncodedVideoFrame* frame : _video_frames) {
+         ret = decode(frame->data(), frame->dataSize());
     }
 
     _video_frames.clear();
@@ -465,7 +463,7 @@ get_vaapi_context(AVCodecContext* avctx)
     return static_cast<VaapiContextFfmpeg *>(avctx->hwaccel_context);
 #else
     UNUSED(avctx);
-	return 0;
+	return nullptr;
 #endif
 }
 
@@ -502,7 +500,7 @@ reset_context(AVCodecContext* avctx, VaapiContextFfmpeg* vactx)
     set_vaapi_context(avctx, vactx);
 
     avctx->thread_count = 1;
-    avctx->draw_horiz_band = 0;
+    avctx->draw_horiz_band = nullptr;
     if (vactx) {
         avctx->slice_flags = SLICE_FLAG_CODED_ORDER|SLICE_FLAG_ALLOW_FIELD;
     }
diff --git a/libmedia/ffmpeg/VideoDecoderFfmpeg.h b/libmedia/ffmpeg/VideoDecoderFfmpeg.h
index d471a6d..5d05810 100644
--- a/libmedia/ffmpeg/VideoDecoderFfmpeg.h
+++ b/libmedia/ffmpeg/VideoDecoderFfmpeg.h
@@ -55,7 +55,7 @@ public:
     
     void push(const EncodedVideoFrame& buffer);
 
-    std::auto_ptr<image::GnashImage> pop();
+    std::unique_ptr<image::GnashImage> pop();
     
     bool peek();
 
@@ -80,22 +80,22 @@ private:
     ///         caller owns that pointer, which must be freed with delete [].
     ///         It is advised to wrap the pointer in a boost::scoped_array.
     ///         If conversion fails, AVPicture::data[0] will be NULL.
-    std::auto_ptr<image::GnashImage> frameToImage(AVCodecContext* srcCtx,
+    std::unique_ptr<image::GnashImage> frameToImage(AVCodecContext* srcCtx,
             const AVFrame& srcFrame);
 
     void init(enum CODECID format, int width, int height,
-            boost::uint8_t* extradata=0, int extradataSize=0);
+            std::uint8_t* extradata=nullptr, int extradataSize=0);
 
-    std::auto_ptr<image::GnashImage> decode(const boost::uint8_t* input,
-            boost::uint32_t input_size);
+    std::unique_ptr<image::GnashImage> decode(const std::uint8_t* input,
+            std::uint32_t input_size);
 
-    std::auto_ptr<image::GnashImage> decode(const EncodedVideoFrame* vf)
+    std::unique_ptr<image::GnashImage> decode(const EncodedVideoFrame* vf)
     {
     	return decode(vf->data(), vf->dataSize());
     }
 
     AVCodec* _videoCodec;
-    std::auto_ptr<CodecContextWrapper> _videoCodecCtx;
+    std::unique_ptr<CodecContextWrapper> _videoCodecCtx;
 
 #if HAVE_SWSCALE_H
     /// A pointer to a wrapper round an SwsContext
@@ -104,7 +104,7 @@ private:
     /// can be NULL, so it is important to check
     /// not only that the wrapper exists, but also
     /// the context inside it.    
-    std::auto_ptr<SwsContextWrapper> _swsContext;
+    std::unique_ptr<SwsContextWrapper> _swsContext;
 #endif
 
     std::vector<const EncodedVideoFrame*> _video_frames;
diff --git a/libmedia/ffmpeg/VideoDecoderFfmpegVaapi.cpp b/libmedia/ffmpeg/VideoDecoderFfmpegVaapi.cpp
index aac3626..95dea86 100644
--- a/libmedia/ffmpeg/VideoDecoderFfmpegVaapi.cpp
+++ b/libmedia/ffmpeg/VideoDecoderFfmpegVaapi.cpp
@@ -95,10 +95,9 @@ void vaapi_set_surface(AVFrame *pic, VaapiSurfaceFfmpeg *surface)
 }
 
 VaapiContextFfmpeg::VaapiContextFfmpeg(enum CODECID codec_id)
-    : _context(new VaapiContext(get_profile(codec_id), VAEntrypointVLD))
+    : vaapi_context(), // FFmpeg's vaapi_context must be zero-initialized
+      _context(new VaapiContext(get_profile(codec_id), VAEntrypointVLD))
 {
-    // FFmpeg's vaapi_context must be zero-initialized
-    memset(this, 0, sizeof(struct vaapi_context));
 }
 
 bool VaapiContextFfmpeg::initDecoder(unsigned int width, unsigned int height)
diff --git a/libmedia/ffmpeg/VideoDecoderFfmpegVaapi.h b/libmedia/ffmpeg/VideoDecoderFfmpegVaapi.h
index 25e8a95..c8bea64 100644
--- a/libmedia/ffmpeg/VideoDecoderFfmpegVaapi.h
+++ b/libmedia/ffmpeg/VideoDecoderFfmpegVaapi.h
@@ -44,8 +44,8 @@ class VaapiSurfaceFfmpeg : public VaapiSurfaceProxy {
     unsigned int _pic_num;
 
 public:
-    VaapiSurfaceFfmpeg(boost::shared_ptr<VaapiSurface> surface,
-                       boost::shared_ptr<VaapiContext> context)
+    VaapiSurfaceFfmpeg(std::shared_ptr<VaapiSurface> surface,
+                       std::shared_ptr<VaapiContext> context)
         : VaapiSurfaceProxy(surface, context), _pic_num(0)
         { }
 
@@ -65,7 +65,7 @@ static inline VaapiSurfaceFfmpeg *vaapi_get_surface(const AVFrame *pic)
 
 /// VA context implementation for FFmpeg
 class VaapiContextFfmpeg : public vaapi_context {
-    boost::shared_ptr<VaapiContext> _context;
+    std::shared_ptr<VaapiContext> _context;
 
 public:
     VaapiContextFfmpeg(enum CODECID codec_id);
diff --git a/libmedia/ffmpeg/VideoInputFfmpeg.h b/libmedia/ffmpeg/VideoInputFfmpeg.h
index 84b970a..a1c88fd 100644
--- a/libmedia/ffmpeg/VideoInputFfmpeg.h
+++ b/libmedia/ffmpeg/VideoInputFfmpeg.h
@@ -21,7 +21,7 @@
 #define GNASH_VIDEOINPUTFFMPEG_H
 
 #include <vector>
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include <vector>
 #include "VideoInput.h"
 
diff --git a/libmedia/gst/AudioDecoderGst.cpp b/libmedia/gst/AudioDecoderGst.cpp
index b930d08..ea275c9 100644
--- a/libmedia/gst/AudioDecoderGst.cpp
+++ b/libmedia/gst/AudioDecoderGst.cpp
@@ -32,7 +32,7 @@ namespace gst {
 AudioDecoderGst::AudioDecoderGst(SoundInfo& info)
 {
     // init GStreamer. TODO: what about doing this in MediaHandlerGst ctor?
-    gst_init (NULL, NULL);
+    gst_init (nullptr, nullptr);
 
     GstCaps* srccaps = gst_caps_new_simple ("audio/mpeg",
 		"mpegversion", G_TYPE_INT, 1,
@@ -48,9 +48,9 @@ AudioDecoderGst::AudioDecoderGst(SoundInfo& info)
 AudioDecoderGst::AudioDecoderGst(const AudioInfo& info)
 {
     // init GStreamer. TODO: what about doing this in MediaHandlerGst ctor?
-    gst_init (NULL, NULL);
+    gst_init (nullptr, nullptr);
 
-    GstCaps* srccaps=0;
+    GstCaps* srccaps=nullptr;
 
     if (info.type == CODEC_TYPE_FLASH && info.codec == AUDIO_CODEC_MP3)
     {
@@ -208,7 +208,7 @@ void AudioDecoderGst::setup(GstCaps* srccaps)
 static void
 buf_add(gpointer buf, gpointer data)
 {
-    boost::uint32_t* total = (boost::uint32_t*) data;
+    std::uint32_t* total = (std::uint32_t*) data;
 
     GstBuffer* buffer = (GstBuffer*) buf;
     *total += GST_BUFFER_SIZE(buffer);
@@ -216,8 +216,8 @@ buf_add(gpointer buf, gpointer data)
 
 
 /* private */
-boost::uint8_t* 
-AudioDecoderGst::pullBuffers(boost::uint32_t&  outputSize)
+std::uint8_t*
+AudioDecoderGst::pullBuffers(std::uint32_t&  outputSize)
 {
     outputSize = 0;
     
@@ -225,12 +225,12 @@ AudioDecoderGst::pullBuffers(boost::uint32_t&  outputSize)
   
     if (!outputSize) {
         log_debug(_("Pushed data, but there's nothing to pull (yet)"));
-        return 0;   
+        return nullptr;
     }
     
-    boost::uint8_t* rbuf = new boost::uint8_t[outputSize];
+    std::uint8_t* rbuf = new std::uint8_t[outputSize];
     
-    boost::uint8_t* ptr = rbuf;
+    std::uint8_t* ptr = rbuf;
     
     while (true) {
     
@@ -248,10 +248,10 @@ AudioDecoderGst::pullBuffers(boost::uint32_t&  outputSize)
     return rbuf;    
 }
 
-boost::uint8_t*
-AudioDecoderGst::decode(const boost::uint8_t* input, boost::uint32_t inputSize,
-                        boost::uint32_t& outputSize,
-                        boost::uint32_t& decodedData)
+std::uint8_t*
+AudioDecoderGst::decode(const std::uint8_t* input, std::uint32_t inputSize,
+                        std::uint32_t& outputSize,
+                        std::uint32_t& decodedData)
 {
     outputSize = decodedData = 0;
 
@@ -261,7 +261,7 @@ AudioDecoderGst::decode(const boost::uint8_t* input, boost::uint32_t inputSize,
     bool success = swfdec_gst_decoder_push(&_decoder, gstbuf);
     if (!success) {
         log_error(_("AudioDecoderGst: buffer push failed."));
-        return 0;
+        return nullptr;
     }
 
     decodedData = inputSize;
@@ -269,8 +269,8 @@ AudioDecoderGst::decode(const boost::uint8_t* input, boost::uint32_t inputSize,
     return pullBuffers(outputSize);
 }
 
-boost::uint8_t*
-AudioDecoderGst::decode(const EncodedAudioFrame& ef, boost::uint32_t& outputSize)
+std::uint8_t*
+AudioDecoderGst::decode(const EncodedAudioFrame& ef, std::uint32_t& outputSize)
 {
     outputSize = 0;
     
@@ -289,7 +289,7 @@ AudioDecoderGst::decode(const EncodedAudioFrame& ef, boost::uint32_t& outputSize
     bool success = swfdec_gst_decoder_push(&_decoder, gstbuf);
     if (!success) {
         log_error(_("AudioDecoderGst: buffer push failed."));
-        return 0;
+        return nullptr;
     }
 
     return pullBuffers(outputSize);
diff --git a/libmedia/gst/AudioDecoderGst.h b/libmedia/gst/AudioDecoderGst.h
index f527611..4ff299c 100644
--- a/libmedia/gst/AudioDecoderGst.h
+++ b/libmedia/gst/AudioDecoderGst.h
@@ -49,13 +49,13 @@ public:
 
     ~AudioDecoderGst();
 
-    boost::uint8_t* decode(const boost::uint8_t* input, boost::uint32_t inputSize,
-                           boost::uint32_t& outputSize, boost::uint32_t& decodedData);
-    boost::uint8_t* decode(const EncodedAudioFrame& ef, boost::uint32_t& outputSize);
+    std::uint8_t* decode(const std::uint8_t* input, std::uint32_t inputSize,
+                           std::uint32_t& outputSize, std::uint32_t& decodedData);
+    std::uint8_t* decode(const EncodedAudioFrame& ef, std::uint32_t& outputSize);
 
 private:
 
-    boost::uint8_t* pullBuffers(boost::uint32_t&  outputSize);
+    std::uint8_t* pullBuffers(std::uint32_t&  outputSize);
 
     void setup(GstCaps* caps);
 
diff --git a/libmedia/gst/AudioInputGst.cpp b/libmedia/gst/AudioInputGst.cpp
index 7f8887b..0f5217e 100644
--- a/libmedia/gst/AudioInputGst.cpp
+++ b/libmedia/gst/AudioInputGst.cpp
@@ -42,24 +42,24 @@ namespace media {
 namespace gst {
 
 GnashAudio::GnashAudio() {
-    _element = NULL;
-    _devLocation = NULL;
-    _gstreamerSrc = NULL;
-    _productName = NULL;
+    _element = nullptr;
+    _devLocation = nullptr;
+    _gstreamerSrc = nullptr;
+    _productName = nullptr;
 }
 
 GnashAudioPrivate::GnashAudioPrivate() {
-    audioSource = NULL;
-    audioEnc = NULL;
-    _audioDevice = NULL;
-    _deviceName = NULL;
-    _pipeline = NULL;
-    _audioMainBin = NULL;
-    _audioPlaybackBin = NULL;
-    _audioSourceBin = NULL;
-    _audioSaveBin = NULL;
+    audioSource = nullptr;
+    audioEnc = nullptr;
+    _audioDevice = nullptr;
+    _deviceName = nullptr;
+    _pipeline = nullptr;
+    _audioMainBin = nullptr;
+    _audioPlaybackBin = nullptr;
+    _audioSourceBin = nullptr;
+    _audioSaveBin = nullptr;
     _pipelineIsPlaying = false;
-    _mux = NULL;
+    _mux = nullptr;
 }
 
 AudioInputGst::AudioInputGst() 
@@ -73,7 +73,7 @@ AudioInputGst::AudioInputGst()
     _silenceTimeout(2000), 
     _useEchoSuppression(false)
 {
-    gst_init(NULL,NULL);
+    gst_init(nullptr,nullptr);
     
     findAudioDevs();
     
@@ -98,7 +98,7 @@ AudioInputGst::findAudioDevs()
     GstElement *element;
     element = gst_element_factory_make ("audiotestsrc", "audtestsrc");
     
-    if (element == NULL) {
+    if (element == nullptr) {
         log_error(_("%s: Could not create audio test source"), __FUNCTION__);
 	return;
     } else {
@@ -112,7 +112,7 @@ AudioInputGst::findAudioDevs()
     //detect pulse audio sources
     GstPropertyProbe *probe;
     GValueArray *devarr;
-    element = NULL;
+    element = nullptr;
 
     element = gst_element_factory_make ("pulsesrc", "pulsesrc");
     if ( ! element ) {
@@ -126,9 +126,9 @@ AudioInputGst::findAudioDevs()
         return;
     }
     devarr = gst_property_probe_probe_and_get_values_name (probe, "device");
-    for (size_t i = 0; devarr != NULL && i < devarr->n_values; ++i) {
+    for (size_t i = 0; devarr != nullptr && i < devarr->n_values; ++i) {
         GValue *val;
-        gchar *dev_name = NULL;
+        gchar *dev_name = nullptr;
         
         val = g_value_array_get_nth (devarr, i);
         g_object_set (element, "device", g_value_get_string (val), NULL);
@@ -136,7 +136,7 @@ AudioInputGst::findAudioDevs()
         g_object_get (element, "device-name", &dev_name, NULL);
         gst_element_set_state (element, GST_STATE_NULL);
         if ((strcmp(dev_name, "null") == 0) ||
-                (std::strstr(dev_name, "Monitor") != NULL)) {
+                (std::strstr(dev_name, "Monitor") != nullptr)) {
             log_debug("No pulse audio input devices.");
         }
         else { 
@@ -195,7 +195,7 @@ AudioInputGst::getSelectedCaps(int devselect)
 
     GstElement *pipeline;
     gchar *command;
-    GError *error = NULL;
+    GError *error = nullptr;
     GstStateChangeReturn return_val;
     GstBus *bus;
     GstMessage *message;
@@ -206,11 +206,11 @@ AudioInputGst::getSelectedCaps(int devselect)
     command = g_strdup_printf ("%s name=src device=%s ! fakesink",
         data_struct->getGstreamerSrc(), data_struct->getDevLocation());
     pipeline = gst_parse_launch(command, &error);
-    if ((pipeline != NULL) && (error == NULL)) {
+    if ((pipeline != nullptr) && (error == nullptr)) {
         //Wait at most 5 seconds for the pipeline to start playing
         gst_element_set_state (pipeline, GST_STATE_PLAYING);
         return_val = 
-            gst_element_get_state (pipeline, NULL, NULL, 5 * GST_SECOND);
+            gst_element_get_state (pipeline, nullptr, nullptr, 5 * GST_SECOND);
         
         //errors on bus?
         bus = gst_element_get_bus (pipeline);
@@ -223,7 +223,7 @@ AudioInputGst::getSelectedCaps(int devselect)
                 __FUNCTION__);
         }
         //if everything above worked properly, begin probing for values
-        if ((return_val == GST_STATE_CHANGE_SUCCESS) && (message == NULL)) {
+        if ((return_val == GST_STATE_CHANGE_SUCCESS) && (message == nullptr)) {
             GstElement *src;
             GstPad *pad;
             GstCaps *caps;
@@ -273,7 +273,7 @@ AudioInputGst::transferToPrivate(int devselect) {
         exit (EXIT_FAILURE);
     }
     GnashAudioPrivate *audio = new GnashAudioPrivate;
-    if (audio != NULL) {
+    if (audio != nullptr) {
         audio->setAudioDevice(_audioVect[devselect]);
         audio->setDeviceName(_audioVect[devselect]->getProductName());
         _globalAudio = audio;
@@ -286,8 +286,8 @@ AudioInputGst::transferToPrivate(int devselect) {
 gboolean
 AudioInputGst::audioChangeSourceBin(GnashAudioPrivate *audio)
 {
-    GError *error = NULL;
-    gchar *command = NULL;
+    GError *error = nullptr;
+    gchar *command = nullptr;
     
     if (audio->_pipelineIsPlaying == true) {
         audioStop(audio);
@@ -295,10 +295,10 @@ AudioInputGst::audioChangeSourceBin(GnashAudioPrivate *audio)
     
     //delete the old source bin if necessary (please don't delete the == NULL
     //here as it breaks things.)
-    if (!(GST_ELEMENT_PARENT(audio->_audioSourceBin) == NULL)) {
+    if (!(GST_ELEMENT_PARENT(audio->_audioSourceBin) == nullptr)) {
         gst_bin_remove(GST_BIN(audio->_audioMainBin),
                 audio->_audioSourceBin);
-        audio->_audioSourceBin = NULL;
+        audio->_audioSourceBin = nullptr;
     }
     
     if (strcmp(audio->_deviceName, "audiotest") == 0) {
@@ -322,7 +322,7 @@ AudioInputGst::audioChangeSourceBin(GnashAudioPrivate *audio)
     
     audio->_audioSourceBin = gst_parse_bin_from_description(command, TRUE,
                                 &error);
-    if (audio->_audioSourceBin == NULL) {
+    if (audio->_audioSourceBin == nullptr) {
         log_error(_("%s: Creation of the audioSourceBin failed"),
             __FUNCTION__);
         log_error(_("the error was %s"), error->message);
@@ -356,8 +356,8 @@ AudioInputGst::audioChangeSourceBin(GnashAudioPrivate *audio)
 gboolean
 AudioInputGst::audioCreateSourceBin(GnashAudioPrivate *audio) 
 {
-    GError *error = NULL;
-    gchar *command = NULL;
+    GError *error = nullptr;
+    gchar *command = nullptr;
     if(strcmp(audio->_deviceName, "audiotest") == 0) {
         log_debug("%s: You don't have any mics chosen, using audiotestsrc",
             __FUNCTION__);
@@ -378,7 +378,7 @@ AudioInputGst::audioCreateSourceBin(GnashAudioPrivate *audio)
     
     audio->_audioSourceBin = gst_parse_bin_from_description(command, TRUE,
                                 &error);
-    if (audio->_audioSourceBin == NULL) {
+    if (audio->_audioSourceBin == nullptr) {
         log_error(_("%s: Creation of the audioSourceBin failed"),
             __FUNCTION__);
         log_error(_("the error was %s"), error->message);
@@ -408,16 +408,16 @@ AudioInputGst::audioCreateMainBin(GnashAudioPrivate *audio)
         log_error(_("%s: audioCreateSourceBin failed!"), __FUNCTION__);
         return false;
     }
-    if ((tee = gst_element_factory_make ("tee", "tee")) == NULL) {
+    if ((tee = gst_element_factory_make ("tee", "tee")) == nullptr) {
         log_error(_("%s: problem creating tee element"), __FUNCTION__);
         return false;
     }
-    if ((saveQueue = gst_element_factory_make("queue", "saveQueue")) == NULL) {
+    if ((saveQueue = gst_element_factory_make("queue", "saveQueue")) == nullptr) {
         log_error(_("%s: problem creating save_queue element"), __FUNCTION__);
         return false;
     }
     if ((audioPlaybackQueue = 
-        gst_element_factory_make("queue", "audioPlaybackQueue")) == NULL) {
+        gst_element_factory_make("queue", "audioPlaybackQueue")) == nullptr) {
         log_error(_("%s: problem creating audioPlaybackQueue element"), __FUNCTION__);
         return false;
     }
@@ -443,7 +443,7 @@ AudioInputGst::audioCreateMainBin(GnashAudioPrivate *audio)
    
     //add ghostpad to saveQueue (allows connections between bins)
     pad = gst_element_get_pad (saveQueue, "src");
-    if (pad == NULL) {
+    if (pad == nullptr) {
         log_error(_("%s: couldn't get saveQueueSrcPad"), __FUNCTION__);
         return false;
     }
@@ -453,7 +453,7 @@ AudioInputGst::audioCreateMainBin(GnashAudioPrivate *audio)
     
     //add ghostpad to video_display_queue
     pad = gst_element_get_pad (audioPlaybackQueue, "src");
-    if (pad == NULL) {
+    if (pad == nullptr) {
         log_error(_("%s: couldn't get audioPlaybackQueue"), __FUNCTION__);
         return false;
     }
@@ -479,7 +479,7 @@ AudioInputGst::audioCreatePlaybackBin(GnashAudioPrivate *audio)
     
     audio->_audioPlaybackBin = gst_bin_new("playbackBin");
     
-    if ((autosink = gst_element_factory_make ("autoaudiosink", "audiosink")) == NULL) {
+    if ((autosink = gst_element_factory_make ("autoaudiosink", "audiosink")) == nullptr) {
         log_error(_("%s: There was a problem making the audiosink!"), __FUNCTION__);
          return false;
     }
@@ -498,7 +498,7 @@ AudioInputGst::audioCreatePlaybackBin(GnashAudioPrivate *audio)
 gboolean
 AudioInputGst::makeAudioSourcePlaybackLink(GnashAudioPrivate *audio) 
 {
-    if (gst_bin_get_by_name(GST_BIN(audio->_pipeline), "playbackBin") == NULL) {
+    if (gst_bin_get_by_name(GST_BIN(audio->_pipeline), "playbackBin") == nullptr) {
         gst_object_ref(audio->_audioPlaybackBin);
         gst_bin_add(GST_BIN(audio->_pipeline), audio->_audioPlaybackBin);
     }
@@ -597,19 +597,19 @@ AudioInputGst::audioCreateSaveBin(GnashAudioPrivate* audio)
     
     audio->_audioSaveBin = gst_bin_new ("audioSaveBin");
     
-    if ((audioConvert = gst_element_factory_make("audioconvert", "audio_convert")) == NULL) {
+    if ((audioConvert = gst_element_factory_make("audioconvert", "audio_convert")) == nullptr) {
         log_error(_("%s: Couldn't make audioconvert element"), __FUNCTION__);
         return false;
     }
-    if ((audioEnc = gst_element_factory_make("vorbisenc", "audio_enc")) == NULL){
+    if ((audioEnc = gst_element_factory_make("vorbisenc", "audio_enc")) == nullptr){
         log_error(_("%s: Couldn't make vorbisenc element"), __FUNCTION__);
         return false;
     }
-    if ((audio->_mux = gst_element_factory_make("oggmux", "mux")) == NULL) {
+    if ((audio->_mux = gst_element_factory_make("oggmux", "mux")) == nullptr) {
         log_error(_("%s: Couldn't make oggmux element"), __FUNCTION__);
         return false;
     }
-    if ((filesink = gst_element_factory_make("filesink", "filesink")) == NULL) {
+    if ((filesink = gst_element_factory_make("filesink", "filesink")) == nullptr) {
         log_error(_("%s: Couldn't make filesink element"), __FUNCTION__);
         return false;
     } else {
@@ -639,7 +639,7 @@ AudioInputGst::audioCreateSaveBin(GnashAudioPrivate* audio)
 gboolean
 AudioInputGst::makeAudioSourceSaveLink (GnashAudioPrivate* audio) 
 {
-    if (gst_bin_get_by_name(GST_BIN(audio->_pipeline), "audioSaveBin") == NULL) {
+    if (gst_bin_get_by_name(GST_BIN(audio->_pipeline), "audioSaveBin") == nullptr) {
         gst_object_ref(audio->_audioSaveBin);
         gst_bin_add(GST_BIN(audio->_pipeline), audio->_audioSaveBin);
     }
diff --git a/libmedia/gst/AudioInputGst.h b/libmedia/gst/AudioInputGst.h
index e7fb608..784fb1c 100644
--- a/libmedia/gst/AudioInputGst.h
+++ b/libmedia/gst/AudioInputGst.h
@@ -23,7 +23,7 @@
 #include "gst/gst.h"
 #include "AudioInput.h"
 #include <string>
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include <vector>
 #include <cassert>
 
diff --git a/libmedia/gst/GstUtil.cpp b/libmedia/gst/GstUtil.cpp
index 8fced8a..580bc11 100644
--- a/libmedia/gst/GstUtil.cpp
+++ b/libmedia/gst/GstUtil.cpp
@@ -58,8 +58,8 @@ GstElement* GstUtil::get_audiosink_element()
     
     if(sAudioSink.find('!') != std::string::npos) //Found a non-trivial pipeline - bin it
     {
-        element = gst_parse_bin_from_description(sAudioSink.c_str(), true, NULL);
-        if(element != NULL)
+        element = gst_parse_bin_from_description(sAudioSink.c_str(), true, nullptr);
+        if(element != nullptr)
         {
            std::ostringstream o;
            o << numGnashRcSinks++;
@@ -68,20 +68,20 @@ GstElement* GstUtil::get_audiosink_element()
     }
     else //Found a trivial pipeline that doesn't need a bin
     {
-        element = gst_element_factory_make(sAudioSink.c_str(), NULL);
+        element = gst_element_factory_make(sAudioSink.c_str(), nullptr);
     }
     
     if(!element)
     {
         log_debug(_("Unable to retrieve a valid audio sink from ~/.gnashrc"));
         
-        element = gst_element_factory_make("autoaudiosink", NULL);
+        element = gst_element_factory_make("autoaudiosink", nullptr);
         
         if(!element)
         {
             log_debug(_("Unable to retrieve a valid audio sink from autoaudiosink"));
             
-            element = gst_element_factory_make("gconfaudiosink", NULL);
+            element = gst_element_factory_make("gconfaudiosink", nullptr);
             
             if(!element)
                 log_error(_("Unable to retrieve a valid audio sink from gconfaudiosink\n%s"),
@@ -124,9 +124,9 @@ GstUtil::check_missing_plugins(GstCaps* caps)
         return false;
     }
 
-    char* details[] =  { detail, 0 };
+    char* details[] =  { detail, nullptr };
 
-    GstInstallPluginsReturn ret = gst_install_plugins_sync(details, NULL);
+    GstInstallPluginsReturn ret = gst_install_plugins_sync(details, nullptr);
     g_free(details[0]);
 
     // FIXME: what about partial success?
diff --git a/libmedia/gst/MediaHandlerGst.cpp b/libmedia/gst/MediaHandlerGst.cpp
index 3c888bb..21613eb 100644
--- a/libmedia/gst/MediaHandlerGst.cpp
+++ b/libmedia/gst/MediaHandlerGst.cpp
@@ -29,6 +29,7 @@
 #include "AudioInputGst.h"
 #include "FLVParser.h"
 #include "MediaParser.h"
+#include "GnashFactory.h"
 
 #ifdef DECODING_SPEEX
 #include "AudioDecoderSpeex.h"
@@ -53,20 +54,20 @@ MediaHandlerGst::description() const
     return s.str();
 }
 
-std::auto_ptr<MediaParser>
-MediaHandlerGst::createMediaParser(std::auto_ptr<IOChannel> stream)
+std::unique_ptr<MediaParser>
+MediaHandlerGst::createMediaParser(std::unique_ptr<IOChannel> stream)
 {
-    std::auto_ptr<MediaParser> parser;
+    std::unique_ptr<MediaParser> parser;
 
     try
     {
         if (isFLV(*stream))
         {
-            parser.reset(new FLVParser(stream));
+            parser.reset(new FLVParser(std::move(stream)));
         }
         else
         {
-            parser.reset(new MediaParserGst(stream));
+            parser.reset(new MediaParserGst(std::move(stream)));
         }
     }
     catch (GnashException& ex)
@@ -79,7 +80,7 @@ MediaHandlerGst::createMediaParser(std::auto_ptr<IOChannel> stream)
     return parser;
 }
 
-std::auto_ptr<VideoDecoder>
+std::unique_ptr<VideoDecoder>
 MediaHandlerGst::createVideoDecoder(const VideoInfo& info)
 {
     if (info.type != CODEC_TYPE_FLASH) {
@@ -88,16 +89,16 @@ MediaHandlerGst::createVideoDecoder(const VideoInfo& info)
 
         if (!extrainfo) {
             log_error(_("Wrong arguments given to GST VideoDecoder"));
-            return std::auto_ptr<VideoDecoder>();
+            return std::unique_ptr<VideoDecoder>();
         }
-        return std::auto_ptr<VideoDecoder>(
+        return std::unique_ptr<VideoDecoder>(
             new VideoDecoderGst(extrainfo->caps));
     }
     videoCodecType format = static_cast<videoCodecType>(info.codec);
     int width = info.width;
     int height = info.height;
 
-    boost::uint8_t* extradata = 0;
+    std::uint8_t* extradata = nullptr;
     size_t datasize = 0;
 
     ExtraVideoInfoFlv* extrainfo = dynamic_cast<ExtraVideoInfoFlv*>(info.extra.get());
@@ -106,14 +107,14 @@ MediaHandlerGst::createVideoDecoder(const VideoInfo& info)
         datasize = extrainfo->size;
     }
 
-    std::auto_ptr<VideoDecoder> ret( new VideoDecoderGst(format, width, height, extradata, datasize) );
+    std::unique_ptr<VideoDecoder> ret( new VideoDecoderGst(format, width, height, extradata, datasize) );
     return ret;
 }
 
-std::auto_ptr<AudioDecoder>
+std::unique_ptr<AudioDecoder>
 MediaHandlerGst::createAudioDecoder(const AudioInfo& info)
 {
-    std::auto_ptr<AudioDecoder> ret;
+    std::unique_ptr<AudioDecoder> ret;
 
 #ifdef DECODING_SPEEX
     if (info.codec == AUDIO_CODEC_SPEEX) {
@@ -145,10 +146,10 @@ MediaHandlerGst::createAudioDecoder(const AudioInfo& info)
     return ret;
 }
 
-std::auto_ptr<VideoConverter>
+std::unique_ptr<VideoConverter>
 MediaHandlerGst::createVideoConverter(ImgBuf::Type4CC srcFormat, ImgBuf::Type4CC dstFormat)
 {
-    std::auto_ptr<VideoConverter> converter;
+    std::unique_ptr<VideoConverter> converter;
 
     try
     {
@@ -185,12 +186,6 @@ MediaHandlerGst::cameraNames(std::vector<std::string>& names) const
     VideoInputGst::getNames(names);
 }
 
-#ifdef REGISTER_MEDIA_HANDLERS
-namespace {
-    MediaFactory::RegisterHandler<MediaHandlerGst> reg("gst");
-}
-#endif
-
 } // gnash.media.gst namespace
 } // gnash.media namespace 
 } // gnash namespace
diff --git a/libmedia/gst/MediaHandlerGst.h b/libmedia/gst/MediaHandlerGst.h
index c03e0df..85e2fd0 100644
--- a/libmedia/gst/MediaHandlerGst.h
+++ b/libmedia/gst/MediaHandlerGst.h
@@ -45,16 +45,16 @@ public:
 
     virtual std::string description() const;
 
-	virtual std::auto_ptr<MediaParser>
-        createMediaParser(std::auto_ptr<IOChannel> stream);
+	virtual std::unique_ptr<MediaParser>
+        createMediaParser(std::unique_ptr<IOChannel> stream);
 
-	virtual std::auto_ptr<VideoDecoder>
+	virtual std::unique_ptr<VideoDecoder>
         createVideoDecoder(const VideoInfo& info);
 
-	virtual std::auto_ptr<AudioDecoder>
+	virtual std::unique_ptr<AudioDecoder>
         createAudioDecoder(const AudioInfo& info);
 	
-	virtual std::auto_ptr<VideoConverter>
+	virtual std::unique_ptr<VideoConverter>
         createVideoConverter(ImgBuf::Type4CC srcFormat,
                 ImgBuf::Type4CC dstFormat);
     
diff --git a/libmedia/gst/MediaParserGst.cpp b/libmedia/gst/MediaParserGst.cpp
index be34921..cce8f51 100644
--- a/libmedia/gst/MediaParserGst.cpp
+++ b/libmedia/gst/MediaParserGst.cpp
@@ -28,6 +28,7 @@
 #include "swfdec_codec_gst.h"
 #include <iostream>
 #include <fstream>
+#include <mutex>
 
 #define PUSHBUF_SIZE 1024
 
@@ -38,22 +39,22 @@ namespace media {
 namespace gst {
 
 
-MediaParserGst::MediaParserGst(std::auto_ptr<IOChannel> stream)
-    : MediaParser(stream),
-      _bin(NULL),
-      _srcpad(NULL),
-      _audiosink(NULL),
-      _videosink(NULL),
+MediaParserGst::MediaParserGst(std::unique_ptr<IOChannel> stream)
+    : MediaParser(std::move(stream)),
+      _bin(nullptr),
+      _srcpad(nullptr),
+      _audiosink(nullptr),
+      _videosink(nullptr),
       _demux_probe_ended(false)
 {
-    gst_init (NULL, NULL);
+    gst_init (nullptr, nullptr);
 
     _bin = gst_bin_new ("NULL");
     if (!_bin) {
         throw GnashException(_("MediaParserGst couldn't create a bin"));
     }
 
-    GstElement* typefind = gst_element_factory_make("typefind", NULL);
+    GstElement* typefind = gst_element_factory_make("typefind", nullptr);
     if (!typefind) {
         throw GnashException(_("MediaParserGst couldn't create a typefind element."));
     }
@@ -105,7 +106,7 @@ MediaParserGst::~MediaParserGst()
 }
 
 bool
-MediaParserGst::seek(boost::uint32_t& milliseconds)
+MediaParserGst::seek(std::uint32_t& milliseconds)
 {
     return gst_element_seek_simple(_bin, GST_FORMAT_TIME, 
               GstSeekFlags(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT),
@@ -121,7 +122,7 @@ MediaParserGst::getId3Info() const
 bool
 MediaParserGst::parseNextChunk()
 {
-    boost::mutex::scoped_lock streamLock(_streamMutex);
+    std::lock_guard<std::mutex> streamLock(_streamMutex);
 
     if (emitEncodedFrames()) {
         return true;
@@ -137,10 +138,7 @@ MediaParserGst::parseNextChunk()
 
     pushGstBuffer();
 
-    {
-        boost::mutex::scoped_lock lock(_bytesLoadedMutex);
-        _bytesLoaded = _stream->tell();
-    }
+    _bytesLoaded = _stream->tell();
 
     emitEncodedFrames();
 
@@ -148,11 +146,10 @@ MediaParserGst::parseNextChunk()
 
 }
 
-boost::uint64_t
+std::uint64_t
 MediaParserGst::getBytesLoaded() const
 {
-    boost::mutex::scoped_lock lock(_bytesLoadedMutex);
-    return _bytesLoaded;
+    return _bytesLoaded.load();
 }
 
 bool
@@ -197,13 +194,13 @@ MediaParserGst::emitEncodedFrames()
 
     while (!_enc_audio_frames.empty()) {
         EncodedAudioFrame* frame = _enc_audio_frames.front();
-        pushEncodedAudioFrame(std::auto_ptr<EncodedAudioFrame>(frame));
+        pushEncodedAudioFrame(std::unique_ptr<EncodedAudioFrame>(frame));
        _enc_audio_frames.pop_front();
     }
     
     while (!_enc_video_frames.empty()) {
         EncodedVideoFrame* frame = _enc_video_frames.front();
-        pushEncodedVideoFrame(std::auto_ptr<EncodedVideoFrame>(frame));
+        pushEncodedVideoFrame(std::unique_ptr<EncodedVideoFrame>(frame));
        _enc_video_frames.pop_front();
     }
 
@@ -251,7 +248,7 @@ print_caps(GstCaps* caps)
 void
 MediaParserGst::link_to_fakesink(GstPad* pad)
 {
-    GstElement* fakesink = gst_element_factory_make("fakesink", NULL);
+    GstElement* fakesink = gst_element_factory_make("fakesink", nullptr);
     
     if (!fakesink) {
         throw MediaException(_("MediaParserGst Failed to create fakesink."));
@@ -380,7 +377,7 @@ void MediaParserGst::cb_pad_added(GstElement* /* element */, GstPad* new_pad,
     
     bool already_parsed = parsed || framed;
     
-    GstPad* final_pad = 0;
+    GstPad* final_pad = nullptr;
     
     if (already_parsed) {
         final_pad = new_pad;
@@ -396,7 +393,7 @@ void MediaParserGst::cb_pad_added(GstElement* /* element */, GstPad* new_pad,
             return;
         }
 
-        GstElement* parserel = gst_element_factory_create (parserfactory, NULL);
+        GstElement* parserel = gst_element_factory_create (parserfactory, nullptr);
         gst_object_unref (parserfactory);
         if (!parserel) {
             log_error(_("MediaParserGst: Failed to find a parser. We'll continue, "
@@ -523,7 +520,7 @@ MediaParserGst::cb_chain_func_video (GstPad *pad, GstBuffer *buffer)
         frame_num = GST_BUFFER_OFFSET(buffer);
     }
 
-    EncodedVideoFrame* frame = new EncodedVideoFrame(NULL, GST_BUFFER_SIZE(buffer), frame_num, timestamp);
+    EncodedVideoFrame* frame = new EncodedVideoFrame(nullptr, GST_BUFFER_SIZE(buffer), frame_num, timestamp);
 
     frame->extradata.reset(new EncodedExtraGstData(buffer));
     
diff --git a/libmedia/gst/MediaParserGst.h b/libmedia/gst/MediaParserGst.h
index a6e47d5..4c08419 100644
--- a/libmedia/gst/MediaParserGst.h
+++ b/libmedia/gst/MediaParserGst.h
@@ -21,11 +21,11 @@
 #define GNASH_MEDIAPARSER_GST_H
 
 #include <deque>
-#include <boost/scoped_array.hpp>
 #include <memory>
 #include <queue>
 #include <gst/gst.h>
 #include <boost/optional.hpp>
+#include <boost/utility.hpp> // noncopyable
 
 #include "MediaParser.h" // for inheritance
 #include "ClockTime.h"
@@ -95,7 +95,7 @@ public:
     }
 
 private:
-    boost::uint64_t _start_time;
+    std::uint64_t _start_time;
 };
 
 
@@ -109,18 +109,18 @@ public:
     //
     /// Can throw a MediaException if input format couldn't be detected
     ///
-    MediaParserGst(std::auto_ptr<IOChannel> stream);
+    MediaParserGst(std::unique_ptr<IOChannel> stream);
 
     ~MediaParserGst();
 
     // See dox in MediaParser.h
-    bool seek(boost::uint32_t&);
+    bool seek(std::uint32_t&);
 
     // See dox in MediaParser.h
     bool parseNextChunk();
 
     // See dox in MediaParser.h
-    virtual boost::uint64_t getBytesLoaded() const;
+    virtual std::uint64_t getBytesLoaded() const;
 
     virtual boost::optional<Id3Info> getId3Info() const;
 
diff --git a/libmedia/gst/VideoConverterGst.cpp b/libmedia/gst/VideoConverterGst.cpp
index d165b13..7778b4c 100644
--- a/libmedia/gst/VideoConverterGst.cpp
+++ b/libmedia/gst/VideoConverterGst.cpp
@@ -30,9 +30,9 @@ namespace gst {
 VideoConverterGst::VideoConverterGst(ImgBuf::Type4CC srcFormat, ImgBuf::Type4CC dstFormat)
     : VideoConverter(srcFormat, dstFormat)
 {
-    _decoder.bin = 0;
+    _decoder.bin = nullptr;
 
-    gst_init (NULL, NULL);
+    gst_init (nullptr, nullptr);
     
     GstElementFactory* colorspacefactory = gst_element_factory_find ("ffmpegcolorspace");
     if (!colorspacefactory) {
@@ -122,10 +122,10 @@ VideoConverterGst::~VideoConverterGst()
     }
 }
 
-std::auto_ptr<ImgBuf>
+std::unique_ptr<ImgBuf>
 VideoConverterGst::convert(const ImgBuf& src)
 {
-    std::auto_ptr<ImgBuf> ret;
+    std::unique_ptr<ImgBuf> ret;
     
     if (!init(src)) {
         return ret;  
@@ -133,7 +133,7 @@ VideoConverterGst::convert(const ImgBuf& src)
 
     GstBuffer* buffer = gst_buffer_new();
 
-    GST_BUFFER_DATA(buffer) = const_cast<boost::uint8_t*>(src.data);
+    GST_BUFFER_DATA(buffer) = const_cast<std::uint8_t*>(src.data);
     GST_BUFFER_SIZE(buffer) = src.size;
     GST_BUFFER_FLAG_SET(buffer, GST_BUFFER_FLAG_READONLY);
 
@@ -153,7 +153,7 @@ VideoConverterGst::convert(const ImgBuf& src)
     ret.reset(new ImgBuf(_dst_fmt, GST_BUFFER_DATA(retbuffer),
                          GST_BUFFER_SIZE(retbuffer), src.width, src.height));
 
-    GST_BUFFER_MALLOCDATA(retbuffer) = 0; // don't free
+    GST_BUFFER_MALLOCDATA(retbuffer) = nullptr; // don't free
     gst_buffer_unref(retbuffer);
     
     ret->dealloc = g_free;
diff --git a/libmedia/gst/VideoConverterGst.h b/libmedia/gst/VideoConverterGst.h
index 2b63725..e4e0f7e 100644
--- a/libmedia/gst/VideoConverterGst.h
+++ b/libmedia/gst/VideoConverterGst.h
@@ -38,7 +38,7 @@ public:
     
     ~VideoConverterGst();
   
-    std::auto_ptr<ImgBuf> convert(const ImgBuf& src);
+    std::unique_ptr<ImgBuf> convert(const ImgBuf& src);
     
     bool init(const ImgBuf& src);
   
diff --git a/libmedia/gst/VideoDecoderGst.cpp b/libmedia/gst/VideoDecoderGst.cpp
index 6f2bca3..27d6a59 100644
--- a/libmedia/gst/VideoDecoderGst.cpp
+++ b/libmedia/gst/VideoDecoderGst.cpp
@@ -33,7 +33,7 @@ VideoDecoderGst::VideoDecoderGst(GstCaps* caps)
     _height(0)
 {
     // init GStreamer. TODO: what about doing this in MediaHandlerGst ctor?
-    gst_init (NULL, NULL);
+    gst_init (nullptr, nullptr);
 
     setup(caps);
 }
@@ -53,20 +53,20 @@ VideoDecoderGst::height() const
 // TODO: either use width and height or remove them!
 VideoDecoderGst::VideoDecoderGst(videoCodecType codec_type,
         int /*width*/, int /*height*/,
-        const boost::uint8_t* extradata, size_t extradatasize)
+        const std::uint8_t* extradata, size_t extradatasize)
     :
     _width(0),
     _height(0)
 {
     // init GStreamer. TODO: what about doing this in MediaHandlerGst ctor?
-    gst_init (NULL, NULL);
+    gst_init (nullptr, nullptr);
 
   GstCaps* caps;  
   switch (codec_type) {
     case VIDEO_CODEC_H264:
     {
       caps = gst_caps_new_simple ("video/x-h264",
-                                      NULL);
+                                      nullptr);
 
       if (extradata && extradatasize) {
 
@@ -78,20 +78,20 @@ VideoDecoderGst::VideoDecoderGst(videoCodecType codec_type,
     } 
     case VIDEO_CODEC_H263:
       caps = gst_caps_new_simple ("video/x-flash-video",
-                                      NULL);
+                                      nullptr);
       break;
     case VIDEO_CODEC_VP6:
       caps = gst_caps_new_simple ("video/x-vp6-flash",
-                                      NULL);
+                                      nullptr);
       break;
     case VIDEO_CODEC_VP6A:
       caps = gst_caps_new_simple ("video/x-vp6-alpha",
-                                      NULL);
+                                      nullptr);
       break;      
     case VIDEO_CODEC_SCREENVIDEO:
     case VIDEO_CODEC_SCREENVIDEO2:
       caps = gst_caps_new_simple ("video/x-flash-screen",
-                                      NULL);
+                                      nullptr);
       break;
     case NO_VIDEO_CODEC:
       throw MediaException(_("Video codec is zero.  Streaming video expected later."));
@@ -177,7 +177,7 @@ VideoDecoderGst::push(const EncodedVideoFrame& frame)
     } else {
         buffer = gst_buffer_new();
 
-        GST_BUFFER_DATA(buffer) = const_cast<boost::uint8_t*>(frame.data());
+        GST_BUFFER_DATA(buffer) = const_cast<std::uint8_t*>(frame.data());
         GST_BUFFER_SIZE(buffer) = frame.dataSize();
         GST_BUFFER_OFFSET(buffer) = frame.frameNum();
         GST_BUFFER_TIMESTAMP(buffer) = GST_CLOCK_TIME_NONE;
@@ -191,13 +191,13 @@ VideoDecoderGst::push(const EncodedVideoFrame& frame)
 }
   
 
-std::auto_ptr<image::GnashImage>
+std::unique_ptr<image::GnashImage>
 VideoDecoderGst::pop()
 {
     GstBuffer * buffer = swfdec_gst_decoder_pull (&_decoder);
 
     if (!buffer) {
-        return std::auto_ptr<image::GnashImage>();
+        return std::unique_ptr<image::GnashImage>();
     }
   
     GstCaps* caps = gst_buffer_get_caps(buffer);
@@ -211,7 +211,7 @@ VideoDecoderGst::pop()
 
     gst_caps_unref(caps);
   
-    std::auto_ptr<image::GnashImage> ret(new gnashGstBuffer(buffer, _width, _height));
+    std::unique_ptr<image::GnashImage> ret(new gnashGstBuffer(buffer, _width, _height));
   
     return ret;
 }
diff --git a/libmedia/gst/VideoDecoderGst.h b/libmedia/gst/VideoDecoderGst.h
index 76759a4..193a309 100644
--- a/libmedia/gst/VideoDecoderGst.h
+++ b/libmedia/gst/VideoDecoderGst.h
@@ -36,12 +36,12 @@ namespace gnash {
 namespace media {
 namespace gst {
 
-// Convenience wrapper for GstBuffer. Intended to be wrapped in an auto_ptr.
+// Convenience wrapper for GstBuffer. Intended to be wrapped in an unique_ptr.
 class gnashGstBuffer : public image::ImageRGB
 {
 public:
   gnashGstBuffer(GstBuffer* buf, int width, int height)
-  : image::ImageRGB(NULL, width, height),
+  : image::ImageRGB(nullptr, width, height),
     _buffer(buf)
   {}
   
@@ -74,13 +74,13 @@ class DSOEXPORT VideoDecoderGst : public VideoDecoder
 {
 public:
     VideoDecoderGst(videoCodecType codec_type, int width, int height,
-                    const boost::uint8_t* extradata, size_t extradatasize);
+                    const std::uint8_t* extradata, size_t extradatasize);
     VideoDecoderGst(GstCaps* caps);
     ~VideoDecoderGst();
 
     void push(const EncodedVideoFrame& buffer);
 
-    std::auto_ptr<image::GnashImage> pop();
+    std::unique_ptr<image::GnashImage> pop();
   
     bool peek();
 
diff --git a/libmedia/gst/VideoInputGst.cpp b/libmedia/gst/VideoInputGst.cpp
index 113d92a..86bbf49 100644
--- a/libmedia/gst/VideoInputGst.cpp
+++ b/libmedia/gst/VideoInputGst.cpp
@@ -277,14 +277,13 @@ void
 VideoInputGst::getNames(std::vector<std::string>& names)
 {
     // Make sure gst is initialized
-    gst_init(NULL, NULL);
+    gst_init(nullptr, nullptr);
     
     std::vector<GnashWebcam*> cams;
     // Check for devices
     findVidDevs(cams);
     
-    for (size_t i = 0; i < cams.size(); ++i) {
-        GnashWebcam* cam = cams[i];
+    for (GnashWebcam* cam : cams) {
         if (cam) names.push_back(cam->getProductName());
     }
 }
@@ -305,7 +304,7 @@ VideoInputGst::VideoInputGst()
     _muted(true),
     _quality(0)
 {
-    gst_init(NULL,NULL);
+    gst_init(nullptr,nullptr);
     
     // TODO: there is really no need to store all the cameras, as a
     // VideoInput class should correspond to one camera.
@@ -365,7 +364,7 @@ VideoInputGst::findVidDevs(std::vector<GnashWebcam*>& cameraList)
     GstElement *element;
     element = gst_element_factory_make ("videotestsrc", "vidtestsrc");
     
-    if (element == NULL) {
+    if (element == nullptr) {
         log_error(_("%s: Could not create video test source."), __FUNCTION__);
 	return;
     } else {
@@ -380,7 +379,7 @@ VideoInputGst::findVidDevs(std::vector<GnashWebcam*>& cameraList)
     //find v4l devices
     GstPropertyProbe *probe;
     GValueArray *devarr;
-    element = NULL;
+    element = nullptr;
     
     element = gst_element_factory_make ("v4lsrc", "v4lvidsrc");
     if ( ! element ) {
@@ -394,9 +393,9 @@ VideoInputGst::findVidDevs(std::vector<GnashWebcam*>& cameraList)
         return;
     }
     devarr = gst_property_probe_probe_and_get_values_name (probe, "device");
-    for (size_t i = 0; devarr != NULL && i < devarr->n_values; ++i) {
+    for (size_t i = 0; devarr != nullptr && i < devarr->n_values; ++i) {
         GValue *val;
-        gchar *dev_name = NULL;
+        gchar *dev_name = nullptr;
         
         val = g_value_array_get_nth (devarr, i);
         g_object_set (element, "device", g_value_get_string (val), NULL);
@@ -425,16 +424,16 @@ VideoInputGst::findVidDevs(std::vector<GnashWebcam*>& cameraList)
     }
     
     //find v4l2 devices
-    probe = NULL;
-    devarr = NULL;
-    element = NULL;
+    probe = nullptr;
+    devarr = nullptr;
+    element = nullptr;
     
     element = gst_element_factory_make ("v4l2src", "v4l2vidsrc");
     probe = GST_PROPERTY_PROBE (element);
     devarr = gst_property_probe_probe_and_get_values_name (probe, "device");
-    for (size_t i = 0; devarr != NULL && i < devarr->n_values; ++i) {
+    for (size_t i = 0; devarr != nullptr && i < devarr->n_values; ++i) {
         GValue *val;
-        gchar *dev_name = NULL;
+        gchar *dev_name = nullptr;
         
         val = g_value_array_get_nth (devarr, i);
         g_object_set (element, "device", g_value_get_string (val), NULL);
@@ -645,7 +644,7 @@ VideoInputGst::getSelectedCaps(gint dev_select)
 {
     GstElement *pipeline;
     gchar *command;
-    GError *error = NULL;
+    GError *error = nullptr;
     GstStateChangeReturn return_val;
     GstBus *bus;
     GstMessage *message;
@@ -669,11 +668,11 @@ VideoInputGst::getSelectedCaps(gint dev_select)
             data_struct->getGstreamerSrc(), data_struct->getDevLocation());
     }
     pipeline = gst_parse_launch(command, &error);
-    if ((pipeline != NULL) && (error == NULL)) {
+    if ((pipeline != nullptr) && (error == nullptr)) {
         //Wait at most 5 seconds for the pipeline to start playing
         gst_element_set_state (pipeline, GST_STATE_PLAYING);
         return_val = 
-            gst_element_get_state (pipeline, NULL, NULL, 5 * GST_SECOND);
+            gst_element_get_state (pipeline, nullptr, nullptr, 5 * GST_SECOND);
         
         //errors on bus?
         bus = gst_element_get_bus (pipeline);
@@ -687,7 +686,7 @@ VideoInputGst::getSelectedCaps(gint dev_select)
         }
         
         //if everything above worked properly, begin probing for values
-        if ((return_val == GST_STATE_CHANGE_SUCCESS) && (message == NULL)) {
+        if ((return_val == GST_STATE_CHANGE_SUCCESS) && (message == nullptr)) {
             GstElement *src;
             GstPad *pad;
             GstCaps *caps;
@@ -831,12 +830,12 @@ VideoInputGst::setWebcam(size_t dev_select)
 gboolean
 VideoInputGst::webcamCreateSourceBin() 
 {
-    GError *error = NULL;
-    gchar *command = NULL;
+    GError *error = nullptr;
+    gchar *command = nullptr;
     
     GnashWebcamPrivate* webcam = _globalWebcam;
 
-    if(webcam->_webcamDevice == NULL) {
+    if(webcam->_webcamDevice == nullptr) {
         log_debug("%s: You don't have any webcams chosen, using videotestsrc",
             __FUNCTION__);
         webcam->_webcamSourceBin = gst_parse_bin_from_description (
@@ -846,7 +845,7 @@ VideoInputGst::webcamCreateSourceBin()
             capsfilter name=capsfilter");
     }
     else {
-        WebcamVidFormat *format = NULL;
+        WebcamVidFormat *format = nullptr;
         
         std::ostringstream ss;
         ss << _width << 'x' << _height;
@@ -883,10 +882,10 @@ VideoInputGst::webcamCreateSourceBin()
         
         //if format isn't set, something is still going wrong, make generic
         //components and see if they work!
-        if (format == NULL) {
-            if (error != NULL) {
+        if (format == nullptr) {
+            if (error != nullptr) {
                 g_error_free (error);
-                error = NULL;
+                error = nullptr;
             }
             webcam->_webcamSourceBin = 
                 gst_parse_bin_from_description ("videotestsrc name=video_source",
@@ -896,7 +895,7 @@ VideoInputGst::webcamCreateSourceBin()
                 "video_source");
             
             //if there are still errors, something's up, return out of function
-            if (error != NULL) {
+            if (error != nullptr) {
                 g_error_free (error);
                 return false;
             }
@@ -927,7 +926,7 @@ VideoInputGst::webcamCreateSourceBin()
             
             webcam->_webcamSourceBin =
                 gst_parse_bin_from_description (command, TRUE, &error);
-            if (webcam->_webcamSourceBin == NULL) {
+            if (webcam->_webcamSourceBin == nullptr) {
                 log_error(_("%s: Creation of the webcam_source_bin failed"),
                     __FUNCTION__);
                 log_error(_("the error was %s"), error->message);
@@ -974,8 +973,8 @@ VideoInputGst::checkForSupportedFramerate(GnashWebcamPrivate *webcam,
 gboolean
 VideoInputGst::webcamChangeSourceBin() 
 {
-    GError *error = NULL;
-    gchar *command = NULL;
+    GError *error = nullptr;
+    gchar *command = nullptr;
     
     assert(_globalWebcam);
 
@@ -986,11 +985,11 @@ VideoInputGst::webcamChangeSourceBin()
     //delete the old source bin
     gst_bin_remove(GST_BIN(_globalWebcam->_webcamMainBin),
             _globalWebcam->_webcamSourceBin);
-    _globalWebcam->_webcamSourceBin = NULL;
+    _globalWebcam->_webcamSourceBin = nullptr;
     
     GnashWebcamPrivate* webcam = _globalWebcam;
     
-    if(webcam->_webcamDevice == NULL) {
+    if(webcam->_webcamDevice == nullptr) {
         log_debug("%s: You don't have any webcams chosen, using videotestsrc",
             __FUNCTION__);
         webcam->_webcamSourceBin = gst_parse_bin_from_description (
@@ -1000,7 +999,7 @@ VideoInputGst::webcamChangeSourceBin()
             capsfilter name=capsfilter");
     }
     else {
-        WebcamVidFormat *format = NULL;
+        WebcamVidFormat *format = nullptr;
         
         std::ostringstream ss;
         ss << _width << 'x' << _height;
@@ -1037,7 +1036,7 @@ VideoInputGst::webcamChangeSourceBin()
         
         //check here to make sure the fps value is supported (only valid for
         //non test sources)
-        if (! strcmp(webcam->_webcamDevice->getGstreamerSrc(), "videotestsrc") == 0) {
+        if (strcmp(webcam->_webcamDevice->getGstreamerSrc(), "videotestsrc") == 0) {
             int newFps = _fps;
             if (checkForSupportedFramerate(webcam, newFps)) {
                 log_debug("checkforsupportedfr returned true");
@@ -1056,10 +1055,10 @@ VideoInputGst::webcamChangeSourceBin()
         
         //if format isn't set, something is still going wrong, make generic
         //components and see if they work!
-        if (format == NULL) {
-            if (error != NULL) {
+        if (format == nullptr) {
+            if (error != nullptr) {
                 g_error_free (error);
-                error = NULL;
+                error = nullptr;
             }
             webcam->_webcamSourceBin = 
                 gst_parse_bin_from_description ("videotestsrc name=video_source",
@@ -1069,7 +1068,7 @@ VideoInputGst::webcamChangeSourceBin()
                 "video_source");
             
             //if there are still errors, something's up, return out of function
-            if (error != NULL) {
+            if (error != nullptr) {
                 g_error_free (error);
                 return false;
             }
@@ -1100,7 +1099,7 @@ VideoInputGst::webcamChangeSourceBin()
             
             webcam->_webcamSourceBin =
                 gst_parse_bin_from_description (command, TRUE, &error);
-            if (webcam->_webcamSourceBin == NULL) {
+            if (webcam->_webcamSourceBin == nullptr) {
                 log_error(_("%s: Creation of the webcam_source_bin failed"),
                     __FUNCTION__);
                 log_error(_("the error was %s"), error->message);
@@ -1172,16 +1171,16 @@ VideoInputGst::webcamCreateMainBin()
 
     assert(webcam->_webcamSourceBin);
     
-    if ((tee = gst_element_factory_make ("tee", "tee")) == NULL) {
+    if ((tee = gst_element_factory_make ("tee", "tee")) == nullptr) {
         log_error(_("%s: problem creating tee element"), __FUNCTION__);
         return false;
     }
-    if ((save_queue = gst_element_factory_make("queue", "save_queue")) == NULL) {
+    if ((save_queue = gst_element_factory_make("queue", "save_queue")) == nullptr) {
         log_error(_("%s: problem creating save_queue element"), __FUNCTION__);
         return false;
     }
     if ((video_display_queue = 
-        gst_element_factory_make("queue", "video_display_queue")) == NULL) {
+        gst_element_factory_make("queue", "video_display_queue")) == nullptr) {
         log_error(_("%s: problem creating video_display_queue element"),
                   __FUNCTION__);
         return false;
@@ -1214,7 +1213,7 @@ VideoInputGst::webcamCreateMainBin()
     
     //add ghostpad to save_queue (allows connections between bins)
     pad = gst_element_get_pad (save_queue, "src");
-    if (pad == NULL) {
+    if (pad == nullptr) {
         log_error(_("%s: couldn't get save_queue_src_pad"), __FUNCTION__);
         return false;
     }
@@ -1224,7 +1223,7 @@ VideoInputGst::webcamCreateMainBin()
     
     //add ghostpad to video_display_queue
     pad = gst_element_get_pad (video_display_queue, "src");
-    if (pad == NULL) {
+    if (pad == nullptr) {
         log_error(_("%s: couldn't get video_display_queue_pad"), __FUNCTION__);
         return false;
     }
@@ -1254,13 +1253,13 @@ VideoInputGst::webcamCreateDisplayBin()
     
     webcam->_videoDisplayBin = gst_bin_new("video_display_bin");
     
-    if (webcam->_videoDisplayBin == NULL) {
+    if (webcam->_videoDisplayBin == nullptr) {
         log_error(_("%s: something went wrong creating the new video_display_bin"),
             __FUNCTION__);
         return false;
     }
     
-    if ((video_scale = gst_element_factory_make("videoscale", "video_scale")) == NULL) {
+    if ((video_scale = gst_element_factory_make("videoscale", "video_scale")) == nullptr) {
         log_error(_("%s: problem creating video_scale element"), __FUNCTION__);
         return false;
     }
@@ -1269,7 +1268,7 @@ VideoInputGst::webcamCreateDisplayBin()
         g_object_set (video_scale, "method", 1, NULL);
     }
     
-    if ((video_sink = gst_element_factory_make("autovideosink", "video_sink")) == NULL) {
+    if ((video_sink = gst_element_factory_make("autovideosink", "video_sink")) == nullptr) {
         log_error(_("%s: problem creating the video_sink element"), __FUNCTION__);
         return false;
     }
@@ -1303,7 +1302,7 @@ VideoInputGst::webcamMakeVideoDisplayLink()
 
     GnashWebcamPrivate* webcam = _globalWebcam;
 
-    if (gst_bin_get_by_name(GST_BIN(webcam->_pipeline), "video_display_bin") == NULL) {
+    if (gst_bin_get_by_name(GST_BIN(webcam->_pipeline), "video_display_bin") == nullptr) {
         gst_object_ref(webcam->_videoDisplayBin);
         gst_bin_add (GST_BIN(webcam->_pipeline), webcam->_videoDisplayBin);
     }
@@ -1366,7 +1365,7 @@ VideoInputGst::webcamMakeVideoSaveLink()
 {
     GnashWebcamPrivate* webcam = _globalWebcam;
 
-    if (gst_bin_get_by_name(GST_BIN(webcam->_pipeline), "video_save_bin") == NULL) {
+    if (gst_bin_get_by_name(GST_BIN(webcam->_pipeline), "video_save_bin") == nullptr) {
         gst_object_ref(webcam->_videoSaveBin);
         gst_bin_add(GST_BIN(webcam->_pipeline), webcam->_videoSaveBin);
     }
@@ -1449,34 +1448,34 @@ VideoInputGst::webcamCreateSaveBin()
     
     if ((video_save_csp =
         gst_element_factory_make("ffmpegcolorspace", "video_save_csp"))
-            == NULL) {
+            == nullptr) {
         log_error(_("%s: problem with creating video_save_csp element"),
             __FUNCTION__);
         return false;
     }
-    if ((video_enc = gst_element_factory_make("theoraenc", "video_enc")) == NULL) {
+    if ((video_enc = gst_element_factory_make("theoraenc", "video_enc")) == nullptr) {
         log_error(_("%s: problem with creating video_enc element"), __FUNCTION__);
         return false;
     } else {
         g_object_set (video_enc, "keyframe-force", 1, NULL);
     }
     
-    if ((video_save_rate = gst_element_factory_make("videorate", "video_save_rate")) == NULL) {
+    if ((video_save_rate = gst_element_factory_make("videorate", "video_save_rate")) == nullptr) {
         log_error(_("%s: problem with creating video_save_rate element"), __FUNCTION__);
         return false;
     }
-    if ((video_save_scale = gst_element_factory_make("videoscale", "video_save_scale")) == NULL) {
+    if ((video_save_scale = gst_element_factory_make("videoscale", "video_save_scale")) == nullptr) {
         log_error(_("%s: problem with creating video_save_scale element"), __FUNCTION__);
         return false;
     } else {
         //Use bilinear scaling
         g_object_set (video_save_scale, "method", 1, NULL);
     }
-    if ((mux = gst_element_factory_make("oggmux", "mux")) == NULL) {
+    if ((mux = gst_element_factory_make("oggmux", "mux")) == nullptr) {
         log_error(_("%s: problem with creating mux element"), __FUNCTION__);
         return false;
     }
-    if ((webcam->_videoFileSink = gst_element_factory_make("filesink", "video_file_sink")) == NULL) {
+    if ((webcam->_videoFileSink = gst_element_factory_make("filesink", "video_file_sink")) == nullptr) {
         log_error(_("%s: problem with creating video_file_sink element"), __FUNCTION__);
         return false;
     } else {
@@ -1578,7 +1577,7 @@ WebcamVidFormat::WebcamVidFormat() {
     width = -1;
     height = -1;
     numFramerates = -1;
-    framerates = NULL;
+    framerates = nullptr;
 }
 
 /// Default constructor for the FramerateFraction class. This constructor prepares
@@ -1601,8 +1600,8 @@ FramerateFraction::FramerateFraction(gint num, gint denom) {
 /// structure for data that will come in later. Also creates a blank hash table
 /// and array.
 GnashWebcam::GnashWebcam() {
-    setElementPtr(NULL);
-    supportedResolutions = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+    setElementPtr(nullptr);
+    supportedResolutions = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, nullptr);
     videoFormats = g_array_new (FALSE, FALSE, sizeof (WebcamVidFormat));
     numVideoFormats = 0;
 }
@@ -1610,19 +1609,20 @@ GnashWebcam::GnashWebcam() {
 /// Constructor that initializes all GnashWebcamPrivate variables to have
 /// data dropped in later.
 GnashWebcamPrivate::GnashWebcamPrivate() {
-    _pipeline = NULL;
-    _webcamSourceBin = NULL;
-    _webcamMainBin = NULL;
-    _videoDisplayBin = NULL;
-    _videoSaveBin = NULL;
-    _videoSource = NULL;
-    _capsFilter = NULL;
-    _videoFileSink = NULL;
-    _videoEnc = NULL;
+    _pipeline = nullptr;
+    _webcamSourceBin = nullptr;
+    _webcamMainBin = nullptr;
+    _videoDisplayBin = nullptr;
+    _videoSaveBin = nullptr;
+    _videoSource = nullptr;
+    _capsFilter = nullptr;
+    _videoFileSink = nullptr;
+    _videoEnc = nullptr;
     
     _pipelineIsPlaying = false;
+    _webcamDevice = nullptr;
        
-    _currentFormat = NULL;
+    _currentFormat = nullptr;
     _eosTimeoutId = 0;
 };
 
diff --git a/libmedia/gst/VideoInputGst.h b/libmedia/gst/VideoInputGst.h
index 38d8b58..2e28b67 100644
--- a/libmedia/gst/VideoInputGst.h
+++ b/libmedia/gst/VideoInputGst.h
@@ -21,7 +21,7 @@
 #define GNASH_VIDEOINPUTGST_H
 
 #include <vector>
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include "VideoInput.h"
 #include "gst/gst.h"
 
@@ -430,11 +430,6 @@ private:
     ///     _vidVect
     int _devSelection;
     
-    /// \var VideoInputGst::_numdevs
-    /// \brief An integer value containing the number of devices attached
-    ///       to the machine.
-    gint _numdevs;
-    
     /// \var VideoInputGst::_globalWebcam
     /// \brief Convienient pointer to the selected device's GnashWebcamPrivate
     ///       class structure.
diff --git a/libmedia/haiku/AudioDecoderHaiku.cpp b/libmedia/haiku/AudioDecoderHaiku.cpp
index 4b4185d..d86c2ec 100644
--- a/libmedia/haiku/AudioDecoderHaiku.cpp
+++ b/libmedia/haiku/AudioDecoderHaiku.cpp
@@ -51,20 +51,20 @@ AudioDecoderHaiku::~AudioDecoderHaiku()
     QQ(2);
 }
 
-boost::uint8_t*
-AudioDecoderHaiku::decode(const boost::uint8_t* input, boost::uint32_t inputSize, boost::uint32_t& outputSize, boost::uint32_t& decodedBytes)
+std::uint8_t*
+AudioDecoderHaiku::decode(const std::uint8_t* input, std::uint32_t inputSize, std::uint32_t& outputSize, std::uint32_t& decodedBytes)
 {
     (void) input;
     (void) parse;
-    boost::uint8_t *t;
+    std::uint8_t *t;
     outputSize = 2048;
     decodedBytes = inputSize;
-    t = new boost::uint8_t[outputSize];
+    t = new std::uint8_t[outputSize];
 
-    boost::uint16_t *data =
-        reinterpret_cast<boost::uint16_t*>(t);
+    std::uint16_t *data =
+        reinterpret_cast<std::uint16_t*>(t);
 
-    for (size_t i = 0; i < outputSize / sizeof(boost::uint16_t); ++i)
+    for (size_t i = 0; i < outputSize / sizeof(std::uint16_t); ++i)
     {
         data[i] = 1000 * sin(i/10.);
     }
@@ -73,8 +73,8 @@ AudioDecoderHaiku::decode(const boost::uint8_t* input, boost::uint32_t inputSize
     return t;
 }
 
-boost::uint8_t*
-AudioDecoderHaiku::decode(const EncodedAudioFrame& af, boost::uint32_t& outputSize)
+std::uint8_t*
+AudioDecoderHaiku::decode(const EncodedAudioFrame& af, std::uint32_t& outputSize)
 {
     QQ(2);
     return NULL;
diff --git a/libmedia/haiku/AudioDecoderHaiku.h b/libmedia/haiku/AudioDecoderHaiku.h
index 92252a1..46f9e5d 100644
--- a/libmedia/haiku/AudioDecoderHaiku.h
+++ b/libmedia/haiku/AudioDecoderHaiku.h
@@ -54,16 +54,16 @@ public:
 	~AudioDecoderHaiku();
 
     // See dox in AudioDecoder.h
-	boost::uint8_t* decode(const boost::uint8_t* input, boost::uint32_t inputSize, boost::uint32_t& outputSize, boost::uint32_t& decodedBytes);
+	std::uint8_t* decode(const std::uint8_t* input, std::uint32_t inputSize, std::uint32_t& outputSize, std::uint32_t& decodedBytes);
 
-	boost::uint8_t* decode(const EncodedAudioFrame& af, boost::uint32_t& outputSize);
+	std::uint8_t* decode(const EncodedAudioFrame& af, std::uint32_t& outputSize);
 
 private:
 //
 //	void setup(const AudioInfo& info);
 //	void setup(SoundInfo& info);
 //
-//	boost::uint8_t* decodeFrame(const boost::uint8_t* input, boost::uint32_t inputSize, boost::uint32_t& outputSize);
+//	std::uint8_t* decodeFrame(const std::uint8_t* input, std::uint32_t inputSize, std::uint32_t& outputSize);
 //
 //	AVCodec* _audioCodec;
 //	AVCodecContext* _audioCodecCtx;
@@ -93,8 +93,8 @@ private:
 //    ///
 //    /// @return number of input bytes parsed, or -1 on error
 //    ///
-//    int parseInput(const boost::uint8_t* input, boost::uint32_t inputSize,
-//            boost::uint8_t const ** outFrame, int* outFrameSize);
+//    int parseInput(const std::uint8_t* input, std::uint32_t inputSize,
+//            std::uint8_t const ** outFrame, int* outFrameSize);
 };
 	
 } // gnash.media.haiku namespace 
diff --git a/libmedia/haiku/AudioInputHaiku.h b/libmedia/haiku/AudioInputHaiku.h
index d676914..e567122 100644
--- a/libmedia/haiku/AudioInputHaiku.h
+++ b/libmedia/haiku/AudioInputHaiku.h
@@ -23,7 +23,7 @@
 #include "dsodefs.h" //DSOEXPORT
 #include "AudioInput.h"
 
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include <string>
 
 namespace gnash {
diff --git a/libmedia/haiku/MediaHandlerHaiku.cpp b/libmedia/haiku/MediaHandlerHaiku.cpp
index ca1d939..0d0259e 100644
--- a/libmedia/haiku/MediaHandlerHaiku.cpp
+++ b/libmedia/haiku/MediaHandlerHaiku.cpp
@@ -40,10 +40,10 @@ namespace media {
 namespace haiku {
 
 
-std::auto_ptr<MediaParser>
-MediaHandlerHaiku::createMediaParser(std::auto_ptr<IOChannel> stream)
+std::unique_ptr<MediaParser>
+MediaHandlerHaiku::createMediaParser(std::unique_ptr<IOChannel> stream)
 {
-	std::auto_ptr<MediaParser> parser;
+	std::unique_ptr<MediaParser> parser;
 
     try {
         if (isFLV(*stream))
@@ -65,18 +65,18 @@ MediaHandlerHaiku::createMediaParser(std::auto_ptr<IOChannel> stream)
 	return parser;
 }
 
-std::auto_ptr<VideoDecoder>
+std::unique_ptr<VideoDecoder>
 MediaHandlerHaiku::createVideoDecoder(const VideoInfo& info)
 {
-	std::auto_ptr<VideoDecoder> ret(new VideoDecoderHaiku(info));
+	std::unique_ptr<VideoDecoder> ret(new VideoDecoderHaiku(info));
 	return ret;
 }
 
-std::auto_ptr<VideoConverter>
+std::unique_ptr<VideoConverter>
 MediaHandlerHaiku::createVideoConverter(ImgBuf::Type4CC srcFormat,
                                          ImgBuf::Type4CC dstFormat)
 {
-    std::auto_ptr<VideoConverter> converter;
+    std::unique_ptr<VideoConverter> converter;
 
     try
     {
@@ -92,10 +92,10 @@ MediaHandlerHaiku::createVideoConverter(ImgBuf::Type4CC srcFormat,
 }
 
 
-std::auto_ptr<AudioDecoder>
+std::unique_ptr<AudioDecoder>
 MediaHandlerHaiku::createAudioDecoder(const AudioInfo& info)
 {
-	std::auto_ptr<AudioDecoder> ret;
+	std::unique_ptr<AudioDecoder> ret;
 
     try
     {
@@ -148,12 +148,6 @@ MediaHandlerHaiku::cameraNames(std::vector<std::string>& /*names*/) const
 ////    return FF_INPUT_BUFFER_PADDING_SIZE;
 //}
 
-#ifdef REGISTER_MEDIA_HANDLERS
-namespace {
-    MediaFactory::RegisterHandler<MediaHandlerHaiku> reg("haiku");
-}
-#endif
-
 } // gnash.media.haiku namespace 
 } // gnash.media namespace 
 } // gnash namespace
diff --git a/libmedia/haiku/MediaHandlerHaiku.h b/libmedia/haiku/MediaHandlerHaiku.h
index 603dd28..54eefe1 100644
--- a/libmedia/haiku/MediaHandlerHaiku.h
+++ b/libmedia/haiku/MediaHandlerHaiku.h
@@ -48,17 +48,17 @@ public:
         return "Haiku Media Handler";
     }
 
-	virtual std::auto_ptr<MediaParser>
-        createMediaParser(std::auto_ptr<IOChannel> stream);
+	virtual std::unique_ptr<MediaParser>
+        createMediaParser(std::shared_ptr<IOChannel> stream);
 
-	virtual std::auto_ptr<VideoDecoder>
+	virtual std::unique_ptr<VideoDecoder>
         createVideoDecoder(const VideoInfo& info);
 	
-	virtual std::auto_ptr<VideoConverter>
+	virtual std::unique_ptr<VideoConverter>
 		createVideoConverter(ImgBuf::Type4CC srcFormat,
                 ImgBuf::Type4CC dstFormat);
 
-	virtual std::auto_ptr<AudioDecoder>
+	virtual std::unique_ptr<AudioDecoder>
         createAudioDecoder(const AudioInfo& info);
 
 //    virtual size_t getInputPaddingSize() const;
diff --git a/libmedia/haiku/MediaParserHaiku.cpp b/libmedia/haiku/MediaParserHaiku.cpp
index f0bad4b..576ce50 100644
--- a/libmedia/haiku/MediaParserHaiku.cpp
+++ b/libmedia/haiku/MediaParserHaiku.cpp
@@ -36,7 +36,7 @@ namespace gnash {
 namespace media {
 namespace haiku {
 
-MediaParserHaiku::MediaParserHaiku(std::auto_ptr<IOChannel> stream)
+MediaParserHaiku::MediaParserHaiku(std::unique_ptr<IOChannel> stream)
     : MediaParser(stream)
 {
     QQ(2);
@@ -48,7 +48,7 @@ MediaParserHaiku::~MediaParserHaiku()
 }
 
 bool
-MediaParserHaiku::seek(boost::uint32_t&)
+MediaParserHaiku::seek(std::uint32_t&)
 {
     QQ(2);
 }
@@ -59,7 +59,7 @@ MediaParserHaiku::parseNextChunk()
     QQ(2);
 }
 
-boost::uint64_t
+std::uint64_t
 MediaParserHaiku::getBytesLoaded() const
 {
     QQ(2);
diff --git a/libmedia/haiku/MediaParserHaiku.h b/libmedia/haiku/MediaParserHaiku.h
index 3a301f3..b6cac92 100644
--- a/libmedia/haiku/MediaParserHaiku.h
+++ b/libmedia/haiku/MediaParserHaiku.h
@@ -22,7 +22,6 @@
 
 #include "MediaParser.h" // for inheritance
 
-#include <boost/scoped_array.hpp>
 #include <memory>
 
 // Forward declaration
@@ -43,18 +42,18 @@ public:
 	//
 	/// Can throw a GnashException if input format couldn't be detected
 	///
-	MediaParserHaiku(std::auto_ptr<IOChannel> stream);
+	MediaParserHaiku(std::shared_ptr<IOChannel> stream);
 
 	~MediaParserHaiku();
 
 	// See dox in MediaParser.h
-	virtual bool seek(boost::uint32_t&);
+	virtual bool seek(std::uint32_t&);
 
 	// See dox in MediaParser.h
 	virtual bool parseNextChunk();
 
 	// See dox in MediaParser.h
-	virtual boost::uint64_t getBytesLoaded() const;
+	virtual std::uint64_t getBytesLoaded() const;
 };
 
 
diff --git a/libmedia/haiku/VideoConverterHaiku.cpp b/libmedia/haiku/VideoConverterHaiku.cpp
index 47ecd6b..eba69e6 100644
--- a/libmedia/haiku/VideoConverterHaiku.cpp
+++ b/libmedia/haiku/VideoConverterHaiku.cpp
@@ -41,7 +41,7 @@ VideoConverterHaiku::~VideoConverterHaiku()
     QQ(2);
 }
 
-std::auto_ptr<ImgBuf>
+std::unique_ptr<ImgBuf>
 VideoConverterHaiku::convert(const ImgBuf& src)
 {
     QQ(2);
diff --git a/libmedia/haiku/VideoConverterHaiku.h b/libmedia/haiku/VideoConverterHaiku.h
index f142944..3d75fb3 100644
--- a/libmedia/haiku/VideoConverterHaiku.h
+++ b/libmedia/haiku/VideoConverterHaiku.h
@@ -37,7 +37,7 @@ public:
     
     ~VideoConverterHaiku();
   
-    std::auto_ptr<ImgBuf> convert(const ImgBuf& src);
+    std::unique_ptr<ImgBuf> convert(const ImgBuf& src);
 };
 
 } // gnash.media.haiku namespace
diff --git a/libmedia/haiku/VideoDecoderHaiku.cpp b/libmedia/haiku/VideoDecoderHaiku.cpp
index 9e37328..91da37f 100644
--- a/libmedia/haiku/VideoDecoderHaiku.cpp
+++ b/libmedia/haiku/VideoDecoderHaiku.cpp
@@ -59,17 +59,17 @@ VideoDecoderHaiku::push(const EncodedVideoFrame& frame)
 }
   
 
-std::auto_ptr<GnashImage>
+std::unique_ptr<GnashImage>
 VideoDecoderHaiku::pop()
 {
-    std::auto_ptr<GnashImage> ret;
+    std::unique_ptr<GnashImage> ret;
     ret.reset(new ImageRGB(100, 100));
-    boost::uint8_t *d =
-        new boost::uint8_t[100*100*4];
+    std::uint8_t *d =
+        new std::uint8_t[100*100*4];
     for (int i = 0; i < 100*100*4; ++i)
     {
-        d[i] *= 1 - (boost::uint8_t) 2*(rand()%2);
-        d[i] += (boost::uint8_t) rand()/64;
+        d[i] *= 1 - (std::uint8_t) 2*(rand()%2);
+        d[i] += (std::uint8_t) rand()/64;
     }
     ret->update(d);
     delete [] d;
diff --git a/libmedia/haiku/VideoDecoderHaiku.h b/libmedia/haiku/VideoDecoderHaiku.h
index 32f8d30..aeece62 100644
--- a/libmedia/haiku/VideoDecoderHaiku.h
+++ b/libmedia/haiku/VideoDecoderHaiku.h
@@ -40,14 +40,14 @@ class DSOEXPORT VideoDecoderHaiku : public VideoDecoder
 {
 public:
     //VideoDecoderGst(videoCodecType codec_type, int width, int height,
-    //                const boost::uint8_t* extradata, size_t extradatasize);
+    //                const std::uint8_t* extradata, size_t extradatasize);
     //VideoDecoderGst(GstCaps* caps);
     VideoDecoderHaiku(const VideoInfo& info);
     ~VideoDecoderHaiku();
 
     void push(const EncodedVideoFrame& buffer);
 
-    std::auto_ptr<GnashImage> pop();
+    std::unique_ptr<GnashImage> pop();
   
     bool peek();
 
diff --git a/libmedia/haiku/VideoInputHaiku.h b/libmedia/haiku/VideoInputHaiku.h
index 2e079e6..a2a3f1b 100644
--- a/libmedia/haiku/VideoInputHaiku.h
+++ b/libmedia/haiku/VideoInputHaiku.h
@@ -20,7 +20,7 @@
 #define GNASH_VIDEOINPUTHAIKU_H
 
 #include <vector>
-#include <boost/cstdint.hpp> // for C99 int types
+#include <cstdint> // for C99 int types
 #include "VideoInput.h"
 
 namespace gnash {
diff --git a/librender/GnashTexture.cpp b/librender/GnashTexture.cpp
index d024296..72c7403 100644
--- a/librender/GnashTexture.cpp
+++ b/librender/GnashTexture.cpp
@@ -20,6 +20,7 @@
 
 #include "GnashTexture.h"
 #include <GL/gl.h>
+#include <GL/glu.h>
 
 #define GL_DEBUG 0
 
@@ -37,37 +38,13 @@ struct gl_errors_t {
      const char *str;
 };
 
-// Returns a string representation of an OpenGL error
-static const char *gl_get_error_string(GLenum error)
-{
-    gl_errors_t gl_errors[] = {
-        { GL_NO_ERROR,          "no error" },
-        { GL_INVALID_ENUM,      "invalid enumerant" },
-        { GL_INVALID_VALUE,     "invalid value" },
-        { GL_INVALID_OPERATION, "invalid operation" },
-        { GL_STACK_OVERFLOW,    "stack overflow" },
-        { GL_STACK_UNDERFLOW,   "stack underflow" },
-        { GL_OUT_OF_MEMORY,     "out of memory" },
-#ifdef GL_INVALID_FRAMEBUFFER_OPERATION_EXT
-        { GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "invalid framebuffer operation" },
-#endif
-    };
-
-    for (gl_errors_t *it = boost::begin(gl_errors), *end = boost::end(gl_errors);
-         it != end; ++it) {
-        if (it->val == error)
-            return it->str;
-    }
-    return "unknown";
-}
-
 static inline bool gl_do_check_error(int report)
 {
     GLenum error;
     bool is_error = false;
     while ((error = glGetError()) != GL_NO_ERROR) {
         if (report)
-            log_error(_("glError: %s caught\n"), gl_get_error_string(error));
+            log_error(_("glError: %s caught\n"), gluErrorString(error));
         is_error = true;
     }
     return is_error;
@@ -103,7 +80,7 @@ static bool check_extension(const char *name, const char *ext)
     const char *end;
     int name_len, n;
 
-    if (name == NULL || ext == NULL)
+    if (name == nullptr || ext == nullptr)
         return false;
 
     end = ext + strlen(ext);
@@ -181,7 +158,7 @@ bool GnashTexture::init()
 
     glPixelStorei(GL_UNPACK_ALIGNMENT, internal_format() == GL_RGBA ? 4 : 1);
     glTexImage2D(GL_TEXTURE_2D, 0, internal_format(), _width, _height, 0,
-                 format(), GL_UNSIGNED_BYTE, NULL);
+                 format(), GL_UNSIGNED_BYTE, nullptr);
     release();
     return true;
 }
@@ -227,7 +204,7 @@ void GnashTexture::release()
 }
 
 // Update texture with data
-void GnashTexture::update(const boost::uint8_t *data)
+void GnashTexture::update(const std::uint8_t *data)
 {
     D(bug("GnashTexture::update(): data %p, size %dx%d\n", data, _width, _height));
 
diff --git a/librender/GnashTexture.h b/librender/GnashTexture.h
index 7df7a0e..6329f40 100644
--- a/librender/GnashTexture.h
+++ b/librender/GnashTexture.h
@@ -22,7 +22,6 @@
 #define GNASH_GNASHTEXTURE_H
 
 #include "GnashImage.h"
-#include <boost/shared_ptr.hpp>
 
 namespace gnash {
 
@@ -110,7 +109,7 @@ public:
     /// (or derivative thereof) or unexpected things will happen. 
     ///
     /// @param data buffer to copy data from.
-    void update(const boost::uint8_t *data);
+    void update(const std::uint8_t *data);
 };
 
 } // gnash namespace
diff --git a/librender/Renderer.h b/librender/Renderer.h
index f7ee0b2..097c0be 100644
--- a/librender/Renderer.h
+++ b/librender/Renderer.h
@@ -146,8 +146,6 @@
 
 #include "dsodefs.h" // for DSOEXPORT
 
-#include "boost/shared_array.hpp"
-#include "boost/scoped_ptr.hpp"
 #include "GnashEnums.h" 
 #include "Range2d.h"
 #include "Point2d.h"
@@ -221,7 +219,7 @@ public:
     /// that can later be passed to FillStyleX_bitmap(), to set a
     /// bitmap fill style.
     virtual CachedBitmap *
-        createCachedBitmap(std::auto_ptr<image::GnashImage> im) = 0;
+        createCachedBitmap(std::unique_ptr<image::GnashImage> im) = 0;
 
 
     /// ==================================================================
@@ -315,7 +313,7 @@ public:
     /// @param type     The type of image output required (PNG, JPEG, GIF).
     ///                 Note that not all FileTypes are images: rendering
     ///                 to an FLV will not work.
-    virtual void renderToImage(boost::shared_ptr<IOChannel> /*io*/,
+    virtual void renderToImage(std::unique_ptr<IOChannel> /*io*/,
         FileType /*type*/, int /*quality*/) const {
 
         log_debug(_("Rendering to image not implemented for this "
@@ -348,7 +346,7 @@ public:
     /// ==================================================================
 
     ///@{
-    typedef boost::shared_ptr<GnashVaapiImageProxy> RenderImage;
+    typedef std::shared_ptr<GnashVaapiImageProxy> RenderImage;
     typedef std::vector<RenderImage> RenderImages;
 
     // Get first render image
@@ -447,7 +445,7 @@ public:
         return false; // avoid compiler warning        
     }
 
-    void addRenderImage(boost::shared_ptr<GnashVaapiImageProxy> image) {
+    void addRenderImage(std::shared_ptr<GnashVaapiImageProxy> image) {
         _render_images.push_back(image);
     }
     
diff --git a/librender/agg/LinearRGB.h b/librender/agg/LinearRGB.h
index 5be8daf..db84b8b 100644
--- a/librender/agg/LinearRGB.h
+++ b/librender/agg/LinearRGB.h
@@ -19,6 +19,8 @@
 #ifndef GNASH_AGG_LINEAR_INTERPOLATOR_H
 #define GNASH_AGG_LINEAR_INTERPOLATOR_H
 
+#include <utility>
+
 #include <cmath>
 
 namespace gnash {
@@ -55,11 +57,11 @@ struct linear_rgb_interpolator
 public:
     typedef ColorT color_type;
 
-    linear_rgb_interpolator(const color_type& c1, const color_type& c2, 
+    linear_rgb_interpolator(color_type c1, color_type c2, 
         size_t len)
         :
-        _c1(c1),
-        _c2(c2),
+        _c1(std::move(c1)),
+        _c2(std::move(c2)),
         _len(len),
         _count(0)
     {}
diff --git a/librender/agg/Renderer_agg.cpp b/librender/agg/Renderer_agg.cpp
index 12b4142..e15ca2d 100644
--- a/librender/agg/Renderer_agg.cpp
+++ b/librender/agg/Renderer_agg.cpp
@@ -114,8 +114,7 @@ AGG resources
 #include <cmath>
 #include <math.h> // We use round()!
 #include <climits>
-#include <boost/scoped_array.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-parameter"
@@ -157,6 +156,7 @@ AGG resources
 #include "SWFCxForm.h"
 #include "FillStyle.h"
 #include "Transform.h"
+#include "IOChannel.h"
 
 #ifdef HAVE_VA_VA_H
 #include "GnashVaapiImage.h"
@@ -334,11 +334,11 @@ public:
 
     AlphaMask(int width, int height)
         :
-        _rbuf(0, width, height, width),
+        _rbuf(nullptr, width, height, width),
         _pixf(_rbuf),
         _rbase(_pixf),
         _amask(_rbuf),
-        _buffer(new boost::uint8_t[width * height]())
+        _buffer(new std::uint8_t[width * height]())
     {
         _rbuf.attach(_buffer.get(), width, height, width);
     }
@@ -387,7 +387,7 @@ private:
     Mask _amask;
     
     // in-memory buffer
-    boost::scoped_array<boost::uint8_t> _buffer;
+    std::unique_ptr<std::uint8_t[]> _buffer;
     
 };
 
@@ -410,11 +410,8 @@ public:
     template<typename ScanLine>
     void render(ScanLine& sl, Stroke& stroke, const rgba& color)
     {
-        for (ClipBounds::const_iterator i = _clipbounds.begin(),
-                e = _clipbounds.end(); i != e; ++i) {
+        for (const auto& bounds : _clipbounds) {
 
-            const ClipBounds::value_type& bounds = *i;
-              
             applyClipBox<Rasterizer> (_ras, bounds);
 
             // The vectorial pipeline
@@ -488,10 +485,8 @@ private:
         Rasterizer ras;
         agg::renderer_scanline_aa_solid<Renderer> ren_sl(rbase);
 
-        for (ClipBounds::const_iterator i = _clipbounds.begin(),
-            e = _clipbounds.end(); i != e; ++i)
+        for (const auto& cb : _clipbounds)
         {
-            const ClipBounds::value_type& cb = *i;
             applyClipBox<Rasterizer>(ras, cb);
             ras.add_path(path);
 
@@ -631,10 +626,8 @@ private:
             Scanline& sl, SpanGenerator& sg)
     {
         Rasterizer _ras;
-        for (ClipBounds::const_iterator i = _clipbounds.begin(),
-            e = _clipbounds.end(); i != e; ++i)
+        for (const auto& cb : _clipbounds)
         {
-            const ClipBounds::value_type& cb = *i;
             applyClipBox<Rasterizer> (_ras, cb);
 
             _ras.add_path(path);
@@ -687,12 +680,12 @@ public:
     // Given an image, returns a pointer to a bitmap_info class
     // that can later be passed to FillStyleX_bitmap(), to set a
     // bitmap fill style.
-    gnash::CachedBitmap* createCachedBitmap(std::auto_ptr<image::GnashImage> im)
+    gnash::CachedBitmap* createCachedBitmap(std::unique_ptr<image::GnashImage> im)
     {        
-        return new agg_bitmap_info(im);
+        return new agg_bitmap_info(std::move(im));
     }
 
-    virtual void renderToImage(boost::shared_ptr<IOChannel> io,
+    virtual void renderToImage(std::unique_ptr<IOChannel> io,
             FileType type, int quality) const
     {
         image::ImageRGBA im(xres, yres);
@@ -703,7 +696,7 @@ public:
             }
         }
         
-        image::Output::writeImageData(type, io, im, quality);
+        image::Output::writeImageData(type, std::move(io), im, quality);
     }
 
     template<typename SourceFormat, typename Matrix>
@@ -860,10 +853,9 @@ public:
     if ( ! _clipbounds.empty() )
     {
         const agg::rgba8& col = agg::rgba8_pre(bg.m_r, bg.m_g, bg.m_b, bg.m_a);
-        for (ClipBounds::const_iterator i = _clipbounds.begin(),
-                e = _clipbounds.end(); i!= e; ++i) 
+        for (const auto& bounds : _clipbounds)
         {
-            clear_framebuffer(*i, col);
+            clear_framebuffer(bounds, col);
         }
     }
     
@@ -874,7 +866,7 @@ public:
  
     virtual Renderer* startInternalRender(image::GnashImage& im) {
     
-        std::auto_ptr<Renderer_agg_base> in;
+        std::unique_ptr<Renderer_agg_base> in;
     
         switch (im.type()) {
             case image::TYPE_RGB:
@@ -1005,9 +997,8 @@ public:
         _alphaMasks.push_back(new AlphaMask(xres, yres));
         AlphaMask& new_mask = _alphaMasks.back();
 
-        for (ClipBounds::const_iterator i = _clipbounds.begin(), 
-                e = _clipbounds.end(); i != e; ++i) {
-            new_mask.clear(*i);
+        for (const auto& bounds : _clipbounds ) {
+            new_mask.clear(bounds);
         }
 
     }
@@ -1092,11 +1083,10 @@ public:
     
     assert(bounds.getRange().isFinite());
     
-    const int count = _clipbounds.size();
-    for (int cno=0; cno<count; ++cno) {
-          
-      if (_clipbounds[cno].intersects(bounds.getRange())) 
-        _clipbounds_selected.push_back(&_clipbounds[cno]);
+    for (const auto& clip : _clipbounds) {
+
+      if (clip.intersects(bounds.getRange())) 
+        _clipbounds_selected.push_back(&clip);
 
     }  
   }
@@ -1108,10 +1098,9 @@ public:
     _clipbounds_selected.clear();
     _clipbounds_selected.reserve(_clipbounds.size());
     
-    for (ClipBounds::iterator i = _clipbounds.begin(),
-            e = _clipbounds.end(); i != e; ++i)
+    for (const auto& clip : _clipbounds)
     {
-      _clipbounds_selected.push_back(&(*i));
+      _clipbounds_selected.push_back(&clip);
     }
   }
 
@@ -1127,12 +1116,11 @@ public:
             return; // no need to draw
         }
 
-        for (SWF::ShapeRecord::Subshapes::const_iterator it = shape.subshapes().begin(),
-             end = shape.subshapes().end(); it != end; ++it ) {
+        for (const SWF::Subshape& subshape : shape.subshapes()) {
 
-            const SWF::ShapeRecord::FillStyles& fillStyles = it->fillStyles();
-            const SWF::ShapeRecord::LineStyles& lineStyles = it->lineStyles();
-            const SWF::ShapeRecord::Paths& paths = it->paths();
+            const SWF::ShapeRecord::FillStyles& fillStyles = subshape.fillStyles();
+            const SWF::ShapeRecord::LineStyles& lineStyles = subshape.lineStyles();
+            const SWF::ShapeRecord::Paths& paths = subshape.paths();
 
             // select ranges
             select_clipbounds(shape.getBounds(), xform.matrix);
@@ -1227,7 +1215,8 @@ public:
 
         /// Transform all the paths using the matrix.
         std::for_each(paths_out.begin(), paths_out.end(), 
-                boost::bind(&Path::transform, _1, mat));
+                std::bind(&Path::transform, std::placeholders::_1,
+		    std::ref(mat)));
     } 
 
   // Version of buildPaths that uses rounded coordinates (pixel hinting)
@@ -1487,10 +1476,8 @@ public:
       rasc.filling_rule(agg::fill_non_zero);
       
     
-    for (unsigned int cno=0; cno<_clipbounds_selected.size(); ++cno) {
-    
-      const geometry::Range2d<int>* bounds = _clipbounds_selected[cno];
-      
+    for (const geometry::Range2d<int>* bounds : _clipbounds_selected) {
+
       applyClipBox<ras_type> (rasc, *bounds);
       
       // push paths to AGG
@@ -1588,9 +1575,7 @@ public:
     agg::path_storage path; 
     agg::conv_curve<agg::path_storage> curve(path);
 
-    for (size_t pno=0, pcount=paths.size(); pno < pcount; ++pno) {
-
-      const Path& this_path = paths[pno];
+    for (const Path& this_path : paths) {
 
       path.remove_all();
       
@@ -1692,10 +1677,8 @@ public:
       agg::renderer_base<PixelFormat> > ren_sl(rbase); // solid fills
       
     
-    for (unsigned int cno=0; cno<_clipbounds_selected.size(); ++cno) {
-    
-      const geometry::Range2d<int>* bounds = _clipbounds_selected[cno];
-          
+    for (const geometry::Range2d<int>* bounds : _clipbounds_selected) {
+
       applyClipBox<ras_type> (ras, *bounds);
       
       for (size_t pno=0, pcount=paths.size(); pno<pcount; ++pno) {
@@ -1821,9 +1804,8 @@ public:
     // -- render --
       
     // iterate through clipping bounds
-    for (unsigned int cno=0; cno<_clipbounds.size(); ++cno) {
-    
-      const ClipBounds::value_type& bounds = _clipbounds[cno];         
+    for (const auto& bounds : _clipbounds) {
+
       applyClipBox<ras_type> (ras, bounds);     
             
       
@@ -1967,8 +1949,8 @@ public:
   
     Range2d<int> pixbounds = Renderer::world_to_pixel(bounds);
     
-    for (unsigned int cno=0; cno<_clipbounds.size(); ++cno) {  
-      if (Intersect(pixbounds, _clipbounds[cno]))
+    for (const auto& bounds : _clipbounds) {
+      if (Intersect(pixbounds, bounds))
         return true;
     }
     return false;
@@ -2009,10 +1991,10 @@ private:  // private variables
     typedef agg::renderer_base<PixelFormat> renderer_base;
 
     // renderer base
-    boost::scoped_ptr<renderer_base> m_rbase;
+    std::unique_ptr<renderer_base> m_rbase;
  
     // An external renderer.   
-    boost::scoped_ptr<Renderer> _external;
+    std::unique_ptr<Renderer> _external;
 
     int xres;
     int yres;
@@ -2022,11 +2004,11 @@ private:  // private variables
 
     agg::rendering_buffer m_rbuf;  
 
-    std::auto_ptr<PixelFormat> m_pixf;
+    std::unique_ptr<PixelFormat> m_pixf;
 
     /// clipping rectangle
     ClipBounds _clipbounds;
-    std::vector< geometry::Range2d<int>* > _clipbounds_selected;
+    std::vector< geometry::Range2d<int> const* > _clipbounds_selected;
 
     // this flag is set while a mask is drawn
     bool m_drawing_mask; 
@@ -2047,10 +2029,10 @@ private:  // private variables
 bool is_little_endian_host() {
 
   union {
-    boost::uint16_t word;
+    std::uint16_t word;
     struct {
-      boost::uint8_t b1;
-      boost::uint8_t b2;
+      std::uint8_t b1;
+      std::uint8_t b2;
     } s;
   } u;
     
@@ -2065,7 +2047,7 @@ bool is_little_endian_host() {
 DSOEXPORT Renderer_agg_base*  create_Renderer_agg(const char *pixelformat)
 {
 
-  if (!pixelformat) return NULL;
+  if (!pixelformat) return nullptr;
 
   if (is_little_endian_host())
     log_debug("Framebuffer pixel format is %s (little-endian host)", pixelformat);
@@ -2115,11 +2097,11 @@ DSOEXPORT Renderer_agg_base*  create_Renderer_agg(const char *pixelformat)
 #endif
   {
       log_error(_("Unknown pixelformat: %s\n"), pixelformat);
-    return NULL;
+    return nullptr;
     //abort();
   }
   
-  return NULL; // avoid compiler warning
+  return nullptr; // avoid compiler warning
 }
 
 
@@ -2200,7 +2182,7 @@ DSOEXPORT const char *agg_detect_pixel_format(unsigned int rofs,
    
   }
   
-  return NULL; // unknown format
+  return nullptr; // unknown format
   
 }
 
diff --git a/librender/agg/Renderer_agg.h b/librender/agg/Renderer_agg.h
index fd5fdb0..e8c20d5 100644
--- a/librender/agg/Renderer_agg.h
+++ b/librender/agg/Renderer_agg.h
@@ -34,7 +34,7 @@ private:
     
 public:
     
-    Renderer_agg_base() : _testBuffer(0) { }  
+    Renderer_agg_base() : _testBuffer(nullptr) { }
     
     // virtual classes should have virtual destructors
     virtual ~Renderer_agg_base() {
@@ -53,7 +53,7 @@ public:
         int size = width * height * getBytesPerPixel();
         
         unsigned char *tmp = static_cast<unsigned char *>(realloc(_testBuffer, size));
-        if (tmp == NULL) {
+        if (tmp == nullptr) {
             log_error(_("Memory reallocation error"));
             return false;
         } else {
diff --git a/librender/agg/Renderer_agg_bitmap.h b/librender/agg/Renderer_agg_bitmap.h
index a8fbc35..4bd6e5d 100644
--- a/librender/agg/Renderer_agg_bitmap.h
+++ b/librender/agg/Renderer_agg_bitmap.h
@@ -19,9 +19,9 @@
 #ifndef BACKEND_RENDER_HANDLER_AGG_BITMAP_H
 #define BACKEND_RENDER_HANDLER_AGG_BITMAP_H
 
-#include <boost/scoped_ptr.hpp>
 #include <memory>
-#include <boost/cstdint.hpp>
+#include <memory>
+#include <cstdint>
 
 #include "GnashImage.h"
 #include "CachedBitmap.h"
@@ -32,7 +32,7 @@ class agg_bitmap_info : public CachedBitmap
 {
 public:
   
-    agg_bitmap_info(std::auto_ptr<image::GnashImage> im)
+    agg_bitmap_info(std::unique_ptr<image::GnashImage> im)
         :
         _image(im.release()),
         _bpp(_image->type() == image::TYPE_RGB ? 24 : 32)
@@ -56,11 +56,11 @@ public:
     int get_height() const { return _image->height();  }  
     int get_bpp() const { return _bpp; }  
     int get_rowlen() const { return _image->stride(); }  
-    boost::uint8_t* get_data() const { return _image->begin(); }
+    std::uint8_t* get_data() const { return _image->begin(); }
     
 private:
   
-    boost::scoped_ptr<image::GnashImage> _image;
+    std::unique_ptr<image::GnashImage> _image;
   
     int _bpp;
       
diff --git a/librender/agg/Renderer_agg_style.h b/librender/agg/Renderer_agg_style.h
index 64b06d5..16e177b 100644
--- a/librender/agg/Renderer_agg_style.h
+++ b/librender/agg/Renderer_agg_style.h
@@ -81,10 +81,10 @@ namespace {
 class AggStyle 
 {
 public:
-    AggStyle(bool solid, const agg::rgba8& color = agg::rgba8(0,0,0,0))
+    AggStyle(bool solid, agg::rgba8 color = agg::rgba8(0,0,0,0))
       :
       _solid(solid),
-      _color(color)
+      _color(std::move(color))
     {
     }
     
@@ -242,14 +242,14 @@ class GradientStyle : public AggStyle
 public:
   
     GradientStyle(const GradientFill& fs, const SWFMatrix& mat,
-            const SWFCxForm& cx, int norm_size, GradientType gr = GradientType())
+            SWFCxForm cx, int norm_size, GradientType gr = GradientType())
         :
         AggStyle(false),
-        m_cx(cx),
+        m_cx(std::move(cx)),
         m_tr(mat.a() / 65536.0, mat.b() / 65536.0, mat.c() / 65536.0,
               mat.d() / 65536.0, mat.tx(), mat.ty()),
         m_span_interpolator(m_tr),
-        m_gradient_adaptor(gr),
+        m_gradient_adaptor(std::move(gr)),
         m_sg(m_span_interpolator, m_gradient_adaptor, m_gradient_lut, 0,
                 norm_size),
       
@@ -364,11 +364,11 @@ class BitmapStyle : public AggStyle
 {
 public:
     
-  BitmapStyle(int width, int height, int rowlen, boost::uint8_t* data, 
-    const SWFMatrix& mat, const SWFCxForm& cx)
+  BitmapStyle(int width, int height, int rowlen, std::uint8_t* data,
+    const SWFMatrix& mat, SWFCxForm cx)
     :
     AggStyle(false),
-    m_cx(cx),
+    m_cx(std::move(cx)),
     m_rbuf(data, width, height, rowlen),  
     m_pixf(m_rbuf),
     m_img_src(m_pixf),
diff --git a/librender/cairo/PathParser.cpp b/librender/cairo/PathParser.cpp
index 033fd5a..6d9c561 100644
--- a/librender/cairo/PathParser.cpp
+++ b/librender/cairo/PathParser.cpp
@@ -17,10 +17,11 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 //
 
-#include <boost/utility.hpp>
-#include "PathParser.h"
+#include <functional>
+#include <iterator>
 #include <map>
-#include <boost/bind.hpp>
+
+#include "PathParser.h"
 #include "log.h"
 
 namespace gnash
@@ -54,20 +55,20 @@ PathParser::run(const SWFCxForm& cx, const SWFMatrix& /*mat*/)
 
   std::vector<UniPathList> unipathvec(_num_styles);
 
-  for (size_t i = 0; i < _paths.size(); ++i) {
+  for (const Path& path : _paths) {
   
-    if (_paths[i].empty()) {
+    if (path.empty()) {
       continue;
     }
 
-    int leftfill = _paths[i].getLeftFill();
+    int leftfill = path.getLeftFill();
     if (leftfill) {
-      unipathvec[leftfill-1].push_front(UnivocalPath(&_paths[i], UnivocalPath::FILL_LEFT));
+      unipathvec[leftfill-1].emplace_front(&path, UnivocalPath::FILL_LEFT);
     }
 
-    int rightfill = _paths[i].getRightFill();
+    int rightfill = path.getRightFill();
     if (rightfill) {
-      unipathvec[rightfill-1].push_front(UnivocalPath(&_paths[i], UnivocalPath::FILL_RIGHT));
+      unipathvec[rightfill-1].emplace_front(&path, UnivocalPath::FILL_RIGHT);
     }
   }
 
@@ -127,12 +128,12 @@ PathParser::append(const UnivocalPath& append_path)
 
   if (append_path._fill_type == UnivocalPath::FILL_LEFT) {
 
-    std::for_each(edges.begin(), edges.end(), boost::bind(&PathParser::line_to,
-                                                          this, _1));
+    std::for_each(edges.begin(), edges.end(), std::bind(&PathParser::line_to,
+        this, std::placeholders::_1));
   } else {
 
     for (std::vector<Edge>::const_reverse_iterator prev = edges.rbegin(),
-         it = boost::next(prev), end = edges.rend(); it != end; ++it, ++prev) {
+         it = std::next(prev), end = edges.rend(); it != end; ++it, ++prev) {
       if ((*prev).straight()) {
         lineTo((*it).ap);
       } else {
diff --git a/librender/cairo/PathParser.h b/librender/cairo/PathParser.h
index c6f4dc6..2fd86cc 100644
--- a/librender/cairo/PathParser.h
+++ b/librender/cairo/PathParser.h
@@ -19,11 +19,13 @@
 #ifndef GNASH_PATH_PARSER_H
 #define GNASH_PATH_PARSER_H
 
-#include "Geometry.h"
 #include <vector>
 #include <deque>
+#include <boost/utility.hpp>
+#include "Geometry.h"
 #include "SWFCxForm.h"
 
+
 namespace gnash
 {
 
@@ -37,7 +39,7 @@ struct UnivocalPath
     FILL_LEFT
   };
   
-  UnivocalPath() : _path(NULL), _fill_type(FILL_LEFT) {}
+  UnivocalPath() : _path(nullptr), _fill_type(FILL_LEFT) {}
 
   UnivocalPath(const Path* path, fill_type filltype)
     : _path(path),
diff --git a/librender/cairo/Renderer_cairo.cpp b/librender/cairo/Renderer_cairo.cpp
index c597dd4..656f2a8 100644
--- a/librender/cairo/Renderer_cairo.cpp
+++ b/librender/cairo/Renderer_cairo.cpp
@@ -40,9 +40,8 @@
 #include <cmath>
 #include <math.h> // Non standard rint()
 #include <cairo/cairo.h>
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/bind.hpp>
+#include <memory>
+#include <functional>
 
 #include "Renderer.h"
 #include "GnashImage.h"
@@ -67,12 +66,12 @@ namespace {
 
 // Converts from RGB image to 32-bit pixels in CAIRO_FORMAT_RGB24 format
 static void
-rgb_to_cairo_rgb24(boost::uint8_t* dst, const image::GnashImage* im)
+rgb_to_cairo_rgb24(std::uint8_t* dst, const image::GnashImage* im)
 {
-    boost::uint32_t* dst32 = reinterpret_cast<boost::uint32_t*>(dst);
+    std::uint32_t* dst32 = reinterpret_cast<std::uint32_t*>(dst);
     for (size_t y = 0;  y < im->height();  y++)
     {
-        const boost::uint8_t* src = scanline(*im, y);
+        const std::uint8_t* src = scanline(*im, y);
         for (size_t x = 0;  x < im->width();  x++, src += 3) {
             *dst32++ = (src[0] << 16) | (src[1] << 8) | src[2];
         }
@@ -81,15 +80,15 @@ rgb_to_cairo_rgb24(boost::uint8_t* dst, const image::GnashImage* im)
 
 // Converts from RGBA image to 32-bit pixels in CAIRO_FORMAT_ARGB32 format
 static void
-rgba_to_cairo_argb(boost::uint8_t* dst, const image::GnashImage* im)
+rgba_to_cairo_argb(std::uint8_t* dst, const image::GnashImage* im)
 {
-    boost::uint32_t* dst32 = reinterpret_cast<boost::uint32_t*>(dst);
+    std::uint32_t* dst32 = reinterpret_cast<std::uint32_t*>(dst);
     for (size_t y = 0;  y < im->height();  y++)
     {
-        const boost::uint8_t* src = scanline(*im, y);
+        const std::uint8_t* src = scanline(*im, y);
         for (size_t x = 0;  x < im->width();  x++, src += 4)
         {
-            const boost::uint8_t& r = src[0],
+            const std::uint8_t& r = src[0],
                                   g = src[1],
                                   b = src[2],
                                   a = src[3];
@@ -106,7 +105,7 @@ rgba_to_cairo_argb(boost::uint8_t* dst, const image::GnashImage* im)
 class bitmap_info_cairo : public CachedBitmap, boost::noncopyable
 {
   public:
-    bitmap_info_cairo(boost::uint8_t* data, int width, int height,
+    bitmap_info_cairo(std::uint8_t* data, int width, int height,
                            size_t bpp, cairo_format_t format)
         :
         _data(data),
@@ -151,8 +150,8 @@ class bitmap_info_cairo : public CachedBitmap, boost::noncopyable
 
         // We assume that cairo uses machine-endian order, as that's what
         // the existing conversion functions do.
-        boost::uint32_t* start =
-            reinterpret_cast<boost::uint32_t*>(_data.get());
+        std::uint32_t* start =
+            reinterpret_cast<std::uint32_t*>(_data.get());
         const size_t sz = _width * _height;
         std::copy(start, start + sz, image::begin<image::ARGB>(*_image));
         return *_image;
@@ -207,8 +206,8 @@ class bitmap_info_cairo : public CachedBitmap, boost::noncopyable
     }
    
   private:
-    mutable boost::scoped_ptr<image::GnashImage> _image;
-    boost::scoped_array<boost::uint8_t> _data;
+    mutable std::unique_ptr<image::GnashImage> _image;
+    std::unique_ptr<std::uint8_t[]> _data;
     int _width;
     int _height;
     size_t _bytes_per_pixel;
@@ -267,7 +266,7 @@ struct StyleHandler : boost::static_visitor<cairo_pattern_t*>
             }
         }
         // We should never get here.
-        return 0;
+        return nullptr;
     }
 
     cairo_pattern_t* operator()(const SolidFill& f) const {
@@ -339,13 +338,11 @@ get_cairo_pattern(const FillStyle& style, const SWFCxForm& cx)
 class CairoPathRunner : public PathParser
 {
 public:
-  CairoPathRunner(Renderer_cairo& renderer,
-                  const std::vector<Path>& paths,
+  CairoPathRunner(const std::vector<Path>& paths,
                   const std::vector<FillStyle>& FillStyles, cairo_t* context)
   : PathParser(paths, FillStyles.size()),
-    _renderer(renderer),
     _cr(context),
-    _pattern(0),
+    _pattern(nullptr),
     _FillStyles(FillStyles)
   {
   }
@@ -372,7 +369,7 @@ public:
     // Surfaces are owned by const bitmap_info_cairo
     if (cairo_pattern_get_type(_pattern) != CAIRO_PATTERN_TYPE_SURFACE) {
       cairo_pattern_destroy(_pattern);
-      _pattern = 0;
+      _pattern = nullptr;
     }
   }
 
@@ -410,7 +407,6 @@ public:
   }
 
 private:
-  Renderer_cairo& _renderer;
   cairo_t* _cr;
   cairo_pattern_t* _pattern;
   const std::vector<FillStyle>& _FillStyles;
@@ -451,7 +447,7 @@ Renderer_cairo::Renderer_cairo()
     : _video_bufsize(0),
       _drawing_mask(false)
 {    
-    _cr = cairo_create(NULL);
+    _cr = cairo_create(nullptr);
     cairo_matrix_init_scale(&_stage_mat, 1/20.0f, 1/20.0f);
 }
   
@@ -461,10 +457,10 @@ Renderer_cairo::~Renderer_cairo()
 }
 
 CachedBitmap*
-Renderer_cairo::createCachedBitmap(std::auto_ptr<image::GnashImage> im) 
+Renderer_cairo::createCachedBitmap(std::unique_ptr<image::GnashImage> im) 
 {
     int buf_size = im->width() * im->height() * 4;
-    boost::uint8_t* buffer = new boost::uint8_t[buf_size];
+    std::uint8_t* buffer = new std::uint8_t[buf_size];
 
     switch (im->type())
     {
@@ -529,7 +525,7 @@ Renderer_cairo::drawVideoFrame(image::GnashImage* baseframe, const Transform& xf
     size_t buf_size = w * h * 4;
     
     if (_video_bufsize < buf_size) {
-        _video_buffer.reset(new boost::uint8_t[buf_size]);
+        _video_buffer.reset(new std::uint8_t[buf_size]);
         _video_bufsize = buf_size;
     }    
     
@@ -561,7 +557,7 @@ Renderer_cairo::drawVideoFrame(image::GnashImage* baseframe, const Transform& xf
     cairo_save(_cr);
     cairo_set_source(_cr, pattern);
     
-    geometry::Range2d<boost::int32_t> range = bounds->getRange();
+    geometry::Range2d<std::int32_t> range = bounds->getRange();
     xform.matrix.transform(range);
   
     cairo_rectangle(_cr, range.getMinX(), range.getMinY(), range.width(),
@@ -634,7 +630,7 @@ Renderer_cairo::begin_display(const rgba& bg_color,
 
 
     for (size_t rno=0; rno < _invalidated_ranges.size(); rno++) {
-        const geometry::Range2d<boost::int32_t>& range =
+        const geometry::Range2d<std::int32_t>& range =
             _invalidated_ranges.getRange(rno);
         if (range.isNull()) {
             continue;
@@ -733,8 +729,8 @@ Renderer_cairo::draw_poly(const std::vector<point>& corners,
         
     cairo_move_to(_cr, corners[0].x, corners[0].y);
     
-    for (size_t i = 0; i < corners.size(); ++i) {
-        cairo_line_to(_cr, corners[i].x, corners[i].y);
+    for (const point& corner : corners) {
+        cairo_line_to(_cr, corner.x, corner.y);
     }
     
     cairo_close_path(_cr);
@@ -810,10 +806,8 @@ Renderer_cairo::add_path(cairo_t* cr, const Path& cur_path)
     snap_to_half_pixel(cr, x, y);
     cairo_move_to(cr, x, y);
     
-    for (std::vector<Edge>::const_iterator it = cur_path.m_edges.begin(),
-         end = cur_path.m_edges.end(); it != end; ++it) {
-        const Edge& cur_edge = *it;
-      
+    for (const Edge& cur_edge : cur_path.m_edges) {
+
         if (cur_edge.straight()) {
             x = cur_edge.ap.x;
             y = cur_edge.ap.y;
@@ -924,9 +918,7 @@ Renderer_cairo::draw_outlines(const PathVec& path_vec,
                               const SWFCxForm& cx,
                               const SWFMatrix& mat)
 {
-    for (PathVec::const_iterator it = path_vec.begin(), end = path_vec.end();
-         it != end; ++it) {
-        const Path& cur_path = *it;
+    for (const Path& cur_path : path_vec) {
 
         if (!cur_path.m_line) {
             continue;
@@ -944,7 +936,7 @@ Renderer_cairo::draw_subshape(const PathVec& path_vec, const SWFMatrix& mat,
                               const std::vector<FillStyle>& FillStyles,
                               const std::vector<LineStyle>& line_styles)
 { 
-    CairoPathRunner runner(*this, path_vec, FillStyles, _cr);
+    CairoPathRunner runner(path_vec, FillStyles, _cr);
     runner.run(cx, mat);
 
     draw_outlines(path_vec, line_styles, cx, mat);
@@ -953,10 +945,8 @@ Renderer_cairo::draw_subshape(const PathVec& path_vec, const SWFMatrix& mat,
 void
 Renderer_cairo::draw_mask(const PathVec& path_vec)
 {    
-    for (PathVec::const_iterator it = path_vec.begin(), end = path_vec.end();
-         it != end; ++it) {
-        const Path& cur_path = *it;
-      
+    for (const Path& cur_path : path_vec) {
+
         if (cur_path.m_fill0 || cur_path.m_fill1) {
             _masks.back().push_back(cur_path);     
         }
@@ -966,10 +956,8 @@ Renderer_cairo::draw_mask(const PathVec& path_vec)
 void
 Renderer_cairo::add_paths(const PathVec& path_vec)
 {
-    for (PathVec::const_iterator it = path_vec.begin(), end = path_vec.end();
-         it != end; ++it) {
-        const Path& cur_path = *it;
-        
+    for (const Path& cur_path : path_vec) {
+
         add_path(_cr, cur_path);
     }  
 }
@@ -980,7 +968,8 @@ Renderer_cairo::apply_matrix_to_paths(std::vector<Path>& paths,
                                       const SWFMatrix& mat)
 {  
     std::for_each(paths.begin(), paths.end(),
-                  boost::bind(&Path::transform, _1, boost::ref(mat)));
+                  std::bind(&Path::transform, std::placeholders::_1,
+                            std::ref(mat)));
 }
   
 void
@@ -990,19 +979,18 @@ Renderer_cairo::drawShape(const SWF::ShapeRecord& shape, const Transform& xform)
     
     CairoScopeMatrix mat_transformer(_cr, xform.matrix);
 
-    for (SWF::ShapeRecord::Subshapes::const_iterator it = shape.subshapes().begin(),
-         end = shape.subshapes().end(); it != end; ++it) {
+    for (const SWF::Subshape& subshape: shape.subshapes()) {
 
         if (_drawing_mask) {      
-            PathVec scaled_path_vec = it->paths();
+            PathVec scaled_path_vec = subshape.paths();
         
             apply_matrix_to_paths(scaled_path_vec, xform.matrix);
             draw_mask(scaled_path_vec); 
             continue;
         }
 
-        draw_subshape(it->paths(), xform.matrix, xform.colorTransform,
-                it->fillStyles(), it->lineStyles());
+        draw_subshape(subshape.paths(), xform.matrix, xform.colorTransform,
+                subshape.fillStyles(), subshape.lineStyles());
     }
 }
   
diff --git a/librender/cairo/Renderer_cairo.h b/librender/cairo/Renderer_cairo.h
index 4dca89a..b69d9b6 100644
--- a/librender/cairo/Renderer_cairo.h
+++ b/librender/cairo/Renderer_cairo.h
@@ -21,7 +21,6 @@
 #define BACKEND_RENDER_HANDLER_CAIRO_H
 
 #include <vector>
-#include <boost/scoped_array.hpp>
 #include <cairo/cairo.h>
 #include "Renderer.h"
 #include "Geometry.h"
@@ -45,7 +44,7 @@ public:
 
     std::string description() const { return "Cairo"; }
 
-    CachedBitmap* createCachedBitmap(std::auto_ptr<image::GnashImage> im);
+    CachedBitmap* createCachedBitmap(std::unique_ptr<image::GnashImage> im);
 
     void drawVideoFrame(image::GnashImage* baseframe, const Transform& xform,
                                 const SWFRect* bounds, bool smooth);
@@ -60,7 +59,7 @@ public:
     void set_invalidated_regions(const InvalidatedRanges& ranges);
       
     virtual Renderer* startInternalRender(image::GnashImage& /*im*/) {
-        return 0;
+        return nullptr;
     }
 
     virtual void endInternalRender() {}
@@ -127,7 +126,7 @@ public:
 private:
     /// The cairo context.
     cairo_t* _cr;
-    boost::scoped_array<boost::uint8_t> _video_buffer;
+    std::unique_ptr<std::uint8_t[]> _video_buffer;
     std::vector<PathVec> _masks;
     size_t _video_bufsize;
     bool _drawing_mask;
diff --git a/librender/opengl/Renderer_ogl.cpp b/librender/opengl/Renderer_ogl.cpp
index 652ee6e..b377a9e 100644
--- a/librender/opengl/Renderer_ogl.cpp
+++ b/librender/opengl/Renderer_ogl.cpp
@@ -24,11 +24,12 @@
 #include "Renderer_ogl.h"
 
 #include <boost/utility.hpp>
-#include <boost/bind.hpp>
+#include <iterator>
+#include <functional>
 #include <list>
 #include <cstring>
 #include <cmath>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #include "swf/ShapeRecord.h"
 #include "GnashEnums.h"
@@ -127,7 +128,7 @@ public:
       WRAP_CLAMP
     };
 
-    bitmap_info_ogl(std::auto_ptr<image::GnashImage> image, GLenum pixelformat,
+    bitmap_info_ogl(std::unique_ptr<image::GnashImage> image, GLenum pixelformat,
                     bool ogl_accessible);
 
     ~bitmap_info_ogl();
@@ -162,10 +163,10 @@ public:
 private:
     inline bool ogl_accessible() const;
     void setup() const;    
-    void upload(boost::uint8_t* data, size_t width, size_t height) const;
+    void upload(std::uint8_t* data, size_t width, size_t height) const;
     
-    mutable boost::scoped_ptr<image::GnashImage> _img;
-    mutable boost::scoped_ptr<image::GnashImage> _cache;
+    mutable std::unique_ptr<image::GnashImage> _img;
+    mutable std::unique_ptr<image::GnashImage> _cache;
     GLenum _pixel_format;
     GLenum _ogl_img_type;
     mutable bool _ogl_accessible;  
@@ -223,7 +224,7 @@ public:
   OSRenderMesa(size_t width, size_t height)
     : _width(width),
       _height(height),
-      _buffer(new boost::uint8_t[width * height * 3]), 
+      _buffer(new std::uint8_t[width * height * 3]),
 #if OSMESA_MAJOR_VERSION * 100 + OSMESA_MINOR_VERSION >= 305
       _context(OSMesaCreateContextExt(OSMESA_RGB, 0, 2, 0, NULL))
 #else
@@ -279,7 +280,7 @@ public:
 private:
   size_t _width;
   size_t _height;
-  boost::scoped_array<boost::uint8_t> _buffer;
+  std::unique_ptr<std::uint8_t[]> _buffer;
   OSMesaContext _context;  
 };
 
@@ -357,7 +358,7 @@ class
 PointSerializer
 {
 public:
-    PointSerializer(std::vector<boost::int16_t>& dest)
+    PointSerializer(std::vector<std::int16_t>& dest)
         :
         _dest(dest)
     {}
@@ -368,7 +369,7 @@ public:
         _dest.push_back(p.y);
     }
 private:
-    std::vector<boost::int16_t>& _dest;
+    std::vector<std::int16_t>& _dest;
 };
 
 }
@@ -413,10 +414,8 @@ std::vector<oglVertex> interpolate(const std::vector<Edge>& edges,
   std::vector<oglVertex> shape_points;
   shape_points.push_back(oglVertex(anchor));
   
-  for (std::vector<Edge>::const_iterator it = edges.begin(), end = edges.end();
-        it != end; ++it) {
-      const Edge& the_edge = *it;
-      
+  for (const Edge& the_edge : edges) {
+
       point target(the_edge.ap.x, the_edge.ap.y);
 
       if (the_edge.straight()) {
@@ -496,9 +495,8 @@ Tesselator::tesselate()
 {
   gluTessEndPolygon(_tessobj);
 
-  for (std::vector<GLdouble*>::iterator it = _vertices.begin(),
-       end = _vertices.end(); it != end; ++it) {
-    delete [] *it;
+  for (GLdouble* vertex: _vertices) {
+    delete [] vertex;
   }
 
   _vertices.clear();
@@ -540,7 +538,7 @@ bool isEven(const size_t& n)
   return n % 2 == 0;
 }
 
-bitmap_info_ogl::bitmap_info_ogl(std::auto_ptr<image::GnashImage> image,
+bitmap_info_ogl::bitmap_info_ogl(std::unique_ptr<image::GnashImage> image,
         GLenum pixelformat, bool ogl_accessible)
 :
   _img(image.release()),
@@ -596,8 +594,8 @@ bitmap_info_ogl::setup() const
             while (h < _img->height()) { h <<= 1; }
         }
     
-        boost::scoped_array<boost::uint8_t> resized_data(
-                new boost::uint8_t[w * h * _img->channels()]);
+        std::unique_ptr<std::uint8_t[]> resized_data(
+                new std::uint8_t[w * h * _img->channels()]);
         // Q: Would mipmapping these textures aid in performance?
     
         GLint rv = gluScaleImage(_pixel_format, _img->width(),
@@ -615,7 +613,7 @@ bitmap_info_ogl::setup() const
 }
 
 void
-bitmap_info_ogl::upload(boost::uint8_t* data, size_t width, size_t height) const
+bitmap_info_ogl::upload(std::uint8_t* data, size_t width, size_t height) const
 {
   glTexParameteri(_ogl_img_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   
@@ -692,7 +690,7 @@ void
 for_each(C& container, R (T::*pmf)(const A&),const A& arg)
 {
     std::for_each(container.begin(), container.end(),
-                  boost::bind(pmf, _1, boost::ref(arg)));
+                  std::bind(pmf, std::placeholders::_1, std::ref(arg)));
 }
 
 
@@ -703,6 +701,8 @@ public:
   Renderer_ogl()
     : _xscale(1.0),
       _yscale(1.0),
+      _width(0.0),
+      _height(0.0),
       _drawing_mask(false)
   {
   }
@@ -760,12 +760,12 @@ public:
 #endif
   }    
 
-  virtual CachedBitmap* createCachedBitmap(std::auto_ptr<image::GnashImage> im)
+  virtual CachedBitmap* createCachedBitmap(std::unique_ptr<image::GnashImage> im)
   {
       switch (im->type()) {
           case image::TYPE_RGB:
           {
-              std::auto_ptr<image::GnashImage> rgba(
+              std::unique_ptr<image::GnashImage> rgba(
                       new image::ImageRGBA(im->width(), im->height()));
 
               image::GnashImage::iterator it = rgba->begin();
@@ -773,18 +773,18 @@ public:
                   *it++ = *(im->begin() + i);
                   if (!(i % 3)) *it++ = 0xff;
               }
-              im = rgba;
+              im = std::move(rgba);
           }
           case image::TYPE_RGBA:
-                return new bitmap_info_ogl(im, GL_RGBA, ogl_accessible());
+                return new bitmap_info_ogl(std::move(im), GL_RGBA, ogl_accessible());
           default:
                 std::abort();
       }
   }
 
-  boost::shared_ptr<GnashTexture> getCachedTexture(image::GnashImage *frame)
+  std::shared_ptr<GnashTexture> getCachedTexture(image::GnashImage *frame)
   {
-      boost::shared_ptr<GnashTexture> texture;
+      std::shared_ptr<GnashTexture> texture;
       GnashTextureFormat frameFormat(frame->type());
       unsigned int frameFlags;
 
@@ -803,7 +803,7 @@ public:
       }
 
       // Look for a texture with the same dimensions and type
-      std::list< boost::shared_ptr<GnashTexture> >::iterator it;
+      std::list< std::shared_ptr<GnashTexture> >::iterator it;
       for (it = _cached_textures.begin(); it != _cached_textures.end(); ++it) {
           if ((*it)->width() == frame->width() &&
               (*it)->height() == frame->height() &&
@@ -871,7 +871,7 @@ public:
 
     glEndList();
 
-    boost::shared_ptr<GnashTexture> texture = getCachedTexture(frame);
+    std::shared_ptr<GnashTexture> texture = getCachedTexture(frame);
     if (!texture.get())
         return;
 
@@ -908,7 +908,7 @@ public:
   }
 
 private:  
-  void reallyDrawVideoFrame(boost::shared_ptr<GnashTexture> texture, const SWFMatrix* m, const SWFRect* bounds)
+  void reallyDrawVideoFrame(std::shared_ptr<GnashTexture> texture, const SWFMatrix* m, const SWFRect* bounds)
   {
     glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT);
     glPushMatrix();
@@ -957,7 +957,7 @@ private:
 public:
       
     virtual Renderer* startInternalRender(image::GnashImage& /*im*/) {
-        return 0;
+        return nullptr;
     }
 
     virtual void endInternalRender() {}
@@ -1067,8 +1067,8 @@ public:
     glDeleteLists(1, _render_indices.size());
     _render_indices.clear();
 
-    for (size_t i = 0; i < _render_textures.size(); i++)
-        _cached_textures.push_front(_render_textures[i]);
+    for (auto& texture : _render_textures)
+        _cached_textures.push_front(texture);
     _render_textures.clear();
   
     check_error();
@@ -1088,7 +1088,7 @@ public:
 
     glColor3ub(color.m_r, color.m_g, color.m_b);
 
-    std::vector<boost::int16_t> pointList;
+    std::vector<std::int16_t> pointList;
     pointList.reserve(numPoints * 2);
     std::for_each(coords.begin(), coords.end(), PointSerializer(pointList));
 
@@ -1099,7 +1099,7 @@ public:
 
     // Draw a dot on the beginning and end coordinates to round lines.
     // glVertexPointer: skip all but the first and last coordinates in the line.
-    glVertexPointer(2, GL_SHORT, (sizeof(boost::int16_t) * 2) *
+    glVertexPointer(2, GL_SHORT, (sizeof(std::int16_t) * 2) *
             (numPoints - 1), &pointList.front());
     glEnable(GL_POINT_SMOOTH); // Draw a round (antialiased) point.
     glDrawArrays(GL_POINTS, 0, 2);
@@ -1184,7 +1184,7 @@ public:
 
     // Call add_paths for each mask.
     std::for_each(_masks.begin(), _masks.end(),
-      boost::bind(&Renderer_ogl::add_paths, this, _1));    
+      std::bind(&Renderer_ogl::add_paths, this, std::placeholders::_1));
           
     glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);
     glStencilFunc(GL_EQUAL, _masks.size(), _masks.size());
@@ -1296,7 +1296,7 @@ public:
 
     if (target_x == to_connect.ap.x &&
         target_y == to_connect.ap.y) {
-      return NULL;
+      return nullptr;
     }
   
     for (std::list<const Path*>::const_iterator it = path_refs.begin(), end = path_refs.end();
@@ -1320,17 +1320,15 @@ public:
     }
   
   
-    return NULL;  
+    return nullptr;
   }
   
   PathVec normalize_paths(const PathVec &paths)
   {
     PathVec normalized;
   
-    for (PathVec::const_iterator it = paths.begin(), end = paths.end();
-         it != end; ++it) {
-      const Path& cur_path = *it;
-      
+    for (const Path& cur_path : paths) {
+
       if (cur_path.m_edges.empty()) {
         continue;
       
@@ -1478,9 +1476,7 @@ public:
   
     PathPointMap pathpoints;
     
-    for (PathVec::const_iterator it = path_vec.begin(), end = path_vec.end();
-         it != end; ++it) {
-      const Path& cur_path = *it;
+    for (const Path& cur_path : path_vec) {
 
       if (!cur_path.m_edges.size()) {
         continue;
@@ -1509,10 +1505,8 @@ public:
                 const std::vector<LineStyle>& line_styles)
   {
   
-    for (PathVec::const_iterator it = path_vec.begin(), end = path_vec.end();
-         it != end; ++it) {
-      const Path& cur_path = *it;
-      
+    for (const Path& cur_path : path_vec) {
+
       if (!cur_path.m_line) {
         continue;
       }
@@ -1553,9 +1547,7 @@ public:
     std::list<PathPtrVec> contours;
     
     
-    for (PathPtrVec::const_iterator it = paths.begin(), end = paths.end();
-         it != end; ++it) {
-      const Path* cur_path = *it;
+    for (const Path* cur_path : paths) {
       path_refs.push_back(cur_path);
     }
         
@@ -1581,7 +1573,7 @@ public:
         contour.push_back(connector);
 
         const Path* tmp = connector;
-        connector = find_connecting_path(*connector, std::list<const Path*>(boost::next(it), end));
+        connector = find_connecting_path(*connector, std::list<const Path*>(std::next(it), end));
   
         // make sure we don't iterate over the connecting path in the for loop.
         path_refs.remove(tmp);
@@ -1597,10 +1589,8 @@ public:
   
   void draw_mask(const PathVec& path_vec)
   {    
-    for (PathVec::const_iterator it = path_vec.begin(), end = path_vec.end();
-         it != end; ++it) {
-      const Path& cur_path = *it;
-      
+    for (const Path& cur_path : path_vec) {
+
       if (cur_path.m_fill0 || cur_path.m_fill1) {
         _masks.back().push_back(cur_path);
         _masks.back().back().m_line = 0;    
@@ -1612,10 +1602,8 @@ public:
   paths_by_style(const PathVec& path_vec, unsigned int style)
   {
     PathPtrVec paths;
-    for (PathVec::const_iterator it = path_vec.begin(), end = path_vec.end();
-         it != end; ++it) {
-      const Path& cur_path = *it;
-      
+    for (const Path& cur_path : path_vec) {
+
       if (cur_path.m_fill0 == style) {
         paths.push_back(&cur_path);
       }
@@ -1634,7 +1622,8 @@ public:
   apply_matrix_to_paths(std::vector<Path>& paths, const SWFMatrix& mat)
   {  
     std::for_each(paths.begin(), paths.end(),
-                  boost::bind(&Path::transform, _1, boost::ref(mat)));
+                  std::bind(&Path::transform, std::placeholders::_1,
+                  std::ref(mat)));
                   
     //for_each(paths, &path::transform, mat);
   }  
@@ -1666,9 +1655,8 @@ public:
         
         _tesselator.beginContour();
                    
-        for (PathPtrVec::const_iterator it = refs.begin(), end = refs.end();
-             it != end; ++it) {
-          const Path& cur_path = *(*it);          
+        for (const auto& ref : refs) {
+          const Path& cur_path = *ref;
           
           assert(pathpoints.find(&cur_path) != pathpoints.end());
 
@@ -1729,9 +1717,8 @@ public:
     
     oglScopeMatrix scope_mat(xform.matrix);
 
-    for (SWF::ShapeRecord::Subshapes::const_iterator it = shape.subshapes().begin(),
-         end = shape.subshapes().end(); it != end; ++it) {
-        const PathVec& path_vec = it->paths();
+    for (const SWF::Subshape& subshape : shape.subshapes()) {
+        const PathVec& path_vec = subshape.paths();
 
         if (!path_vec.size()) {
             // No paths. Nothing to draw...
@@ -1754,8 +1741,8 @@ public:
             continue; // invisible character
         }  
 
-        draw_subshape(it->paths(), xform.matrix, xform.colorTransform,
-                      it->fillStyles(), it->lineStyles());
+        draw_subshape(path_vec, xform.matrix, xform.colorTransform,
+                      subshape.fillStyles(), subshape.lineStyles());
     }
   }
 
@@ -1837,12 +1824,12 @@ private:
   std::vector<PathVec> _masks;
   bool _drawing_mask;
   
-  std::vector<boost::uint8_t> _render_indices;
-  std::vector< boost::shared_ptr<GnashTexture> > _render_textures;
-  std::list< boost::shared_ptr<GnashTexture> > _cached_textures;
+  std::vector<std::uint8_t> _render_indices;
+  std::vector< std::shared_ptr<GnashTexture> > _render_textures;
+  std::list< std::shared_ptr<GnashTexture> > _cached_textures;
   
 #ifdef OSMESA_TESTING
-  std::auto_ptr<OSRenderMesa> _offscreen;
+  std::unique_ptr<OSRenderMesa> _offscreen;
 #endif
 }; // class Renderer_ogl
   
@@ -1861,7 +1848,7 @@ namespace {
 // TODO: this function is rubbish and shouldn't survive a rewritten OGL
 // renderer.
 rgba
-sampleGradient(const GradientFill& fill, boost::uint8_t ratio)
+sampleGradient(const GradientFill& fill, std::uint8_t ratio)
 {
 
     // By specs, first gradient should *always* be 0, 
@@ -1908,7 +1895,7 @@ sampleGradient(const GradientFill& fill, boost::uint8_t ratio)
 const CachedBitmap*
 createGradientBitmap(const GradientFill& gf, Renderer& renderer)
 {
-    std::auto_ptr<image::ImageRGBA> im;
+    std::unique_ptr<image::ImageRGBA> im;
 
     switch (gf.type())
     {
@@ -1951,7 +1938,7 @@ createGradientBitmap(const GradientFill& gf, Renderer& renderer)
     }
 
     const CachedBitmap* bi = renderer.createCachedBitmap(
-                    static_cast<std::auto_ptr<image::GnashImage> >(im));
+                    static_cast<std::unique_ptr<image::GnashImage> >(std::move(im)));
 
     return bi;
 }
diff --git a/librender/opengles1/Renderer_gles1.cpp b/librender/opengles1/Renderer_gles1.cpp
index 47a0663..e8b04b1 100644
--- a/librender/opengles1/Renderer_gles1.cpp
+++ b/librender/opengles1/Renderer_gles1.cpp
@@ -56,7 +56,7 @@
 #include "swf/ShapeRecord.h"
 
 #include <boost/utility.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 
 #include "Renderer_gles1.h"
 #include "GnashDevice.h"
@@ -108,7 +108,7 @@ Renderer_gles1::init(float /* x */, float /* y */)
 }
 
 CachedBitmap *
-Renderer_gles1::createCachedBitmap(std::auto_ptr<gnash::image::GnashImage>)
+Renderer_gles1::createCachedBitmap(std::unique_ptr<gnash::image::GnashImage>)
 {
     GNASH_REPORT_FUNCTION;
 
diff --git a/librender/opengles1/Renderer_gles1.h b/librender/opengles1/Renderer_gles1.h
index 9ca0488..081c3cd 100644
--- a/librender/opengles1/Renderer_gles1.h
+++ b/librender/opengles1/Renderer_gles1.h
@@ -118,9 +118,9 @@ public:
 private:
     inline bool ogl_accessible() const;
     void setup() const;    
-    void upload(boost::uint8_t* data, size_t width, size_t height) const;
+    void upload(std::uint8_t* data, size_t width, size_t height) const;
     
-    mutable std::auto_ptr<GnashImage> _img;
+    mutable std::unique_ptr<GnashImage> _img;
     GLenum _pixel_format;
     GLenum _ogl_img_type;
     mutable bool _ogl_accessible;  
@@ -139,7 +139,7 @@ public:
     ~Renderer_gles1();
         
     void init(float x, float y);
-    CachedBitmap *createCachedBitmap(std::auto_ptr<image::GnashImage> im);
+    CachedBitmap *createCachedBitmap(std::unique_ptr<image::GnashImage> im);
 
     void world_to_pixel(int& x, int& y, float world_x, float world_y) const;
     gnash::geometry::Range2d<int> world_to_pixel(const gnash::SWFRect& wb) const;
diff --git a/librender/openvg/OpenVGBitmap.cpp b/librender/openvg/OpenVGBitmap.cpp
index 2482981..2fffe61 100644
--- a/librender/openvg/OpenVGBitmap.cpp
+++ b/librender/openvg/OpenVGBitmap.cpp
@@ -16,7 +16,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/scoped_ptr.hpp>
+#include <memory>
 #include <iostream>
 
 #include "Geometry.h"
@@ -170,7 +170,7 @@ OpenVGBitmap::createRadialBitmap(float cx, float cy, float fx, float fy,
 
     // Color Ramp is the same as for linear gradient
     size_t entries = records.size() * 5;
-    boost::scoped_array<VGfloat> ramps(new VGfloat[entries]);
+    std::unique_ptr<VGfloat[]> ramps(new VGfloat[entries]);
     
     int j = 0;
     for (size_t i=0; i!= records.size(); ++i) {
@@ -235,7 +235,7 @@ OpenVGBitmap::createLinearBitmap(float x0, float y0, float x1, float y1,
     // function will generate an error if the number of values
     // submitted is not a multiple of 5 (zero is acceptable)
     size_t entries = records.size() * 5;
-    boost::scoped_array<VGfloat> ramps(new VGfloat[entries]);    
+    std::unique_ptr<VGfloat[]> ramps(new VGfloat[entries]);    
     int j = 0;
     for (size_t i=0; i!= records.size(); ++i) {
         std::cerr << "The record ratio is: " << records[i].ratio/255.0f;
diff --git a/librender/openvg/OpenVGBitmap.h b/librender/openvg/OpenVGBitmap.h
index fd812d9..cb31955 100644
--- a/librender/openvg/OpenVGBitmap.h
+++ b/librender/openvg/OpenVGBitmap.h
@@ -60,7 +60,7 @@ public:
     VGPaint getFillPaint() const { return _vgpaint; }
     int getWidth() { return _image->width(); }
     int getHeight() { return _image->height(); }
-    boost::uint8_t *getData() const { return _image->begin(); }
+    std::uint8_t *getData() const { return _image->begin(); }
 
     OpenVGBitmap *createRadialBitmap(float x0, float y0, float x1, float y1,
                                      float radial, const SWFCxForm& cx,
@@ -76,7 +76,7 @@ public:
                                      CachedBitmap *bitmap, VGPaint paint);
     
 private:
-    boost::scoped_ptr<image::GnashImage> _image;
+    std::unique_ptr<image::GnashImage> _image;
     VGImageFormat   _pixel_format;
     VGImage         _vgimage;
     VGPaint         _vgpaint;
diff --git a/librender/openvg/OpenVGRenderer.cpp b/librender/openvg/OpenVGRenderer.cpp
index 8ad89aa..d1f5fbc 100644
--- a/librender/openvg/OpenVGRenderer.cpp
+++ b/librender/openvg/OpenVGRenderer.cpp
@@ -24,8 +24,9 @@
 #include <cstring>
 #include <cmath>
 #include <iostream>
+#include <iterator>
+#include <functional>
 #include <boost/utility.hpp>
-#include <boost/bind.hpp>
 
 #include "log.h"
 #include "RGBA.h"
@@ -198,7 +199,7 @@ void
 for_each(C& container, R (T::*pmf)(const A&),const A& arg)
 {
     std::for_each(container.begin(), container.end(),
-                  boost::bind(pmf, _1, boost::ref(arg)));
+                  std::bind(pmf, _1, std::ref(arg)));
 }
 
 Renderer_ovg::Renderer_ovg()
@@ -298,7 +299,7 @@ Renderer_ovg::~Renderer_ovg()
 // bitmap fill style. We only cache the GnashImage here, as a
 // VGImage can't be created yet until the renderer is initialized.
 CachedBitmap *
-Renderer_ovg::createCachedBitmap(std::auto_ptr<image::GnashImage> im)
+Renderer_ovg::createCachedBitmap(std::unique_ptr<image::GnashImage> im)
 {
     // GNASH_REPORT_FUNCTION;
 
@@ -630,7 +631,7 @@ Renderer_ovg::apply_mask()
 #endif
 // Call add_paths for each mask.
     std::for_each(_masks.begin(), _masks.end(),
-                  boost::bind(&Renderer_ovg::add_paths, this, _1));
+                  std::bind(&Renderer_ovg::add_paths, this, _1));
     vgSeti(VG_MASKING, VG_TRUE);
     
     vgLoadMatrix (omat);        // restore the current matrix
@@ -960,7 +961,7 @@ Renderer_ovg::get_contours(const PathPtrVec &paths)
             contour.push_back(connector);
             
             const Path* tmp = connector;
-            connector = find_connecting_path(*connector, std::list<const Path*>(boost::next(it), end));
+            connector = find_connecting_path(*connector, std::list<const Path*>(std::next(it), end));
             
             // make sure we don't iterate over the connecting path in the for loop.
             path_refs.remove(tmp);
@@ -1049,7 +1050,7 @@ Renderer_ovg::apply_matrix_to_paths(std::vector<Path>& paths, const SWFMatrix& m
     // GNASH_REPORT_FUNCTION;
 
     std::for_each(paths.begin(), paths.end(),
-                  boost::bind(&Path::transform, _1, boost::ref(mat)));
+                  std::bind(&Path::transform, _1, std::ref(mat)));
 }  
 
 void
diff --git a/librender/openvg/OpenVGRenderer.h b/librender/openvg/OpenVGRenderer.h
index 535a73e..de520a6 100644
--- a/librender/openvg/OpenVGRenderer.h
+++ b/librender/openvg/OpenVGRenderer.h
@@ -32,8 +32,7 @@
 #include <EGL/egl.h>
 #include <vector>
 #include <list>
-#include <boost/scoped_array.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #include "Geometry.h"
 #include "Renderer.h"
@@ -81,7 +80,7 @@ public:
     ~Renderer_ovg();
         
     void init(float x, float y);
-    CachedBitmap *createCachedBitmap(std::auto_ptr<image::GnashImage> im);
+    CachedBitmap *createCachedBitmap(std::unique_ptr<image::GnashImage> im);
 
     void drawVideoFrame(gnash::image::GnashImage*, const gnash::Transform&,
                         const gnash::SWFRect*, bool);
diff --git a/librender/testr.cpp b/librender/testr.cpp
index 986cb1e..5fa0ff5 100644
--- a/librender/testr.cpp
+++ b/librender/testr.cpp
@@ -313,7 +313,7 @@ test_device(Renderer *renderer, const std::string &type)
     cout << endl << "Testing " << type << " Device" << endl;
 
 #if 0
-    boost::shared_array<renderer::GnashDevice::dtype_t> devs = renderer->probeDevices();
+    std::unique_ptr<renderer::GnashDevice::dtype_t[]> devs = renderer->probeDevices();
     if (devs) {
         runtest.pass("Renderer::probeDevices()");
     } else {
@@ -376,7 +376,7 @@ test_renderer(Renderer *renderer, const std::string &type)
 #endif
     
     image::GnashImage *frame1 = new image::ImageRGBA(10, 12);
-    std::auto_ptr<image::GnashImage> im1(frame1);
+    std::unique_ptr<image::GnashImage> im1(frame1);
     CachedBitmap *cb = renderer->createCachedBitmap(im1);
     if (cb) {
         image::GnashImage &gi = cb->image();
@@ -405,9 +405,9 @@ test_renderer(Renderer *renderer, const std::string &type)
     /// @vertex_count the number of x-y coordinates (vertices).
     /// @color the color to be used to draw the line strip.
     /// @mat the SWFMatrix to be used to transform the vertices.
-    boost::uint16_t x = 10;
-    boost::uint16_t y = 10;
-    boost::uint16_t h = 10;
+    std::uint16_t x = 10;
+    std::uint16_t y = 10;
+    std::uint16_t h = 10;
     std::vector<point> box = boost::assign::list_of
         (point(x, y))
         (point(x, y + h));
@@ -472,7 +472,7 @@ test_renderer(Renderer *renderer, const std::string &type)
 //   drawglyph.stop();
 
 #if 0
-    boost::shared_ptr<IOChannel> io;
+    std::unique_ptr<IOChannel> io;
     FileType ftype;
     Timer renderi("renderToImage");
     renderer->renderToImage(io, ftype);
@@ -482,7 +482,7 @@ test_renderer(Renderer *renderer, const std::string &type)
 
     CachedBitmap *bitmap = 0;
     image::GnashImage *frame2 = new image::ImageRGBA(10, 10);
-    std::auto_ptr<image::GnashImage> im(frame2);
+    std::unique_ptr<image::GnashImage> im(frame2);
     Timer cbit("createCachedBitmap");
     bitmap = renderer->createCachedBitmap(im);
     cbit.stop();
@@ -600,7 +600,7 @@ test_iterators(Renderer *renderer, const std::string &type)
     image::GnashImage *frame = new image::ImageRGBA(10, 10);
     // gnash::GnashVaapiImage *foo = static_cast<gnash::GnashVaapiImage *>(frame);
     // gnash::GnashVaapiImageProxy *bar = new gnash::GnashVaapiImageProxy(foo, a.x, a.y, c.x - a.x, c.y - a.y);
-    std::auto_ptr<image::GnashImage> rgba(frame);
+    std::unique_ptr<image::GnashImage> rgba(frame);
 //    image.reset(new gnash::GnashVaapiImageProxy(foo, a.x, a.y, c.x - a.x, c.y - a.y));
 
     renderer->addRenderImage(image);
@@ -618,7 +618,7 @@ test_iterators(Renderer *renderer, const std::string &type)
     }
     
 #if 0
-    typedef boost::shared_ptr<GnashVaapiImageProxy> RenderImage;
+    typedef std::shared_ptr<GnashVaapiImageProxy> RenderImage;
     typedef std::vector<RenderImage> RenderImages;
 
     // Get first render image
@@ -638,7 +638,7 @@ test_iterators(Renderer *renderer, const std::string &type)
 #if 0
 FIXME:
  add tests for
-Renderer_ovg::createBitmapInfo(std::auto_ptr<GnashImage> im)
+Renderer_ovg::createBitmapInfo(std::unique_ptr<GnashImage> im)
 #endif
 
 // Local Variables:
diff --git a/libsound/AuxStream.h b/libsound/AuxStream.h
index 5f87fea..f81f8e3 100644
--- a/libsound/AuxStream.h
+++ b/libsound/AuxStream.h
@@ -22,14 +22,14 @@
 
 #include "InputStream.h" // for inheritance
 
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 
 namespace gnash {
 namespace sound {
 
 /// @see sound_handler::attach_aux_streamer
 typedef unsigned int (*aux_streamer_ptr)(void *udata,
-        boost::int16_t* samples, unsigned int nSamples, bool& eof);
+        std::int16_t* samples, unsigned int nSamples, bool& eof);
 
 class AuxStream : public InputStream {
 public:
@@ -42,7 +42,7 @@ public:
     {}
 
     // See dox in InputStream.h
-    unsigned int fetchSamples(boost::int16_t* to, unsigned int nSamples)
+    unsigned int fetchSamples(std::int16_t* to, unsigned int nSamples)
     {
         unsigned int wrote = _cb(_cbArg, to, nSamples, _eof);
         _samplesFetched += wrote;
diff --git a/libsound/EmbedSound.cpp b/libsound/EmbedSound.cpp
index 9f18ba0..a4853d8 100644
--- a/libsound/EmbedSound.cpp
+++ b/libsound/EmbedSound.cpp
@@ -21,7 +21,7 @@
 #include "EmbedSound.h"
 
 #include <vector>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "EmbedSoundInst.h" 
 #include "SoundInfo.h"
@@ -32,10 +32,10 @@
 namespace gnash {
 namespace sound {
 
-EmbedSound::EmbedSound(std::auto_ptr<SimpleBuffer> data,
-        const media::SoundInfo& info, int nVolume)
+EmbedSound::EmbedSound(std::unique_ptr<SimpleBuffer> data,
+        media::SoundInfo info, int nVolume)
     :
-    soundinfo(info),
+    soundinfo(std::move(info)),
     volume(nVolume),
     _buf(data.release())
 {
@@ -45,7 +45,7 @@ EmbedSound::EmbedSound(std::auto_ptr<SimpleBuffer> data,
 void
 EmbedSound::clearInstances()
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
     _soundInstances.clear();
 }
 
@@ -56,15 +56,15 @@ EmbedSound::eraseActiveSound(Instances::iterator i)
     return _soundInstances.erase(i);
 }
 
-std::auto_ptr<EmbedSoundInst>
+std::unique_ptr<EmbedSoundInst>
 EmbedSound::createInstance(media::MediaHandler& mh, unsigned int inPoint,
         unsigned int outPoint, const SoundEnvelopes* envelopes,
         int loopCount)
 {
-    std::auto_ptr<EmbedSoundInst> ret(
+    std::unique_ptr<EmbedSoundInst> ret(
         new EmbedSoundInst(*this, mh, inPoint, outPoint, envelopes, loopCount));
 
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
 
     // Push the sound onto the playing sounds container.
     _soundInstances.push_back(ret.get());
@@ -80,7 +80,7 @@ EmbedSound::~EmbedSound()
 void
 EmbedSound::eraseActiveSound(EmbedSoundInst* inst)
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
 
     Instances::iterator it = std::find( _soundInstances.begin(),
             _soundInstances.end(), inst);
@@ -96,32 +96,31 @@ EmbedSound::eraseActiveSound(EmbedSoundInst* inst)
 bool
 EmbedSound::isPlaying() const
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
     return !_soundInstances.empty();
 }
 
 size_t
 EmbedSound::numPlayingInstances() const
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
     return _soundInstances.size();
 }
 
 EmbedSoundInst*
 EmbedSound::firstPlayingInstance() const
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
     return _soundInstances.front();
 }
 
 void
 EmbedSound::getPlayingInstances(std::vector<InputStream*>& to) const
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
-    for (Instances::const_iterator i=_soundInstances.begin(), e=_soundInstances.end();
-            i!=e; ++i)
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
+    for (InputStream* stream : _soundInstances)
     {
-        to.push_back(*i);
+        to.push_back(stream);
     }
 }
 
diff --git a/libsound/EmbedSound.h b/libsound/EmbedSound.h
index 61a0890..5a6063e 100644
--- a/libsound/EmbedSound.h
+++ b/libsound/EmbedSound.h
@@ -21,10 +21,11 @@
 #define SOUND_EMBEDSOUND_H
 
 #include <vector>
-#include <memory> // for auto_ptr (composition)
+#include <memory> // for unique_ptr (composition)
 #include <cassert>
-#include <boost/thread/mutex.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
+#include <mutex>
+#include <list>
 
 #include "SimpleBuffer.h" // for composition
 #include "SoundInfo.h" // for composition
@@ -59,7 +60,7 @@ public:
     /// @param data The encoded sound data.
     /// @param info encoding info
     /// @param volume initial volume (0..100). Optional, defaults to 100.
-    EmbedSound(std::auto_ptr<SimpleBuffer> data, const media::SoundInfo& info,
+    EmbedSound(std::unique_ptr<SimpleBuffer> data, media::SoundInfo info,
             int volume);
 
     ~EmbedSound();
@@ -75,7 +76,7 @@ public:
     }
 
     /// Return a pointer to the underlying buffer
-    const boost::uint8_t* data() const {
+    const std::uint8_t* data() const {
         return _buf->data();
     }
 
@@ -84,7 +85,7 @@ public:
     /// @param pos The offset value.
     ///     An assertion will fail if pos > size()
     ///
-    const boost::uint8_t* data(size_t pos) const {
+    const std::uint8_t* data(size_t pos) const {
         assert(pos < _buf->size());
         return _buf->data()+pos;
     }
@@ -136,7 +137,7 @@ public:
     ///     @todo document if every loop starts at secsOffset !
     /// Locks the _soundInstancesMutex when pushing to it
     ///
-    std::auto_ptr<EmbedSoundInst> createInstance(media::MediaHandler& mh,
+    std::unique_ptr<EmbedSoundInst> createInstance(media::MediaHandler& mh,
             unsigned int inPoint, unsigned int outPoint,
             const SoundEnvelopes* envelopes, int loopCount);
 
@@ -176,7 +177,7 @@ public:
 private:
 
     /// The undecoded data
-    boost::scoped_ptr<SimpleBuffer> _buf;
+    std::unique_ptr<SimpleBuffer> _buf;
 
     /// Playing instances of this sound definition
     //
@@ -186,7 +187,7 @@ private:
 
     /// Mutex protecting access to _soundInstances
     //
-    mutable boost::mutex _soundInstancesMutex;
+    mutable std::mutex _soundInstancesMutex;
 };
 
 } // gnash.sound namespace 
diff --git a/libsound/EmbedSoundInst.cpp b/libsound/EmbedSoundInst.cpp
index cecfb52..9ef4b05 100644
--- a/libsound/EmbedSoundInst.cpp
+++ b/libsound/EmbedSoundInst.cpp
@@ -96,9 +96,9 @@ EmbedSoundInst::decodeNextBlock()
     // to decode not to bother further streamlining it
     // See https://savannah.gnu.org/bugs/?25456 for a testcase
     // showing the benefit of chunked decoding.
-    const boost::uint32_t chunkSize = 65535;
+    const std::uint32_t chunkSize = 65535;
 
-    boost::uint32_t inputSize = _soundDef.size() - decodingPosition;
+    std::uint32_t inputSize = _soundDef.size() - decodingPosition;
     if ( inputSize > chunkSize ) inputSize = chunkSize;
 
 #ifdef GNASH_DEBUG_SOUNDS_DECODING
@@ -106,11 +106,11 @@ EmbedSoundInst::decodeNextBlock()
 #endif
 
     assert(inputSize);
-    const boost::uint8_t* input = _soundDef.data(decodingPosition);
+    const std::uint8_t* input = _soundDef.data(decodingPosition);
 
-    boost::uint32_t consumed = 0;
-    boost::uint32_t decodedDataSize = 0;
-    boost::uint8_t* decodedData = decoder().decode(input, inputSize,
+    std::uint32_t consumed = 0;
+    std::uint32_t decodedDataSize = 0;
+    std::uint8_t* decodedData = decoder().decode(input, inputSize,
             decodedDataSize, consumed);
 
     decodingPosition += consumed;
@@ -118,7 +118,7 @@ EmbedSoundInst::decodeNextBlock()
     assert(!(decodedDataSize%2));
 
     // @todo I hope there are no alignment issues in this cast from int8_t* to int16_t* !
-    boost::int16_t* samples = reinterpret_cast<boost::int16_t*>(decodedData);
+    std::int16_t* samples = reinterpret_cast<std::int16_t*>(decodedData);
     unsigned int nSamples = decodedDataSize/2;
 
 #ifdef GNASH_DEBUG_MIXING
@@ -144,11 +144,11 @@ EmbedSoundInst::decodeNextBlock()
 
 
     // decodedData ownership transferred here
-    appendDecodedData(decodedData, decodedDataSize);
+    appendDecodedData(SimpleBuffer(decodedDataSize, decodedData));
 }
 
 void
-EmbedSoundInst::applyEnvelopes(boost::int16_t* samples, unsigned int nSamples,
+EmbedSoundInst::applyEnvelopes(std::int16_t* samples, unsigned int nSamples,
         unsigned int firstSampleOffset, const SoundEnvelopes& env)
 {
 
@@ -168,7 +168,7 @@ EmbedSoundInst::applyEnvelopes(boost::int16_t* samples, unsigned int nSamples,
     assert(env[current_env].m_mark44 < firstSampleOffset+nSamples);
 
     // Get next envelope position (absolute samples offset)
-    boost::uint32_t next_env_pos = 0;
+    std::uint32_t next_env_pos = 0;
     if (current_env == (env.size() - 1)) {
         // If there is no "next envelope" then set the next envelope
         // start point to be unreachable
diff --git a/libsound/EmbedSoundInst.h b/libsound/EmbedSoundInst.h
index 27ff8cf..de88ada 100644
--- a/libsound/EmbedSoundInst.h
+++ b/libsound/EmbedSoundInst.h
@@ -21,7 +21,7 @@
 #define SOUND_EMBEDSOUNDINST_H
 
 #include <cassert>
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 #include <limits>
 
 #include "EmbedSound.h"
@@ -104,7 +104,7 @@ private:
     ///
     /// @param env
     ///     SoundEnvelopes to apply.
-    void applyEnvelopes(boost::int16_t* samples, unsigned int nSamples,
+    void applyEnvelopes(std::int16_t* samples, unsigned int nSamples,
             unsigned int firstSampleNum, const SoundEnvelopes& env);
 
     bool reachedCustomEnd() const;
@@ -135,7 +135,7 @@ private:
     const SoundEnvelopes* envelopes;
 
     /// Index of current envelope.
-    boost::uint32_t current_env;
+    std::uint32_t current_env;
 
     /// The encoded data
     //
diff --git a/libsound/InputStream.h b/libsound/InputStream.h
index e11a451..41e7bed 100644
--- a/libsound/InputStream.h
+++ b/libsound/InputStream.h
@@ -21,7 +21,7 @@
 #ifndef SOUND_INPUTSTREAM_H
 #define SOUND_INPUTSTREAM_H
 
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 
 namespace gnash {
 namespace sound {
@@ -68,7 +68,7 @@ public:
     ///     if unable to process this and further requests due to internal
     ///     errors (not if it just happens to complete its source)
     ///
-    virtual unsigned int fetchSamples(boost::int16_t* to, unsigned int nSamples)=0;
+    virtual unsigned int fetchSamples(std::int16_t* to, unsigned int nSamples)=0;
 
     /// Return number of samples fetched from this stream
     //
diff --git a/libsound/LiveSound.cpp b/libsound/LiveSound.cpp
index a13385e..83df3ef 100644
--- a/libsound/LiveSound.cpp
+++ b/libsound/LiveSound.cpp
@@ -33,9 +33,8 @@ namespace sound {
 LiveSound::LiveSound(media::MediaHandler& mh, const media::SoundInfo& info,
         size_t inPoint)
     :
-    _inPoint(inPoint * 4),
-    _playbackPosition(_inPoint),
-    _samplesFetched(0)
+    _samplesFetched(0),
+    _decodedBuffers(inPoint * 4)
 {
     createDecoder(mh, info);
 }
@@ -51,7 +50,7 @@ LiveSound::createDecoder(media::MediaHandler& mh, const media::SoundInfo& si)
 }
 
 unsigned int 
-LiveSound::fetchSamples(boost::int16_t* to, unsigned int nSamples)
+LiveSound::fetchSamples(std::int16_t* to, unsigned int nSamples)
 {
     unsigned int fetchedSamples = 0;
 
@@ -59,26 +58,16 @@ LiveSound::fetchSamples(boost::int16_t* to, unsigned int nSamples)
         unsigned int availableSamples = decodedSamplesAhead();
 
         if (availableSamples) {
-            const boost::int16_t* data = getDecodedData(_playbackPosition);
+            size_t bytesCopied = _decodedBuffers.copy(
+                reinterpret_cast<std::uint8_t*>(to), nSamples * 2);
 
-            if (availableSamples >= nSamples) {
-                std::copy(data, data + nSamples, to);
-                fetchedSamples += nSamples;
-
-                // Update playback position (samples are 16bit)
-                _playbackPosition += nSamples * 2;
+            fetchedSamples += bytesCopied / 2;
 
+            if (availableSamples >= nSamples) {
                 break; // fetched all
-            }
-            else {
+            } else {
                 // not enough decoded samples available:
                 // copy what we have and go on
-                std::copy(data, data + availableSamples, to);
-                fetchedSamples += availableSamples;
-
-                // Update playback position (samples are 16bit)
-                _playbackPosition += availableSamples * 2;
-
                 to += availableSamples;
                 nSamples -= availableSamples;
                 assert(nSamples);
diff --git a/libsound/LiveSound.h b/libsound/LiveSound.h
index 8da4719..1463bab 100644
--- a/libsound/LiveSound.h
+++ b/libsound/LiveSound.h
@@ -20,9 +20,10 @@
 #ifndef SOUND_LIVESOUND_H
 #define SOUND_LIVESOUND_H
 
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include <cassert>
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
+#include <iostream>
 
 #include "InputStream.h" 
 #include "AudioDecoder.h" 
@@ -39,6 +40,121 @@ namespace gnash {
 namespace gnash {
 namespace sound {
 
+
+/// Maintains a collection of SimpleBuffers, providing stateful sequential
+/// read access to the data contained therein.
+//
+// TODO: this shares some functionality with CursoredBuffer, and the two
+// classes might be merged.
+class Buffers {
+public:
+    Buffers(size_t in_point)
+    : _buffers(),
+      _index(0),
+      _pos(0),
+      _consumed(0),
+      _in_point(in_point)
+    {}
+
+    Buffers(const Buffers&) = delete;
+    Buffers& operator=(const Buffers&) = delete;
+
+    /// Append a buffer of data to be read by the consumer later.
+    void append(SimpleBuffer buf) {
+        _buffers.push_back(std::move(buf));
+        consumeInPoint();
+    }
+
+    void restart()
+    {
+        _index = 0;
+        _consumed = 0;
+        consumeInPoint();
+    }
+
+    /// Copy up to the given number of bytes to the given buffer.
+    //
+    /// @to points to a buffer to be written to.
+    /// @bytes number of bytes to be written.
+    /// @return number of bytes actually written.
+    size_t copy(std::uint8_t* to, size_t bytes) {
+        assert(_consumed >= _in_point);
+
+        size_t bytes_remaining = bytes;
+
+        for (; _index < _buffers.size(); ++_index) {
+            const SimpleBuffer& buffer = _buffers[_index];
+
+            size_t to_copy = std::min(bytes_remaining, buffer.size() - _pos);
+
+            std::copy(buffer.data() + _pos, buffer.data() + _pos + to_copy, to);
+            to += to_copy;
+            bytes_remaining -= to_copy;
+            _pos += to_copy;
+
+            if (_pos == buffer.size()) {
+                ++_index;
+                _pos = 0;
+                break;
+            }
+
+            if (bytes_remaining == 0) {
+                break;
+            }
+        }
+
+        size_t written = bytes - bytes_remaining;
+        _consumed += written;
+        return written;
+    }
+
+    /// @return total number of bytes contained.
+    std::uint64_t countBytes() const
+    {
+        std::uint64_t bytes = 0;
+        for (const SimpleBuffer& buffer : _buffers) {
+            bytes += buffer.size();
+        }
+        return bytes;
+    }
+
+    /// @return number of bytes previously copied by calls to copy().
+    std::uint64_t consumed() const
+    {
+        return std::max<uint64_t>(_consumed, _in_point);
+    }
+
+private:
+    void consumeInPoint() {
+        if (_consumed >= _in_point) {
+            return;
+        }
+        size_t inPoint = _in_point;
+
+        for (const SimpleBuffer& buffer : _buffers) {
+            size_t advance = std::min(inPoint, buffer.size());
+            if (advance == buffer.size()) {
+                ++_index;
+                inPoint -= advance;
+            } else {
+                _pos = advance;
+                break;
+            }
+        }
+        _consumed = _in_point;
+    }
+
+    std::vector<SimpleBuffer> _buffers;
+    /// Zero-based index of the buffer currently being indicated.
+    size_t _index;
+    /// Current position inside the current buffer.
+    size_t _pos;
+    /// Total bytes consumed by calls to copy().
+    std::uint64_t _consumed;
+    /// Number of bytes to skip from the input.
+    size_t _in_point;
+};
+
 /// Instance of a defined %sound (LiveSoundData)
 //
 /// This class contains a pointer to the LiveSoundData used for playing
@@ -57,13 +173,6 @@ protected:
     LiveSound(media::MediaHandler& mh, const media::SoundInfo& info,
             size_t inPoint);
 
-    // Pointer handling and checking functions
-    const boost::int16_t* getDecodedData(unsigned long int pos) const {
-        assert(pos < _decodedData.size());
-        return reinterpret_cast<const boost::int16_t*>(
-                _decodedData.data() + pos);
-    }
-
     /// Called when more decoded sound data is required.
     //
     /// This will be called whenever no more decoded data is available
@@ -77,8 +186,8 @@ protected:
 
     /// Start from the beginning again.
     void restart() {
-        _playbackPosition = _inPoint;
         _samplesFetched = 0;
+        _decodedBuffers.restart();
     }
 
     /// How many samples have been fetched since the beginning
@@ -88,28 +197,27 @@ protected:
         return _samplesFetched;
     }
 
-    size_t playbackPosition() const {
-        return _playbackPosition;
+    std::uint64_t playbackPosition() const {
+        return _decodedBuffers.consumed();
     }
 
     media::AudioDecoder& decoder() const {
         return *_decoder;
     }
 
-    void appendDecodedData(boost::uint8_t* data, unsigned int size) {
-        _decodedData.append(data, size);
-        delete [] data;
+    void appendDecodedData(SimpleBuffer data) {
+        _decodedBuffers.append(std::move(data));
     }
 
     /// Return number of already-decoded samples available
     /// from playback position on
     unsigned int decodedSamplesAhead() const {
 
-        const unsigned int dds = _decodedData.size();
-        if (dds <= _playbackPosition) return 0; 
+        const unsigned int dds = _decodedBuffers.countBytes();
+        if (dds <= playbackPosition()) return 0;
 
-        size_t bytesAhead = dds - _playbackPosition;
-        bytesAhead = checkEarlierEnd(bytesAhead, _playbackPosition);
+        size_t bytesAhead = dds - playbackPosition();
+        bytesAhead = checkEarlierEnd(bytesAhead, playbackPosition());
 
         assert(!(bytesAhead % 2));
 
@@ -128,25 +236,20 @@ private:
     }
 
     // See dox in sound_handler.h (InputStream)
-    unsigned int fetchSamples(boost::int16_t* to, unsigned int nSamples);
+    unsigned int fetchSamples(std::int16_t* to, unsigned int nSamples);
 
     void createDecoder(media::MediaHandler& mediaHandler,
             const media::SoundInfo& info);
 
     virtual bool decodingCompleted() const = 0;
 
-    const size_t _inPoint;
-
-    /// Current playback position in the decoded stream
-    size_t _playbackPosition;
-
     /// Number of samples fetched so far.
     unsigned long _samplesFetched;
 
-    boost::scoped_ptr<media::AudioDecoder> _decoder;
+    std::unique_ptr<media::AudioDecoder> _decoder;
 
-    /// The decoded buffer
-    SimpleBuffer _decodedData;
+    /// The decoded buffers
+    Buffers _decodedBuffers;
 
 };
 
diff --git a/libsound/NullSoundHandler.h b/libsound/NullSoundHandler.h
index 40f2343..ac4d4b2 100644
--- a/libsound/NullSoundHandler.h
+++ b/libsound/NullSoundHandler.h
@@ -39,14 +39,14 @@ public:
 
     sound_handler* _mixer;
 
-    NullSoundHandler(media::MediaHandler* m, sound_handler* mixer=0)
+    NullSoundHandler(media::MediaHandler* m, sound_handler* mixer=nullptr)
         :
         sound_handler(m),
         _mixer(mixer)
     {}
 
     // If a _mixer was given, let it do the mixing!
-    void mix(boost::int16_t* outSamples, boost::int16_t* inSamples,
+    void mix(std::int16_t* outSamples, std::int16_t* inSamples,
                 unsigned int nSamples, float volume)
     {
         if ( _mixer ) _mixer->mix(outSamples, inSamples, nSamples, volume);
diff --git a/libsound/SoundEnvelope.h b/libsound/SoundEnvelope.h
index 610df06..8897179 100644
--- a/libsound/SoundEnvelope.h
+++ b/libsound/SoundEnvelope.h
@@ -20,7 +20,7 @@
 #ifndef SOUND_SOUNDENVELOPE_H
 #define SOUND_SOUNDENVELOPE_H
 
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 #include <vector> // for SoundEnvelopes typedef
 
 
@@ -47,13 +47,13 @@ public:
     /// with a sample rate of 5.5K is given as position 8 in
     /// the envelope. 
     ///
-    boost::uint32_t m_mark44;
+    std::uint32_t m_mark44;
 
     /// Volume for the left channel (0..32768)
-    boost::uint16_t m_level0;
+    std::uint16_t m_level0;
 
     /// Volume for the right channel (0..32768)
-    boost::uint16_t m_level1;
+    std::uint16_t m_level1;
 };
 
 /// A vector of SoundEnvelope objects
diff --git a/libsound/SoundUtils.h b/libsound/SoundUtils.h
index a45e163..d2c0aff 100644
--- a/libsound/SoundUtils.h
+++ b/libsound/SoundUtils.h
@@ -21,8 +21,8 @@
 #define GNASH_SOUND_UTILS_H
 
 #include <algorithm>
-#include <boost/bind.hpp>
-#include <boost/cstdint.hpp>
+#include <functional>
+#include <cstdint>
 
 #include "SoundInfo.h"
 
@@ -39,7 +39,7 @@ inline void
 adjustVolume(T* start, T* end, float volume)
 {
     std::transform(start, end, start,
-            boost::bind(std::multiplies<float>(), volume, _1));
+        [volume](const T& volsource) { return volume * volsource; });
 }
 
 /// Convert SWF-specified number of samples to output number of samples
diff --git a/libsound/StreamingSound.cpp b/libsound/StreamingSound.cpp
index a85d898..4b56f5f 100644
--- a/libsound/StreamingSound.cpp
+++ b/libsound/StreamingSound.cpp
@@ -77,21 +77,21 @@ StreamingSound::decodeNextBlock()
 
     // If we didn't decode all of a block, do so now. Not sure if this
     // can happen.
-    const boost::uint32_t inputSize = block.size() - _positionInBlock; 
+    const std::uint32_t inputSize = block.size() - _positionInBlock;
 
-    boost::uint32_t consumed = 0;
+    std::uint32_t consumed = 0;
 
     // Empty blocks serve to synchronize, so don't decode but carry on.
     if (inputSize) {
-        boost::uint32_t decodedDataSize = 0;
-        const boost::uint8_t* input = block.data() + _positionInBlock;
-        boost::uint8_t* decodedData = decoder().decode(input, inputSize,
+        std::uint32_t decodedDataSize = 0;
+        const std::uint8_t* input = block.data() + _positionInBlock;
+        std::uint8_t* decodedData = decoder().decode(input, inputSize,
                 decodedDataSize, consumed);
 
         assert(!(decodedDataSize % 2));
 
-        boost::int16_t* samples = 
-            reinterpret_cast<boost::int16_t*>(decodedData);
+        std::int16_t* samples =
+            reinterpret_cast<std::int16_t*>(decodedData);
         unsigned int nSamples = decodedDataSize / 2;
 
         if (_soundDef.volume != 100) {
@@ -99,7 +99,7 @@ StreamingSound::decodeNextBlock()
         }
 
         // decodedData ownership transferred here
-        appendDecodedData(decodedData, decodedDataSize);
+        appendDecodedData(SimpleBuffer(decodedDataSize, decodedData));
     }
 
     // Check if the entire block was consumed.
diff --git a/libsound/StreamingSound.h b/libsound/StreamingSound.h
index 45cfb40..6b5276d 100644
--- a/libsound/StreamingSound.h
+++ b/libsound/StreamingSound.h
@@ -20,9 +20,9 @@
 #ifndef SOUND_STREAMINGSOUND_H
 #define SOUND_STREAMINGSOUND_H
 
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 #include <cassert>
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 
 #include "LiveSound.h" 
 #include "StreamingSoundData.h" 
diff --git a/libsound/StreamingSoundData.cpp b/libsound/StreamingSoundData.cpp
index 34c16ba..d02c07f 100644
--- a/libsound/StreamingSoundData.cpp
+++ b/libsound/StreamingSoundData.cpp
@@ -21,7 +21,7 @@
 #include "StreamingSoundData.h"
 
 #include <vector>
-#include <boost/cstdint.hpp> 
+#include <cstdint>
 
 #include "SoundInfo.h"
 #include "MediaHandler.h" 
@@ -35,20 +35,19 @@ namespace sound {
 
 
 size_t
-StreamingSoundData::append(std::auto_ptr<SimpleBuffer> data,
+StreamingSoundData::append(SimpleBuffer data,
         size_t sampleCount, int seekSamples)
 {
-    assert(data.get());
-    _buffers.push_back(data);
-    _blockData.push_back(BlockData(sampleCount, seekSamples));
+    _buffers.push_back(std::move(data));
+    _blockData.emplace_back(sampleCount, seekSamples);
     assert(_blockData.size() == _buffers.size());
     return _buffers.size() - 1;
 }
 
-StreamingSoundData::StreamingSoundData(const media::SoundInfo& info,
+StreamingSoundData::StreamingSoundData(media::SoundInfo info,
         int nVolume)
     :
-    soundinfo(info),
+    soundinfo(std::move(info)),
     volume(nVolume)
 {
 }
@@ -63,7 +62,7 @@ StreamingSoundData::playingBlock() const
 void
 StreamingSoundData::clearInstances()
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
     _soundInstances.clear();
 }
 
@@ -74,12 +73,12 @@ StreamingSoundData::eraseActiveSound(Instances::iterator i)
     return _soundInstances.erase(i);
 }
 
-std::auto_ptr<StreamingSound>
+std::unique_ptr<StreamingSound>
 StreamingSoundData::createInstance(media::MediaHandler& mh, unsigned long block)
 {
-    std::auto_ptr<StreamingSound> ret(new StreamingSound(*this, mh, block));
+    std::unique_ptr<StreamingSound> ret(new StreamingSound(*this, mh, block));
 
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
 
     // Push the sound onto the playing sounds container.
     _soundInstances.push_back(ret.get());
@@ -95,7 +94,7 @@ StreamingSoundData::~StreamingSoundData()
 void
 StreamingSoundData::eraseActiveSound(InputStream* inst)
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
 
     Instances::iterator it = std::find(
             _soundInstances.begin(),
@@ -114,33 +113,31 @@ StreamingSoundData::eraseActiveSound(InputStream* inst)
 bool
 StreamingSoundData::isPlaying() const
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
     return !_soundInstances.empty();
 }
 
 size_t
 StreamingSoundData::numPlayingInstances() const
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
     return _soundInstances.size();
 }
 
 InputStream*
 StreamingSoundData::firstPlayingInstance() const
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
     return _soundInstances.front();
 }
 
 void
 StreamingSoundData::getPlayingInstances(std::vector<InputStream*>& to) const
 {
-    boost::mutex::scoped_lock lock(_soundInstancesMutex);
-    for (Instances::const_iterator i=_soundInstances.begin(),
-            e=_soundInstances.end();
-            i!=e; ++i)
+    std::lock_guard<std::mutex> lock(_soundInstancesMutex);
+    for (InputStream* stream : _soundInstances)
     {
-        to.push_back(*i);
+        to.push_back(stream);
     }
 }
 
diff --git a/libsound/StreamingSoundData.h b/libsound/StreamingSoundData.h
index 6da7326..997b4b8 100644
--- a/libsound/StreamingSoundData.h
+++ b/libsound/StreamingSoundData.h
@@ -21,11 +21,10 @@
 #define SOUND_STREAMING_SOUND_DATA_H
 
 #include <vector>
-#include <memory> 
 #include <cassert>
-#include <boost/thread/mutex.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/ptr_container/ptr_vector.hpp>
+#include <list>
+#include <memory>
+#include <mutex>
 
 #include "SoundInfo.h" 
 
@@ -58,7 +57,7 @@ public:
     //
     /// @param info encoding info
     /// @param nVolume initial volume (0..100).
-    StreamingSoundData(const media::SoundInfo& info, int nVolume);
+    StreamingSoundData(media::SoundInfo info, int nVolume);
 
     ~StreamingSoundData();
 
@@ -68,7 +67,7 @@ public:
     ///                      padded (see MediaHandler::getInputPaddingBytes())
     /// @param sampleCount   The number of samples when decoded.
     /// @param seekSamples   Where to start playing from at a particular frame.
-    size_t append(std::auto_ptr<SimpleBuffer> data, size_t sampleCount,
+    size_t append(SimpleBuffer data, size_t sampleCount,
             int seekSamples);
 
     /// Do we have any data?
@@ -125,7 +124,7 @@ public:
     ///                         This refers to a specific StreamSoundBlock.
     ///                         @see gnash::swf::StreamSoundBlockTag
     /// Locks the _soundInstancesMutex when pushing to it
-    std::auto_ptr<StreamingSound> createInstance(media::MediaHandler& mh,
+    std::unique_ptr<StreamingSound> createInstance(media::MediaHandler& mh,
             unsigned long blockOffset);
 
     /// Drop all active sounds
@@ -181,9 +180,9 @@ private:
     Instances _soundInstances;
 
     /// Mutex protecting access to _soundInstances
-    mutable boost::mutex _soundInstancesMutex;
+    mutable std::mutex _soundInstancesMutex;
 
-    boost::ptr_vector<SimpleBuffer> _buffers;
+    std::vector<SimpleBuffer> _buffers;
 
     std::vector<BlockData> _blockData;
 };
diff --git a/libsound/WAVWriter.cpp b/libsound/WAVWriter.cpp
index dd1ce17..52ac98c 100644
--- a/libsound/WAVWriter.cpp
+++ b/libsound/WAVWriter.cpp
@@ -19,8 +19,7 @@
 
 #include "WAVWriter.h"
 
-#include <cstring> // for strncpy
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <fstream> // for composition (file_stream)
 #include <iostream> 
 
@@ -36,23 +35,23 @@ namespace { // anonymous
 // http://ftp.iptel.org/pub/sems/doc/full/current/wav__hdr_8c-source.html
 struct WAV_HDR {
      char rID[4];            // 'RIFF'
-     boost::uint32_t rLen;        
+     std::uint32_t rLen;
      char wID[4];            // 'WAVE'
      char fId[4];            // 'fmt '
-     boost::uint32_t pcm_header_len;   // varies...
-     boost::int16_t wFormatTag;
-     boost::int16_t nChannels;      // 1,2 for stereo data is (l,r) pairs
-     boost::uint32_t nSamplesPerSec;
-     boost::uint32_t nAvgBytesPerSec;
-     boost::int16_t nBlockAlign;      
-     boost::int16_t nBitsPerSample;
+     std::uint32_t pcm_header_len;   // varies...
+     std::int16_t wFormatTag;
+     std::int16_t nChannels;      // 1,2 for stereo data is (l,r) pairs
+     std::uint32_t nSamplesPerSec;
+     std::uint32_t nAvgBytesPerSec;
+     std::int16_t nBlockAlign;
+     std::int16_t nBitsPerSample;
 };
 
 // Chunk of wave file
 // http://ftp.iptel.org/pub/sems/doc/full/current/wav__hdr_8c-source.html
 struct CHUNK_HDR{
     char dId[4];            // 'data' or 'fact'
-    boost::uint32_t dLen;
+    std::uint32_t dLen;
 };
 
 } // end of anonymous namespace
@@ -81,10 +80,10 @@ WAVWriter::~WAVWriter()
 
 /* public */
 void
-WAVWriter::pushSamples(boost::int16_t* from, unsigned int nSamples)
+WAVWriter::pushSamples(std::int16_t* from, unsigned int nSamples)
 {
     // NOTE: if muted, the samples will be silent already
-        boost::uint8_t* stream = reinterpret_cast<boost::uint8_t*>(from);
+        std::uint8_t* stream = reinterpret_cast<std::uint8_t*>(from);
         unsigned int len = nSamples*2;
         file_stream.write((char*) stream, len);
 
@@ -100,9 +99,10 @@ WAVWriter::write_wave_header(std::ofstream& outfile)
   CHUNK_HDR chk;
  
   // setup wav header
-  std::strncpy(wav.rID, "RIFF", 4);
-  std::strncpy(wav.wID, "WAVE", 4);
-  std::strncpy(wav.fId, "fmt ", 4);
+  // CID 1149094
+  std::memcpy(wav.rID, "RIFF", 4);
+  std::memcpy(wav.wID, "WAVE", 4);
+  std::memcpy(wav.fId, "fmt ", 4);
  
   wav.nBitsPerSample = 16;
   wav.nSamplesPerSec = 44100;
@@ -117,7 +117,7 @@ WAVWriter::write_wave_header(std::ofstream& outfile)
   wav.nBlockAlign = 2 * wav.nBitsPerSample / 8;
 
   // setup chunk header
-  std::strncpy(chk.dId, "data", 4);
+  std::memcpy(chk.dId, "data", 4);
   chk.dLen = 0;
  
   /* write riff/wav header */
diff --git a/libsound/WAVWriter.h b/libsound/WAVWriter.h
index 88a694c..80a52a1 100644
--- a/libsound/WAVWriter.h
+++ b/libsound/WAVWriter.h
@@ -21,7 +21,7 @@
 #define GNASH_SOUND_WAVWRITER_H
 
 #include <fstream> // for composition (file_stream)
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 #include "dsodefs.h"
 
@@ -54,7 +54,7 @@ public:
     ///           to give interpretation of what comes back (how many
     ///           bytes per channel, which format).
     ///
-    void pushSamples(boost::int16_t* from, unsigned int nSamples);
+    void pushSamples(std::int16_t* from, unsigned int nSamples);
 
 private:
 
diff --git a/libsound/aos4/sound_handler_ahi.cpp b/libsound/aos4/sound_handler_ahi.cpp
index 333e65e..70e866c 100644
--- a/libsound/aos4/sound_handler_ahi.cpp
+++ b/libsound/aos4/sound_handler_ahi.cpp
@@ -32,7 +32,6 @@
 
 //#include <cmath>
 #include <vector>
-#include <boost/scoped_array.hpp>
 
 #include <proto/dos.h>
 #include <proto/exec.h>
@@ -82,7 +81,7 @@ AOS4_sound_handler::AOS4_sound_handler(media::MediaHandler* m)
 
 AOS4_sound_handler::~AOS4_sound_handler()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
 	// on class destruction we must kill the Audio thread
 	_closing = true;
@@ -179,16 +178,16 @@ AOS4_sound_handler::closeAudio()
 void
 AOS4_sound_handler::reset()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::delete_all_sounds();
     sound_handler::stop_all_sounds();
 }
 
 int
-AOS4_sound_handler::create_sound(std::auto_ptr<SimpleBuffer> data,
-                                std::auto_ptr<media::SoundInfo> sinfo)
+AOS4_sound_handler::create_sound(std::unique_ptr<SimpleBuffer> data,
+                                std::unique_ptr<media::SoundInfo> sinfo)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::create_sound(data, sinfo);
 }
 
@@ -198,14 +197,14 @@ AOS4_sound_handler::addSoundBlock(unsigned char* data,
         int streamId)
 {
 
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::addSoundBlock(data, dataBytes, nSamples, streamId);
 }
 
 void
 AOS4_sound_handler::stop_sound(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stop_sound(soundHandle);
 }
 
@@ -213,14 +212,14 @@ AOS4_sound_handler::stop_sound(int soundHandle)
 void
 AOS4_sound_handler::delete_sound(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::delete_sound(soundHandle);
 }
 
 void
 AOS4_sound_handler::stop_all_sounds()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stop_all_sounds();
 }
 
@@ -228,7 +227,7 @@ AOS4_sound_handler::stop_all_sounds()
 int
 AOS4_sound_handler::get_volume(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_volume(soundHandle);
 }
 
@@ -236,28 +235,28 @@ AOS4_sound_handler::get_volume(int soundHandle)
 void
 AOS4_sound_handler::set_volume(int soundHandle, int volume)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::set_volume(soundHandle, volume);
 }
 
 media::SoundInfo*
 AOS4_sound_handler::get_sound_info(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_sound_info(soundHandle);
 }
 
 unsigned int
 AOS4_sound_handler::get_duration(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_duration(soundHandle);
 }
 
 unsigned int
 AOS4_sound_handler::tell(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::tell(soundHandle);
 }
 
@@ -269,14 +268,14 @@ create_sound_handler_aos4(media::MediaHandler* m)
 }
 
 void
-AOS4_sound_handler::fetchSamples(boost::int16_t* to, unsigned int nSamples)
+AOS4_sound_handler::fetchSamples(std::int16_t* to, unsigned int nSamples)
 {
 	if (!_closing)
 	{
 		AHIRequest *req = AHIios[AHICurBuf];
 		UWORD AHIOtherBuf = AHICurBuf^1;
 
-	    boost::mutex::scoped_lock lock(_mutex);
+	    std::lock_guard<std::mutex> lock(_mutex);
     	if (!_closing) 
     	{
 	    		sound_handler::fetchSamples(to, nSamples);
@@ -330,9 +329,9 @@ AOS4_sound_handler::fetchSamples(boost::int16_t* to, unsigned int nSamples)
 }
 
 void 
-AOS4_sound_handler::MixAudio (boost::uint8_t *dst, const boost::uint8_t *src, boost::uint32_t len, int volume)
+AOS4_sound_handler::MixAudio (std::uint8_t *dst, const std::uint8_t *src, std::uint32_t len, int volume)
 {
-	boost::uint16_t format;
+	std::uint16_t format;
 
 	if ( volume == 0 ) 
 	{
@@ -346,7 +345,7 @@ AOS4_sound_handler::MixAudio (boost::uint8_t *dst, const boost::uint8_t *src, bo
 	{
 		case AHIST_S16S:
 		{
-			boost::int16_t src1, src2;
+			std::int16_t src1, src2;
 			int dst_sample;
 			const int max_audioval = ((1<<(16-1))-1);
 			const int min_audioval = -(1<<(16-1));
@@ -380,23 +379,23 @@ AOS4_sound_handler::MixAudio (boost::uint8_t *dst, const boost::uint8_t *src, bo
 }
 
 void
-AOS4_sound_handler::mix(boost::int16_t* outSamples, boost::int16_t* inSamples, unsigned int nSamples, float volume)
+AOS4_sound_handler::mix(std::int16_t* outSamples, std::int16_t* inSamples, unsigned int nSamples, float volume)
 {
 	if (!_closing)
 	{
 	    unsigned int nBytes = nSamples*2;
 
-	    boost::uint8_t *out = reinterpret_cast<boost::uint8_t*>(outSamples);
-    	boost::uint8_t* in = reinterpret_cast<boost::uint8_t*>(inSamples);
+	    std::uint8_t *out = reinterpret_cast<std::uint8_t*>(outSamples);
+    	std::uint8_t* in = reinterpret_cast<std::uint8_t*>(inSamples);
 
 	    MixAudio(out, in, nBytes, static_cast<int>(MIX_MAXVOLUME*volume));
 	}
 }
 
 void
-AOS4_sound_handler::plugInputStream(std::auto_ptr<InputStream> newStreamer)
+AOS4_sound_handler::plugInputStream(std::unique_ptr<InputStream> newStreamer)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
     sound_handler::plugInputStream(newStreamer);
 
@@ -411,27 +410,6 @@ AOS4_sound_handler::plugInputStream(std::auto_ptr<InputStream> newStreamer)
 }
 
 void
-AOS4_sound_handler::mute()
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    sound_handler::mute();
-}
-
-void
-AOS4_sound_handler::unmute()
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    sound_handler::unmute();
-}
-
-bool
-AOS4_sound_handler::is_muted() const
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    return sound_handler::is_muted();
-}
-
-void
 AOS4_sound_handler::pause()
 {
     //closeAudio();
@@ -529,7 +507,7 @@ AOS4_sound_handler::audioTask()
 	unsigned long clockAdvance = 40;
 	unsigned int nSamples = (441*clockAdvance) / 10;
 	unsigned int toFetch = nSamples*2;
-	boost::int16_t samples[AHI_BUF_SIZE];
+	std::int16_t samples[AHI_BUF_SIZE];
 
 	_closing = false;
 
@@ -629,7 +607,7 @@ AOS4_sound_handler::audioTask()
 				while (toFetch && !_closing)
 				{
 					unsigned int n = std::min(toFetch, AHI_BUF_SIZE);
-					if (!_closing) fetchSamples((boost::int16_t*)&samples, n);
+					if (!_closing) fetchSamples((std::int16_t*)&samples, n);
 					toFetch -= n;
 				}
 				toFetch = nSamples*2;
diff --git a/libsound/aos4/sound_handler_ahi.h b/libsound/aos4/sound_handler_ahi.h
index 381d04f..d6fc079 100644
--- a/libsound/aos4/sound_handler_ahi.h
+++ b/libsound/aos4/sound_handler_ahi.h
@@ -23,7 +23,7 @@
 #include "sound_handler.h" // for inheritance
 
 #include <set> // for composition (InputStreams)
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 
 #include <proto/dos.h>
 #include <proto/exec.h>
@@ -86,16 +86,13 @@ private:
 	struct MsgPort *_DMreplyport;	// and its port
 	
     /// Mutex for making sure threads doesn't mess things up
-    boost::mutex _mutex;
-
-    /// Mutex protecting _muted (defined in base class)
-    mutable boost::mutex _mutedMutex;
+    std::mutex _mutex;
 
     // See dox in sound_handler.h
-    void mix(boost::int16_t* outSamples, boost::int16_t* inSamples,
+    void mix(std::int16_t* outSamples, std::int16_t* inSamples,
                 unsigned int nSamples, float volume);
 
-	void MixAudio (boost::uint8_t *dst, const boost::uint8_t *src, boost::uint32_t len, int volume);
+	void MixAudio (std::uint8_t *dst, const std::uint8_t *src, std::uint32_t len, int volume);
 
 public:
 
@@ -104,7 +101,7 @@ public:
     ~AOS4_sound_handler();
 
     // See dox in sound_handler.h
-    virtual int create_sound(std::auto_ptr<SimpleBuffer> data, std::auto_ptr<media::SoundInfo> sinfo);
+    virtual int create_sound(std::unique_ptr<SimpleBuffer> data, std::unique_ptr<media::SoundInfo> sinfo);
 
     // See dox in sound_handler.h
     // overridden to serialize access to the data buffer slot
@@ -135,18 +132,6 @@ public:
     virtual media::SoundInfo* get_sound_info(int soundHandle);
 
     // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual void mute();
-
-    // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual void unmute();
-
-    // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual bool is_muted() const;
-
-    // See dox in sound_handler.h
     // overridden to close audio card
     virtual void pause();
 
@@ -162,10 +147,10 @@ public:
 
     // See dox in sound_handler.h
     // Overridden to unpause SDL audio
-    void plugInputStream(std::auto_ptr<InputStream> in);
+    void plugInputStream(std::unique_ptr<InputStream> in);
 
     // See dox in sound_handler.h
-    void fetchSamples(boost::int16_t* to, unsigned int nSamples);
+    void fetchSamples(std::int16_t* to, unsigned int nSamples);
 
 	int audioTask();
 };
diff --git a/libsound/mkit/sound_handler_mkit.cpp b/libsound/mkit/sound_handler_mkit.cpp
index ddfb229..ff17884 100644
--- a/libsound/mkit/sound_handler_mkit.cpp
+++ b/libsound/mkit/sound_handler_mkit.cpp
@@ -28,7 +28,6 @@
 #include "GnashException.h" // for SoundException
 
 #include <vector>
-#include <boost/scoped_array.hpp>
 
 #include <SoundPlayer.h>
 
@@ -81,7 +80,7 @@ Mkit_sound_handler::~Mkit_sound_handler()
     if (_soundplayer != NULL)
         _soundplayer->Stop(true, true);
 
-//    boost::mutex::scoped_lock lock(_mutex);
+//    std::lock_guard<std::mutex> lock(_mutex);
 //#ifdef GNASH_DEBUG_HAIKU_AUDIO_PAUSING
 //    log_debug("Pausing Mkit Audio on destruction");
 //#endif
@@ -108,7 +107,7 @@ Mkit_sound_handler::FillNextBuffer(void *cookie, void *buffer, size_t size,
 
     size_t numSamples =
         size / sizeof(uint16);
-    boost::int16_t *data = (boost::int16_t*) buffer;
+    std::int16_t *data = (std::int16_t*) buffer;
 
     Mkit_sound_handler *that =
         reinterpret_cast<Mkit_sound_handler*>(cookie);
@@ -117,16 +116,16 @@ Mkit_sound_handler::FillNextBuffer(void *cookie, void *buffer, size_t size,
 }
 
 void
-Mkit_sound_handler::fetchSamples(boost::int16_t* to, unsigned int nSamples)
+Mkit_sound_handler::fetchSamples(std::int16_t* to, unsigned int nSamples)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::fetchSamples(to, nSamples);
 
     // TODO: move this to base class !
     if (file_stream)
     {
         // NOTE: if muted, the samples will be silent already
-        boost::uint8_t* stream = reinterpret_cast<boost::uint8_t*>(to);
+        std::uint8_t* stream = reinterpret_cast<std::uint8_t*>(to);
         unsigned int len = nSamples*2;
         file_stream.write((char*) stream, len);
 
@@ -147,16 +146,16 @@ Mkit_sound_handler::fetchSamples(boost::int16_t* to, unsigned int nSamples)
 void
 Mkit_sound_handler::reset()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::delete_all_sounds();
     sound_handler::stop_all_sounds();
 }
 
 int
-Mkit_sound_handler::create_sound(std::auto_ptr<SimpleBuffer> data,
-                                std::auto_ptr<media::SoundInfo> sinfo)
+Mkit_sound_handler::create_sound(std::unique_ptr<SimpleBuffer> data,
+                                std::unique_ptr<media::SoundInfo> sinfo)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::create_sound(data, sinfo);
 }
 
@@ -166,14 +165,14 @@ Mkit_sound_handler::addSoundBlock(unsigned char* data,
         int streamId)
 {
 
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::addSoundBlock(data, dataBytes, nSamples, streamId);
 }
 
 void
 Mkit_sound_handler::stop_sound(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stop_sound(soundHandle);
 }
 
@@ -181,14 +180,14 @@ Mkit_sound_handler::stop_sound(int soundHandle)
 void
 Mkit_sound_handler::delete_sound(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::delete_sound(soundHandle);
 }
 
 void
 Mkit_sound_handler::stop_all_sounds()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stop_all_sounds();
 }
 
@@ -196,7 +195,7 @@ Mkit_sound_handler::stop_all_sounds()
 int
 Mkit_sound_handler::get_volume(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_volume(soundHandle);
 }
 
@@ -204,35 +203,35 @@ Mkit_sound_handler::get_volume(int soundHandle)
 void
 Mkit_sound_handler::set_volume(int soundHandle, int volume)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::set_volume(soundHandle, volume);
 }
 
 media::SoundInfo*
 Mkit_sound_handler::get_sound_info(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_sound_info(soundHandle);
 }
 
 unsigned int
 Mkit_sound_handler::get_duration(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_duration(soundHandle);
 }
 
 unsigned int
 Mkit_sound_handler::tell(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::tell(soundHandle);
 }
 
 void 
-Mkit_sound_handler::MixAudio (boost::uint8_t *dst, const boost::uint8_t *src, boost::uint32_t len, int volume)
+Mkit_sound_handler::MixAudio (std::uint8_t *dst, const std::uint8_t *src, std::uint32_t len, int volume)
 {
-    //boost::uint16_t format;
+    //std::uint16_t format;
 
     if ( volume == 0 ) 
     {
@@ -246,7 +245,7 @@ Mkit_sound_handler::MixAudio (boost::uint8_t *dst, const boost::uint8_t *src, bo
     {
         //case AHIST_S16S:
         {
-            boost::int16_t src1, src2;
+            std::int16_t src1, src2;
             int dst_sample;
             const int max_audioval = ((1<<(16-1))-1);
             const int min_audioval = -(1<<(16-1));
@@ -280,23 +279,23 @@ Mkit_sound_handler::MixAudio (boost::uint8_t *dst, const boost::uint8_t *src, bo
 }
 
 void
-Mkit_sound_handler::mix(boost::int16_t* outSamples, boost::int16_t* inSamples, unsigned int nSamples, float volume)
+Mkit_sound_handler::mix(std::int16_t* outSamples, std::int16_t* inSamples, unsigned int nSamples, float volume)
 {
     //if (!_closing)
     {
         unsigned int nBytes = nSamples*2;
 
-        boost::uint8_t *out = reinterpret_cast<boost::uint8_t*>(outSamples);
-        boost::uint8_t* in = reinterpret_cast<boost::uint8_t*>(inSamples);
+        std::uint8_t *out = reinterpret_cast<std::uint8_t*>(outSamples);
+        std::uint8_t* in = reinterpret_cast<std::uint8_t*>(inSamples);
 
         MixAudio(out, in, nBytes, MIX_MAXVOLUME*volume);
     }
 }
 
 void
-Mkit_sound_handler::plugInputStream(std::auto_ptr<InputStream> newStreamer)
+Mkit_sound_handler::plugInputStream(std::unique_ptr<InputStream> newStreamer)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
     sound_handler::plugInputStream(newStreamer);
 
@@ -313,27 +312,6 @@ Mkit_sound_handler::plugInputStream(std::auto_ptr<InputStream> newStreamer)
 }
 
 void
-Mkit_sound_handler::mute()
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    sound_handler::mute();
-}
-
-void
-Mkit_sound_handler::unmute()
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    sound_handler::unmute();
-}
-
-bool
-Mkit_sound_handler::is_muted() const
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    return sound_handler::is_muted();
-}
-
-void
 Mkit_sound_handler::pause()
 {
     log_debug(_("Mkit: Mkit_sound_handler::pause"));
diff --git a/libsound/mkit/sound_handler_mkit.h b/libsound/mkit/sound_handler_mkit.h
index fdcea45..f77d844 100644
--- a/libsound/mkit/sound_handler_mkit.h
+++ b/libsound/mkit/sound_handler_mkit.h
@@ -23,8 +23,8 @@
 #include "sound_handler.h" // for inheritance
 
 #include <set> // for composition (InputStreams)
-#include <boost/thread/mutex.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <mutex>
+#include <memory>
 
 #include <SoundPlayer.h>
 
@@ -43,7 +43,7 @@ namespace sound {
 /// Mkit media kit based sound_handler
 class Mkit_sound_handler : public sound_handler
 {
-    boost::scoped_ptr<BSoundPlayer> _soundplayer;
+    std::unique_ptr<BSoundPlayer> _soundplayer;
 
     /// play buffer handler function
     static void FillNextBuffer(void *cookie, void *buffer, size_t size,
@@ -55,16 +55,13 @@ class Mkit_sound_handler : public sound_handler
     bool _audioopen;
 
     /// Mutex for making sure threads doesn't mess things up
-    boost::mutex _mutex;
-
-    /// Mutex protecting _muted (defined in base class)
-    mutable boost::mutex _mutedMutex;
+    std::mutex _mutex;
 
     // See dox in sound_handler.h
-    void mix(boost::int16_t* outSamples, boost::int16_t* inSamples,
+    void mix(std::int16_t* outSamples, std::int16_t* inSamples,
                 unsigned int nSamples, float volume);
 
-    void MixAudio (boost::uint8_t *dst, const boost::uint8_t *src, boost::uint32_t len, int volume);
+    void MixAudio (std::uint8_t *dst, const std::uint8_t *src, std::uint32_t len, int volume);
 
 public:
     Mkit_sound_handler(media::MediaHandler* m);
@@ -72,7 +69,7 @@ public:
     ~Mkit_sound_handler();
 
     // See dox in sound_handler.h
-    virtual int create_sound(std::auto_ptr<SimpleBuffer> data, std::auto_ptr<media::SoundInfo> sinfo);
+    virtual int create_sound(std::unique_ptr<SimpleBuffer> data, std::unique_ptr<media::SoundInfo> sinfo);
 
     // See dox in sound_handler.h
     // overridden to serialize access to the data buffer slot
@@ -103,18 +100,6 @@ public:
     virtual media::SoundInfo* get_sound_info(int soundHandle);
 
     // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual void mute();
-
-    // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual void unmute();
-
-    // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual bool is_muted() const;
-
-    // See dox in sound_handler.h
     // overridden to close audio card
     virtual void pause();
 
@@ -130,10 +115,10 @@ public:
 
     // See dox in sound_handler.h
     // Overridden to unpause SDL audio
-    void plugInputStream(std::auto_ptr<InputStream> in);
+    void plugInputStream(std::unique_ptr<InputStream> in);
 
     // See dox in sound_handler.h
-    void fetchSamples(boost::int16_t* to, unsigned int nSamples);
+    void fetchSamples(std::int16_t* to, unsigned int nSamples);
 };
 
 } // gnash.sound namespace 
diff --git a/libsound/sdl/sound_handler_sdl.cpp b/libsound/sdl/sound_handler_sdl.cpp
index 8bd8c5a..7516869 100644
--- a/libsound/sdl/sound_handler_sdl.cpp
+++ b/libsound/sdl/sound_handler_sdl.cpp
@@ -31,7 +31,6 @@
 #include "GnashException.h" // for SoundException
 
 #include <vector>
-#include <boost/scoped_array.hpp>
 #include <SDL.h>
 
 // Define this to get debugging call about pausing/unpausing audio
@@ -87,7 +86,7 @@ SDL_sound_handler::openAudio()
     //512 - not enough for  videostream
     audioSpec.samples = 1024;   
 
-    if (SDL_OpenAudio(&audioSpec, NULL) < 0) {
+    if (SDL_OpenAudio(&audioSpec, nullptr) < 0) {
             boost::format fmt = boost::format(_("Couldn't open SDL audio: %s"))
                 % SDL_GetError();
         throw SoundException(fmt.str());
@@ -115,13 +114,13 @@ SDL_sound_handler::SDL_sound_handler(media::MediaHandler* m)
 void
 SDL_sound_handler::reset()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stop_all_sounds();
 }
 
 SDL_sound_handler::~SDL_sound_handler()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
 #ifdef GNASH_DEBUG_SDL_AUDIO_PAUSING
     log_debug("Pausing SDL Audio on destruction");
@@ -136,46 +135,46 @@ SDL_sound_handler::~SDL_sound_handler()
 int
 SDL_sound_handler::createStreamingSound(const media::SoundInfo& sinfo)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::createStreamingSound(sinfo);
 }
 
 int
-SDL_sound_handler::create_sound(std::auto_ptr<SimpleBuffer> data,
+SDL_sound_handler::create_sound(std::unique_ptr<SimpleBuffer> data,
                                 const media::SoundInfo& sinfo)
 {
-    boost::mutex::scoped_lock lock(_mutex);
-    return sound_handler::create_sound(data, sinfo);
+    std::lock_guard<std::mutex> lock(_mutex);
+    return sound_handler::create_sound(std::move(data), sinfo);
 }
 
 sound_handler::StreamBlockId
-SDL_sound_handler::addSoundBlock(std::auto_ptr<SimpleBuffer> buf,
+SDL_sound_handler::addSoundBlock(SimpleBuffer buf,
         size_t sampleCount, int seekSamples, int handle)
 {
 
-    boost::mutex::scoped_lock lock(_mutex);
-    return sound_handler::addSoundBlock(buf, sampleCount, seekSamples, handle);
+    std::lock_guard<std::mutex> lock(_mutex);
+    return sound_handler::addSoundBlock(std::move(buf), sampleCount, seekSamples, handle);
 }
 
 
 void
 SDL_sound_handler::stopEventSound(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stopEventSound(soundHandle);
 }
 
 void
 SDL_sound_handler::stopAllEventSounds()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stopAllEventSounds();
 }
 
 void
 SDL_sound_handler::stopStreamingSound(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stopStreamingSound(soundHandle);
 }
 
@@ -183,14 +182,14 @@ SDL_sound_handler::stopStreamingSound(int soundHandle)
 void
 SDL_sound_handler::delete_sound(int soundHandle)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::delete_sound(soundHandle);
 }
 
 void   
 SDL_sound_handler::stop_all_sounds()
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::stop_all_sounds();
 }
 
@@ -198,7 +197,7 @@ SDL_sound_handler::stop_all_sounds()
 int
 SDL_sound_handler::get_volume(int soundHandle) const
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_volume(soundHandle);
 }
 
@@ -206,28 +205,28 @@ SDL_sound_handler::get_volume(int soundHandle) const
 void   
 SDL_sound_handler::set_volume(int soundHandle, int volume)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::set_volume(soundHandle, volume);
 }
     
 media::SoundInfo*
 SDL_sound_handler::get_sound_info(int soundHandle) const
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_sound_info(soundHandle);
 }
 
 unsigned int
 SDL_sound_handler::get_duration(int soundHandle) const
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::get_duration(soundHandle);
 }
 
 unsigned int
 SDL_sound_handler::tell(int soundHandle) const
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     return sound_handler::tell(soundHandle);
 }
 
@@ -238,9 +237,9 @@ create_sound_handler_sdl(media::MediaHandler* m)
 }
 
 void
-SDL_sound_handler::fetchSamples(boost::int16_t* to, unsigned int nSamples)
+SDL_sound_handler::fetchSamples(std::int16_t* to, unsigned int nSamples)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
     sound_handler::fetchSamples(to, nSamples);
 
     // If nothing is left to play there is no reason to keep polling.
@@ -269,7 +268,7 @@ SDL_sound_handler::sdl_audio_callback(void *udata, Uint8 *buf, int bufLenIn)
     }
 
     unsigned int bufLen = static_cast<unsigned int>(bufLenIn);
-    boost::int16_t* samples = reinterpret_cast<boost::int16_t*>(buf);
+    std::int16_t* samples = reinterpret_cast<std::int16_t*>(buf);
 
     // 16 bit per sample, 2 channels == 4 bytes per fetch ?
     assert(!(bufLen%4));
@@ -284,7 +283,7 @@ SDL_sound_handler::sdl_audio_callback(void *udata, Uint8 *buf, int bufLenIn)
 }
 
 void
-SDL_sound_handler::mix(boost::int16_t* outSamples, boost::int16_t* inSamples,
+SDL_sound_handler::mix(std::int16_t* outSamples, std::int16_t* inSamples,
             unsigned int nSamples, float volume)
 {
     Uint8* out = reinterpret_cast<Uint8*>(outSamples);
@@ -295,11 +294,11 @@ SDL_sound_handler::mix(boost::int16_t* outSamples, boost::int16_t* inSamples,
 }
 
 void
-SDL_sound_handler::plugInputStream(std::auto_ptr<InputStream> newStreamer)
+SDL_sound_handler::plugInputStream(std::unique_ptr<InputStream> newStreamer)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
-    sound_handler::plugInputStream(newStreamer);
+    sound_handler::plugInputStream(std::move(newStreamer));
 
     { // TODO: this whole block should only be executed when adding
       // the first stream. 
@@ -313,27 +312,6 @@ SDL_sound_handler::plugInputStream(std::auto_ptr<InputStream> newStreamer)
 }
 
 void
-SDL_sound_handler::mute()
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    sound_handler::mute();
-}
-
-void
-SDL_sound_handler::unmute()
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    sound_handler::unmute();
-}
-
-bool
-SDL_sound_handler::is_muted() const
-{
-    boost::mutex::scoped_lock lock(_mutedMutex);
-    return sound_handler::is_muted();
-}
-
-void
 SDL_sound_handler::pause() 
 {
     closeAudio();
@@ -354,7 +332,7 @@ SDL_sound_handler::unpause()
 void
 SDL_sound_handler::unplugInputStream(InputStream* id)
 {
-    boost::mutex::scoped_lock lock(_mutex);
+    std::lock_guard<std::mutex> lock(_mutex);
 
     sound_handler::unplugInputStream(id);
 }
diff --git a/libsound/sdl/sound_handler_sdl.h b/libsound/sdl/sound_handler_sdl.h
index 9d3c830..649f31a 100644
--- a/libsound/sdl/sound_handler_sdl.h
+++ b/libsound/sdl/sound_handler_sdl.h
@@ -25,7 +25,7 @@
 #include "sound_handler.h" // for inheritance
 
 #include <SDL_audio.h>
-#include <boost/thread/mutex.hpp>
+#include <mutex>
 
 // Forward declarations
 namespace gnash {
@@ -57,13 +57,10 @@ private:
     bool _audioOpened;
     
     /// Mutex for making sure threads doesn't mess things up
-    mutable boost::mutex _mutex;
-
-    /// Mutex protecting _muted (defined in base class)
-    mutable boost::mutex _mutedMutex;
+    mutable std::mutex _mutex;
 
     // See dox in sound_handler.h
-    void mix(boost::int16_t* outSamples, boost::int16_t* inSamples,
+    void mix(std::int16_t* outSamples, std::int16_t* inSamples,
                 unsigned int nSamples, float volume);
 
 
@@ -94,12 +91,12 @@ public:
     virtual int createStreamingSound(const media::SoundInfo& sinfo);
 
     // See dox in sound_handler.h
-    virtual int create_sound(std::auto_ptr<SimpleBuffer> data,
+    virtual int create_sound(std::unique_ptr<SimpleBuffer> data,
             const media::SoundInfo& sinfo);
 
     // See dox in sound_handler.h
     // overridden to serialize access to the data buffer slot
-    virtual StreamBlockId addSoundBlock(std::auto_ptr<SimpleBuffer> buf,
+    virtual StreamBlockId addSoundBlock(SimpleBuffer buf,
            size_t sample_count, int seekSamples, int streamId);
 
     // See dox in sound_handler.h
@@ -129,18 +126,6 @@ public:
     virtual media::SoundInfo* get_sound_info(int soundHandle) const;
 
     // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual void mute();
-
-    // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual void unmute();
-
-    // See dox in sound_handler.h
-    // overridden to serialize access to the _muted member
-    virtual bool is_muted() const;
-
-    // See dox in sound_handler.h
     // overridden to close audio card
     virtual void pause();
 
@@ -156,13 +141,13 @@ public:
     
     // See dox in sound_handler.h
     // Overridden to unpause SDL audio
-    void plugInputStream(std::auto_ptr<InputStream> in);
+    void plugInputStream(std::unique_ptr<InputStream> in);
 
     // Overidden to provide thread safety.
     void unplugInputStream(InputStream* id);
 
     // See dox in sound_handler.h
-    void fetchSamples(boost::int16_t* to, unsigned int nSamples);
+    void fetchSamples(std::int16_t* to, unsigned int nSamples);
 };
 
 } // gnash.sound namespace 
diff --git a/libsound/sound_handler.cpp b/libsound/sound_handler.cpp
index 3c0ae52..78ea118 100644
--- a/libsound/sound_handler.cpp
+++ b/libsound/sound_handler.cpp
@@ -19,10 +19,9 @@
 
 #include "sound_handler.h"
 
-#include <boost/cstdint.hpp> // For C99 int types
+#include <cstdint> // For C99 int types
 #include <vector> 
 #include <cmath> 
-#include <boost/scoped_array.hpp>
 
 #include "EmbedSound.h" // for use
 #include "InputStream.h" // for use
@@ -45,7 +44,7 @@ namespace sound {
 namespace {
 
 unsigned int
-silentStream(void*, boost::int16_t* stream, unsigned int len, bool& atEOF)
+silentStream(void*, std::int16_t* stream, unsigned int len, bool& atEOF)
 {
     std::fill(stream, stream + len, 0);
     atEOF=false;
@@ -77,7 +76,7 @@ ensurePadding(SimpleBuffer& data, media::MediaHandler* m)
 } // anonymous namespace
 
 sound_handler::StreamBlockId
-sound_handler::addSoundBlock(std::auto_ptr<SimpleBuffer> data,
+sound_handler::addSoundBlock(SimpleBuffer data,
         size_t sampleCount, int seekSamples, int handle)
 {
     if (!validHandle(_streamingSounds, handle)) {
@@ -93,20 +92,16 @@ sound_handler::addSoundBlock(std::auto_ptr<SimpleBuffer> data,
         return -1;
     }
 
-    assert(data.get());
-    ensurePadding(*data, _mediaHandler);
+    ensurePadding(data, _mediaHandler);
 
-    return sounddata->append(data, sampleCount, seekSamples);
+    return sounddata->append(std::move(data), sampleCount, seekSamples);
 }
 
 void
 sound_handler::delete_all_sounds()
 {
-    for (Sounds::iterator i = _sounds.begin(),
-                          e = _sounds.end(); i != e; ++i)
+    for (EmbedSound* sdef : _sounds)
     {
-        EmbedSound* sdef = *i;
-
         // The sound may have been deleted already.
         if (!sdef) continue;
 
@@ -117,11 +112,8 @@ sound_handler::delete_all_sounds()
     }
     _sounds.clear();
 
-    for (StreamingSounds::iterator i = _streamingSounds.begin(),
-                          e = _streamingSounds.end(); i != e; ++i)
+    for (StreamingSoundData* sdef : _streamingSounds)
     {
-        StreamingSoundData* sdef = *i;
-
         // Streaming sounds are never deleted.
         assert(sdef);
 
@@ -157,25 +149,21 @@ sound_handler::delete_sound(int handle)
     
     stopEmbedSoundInstances(*def);
     delete def;
-    _sounds[handle] = 0;
+    _sounds[handle] = nullptr;
 
 }
 
 void   
 sound_handler::stop_all_sounds()
 {
-    for (Sounds::iterator i = _sounds.begin(),
-                          e = _sounds.end(); i != e; ++i)
+    for (EmbedSound* sounddata : _sounds)
     {
-        EmbedSound* sounddata = *i;
         if ( ! sounddata ) continue; // could have been deleted already
         stopEmbedSoundInstances(*sounddata);
     }
 
-    for (StreamingSounds::iterator i = _streamingSounds.begin(),
-                          e = _streamingSounds.end(); i != e; ++i)
+    for (StreamingSoundData* sounddata : _streamingSounds)
     {
-        StreamingSoundData* sounddata = *i;
         if (!sounddata) continue; 
         stopEmbedSoundInstances(*sounddata);
     }
@@ -205,7 +193,7 @@ sound_handler::get_sound_info(int handle) const
     if (validHandle(_streamingSounds, handle)) {
         return &_streamingSounds[handle]->soundinfo;
     } 
-    return 0;
+    return nullptr;
 }
 
 void
@@ -253,9 +241,8 @@ sound_handler::stopAllEventSounds()
     log_debug("stopAllEventSounds called");
 #endif
 
-    for (Sounds::iterator i=_sounds.begin(), e=_sounds.end(); i != e; ++i)
+    for (EmbedSound* sounddata : _sounds)
     {
-        EmbedSound* sounddata = *i;
         if (!sounddata) continue; // possible ?
 
         stopEmbedSoundInstances(*sounddata);
@@ -273,8 +260,7 @@ sound_handler::stopEmbedSoundInstances(StreamingSoundData& def)
 
     // Now, for each playing InputStream, unplug it!
     // NOTE: could be optimized...
-    for (InputStreamVect::iterator i=playing.begin(), e=playing.end();
-            i!=e; ++i)
+    for (InputStream* stream : playing)
     {
 #ifdef GNASH_DEBUG_SOUNDS_MANAGEMENT
         log_debug(" unplugging input stream %p from stopEmbedSoundInstances", *i);
@@ -283,7 +269,7 @@ sound_handler::stopEmbedSoundInstances(StreamingSoundData& def)
         // Explicitly calling the base class implementation
         // is a (dirty?) way to avoid mutex-locking overrides
         // in subclasses causing deadlocks.
-        sound_handler::unplugInputStream(*i);
+        sound_handler::unplugInputStream(stream);
     }
 
     def.clearInstances();
@@ -300,8 +286,7 @@ sound_handler::stopEmbedSoundInstances(EmbedSound& def)
 
     // Now, for each playing InputStream, unplug it!
     // NOTE: could be optimized...
-    for (InputStreamVect::iterator i=playing.begin(), e=playing.end();
-            i!=e; ++i)
+    for (InputStream* stream : playing)
     {
 #ifdef GNASH_DEBUG_SOUNDS_MANAGEMENT
         log_debug(" unplugging input stream %p from stopEmbedSoundInstances", *i);
@@ -310,7 +295,7 @@ sound_handler::stopEmbedSoundInstances(EmbedSound& def)
         // Explicitly calling the base class implementation
         // is a (dirty?) way to avoid mutex-locking overrides
         // in subclasses causing deadlocks.
-        sound_handler::unplugInputStream(*i);
+        sound_handler::unplugInputStream(stream);
     }
 
     def.clearInstances();
@@ -372,8 +357,8 @@ sound_handler::get_duration(int handle) const
 
     const EmbedSound* sounddata = _sounds[handle];
 
-    const boost::uint32_t sampleCount = sounddata->soundinfo.getSampleCount();
-    const boost::uint32_t sampleRate = sounddata->soundinfo.getSampleRate();
+    const std::uint32_t sampleCount = sounddata->soundinfo.getSampleCount();
+    const std::uint32_t sampleRate = sounddata->soundinfo.getSampleRate();
 
     // Return the sound duration in milliseconds
     if (sampleCount > 0 && sampleRate > 0) {
@@ -388,7 +373,7 @@ sound_handler::get_duration(int handle) const
 int
 sound_handler::createStreamingSound(const media::SoundInfo& sinfo)
 {
-    std::auto_ptr<StreamingSoundData> sounddata(
+    std::unique_ptr<StreamingSoundData> sounddata(
             new StreamingSoundData(sinfo, 100));
 
     int sound_id = _streamingSounds.size();
@@ -399,7 +384,7 @@ sound_handler::createStreamingSound(const media::SoundInfo& sinfo)
 }
 
 int
-sound_handler::create_sound(std::auto_ptr<SimpleBuffer> data,
+sound_handler::create_sound(std::unique_ptr<SimpleBuffer> data,
                             const media::SoundInfo& sinfo)
 {
     if (data.get()) {
@@ -408,7 +393,7 @@ sound_handler::create_sound(std::auto_ptr<SimpleBuffer> data,
     else {
         log_debug("Event sound with no data!");
     }
-    std::auto_ptr<EmbedSound> sounddata(new EmbedSound(data, sinfo, 100));
+    std::unique_ptr<EmbedSound> sounddata(new EmbedSound(std::move(data), sinfo, 100));
 
     int sound_id = _sounds.size();
 
@@ -447,9 +432,9 @@ sound_handler::playStream(int soundId, StreamBlockId blockId)
     if (s.isPlaying() || s.empty()) return;
 
     try {
-        std::auto_ptr<InputStream> is(
+        std::unique_ptr<InputStream> is(
                 s.createInstance(*_mediaHandler, blockId));
-        plugInputStream(is);
+        plugInputStream(std::move(is));
     }
     catch (const MediaException& e) {
         log_error(_("Could not start streaming sound: %s"), e.what());
@@ -537,10 +522,10 @@ sound_handler::startSound(int handle, int loops, const SoundEnvelopes* env,
     try {
         // Make an InputStream for this sound and plug it into  
         // the set of InputStream channels
-        std::auto_ptr<InputStream> sound(
+        std::unique_ptr<InputStream> sound(
                 sounddata.createInstance(*_mediaHandler, inPoint, outPoint,
                     env, loops));
-        plugInputStream(sound);
+        plugInputStream(std::move(sound));
     }
     catch (const MediaException& e) {
         log_error(_("Could not start event sound: %s"), e.what());
@@ -549,7 +534,7 @@ sound_handler::startSound(int handle, int loops, const SoundEnvelopes* env,
 }
 
 void
-sound_handler::plugInputStream(std::auto_ptr<InputStream> newStreamer)
+sound_handler::plugInputStream(std::unique_ptr<InputStream> newStreamer)
 {
 #ifdef GNASH_DEBUG_SOUNDS_MANAGEMENT
     InputStream* newStream = newStreamer.get(); // for debugging
@@ -574,17 +559,15 @@ sound_handler::plugInputStream(std::auto_ptr<InputStream> newStreamer)
 void
 sound_handler::unplugAllInputStreams()
 {
-    for (InputStreams::iterator it=_inputStreams.begin(),
-                                itE=_inputStreams.end();
-            it != itE; ++it)
+    for (const InputStream* stream : _inputStreams)
     {
-        delete *it;
+        delete stream;
     }
     _inputStreams.clear();
 }
 
 void
-sound_handler::fetchSamples(boost::int16_t* to, unsigned int nSamples)
+sound_handler::fetchSamples(std::int16_t* to, unsigned int nSamples)
 {
     if (isPaused()) return; // should we write wav file anyway ?
 
@@ -596,19 +579,15 @@ sound_handler::fetchSamples(boost::int16_t* to, unsigned int nSamples)
     if (!_inputStreams.empty()) {
 
         // A buffer to fetch InputStream samples into
-        boost::scoped_array<boost::int16_t> buf(new boost::int16_t[nSamples]);
+        std::unique_ptr<std::int16_t[]> buf(new std::int16_t[nSamples]);
 
 #ifdef GNASH_DEBUG_SAMPLES_FETCHING 
         log_debug("Fetching %d samples from each of %d input streams", nSamples, _inputStreams.size());
 #endif
 
         // Loop through the aux streamers sounds
-        for (InputStreams::iterator it=_inputStreams.begin(),
-                                    end=_inputStreams.end();
-                                    it != end; ++it)
+        for (InputStream* is : _inputStreams)
         {
-            InputStream* is = *it;
-
             unsigned int wrote = is->fetchSamples(buf.get(), nSamples);
             if (wrote < nSamples) {
                 // fill what wasn't written
@@ -645,7 +624,7 @@ sound_handler::fetchSamples(boost::int16_t* to, unsigned int nSamples)
 void
 sound_handler::setAudioDump(const std::string& wavefile)
 {
-    bool wasDumping = (_wavWriter.get() != 0);
+    bool wasDumping = (_wavWriter.get() != nullptr);
 
     if (!wavefile.empty()) {
         _wavWriter.reset(new WAVWriter(wavefile));
@@ -665,9 +644,8 @@ sound_handler::streamingSound() const
 {
     if (_inputStreams.empty()) return false;
 
-    for (StreamingSounds::const_iterator it = _streamingSounds.begin(), 
-            e = _streamingSounds.end(); it != e; ++it) {
-        if ((*it)->isPlaying()) return true;
+    for (StreamingSoundData* const stream : _streamingSounds) {
+        if (stream->isPlaying()) return true;
     }
     return false;
 }
@@ -737,7 +715,7 @@ bool
 sound_handler::is_muted() const
 {
     // TODO: lock a mutex ?
-    return _muted;
+    return _muted.load();
 }
 
 void
@@ -768,11 +746,11 @@ sound_handler::attach_aux_streamer(aux_streamer_ptr ptr, void* owner)
     assert(owner);
     assert(ptr);
 
-    std::auto_ptr<InputStream> newStreamer ( new AuxStream(ptr, owner) );
+    std::unique_ptr<InputStream> newStreamer ( new AuxStream(ptr, owner) );
 
     InputStream* ret = newStreamer.get();
 
-    plugInputStream(newStreamer);
+    plugInputStream(std::move(newStreamer));
 
     return ret;
 }
diff --git a/libsound/sound_handler.h b/libsound/sound_handler.h
index 1486139..a5dd629 100644
--- a/libsound/sound_handler.h
+++ b/libsound/sound_handler.h
@@ -23,12 +23,12 @@
 #include "gnashconfig.h"
 #endif
 
-#include <string>
-#include <vector>
-#include <memory>
+#include <atomic>
 #include <limits>
+#include <memory>
 #include <set>
-#include <boost/scoped_ptr.hpp>
+#include <string>
+#include <vector>
 
 #include "dsodefs.h" // for DSOEXPORT
 #include "SoundEnvelope.h" // for SoundEnvelopes typedef
@@ -118,7 +118,7 @@ public:
     /// @param sinfo        A SoundInfo object containing info about
     ///                     samplerate, samplecount, stereo etc.
     /// @return             handle for later identification.
-    virtual int create_sound(std::auto_ptr<SimpleBuffer> data,
+    virtual int create_sound(std::unique_ptr<SimpleBuffer> data,
             const media::SoundInfo& sinfo);
         
     /// Remove scheduled requests to play the specified sound buffer slot
@@ -234,7 +234,7 @@ public:
     ///
     /// Gnash's parser calls this to fill up soundstreams data.
     ///
-    /// @param data         The sound data to be stored. May not be null.
+    /// @param data         The sound data to be stored.
     ///                     This should be appropriately padded (@see
     ///                     MediaHandler::getInputPaddingBytes()), or a
     ///                     reallocation will take place here.
@@ -244,7 +244,7 @@ public:
     ///                     to add data to
     /// @return             a handler for the new block for use in playStream()
     /// @throw              SoundException on error
-    virtual StreamBlockId addSoundBlock(std::auto_ptr<SimpleBuffer> data,
+    virtual StreamBlockId addSoundBlock(SimpleBuffer data,
                size_t sampleCount, int seekSamples, int streamId);
 
     /// Returns a SoundInfo object for the sound with the given id.
@@ -313,15 +313,15 @@ public:
     virtual void reset();
         
     /// Call this to mute audio
-    virtual void mute();
+    void mute();
 
     /// Call this to unmute audio
-    virtual void unmute();
+    void unmute();
 
     /// Returns whether or not sound is muted.
     //
     /// @return true if muted, false if not
-    virtual bool is_muted() const;
+    bool is_muted() const;
 
     /// gnash calls this to pause audio
     virtual void pause() { _paused=true; }
@@ -413,7 +413,7 @@ public:
     ///           to give interpretation of what comes back (how many
     ///           bytes per channel, which format).
     ///
-    virtual void fetchSamples(boost::int16_t* to, unsigned int nSamples);
+    virtual void fetchSamples(std::int16_t* to, unsigned int nSamples);
 
     /// Mix nSamples from inSamples to outSamples, with given volume
     //
@@ -440,7 +440,7 @@ public:
     ///       Maybe, a Mixer instance should be created, initialized
     ///       with number of channels, at each fetching.
     ///
-    virtual void mix(boost::int16_t* outSamples, boost::int16_t* inSamples,
+    virtual void mix(std::int16_t* outSamples, std::int16_t* inSamples,
                 unsigned int nSamples, float volume) = 0;
 
     /// Request to dump audio to the given filename
@@ -473,7 +473,7 @@ protected:
     /// @param in
     ///     The InputStream to plug, ownership transferred
     ///
-    virtual void plugInputStream(std::auto_ptr<InputStream> in);
+    virtual void plugInputStream(std::unique_ptr<InputStream> in);
 
     /// Unplug all input streams
     virtual void unplugAllInputStreams();
@@ -498,7 +498,7 @@ private:
     bool _paused;
 
     /// True if sound is muted
-    bool _muted;
+    std::atomic<bool> _muted;
 
     /// Final output volume
     int _volume;
@@ -535,7 +535,7 @@ private:
     /// Unplug any completed input stream
     void unplugCompletedInputStreams();
 
-    boost::scoped_ptr<WAVWriter> _wavWriter;
+    std::unique_ptr<WAVWriter> _wavWriter;
 
 };
 
diff --git a/macros/ax_cxx_compile_stdcxx_11.m4 b/macros/ax_cxx_compile_stdcxx_11.m4
new file mode 100644
index 0000000..7fb06eb
--- /dev/null
+++ b/macros/ax_cxx_compile_stdcxx_11.m4
@@ -0,0 +1,145 @@
+# ============================================================================
+#  http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
+# ============================================================================
+#
+# SYNOPSIS
+#
+#   AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
+#
+# DESCRIPTION
+#
+#   Check for baseline language coverage in the compiler for the C++11
+#   standard; if necessary, add switches to CXXFLAGS to enable support.
+#
+#   The first argument, if specified, indicates whether you insist on an
+#   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
+#   -std=c++11).  If neither is specified, you get whatever works, with
+#   preference for an extended mode.
+#
+#   The second argument, if specified 'mandatory' or if left unspecified,
+#   indicates that baseline C++11 support is required and that the macro
+#   should error out if no mode with that support is found.  If specified
+#   'optional', then configuration proceeds regardless, after defining
+#   HAVE_CXX11 if and only if a supporting mode is found.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Benjamin Kosnik <bkoz at redhat.com>
+#   Copyright (c) 2012 Zack Weinberg <zackw at panix.com>
+#   Copyright (c) 2013 Roy Stogner <roystgnr at ices.utexas.edu>
+#   Copyright (c) 2014 Alexey Sokolov <sokolov at google.com>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 4
+
+m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[
+  template <typename T>
+    struct check
+    {
+      static_assert(sizeof(int) <= sizeof(T), "not big enough");
+    };
+
+#if 0
+    // The override keyword is not supported until GCC-4.7.
+    struct Base {
+    virtual void f() {}
+    };
+    struct Child : public Base {
+    virtual void f() override {}
+    };
+#endif
+
+    typedef check<check<bool>> right_angle_brackets;
+
+    int a;
+    decltype(a) b;
+
+    typedef check<int> check_type;
+    check_type c;
+    check_type&& cr = static_cast<check_type&&>(c);
+
+    auto d = a;
+    auto l = [](){};
+]])
+
+AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl
+  m4_if([$1], [], [],
+        [$1], [ext], [],
+        [$1], [noext], [],
+        [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
+  m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
+        [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
+        [$2], [optional], [ax_cxx_compile_cxx11_required=false],
+        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])
+  AC_LANG_PUSH([C++])dnl
+  ac_success=no
+  AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
+  ax_cv_cxx_compile_cxx11,
+  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+    [ax_cv_cxx_compile_cxx11=yes],
+    [ax_cv_cxx_compile_cxx11=no])])
+  if test x$ax_cv_cxx_compile_cxx11 = xyes; then
+    ac_success=yes
+  fi
+
+  m4_if([$1], [noext], [], [dnl
+  if test x$ac_success = xno; then
+    for switch in -std=gnu++11 -std=gnu++0x; do
+      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
+      AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
+                     $cachevar,
+        [ac_save_CXXFLAGS="$CXXFLAGS"
+         CXXFLAGS="$CXXFLAGS $switch"
+         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+          [eval $cachevar=yes],
+          [eval $cachevar=no])
+         CXXFLAGS="$ac_save_CXXFLAGS"])
+      if eval test x\$$cachevar = xyes; then
+        CXXFLAGS="$CXXFLAGS $switch"
+        ac_success=yes
+        break
+      fi
+    done
+  fi])
+
+  m4_if([$1], [ext], [], [dnl
+  if test x$ac_success = xno; then
+    for switch in -std=c++11 -std=c++0x; do
+      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
+      AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
+                     $cachevar,
+        [ac_save_CXXFLAGS="$CXXFLAGS"
+         CXXFLAGS="$CXXFLAGS $switch"
+         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
+          [eval $cachevar=yes],
+          [eval $cachevar=no])
+         CXXFLAGS="$ac_save_CXXFLAGS"])
+      if eval test x\$$cachevar = xyes; then
+        CXXFLAGS="$CXXFLAGS $switch"
+        ac_success=yes
+        break
+      fi
+    done
+  fi])
+  AC_LANG_POP([C++])
+  if test x$ax_cxx_compile_cxx11_required = xtrue; then
+    if test x$ac_success = xno; then
+      AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
+    fi
+  else
+    if test x$ac_success = xno; then
+      HAVE_CXX11=0
+      AC_MSG_NOTICE([No compiler with C++11 support was found])
+    else
+      HAVE_CXX11=1
+      AC_DEFINE(HAVE_CXX11,1,
+                [define if the compiler supports basic C++11 syntax])
+    fi
+
+    AC_SUBST(HAVE_CXX11)
+  fi
+])
diff --git a/macros/boost.m4 b/macros/boost.m4
index a098607..280c7ab 100644
--- a/macros/boost.m4
+++ b/macros/boost.m4
@@ -34,10 +34,10 @@ AC_DEFUN([GNASH_PATH_BOOST],
   libname=""
   dnl this is a list of *required* headers. If any of these are missing, this
   dnl test will return a failure, and Gnash won't build.
-  boost_headers="detail/lightweight_mutex.hpp thread/thread.hpp multi_index_container.hpp multi_index/key_extractors.hpp thread/mutex.hpp program_options/options_description.hpp iostreams/stream.hpp"
+  boost_headers="multi_index_container.hpp multi_index/key_extractors.hpp program_options/options_description.hpp iostreams/stream.hpp"
   dnl this is a list of *required* libraries. If any of these are missing, this
   dnl test will return a failure, and Gnash won't build.
-  boost_libs="thread program_options system"
+  boost_libs="program_options"
   boost_plugin_libs="iostreams"
 
   dnl this is a list of *recommended* libraries. If any of these are missing,
@@ -106,14 +106,6 @@ AC_DEFUN([GNASH_PATH_BOOST],
     done
   done
 
-  dnl As of boost 1.47, the chrono library is required. You can get a list of
-  dnl when a Boost library was added at:
-  dnl http://www.boost.org/doc/libs/?sort=boost-version
-
-  gnash_boost_version=`grep "define.*BOOST_VERSION " ${gnash_boost_topdir}/version.hpp | cut -d ' ' -f 3`
-  if test ${gnash_boost_version} -ge 104700; then
-    boost_libs="${boost_libs} chrono"
-  fi
   dnl this is the default list for paths to search. This gets
   dnl redefined if --with-boost-lib= is specified.
   newlist=$libslist
diff --git a/macros/npapi.m4 b/macros/npapi.m4
index 7356fb6..2e0147a 100644
--- a/macros/npapi.m4
+++ b/macros/npapi.m4
@@ -34,7 +34,11 @@ AC_DEFUN([GNASH_PATH_NPAPI],
 
   if test x$cross_compiling = xno; then
     if test x"$PKG_CONFIG" != x -a x"${ac_cv_path_npapi_incl}" = x; then
-      $PKG_CONFIG --exists mozilla-plugin && NPAPI_CFLAGS="`$PKG_CONFIG --cflags mozilla-plugin`"
+      if $PKG_CONFIG --exists npapi-sdk; then
+        NPAPI_CFLAGS="`$PKG_CONFIG --cflags npapi-sdk`"
+      elif $PKG_CONFIG --exists mozilla-plugin; then
+        NPAPI_CFLAGS="`$PKG_CONFIG --cflags mozilla-plugin`"
+      fi
     fi
   fi
 
diff --git a/macros/po.m4 b/macros/po.m4
index 47f36a4..3c9884b 100644
--- a/macros/po.m4
+++ b/macros/po.m4
@@ -24,7 +24,7 @@ AC_DEFUN([AM_PO_SUBDIRS],
 [
   AC_REQUIRE([AC_PROG_MAKE_SET])dnl
   AC_REQUIRE([AC_PROG_INSTALL])dnl
-  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AC_PROG_MKDIR_P])dnl defined by automake
   AC_REQUIRE([AM_NLS])dnl
 
   dnl Release version of the gettext macros. This is used to ensure that
diff --git a/plugin/aos4/plugin.cpp b/plugin/aos4/plugin.cpp
index 4ee69f2..aa1d80f 100644
--- a/plugin/aos4/plugin.cpp
+++ b/plugin/aos4/plugin.cpp
@@ -66,7 +66,7 @@
   Compatible Shockwave Flash "FLASH_VERSION
 
 #include <cstdarg>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <fstream>
 
 #include "plugin.h"
@@ -344,7 +344,7 @@ nsPluginInstance::shut(void)
 
 NPError
 nsPluginInstance::NewStream(NPMIMEType type, NPStream *stream,
-        NPBool seekable, boost::uint16_t *stype)
+        NPBool seekable, std::uint16_t *stype)
 {
     DBG("nsPluginInstance::NewStream\n");
     DBG("stream->url: %s\n", stream->url);
@@ -488,7 +488,7 @@ nsPluginInstance::threadMain(void)
     md->completeLoad();
     DBG("Movie loaded.\n");
 
-    std::auto_ptr<gnash::Movie> mr(md->createMovie());
+    std::unique_ptr<gnash::Movie> mr(md->createMovie());
     mr->setVariables(_flashVars);
     root.setRootMovie(mr.release());
     //root.set_display_viewport(0, 0, _width, _height);
diff --git a/plugin/aos4/plugin.h b/plugin/aos4/plugin.h
index bc33f26..6734898 100644
--- a/plugin/aos4/plugin.h
+++ b/plugin/aos4/plugin.h
@@ -101,7 +101,7 @@ private:
     struct BitMap *_bmp;
     unsigned char* _memaddr;
 
-    //std::auto_ptr<gnash::media::sound_handler> _sound_handler;
+    //std::unique_ptr<gnash::media::sound_handler> _sound_handler;
     gnash::Renderer* _Renderer;
 
     // Mouse state.
diff --git a/plugin/npapi/external.cpp b/plugin/npapi/external.cpp
index 6648054..a1c199e 100644
--- a/plugin/npapi/external.cpp
+++ b/plugin/npapi/external.cpp
@@ -21,8 +21,7 @@
 #endif
 
 #include <boost/algorithm/string/erase.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/scoped_ptr.hpp>
+#include <memory>
 
 #include <string>
 #include <sstream>
@@ -200,10 +199,10 @@ ExternalInterface::makeObject (std::map<std::string, std::string> &args)
 //              <number>135.78</number>
 //      </arguments>
 // </invoke>
-boost::shared_ptr<ExternalInterface::invoke_t>
+std::shared_ptr<ExternalInterface::invoke_t>
 ExternalInterface::parseInvoke(const std::string &xml)
 {
-    boost::shared_ptr<ExternalInterface::invoke_t> invoke;
+    std::shared_ptr<ExternalInterface::invoke_t> invoke;
     if (xml.empty()) {
         return invoke;
     }
@@ -295,10 +294,10 @@ ExternalInterface::parseXML(const std::string &xml)
             end = xml.find("</number>");
             std::string str = xml.substr(start, end-start);
             if (str.find(".") != std::string::npos) {
-                double num = strtod(str.c_str(), NULL);
+                double num = strtod(str.c_str(), nullptr);
                 DOUBLE_TO_NPVARIANT(num, value);
             } else {
-                int num = strtol(str.c_str(), NULL, 0);
+                int num = strtol(str.c_str(), nullptr, 0);
                 INT32_TO_NPVARIANT(num, value);
             }
         } else if (tag == "<string>") {
@@ -324,7 +323,7 @@ ExternalInterface::parseXML(const std::string &xml)
               for (it=props.begin(); it != props.end(); ++it) {
                   NPIdentifier id = NPN_GetStringIdentifier(it->first.c_str());
                   GnashNPVariant& value = it->second;
-                  NPN_SetProperty(NULL, obj, id, &value.get());
+                  NPN_SetProperty(nullptr, obj, id, &value.get());
               }
               OBJECT_TO_NPVARIANT(obj, value);
             }
@@ -340,7 +339,7 @@ ExternalInterface::parseXML(const std::string &xml)
               for (it=props.begin(); it != props.end(); ++it) {
                   NPIdentifier id = NPN_GetStringIdentifier(it->first.c_str());
                   GnashNPVariant& value = it->second;
-                  NPN_SetProperty(NULL, obj, id, &value.get());
+                  NPN_SetProperty(nullptr, obj, id, &value.get());
               }
               OBJECT_TO_NPVARIANT(obj, value);
             }
diff --git a/plugin/npapi/external.h b/plugin/npapi/external.h
index 57f7014..7a0aa67 100644
--- a/plugin/npapi/external.h
+++ b/plugin/npapi/external.h
@@ -23,10 +23,10 @@
 #include "gnashconfig.h"
 #endif
 
+#include <memory>
 #include <string>
 #include <vector>
 #include <map>
-#include <boost/shared_ptr.hpp>
 
 #include "npapi.h"
 #include "npruntime.h"
@@ -62,7 +62,7 @@ struct ExternalInterface
     static std::string makeObject (std::map<std::string, std::string> &args);
     
     static GnashNPVariant parseXML(const std::string &xml);
-    static boost::shared_ptr<invoke_t> parseInvoke(const std::string &xml);
+    static std::shared_ptr<invoke_t> parseInvoke(const std::string &xml);
     
     static std::map<std::string, GnashNPVariant> parseProperties(const std::string &xml);
     static std::vector<GnashNPVariant> parseArguments(const std::string &xml);
diff --git a/plugin/npapi/mozilla-sdk/np_entry.cpp b/plugin/npapi/mozilla-sdk/np_entry.cpp
index 35f4b0c..5573ff5 100644
--- a/plugin/npapi/mozilla-sdk/np_entry.cpp
+++ b/plugin/npapi/mozilla-sdk/np_entry.cpp
@@ -43,7 +43,7 @@ NP_Shutdown()
 NPError
 fillPluginFunctionTable(NPPluginFuncs* aNPPFuncs)
 {
-    if(aNPPFuncs == NULL) {
+    if(aNPPFuncs == nullptr) {
         return NPERR_INVALID_FUNCTABLE_ERROR;
     }
     
@@ -93,7 +93,7 @@ fillNetscapeFunctionTable(NPNetscapeFuncs* aNPNFuncs)
 {
     int i = 0, n;
     
-    if(aNPNFuncs == NULL) {
+    if(aNPNFuncs == nullptr) {
         return NPERR_INVALID_FUNCTABLE_ERROR;
     }
     
diff --git a/plugin/npapi/mozilla-sdk/npn_gate.cpp b/plugin/npapi/mozilla-sdk/npn_gate.cpp
index ef41572..3778ebe 100644
--- a/plugin/npapi/mozilla-sdk/npn_gate.cpp
+++ b/plugin/npapi/mozilla-sdk/npn_gate.cpp
@@ -165,7 +165,7 @@ NPN_Status(NPP instance, const char *message)
 const char *
 NPN_UserAgent(NPP instance)
 {
-    const char * rv = NULL;
+    const char * rv = nullptr;
     rv = NPNFuncs.uagent(instance);
     return rv;
 }
@@ -173,7 +173,7 @@ NPN_UserAgent(NPP instance)
 void *
 NPN_MemAlloc(uint32_t size)
 {
-    void * rv = NULL;
+    void * rv = nullptr;
     rv = NPNFuncs.memalloc(size);
     return rv;
 }
diff --git a/plugin/npapi/plugin.cpp b/plugin/npapi/plugin.cpp
index cd0f7a3..3c6f423 100644
--- a/plugin/npapi/plugin.cpp
+++ b/plugin/npapi/plugin.cpp
@@ -22,7 +22,6 @@
 #endif
 
 #include <boost/format.hpp>
-#include <boost/scoped_array.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/algorithm/string/find.hpp>
 #define BOOST_IOSTREAMS_USE_DEPRECATED
@@ -148,10 +147,10 @@ static const char* getPluginDescription();
 static const char*
 getPluginDescription() 
 {
-    static const char* desc = NULL;
+    static const char* desc = nullptr;
     if (!desc) {
         desc = std::getenv("GNASH_PLUGIN_DESCRIPTION");
-        if (desc == NULL) desc = PLUGIN_DESCRIPTION;
+        if (desc == nullptr) desc = PLUGIN_DESCRIPTION;
     }
     return desc;
 }
@@ -216,7 +215,7 @@ NS_PluginInitialize()
     // First, check for XEmbed support. The NPAPI Gnash plugin
     // only works with XEmbed, so tell the plugin API to fail if
     // XEmbed is not found.
-    err = NPN_GetValue(NULL,NPNVSupportsXEmbedBool,
+    err = NPN_GetValue(nullptr,NPNVSupportsXEmbedBool,
                        (void *)&supportsXEmbed);
 
     if (err != NPERR_NO_ERROR || !supportsXEmbed) {
@@ -229,7 +228,7 @@ NS_PluginInitialize()
     // GTK is not strictly required, but we do use the Glib main event loop,
     // so lack of GTK means reduced functionality.
     NPNToolkitType toolkit;
-    err = NPN_GetValue(NULL, NPNVToolkit, &toolkit);
+    err = NPN_GetValue(nullptr, NPNVToolkit, &toolkit);
 
     if (err != NPERR_NO_ERROR || toolkit != NPNVGtk2) {
         gnash::log_error("NPAPI ERROR: No GTK2 support in this browser! Have version %d", (int)toolkit);
@@ -241,7 +240,7 @@ NS_PluginInitialize()
     Check for environment variables.
     */
     char* opts = std::getenv("GNASH_OPTIONS");
-    if (opts != NULL) {
+    if (opts != nullptr) {
         gnash::log_debug("GNASH_OPTIONS: %s", opts);
         
         // Should the plugin wait for gdb to be attached?
@@ -266,7 +265,7 @@ NS_PluginInitialize()
     newGnashRc.append("/gnashpluginrc");
 #endif
 
-    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";
@@ -294,7 +293,7 @@ NS_PluginInitialize()
         gnash::log_error("WARNING: NPAPI plugin could not find user home dir");
     }
 
-    char *gnashrc = std::getenv("GNASHRC");
+    const char *gnashrc = std::getenv("GNASHRC");
     if ( gnashrc ) {
         newGnashRc.append(":");
         newGnashRc.append(gnashrc);
@@ -399,7 +398,7 @@ NS_NewPluginInstance(nsPluginCreateData * aCreateDataStruct)
     // gnash::log_debug(__PRETTY_FUNCTION__);
 
     if(!aCreateDataStruct) {
-        return NULL;
+        return nullptr;
     }
 
     return new gnash::nsPluginInstance(aCreateDataStruct);
@@ -439,7 +438,7 @@ nsPluginInstance::nsPluginInstance(nsPluginCreateData* data)
     _childpid(0),
     _filefd(-1),
     _name(),
-    _scriptObject(0)
+    _scriptObject(nullptr)
 {
     // gnash::log_debug("%s: %x", __PRETTY_FUNCTION__, (void *)this);
 
@@ -740,7 +739,7 @@ nsPluginInstance::handlePlayerRequests(GIOChannel* iochan, GIOCondition cond)
     gchar buffer[buf_size];
 
     do {
-        GError* error = 0;
+        GError* error = nullptr;
         gsize bytes_read = 0;
 
         GIOStatus status = g_io_channel_read_chars(iochan, buffer, buf_size,
@@ -821,7 +820,7 @@ nsPluginInstance::processPlayerRequest()
          
         // Extract a message from the packet
         std::string msg = packet.substr(0, pos + term.size());
-        boost::shared_ptr<plugin::ExternalInterface::invoke_t> invoke =
+        std::shared_ptr<plugin::ExternalInterface::invoke_t> invoke =
             plugin::ExternalInterface::parseInvoke(msg);
 
         // drop the parsed message from the packet
@@ -934,7 +933,7 @@ nsPluginInstance::processPlayerRequest()
         if (!invoke->name.empty() && !invoke->args.empty()) {
             //Convert the as_value argument to NPVariant
             const size_t count = invoke->args.size() - 1;
-            boost::scoped_array<NPVariant> args(new NPVariant[count]);
+            std::unique_ptr<NPVariant[]> args(new NPVariant[count]);
             //Skip the first argument
             for (size_t i = 0; i < count; ++i) {
                 invoke->args[i+1].copy(args[i]);
@@ -1073,7 +1072,7 @@ nsPluginInstance::getDocumentProp(const std::string& propname) const
         return rv;
     }
 
-    boost::shared_ptr<NPObject> window_obj(windowobj, NPN_ReleaseObject);
+    std::shared_ptr<NPObject> window_obj(windowobj, NPN_ReleaseObject);
   
     NPIdentifier doc_id = NPN_GetStringIdentifier("document");
 
@@ -1082,7 +1081,7 @@ nsPluginInstance::getDocumentProp(const std::string& propname) const
         return rv;
     }
 
-    boost::shared_ptr<NPVariant> doc_var(&docvar, NPN_ReleaseVariantValue);
+    std::shared_ptr<NPVariant> doc_var(&docvar, NPN_ReleaseVariantValue);
 
     if (!NPVARIANT_IS_OBJECT(docvar)) {
         return rv;
@@ -1097,7 +1096,7 @@ nsPluginInstance::getDocumentProp(const std::string& propname) const
         return rv;
     }
 
-    boost::shared_ptr<NPVariant> prop_var(&propvar, NPN_ReleaseVariantValue);
+    std::shared_ptr<NPVariant> prop_var(&propvar, NPN_ReleaseVariantValue);
 
     if (!NPVARIANT_IS_STRING(propvar)) {
         return rv;
@@ -1122,7 +1121,7 @@ nsPluginInstance::setupCookies(const std::string& pageurl)
 
     std::string ncookie;
  
-    char *cookie = 0;
+    char *cookie = nullptr;
     uint32_t length = 0;
 
     NPError rv = NPERR_GENERIC_ERROR;
@@ -1197,7 +1196,7 @@ nsPluginInstance::setupProxy(const std::string& url)
     if (!NPNFuncs.getvalueforurl) return;
 #endif
 
-    char *proxy = 0;
+    char *proxy = nullptr;
     uint32_t length = 0;
 #if NPAPI_VERSION != 190
     NPN_GetValueForURL(_instance, NPNURLVProxy, url.c_str(),
@@ -1405,7 +1404,7 @@ nsPluginInstance::startProc()
     
     std::transform(arg_vec.begin(), arg_vec.end(), std::back_inserter(args),
                    std::mem_fun_ref(&std::string::c_str));
-    args.push_back(0);
+    args.push_back(nullptr);
     
     // Argument List prepared, now fork(), close file descriptors and execv()
     
@@ -1419,27 +1418,19 @@ nsPluginInstance::startProc()
     
     // If we are the parent and fork() worked, childpid is a positive integer.
     if (_childpid > 0) {
-        
-        // we want to write to p2c pipe, so close read-fd0
-        ret = close (p2c_pipe[0]);
-        if (ret == -1) {
-            // this is not really a fatal error, so continue best as we can
-            gnash::log_error("p2c_pipe[0] close() failed: %s",
-                             strerror(errno));
-        }
-        
-        // we want to read from c2p pipe, so close read-fd1
-        ret = close (c2p_pipe[1]);
-        if (ret == -1) {
+        // Close the child's end of the pipes.
+        int fdstoclose[] = {p2c_controlpipe[0], p2c_pipe[0], c2p_pipe[1]};
+        int num_failed = std::count_if(fdstoclose, fdstoclose+3, close);
+
+        if (num_failed > 0) {
             // this is not really a fatal error, so continue best as we can
-            gnash::log_error("c2p_pipe[1] close() failed: %s",
-                             strerror(errno));
-            gnash::log_debug("Forked successfully but with ignorable errors.");
-        } else {
-            gnash::log_debug("Forked successfully, child process PID is %d",
-                             _childpid);
+            gnash::log_error("%d fds failed to close: %s (error ignored).",
+                             num_failed, strerror(errno));
         }
 
+        gnash::log_debug("Forked successfully, child process PID is %d",
+                         _childpid);
+
         if (!cookiefile.empty()) {
             cookiemap.insert(std::make_pair(_childpid, cookiefile));
             gnash::log_debug("Pid %d associated with cookiefile %s",
diff --git a/plugin/npapi/pluginScriptObject.cpp b/plugin/npapi/pluginScriptObject.cpp
index 29d1408..3b599c8 100644
--- a/plugin/npapi/pluginScriptObject.cpp
+++ b/plugin/npapi/pluginScriptObject.cpp
@@ -20,18 +20,8 @@
 #include "gnashconfig.h"
 #endif
 
-#include <iostream>
-#include <fstream>
-#include <sstream>
 #include <map>
 #include <string>
-#include <fcntl.h>
-#include <cstring>
-#include <cstdlib>
-#include <cstdio>
-#include <cerrno>
-#include <sys/types.h>
-#include <unistd.h>
 #if defined(HAVE_WINSOCK_H) && !defined(__OS2__)
 # include <winsock2.h>
 # include <windows.h>
@@ -39,13 +29,9 @@
 # include <io.h>
 # include <ws2tcpip.h>
 #else
-# include <sys/un.h>
 # include <sys/ioctl.h>
 # include <unistd.h>
-# include <sys/select.h>
-# include <netinet/in.h>
-# include <arpa/inet.h>
-# include <sys/socket.h>
+# include <poll.h>
 #endif
 #include "npapi.h"
 #include "npruntime.h"
@@ -261,7 +247,7 @@ GnashPluginScriptObject::initializeIdentifiers()
 
 // Constructor
 GnashPluginScriptObject::GnashPluginScriptObject()
-    : _nppinstance (0),
+    : _nppinstance (nullptr),
       _controlfd(-1),
       _hostfd(-1)
 {
@@ -703,8 +689,6 @@ GnashPluginScriptObject::readPlayer()
 std::string
 GnashPluginScriptObject::readPlayer(int fd)
 {
-//    log_debug(__PRETTY_FUNCTION__);
-
     std::string empty;
 
     if (fd <= 0) {
@@ -714,41 +698,41 @@ GnashPluginScriptObject::readPlayer(int fd)
 
     // Wait for some data from the player
     int bytes = 0;
-    fd_set fdset;
-    FD_ZERO(&fdset);
-    FD_SET(fd, &fdset);
-    struct timeval tval;
-    tval.tv_sec = 2;
-    tval.tv_usec = 0;
-    // log_debug("Waiting for data... ");
-    if (select(fd+1, &fdset, NULL, NULL, &tval)) {
-        // log_debug("There is data in the network");
-#ifndef _WIN32
-        ioctl(fd, FIONREAD, &bytes);
-#else
-        ioctlSocket(fd, FIONREAD, &bytes);
-#endif
-    }
+
+    pollfd pfds[1] = { pollfd() };
+    pfds[0].fd = fd;
+    pfds[0].events = POLLIN;
+
+    int rv = poll(pfds, 1 /* arraySize */, 2000 /* ms */);
 
     // No data yet
-    if (bytes == 0) {
+    if (rv <= 0) {
         return empty;
     }
 
+#ifndef _WIN32
+    rv = ioctl(fd, FIONREAD, &bytes);
+#else
+    rv = ioctlSocket(fd, FIONREAD, &bytes);
+#endif
+    if (rv < 0) {
+        log_error("FIONREAD ioctl failed, unable to get network buffer length");
+        return empty;
+    }
     log_debug("There are %d bytes in the network buffer", bytes);
 
-    std::string buf(bytes, '\0');
-
-    int ret = ::read(fd, &buf[0], bytes);
-    if (ret <= 0) {
+    if (bytes <= 0) {
         return empty;
     }
 
-    if (ret < bytes) {
-        buf.resize(ret);
+    char buf[bytes];
+
+    int ret = ::read(fd, buf, bytes);
+    if (ret <= 0 || ret > bytes) {
+        return empty;
     }
 
-    return buf;
+    return std::string(buf, ret);
 }
 
 
diff --git a/plugin/npapi/test.cpp b/plugin/npapi/test.cpp
index 3498157..1eb2367 100644
--- a/plugin/npapi/test.cpp
+++ b/plugin/npapi/test.cpp
@@ -281,7 +281,7 @@ main(int , char **)
 
     // Parse an invoke message
     xml = "<invoke name=\"barbyfoo\" returntype=\"xml\"><arguments><string>barfoo</string><number>135.78</number></arguments></invoke>";
-    boost::shared_ptr<plugin::ExternalInterface::invoke_t> invoke ( plugin::ExternalInterface::parseInvoke(xml) );
+    std::shared_ptr<plugin::ExternalInterface::invoke_t> invoke ( plugin::ExternalInterface::parseInvoke(xml) );
     str = NPStringToString(NPVARIANT_TO_STRING(invoke->args[0].get()));
     if ((invoke->name == "barbyfoo") && (invoke->type == "xml")
         && (NPVARIANT_IS_STRING(invoke->args[0].get()))
diff --git a/plugin/win32/plugin.cpp b/plugin/win32/plugin.cpp
index 771d6e7..6bfaed1 100644
--- a/plugin/win32/plugin.cpp
+++ b/plugin/win32/plugin.cpp
@@ -68,7 +68,7 @@
 #include <wingdi.h>
 
 #include <cstdarg>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <fstream>
 
 #include "plugin.h"
@@ -341,7 +341,7 @@ nsPluginInstance::shut(void)
 
 NPError
 nsPluginInstance::NewStream(NPMIMEType type, NPStream *stream,
-        NPBool seekable, boost::uint16_t *stype)
+        NPBool seekable, std::uint16_t *stype)
 {
     DBG("nsPluginInstance::NewStream\n");
     DBG("stream->url: %s\n", stream->url);
@@ -486,7 +486,7 @@ nsPluginInstance::threadMain(void)
     md->completeLoad();
     DBG("Movie loaded.\n");
 
-    std::auto_ptr<gnash::Movie> mr(md->createMovie());
+    std::unique_ptr<gnash::Movie> mr(md->createMovie());
     mr->setVariables(_flashVars);
     root.setRootMovie(mr.release());
     root.set_display_viewport(0, 0, _width, _height);
diff --git a/plugin/win32/plugin.h b/plugin/win32/plugin.h
index 03b899a..64c505d 100644
--- a/plugin/win32/plugin.h
+++ b/plugin/win32/plugin.h
@@ -101,7 +101,7 @@ private:
     HBITMAP     _bmp;
     unsigned char* _memaddr;
 
-    std::auto_ptr<gnash::media::sound_handler> _sound_handler;
+    std::unique_ptr<gnash::media::sound_handler> _sound_handler;
     gnash::Renderer* _Renderer;
 
     // Mouse state.
diff --git a/po/Makefile.am b/po/Makefile.am
index f12146c..206542b 100644
--- a/po/Makefile.am
+++ b/po/Makefile.am
@@ -19,7 +19,7 @@ AUTOMAKE_OPTIONS = -Wno-portability
 
 POFILES = AUTO
 
-translations = cs da de en_GB es fi fr it ja el km ne ru zh_TW
+translations = cs da de en_GB es fi fr it ja el km nb ne ru zh_CN zh_TW
 
 
 # This is GNU make specific, so if you are building Gnash on a BSD
@@ -50,12 +50,13 @@ all: $(gmofiles)
 
 if HAS_GETTEXT
 
-gnash.pot: 
+SRCS = $(shell find $(patsubst %,../%,$(dirs)) -name '*.cpp')
+gnash.pot: $(SRCS)
 	cd $(top_srcdir); \
 	pwd; \
 	rm -f po/POTFILES; \
-	for i in `find $(dirs) -name '*.cpp'`; do \
-	  echo "$$i" >> po/POTFILES;\
+	for i in $(SRCS); do \
+	  echo "$$i" |sed 's%../%%' >> $@;\
 	done; \
 	$(XGETTEXT) --language=C++ --files-from=po/POTFILES \
 	  -o po/gnash.pot \
@@ -65,7 +66,6 @@ gnash.pot:
 	rm -f po/POTFILES
 
 update-po: 
-	rm -f $(srcdir)/gnash.pot # force rebuild of this
 	$(MAKE) gnash.pot
 	for i in $(pofiles); do \
 	  echo "Merging $$i..." ; \
diff --git a/po/gnash.pot b/po/gnash.pot
index 5e4ad42..358f1c0 100644
--- a/po/gnash.pot
+++ b/po/gnash.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-20 17:11-0700\n"
+"POT-Creation-Date: 2014-04-20 00:26+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -17,6 +17,35 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: libbase/extension.cpp:115
+#, c-format
+msgid "Loading module: %s from %s"
+msgstr ""
+
+#: libbase/extension.cpp:125 cygnal/handler.cpp:300
+#, c-format
+msgid "Initializing module: \"%s\" from %s"
+msgstr ""
+
+#: libbase/extension.cpp:142
+msgid "Couldn't get class_init symbol"
+msgstr ""
+
+#: libbase/extension.cpp:154
+#, c-format
+msgid "Initializing module: \"%s\""
+msgstr ""
+
+#: libbase/extension.cpp:168
+#, c-format
+msgid "Couldn't get class_init symbol: \"%s\""
+msgstr ""
+
+#: libbase/extension.cpp:196 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:313
+#, c-format
+msgid "Can't open directory %s"
+msgstr ""
+
 #: libbase/RTMP.cpp:222
 msgid "Initial connection failed"
 msgstr ""
@@ -40,378 +69,468 @@ msgstr ""
 msgid "Unknown packet %s received"
 msgstr ""
 
-#: libbase/RTMP.cpp:458
+#: libbase/RTMP.cpp:456
 msgid "failed to read RTMP packet header 2nd byte"
 msgstr ""
 
-#: libbase/RTMP.cpp:466
+#: libbase/RTMP.cpp:464
 msgid "Failed to read RTMP packet header 3nd byte"
 msgstr ""
 
-#: libbase/RTMP.cpp:484
+#: libbase/RTMP.cpp:482
 #, c-format
 msgid "Incomplete packet received on channel %s"
 msgstr ""
 
-#: libbase/RTMP.cpp:497
+#: libbase/RTMP.cpp:495
 #, c-format
 msgid "Failed to read RTMP packet header. type: %s"
 msgstr ""
 
-#: libbase/RTMP.cpp:542
+#: libbase/RTMP.cpp:540
 #, c-format
 msgid "%s, failed to read extended timestamp"
 msgstr ""
 
-#: libbase/RTMP.cpp:871
+#: libbase/RTMP.cpp:873
 msgid "Stage 1 socket not ready. This should not happen."
 msgstr ""
 
-#: libbase/RTMP.cpp:877
+#: libbase/RTMP.cpp:879
 msgid "Could not send stage 1 data"
 msgstr ""
 
-#: libbase/RTMP.cpp:899
+#: libbase/RTMP.cpp:901
 #, c-format
 msgid "Type mismatch: client sent %d, server answered %d"
 msgstr ""
 
-#: libbase/RTMP.cpp:927
+#: libbase/RTMP.cpp:929
 msgid "Could not send complete signature."
 msgstr ""
 
-#: libbase/RTMP.cpp:953
+#: libbase/RTMP.cpp:955
 msgid "Signatures do not match during handshake!"
 msgstr ""
 
-#: libbase/RTMP.cpp:1041
+#: libbase/RTMP.cpp:1043
 msgid "Control packet too short"
 msgstr ""
 
-#: libbase/RTMP.cpp:1049
+#: libbase/RTMP.cpp:1051
 #, c-format
 msgid "Control packet (%s) data too short"
 msgstr ""
 
-#: libbase/RTMP.cpp:1087
+#: libbase/RTMP.cpp:1089
 #, c-format
 msgid "Received unknown or unhandled control %s"
 msgstr ""
 
-#: libbase/GnashImagePng.cpp:51
-msgid "PNG error: "
+#: libbase/SharedMem.cpp:69
+#, c-format
+msgid "Error detaching shared memory: %s"
 msgstr ""
 
-#: libbase/StreamProvider.cpp:84 libbase/StreamProvider.cpp:149
-msgid "Could not open file %1%: %2%"
+#: libbase/SharedMem.cpp:76
+#, c-format
+msgid "Error during stat of shared memory segment: %s"
 msgstr ""
 
-#: libbase/StreamProvider.cpp:112
-msgid "Request Headers discarded while getting stream from file: uri"
+#: libbase/SharedMem.cpp:84
+msgid "No shared memory users left. Removing segment and semaphore."
 msgstr ""
 
-#: libbase/StreamProvider.cpp:135
-msgid "POST data discarded while getting a stream from file: uri"
+#: libbase/SharedMem.cpp:137
+msgid "Failed to set semaphore value: %1%"
 msgstr ""
 
-#: libbase/noseek_fd_adapter.cpp:223
-#, c-format
-msgid "Error reading %d bytes from input stream"
+#: libbase/SharedMem.cpp:144
+msgid "Failed to obtain nonexclusive semaphore for shared memory: %1%"
 msgstr ""
 
-#: libbase/Socket.cpp:98
-msgid "XMLSocket: The socket was never available"
+#: libbase/SharedMem.cpp:167
+msgid "Timed out waiting for semaphore initialization."
 msgstr ""
 
-#: libbase/Socket.cpp:125
-msgid "Connection attempt while already connected"
+#: libbase/SharedMem.cpp:171
+msgid "Failed creating semaphore: %1%"
 msgstr ""
 
-#: libbase/Socket.cpp:154
-#, c-format
-msgid "Socket creation failed: %s"
+#: libbase/SharedMem.cpp:218
+msgid "Unable to get shared memory segment!"
 msgstr ""
 
-#: libbase/Socket.cpp:171
+#: libbase/SharedMem.cpp:225
 #, c-format
-msgid "Failed to connect socket: %s"
+msgid "Unable to attach shared memory: %s"
 msgstr ""
 
-#: libbase/Socket.cpp:187
-msgid "Setting socket timeout failed"
+#: libbase/GnashImageJpeg.cpp:115
+msgid "JPEG: Empty jpeg source stream."
+msgstr ""
+
+#: libbase/GnashImageJpeg.cpp:260 libbase/GnashImageJpeg.cpp:287
+#: libbase/GnashImageJpeg.cpp:305 libbase/GnashImageJpeg.cpp:361
+msgid "Internal jpeg error: "
+msgstr ""
+
+#: libbase/GnashImageJpeg.cpp:271
+msgid "Lack of data during JPEG header parsing"
 msgstr ""
 
-#: libbase/Socket.cpp:237
+#: libbase/GnashImageJpeg.cpp:281
 #, c-format
-msgid "Socket receive error %s"
+msgid "unexpected: jpeg_read_header returned %d"
+msgstr ""
+
+#: libbase/GnashImageJpeg.cpp:317
+msgid "lack of data during JPEG header parsing"
 msgstr ""
 
-#: libbase/Socket.cpp:340
+#: libbase/GnashImageJpeg.cpp:327
 #, c-format
-msgid "Socket send error %s"
+msgid "unexpected: jpeg_read_header returned %d [%s:%d]"
 msgstr ""
 
-#: libbase/Socket.cpp:355
-msgid "tell() called for Socket"
+#: libbase/GnashImageJpeg.cpp:335
+msgid "Internal jpeg error during header parsing: "
 msgstr ""
 
-#: libbase/Socket.cpp:362
-msgid "seek() called for Socket"
+#: libbase/GnashImageJpeg.cpp:343
+msgid "Internal jpeg error during decompression: "
 msgstr ""
 
-#: libbase/Socket.cpp:369
-msgid "go_to_end() called for Socket"
+#: libbase/GnashImageJpeg.cpp:518
+msgid "rw_dest_IOChannel couldn't write data."
 msgstr ""
 
-#: libbase/tu_file.cpp:193
-msgid "Error while seeking to end: %1%"
+#: libbase/GnashImageJpeg.cpp:543
+msgid "rw_dest_IOChannel::term_destination couldn't write data."
 msgstr ""
 
-#: libbase/tu_file.cpp:229
-msgid "Could not fstat file"
+#: libbase/URLAccessManager.cpp:95
+#, c-format
+msgid "Load from host %s granted (whitelisted)"
 msgstr ""
 
-#: libbase/rc.cpp:171 libbase/rc.cpp:702
-msgid "Failed to find user settings directory"
+#: libbase/URLAccessManager.cpp:101
+#, c-format
+msgid "Load from host %s forbidden (not in non-empty whitelist)"
 msgstr ""
 
-#: libbase/rc.cpp:382
-msgid "RcInitFile: couldn't open file: "
+#: libbase/URLAccessManager.cpp:115
+#, c-format
+msgid "Load from host %s forbidden (blacklisted)"
 msgstr ""
 
-#: libbase/rc.cpp:422
+#: libbase/URLAccessManager.cpp:120
 #, c-format
-msgid "Warning: missing value for variable \"%s\" in rcfile %s, line %d"
+msgid "Load from host %s granted (default)"
 msgstr ""
 
-#: libbase/rc.cpp:625
+#: libbase/URLAccessManager.cpp:152
 #, c-format
-msgid "Warning: unrecognized directive \"%s\" in rcfile %s line %d"
+msgid "Load of file %s forbidden (starting URL %s is not a local resource)"
 msgstr ""
 
-#: libbase/rc.cpp:637
+#: libbase/URLAccessManager.cpp:169
 #, c-format
-msgid "Warning: empty include specification in rcfile %s, line %d"
+msgid "Load of file %s granted (under local sandbox %s)"
 msgstr ""
 
-#: libbase/rc.cpp:642
+#: libbase/URLAccessManager.cpp:177
 #, c-format
-msgid ""
-"Warning: include specification must be an absolute path in rcfile %s, line %d"
+msgid "Load of file %s forbidden (not under local sandboxes)"
 msgstr ""
 
-#: libbase/rc.cpp:651
+#: libbase/URLAccessManager.cpp:217
 #, c-format
-msgid "Warning: unrecognized action \"%s\" in rcfile %s, line %d"
+msgid "gethostname failed: %s"
 msgstr ""
 
-#: libbase/rc.cpp:743
+#: libbase/URLAccessManager.cpp:239
 #, c-format
-msgid "Couldn't open file %s for writing"
+msgid "Load from host %s forbidden (not in the local domain)"
 msgstr ""
 
-#: libbase/rc.cpp:752
-msgid "# Generated by Gnash. Manual changes to this file may be overridden."
+#: libbase/URLAccessManager.cpp:245
+#, c-format
+msgid "Load from host %s forbidden (not on the local host)"
 msgstr ""
 
-#: libbase/extension.cpp:115
+#: libbase/URLAccessManager.cpp:267
 #, c-format
-msgid "Loading module: %s from %s"
+msgid "Attempt to connect to disallowed port %s"
 msgstr ""
 
-#: libbase/extension.cpp:128 cygnal/handler.cpp:300
+#: libbase/URLAccessManager.cpp:277
 #, c-format
-msgid "Initializing module: \"%s\" from %s"
+msgid "Checking security of URL '%s'"
 msgstr ""
 
-#: libbase/extension.cpp:145
-msgid "Couldn't get class_init symbol"
+#: libbase/URLAccessManager.cpp:289
+msgid "Network connection without hostname requested"
+msgstr ""
+
+#: libbase/AMF.cpp:90
+msgid "Read past _end of buffer for string length"
+msgstr ""
+
+#: libbase/AMF.cpp:97
+msgid "Read past _end of buffer for string type"
+msgstr ""
+
+#: libbase/AMF.cpp:138
+msgid "writePlainString called with invalid type!"
+msgstr ""
+
+#: libbase/StreamProvider.cpp:84 libbase/StreamProvider.cpp:149
+msgid "Could not open file %1%: %2%"
+msgstr ""
+
+#: libbase/StreamProvider.cpp:112
+msgid "Request Headers discarded while getting stream from file: uri"
+msgstr ""
+
+#: libbase/StreamProvider.cpp:135
+msgid "POST data discarded while getting a stream from file: uri"
 msgstr ""
 
-#: libbase/extension.cpp:159
+#: libbase/GnashVaapiImage.cpp:51
 #, c-format
-msgid "Initializing module: \"%s\""
+msgid "GnashVaapiImage::GnashVaapiImage(): surface 0x%08x, size %dx%d\n"
 msgstr ""
 
-#: libbase/extension.cpp:174
+#: libbase/GnashVaapiImage.cpp:57
 #, c-format
-msgid "Couldn't get class_init symbol: \"%s\""
+msgid "GnashVaapiImage::~GnashVaapiImage(): surface 0x%08x\n"
 msgstr ""
 
-#: libbase/extension.cpp:202 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:313
+#: libbase/GnashVaapiImage.cpp:69
 #, c-format
-msgid "Can't open directory %s"
+msgid "GnashVaapi::update(): data %p\n"
+msgstr ""
+
+#: libbase/GnashVaapiImage.cpp:101
+msgid "GnashVaapiImage: VA surface to SW pixels are not supported\n"
+msgstr ""
+
+#: libbase/GnashVaapiImage.cpp:112
+#, c-format
+msgid "GnashVaapiImage::data(): surface 0x%08x\n"
+msgstr ""
+
+#: libbase/GnashVaapiImage.cpp:113 libbase/GnashVaapiImage.cpp:129
+#, c-format
+msgid "  -> %u usec from creation\n"
+msgstr ""
+
+#: libbase/GnashVaapiImage.cpp:127
+#, c-format
+msgid "GnashVaapiImage::data() const: surface 0x%08x\n"
+msgstr ""
+
+#: libbase/ClockTime.cpp:223
+msgid "Cannot get requested timezone information"
+msgstr ""
+
+#: libbase/GnashImagePng.cpp:51
+msgid "PNG error: "
 msgstr ""
 
-#: libbase/curl_adapter.cpp:48
+#: libbase/NetworkAdapter.cpp:50
 msgid ""
 "libcurl is not available, but Gnash has attempted to use the curl adapter"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:245
+#: libbase/NetworkAdapter.cpp:247
 #, c-format
 msgid "Failed cleaning up share handle: %s. Giving up after %d retries."
 msgstr ""
 
-#: libbase/curl_adapter.cpp:249
+#: libbase/NetworkAdapter.cpp:251
 #, c-format
 msgid "Failed cleaning up share handle: %s. Will try again in a second."
 msgstr ""
 
-#: libbase/curl_adapter.cpp:339
+#: libbase/NetworkAdapter.cpp:341
 msgid "lockSharedHandle: SSL session locking unsupported"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:342
+#: libbase/NetworkAdapter.cpp:344
 msgid "lockSharedHandle: connect locking unsupported"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:345
+#: libbase/NetworkAdapter.cpp:347
 msgid "lockSharedHandle: last locking unsupported ?!"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:348
+#: libbase/NetworkAdapter.cpp:350
 #, c-format
 msgid "lockSharedHandle: unknown shared data %d"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:374
+#: libbase/NetworkAdapter.cpp:376
 msgid "unlockSharedHandle: SSL session locking unsupported"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:377
+#: libbase/NetworkAdapter.cpp:379
 msgid "unlockSharedHandle: connect locking unsupported"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:380
+#: libbase/NetworkAdapter.cpp:382
 msgid "unlockSharedHandle: last locking unsupported ?!"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:383
+#: libbase/NetworkAdapter.cpp:385
 #, c-format
 msgid "unlockSharedHandle: unknown shared data %d"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:672
+#: libbase/NetworkAdapter.cpp:674
 #, c-format
 msgid "FIXME: Timeout (%u milliseconds) while loading from URL %s"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:720
+#: libbase/NetworkAdapter.cpp:722
 #, c-format
 msgid "Timeout (%u milliseconds) while loading from URL %s"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:763
+#: libbase/NetworkAdapter.cpp:765
 #, c-format
 msgid "HTTP response %ld from URL %s"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:774
+#: libbase/NetworkAdapter.cpp:776
 #, c-format
 msgid "CURL: %s"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:807
+#: libbase/NetworkAdapter.cpp:809
 msgid ""
 "Could not open specified path as cache file. Using a temporary file instead"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:815
+#: libbase/NetworkAdapter.cpp:817
 msgid "Could not create temporary cache file"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:825
+#: libbase/NetworkAdapter.cpp:827
 msgid "Allowing connections to SSL sites with invalid certificates"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:1091
+#: libbase/NetworkAdapter.cpp:1093
 msgid ""
-"curl adaptor's fillCacheNonBlocking set _error rather then throwing an "
-"exception"
+"curl adaptor's fillCacheNonBlocking method sets an error condition rather "
+"than throwing an exception"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:1156
+#: libbase/NetworkAdapter.cpp:1158
 #, c-format
 msgid "Warning: could not cache enough bytes on seek: %d requested, %d cached"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:1162
+#: libbase/NetworkAdapter.cpp:1164
 msgid "Warning: fseek failed"
 msgstr ""
 
-#: libbase/curl_adapter.cpp:1342 libbase/curl_adapter.cpp:1361
-#: libbase/curl_adapter.cpp:1377
+#: libbase/NetworkAdapter.cpp:1353 libbase/NetworkAdapter.cpp:1372
+#: libbase/NetworkAdapter.cpp:1388
 #, c-format
 msgid "curl stream: %s"
 msgstr ""
 
-#: libbase/ClockTime.cpp:223
-msgid "Cannot get requested timezone information"
+#: libbase/noseek_fd_adapter.cpp:223
+#, c-format
+msgid "Error reading %d bytes from input stream"
 msgstr ""
 
-#: libbase/SharedMem.cpp:68
-#, c-format
-msgid "Error detaching shared memory: %s"
+#: libbase/GnashImageGif.cpp:175
+msgid "GIF: Error retrieving image description"
 msgstr ""
 
-#: libbase/SharedMem.cpp:75
-#, c-format
-msgid "Error during stat of shared memory segment: %s"
+#: libbase/GnashImageGif.cpp:204
+msgid "GIF: invalid image data (bounds outside GIF screen)"
 msgstr ""
 
-#: libbase/SharedMem.cpp:83
-msgid "No shared memory users left. Removing segment and semaphore."
+#: libbase/GnashImageGif.cpp:226 libbase/GnashImageGif.cpp:244
+msgid "GIF: failed reading pixel data"
+msgstr ""
+
+#: libbase/GnashImageGif.cpp:293
+msgid "GIF: Error retrieving record type"
 msgstr ""
 
-#: libbase/SharedMem.cpp:150
-msgid "Failed to get semaphore for shared memory!"
+#: libbase/GnashImage.cpp:198
+msgid "Requested to write image as unsupported filetype"
 msgstr ""
 
-#: libbase/SharedMem.cpp:157
-msgid "Failed to set semaphore value"
+#: libbase/GnashImage.cpp:254
+msgid "Invalid image returned"
 msgstr ""
 
-#: libbase/SharedMem.cpp:167
-msgid "Need semaphore value of 1 for locking. Cannot attach shared memory!"
+#: libbase/GnashImage.cpp:262
+#, c-format
+msgid "Out of memory while trying to create %dx%d image"
 msgstr ""
 
-#: libbase/SharedMem.cpp:182
-msgid "Unable to get shared memory segment!"
+#: libbase/Socket.cpp:106
+msgid "XMLSocket: The socket was never available"
 msgstr ""
 
-#: libbase/SharedMem.cpp:189
+#: libbase/Socket.cpp:138
 #, c-format
-msgid "Unable to attach shared memory: %s"
+msgid "getaddrinfo() failed with code: #%d - %s"
 msgstr ""
 
-#: libbase/GnashImage.cpp:179
-msgid "Requested to write image as unsupported filetype"
+#: libbase/Socket.cpp:154
+msgid "Connection attempt while already connected"
 msgstr ""
 
-#: libbase/GnashImage.cpp:235
-msgid "Invalid image returned"
+#: libbase/Socket.cpp:182
+msgid "getnameinfo() failed: %1%"
 msgstr ""
 
-#: libbase/GnashImage.cpp:243
+#: libbase/Socket.cpp:196 cygnal/libnet/network.cpp:623
 #, c-format
-msgid "Out of memory while trying to create %dx%d image"
+msgid "Socket creation failed: %s"
 msgstr ""
 
-#: libbase/GnashImageGif.cpp:175
-msgid "GIF: Error retrieving image description"
+#: libbase/Socket.cpp:206
+msgid "Socket creation attempt(s) failed: giving up."
 msgstr ""
 
-#: libbase/GnashImageGif.cpp:204
-msgid "GIF: invalid image data (bounds outside GIF screen)"
+#: libbase/Socket.cpp:222
+#, c-format
+msgid "Failed to connect to socket: %s"
 msgstr ""
 
-#: libbase/GnashImageGif.cpp:226 libbase/GnashImageGif.cpp:244
-msgid "GIF: failed reading pixel data"
+#: libbase/Socket.cpp:238
+msgid "Setting socket timeout failed"
 msgstr ""
 
-#: libbase/GnashImageGif.cpp:283
-msgid "GIF: Error retrieving record type"
+#: libbase/Socket.cpp:281
+#, c-format
+msgid "Socket receive error %s"
+msgstr ""
+
+#: libbase/Socket.cpp:382
+#, c-format
+msgid "Socket send error %s"
+msgstr ""
+
+#: libbase/Socket.cpp:397
+msgid "tell() called for Socket"
+msgstr ""
+
+#: libbase/Socket.cpp:404
+msgid "seek() called for Socket"
+msgstr ""
+
+#: libbase/Socket.cpp:411
+msgid "go_to_end() called for Socket"
 msgstr ""
 
 #: libbase/memory.cpp:94
@@ -427,235 +546,112 @@ msgstr ""
 msgid "Zero memory leaks for this program"
 msgstr ""
 
-#: libbase/GnashVaapiImage.cpp:51
-#, c-format
-msgid "GnashVaapiImage::GnashVaapiImage(): surface 0x%08x, size %dx%d\n"
+#: libbase/tu_file.cpp:193
+msgid "Error while seeking to end: %1%"
 msgstr ""
 
-#: libbase/GnashVaapiImage.cpp:57
-#, c-format
-msgid "GnashVaapiImage::~GnashVaapiImage(): surface 0x%08x\n"
+#: libbase/tu_file.cpp:229
+msgid "Could not fstat file"
 msgstr ""
 
-#: libbase/GnashVaapiImage.cpp:69
-#, c-format
-msgid "GnashVaapi::update(): data %p\n"
+#: libbase/rc.cpp:170 libbase/rc.cpp:701
+msgid "Failed to find user settings directory"
 msgstr ""
 
-#: libbase/GnashVaapiImage.cpp:101
-msgid "GnashVaapiImage: VA surface to SW pixels are not supported\n"
+#: libbase/rc.cpp:381
+msgid "RcInitFile: couldn't open file: "
 msgstr ""
 
-#: libbase/GnashVaapiImage.cpp:112
+#: libbase/rc.cpp:421
 #, c-format
-msgid "GnashVaapiImage::data(): surface 0x%08x\n"
+msgid "Warning: missing value for variable \"%s\" in rcfile %s, line %d"
 msgstr ""
 
-#: libbase/GnashVaapiImage.cpp:113 libbase/GnashVaapiImage.cpp:129
+#: libbase/rc.cpp:624
 #, c-format
-msgid "  -> %u usec from creation\n"
+msgid "Warning: unrecognized directive \"%s\" in rcfile %s line %d"
 msgstr ""
 
-#: libbase/GnashVaapiImage.cpp:127
+#: libbase/rc.cpp:636
 #, c-format
-msgid "GnashVaapiImage::data() const: surface 0x%08x\n"
+msgid "Warning: empty include specification in rcfile %s, line %d"
 msgstr ""
 
-#: libbase/sharedlib.cpp:69
+#: libbase/rc.cpp:641
 #, c-format
-msgid "Couldn't initialize ltdl: %s"
+msgid ""
+"Warning: include specification must be an absolute path in rcfile %s, line %d"
 msgstr ""
 
-#: libbase/sharedlib.cpp:98
+#: libbase/rc.cpp:650
 #, c-format
-msgid "Trying to open shared library \"%s\""
+msgid "Warning: unrecognized action \"%s\" in rcfile %s, line %d"
 msgstr ""
 
-#: libbase/sharedlib.cpp:112
-#, c-format
-msgid "Opened dynamic library \"%s\""
-msgstr ""
-
-#: libbase/sharedlib.cpp:131
-#, c-format
-msgid "Couldn't find symbol: %s"
-msgstr ""
-
-#: libbase/sharedlib.cpp:134
-#, c-format
-msgid "Found symbol %s @ %p"
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:116
-msgid "JPEG: Empty jpeg source stream."
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:263 libbase/GnashImageJpeg.cpp:290
-#: libbase/GnashImageJpeg.cpp:308 libbase/GnashImageJpeg.cpp:364
-msgid "Internal jpeg error: "
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:274
-msgid "Lack of data during JPEG header parsing"
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:284
-#, c-format
-msgid "unexpected: jpeg_read_header returned %d"
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:320
-msgid "lack of data during JPEG header parsing"
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:330
-#, c-format
-msgid "unexpected: jpeg_read_header returned %d [%s:%d]"
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:338
-msgid "Internal jpeg error during header parsing: "
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:346
-msgid "Internal jpeg error during decompression: "
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:521
-msgid "rw_dest_IOChannel couldn't write data."
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:546
-msgid "rw_dest_IOChannel::term_destination couldn't write data."
-msgstr ""
-
-#: libbase/AMF.cpp:90
-msgid "Read past _end of buffer for string length"
-msgstr ""
-
-#: libbase/AMF.cpp:97
-msgid "Read past _end of buffer for string type"
-msgstr ""
-
-#: libbase/AMF.cpp:138
-msgid "writePlainString called with invalid type!"
-msgstr ""
-
-#: libbase/URLAccessManager.cpp:90
-#, c-format
-msgid "Load from host %s granted (whitelisted)"
-msgstr ""
-
-#: libbase/URLAccessManager.cpp:96
-#, c-format
-msgid "Load from host %s forbidden (not in non-empty whitelist)"
-msgstr ""
-
-#: libbase/URLAccessManager.cpp:110
-#, c-format
-msgid "Load from host %s forbidden (blacklisted)"
-msgstr ""
-
-#: libbase/URLAccessManager.cpp:115
-#, c-format
-msgid "Load from host %s granted (default)"
-msgstr ""
-
-#: libbase/URLAccessManager.cpp:147
-#, c-format
-msgid "Load of file %s forbidden (starting URL %s is not a local resource)"
-msgstr ""
-
-#: libbase/URLAccessManager.cpp:164
+#: libbase/rc.cpp:742
 #, c-format
-msgid "Load of file %s granted (under local sandbox %s)"
+msgid "Couldn't open file %s for writing"
 msgstr ""
 
-#: libbase/URLAccessManager.cpp:172
-#, c-format
-msgid "Load of file %s forbidden (not under local sandboxes)"
+#: libbase/rc.cpp:751
+msgid "# Generated by Gnash. Manual changes to this file may be overridden."
 msgstr ""
 
-#: libbase/URLAccessManager.cpp:212
+#: libbase/sharedlib.cpp:69
 #, c-format
-msgid "gethostname failed: %s"
+msgid "Couldn't initialize ltdl: %s"
 msgstr ""
 
-#: libbase/URLAccessManager.cpp:234
+#: libbase/sharedlib.cpp:98
 #, c-format
-msgid "Load from host %s forbidden (not in the local domain)"
+msgid "Trying to open shared library \"%s\""
 msgstr ""
 
-#: libbase/URLAccessManager.cpp:240
+#: libbase/sharedlib.cpp:112
 #, c-format
-msgid "Load from host %s forbidden (not on the local host)"
+msgid "Opened dynamic library \"%s\""
 msgstr ""
 
-#: libbase/URLAccessManager.cpp:262
+#: libbase/sharedlib.cpp:131
 #, c-format
-msgid "Attempt to connect to disallowed port %s"
+msgid "Couldn't find symbol: %s"
 msgstr ""
 
-#: libbase/URLAccessManager.cpp:272
+#: libbase/sharedlib.cpp:134
 #, c-format
-msgid "Checking security of URL '%s'"
-msgstr ""
-
-#: libbase/URLAccessManager.cpp:284
-msgid "Network connection without hostname requested"
-msgstr ""
-
-#: librender/opengl/Renderer_ogl.cpp:234
-msgid "OSMesaCreateContext failed!"
+msgid "Found symbol %s @ %p"
 msgstr ""
 
-#: librender/opengl/Renderer_ogl.cpp:240
-msgid "OSMesaMakeCurrent failed!"
+#: librender/agg/Renderer_agg.cpp:799
+msgid "Can't render this type of frame"
 msgstr ""
 
-#: librender/opengl/Renderer_ogl.cpp:247
-#, c-format
-msgid "OSMesa handle successfully created. with width %d and height %d."
+#: librender/agg/Renderer_agg.cpp:1730
+msgid ""
+"Unidirectionally scaled strokes in AGG renderer (we'll scale by the scalable "
+"one)"
 msgstr ""
 
-#: librender/opengl/Renderer_ogl.cpp:344
+#: librender/agg/Renderer_agg.cpp:2117
 #, c-format
-msgid "OpenGL: %s"
+msgid "Unknown pixelformat: %s\n"
 msgstr ""
 
-#: librender/opengl/Renderer_ogl.cpp:517
-#, c-format
-msgid "GLU: %s"
+#: librender/opengles1/Renderer_gles1.cpp:95
+msgid "Couldn't initialize EGL Device!"
 msgstr ""
 
-#: librender/opengl/Renderer_ogl.cpp:868
-msgid ""
-"An insane number of video frames have been requested to be drawn. Further "
-"video frames will be ignored."
+#: librender/opengles1/Renderer_gles1.cpp:124
+#: librender/openvg/OpenVGRenderer.cpp:319
+msgid "drawVideoFrame"
 msgstr ""
 
-#: librender/opengl/Renderer_ogl.cpp:1142
-#: librender/openvg/OpenVGRenderer.cpp:569
 #: librender/opengles1/Renderer_gles1.cpp:230
+#: librender/openvg/OpenVGRenderer.cpp:569
+#: librender/opengl/Renderer_ogl.cpp:1142
 msgid "set_antialiased"
 msgstr ""
 
-#: librender/opengl/Renderer_ogl.cpp:1436
-#: librender/openvg/OpenVGRenderer.cpp:864
-msgid "Unidirectionally scaled strokes in OGL renderer"
-msgstr ""
-
-#: librender/opengl/Renderer_ogl.cpp:1450
-msgid ""
-"Your OpenGL implementation does not support the line width requested. Lines "
-"will be drawn with reduced width."
-msgstr ""
-
-#: librender/opengl/Renderer_ogl.cpp:1927
-#, c-format
-msgid "two gradients in a FillStyle have the same position/ratio: %d"
-msgstr ""
-
 #: librender/openvg/OpenVGBitmap.cpp:82 librender/openvg/OpenVGBitmap.cpp:285
 #, c-format
 msgid "Failed to create VG image! %s"
@@ -684,21 +680,21 @@ msgstr ""
 msgid "VG Extensions are: "
 msgstr ""
 
-#: librender/openvg/OpenVGRenderer.cpp:319
-#: librender/opengles1/Renderer_gles1.cpp:124
-msgid "drawVideoFrame"
-msgstr ""
-
 #: librender/openvg/OpenVGRenderer.cpp:836
-#: librender/cairo/Renderer_cairo.cpp:864
+#: librender/cairo/Renderer_cairo.cpp:865
 msgid "join style"
 msgstr ""
 
 #: librender/openvg/OpenVGRenderer.cpp:850
-#: librender/cairo/Renderer_cairo.cpp:883
+#: librender/cairo/Renderer_cairo.cpp:884
 msgid "cap style"
 msgstr ""
 
+#: librender/openvg/OpenVGRenderer.cpp:864
+#: librender/opengl/Renderer_ogl.cpp:1436
+msgid "Unidirectionally scaled strokes in OGL renderer"
+msgstr ""
+
 #: librender/openvg/OpenVGRenderer.cpp:1299
 msgid "unsupported VG_MATRIX_MODE!"
 msgstr ""
@@ -875,19 +871,15 @@ msgstr ""
 msgid "VG_PATH_NUM_COORDS is %d"
 msgstr ""
 
-#: librender/opengles1/Renderer_gles1.cpp:95
-msgid "Couldn't initialize EGL Device!"
-msgstr ""
-
-#: librender/cairo/Renderer_cairo.cpp:498
+#: librender/cairo/Renderer_cairo.cpp:499
 msgid "Can't render videos with alpha"
 msgstr ""
 
-#: librender/cairo/Renderer_cairo.cpp:869
+#: librender/cairo/Renderer_cairo.cpp:870
 msgid "differing start and end cap styles"
 msgstr ""
 
-#: librender/cairo/Renderer_cairo.cpp:911
+#: librender/cairo/Renderer_cairo.cpp:912
 msgid "Scaled strokes in Cairo renderer"
 msgstr ""
 
@@ -895,330 +887,406 @@ msgstr ""
 msgid "path not closed!"
 msgstr ""
 
-#: librender/agg/Renderer_agg.cpp:794
-msgid "Can't render this type of frame"
-msgstr ""
-
-#: librender/agg/Renderer_agg.cpp:1764
-msgid ""
-"Unidirectionally scaled strokes in AGG renderer (we'll scale by the scalable "
-"one)"
+#: librender/testr.cpp:190
+msgid "Couldn't get Drawable window from X11"
 msgstr ""
 
-#: librender/agg/Renderer_agg.cpp:2151
-#, c-format
-msgid "Unknown pixelformat: %s\n"
+#: librender/opengl/Renderer_ogl.cpp:234
+msgid "OSMesaCreateContext failed!"
 msgstr ""
 
-#: librender/testr.cpp:190
-msgid "Couldn't get Drawable window from X11"
+#: librender/opengl/Renderer_ogl.cpp:240
+msgid "OSMesaMakeCurrent failed!"
 msgstr ""
 
-#: librender/GnashTexture.cpp:70
+#: librender/opengl/Renderer_ogl.cpp:247
 #, c-format
-msgid "glError: %s caught\n"
-msgstr ""
-
-#: libmedia/MediaParser.cpp:83
-msgid "No ID3 support implemented in this MediaParser"
+msgid "OSMesa handle successfully created. with width %d and height %d."
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:80
-msgid "MediaParserFfmpeg could not read probe data from input"
+#: librender/opengl/Renderer_ogl.cpp:344
+#, c-format
+msgid "OpenGL: %s"
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:113
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:122
+#: librender/opengl/Renderer_ogl.cpp:517
 #, c-format
-msgid "%s: seeking failed"
+msgid "GLU: %s"
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:211
+#: librender/opengl/Renderer_ogl.cpp:868
 msgid ""
-"FIXME: FFmpeg packet decompression timestamp has no value, taking as zero"
+"An insane number of video frames have been requested to be drawn. Further "
+"video frames will be ignored."
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:272
-#, c-format
+#: librender/opengl/Renderer_ogl.cpp:1450
 msgid ""
-"MediaParserFfmpeg::parseNextFrame: Problems parsing next frame "
-"(av_read_frame returned %d). We'll consider the stream fully parsed."
+"Your OpenGL implementation does not support the line width requested. Lines "
+"will be drawn with reduced width."
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:443
+#: librender/opengl/Renderer_ogl.cpp:1895
 #, c-format
-msgid "  Using stream %d for audio: codec id %d"
+msgid "two gradients in a FillStyle have the same position/ratio: %d"
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:456
+#: librender/GnashTexture.cpp:70
 #, c-format
-msgid "  Using stream %d for video: codec id %d"
+msgid "glError: %s caught\n"
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:478
-msgid "Duration of video stream unknown"
+#: libmedia/AudioDecoderSpeex.cpp:41
+msgid "AudioDecoderSpeex: state initialization failed."
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:507
-msgid "Duration of audio stream unknown to ffmpeg"
+#: libmedia/AudioDecoderSpeex.cpp:54
+msgid "AudioDecoderSpeex: initialization failed."
 msgstr ""
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:587
-msgid ""
-"MediaParserFfmpeg couldn't parse input format: tried to seek at negative "
-"offset %1%."
+#: libmedia/AudioDecoderSpeex.cpp:109
+msgid "Corrupt Speex stream!"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoConverterFfmpeg.cpp:122
-msgid "VideoConverterFfmpeg cannot convert to the requested format"
+#: libmedia/AudioDecoderSpeex.cpp:133
+msgid "Failed to resample Speex frame."
 msgstr ""
 
-#: libmedia/ffmpeg/MediaHandlerFfmpeg.cpp:122
+#: libmedia/FLVParser.cpp:170
 #, c-format
-msgid "MediaHandlerFfmpeg::createAudioDecoder: %s -- %s"
+msgid ""
+"Unexpected audio tag found at offset %d FLV stream advertising no audio in "
+"header. We'll warn only once for each FLV, expecting any further audio tag."
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:53
-#, c-format
-msgid "AudioDecoderFfmpeg: initialized FFmpeg codec %d (%s)"
+#: libmedia/FLVParser.cpp:187
+msgid "could not read audio frame?"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:56
+#: libmedia/FLVParser.cpp:225
 #, c-format
 msgid ""
-"AudioDecoderFfmpeg: initialized FFmpeg codec %d (%s) for flash codec %d (%s)"
+"Unexpected video tag found at offset %d of FLV stream advertising no video "
+"in header. We'll warn only once per FLV, expecting any further video tag."
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:71
+#: libmedia/FLVParser.cpp:245
 #, c-format
-msgid "AudioDecoderFfmpeg: initialized FFmpeg codec %s (%d)"
+msgid "AVC packet type: %d"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:110
-#, c-format
-msgid "Unsupported audio codec %d"
+#: libmedia/FLVParser.cpp:264
+msgid "could not read video frame?"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:119
+#: libmedia/FLVParser.cpp:322
 #, c-format
-msgid "libavcodec could not find a decoder for codec %d (%s)"
+msgid "FLVParser::parseNextTag: can't seek to %d"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:129
-msgid "AudioDecoderFfmpeg can't initialize MP3 parser"
-msgstr ""
+#: libmedia/FLVParser.cpp:336
+#, c-format
+msgid ""
+"FLVParser::parseNextTag: can't read tag info (needed 12 bytes, only got %d)"
+msgstr ""
+
+#: libmedia/FLVParser.cpp:423
+#, c-format
+msgid "First byte of FLV_META_TAG is %d, expected 0x02 (STRING AMF0 type)"
+msgstr ""
+
+#: libmedia/FLVParser.cpp:435
+#, c-format
+msgid ""
+"FLVParser::parseNextTag: can't read metaTag (%d) body (needed %d bytes, only "
+"got %d)"
+msgstr ""
+
+#: libmedia/FLVParser.cpp:446
+msgid "Corrupt FLV: Meta tag unterminated!"
+msgstr ""
+
+#: libmedia/FLVParser.cpp:454
+#, c-format
+msgid "FLVParser::parseNextTag: unknown FLV tag type %d"
+msgstr ""
+
+#: libmedia/FLVParser.cpp:463
+msgid ""
+"Corrupt FLV: previous tag size record (%1%) unexpected (actual size: %2%)"
+msgstr ""
+
+#: libmedia/FLVParser.cpp:481
+msgid "FLVParser::parseHeader: couldn't read 9 bytes of header"
+msgstr ""
+
+#: libmedia/FLVParser.cpp:533
+#, c-format
+msgid "FLVParser::readAudioFrame: could only read %d/%d bytes"
+msgstr ""
+
+#: libmedia/ffmpeg/VideoConverterFfmpeg.cpp:122
+msgid "VideoConverterFfmpeg cannot convert to the requested format"
+msgstr ""
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:48
+#, c-format
+msgid "AudioDecoderFfmpeg: initialized FFmpeg codec %d (%s)"
+msgstr ""
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:51
+#, c-format
+msgid ""
+"AudioDecoderFfmpeg: initialized FFmpeg codec %d (%s) for flash codec %d (%s)"
+msgstr ""
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:66
+#, c-format
+msgid "AudioDecoderFfmpeg: initialized FFmpeg codec %s (%d)"
+msgstr ""
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:107
+#, c-format
+msgid "Unsupported audio codec %d"
+msgstr ""
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:116
+#, c-format
+msgid "libavcodec could not find a decoder for codec %d (%s)"
+msgstr ""
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:126
+msgid "AudioDecoderFfmpeg can't initialize MP3 parser"
+msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:136
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:185
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:137
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:196
 msgid "libavcodec couldn't allocate context"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:144
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:315
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:149
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:331
 #, c-format
 msgid ""
 "AudioDecoderFfmpeg: avcodec_open failed to initialize FFmpeg codec %s (%d)"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:149
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:154
 #, c-format
 msgid "AudioDecoder: initialized FFMPEG codec %s (%d)"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:222
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:230
 #, c-format
 msgid "AudioDecoderFfmpeg: unsupported flash audio codec %d (%s)"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:231
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:239
 #, c-format
 msgid "AudioDecoderFfmpeg: unknown codec type %d (should never happen)"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:241
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:249
 #, c-format
 msgid ""
 "AudioDecoderFfmpeg: libavcodec could not find a decoder for codec %d (%s)"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:247
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:255
 #, c-format
 msgid ""
 "AudioDecoderFfmpeg: libavcodec could not find a decoder for ffmpeg codec id "
 "%s"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:259
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:271
 msgid "AudioDecoderFfmpeg: libavcodec couldn't allocate context"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:348
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:364
 #, c-format
 msgid ""
 "av_parser_parse returned %d. Upgrading ffmpeg/libavcodec might fix this "
 "issue."
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:401
-#, c-format
-msgid ""
-"AudioDecoderFfmpeg: could not find a complete frame in the last %d bytes of "
-"input (malformed SWF or FLV?)"
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:483
+msgid "failed to allocate audio buffer."
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:490
-msgid "failed to allocate audio buffer."
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:505
+msgid "failed to allocate frame."
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:528
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:523
 #, c-format
-msgid ""
-"avcodec_decode_audio returned %d. Upgrading ffmpeg/libavcodec might fix this "
-"issue."
+msgid "output buffer size is too small for the current frame (%d < %d)"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:537
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:549
 #, c-format
-msgid ""
-"outputSize:%d after decoding %d bytes of input audio data. Upgrading ffmpeg/"
-"libavcodec might fix this issue."
+msgid "avcodec_decode_audio returned %d."
+msgstr ""
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:551
+#, c-format
+msgid "outputSize:%d after decoding %d bytes of input audio data."
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:587
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:553
+msgid "Upgrading ffmpeg/libavcodec might fix this issue."
+msgstr ""
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:598
 #, c-format
 msgid ""
 " --- Computation of resampled samples (%d) < then the actual returned "
 "samples (%d)"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:141
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:145
 #, c-format
 msgid "Cannot find suitable decoder for flash codec %d"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:180
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:187
 msgid "libavcodec can't decode this video format"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:208
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:227
 #, c-format
 msgid "libavcodec failed to initialize FFMPEG codec %s (%d)"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:216
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:235
 #, c-format
 msgid "VideoDecoder: initialized FFMPEG codec %s (%d)"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:306
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:325
 msgid "Pixel format not handled"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:354
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:373
 msgid "Out of memory while allocating avcodec frame"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:373
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:392
 msgid "Decoding of a video frame failed"
 msgstr ""
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:434
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:453
 #, c-format
 msgid "Unsupported video codec %d"
 msgstr ""
 
-#: libmedia/haiku/MediaHandlerHaiku.cpp:115
+#: libmedia/ffmpeg/MediaHandlerFfmpeg.cpp:122
 #, c-format
-msgid "MediaHandlerHaiku::createAudioDecoder: %s -- %s"
-msgstr ""
-
-#: libmedia/AudioDecoderSpeex.cpp:41
-msgid "AudioDecoderSpeex: state initialization failed."
+msgid "MediaHandlerFfmpeg::createAudioDecoder: %s -- %s"
 msgstr ""
 
-#: libmedia/AudioDecoderSpeex.cpp:54
-msgid "AudioDecoderSpeex: initialization failed."
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:80
+msgid "MediaParserFfmpeg could not read probe data from input"
 msgstr ""
 
-#: libmedia/AudioDecoderSpeex.cpp:109
-msgid "Corrupt Speex stream!"
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:113
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:122
+#, c-format
+msgid "%s: seeking failed"
 msgstr ""
 
-#: libmedia/AudioDecoderSpeex.cpp:133
-msgid "Failed to resample Speex frame."
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:211
+msgid ""
+"FIXME: FFmpeg packet decompression timestamp has no value, taking as zero"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:170
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:272
 #, c-format
 msgid ""
-"Unexpected audio tag found at offset %d FLV stream advertising no audio in "
-"header. We'll warn only once for each FLV, expecting any further audio tag."
+"MediaParserFfmpeg::parseNextFrame: Problems parsing next frame "
+"(av_read_frame returned %d). We'll consider the stream fully parsed."
 msgstr ""
 
-#: libmedia/FLVParser.cpp:187
-msgid "could not read audio frame?"
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:467
+#, c-format
+msgid "  Using stream %d for audio: codec id %d"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:225
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:480
 #, c-format
+msgid "  Using stream %d for video: codec id %d"
+msgstr ""
+
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:502
+msgid "Duration of video stream unknown"
+msgstr ""
+
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:531
+msgid "Duration of audio stream unknown to ffmpeg"
+msgstr ""
+
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:611
 msgid ""
-"Unexpected video tag found at offset %d of FLV stream advertising no video "
-"in header. We'll warn only once per FLV, expecting any further video tag."
+"MediaParserFfmpeg couldn't parse input format: tried to seek at negative "
+"offset %1%."
 msgstr ""
 
-#: libmedia/FLVParser.cpp:245
-#, c-format
-msgid "AVC packet type: %d"
+#: libmedia/MediaHandler.cpp:49
+msgid "MediaHandler::isFLV: Could not read 3 bytes from input stream"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:264
-msgid "could not read video frame?"
+#: libmedia/MediaHandler.cpp:65
+msgid ""
+"MediaHandler::createMediaParser: only FLV input is supported by this "
+"MediaHandler"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:322
+#: libmedia/MediaHandler.cpp:71
 #, c-format
-msgid "FLVParser::parseNextTag: can't seek to %d"
+msgid "Exception while reading from stream: %s"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:336
+#: libmedia/MediaHandler.cpp:108
 #, c-format
 msgid ""
-"FLVParser::parseNextTag: can't read tag info (needed 12 bytes, only got %d)"
+"MediaHandler::createFlashAudioDecoder: no available flash decoders for codec "
+"%d (%s)"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:423
-#, c-format
-msgid "First byte of FLV_META_TAG is %d, expected 0x02 (STRING AMF0 type)"
+#: libmedia/AudioDecoderSimple.cpp:163
+msgid "corrupted ADPCM header"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:435
+#: libmedia/AudioDecoderSimple.cpp:291 libmedia/AudioDecoderSimple.cpp:304
 #, c-format
-msgid ""
-"FLVParser::parseNextTag: can't read metaTag (%d) body (needed %d bytes, only "
-"got %d)"
+msgid "AudioDecoderSimple: initialized flash codec %s (%d)"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:446
-msgid "Corrupt FLV: Meta tag unterminated!"
+#: libmedia/AudioDecoderSimple.cpp:330 libmedia/AudioDecoderSimple.cpp:361
+#, c-format
+msgid "AudioDecoderSimple: unsupported flash codec %d (%s)"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:454
+#: libmedia/AudioDecoderSimple.cpp:341
 #, c-format
-msgid "FLVParser::parseNextTag: unknown FLV tag type %d"
+msgid "AudioDecoderSimple: unable to intepret custom audio codec id %s"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:463
-msgid ""
-"Corrupt FLV: previous tag size record (%1%) unexpected (actual size: %2%)"
+#: libmedia/AudioDecoderSimple.cpp:428
+msgid "Host endianness not detected in AudioDecoderSimple"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:481
-msgid "FLVParser::parseHeader: couldn't read 9 bytes of header"
+#: libmedia/AudioDecoderSimple.cpp:478
+msgid "Error in sound sample conversion"
 msgstr ""
 
-#: libmedia/FLVParser.cpp:533
+#: libmedia/gst/MediaHandlerGst.cpp:90
+msgid "Wrong arguments given to GST VideoDecoder"
+msgstr ""
+
+#: libmedia/gst/MediaHandlerGst.cpp:137
 #, c-format
-msgid "FLVParser::readAudioFrame: could only read %d/%d bytes"
+msgid "MediaHandlerGst::createAudioDecoder: %s -- %s"
 msgstr ""
 
 #: libmedia/gst/VideoConverterGst.cpp:39
@@ -1245,6 +1313,37 @@ msgstr ""
 msgid "VideoConverterGst: buffer pull failed."
 msgstr ""
 
+#: libmedia/gst/VideoDecoderGst.cpp:97
+msgid "Video codec is zero.  Streaming video expected later."
+msgstr ""
+
+#: libmedia/gst/VideoDecoderGst.cpp:100
+#, c-format
+msgid "No support for video codec %s."
+msgstr ""
+
+#: libmedia/gst/VideoDecoderGst.cpp:122 libmedia/gst/VideoDecoderGst.cpp:148
+msgid "VideoDecoderGst: internal error (caps creation failed)"
+msgstr ""
+
+#: libmedia/gst/VideoDecoderGst.cpp:130
+#, c-format
+msgid "Couldn't find a plugin for video type %s!"
+msgstr ""
+
+#: libmedia/gst/VideoDecoderGst.cpp:134
+msgid " Please make sure you have gstreamer-ffmpeg installed."
+msgstr ""
+
+#: libmedia/gst/VideoDecoderGst.cpp:158
+#, c-format
+msgid "VideoDecoderGst: initialisation failed for video type %s!"
+msgstr ""
+
+#: libmedia/gst/VideoDecoderGst.cpp:189
+msgid "VideoDecoderGst: buffer push failed."
+msgstr ""
+
 #: libmedia/gst/GstUtil.cpp:76
 msgid "Unable to retrieve a valid audio sink from ~/.gnashrc"
 msgstr ""
@@ -1289,234 +1388,57 @@ msgstr ""
 msgid "Missing plugin, but automatic plugin installation not available."
 msgstr ""
 
-#: libmedia/gst/VideoDecoderGst.cpp:97
-msgid "Video codec is zero.  Streaming video expected later."
+#: libmedia/gst/VideoInputGst.cpp:319
+msgid "too high an index value, will cause segfault"
 msgstr ""
 
-#: libmedia/gst/VideoDecoderGst.cpp:100
+#: libmedia/gst/VideoInputGst.cpp:369
 #, c-format
-msgid "No support for video codec %s."
+msgid "%s: Could not create video test source."
 msgstr ""
 
-#: libmedia/gst/VideoDecoderGst.cpp:122 libmedia/gst/VideoDecoderGst.cpp:148
-msgid "VideoDecoderGst: internal error (caps creation failed)"
+#: libmedia/gst/VideoInputGst.cpp:387 libmedia/gst/AudioInputGst.cpp:119
+#, c-format
+msgid "%s: Could not create pulsesrc element"
 msgstr ""
 
-#: libmedia/gst/VideoDecoderGst.cpp:130
+#: libmedia/gst/VideoInputGst.cpp:392 libmedia/gst/AudioInputGst.cpp:124
 #, c-format
-msgid "Couldn't find a plugin for video type %s!"
+msgid "%s: Could not get property probe from pulsesrc element"
 msgstr ""
 
-#: libmedia/gst/VideoDecoderGst.cpp:134
-msgid " Please make sure you have gstreamer-ffmpeg installed."
+#: libmedia/gst/VideoInputGst.cpp:628
+msgid "You have an invalid camera selected. Please check your gnashrc file"
 msgstr ""
 
-#: libmedia/gst/VideoDecoderGst.cpp:158
+#: libmedia/gst/VideoInputGst.cpp:657
 #, c-format
-msgid "VideoDecoderGst: initialisation failed for video type %s!"
-msgstr ""
-
-#: libmedia/gst/VideoDecoderGst.cpp:189
-msgid "VideoDecoderGst: buffer push failed."
+msgid "%s: Passed an invalid argument (not a valid dev_select value)"
 msgstr ""
 
-#: libmedia/gst/MediaParserGst.cpp:55
-msgid "MediaParserGst couldn't create a bin"
+#: libmedia/gst/VideoInputGst.cpp:685 libmedia/gst/AudioInputGst.cpp:222
+#, c-format
+msgid "%s: Pipeline bus isn't an object for some reason"
 msgstr ""
 
-#: libmedia/gst/MediaParserGst.cpp:60
-msgid "MediaParserGst couldn't create a typefind element."
+#: libmedia/gst/VideoInputGst.cpp:705 libmedia/gst/AudioInputGst.cpp:241
+#, c-format
+msgid "%s: Template pad isn't an object for some reason"
 msgstr ""
 
-#: libmedia/gst/MediaParserGst.cpp:72 libmedia/gst/MediaParserGst.cpp:94
-#: libmedia/gst/MediaParserGst.cpp:317 libmedia/gst/MediaParserGst.cpp:374
-#: libmedia/gst/MediaParserGst.cpp:528
-msgid "MediaParserGst could not change element state"
+#: libmedia/gst/VideoInputGst.cpp:718 libmedia/gst/AudioInputGst.cpp:255
+#, c-format
+msgid "%s: pipeline isn't an object for some reason"
 msgstr ""
 
-#: libmedia/gst/MediaParserGst.cpp:85
+#: libmedia/gst/VideoInputGst.cpp:804
 #, c-format
-msgid "Needed %d dead iterations to detect audio type."
+msgid "%s: type %s, cannot be handled for resolution width"
 msgstr ""
 
-#: libmedia/gst/MediaParserGst.cpp:89
-msgid "MediaParserGst failed to detect any stream types."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:187
-msgid ""
-"MediaParserGst failed to read the stream, but it did not reach EOF or enter "
-"a bad state."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:201
-msgid "MediaParserGst failed to push more data into the demuxer! Seeking back."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:280
-#, c-format
-msgid "MediaParserGst/typefound: Detected media type %s"
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:292 libmedia/gst/MediaParserGst.cpp:299
-msgid "MediaParserGst Failed to create fakesink."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:305
-msgid "MediaParserGst: couldn't get the fakesink src element."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:313
-msgid "MediaParserGst: couln't link fakesink"
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:337
-msgid "MediaParserGst: couldn't get the typefind src element."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:352
-msgid "MediaParserGst: couldn't create the demuxer"
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:358 libmedia/gst/MediaParserGst.cpp:363
-msgid "MediaParserGst: failed adding demuxer to bin."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:390
-msgid "MediaParserGst: couldn't get structure name."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:404
-#, c-format
-msgid "MediaParserGst: ignoring stream of type %s."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:428
-#, c-format
-msgid "MediaParserGst: Failed to find a parser (media: %s)."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:437
-msgid ""
-"MediaParserGst: Failed to find a parser. We'll continue, but either audio or "
-"video will not work!"
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:446
-msgid "MediaParserGst: couldn't add parser."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:459
-msgid "MediaParserGst: couldn't link parser."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:471 libmedia/gst/MediaParserGst.cpp:504
-msgid "MediaParserGst: couldn't link \"fake\" sink."
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:490
-#, c-format
-msgid "MediaParserGst: Linked audio source (type: %s)"
-msgstr ""
-
-#: libmedia/gst/MediaParserGst.cpp:520
-#, c-format
-msgid "MediaParserGst: Linked video source (type: %s)"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:100
-msgid "Creating AAC decoder without extra data. This will probably fail!"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:110
-#, c-format
-msgid "AudioDecoderGst: cannot handle codec %d (%s)"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:120
-#, c-format
-msgid "AudioDecoderGst: cannot handle codec %d (no ExtraInfoGst attached)"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:149
-msgid ""
-"The best available resampler is 'audioresample'. Please install gstreamer-"
-"ffmpeg 0.10.4 or newer, or you may experience long delays in audio playback!"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:168 libmedia/gst/AudioDecoderGst.cpp:188
-msgid "AudioDecoderGst: internal error (caps creation failed)"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:175
-#, c-format
-msgid "Couldn't find a plugin for audio type %s!"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:199
-#, c-format
-msgid "AudioDecoderGst: initialisation failed for audio type %s!"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:227
-msgid "Pushed data, but there's nothing to pull (yet)"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:263 libmedia/gst/AudioDecoderGst.cpp:291
-msgid "AudioDecoderGst: buffer push failed."
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:317
-msgid "too high an index value, will cause segfault"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:367
-#, c-format
-msgid "%s: Could not create video test source."
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:385 libmedia/gst/AudioInputGst.cpp:117
-#, c-format
-msgid "%s: Could not create pulsesrc element"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:390 libmedia/gst/AudioInputGst.cpp:122
-#, c-format
-msgid "%s: Could not get property probe from pulsesrc element"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:626
-msgid "You have an invalid camera selected. Please check your gnashrc file"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:657
-#, c-format
-msgid "%s: Passed an invalid argument (not a valid dev_select value)"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:685 libmedia/gst/AudioInputGst.cpp:220
-#, c-format
-msgid "%s: Pipeline bus isn't an object for some reason"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:705 libmedia/gst/AudioInputGst.cpp:239
-#, c-format
-msgid "%s: Template pad isn't an object for some reason"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:718 libmedia/gst/AudioInputGst.cpp:253
-#, c-format
-msgid "%s: pipeline isn't an object for some reason"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:804
-#, c-format
-msgid "%s: type %s, cannot be handled for resolution width"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:825 libmedia/gst/AudioInputGst.cpp:279
-#, c-format
-msgid "%s: was passed a NULL pointer"
+#: libmedia/gst/VideoInputGst.cpp:825 libmedia/gst/AudioInputGst.cpp:281
+#, c-format
+msgid "%s: was passed a NULL pointer"
 msgstr ""
 
 #: libmedia/gst/VideoInputGst.cpp:931 libmedia/gst/VideoInputGst.cpp:1104
@@ -1525,29 +1447,27 @@ msgid "%s: Creation of the webcam_source_bin failed"
 msgstr ""
 
 #: libmedia/gst/VideoInputGst.cpp:933 libmedia/gst/VideoInputGst.cpp:1106
-#: libmedia/gst/AudioInputGst.cpp:326 libmedia/gst/AudioInputGst.cpp:382
+#: libmedia/gst/AudioInputGst.cpp:328 libmedia/gst/AudioInputGst.cpp:384
 #, c-format
 msgid "the error was %s"
 msgstr ""
 
 #: libmedia/gst/VideoInputGst.cpp:961
 #, c-format
-msgid "%s: webam isn't set!"
+msgid "%s: webcam isn't set!"
 msgstr ""
 
 #: libmedia/gst/VideoInputGst.cpp:1024
 #, c-format
-msgid ""
-"%s: the resolution you chose isn't supported, picking                 a "
-"supported value"
+msgid "%s: the resolution you chose isn't supported, picking a supported value"
 msgstr ""
 
-#: libmedia/gst/VideoInputGst.cpp:1128 libmedia/gst/AudioInputGst.cpp:337
+#: libmedia/gst/VideoInputGst.cpp:1128 libmedia/gst/AudioInputGst.cpp:339
 #, c-format
 msgid "%s: couldn't drop the sourcebin back into the main bin"
 msgstr ""
 
-#: libmedia/gst/VideoInputGst.cpp:1137 libmedia/gst/AudioInputGst.cpp:347
+#: libmedia/gst/VideoInputGst.cpp:1137 libmedia/gst/AudioInputGst.cpp:349
 #, c-format
 msgid "%s: couldn't link up sourcebin and tee"
 msgstr ""
@@ -1557,12 +1477,12 @@ msgstr ""
 msgid "%s: problem creating source bin"
 msgstr ""
 
-#: libmedia/gst/VideoInputGst.cpp:1176 libmedia/gst/AudioInputGst.cpp:410
+#: libmedia/gst/VideoInputGst.cpp:1176 libmedia/gst/AudioInputGst.cpp:412
 #, c-format
 msgid "%s: problem creating tee element"
 msgstr ""
 
-#: libmedia/gst/VideoInputGst.cpp:1180 libmedia/gst/AudioInputGst.cpp:414
+#: libmedia/gst/VideoInputGst.cpp:1180 libmedia/gst/AudioInputGst.cpp:416
 #, c-format
 msgid "%s: problem creating save_queue element"
 msgstr ""
@@ -1597,7 +1517,7 @@ msgstr ""
 msgid "%s: couldn't get video_display_queue_pad"
 msgstr ""
 
-#: libmedia/gst/VideoInputGst.cpp:1240 libmedia/gst/AudioInputGst.cpp:464
+#: libmedia/gst/VideoInputGst.cpp:1240 libmedia/gst/AudioInputGst.cpp:466
 #, c-format
 msgid "%s: Unable to create main pipeline"
 msgstr ""
@@ -1636,13 +1556,13 @@ msgstr ""
 msgid "%s: something went wrong in the make_video_display_link function"
 msgstr ""
 
-#: libmedia/gst/VideoInputGst.cpp:1416 libmedia/gst/AudioInputGst.cpp:540
-#: libmedia/gst/AudioInputGst.cpp:680
+#: libmedia/gst/VideoInputGst.cpp:1416 libmedia/gst/AudioInputGst.cpp:542
+#: libmedia/gst/AudioInputGst.cpp:682
 #, c-format
 msgid "%s: unlink failed"
 msgstr ""
 
-#: libmedia/gst/VideoInputGst.cpp:1423 libmedia/gst/AudioInputGst.cpp:687
+#: libmedia/gst/VideoInputGst.cpp:1423 libmedia/gst/AudioInputGst.cpp:689
 #, c-format
 msgid "%s: couldn't remove saveBin from pipeline"
 msgstr ""
@@ -1687,1083 +1607,1253 @@ msgstr ""
 msgid "%s: there was some problem in linking!"
 msgstr ""
 
-#: libmedia/gst/MediaHandlerGst.cpp:90
-msgid "Wrong arguments given to GST VideoDecoder"
+#: libmedia/gst/MediaParserGst.cpp:53
+msgid "MediaParserGst couldn't create a bin"
 msgstr ""
 
-#: libmedia/gst/MediaHandlerGst.cpp:137
+#: libmedia/gst/MediaParserGst.cpp:58
+msgid "MediaParserGst couldn't create a typefind element."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:70 libmedia/gst/MediaParserGst.cpp:74
+#: libmedia/gst/MediaParserGst.cpp:282 libmedia/gst/MediaParserGst.cpp:339
+#: libmedia/gst/MediaParserGst.cpp:493
+msgid "MediaParserGst could not change element state"
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:167
+msgid ""
+"MediaParserGst failed to read the stream, but it did not reach EOF or enter "
+"a bad state."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:184
+msgid "MediaParserGst failed to push more data into the demuxer."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:245
 #, c-format
-msgid "MediaHandlerGst::createAudioDecoder: %s -- %s"
+msgid "MediaParserGst/typefound: Detected media type %s"
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:257 libmedia/gst/MediaParserGst.cpp:264
+msgid "MediaParserGst Failed to create fakesink."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:270
+msgid "MediaParserGst: couldn't get the fakesink src element."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:278
+msgid "MediaParserGst: couln't link fakesink"
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:302
+msgid "MediaParserGst: couldn't get the typefind src element."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:317
+msgid "MediaParserGst: couldn't create the demuxer"
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:323 libmedia/gst/MediaParserGst.cpp:328
+msgid "MediaParserGst: failed adding demuxer to bin."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:355
+msgid "MediaParserGst: couldn't get structure name."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:369
+#, c-format
+msgid "MediaParserGst: ignoring stream of type %s."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:393
+#, c-format
+msgid "MediaParserGst: Failed to find a parser (media: %s)."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:402
+msgid ""
+"MediaParserGst: Failed to find a parser. We'll continue, but either audio or "
+"video will not work!"
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:411
+msgid "MediaParserGst: couldn't add parser."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:424
+msgid "MediaParserGst: couldn't link parser."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:436 libmedia/gst/MediaParserGst.cpp:469
+msgid "MediaParserGst: couldn't link \"fake\" sink."
+msgstr ""
+
+#: libmedia/gst/MediaParserGst.cpp:455
+#, c-format
+msgid "MediaParserGst: Linked audio source (type: %s)"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:100
+#: libmedia/gst/MediaParserGst.cpp:485
+#, c-format
+msgid "MediaParserGst: Linked video source (type: %s)"
+msgstr ""
+
+#: libmedia/gst/AudioInputGst.cpp:102
 #, c-format
 msgid "%s: Could not create audio test source"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:190
+#: libmedia/gst/AudioInputGst.cpp:192
 #, c-format
 msgid "%s: passed an invalid devselect argument"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:244
+#: libmedia/gst/AudioInputGst.cpp:246
 msgid "The input device you selected isn't supported (yet)"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:270
+#: libmedia/gst/AudioInputGst.cpp:272
 #, c-format
 msgid "%s: Passed a bad devselect value"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:324 libmedia/gst/AudioInputGst.cpp:380
+#: libmedia/gst/AudioInputGst.cpp:326 libmedia/gst/AudioInputGst.cpp:382
 #, c-format
 msgid "%s: Creation of the audioSourceBin failed"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:406
+#: libmedia/gst/AudioInputGst.cpp:408
 #, c-format
 msgid "%s: audioCreateSourceBin failed!"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:419
+#: libmedia/gst/AudioInputGst.cpp:421
 #, c-format
 msgid "%s: problem creating audioPlaybackQueue element"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:426
+#: libmedia/gst/AudioInputGst.cpp:428
 #, c-format
 msgid "%s: couldn't link audioSourceBin and tee"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:431
+#: libmedia/gst/AudioInputGst.cpp:433
 #, c-format
 msgid "%s: couldn't link tee and saveQueue"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:436
+#: libmedia/gst/AudioInputGst.cpp:438
 #, c-format
 msgid "%s: couldn't link tee and audioPlaybackQueue"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:445
+#: libmedia/gst/AudioInputGst.cpp:447
 #, c-format
 msgid "%s: couldn't get saveQueueSrcPad"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:455
+#: libmedia/gst/AudioInputGst.cpp:457
 #, c-format
 msgid "%s: couldn't get audioPlaybackQueue"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:481
+#: libmedia/gst/AudioInputGst.cpp:483
 #, c-format
 msgid "%s: There was a problem making the audiosink!"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:517
+#: libmedia/gst/AudioInputGst.cpp:519
 msgid "something went wrong in the makeSourcePlaybackLink function"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:548
+#: libmedia/gst/AudioInputGst.cpp:550
 #, c-format
 msgid "%s: couldn't remove audioPlaybackBin from pipeline"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:555
+#: libmedia/gst/AudioInputGst.cpp:557
 #, c-format
 msgid "%s: changing state of audioPlaybackBin failed"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:579
+#: libmedia/gst/AudioInputGst.cpp:581
 #, c-format
 msgid "Error: %s"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:599
+#: libmedia/gst/AudioInputGst.cpp:601
 #, c-format
 msgid "%s: Couldn't make audioconvert element"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:603
+#: libmedia/gst/AudioInputGst.cpp:605
 #, c-format
 msgid "%s: Couldn't make vorbisenc element"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:607
+#: libmedia/gst/AudioInputGst.cpp:609
 #, c-format
 msgid "%s: Couldn't make oggmux element"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:611
+#: libmedia/gst/AudioInputGst.cpp:613
 #, c-format
 msgid "%s: Couldn't make filesink element"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:630
+#: libmedia/gst/AudioInputGst.cpp:632
 #, c-format
 msgid "%s: Something went wrong in linking"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:658
+#: libmedia/gst/AudioInputGst.cpp:660
 msgid "something went wrong in the makeAudioSourceSaveLink function"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:694
+#: libmedia/gst/AudioInputGst.cpp:696
 #, c-format
 msgid "%s: audioSaveBin state change failed"
 msgstr ""
 
-#: libmedia/gst/AudioInputGst.cpp:755
+#: libmedia/gst/AudioInputGst.cpp:757
 msgid "You have an invalid microphone selected. Check your gnashrc file"
 msgstr ""
 
-#: libmedia/AudioDecoderSimple.cpp:163
-msgid "corrupted ADPCM header"
+#: libmedia/gst/AudioDecoderGst.cpp:100
+msgid "Creating AAC decoder without extra data. This will probably fail!"
 msgstr ""
 
-#: libmedia/AudioDecoderSimple.cpp:291 libmedia/AudioDecoderSimple.cpp:304
+#: libmedia/gst/AudioDecoderGst.cpp:110
 #, c-format
-msgid "AudioDecoderSimple: initialized flash codec %s (%d)"
+msgid "AudioDecoderGst: cannot handle codec %d (%s)"
 msgstr ""
 
-#: libmedia/AudioDecoderSimple.cpp:330 libmedia/AudioDecoderSimple.cpp:361
+#: libmedia/gst/AudioDecoderGst.cpp:120
 #, c-format
-msgid "AudioDecoderSimple: unsupported flash codec %d (%s)"
+msgid "AudioDecoderGst: cannot handle codec %d (no ExtraInfoGst attached)"
 msgstr ""
 
-#: libmedia/AudioDecoderSimple.cpp:341
-#, c-format
-msgid "AudioDecoderSimple: unable to intepret custom audio codec id %s"
+#: libmedia/gst/AudioDecoderGst.cpp:149
+msgid ""
+"The best available resampler is 'audioresample'. Please install gstreamer-"
+"ffmpeg 0.10.4 or newer, or you may experience long delays in audio playback!"
 msgstr ""
 
-#: libmedia/AudioDecoderSimple.cpp:428
-msgid "Host endianness not detected in AudioDecoderSimple"
+#: libmedia/gst/AudioDecoderGst.cpp:168 libmedia/gst/AudioDecoderGst.cpp:188
+msgid "AudioDecoderGst: internal error (caps creation failed)"
 msgstr ""
 
-#: libmedia/AudioDecoderSimple.cpp:478
-msgid "Error in sound sample conversion"
+#: libmedia/gst/AudioDecoderGst.cpp:175
+#, c-format
+msgid "Couldn't find a plugin for audio type %s!"
 msgstr ""
 
-#: libmedia/MediaHandler.cpp:49
-msgid "MediaHandler::isFLV: Could not read 3 bytes from input stream"
+#: libmedia/gst/AudioDecoderGst.cpp:199
+#, c-format
+msgid "AudioDecoderGst: initialisation failed for audio type %s!"
 msgstr ""
 
-#: libmedia/MediaHandler.cpp:65
-msgid ""
-"MediaHandler::createMediaParser: only FLV input is supported by this "
-"MediaHandler"
+#: libmedia/gst/AudioDecoderGst.cpp:227
+msgid "Pushed data, but there's nothing to pull (yet)"
 msgstr ""
 
-#: libmedia/MediaHandler.cpp:71
-#, c-format
-msgid "Exception while reading from stream: %s"
+#: libmedia/gst/AudioDecoderGst.cpp:263 libmedia/gst/AudioDecoderGst.cpp:291
+msgid "AudioDecoderGst: buffer push failed."
 msgstr ""
 
-#: libmedia/MediaHandler.cpp:108
+#: libmedia/haiku/MediaHandlerHaiku.cpp:115
 #, c-format
-msgid ""
-"MediaHandler::createFlashAudioDecoder: no available flash decoders for codec "
-"%d (%s)"
+msgid "MediaHandlerHaiku::createAudioDecoder: %s -- %s"
 msgstr ""
 
-#: libcore/ExternalInterface.cpp:133
-#, c-format
-msgid "Can't convert unknown type %d"
+#: libmedia/MediaParser.cpp:83
+msgid "No ID3 support implemented in this MediaParser"
 msgstr ""
 
-#: libcore/as_value.cpp:768
-#, c-format
-msgid "serialization of as_value of type %d"
+#: libcore/abc/AbcBlock.cpp:65 libcore/abc/AbcBlock.cpp:133
+msgid "ABC: Finalizing trait yielded bad type for slot."
 msgstr ""
 
-#: libcore/ClassHierarchy.cpp:85
-#, c-format
-msgid "Native class %s is not an object after initialization (%s)"
+#: libcore/abc/AbcBlock.cpp:188
+msgid "ABC: Bad name for trait."
 msgstr ""
 
-#: libcore/ClassHierarchy.cpp:92
-#, c-format
-msgid "Native class %s is not found after initialization"
+#: libcore/abc/AbcBlock.cpp:193
+msgid "ABC: Trait name must be fully qualified."
 msgstr ""
 
-#: libcore/MovieLoader.cpp:259
-#, c-format
-msgid "Can't create Movie instance for definition loaded from %s"
+#: libcore/abc/AbcBlock.cpp:240 libcore/abc/AbcBlock.cpp:266
+msgid "Bad method id in trait."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:254
-#, c-format
-msgid "Can't init FreeType! Error = %d"
+#: libcore/abc/AbcBlock.cpp:256
+msgid "Bad Class id in trait."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:266
-#, c-format
-msgid "Can't close FreeType! Error = %d"
+#: libcore/abc/AbcBlock.cpp:274
+msgid "ABC: Unknown type of trait."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:280
+#: libcore/abc/AbcBlock.cpp:468
 #, c-format
-msgid "Failed to find fonts directory, using hard-coded font filename \"%s\""
+msgid "Abc Version: %d.%d"
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:293
-#, c-format
-msgid "Can't init fontconfig library, using hard-coded font filename \"%s\""
+#: libcore/abc/AbcBlock.cpp:567
+msgid "ABC: Bad string given for namespace."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:355
-#, c-format
-msgid "No device font matches the name '%s', using hard-coded font filename"
+#: libcore/abc/AbcBlock.cpp:609
+msgid "ABC: Bad namespace for namespace set."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:360
-msgid ""
-"Font filename matching not implemented (no fontconfig support built-in), "
-"using hard-coded font filename"
+#: libcore/abc/AbcBlock.cpp:679
+#, c-format
+msgid "Action Block: Unknown multiname type (%d)."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:393
-msgid "Freetype not supported"
+#: libcore/abc/AbcBlock.cpp:712 libcore/abc/AbcBlock.cpp:722
+#: libcore/abc/AbcBlock.cpp:732 libcore/abc/AbcBlock.cpp:742
+msgid "Action Block: Bad index in optional argument."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:434
-#, c-format
-msgid "Can't find font file for font '%s'"
+#: libcore/abc/AbcBlock.cpp:752
+msgid "ABC: Bad index in optional argument, namespaces."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:447
+#: libcore/abc/AbcBlock.cpp:774
 #, c-format
-msgid "Font file '%s' has bad format"
+msgid "ABC: Bad default value type (%X), but continuing."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:456
-#, c-format
-msgid "Some error opening font '%s'"
+#: libcore/abc/AbcBlock.cpp:812
+msgid "ABC: Bad return type for method info."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:490
-#, c-format
-msgid "Error loading freetype outline glyph for char '%c' (error: %d)"
+#: libcore/abc/AbcBlock.cpp:825
+msgid "ABC: Unknown return type."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:506
-#, c-format
-msgid ""
-"FT_Load_Char() returned a glyph format != FT_GLYPH_FORMAT_OUTLINE (%c%c%c%c)"
+#: libcore/abc/AbcBlock.cpp:842
+msgid "ABC: Bad parameter type in method."
 msgstr ""
 
-#: libcore/FreetypeGlyphsProvider.cpp:561
-msgid "Could not release FT face resources"
+#: libcore/abc/AbcBlock.cpp:851
+msgid "ABC: Unknown parameter type."
 msgstr ""
 
-#: libcore/swf/DefineShapeTag.cpp:58
-#, c-format
-msgid "DefineShapeTag(%s): id = %d"
+#: libcore/abc/AbcBlock.cpp:940
+msgid "ABC: Out of bounds instance name."
 msgstr ""
 
-#: libcore/swf/VideoFrameTag.cpp:47
-#, c-format
-msgid "VideoFrame tag refers to unknown video stream id %d"
+#: libcore/abc/AbcBlock.cpp:948
+msgid "ABC: QName required for instance."
 msgstr ""
 
-#: libcore/swf/VideoFrameTag.cpp:57
-#, c-format
-msgid "VideoFrame tag refers to a non-video DisplayObject %d (%s)"
+#: libcore/abc/AbcBlock.cpp:953
+msgid "ABC: No namespace to use for storing class."
 msgstr ""
 
-#: libcore/swf/VideoFrameTag.cpp:90
-msgid ""
-"Could not read enough bytes when parsing VideoFrame tag. Perhaps we reached "
-"the end of the stream!"
+#: libcore/abc/AbcBlock.cpp:968
+msgid "Duplicate class registration."
 msgstr ""
 
-#: libcore/swf/DefineTextTag.cpp:52
-#, c-format
-msgid "DefineTextTag, id = %d"
+#: libcore/abc/AbcBlock.cpp:984
+msgid "ABC: Bad super type."
 msgstr ""
 
-#: libcore/swf/DefineTextTag.cpp:93
+#: libcore/abc/AbcBlock.cpp:995
 #, c-format
-msgid "Text DisplayObject, id = %d"
+msgid "ABC: Super type not found (%s)"
 msgstr ""
 
-#: libcore/swf/DefineTextTag.cpp:112
-#, c-format
-msgid "begin text records for DefineTextTag %p"
+#: libcore/abc/AbcBlock.cpp:1002
+msgid "ABC: Can't extend a class which is final."
 msgstr ""
 
-#: libcore/swf/DefaultTagLoaders.cpp:94
-#, c-format
-msgid ""
-"Undocumented tag %s encountered. Please report this to the Gnash developers!"
+#: libcore/abc/AbcBlock.cpp:1008
+msgid "ABC: Can't extend an interface type."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:60
-msgid "reading code table at offset %1%, %2% glyphs"
+#: libcore/abc/AbcBlock.cpp:1014
+msgid "ABC: Class cannot be its own supertype."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:120
-msgid "reading DefineFont"
+#: libcore/abc/AbcBlock.cpp:1035
+msgid "ABC: Bad namespace for protected."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:157
-msgid "Glyphs offset table corrupted in DefineFont tag"
+#: libcore/abc/AbcBlock.cpp:1054
+msgid "ABC: Bad name for interface."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:172
-msgid "reading DefineFont2 or DefineFont3"
+#: libcore/abc/AbcBlock.cpp:1061
+msgid "ABC: Can't implement a non-interface type."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:225 libcore/swf/DefineFontTag.cpp:237
-#, c-format
-msgid "Glyph %d at offset %u"
+#: libcore/abc/AbcBlock.cpp:1073
+msgid "ABC: Out of bounds method for initializer."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:254
-msgid "Glyphs offset table corrupted in DefineFont2/3 tag"
+#: libcore/abc/AbcBlock.cpp:1108
+msgid "ABC: Out of bound static constructor for class."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:266
-msgid "Bad offset in DefineFont2"
+#: libcore/abc/AbcBlock.cpp:1147
+msgid "ABC: Out of bounds method for script."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:325
-msgid "Repeated kerning pair found - ignoring"
+#: libcore/abc/AbcBlock.cpp:1183
+msgid "ABC: Out of bounds for method body."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:344
-#, c-format
-msgid "DefineFontInfo tag loader: can't find font with id %d"
+#: libcore/abc/AbcBlock.cpp:1190
+msgid "ABC: Only one body per method."
 msgstr ""
 
-#: libcore/swf/DefineFontTag.cpp:352
-msgid "DefineFontInfo2 partially implemented"
+#: libcore/abc/AbcBlock.cpp:1236
+msgid "ABC: Out of bound type for exception."
 msgstr ""
 
-#: libcore/swf/CSMTextSettingsTag.cpp:77
+#: libcore/abc/AbcBlock.cpp:1246
 #, c-format
-msgid ""
-"  CSMTextSettings: TextID=%d, FlashType=%d, GridFit=%d, Thickness=%d, "
-"Sharpness=%d"
+msgid "ABC: Unknown type of object to catch. (%s)"
 msgstr ""
 
-#: libcore/swf/CSMTextSettingsTag.cpp:85
-msgid "CSMTextSettings"
+#: libcore/abc/AbcBlock.cpp:1264
+msgid "ABC: Out of bound name for caught exception."
 msgstr ""
 
-#: libcore/swf/TextRecord.cpp:52
-msgid "end text records"
+#: libcore/ExternalInterface.cpp:137
+#, c-format
+msgid "Can't convert unknown type %d"
 msgstr ""
 
-#: libcore/swf/TextRecord.cpp:78
+#: libcore/MovieClip.cpp:621
 #, c-format
-msgid "  has_font: font id = %d (%p)"
+msgid "call_frame('%s') -- invalid frame"
 msgstr ""
 
-#: libcore/swf/TextRecord.cpp:90
-msgid "  hasColor"
+#: libcore/MovieClip.cpp:667
+msgid "Can't clone root of the movie"
 msgstr ""
 
-#: libcore/swf/TextRecord.cpp:99
+#: libcore/MovieClip.cpp:675
 #, c-format
-msgid "  xOffset = %g"
+msgid "%s parent is not a movieclip, can't clone"
 msgstr ""
 
-#: libcore/swf/TextRecord.cpp:108
-#, c-format
-msgid "  yOffset = %g"
+#: libcore/MovieClip.cpp:852
+msgid "MovieClip.unloadMovie()"
 msgstr ""
 
-#: libcore/swf/TextRecord.cpp:117
+#: libcore/MovieClip.cpp:885
 #, c-format
-msgid "  textHeight = %g"
+msgid "advance_movieclip: no frames loaded for movieclip/movie %s"
 msgstr ""
 
-#: libcore/swf/TextRecord.cpp:126
-#, c-format
-msgid "  GlyphEntries: count = %d"
+#: libcore/MovieClip.cpp:935
+msgid ""
+"Flushing orphaned tags in movieclip %1%. _currentFrame:%2%, _hasLooped:%3%, "
+"frame_count:%4%"
 msgstr ""
 
-#: libcore/swf/TextRecord.cpp:138
+#: libcore/MovieClip.cpp:1046
 #, c-format
-msgid "   glyph%d: index=%d, advance=%g"
+msgid "Executing %d tags in frame %d/%d of movieclip %s"
 msgstr ""
 
-#: libcore/swf/StartSoundTag.cpp:56
+#: libcore/MovieClip.cpp:1084 libcore/MovieClip.cpp:1125
 #, c-format
-msgid "start_sound_loader: sound_id %d is not defined"
+msgid ""
+"Target frame of a gotoFrame(%d) was never loaded, although frame count in "
+"header (%d) said we should have found it"
 msgstr ""
 
-#: libcore/swf/StartSoundTag.cpp:64
+#: libcore/MovieClip.cpp:1116
 #, c-format
-msgid "StartSound: id=%d"
+msgid ""
+"GotoFrame(%d) targets a yet to be loaded frame (%d). We'll wait for it but a "
+"more correct form is explicitly using WaitForFrame instead"
 msgstr ""
 
-#: libcore/swf/StartSoundTag.cpp:114
-msgid "STARTSOUND2 tag not parsed and not used"
+#: libcore/MovieClip.cpp:1189
+#, c-format
+msgid "MovieClip::goto_labeled_frame('%s') unknown label"
 msgstr ""
 
-#: libcore/swf/DefineButtonSoundTag.cpp:52
+#: libcore/MovieClip.cpp:1248
 #, c-format
-msgid "DEFINEBUTTONSOUND refers to an unknown DisplayObject def %d"
+msgid "MovieClip::add_display_object(): unknown cid = %d"
 msgstr ""
 
-#: libcore/swf/DefineButtonSoundTag.cpp:63
+#: libcore/MovieClip.cpp:1318
 #, c-format
-msgid ""
-"DEFINEBUTTONSOUND refers to DisplayObject id %d, a %s (expected a button "
-"DisplayObject)"
+msgid "movieclip::replace_display_object(): unknown cid = %d"
 msgstr ""
 
-#: libcore/swf/DefineButtonSoundTag.cpp:73
-msgid "Attempt to redefine button sound ignored"
+#: libcore/MovieClip.cpp:1327
+#, c-format
+msgid ""
+"MovieClip::replace_display_object: could not find any DisplayObject at depth "
+"%d"
 msgstr ""
 
-#: libcore/swf/DefineButtonSoundTag.cpp:99
+#: libcore/MovieClip.cpp:1905
 #, c-format
-msgid "sound tag not found, sound_id=%d, button state #=%i"
+msgid "Could not load variables from %s"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:83
-msgid "anchor-labeled frame not supported"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:87
+#: libcore/MovieClip.cpp:1958
 #, c-format
-msgid "frame_label_loader end position %d, read up to %d"
+msgid ""
+"removeMovieClip(%s): movieclip depth (%d) out of the 'dynamic' zone "
+"[0..1048575], won't remove"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:107
+#: libcore/movie_root.cpp:238
 #, c-format
-msgid "  sprite:  char id = %d"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:118
-msgid ""
-"Nested DEFINESPRITE tags. Will add to top-level DisplayObjects dictionary."
+msgid "ActionParserException thrown during setRootMovie: %s"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:128
+#: libcore/movie_root.cpp:253
 #, c-format
-msgid "Sprite %d advertise no frames"
+msgid "No user interface registered, assuming 'Yes' answer to question: %s"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:168
+#: libcore/movie_root.cpp:402 libcore/movie_root.cpp:412
 #, c-format
-msgid "DEFINESOUNDLOADER: sound sample rate %d (expected 0 to %u)"
+msgid ""
+"%s.swapDepth(%d): movie has a depth (%d) below static depth zone (%d), won't "
+"swap its depth"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:188
-#, c-format
+#: libcore/movie_root.cpp:470
 msgid ""
-"define sound: ch=%d, format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, delay=%d"
+"movie_root::dropLevel called against a movie not found in the levels "
+"container"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:216
-msgid "Tag boundary reported past end of SWFStream!"
+#: libcore/movie_root.cpp:477
+msgid "Original root movie can't be removed"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:236
+#: libcore/movie_root.cpp:496
 #, c-format
 msgid ""
-"There is no sound handler currently active, so DisplayObject with id %d will "
-"not be added to the dictionary"
+"TESTME: loadMovie called on level %d which is not available at load time, "
+"skipped placement for now"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:269
+#: libcore/movie_root.cpp:627
 #, c-format
-msgid "File attributes: metadata=%s network=%s"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:270 libcore/swf/tag_loaders.cpp:271
-msgid "true"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:270 libcore/swf/tag_loaders.cpp:271
-msgid "false"
+msgid "ActionLimits hit notifying key listeners: %s."
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:275
+#: libcore/movie_root.cpp:865
 msgid ""
-"FileAttributes tag in the SWF requests that network access is not granted to "
-"this movie (or application?) when loaded from the filesystem. Anyway Gnash "
-"won't care; use white/black listing in your .gnashrc instead"
+"movie_root tracking a streaming sound, but the sound handler is not "
+"streaming!"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:283
+#: libcore/movie_root.cpp:897
 msgid ""
-"This SWF file requires AVM2: there will be no ActionScript interpretation"
+"Time exceeded (%1% secs) while attempting to catch up to streaming sound. "
+"Give up on synchronization?"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:308
+#: libcore/movie_root.cpp:949
 #, c-format
-msgid ""
-"  RDF metadata (information only): [[\n"
-"%s\n"
-"]]"
+msgid "Buffer overread during advance: %s"
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:324
+#: libcore/movie_root.cpp:1068
 #, c-format
-msgid "Descriptive metadata from movie %s: %s"
+msgid "ActionLimits hit notifying mouse events: %s."
 msgstr ""
 
-#: libcore/swf/tag_loaders.cpp:386
+#: libcore/movie_root.cpp:1560
 #, c-format
-msgid "  reflex = \"%c%c%c\""
+msgid "Couldn't process ExternalInterface Call %s"
 msgstr ""
 
-#: libcore/swf/DefineFontAlignZonesTag.cpp:54
-#, c-format
-msgid "DefineFontAlignZones tag references an undefined font %d"
+#: libcore/movie_root.cpp:1605
+msgid "ExternalInterface::GotoFrame()"
 msgstr ""
 
-#: libcore/swf/DefineFontAlignZonesTag.cpp:73
-#, c-format
-msgid "DefineFontAlignZones: font=%d, flags=%d, table int: %s"
+#: libcore/movie_root.cpp:1613
+msgid "ExternalInterface::LoadMovie()"
 msgstr ""
 
-#: libcore/swf/DefineFontAlignZonesTag.cpp:110
-msgid "DefineFontAlignZoneTag"
+#: libcore/movie_root.cpp:1682 gui/Player.cpp:716
+#, c-format
+msgid "Could not write to user-provided host requests fd %d: %s"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:274
+#: libcore/movie_root.cpp:1843 libcore/movie_root.cpp:1875
+#: libcore/movie_root.cpp:1931
 #, c-format
-msgid "  bound SWFRect: %s"
+msgid "Could not write to browser fd #%d: %s"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:301
+#: libcore/movie_root.cpp:2189
 #, c-format
-msgid "  ShapeRecord(%s): fillbits %d, linebits %d"
+msgid "Fork failed launching URL opener '%s'"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:379
+#: libcore/movie_root.cpp:2236
 #, c-format
-msgid "  Shape read: moveto %d %d"
+msgid "Could only write %d bytes to fd #%d"
+msgstr ""
+
+#: libcore/movie_root.cpp:2324
+msgid "Live MovieClips"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:400
+#: libcore/movie_root.cpp:2453
 #, c-format
-msgid ""
-"Invalid fill style %d in fillStyle0Change record for font tag (0 or 1 "
-"valid). Set to 0."
+msgid "%s to UTF8 conversion in LoadableObject input parsing"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:410
+#: libcore/movie_root.cpp:2476
 #, c-format
 msgid ""
-"Invalid fill style %d in fillStyle0Change record - %d defined. Set to 0."
+"Hosting application registered no callback for events/queries, can't call %s"
+"(%s)"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:421
+#: libcore/parser/TypesParser.cpp:145
 #, c-format
-msgid "  Shape read: fill0 (left) = %d"
+msgid "Invalid rectangle: minx=%g maxx=%g miny=%g maxy=%g"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:443
+#: libcore/parser/TypesParser.cpp:161
 #, c-format
-msgid ""
-"Invalid fill style %d in fillStyle1Change record for font tag (0 or 1 "
-"valid). Set to 0."
+msgid "  FillStyle read type = 0x%X"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:453
+#: libcore/parser/TypesParser.cpp:207
 #, c-format
-msgid ""
-"Invalid fill style %d in fillStyle1Change record - %d defined. Set to 0."
+msgid "  gradients count: %d"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:463
-#, c-format
-msgid "  Shape read: fill1 (right) = %d"
+#: libcore/parser/TypesParser.cpp:212
+msgid "No gradients!"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:484
-#, c-format
-msgid ""
-"Invalid line style %d in lineStyleChange record for font tag (0 or 1 valid). "
-"Set to 0."
+#: libcore/parser/TypesParser.cpp:266
+msgid "Illegal spread mode in gradient definition."
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:494
-#, c-format
-msgid "Invalid fill style %d in lineStyleChange record - %d defined. Set to 0."
+#: libcore/parser/TypesParser.cpp:283
+msgid "Illegal interpolation mode in gradient definition."
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:504
+#: libcore/parser/TypesParser.cpp:408
 #, c-format
-msgid "ShapeRecord: line %d"
+msgid "  color: %s"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:518
-msgid "ShapeRecord: more fill styles"
+#: libcore/parser/SWFParser.cpp:90
+msgid "SHOWFRAME tag"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:558
+#: libcore/parser/SWFParser.cpp:100
 #, c-format
-msgid "ShapeRecord: curved edge %d %d - %d %d - %d %d"
+msgid ""
+"Encountered unknown tag %d. These usually store creation tool data and do "
+"not affect playback"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:593
+#: libcore/parser/SWFParser.cpp:105
 #, c-format
-msgid "ShapeRecord: straight edge %d %d - %d %d"
+msgid "tag dump follows: %s"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:642
-msgid "  fill styles: %1%"
+#: libcore/parser/SWFParser.cpp:113
+#, c-format
+msgid "Parsing exception: %s"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:651
-msgid "  Read fill: %1%"
+#: libcore/parser/SWFParser.cpp:151 libcore/SWFStream.cpp:302
+#: libcore/SWFStream.cpp:320 libcore/SWFStream.cpp:353
+#: libcore/SWFStream.cpp:384
+msgid "Unexpected end of stream while reading"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:665
+#: libcore/parser/sprite_definition.cpp:64
 #, c-format
-msgid "  readLineStyles: count = %d"
+msgid "  frames = %d"
 msgstr ""
 
-#: libcore/swf/ShapeRecord.cpp:672
+#: libcore/parser/sprite_definition.cpp:77
 #, c-format
-msgid "  readLineStyles: count2 = %d"
+msgid ""
+"%d frames advertised in header, but only %d SHOWFRAME tags found in define "
+"sprite."
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:85
-#, c-format
-msgid "  PLACEOBJECT: depth=%d(%d) char=%d"
+#: libcore/parser/sprite_definition.cpp:87
+msgid "  -- sprite END --"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:89 libcore/swf/PlaceObject2Tag.cpp:311
+#: libcore/parser/SWFMovieDefinition.cpp:255
 #, c-format
-msgid "  SWFCxForm: %s"
+msgid "Add sound sample %d assigning id %d"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:105
-#, c-format
-msgid "Reserved field in PlaceObject actions == %u (expected 0)"
+#: libcore/parser/SWFMovieDefinition.cpp:284
+msgid ""
+"gnash::SWFMovieDefinition::read() -- file does not start with a SWF header"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:123
+#: libcore/parser/SWFMovieDefinition.cpp:291
 #, c-format
-msgid "  actions: flags = 0x%X"
+msgid "version: %d, file_length: %d"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:158
-#, c-format
+#: libcore/parser/SWFMovieDefinition.cpp:296
 msgid ""
-"swf_event::read(), even_length = %u, but only %lu bytes left to the end of "
-"current tag. Breaking for safety."
+"SWFMovieDefinition::read(): unable to read zipped SWF data; Gnash was "
+"compiled without zlib support"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:219
-#, c-format
-msgid ""
-"swf_event::read() -- unknown / unhandled event type received, flags = 0x%x"
+#: libcore/parser/SWFMovieDefinition.cpp:301
+msgid "file is compressed"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:248
-msgid "Unexpected end of tag while parsing PlaceObject tag events"
+#: libcore/parser/SWFMovieDefinition.cpp:320
+msgid "non-finite movie bounds"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:304
+#: libcore/parser/SWFMovieDefinition.cpp:336
 #, c-format
-msgid "  PLACEOBJECT2: depth = %d (%d)"
+msgid "frame size = %s, frame rate = %f, frames = %d"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:306 libcore/swf/PlaceObject2Tag.cpp:419
-#, c-format
-msgid "  char id = %d"
+#: libcore/parser/SWFMovieDefinition.cpp:360
+msgid "Could not start loading thread"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:308 libcore/swf/PlaceObject2Tag.cpp:420
+#: libcore/parser/SWFMovieDefinition.cpp:431
 #, c-format
-msgid "  SWFMatrix: %s"
+msgid "Could not find char %d, dump is: %s"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:313 libcore/swf/PlaceObject2Tag.cpp:422
-#, c-format
-msgid "  ratio: %d"
+#: libcore/parser/SWFMovieDefinition.cpp:490
+msgid "Error while parsing SWF stream."
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:314 libcore/swf/PlaceObject2Tag.cpp:423
+#: libcore/parser/SWFMovieDefinition.cpp:502
 #, c-format
-msgid "  name = %s"
+msgid "%d control tags are NOT followed by a SHOWFRAME tag"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:316 libcore/swf/PlaceObject2Tag.cpp:425
+#: libcore/parser/SWFMovieDefinition.cpp:510
 #, c-format
-msgid "  clip_depth = %d (%d)"
+msgid ""
+"%d frames advertised in header, but only %d SHOWFRAME tags found in stream. "
+"Pretending we loaded all advertised frames"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:319 libcore/swf/PlaceObject2Tag.cpp:428
+#: libcore/parser/SWFMovieDefinition.cpp:538
 #, c-format
-msgid " m_place_type: %d"
+msgid ""
+"number of SHOWFRAME tags in SWF stream '%s' (%d) exceeds the advertised "
+"number in header (%d)."
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:417
-#, c-format
-msgid "  PLACEOBJECT3: depth = %d (%d)"
+#: libcore/parser/SWFMovieDefinition.cpp:605
+msgid "More than one JPEGTABLES tag found: not resetting JPEG loader"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:421
+#: libcore/parser/SWFMovieDefinition.cpp:745
 #, c-format
-msgid "  SWFCxForm: %d"
+msgid "import error: could not find resource '%s' in movie '%s'"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:424
+#: libcore/parser/filter_factory.cpp:54
 #, c-format
-msgid "  class name = %s"
+msgid "   number of filters: %d"
 msgstr ""
 
-#: libcore/swf/PlaceObject2Tag.cpp:427
-msgid "   bitmapCaching enabled"
+#: libcore/parser/filter_factory.cpp:92
+#, c-format
+msgid "Invalid filter type %d."
 msgstr ""
 
-#: libcore/swf/SoundStreamHeadTag.cpp:76
+#: libcore/parser/filter_factory.cpp:102
 #, c-format
-msgid "SOUNDSTREAMHEAD: stream sample rate %d (expected 0 to %u)"
+msgid "Filter %d could not read."
 msgstr ""
 
-#: libcore/swf/SoundStreamHeadTag.cpp:86
+#: libcore/parser/filter_factory.cpp:134
 #, c-format
-msgid ""
-"Different stream/playback sound rate (%d/%d). This seems common in SWF "
-"files, so we'll warn only once."
+msgid "   DropShadowFilter: blurX=%f blurY=%f"
 msgstr ""
 
-#: libcore/swf/SoundStreamHeadTag.cpp:93
+#: libcore/parser/filter_factory.cpp:153
 #, c-format
-msgid ""
-"Different stream/playback sample size (%d/%d). This seems common in SWF "
-"files, so we'll warn only once."
+msgid "   BlurFilter: blurX=%f blurY=%f quality=%d"
 msgstr ""
 
-#: libcore/swf/SoundStreamHeadTag.cpp:99
-#, c-format
-msgid ""
-"Different stream/playback channels (%s/%s). This seems common in SWF files, "
-"so we'll warn only once."
+#: libcore/parser/filter_factory.cpp:180
+msgid "   GlowFilter "
 msgstr ""
 
-#: libcore/swf/SoundStreamHeadTag.cpp:119
-msgid ""
-"No samples advertised for sound stream, pretty common so will warn only once"
+#: libcore/parser/filter_factory.cpp:218
+msgid "   BevelFilter "
 msgstr ""
 
-#: libcore/swf/SoundStreamHeadTag.cpp:146
-#, c-format
-msgid ""
-"sound stream head: format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, latency=%d"
+#: libcore/parser/filter_factory.cpp:265
+msgid "   GradientGlowFilter "
 msgstr ""
 
-#: libcore/swf/DefineButtonCxformTag.cpp:49
-#, c-format
-msgid "DefineButtonCxform refers to an unknown DisplayObject %d"
+#: libcore/parser/filter_factory.cpp:301
+msgid "   ConvolutionFilter "
 msgstr ""
 
-#: libcore/swf/DefineButtonCxformTag.cpp:60
-#, c-format
-msgid ""
-"DefineButtonCxform refers to DisplayObject ID %d (%s). Expected a button "
-"definition"
+#: libcore/parser/filter_factory.cpp:318
+msgid "   ColorMatrixFilter: "
 msgstr ""
 
-#: libcore/swf/RemoveObjectTag.cpp:71
+#: libcore/parser/filter_factory.cpp:319 libcore/parser/filter_factory.cpp:322
+#: libcore/parser/filter_factory.cpp:325 libcore/parser/filter_factory.cpp:328
 #, c-format
-msgid "  remove_object_2(%d)"
+msgid "     %g, %g, %g, %g, %g"
 msgstr ""
 
-#: libcore/swf/StreamSoundBlockTag.cpp:75
-msgid "Found SOUNDSTREAMBLOCK tag w/out preceding SOUNDSTREAMHEAD"
+#: libcore/parser/filter_factory.cpp:375
+msgid "   GradientBevelFilter "
 msgstr ""
 
-#: libcore/swf/StreamSoundBlockTag.cpp:111
-msgid "Tag boundary reported past end of stream!"
+#: libcore/parser/action_buffer.cpp:57
+#, c-format
+msgid "Empty action buffer starting at offset %lu"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:85
+#: libcore/parser/action_buffer.cpp:94
 #, c-format
-msgid "  DefineButton loader: character id = %d"
+msgid "Action buffer starting at offset %lu doesn't end with an END tag"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:102
-#, c-format
-msgid "  DefineButton2 loader: chararacter id = %d"
+#: libcore/parser/action_buffer.cpp:132
+msgid "action buffer dict length exceeded"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:134
-msgid "Premature end of DEFINEBUTTON tag, won't read actions"
+#: libcore/parser/action_buffer.cpp:537 libcore/SWFStream.cpp:285
+msgid "Native floating point format not recognised"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:170
-#, c-format
-msgid "Next Button2 actionOffset (%u) points past the end of tag (%lu)"
+#: libcore/parser/action_buffer.cpp:614
+msgid "Native double floating point format not recognised"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:211
-#, c-format
+#: libcore/Font.cpp:130
 msgid ""
-"Next action offset (%u) in Button2ActionConditions points past the end of tag"
+"Attempt to set font display or copyright name again. This should mean there "
+"is more than one DefineFontName tag referring to the same Font. Don't know "
+"what to do in this case, so ignoring."
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:279
-msgid "Premature end of button action input: can't read conditions"
+#: libcore/Font.cpp:167
+msgid ""
+"Attempt to add an embedded glyph CodeTable to a font that already has one. "
+"This should mean there are several DefineFontInfo tags, or a DefineFontInfo "
+"tag refers to a font created by DefineFont2 or DefineFont3. Don't know what "
+"should happen in this case, so ignoring."
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:289
+#: libcore/Font.cpp:201
 #, c-format
-msgid "   button actions for conditions 0x%x"
+msgid "Failed to find glyph %s in %s font %s"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:362
-msgid "   premature end of button record input stream, can't read flags"
+#: libcore/Font.cpp:276
+msgid "Device font provider was not initialized, can't get unitsPerEM"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:383
+#: libcore/Font.cpp:298
+#, c-format
 msgid ""
-"   premature end of button record input stream, can't read DisplayObject id"
+"Could not create shape glyph for DisplayObject code %u (%c) with device font "
+"%s (%p)"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:398
-#, c-format
+#: libcore/Font.cpp:332
 msgid ""
-"   button record for states [%s] refer to DisplayObject with id %d, which is "
-"not found in the chars dictionary"
+"No name associated with this font, can't use device fonts (should I use a "
+"default one?)"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:405
+#: libcore/Font.cpp:340
 #, c-format
-msgid "   button record for states [%s] contain DisplayObject %d (%s)"
+msgid "Could not create a freetype face %s"
 msgstr ""
 
-#: libcore/swf/DefineButtonTag.cpp:413
-msgid ""
-"   premature end of button record input stream, can't read button layer "
-"(depth?)"
+#: libcore/TextField.cpp:236
+#, c-format
+msgid "FIXME: attempt to remove a TextField being a child of a %s"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:154
-msgid "  jpeg_tables_loader"
+#: libcore/TextField.cpp:415 libcore/TextField.cpp:425
+#: libcore/TextField.cpp:443 libcore/TextField.cpp:458
+msgid "invalid restrict string"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:165
+#: libcore/TextField.cpp:967
 #, c-format
-msgid "No bytes to read in JPEGTABLES tag at offset %d"
+msgid ""
+"TextField: missing glyph for space char (needed for TAB). Make sure "
+"DisplayObject shapes for font %s are being exported into your SWF file."
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:206
+#: libcore/TextField.cpp:1046
+msgid "No font for TextField!"
+msgstr ""
+
+#: libcore/TextField.cpp:1446
 #, c-format
-msgid "DEFINEBITS: Duplicate id (%d) for bitmap DisplayObject - discarding it"
+msgid "Unexpected value '%s' in TextField font color attribute"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:235
-msgid "Failed to parse bitmap for character %1%"
+#: libcore/TextField.cpp:1461
+msgid "Expected a font name in FACE attribute."
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:243
-msgid "No renderer, not adding bitmap %1%"
+#: libcore/TextField.cpp:1515
+msgid "<img> HTML tag in TextField"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:250
-msgid "Adding bitmap id %1%"
+#: libcore/TextField.cpp:1553
+msgid "<span> HTML tag in TextField"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:269
-msgid ""
-"DEFINEBITS: No jpeg loader registered in movie definition - discarding bitmap"
+#: libcore/TextField.cpp:1625
+msgid "HTML <textformat> tag tabstops attribute"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:374
-msgid "gnash is not linked to zlib -- can't load jpeg3 image data"
+#: libcore/TextField.cpp:1708
+#, c-format
+msgid ""
+"TextField: missing embedded glyph for char %d. Make sure DisplayObject "
+"shapes for font %s are being exported into your SWF file"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:419
+#: libcore/TextField.cpp:1716
 #, c-format
-msgid "  defbitslossless2: tag = %d, fmt = %d, w = %d, h = %d"
+msgid ""
+"TextField: missing device glyph for char %d. Maybe you don't have font '%s' "
+"installed in your system."
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:426
-msgid "Bitmap has a height or width of 0"
+#: libcore/TextField.cpp:1907
+#, c-format
+msgid ""
+"Current environment has no target, can't bind VariableName (%s) associated "
+"to text field. Gnash will try to register again on next access."
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:432
-msgid "gnash is not linked to zlib -- can't load zipped image data"
+#: libcore/TextField.cpp:1933
+#, c-format
+msgid ""
+"VariableName associated to text field refers to an unknown target (%s). It "
+"is possible that the DisplayObject will be instantiated later in the SWF "
+"stream. Gnash will try to register again on next access."
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:458
-msgid "Will not allocate %1%x%2% image in DefineBitsLossless tag"
+#: libcore/TextField.cpp:2026 libcore/TextField.cpp:2060
+#: libcore/TextField.cpp:2151
+msgid "invalid HTML tag"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:483
-msgid "Unknown bitmap format. Ignoring"
+#: libcore/TextField.cpp:2037 libcore/TextField.cpp:2073
+#: libcore/TextField.cpp:2104
+msgid "found NULL character in htmlText"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:597
-#, c-format
-msgid "inflateWrapper() inflateInit() returned %d (%s)"
+#: libcore/TextField.cpp:2077
+msgid "malformed HTML tag, invalid attribute name"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:617
-msgid "inflateWrapper(): no end of zstream found within swf tag boundaries"
+#: libcore/TextField.cpp:2127
+msgid "malformed HTML tag, invalid attribute value"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:640
-#, c-format
-msgid "inflateWrapper() inflate() returned %d (%s)"
+#: libcore/TextField.cpp:2160
+msgid "I declare this a HTML syntax error"
 msgstr ""
 
-#: libcore/swf/DefineBitsTag.cpp:649
-#, c-format
-msgid "inflateWrapper() inflateEnd() return %d (%s)"
+#: libcore/Video.cpp:57
+msgid "No Media handler registered, won't be able to decode embedded video"
 msgstr ""
 
-#: libcore/LoadVariablesThread.cpp:74
+#: libcore/Video.cpp:69
 #, c-format
-msgid "%s to UTF8 conversion in MovieClip.loadVariables input parsing"
+msgid "Could not create Video Decoder: %s"
 msgstr ""
 
-#: libcore/LoadVariablesThread.cpp:123
-#, c-format
-msgid "Stream couldn't seek to end: %s"
+#: libcore/Video.cpp:138
+msgid "No Video info in video definition"
 msgstr ""
 
-#: libcore/LoadVariablesThread.cpp:128
+#: libcore/asobj/Selection_as.cpp:189
 #, c-format
-msgid ""
-"Size of 'variables' stream advertised to be %d bytes, but turned out to be "
-"%d bytes."
+msgid "Selection.setFocus: expected 1 argument, got %d"
 msgstr ""
 
-#: libcore/SWFStream.cpp:285 libcore/parser/action_buffer.cpp:537
-msgid "Native floating point format not recognised"
+#: libcore/asobj/Array_as.cpp:631
+#, c-format
+msgid "Unhandled sort flags: %d (0x%X)"
 msgstr ""
 
-#: libcore/SWFStream.cpp:302 libcore/SWFStream.cpp:320
-#: libcore/SWFStream.cpp:353 libcore/SWFStream.cpp:384
-#: libcore/parser/SWFParser.cpp:151
-msgid "Unexpected end of stream while reading"
+#: libcore/asobj/Array_as.cpp:1036
+msgid "Array.splice() needs at least 1 argument, call ignored"
 msgstr ""
 
-#: libcore/SWFStream.cpp:475
-msgid "Attempt to seek past the end of an opened tag"
+#: libcore/asobj/Array_as.cpp:1059
+#, c-format
+msgid "Array.splice(%d,%d): negative length given, call ignored"
 msgstr ""
 
-#: libcore/SWFStream.cpp:483
-msgid "Attempt to seek before start of an opened tag"
+#: libcore/asobj/Array_as.cpp:1157
+msgid "Sort called with invalid arguments."
 msgstr ""
 
-#: libcore/SWFStream.cpp:496
-msgid "Unexpected end of stream"
+#: libcore/asobj/Array_as.cpp:1301
+msgid "SortOn called with invalid arguments."
 msgstr ""
 
-#: libcore/SWFStream.cpp:564
-#, c-format
+#: libcore/asobj/Array_as.cpp:1491
 msgid ""
-"Tag %d starting at offset %d is advertised to end at offset %d, which is "
-"after end of previously opened tag starting at offset %d and ending at "
-"offset %d. Making it end where container tag ends."
+"More than 2 arguments to Array.slice, and I don't know what to do with "
+"them.  Ignoring them"
 msgstr ""
 
-#: libcore/SWFStream.cpp:581
-#, c-format
-msgid "SWF[%lu]: tag type = %d, tag length = %d, end tag = %lu"
+#: libcore/asobj/TextSnapshot_as.cpp:521
+msgid "TextSnapshot.findText() requires 3 arguments"
 msgstr ""
 
-#: libcore/SWFStream.cpp:602
-msgid "Could not seek to reported end of tag"
+#: libcore/asobj/TextSnapshot_as.cpp:545
+msgid "TextSnapshot.getCount() takes no arguments"
 msgstr ""
 
-#: libcore/SWFStream.cpp:617
-#, c-format
-msgid "SWFStream::consumeInput: underlying stream couldn't go_to_end: %s"
+#: libcore/asobj/TextSnapshot_as.cpp:601
+msgid "TextSnapshot.getText requires exactly 2 arguments"
 msgstr ""
 
-#: libcore/RGBA.cpp:47
-msgid "Failed to convert string to RGBA value! This is a Gnash bug"
+#: libcore/asobj/XMLNode_as.cpp:240
+msgid ""
+"XMLNode.insertBefore(): positional parameter is not a child of this node"
 msgstr ""
 
-#: libcore/Font.cpp:130
-msgid ""
-"Attempt to set font display or copyright name again. This should mean there "
-"is more than one DefineFontName tag referring to the same Font. Don't know "
-"what to do in this case, so ignoring."
+#: libcore/asobj/XMLNode_as.cpp:616
+msgid "XMLNode::appendChild() needs at least one argument"
 msgstr ""
 
-#: libcore/Font.cpp:167
-msgid ""
-"Attempt to add an embedded glyph CodeTable to a font that already has one. "
-"This should mean there are several DefineFontInfo tags, or a DefineFontInfo "
-"tag refers to a font created by DefineFont2 or DefineFont3. Don't know what "
-"should happen in this case, so ignoring."
+#: libcore/asobj/XMLNode_as.cpp:625
+msgid "First argument to XMLNode::appendChild() is not an XMLNode"
 msgstr ""
 
-#: libcore/Font.cpp:201
+#: libcore/asobj/XMLNode_as.cpp:663
 #, c-format
-msgid "Failed to find glyph %s in %s font %s"
+msgid "XMLNode.insertBefore(%s) needs at least two arguments"
 msgstr ""
 
-#: libcore/Font.cpp:276
-msgid "Device font provider was not initialized, can't get unitsPerEM"
+#: libcore/asobj/XMLNode_as.cpp:674
+#, c-format
+msgid "First argument to XMLNode.insertBefore(%s) is not an XMLNode"
 msgstr ""
 
-#: libcore/Font.cpp:298
+#: libcore/asobj/XMLNode_as.cpp:685
 #, c-format
-msgid ""
-"Could not create shape glyph for DisplayObject code %u (%c) with device font "
-"%s (%p)"
+msgid "Second argument to XMLNode.insertBefore(%s) is not an XMLNode"
 msgstr ""
 
-#: libcore/Font.cpp:332
-msgid ""
-"No name associated with this font, can't use device fonts (should I use a "
-"default one?)"
+#: libcore/asobj/String_as.cpp:451
+msgid "string.slice() called with end < start"
 msgstr ""
 
-#: libcore/Font.cpp:340
+#: libcore/asobj/String_as.cpp:496
 #, c-format
-msgid "Could not create a freetype face %s"
+msgid "String.indexOf(%s, %s): second argument casts to invalid offset (%d)"
 msgstr ""
 
-#: libcore/asobj/Stage_as.cpp:146
-msgid "Stage.width is a read-only property!"
+#: libcore/asobj/String_as.cpp:569
+msgid "string.charCodeAt needs one argument"
 msgstr ""
 
-#: libcore/asobj/Stage_as.cpp:163
-msgid "Stage.height is a read-only property!"
+#: libcore/asobj/String_as.cpp:578
+msgid "string.charCodeAt has more than one argument"
 msgstr ""
 
-#: libcore/asobj/Stage_as.cpp:202
-msgid "Stage.showMenu implemented by setting gnashrc option and for gtk only"
+#: libcore/asobj/String_as.cpp:756
+msgid "No fn_call::callerDef in string function call"
 msgstr ""
 
-#: libcore/asobj/Video_as.cpp:114
-msgid "attachVideo needs 1 arg"
+#: libcore/asobj/String_as.cpp:780
+msgid "%1%(%2%) needs %3% argument(s)"
 msgstr ""
 
-#: libcore/asobj/Video_as.cpp:126
-#, c-format
-msgid "attachVideo(%s) first arg is not a NetStream instance"
+#: libcore/asobj/String_as.cpp:791
+msgid "%1%(%2%) has more than %3% argument(s)"
 msgstr ""
 
-#: libcore/asobj/Video_as.cpp:139
-msgid "Video.deblocking"
+#: libcore/asobj/Object.cpp:148
+msgid "Too many args to Object constructor"
 msgstr ""
 
-#: libcore/asobj/TextField_as.cpp:218
+#: libcore/asobj/Object.cpp:192
 #, c-format
-msgid "createTextField called with %d args, expected 6 - returning undefined"
+msgid ""
+"Invalid call to Object.addProperty(%s) - expected 3 arguments (<name>, "
+"<getter>, <setter>)"
 msgstr ""
 
-#: libcore/asobj/TextField_as.cpp:232
-#, c-format
-msgid "createTextField: negative width (%d) - reverting sign"
+#: libcore/asobj/Object.cpp:209
+msgid "Invalid call to Object.addProperty() - empty property name"
 msgstr ""
 
-#: libcore/asobj/TextField_as.cpp:242
-#, c-format
-msgid "createTextField: negative height (%d) - reverting sign"
+#: libcore/asobj/Object.cpp:219
+msgid "Invalid call to Object.addProperty() - getter is not an AS function"
 msgstr ""
 
-#: libcore/asobj/TextField_as.cpp:436
+#: libcore/asobj/Object.cpp:233
+#, c-format
+msgid ""
+"Invalid call to Object.addProperty() - setter is not null and not an AS "
+"function (%s)"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:257
+#, c-format
+msgid ""
+"Invalid call to Object.registerClass(%s) - expected 2 arguments (<symbol>, "
+"<constructor>)"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:274
+#, c-format
+msgid ""
+"Invalid call to Object.registerClass(%s) - first argument (symbol id) "
+"evaluates to empty string"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:286
+#, c-format
+msgid ""
+"Invalid call to Object.registerClass(%s) - second argument (class) is not a "
+"function)"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:298
+msgid ""
+"current environment has no target, wouldn't know where to look for symbol "
+"required for registerClass"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:313
+#, c-format
+msgid "Object.registerClass('%s', %s): can't find exported symbol (id: %d)"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:326
+#, c-format
+msgid ""
+"Object.registerClass(%s, %s): exported symbol is not a MovieClip symbol "
+"(sprite_definition), but a %s"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:348
+msgid "Object.hasOwnProperty() requires one arg"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:357
+#, c-format
+msgid "Invalid call to Object.hasOwnProperty('%s')"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:373
+msgid "Object.isPropertyEnumerable() requires one arg"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:382
+#, c-format
+msgid "Invalid call to Object.isPropertyEnumerable('%s')"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:405
+msgid "Object.isPrototypeOf() requires one arg"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:413
+#, c-format
+msgid "First arg to Object.isPrototypeOf(%s) is not an object"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:432
+#, c-format
+msgid "Object.watch(%s): missing arguments"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:443
+#, c-format
+msgid "Object.watch(%s): second argument is not a function"
+msgstr ""
+
+#: libcore/asobj/Object.cpp:469
+#, c-format
+msgid "Object.unwatch(%s): missing argument"
+msgstr ""
+
+#: libcore/asobj/LoadVars_as.cpp:145
+#, c-format
+msgid "new LoadVars(%s) - arguments discarded"
+msgstr ""
+
+#: libcore/asobj/TextFormat_as.cpp:408
+#, c-format
+msgid "Too many args (%d) passed to TextFormat"
+msgstr ""
+
+#: libcore/asobj/TextFormat_as.cpp:486
+msgid "Getter for textformat_tabStops"
+msgstr ""
+
+#: libcore/asobj/TextFormat_as.cpp:564
+msgid "TextFormat.getTextExtent requires at least one argument"
+msgstr ""
+
+#: libcore/asobj/TextFormat_as.cpp:776
+#, c-format
+msgid "Uknown alignment value: %d, take as left"
+msgstr ""
+
+#: libcore/asobj/TextFormat_as.cpp:791
+#, c-format
+msgid "Unknown display value: %d "
+msgstr ""
+
+#: libcore/asobj/TextField_as.cpp:218
+#, c-format
+msgid "createTextField called with %d args, expected 6 - returning undefined"
+msgstr ""
+
+#: libcore/asobj/TextField_as.cpp:232
+#, c-format
+msgid "createTextField: negative width (%d) - reverting sign"
+msgstr ""
+
+#: libcore/asobj/TextField_as.cpp:242
+#, c-format
+msgid "createTextField: negative height (%d) - reverting sign"
+msgstr ""
+
+#: libcore/asobj/TextField_as.cpp:436
 #, c-format
 msgid "Attempt to set length property of TextField %s"
 msgstr ""
@@ -2855,153 +2945,150 @@ msgid ""
 "TextField.replaceText(%s): endIndex out of range - taking as end of string"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:440
+#: libcore/asobj/Sound_as.cpp:431
 #, c-format
-msgid "Gnash is not allowed to open this URL: %s"
+msgid "Could not create audio decoder: %s"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:496
-#, c-format
-msgid "Gnash is not allowed to connect to %s"
+#: libcore/asobj/Sound_as.cpp:439
+msgid "No audio in Sound input."
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:517
+#: libcore/asobj/Sound_as.cpp:593
 #, c-format
-msgid "NetConnection.connect(%s): unsupported connection protocol"
+msgid "Gnash could not open this URL: %s"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:523
+#: libcore/asobj/Sound_as.cpp:604
 #, c-format
-msgid "NetConnection.connect(%s): unknown connection protocol"
+msgid "Unable to create parser for Sound at %s"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:569
-msgid "NetConnection.call: can't call while not connected"
+#: libcore/asobj/Sound_as.cpp:694
+msgid "No sound handler, nothing to start..."
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:658
-msgid "NetConnection.call(): needs at least one argument"
+#: libcore/asobj/Sound_as.cpp:701
+msgid "No MediaParser initialized, can't start an external sound"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:681
-#, c-format
-msgid "NetConnection.call(%s): second argument must be an object"
+#: libcore/asobj/Sound_as.cpp:707
+msgid "Sound.start() has no effect on a streaming Sound"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:771
-msgid "NetConnection.connect(): needs at least one argument"
+#: libcore/asobj/Sound_as.cpp:755
+msgid "No sound handler, nothing to stop..."
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:793
-#, c-format
-msgid "NetConnection.connect(%s): args after the first are not supported"
+#: libcore/asobj/Sound_as.cpp:785
+msgid "No sound handler, can't check duration..."
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:808
-msgid "NetConnection.addHeader()"
+#: libcore/asobj/Sound_as.cpp:810
+msgid ""
+"No sound handler, can't check position (we're likely not playing anyway)..."
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:892
-msgid "Invoke buffer too short"
+#: libcore/asobj/Sound_as.cpp:878
+#, c-format
+msgid "No samples decoded from input of %d bytes"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:899
-msgid "Invoke argument not present"
+#: libcore/asobj/Sound_as.cpp:979
+#, c-format
+msgid "new Sound(%d) : args after first one ignored"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:990
+#: libcore/asobj/Sound_as.cpp:993
 #, c-format
-msgid "Unknown HTTP Remoting response identifier '%s'"
+msgid ""
+"new Sound(%s) : first argument isn't null or undefined, and isn't a "
+"DisplayObject. We'll take as an invalid DisplayObject ref."
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:1006
-#, c-format
-msgid "Unsupported HTTP Remoting response callback: '%s' (size %d)"
+#: libcore/asobj/Sound_as.cpp:1011
+msgid "-- start sound"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:1155
-#, c-format
-msgid "Error parsing server AMF: %s"
+#: libcore/asobj/Sound_as.cpp:1033
+msgid "-- stop sound "
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:1202
+#: libcore/asobj/Sound_as.cpp:1049 libcore/asobj/Sound_as.cpp:1104
 #, c-format
-msgid "Could not serialize NetConnection.call argument %d"
+msgid "No such export '%s'"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:1230
-msgid "Sanity failed. no string method in invoke packet"
+#: libcore/asobj/Sound_as.cpp:1058
+#, c-format
+msgid "Export '%s' is not a sound"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:1277
-msgid "Server called _onbwcheck without a callback"
+#: libcore/asobj/Sound_as.cpp:1074
+msgid "-- attach sound"
 msgstr ""
 
-#: libcore/asobj/NetConnection_as.cpp:1307
-msgid "RTMP server sent error"
+#: libcore/asobj/Sound_as.cpp:1079
+msgid "attach sound needs one argument"
 msgstr ""
 
-#: libcore/asobj/Function_as.cpp:105
-msgid "Function.apply() called with no args"
+#: libcore/asobj/Sound_as.cpp:1089
+msgid "attachSound needs a non-empty string"
 msgstr ""
 
-#: libcore/asobj/Function_as.cpp:129
+#: libcore/asobj/Sound_as.cpp:1113
 #, c-format
-msgid ""
-"Function.apply() got %d args, expected at most 2 -- discarding the ones in "
-"excess"
+msgid "Export '%s'is not a sound"
 msgstr ""
 
-#: libcore/asobj/Array_as.cpp:535
-#, c-format
-msgid "Unhandled sort flags: %d (0x%X)"
+#: libcore/asobj/Sound_as.cpp:1148
+msgid "Sound.getPan()"
 msgstr ""
 
-#: libcore/asobj/Array_as.cpp:934
-msgid "Array.splice() needs at least 1 argument, call ignored"
+#: libcore/asobj/Sound_as.cpp:1163
+msgid "Sound.setDuration()"
 msgstr ""
 
-#: libcore/asobj/Array_as.cpp:957
-#, c-format
-msgid "Array.splice(%d,%d): negative length given, call ignored"
+#: libcore/asobj/Sound_as.cpp:1178
+msgid "Sound.setPosition()"
 msgstr ""
 
-#: libcore/asobj/Array_as.cpp:1055
-msgid "Sort called with invalid arguments."
+#: libcore/asobj/Sound_as.cpp:1185
+msgid "Sound.getTransform()"
 msgstr ""
 
-#: libcore/asobj/Array_as.cpp:1199
-msgid "SortOn called with invalid arguments."
+#: libcore/asobj/Sound_as.cpp:1198
+#, c-format
+msgid "Sound.getVolume(%s) : arguments ignored"
 msgstr ""
 
-#: libcore/asobj/Array_as.cpp:1389
-msgid ""
-"More than 2 arguments to Array.slice, and I don't know what to do with "
-"them.  Ignoring them"
+#: libcore/asobj/Sound_as.cpp:1214
+msgid "Sound.loadSound() needs at least 1 argument"
 msgstr ""
 
-#: libcore/asobj/System_as.cpp:310
-msgid "System.security.allowDomain"
+#: libcore/asobj/Sound_as.cpp:1229
+#, c-format
+msgid "Sound.loadSound(%s): arguments after first 2 discarded"
 msgstr ""
 
-#: libcore/asobj/System_as.cpp:321
-msgid "System.security.allowInsecureDomain"
+#: libcore/asobj/Sound_as.cpp:1243
+msgid "Sound.setPan()"
 msgstr ""
 
-#: libcore/asobj/System_as.cpp:329
-msgid "System.security.loadPolicyFile"
+#: libcore/asobj/Sound_as.cpp:1250
+msgid "Sound.setTransform()"
 msgstr ""
 
-#: libcore/asobj/System_as.cpp:350
-msgid "System.showSettings"
+#: libcore/asobj/Sound_as.cpp:1259
+msgid "set volume of sound needs one argument"
 msgstr ""
 
-#: libcore/asobj/System_as.cpp:367
-msgid "System.exactSettings"
+#: libcore/asobj/Sound_as.cpp:1274
+msgid "Sound.checkPolicyFile"
 msgstr ""
 
-#: libcore/asobj/System_as.cpp:385
-msgid "System.useCodepage"
+#: libcore/asobj/Sound_as.cpp:1287
+msgid "Sound.areSoundsInaccessible()"
 msgstr ""
 
 #: libcore/asobj/Key_as.cpp:40
@@ -3021,1371 +3108,1337 @@ msgstr ""
 msgid "Key.isToggled"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:148
-msgid "Too many args to Object constructor"
+#: libcore/asobj/XML_as.cpp:467
+msgid "XML data is empty"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:192
-#, c-format
-msgid ""
-"Invalid call to Object.addProperty(%s) - expected 3 arguments (<name>, "
-"<getter>, <setter>)"
+#: libcore/asobj/XML_as.cpp:742
+msgid "no text for text node creation"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:209
-msgid "Invalid call to Object.addProperty() - empty property name"
+#: libcore/asobj/XML_as.cpp:755
+msgid "XML.parseXML() needs one argument"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:219
-msgid "Invalid call to Object.addProperty() - getter is not an AS function"
+#: libcore/asobj/AsBroadcaster.cpp:233
+msgid "AsBroadcaster.initialize() requires one argument, none given"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:233
+#: libcore/asobj/AsBroadcaster.cpp:243
 #, c-format
-msgid ""
-"Invalid call to Object.addProperty() - setter is not null and not an AS "
-"function (%s)"
+msgid "AsBroadcaster.initialize(%s): first arg is not an object"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:257
+#: libcore/asobj/AsBroadcaster.cpp:252
 #, c-format
 msgid ""
-"Invalid call to Object.registerClass(%s) - expected 2 arguments (<symbol>, "
-"<constructor>)"
+"AsBroadcaster.initialize(%s): first arg is an object but doesn't cast to one "
+"(dangling DisplayObject ref?)"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:274
+#: libcore/asobj/AsBroadcaster.cpp:282 libcore/asobj/AsBroadcaster.cpp:327
+#: libcore/asobj/AsBroadcaster.cpp:393
 #, c-format
-msgid ""
-"Invalid call to Object.registerClass(%s) - first argument (symbol id) "
-"evaluates to empty string"
+msgid "%p.addListener(%s): this object has no _listeners member"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:286
+#: libcore/asobj/AsBroadcaster.cpp:293 libcore/asobj/AsBroadcaster.cpp:338
+#: libcore/asobj/AsBroadcaster.cpp:404
 #, c-format
-msgid ""
-"Invalid call to Object.registerClass(%s) - second argument (class) is not a "
-"function)"
-msgstr ""
-
-#: libcore/asobj/Object.cpp:298
-msgid ""
-"current environment has no target, wouldn't know where to look for symbol "
-"required for registerClass"
+msgid "%p.addListener(%s): this object's _listener isn't an object: %s"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:313
+#: libcore/asobj/AsBroadcaster.cpp:415
 #, c-format
-msgid "Object.registerClass('%s', %s): can't find exported symbol (id: %d)"
+msgid "%p.broadcastMessage() needs an argument"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:326
+#: libcore/asobj/MovieClipLoader.cpp:105
 #, c-format
-msgid ""
-"Object.registerClass(%s, %s): exported symbol is not a MovieClip symbol "
-"(sprite_definition), but a %s"
+msgid "MovieClipLoader.loadClip(%s): missing arguments"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:348
-msgid "Object.hasOwnProperty() requires one arg"
+#: libcore/asobj/MovieClipLoader.cpp:114
+#, c-format
+msgid "MovieClipLoader.loadClip(%s): first argument must be a string"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:357
+#: libcore/asobj/MovieClipLoader.cpp:132
 #, c-format
-msgid "Invalid call to Object.hasOwnProperty('%s')"
+msgid "Could not find target %s (evaluated from %s)"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:373
-msgid "Object.isPropertyEnumerable() requires one arg"
+#: libcore/asobj/MovieClipLoader.cpp:149
+#, c-format
+msgid "MovieClipLoader.unloadClip(%s): expected at least one argument"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:382
+#: libcore/asobj/MovieClipLoader.cpp:156
 #, c-format
-msgid "Invalid call to Object.isPropertyEnumerable('%s')"
+msgid "MovieClipLoader.unloadClip: %s"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:405
-msgid "Object.isPrototypeOf() requires one arg"
+#: libcore/asobj/MovieClipLoader.cpp:180
+msgid "MovieClipLoader.getProgress(): missing argument"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:413
+#: libcore/asobj/MovieClipLoader.cpp:189
 #, c-format
-msgid "First arg to Object.isPrototypeOf(%s) is not an object"
+msgid "MovieClipLoader.getProgress(%s): first argument is not an object"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:432
+#: libcore/asobj/MovieClipLoader.cpp:198
 #, c-format
-msgid "Object.watch(%s): missing arguments"
+msgid "MovieClipLoader.getProgress(%s): first argument is not an sprite"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:443
-#, c-format
-msgid "Object.watch(%s): second argument is not a function"
+#: libcore/asobj/Stage_as.cpp:146
+msgid "Stage.width is a read-only property!"
 msgstr ""
 
-#: libcore/asobj/Object.cpp:469
-#, c-format
-msgid "Object.unwatch(%s): missing argument"
+#: libcore/asobj/Stage_as.cpp:163
+msgid "Stage.height is a read-only property!"
 msgstr ""
 
-#: libcore/asobj/String_as.cpp:451
-msgid "string.slice() called with end < start"
+#: libcore/asobj/Stage_as.cpp:202
+msgid "Stage.showMenu implemented by setting gnashrc option and for gtk only"
 msgstr ""
 
-#: libcore/asobj/String_as.cpp:496
-#, c-format
-msgid "String.indexOf(%s, %s): second argument casts to invalid offset (%d)"
+#: libcore/asobj/Color_as.cpp:153
+msgid "Color.setRGB() : missing argument"
 msgstr ""
 
-#: libcore/asobj/String_as.cpp:569
-msgid "string.charCodeAt needs one argument"
+#: libcore/asobj/Color_as.cpp:186
+msgid "Color.setTransform() : missing argument"
 msgstr ""
 
-#: libcore/asobj/String_as.cpp:578
-msgid "string.charCodeAt has more than one argument"
+#: libcore/asobj/Color_as.cpp:196
+#, c-format
+msgid "Color.setTransform(%s) : first argument doesn't cast to an object"
 msgstr ""
 
-#: libcore/asobj/String_as.cpp:756
-msgid "No fn_call::callerDef in string function call"
+#: libcore/asobj/Number_as.cpp:78
+#, c-format
+msgid "Number.toString(%s): radix must be in the 2..36 range (%d is invalid)"
 msgstr ""
 
-#: libcore/asobj/String_as.cpp:780
-msgid "%1%(%2%) needs %3% argument(s)"
+#: libcore/asobj/Microphone_as.cpp:252
+msgid "No MediaHandler exists! Cannot create a Microphone object"
 msgstr ""
 
-#: libcore/asobj/String_as.cpp:791
-msgid "%1%(%2%) has more than %3% argument(s)"
+#: libcore/asobj/Microphone_as.cpp:284
+msgid "Microphone.gain(): wrong number of parameters passed"
 msgstr ""
 
-#: libcore/asobj/flash/external/ExternalInterface_as.cpp:292
-#, c-format
-msgid "VAL: %s"
+#: libcore/asobj/Microphone_as.cpp:300
+msgid "Microphone.setRate: wrong number of parameters passed"
 msgstr ""
 
-#: libcore/asobj/flash/external/ExternalInterface_as.cpp:343
-#, c-format
-msgid ""
-"ExternalInterface path %s is outside the SWF domain %s. Cannot access this "
-"object."
+#: libcore/asobj/Microphone_as.cpp:313
+msgid "Microphone::activityLevel only has default value (-1)"
 msgstr ""
 
-#: libcore/asobj/flash/net/FileReferenceList_as.cpp:91
-#, c-format
-msgid "FileReferenceList(%s): %s"
+#: libcore/asobj/Microphone_as.cpp:318
+msgid "Attempt to set activity property of Microphone"
 msgstr ""
 
-#: libcore/asobj/flash/net/FileReferenceList_as.cpp:92
-#: libcore/asobj/flash/net/FileReference_as.cpp:160
-#: libcore/asobj/flash/geom/Transform_as.cpp:357
-msgid "arguments discarded"
+#: libcore/asobj/Microphone_as.cpp:353
+msgid "Microphone::muted is always false (always allows access)"
 msgstr ""
 
-#: libcore/asobj/flash/net/FileReference_as.cpp:159
-#, c-format
-msgid "FileReference(%s): %s"
+#: libcore/asobj/Microphone_as.cpp:413
+msgid "Microphone::silenceTimeout can be set, but is unimplemented"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:153
+#: libcore/asobj/Microphone_as.cpp:436
 #, c-format
-msgid "flash.geom.Rectangle(%s): %s"
+msgid "%s: Too many arguments"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:154
-#: libcore/asobj/flash/geom/Point_as.cpp:427
-#: libcore/asobj/flash/geom/Point_as.cpp:511
-#: libcore/asobj/flash/geom/Point_as.cpp:596
-#: libcore/asobj/flash/geom/Point_as.cpp:604
-#: libcore/asobj/MovieClip_as.cpp:532
-msgid "missing arguments"
+#: libcore/asobj/Date_as.cpp:463
+msgid "Date constructor called with more than 7 arguments"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:471
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:545
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:603
-#: libcore/asobj/flash/geom/Matrix_as.cpp:421
-#: libcore/asobj/flash/geom/Matrix_as.cpp:747
-msgid "Failed to construct flash.geom.Point!"
+#: libcore/asobj/Date_as.cpp:724
+msgid "Date.setTime needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:483
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:557
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:616
-#: libcore/asobj/flash/geom/Point_as.cpp:411
-#, c-format
-msgid "Attempt to set read-only property %s"
+#: libcore/asobj/Date_as.cpp:744
+msgid "Date.setTime was called with more than one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:119
-#: libcore/asobj/flash/geom/Point_as.cpp:190
-#: libcore/asobj/flash/geom/Point_as.cpp:238
-#: libcore/asobj/flash/geom/Point_as.cpp:323
-#, c-format
-msgid "%s: missing arguments"
+#: libcore/asobj/Date_as.cpp:835
+msgid "Date.setFullYear needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:128
-#: libcore/asobj/flash/geom/Point_as.cpp:138
-#: libcore/asobj/flash/geom/Point_as.cpp:148
-#: libcore/asobj/flash/geom/Point_as.cpp:156
-#: libcore/asobj/flash/geom/Point_as.cpp:332
-#: libcore/asobj/flash/geom/Point_as.cpp:342
-#: libcore/asobj/flash/geom/Point_as.cpp:352
-#: libcore/asobj/flash/geom/Point_as.cpp:360
-#, c-format
-msgid "Point.add(%s): %s"
+#: libcore/asobj/Date_as.cpp:875
+msgid "Date.setYear needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:129
-#: libcore/asobj/flash/geom/Point_as.cpp:249
-#: libcore/asobj/flash/geom/Point_as.cpp:333
-msgid "arguments after first discarded"
+#: libcore/asobj/Date_as.cpp:898
+msgid "Date.setYear was called with more than three arguments"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:139
-#: libcore/asobj/flash/geom/Point_as.cpp:343
-#: libcore/asobj/flash/geom/Point_as.cpp:532
-msgid "first argument doesn't cast to object"
+#: libcore/asobj/Date_as.cpp:929
+#, c-format
+msgid "Date.set%sMonth needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:149
-msgid "first argument cast to object doesn't contain an 'x' member"
+#: libcore/asobj/Date_as.cpp:962
+#, c-format
+msgid "Date.set%sMonth was called with more than three arguments"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:157
-msgid "first argument cast to object doesn't contain an 'y' member"
+#: libcore/asobj/Date_as.cpp:984
+#, c-format
+msgid "Date.set%sDate needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:200
+#: libcore/asobj/Date_as.cpp:998
 #, c-format
-msgid "Point.equals(%s): %s"
+msgid "Date.set%sDate was called with more than one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:201
-#: libcore/asobj/flash/geom/Point_as.cpp:447
-msgid "First arg must be an object"
+#: libcore/asobj/Date_as.cpp:1025
+#, c-format
+msgid "Date.set%sHours needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:211
-#: libcore/asobj/flash/geom/Point_as.cpp:457
+#: libcore/asobj/Date_as.cpp:1044
 #, c-format
-msgid "Point.equals(%s): %s %s"
+msgid "Date.set%sHours was called with more than four arguments"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:212
-#: libcore/asobj/flash/geom/Point_as.cpp:458
-msgid "First arg must be an instance of"
+#: libcore/asobj/Date_as.cpp:1070
+#, c-format
+msgid "Date.set%sMinutes needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:248
+#: libcore/asobj/Date_as.cpp:1088 libcore/asobj/Date_as.cpp:1131
 #, c-format
-msgid "Point.normalize(%s): %s"
+msgid "Date.set%sMinutes was called with more than three arguments"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:353
-msgid "first argument casted to object doesn't contain an 'x' member"
+#: libcore/asobj/Date_as.cpp:1111
+#, c-format
+msgid "Date.set%sSeconds needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:361
-msgid "first argument casted to object doesn't contain an 'y' member"
+#: libcore/asobj/Date_as.cpp:1149
+#, c-format
+msgid "Date.set%sMilliseconds needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:426
-#: libcore/asobj/flash/geom/Point_as.cpp:436
-#: libcore/asobj/flash/geom/Point_as.cpp:446
+#: libcore/asobj/Date_as.cpp:1166
 #, c-format
-msgid "Point.distance(%s): %s"
+msgid "Date.set%sMilliseconds was called with more than one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:437
-msgid "arguments after first two discarded"
+#: libcore/asobj/Date_as.cpp:1228
+msgid "Date.UTC needs one argument"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:510
-#: libcore/asobj/flash/geom/Point_as.cpp:520
-#: libcore/asobj/flash/geom/Point_as.cpp:531
-#: libcore/asobj/flash/geom/Point_as.cpp:547
+#: libcore/asobj/Date_as.cpp:1252
+msgid "Date.UTC was called with more than 7 arguments"
+msgstr ""
+
+#: libcore/asobj/NetStream_as.cpp:315
 #, c-format
-msgid "Point.interpolate(%s): %s"
+msgid "::pause(%d) called "
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:521
-msgid "arguments after first three discarded"
+#: libcore/asobj/NetStream_as.cpp:371
+msgid "No NetConnection associated with this NetStream, won't play"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:548
-msgid "second argument doesn't cast to object"
+#: libcore/asobj/NetStream_as.cpp:382
+msgid "NetConnection is not connected. Won't play."
 msgstr ""
 
-#: libcore/asobj/flash/geom/Point_as.cpp:595
-#: libcore/asobj/flash/geom/Point_as.cpp:604
+#: libcore/asobj/NetStream_as.cpp:395
 #, c-format
-msgid "Point.polar(%s): %s"
+msgid "Couldn't load URL %s"
 msgstr ""
 
-#: libcore/asobj/flash/geom/ColorTransform_as.cpp:365
+#: libcore/asobj/NetStream_as.cpp:402
 #, c-format
-msgid ""
-"ColorTransform(%s): not enough arguments (need 8). Constructing with default "
-"values"
+msgid "Connecting to movie: %s"
 msgstr ""
 
-#: libcore/asobj/flash/geom/ColorTransform_as.cpp:380
+#: libcore/asobj/NetStream_as.cpp:408
 #, c-format
-msgid "ColorTransform(%s): discarding extra arguments"
+msgid "NetStream.play(%s): failed starting playback"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:184
-#, c-format
-msgid "Matrix.concat(%s): needs one argument"
+#: libcore/asobj/NetStream_as.cpp:431
+msgid "NetStream_as::initVideoDecoder: hot-plugging video consumer"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:198
+#: libcore/asobj/NetStream_as.cpp:436
 #, c-format
-msgid "Matrix.concat(%s): needs a Matrix object"
+msgid "NetStream: Could not create Video decoder: %s"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:255
-#, c-format
-msgid "Matrix.createBox(%s): needs at least two arguments"
+#: libcore/asobj/NetStream_as.cpp:460
+msgid "NetStream_as::initAudioDecoder: hot-plugging audio consumer"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:314
+#: libcore/asobj/NetStream_as.cpp:467
 #, c-format
-msgid "Matrix.createGradientBox(%s): needs at least two arguments"
+msgid "Could not create Audio decoder: %s"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:388
+#: libcore/asobj/NetStream_as.cpp:493
 #, c-format
-msgid "Matrix.deltaTransformPoint(%s): needs one argument"
+msgid "Gnash could not get stream '%s' from NetConnection"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:402
+#: libcore/asobj/NetStream_as.cpp:503
+msgid "No Media handler registered, can't parse NetStream input"
+msgstr ""
+
+#: libcore/asobj/NetStream_as.cpp:511
+msgid "Unable to create parser for NetStream input"
+msgstr ""
+
+#: libcore/asobj/NetStream_as.cpp:536
 #, c-format
-msgid "Matrix.deltaTransformPoint(%s): needs an object"
+msgid "%p.startPlayback: playHead position reset to 0"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:523
+#: libcore/asobj/NetStream_as.cpp:542
+msgid "Setting playStart status"
+msgstr ""
+
+#: libcore/asobj/NetStream_as.cpp:561
+msgid "getDecodedVideoFrame: no parser available"
+msgstr ""
+
+#: libcore/asobj/NetStream_as.cpp:570
 #, c-format
-msgid "Matrix.rotate(%s): needs one argument"
+msgid ""
+"getDecodedVideoFrame(%d): no more video frames in input "
+"(nextVideoFrameTimestamp returned false, parsingComplete=%d)"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:599
-#: libcore/asobj/flash/geom/Matrix_as.cpp:770
+#: libcore/asobj/NetStream_as.cpp:581
+msgid ""
+"getDecodedVideoFrame setting playStop status (parsing complete and "
+"nextVideoFrameTimestamp() returned false)"
+msgstr ""
+
+#: libcore/asobj/NetStream_as.cpp:592
 #, c-format
-msgid "Matrix.translate(%s): needs two arguments"
+msgid "%p.getDecodedVideoFrame(%d): next video frame is in the future (%d)"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:704
+#: libcore/asobj/NetStream_as.cpp:603
 #, c-format
-msgid "Matrix.translate(%s): needs one argument"
+msgid ""
+"nextVideoFrameTimestamp returned true (%d), but decodeNextVideoFrame "
+"returned null, I don't think this should ever happen"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:717
+#: libcore/asobj/NetStream_as.cpp:613
 #, c-format
-msgid "Matrix.transformPoint(%s): needs an object"
+msgid ""
+"%p.getDecodedVideoFrame(%d): last video frame decoded (should set playback "
+"status to STOP?)"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:729
+#: libcore/asobj/NetStream_as.cpp:621
 #, c-format
-msgid "Matrix.transformPoint(%s): object must be a Point"
+msgid ""
+"%p.getDecodedVideoFrame(%d): next video frame is in the future, we'll return "
+"this one"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:122
-#: libcore/asobj/flash/geom/Transform_as.cpp:198
-msgid "Failed to construct flash.geom.ColorTransform!"
+#: libcore/asobj/NetStream_as.cpp:641
+msgid "decodeNextVideoFrame: no parser available"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:145
+#: libcore/asobj/NetStream_as.cpp:648
 #, c-format
-msgid "Transform.colorTransform(%s): extra arguments discarded"
+msgid "%p.decodeNextVideoFrame(): no more video frames in input"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:155
-#, c-format
-msgid "Transform.colorTransform(%s): argument is not an object"
+#: libcore/asobj/NetStream_as.cpp:664
+msgid "Error decoding encoded video frame in NetStream input"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:170
+#: libcore/asobj/NetStream_as.cpp:680
 #, c-format
-msgid "Transform.colorTransform(%s): argument is not a ColorTransform"
+msgid "%p.decodeNextAudioFrame: no more video frames in input"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:236
-msgid "Failed to construct flash.geom.Matrix!"
+#: libcore/asobj/NetStream_as.cpp:710
+#, c-format
+msgid ""
+"NetStream_as::decodeNextAudioFrame: %d bytes of encoded audio decoded to %d "
+"bytes"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:305
+#: libcore/asobj/NetStream_as.cpp:731
 #, c-format
-msgid "Transform.matrix(%s): extra arguments discarded"
+msgid "NetStream_as::seek(%d): no parser, no party"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:315
-#, c-format
-msgid "Transform.matrix(%s): argument is not an object"
+#: libcore/asobj/NetStream_as.cpp:751
+msgid "Setting invalidTime status"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:346
+#: libcore/asobj/NetStream_as.cpp:758
 #, c-format
-msgid "flash.geom.Transform(%s): needs one argument"
+msgid "_parser->seek(%d) returned %d"
 msgstr ""
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:356
+#: libcore/asobj/NetStream_as.cpp:765
 #, c-format
-msgid "Transform(%s): %s"
+msgid "%p.seek: playHead position set to %d"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:816
+#: libcore/asobj/NetStream_as.cpp:803
+#, c-format
 msgid ""
-"BitmapData.copyChannel(). Multiple destination channels are not supported"
+"%p.refreshAudioBuffer: doing nothing as playhead is paused - bufferLength=%d/"
+"%d"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:842
+#: libcore/asobj/NetStream_as.cpp:812
+#, c-format
 msgid ""
-"BitmapData.copyChannel(): no part of source rectangleoverlaps with the "
-"source BitmapData"
+"%p.refreshAudioBuffer: doing nothing as current position was already decoded "
+"- bufferLength=%d/%d"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:856
+#: libcore/asobj/NetStream_as.cpp:824
+#, c-format
 msgid ""
-"BitmapData.copyChannel(): destination area is wholly outside the destination "
-"BitmapData"
+"%p.refreshAudioBuffer: currentPosition=%d, playHeadState=%d, bufferLength="
+"%d, bufferTime=%d"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:914
-msgid "BitmapData.copyPixels(): arguments after the first three are discarded"
+#: libcore/asobj/NetStream_as.cpp:962
+#, c-format
+msgid "%p.pushDecodedAudioFrames(%d) : buffer overrun (%d/%d)."
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:964
+#: libcore/asobj/NetStream_as.cpp:978
+#, c-format
 msgid ""
-"BitmapData.copyPixels(): no part of source rectangleoverlaps with the source "
-"BitmapData"
+"%p.pushDecodedAudioFrames(%d): no more audio frames in input "
+"(nextAudioFrameTimestamp returned false, parsingComplete=%d)"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:978
+#: libcore/asobj/NetStream_as.cpp:989
 msgid ""
-"BitmapData.copyPixels(): destination area is wholly outside the destination "
-"BitmapData"
+"pushDecodedAudioFrames setting playStop status (parsing complete and "
+"nextAudioFrameTimestamp returned false)"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1064
+#: libcore/asobj/NetStream_as.cpp:1002
 #, c-format
-msgid "BitmapData.draw(%s) requires at least one argument"
+msgid "%p.pushDecodedAudioFrames(%d): next audio frame is in the future (%d)"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1076
-msgid "BitmapData.draw() with BitmapData argument"
+#: libcore/asobj/NetStream_as.cpp:1015
+#, c-format
+msgid ""
+"nextAudioFrameTimestamp returned true (%d), but decodeNextAudioFrame "
+"returned null, I don't think this should ever happen"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1083
+#: libcore/asobj/NetStream_as.cpp:1024
 #, c-format
-msgid "BitmapData.draw(%s): first argument must be a MovieClip"
+msgid "pushDecodedAudioFrames(%d): Decoded audio frame contains no samples"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1120
+#: libcore/asobj/NetStream_as.cpp:1033
 #, c-format
-msgid "BitmapData.fillRect(%s): needs an object"
+msgid "pushDecodedAudioFrames(%d) pushing %dth frame with timestamp %d"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1157
-msgid "floodFill called on disposed BitmapData!"
+#: libcore/asobj/NetStream_as.cpp:1051
+msgid "resuming playback clock on audio consume"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1231
-msgid "getPixel32 called on disposed BitmapData!"
+#: libcore/asobj/NetStream_as.cpp:1116
+#, c-format
+msgid ""
+"%p.refreshVideoFrame: doing nothing as playhead is paused - bufferLength=%d, "
+"bufferTime=%d"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1361
-msgid "BitmapData.perlinNoise() stitch value"
+#: libcore/asobj/NetStream_as.cpp:1126
+#, c-format
+msgid ""
+"%p.refreshVideoFrame: doing nothing as current position was already decoded "
+"- bufferLength=%d, bufferTime=%d"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1562
-msgid "Failed to construct flash.geom.Rectangle!"
+#: libcore/asobj/NetStream_as.cpp:1138
+#, c-format
+msgid ""
+"%p.refreshVideoFrame: currentPosition=%d, playHeadState=%d, bufferLength=%d, "
+"bufferTime=%d"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1584
-msgid "BitmapData.loadBitmap requires one argument"
+#: libcore/asobj/NetStream_as.cpp:1152
+#, c-format
+msgid ""
+"%p.refreshVideoFrame(): no more video frames to decode (DEC_STOPPED, null "
+"from getDeodedVideoFrame)"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1649
+#: libcore/asobj/NetStream_as.cpp:1161
+#, c-format
 msgid ""
-"BitmapData constructor requires at least two arguments. Will not construct a "
-"BitmapData"
+"%p.refreshVideoFrame(): last video frame was good enough for current position"
 msgstr ""
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1663
+#: libcore/asobj/NetStream_as.cpp:1238
+#, c-format
 msgid ""
-"BitmapData width and height must be between 1 and 2880. Will not construct a "
-"BitmapData"
+"%p.advance: buffer empty while decoding, setting buffer to buffering and "
+"pausing playback clock"
 msgstr ""
 
-#: libcore/asobj/MovieClipLoader.cpp:105
-#, c-format
-msgid "MovieClipLoader.loadClip(%s): missing arguments"
+#: libcore/asobj/NetStream_as.cpp:1243
+msgid "Setting bufferEmpty status"
 msgstr ""
 
-#: libcore/asobj/MovieClipLoader.cpp:114
+#: libcore/asobj/NetStream_as.cpp:1252
 #, c-format
-msgid "MovieClipLoader.loadClip(%s): first argument must be a string"
+msgid "%p.advance : bufferLength=%d, parsing completed"
 msgstr ""
 
-#: libcore/asobj/MovieClipLoader.cpp:132
+#: libcore/asobj/NetStream_as.cpp:1264
 #, c-format
-msgid "Could not find target %s (evaluated from %s)"
+msgid "%p.advance: buffering - position=%d, buffer=%d/%d"
 msgstr ""
 
-#: libcore/asobj/MovieClipLoader.cpp:149
+#: libcore/asobj/NetStream_as.cpp:1283
 #, c-format
-msgid "MovieClipLoader.unloadClip(%s): expected at least one argument"
+msgid ""
+"%p.advance: buffer full (or parsing completed), resuming playback clock - "
+"position=%d, buffer=%d/%d"
 msgstr ""
 
-#: libcore/asobj/MovieClipLoader.cpp:156
+#: libcore/asobj/NetStream_as.cpp:1304
 #, c-format
-msgid "MovieClipLoader.unloadClip: %s"
+msgid "%p.advance: playHead position set to timestamp of first frame: %d"
 msgstr ""
 
-#: libcore/asobj/MovieClipLoader.cpp:180
-msgid "MovieClipLoader.getProgress(): missing argument"
+#: libcore/asobj/NetStream_as.cpp:1311
+#, c-format
+msgid ""
+"%p.advance: playHead position is 0 and parser still doesn't have a frame to "
+"set it to"
 msgstr ""
 
-#: libcore/asobj/MovieClipLoader.cpp:189
+#: libcore/asobj/NetStream_as.cpp:1351
 #, c-format
-msgid "MovieClipLoader.getProgress(%s): first argument is not an object"
+msgid ""
+"Moving NetStream playhead from timestamp %d to timestamp %d as there are no "
+"video frames yet, audio buffer is empty and next audio frame timestamp is "
+"there (see bug #26687)"
 msgstr ""
 
-#: libcore/asobj/MovieClipLoader.cpp:198
+#: libcore/asobj/NetStream_as.cpp:1453
+msgid "attachAuxStreamer called while already attached"
+msgstr ""
+
+#: libcore/asobj/NetStream_as.cpp:1464
 #, c-format
-msgid "MovieClipLoader.getProgress(%s): first argument is not an sprite"
+msgid "Could not attach NetStream aux streamer to sound handler: %s"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:420
+#: libcore/asobj/NetStream_as.cpp:1603
 #, c-format
-msgid "Could not create audio decoder: %s"
+msgid ""
+"First argument to NetStream constructor doesn't cast to a NetConnection (%s)"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:428
-msgid "No audio in Sound input."
+#: libcore/asobj/NetStream_as.cpp:1648
+msgid "NetStream_as play needs args"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:581
+#: libcore/asobj/NetStream_as.cpp:1655
 #, c-format
-msgid "Gnash could not open this URL: %s"
+msgid "NetStream.play(%s): stream is not connected"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:592
-#, c-format
-msgid "Unable to create parser for Sound at %s"
+#: libcore/asobj/NetStream_as.cpp:1704
+msgid "NetStream.attachAudio"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:676
-msgid "No sound handler, nothing to start..."
+#: libcore/asobj/NetStream_as.cpp:1715
+msgid "NetStream.attachVideo"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:682
-msgid "No MediaParser initialized, can't start an external sound"
+#: libcore/asobj/NetStream_as.cpp:1726
+msgid "NetStream.publish"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:688
-msgid "Sound.start() has no effect on a streaming Sound"
+#: libcore/asobj/NetStream_as.cpp:1737
+msgid "NetStream.receiveAudio"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:735
-msgid "No sound handler, nothing to stop..."
+#: libcore/asobj/NetStream_as.cpp:1748
+msgid "NetStream.receiveVideo"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:763
-msgid "No sound handler, can't check duration..."
+#: libcore/asobj/NetStream_as.cpp:1759
+msgid "NetStream.send"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:788
-msgid ""
-"No sound handler, can't check position (we're likely not playing anyway)..."
+#: libcore/asobj/NetStream_as.cpp:1843
+msgid "NetStream.liveDelay"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:855
-#, c-format
-msgid "No samples decoded from input of %d bytes"
+#: libcore/asobj/NetStream_as.cpp:1900
+msgid "Invalid AMF data in FLV tag"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:955
-#, c-format
-msgid "new Sound(%d) : args after first one ignored"
+#: libcore/asobj/NetStream_as.cpp:1911
+msgid "Could not convert FLV metatag to as_value, passing undefined"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:969
-#, c-format
-msgid ""
-"new Sound(%s) : first argument isn't null or undefined, and isn't a "
-"DisplayObject. We'll take as an invalid DisplayObject ref."
+#: libcore/asobj/LoadableObject.cpp:176
+msgid "XML.addRequestHeader: XML._customHeaders is not an object"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:987
-msgid "-- start sound"
+#: libcore/asobj/LoadableObject.cpp:193
+msgid "XML.addRequestHeader requires at least one argument"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1012
-msgid "-- stop sound "
+#: libcore/asobj/LoadableObject.cpp:206
+msgid "XML.addRequestHeader: single argument is not an array"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1028 libcore/asobj/Sound_as.cpp:1083
+#: libcore/asobj/LoadableObject.cpp:222
 #, c-format
-msgid "No such export '%s'"
+msgid "XML.addRequestHeader(%s): arguments after the second will be discarded"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1037
+#: libcore/asobj/LoadableObject.cpp:237
 #, c-format
-msgid "Export '%s' is not a sound"
+msgid "XML.addRequestHeader(%s): both arguments must be a string"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1053
-msgid "-- attach sound"
+#: libcore/asobj/LoadableObject.cpp:304
+msgid "sendAndLoad() requires at least two arguments"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1058
-msgid "attach sound needs one argument"
-msgstr ""
-
-#: libcore/asobj/Sound_as.cpp:1068
-msgid "attachSound needs a non-empty string"
+#: libcore/asobj/LoadableObject.cpp:312
+msgid "sendAndLoad(): invalid empty URL"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1092
-#, c-format
-msgid "Export '%s'is not a sound"
+#: libcore/asobj/LoadableObject.cpp:319
+msgid "sendAndLoad(): invalid target (must be an XML or LoadVars object)"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1127
-msgid "Sound.getPan()"
+#: libcore/asobj/LoadableObject.cpp:397
+#, c-format
+msgid "Loading from URL: '%s'"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1142
-msgid "Sound.setDuration()"
+#: libcore/asobj/LoadableObject.cpp:417
+msgid "load() requires at least one argument"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1157
-msgid "Sound.setPosition()"
+#: libcore/asobj/LoadableObject.cpp:426
+msgid "load(): invalid empty URL"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1164
-msgid "Sound.getTransform()"
+#: libcore/asobj/Video_as.cpp:114
+msgid "attachVideo needs 1 arg"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1177
+#: libcore/asobj/Video_as.cpp:126
 #, c-format
-msgid "Sound.getVolume(%s) : arguments ignored"
-msgstr ""
-
-#: libcore/asobj/Sound_as.cpp:1193
-msgid "Sound.loadSound() needs at least 1 argument"
+msgid "attachVideo(%s) first arg is not a NetStream instance"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1208
-#, c-format
-msgid "Sound.loadSound(%s): arguments after first 2 discarded"
+#: libcore/asobj/Video_as.cpp:139
+msgid "Video.deblocking"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1222
-msgid "Sound.setPan()"
+#: libcore/asobj/LocalConnection_as.cpp:279
+msgid "Attempting to write to disabled LocalConnection!"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1229
-msgid "Sound.setTransform()"
+#: libcore/asobj/LocalConnection_as.cpp:288
+msgid "Failed to attach shared memory segment"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1238
-msgid "set volume of sound needs one argument"
+#: libcore/asobj/LocalConnection_as.cpp:296
+msgid "Failed to get shm lock"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1253
-msgid "Sound.checkPolicyFile"
+#: libcore/asobj/LocalConnection_as.cpp:332
+msgid "Invalid connection name data"
 msgstr ""
 
-#: libcore/asobj/Sound_as.cpp:1266
-msgid "Sound.areSoundsInaccessible()"
+#: libcore/asobj/LocalConnection_as.cpp:431
+msgid "Failed to get lock on shared memory! Will not remove listener"
 msgstr ""
 
-#: libcore/asobj/XML_as.cpp:464
-msgid "XML data is empty"
+#: libcore/asobj/LocalConnection_as.cpp:461
+msgid "Failed to open shared memory segment"
 msgstr ""
 
-#: libcore/asobj/XML_as.cpp:740
-msgid "no text for text node creation"
+#: libcore/asobj/LocalConnection_as.cpp:534
+msgid "LocalConnection.connect() expects exactly 1 argument"
 msgstr ""
 
-#: libcore/asobj/XML_as.cpp:753
-msgid "XML.parseXML() needs one argument"
+#: libcore/asobj/LocalConnection_as.cpp:542
+msgid "LocalConnection.connect(): first argument must be a string"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:297
+#: libcore/asobj/LocalConnection_as.cpp:587
+#: libcore/asobj/LocalConnection_as.cpp:599
+#: libcore/asobj/LocalConnection_as.cpp:612
 #, c-format
-msgid "createEmptyMovieClip needs 2 args, but %d given, returning undefined"
+msgid "LocalConnection.send(%s): requires at least 2 arguments"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:305
-#, c-format
-msgid "createEmptyMovieClip takes 2 args, but %d given, discarding the excess"
+#: libcore/asobj/LocalConnection_as.cpp:783
+msgid "No space for listener in shared memory!"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:363
-msgid "MovieClip.cacheAsBitmap()"
+#: libcore/asobj/LocalConnection_as.cpp:844
+#, c-format
+msgid "Invalid domain %s"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:375
-msgid "MovieClip.filters()"
+#: libcore/asobj/LocalConnection_as.cpp:851
+#, c-format
+msgid "Invalid function name %s"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:394
-msgid "MovieClip.forceSmoothing()"
+#: libcore/asobj/LocalConnection_as.cpp:877
+msgid "Fewer AMF fields than expected."
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:404
-msgid "MovieClip.opaqueBackground()"
+#: libcore/asobj/Camera_as.cpp:259
+msgid "No MediaHandler exists! Cannot create a Camera object"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:414
-msgid "MovieClip.scale9Grid()"
+#: libcore/asobj/Camera_as.cpp:312
+msgid "Camera::motionLevel can be set, but it's not implemented"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:424
-msgid "MovieClip.scrollRect()"
+#: libcore/asobj/Camera_as.cpp:331
+msgid "Camera::quality can be set, but it's not implemented"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:434
-msgid "MovieClip.tabIndex()"
+#: libcore/asobj/Camera_as.cpp:353
+msgid "Camera::activityLevel only has default value"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:449
-#, c-format
-msgid ""
-"attachMovie called with wrong number of arguments expected 3 to 4, got (%d) "
-"- returning undefined"
+#: libcore/asobj/Camera_as.cpp:358
+msgid "Attempt to set activity property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:464
-#, c-format
-msgid ""
-"attachMovie: exported resource '%s' is not a DisplayObject definition. "
-"Returning undefined"
+#: libcore/asobj/Camera_as.cpp:370
+msgid "Camera::bandwidth only has default value"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:484
-#, c-format
-msgid "MovieClip.attachMovie: invalid depth %d passed; not attaching"
+#: libcore/asobj/Camera_as.cpp:375
+msgid "Attempt to set bandwidth property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:509
-#, c-format
-msgid ""
-"Fourth argument of attachMovie doesn't cast to an object (%s), we'll act as "
-"if it wasn't given"
+#: libcore/asobj/Camera_as.cpp:391
+msgid "Attempt to set currentFPS property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:531
-#, c-format
-msgid "MovieClip.attachAudio(): %s"
+#: libcore/asobj/Camera_as.cpp:407
+msgid "Attempt to set fps property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:541
-#, c-format
-msgid "MovieClip.attachAudio(%s): first arg doesn't cast to a NetStream"
+#: libcore/asobj/Camera_as.cpp:423
+msgid "Attempt to set height property of Camera, use setMode"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:559
-msgid "MovieClip.attachVideo()"
+#: libcore/asobj/Camera_as.cpp:446
+msgid "Attempt to set index property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:584
-#, c-format
-msgid "%s.swapDepths() needs one arg"
+#: libcore/asobj/Camera_as.cpp:458
+msgid "Camera::motionLevel only has default value"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:595
-#, c-format
-msgid "%s.swapDepths(%s): won't swap a clip below depth %d (%d)"
+#: libcore/asobj/Camera_as.cpp:463
+msgid "Attempt to set motionLevel property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:613
-#, c-format
-msgid "%s.swapDepths(%s): invalid call, swapping to self?"
+#: libcore/asobj/Camera_as.cpp:475
+msgid "Camera::motionTimeout"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:625
-#, c-format
-msgid ""
-"%s.swapDepths(%s): invalid call, the two DisplayObjects don't have the same "
-"parent"
+#: libcore/asobj/Camera_as.cpp:480
+msgid "Attempt to set motionTimeout property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:642
-#, c-format
-msgid ""
-"%s.swapDepths(%s): ignored, source and target DisplayObjects have the same "
-"depth %d"
+#: libcore/asobj/Camera_as.cpp:492
+msgid "Camera.muted"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:657
-#, c-format
-msgid ""
-"%s.swapDepths(%s): first argument invalid (neither a movieclip nor a number)"
+#: libcore/asobj/Camera_as.cpp:497
+msgid "Attempt to set muted property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:666
-#, c-format
-msgid "%s.swapDepths(%s): requested depth is above the accessible range."
+#: libcore/asobj/Camera_as.cpp:513
+msgid "Attempt to set name property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:682
-#, c-format
-msgid "%s.swapDepths(%s): ignored, DisplayObject already at depth %d"
+#: libcore/asobj/Camera_as.cpp:524
+msgid "Attempt to set names property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:716
-msgid "MovieClip.duplicateMovieClip() needs 2 or 3 args"
+#: libcore/asobj/Camera_as.cpp:554
+msgid "Camera::quality has only default values"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:732
-#, c-format
-msgid "MovieClip.duplicateMovieClip: invalid depth %d passed; not duplicating"
+#: libcore/asobj/Camera_as.cpp:559
+msgid "Attempt to set quality property of Camera"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:764
-msgid "movieclip_goto_and_play needs one arg"
+#: libcore/asobj/Camera_as.cpp:587
+msgid "Camera.setCursor"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:774
-#, c-format
-msgid "movieclip_goto_and_play('%s') -- invalid frame"
+#: libcore/asobj/Camera_as.cpp:594
+msgid "Camera.setKeyFrameInterval"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:794
-msgid "movieclip_goto_and_stop needs one arg"
+#: libcore/asobj/Camera_as.cpp:608
+msgid "Attempt to set width property of Camera, use setMode"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:804
+#: libcore/asobj/SharedObject_as.cpp:163
 #, c-format
-msgid "movieclip_goto_and_stop('%s') -- invalid frame"
+msgid "Problems serializing an object's member %s=%s"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:879
+#: libcore/asobj/SharedObject_as.cpp:323
 #, c-format
 msgid ""
-"MovieClip.loadMovie() expected 1 or 2 args, got %d - returning undefined"
+"SharedObject.flush() called with a minimum disk space argument (%d), which "
+"is currently ignored"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:891
+#: libcore/asobj/SharedObject_as.cpp:331
 #, c-format
-msgid ""
-"First argument of MovieClip.loadMovie(%s) evaluates to an empty string - "
-"returning undefined"
+msgid "Couldn't create dir for flushing SharedObject %s"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:941
+#: libcore/asobj/SharedObject_as.cpp:344
 #, c-format
 msgid ""
-"MovieClip.loadVariables() expected 1 or 2 args, got %d - returning undefined"
+"Attempting to write object %s when it's SOL Read Only is set! Refusing..."
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:953
+#: libcore/asobj/SharedObject_as.cpp:352
 #, c-format
-msgid ""
-"First argument passed to MovieClip.loadVariables(%s) evaluates to an empty "
-"string - returning undefined"
+msgid "SharedObject::flush(): Failed opening file '%s' in binary mode"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:995
-#, c-format
-msgid "Can't find hitTest target %s"
+#: libcore/asobj/SharedObject_as.cpp:371
+msgid "Error writing SOL header"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1037
+#: libcore/asobj/SharedObject_as.cpp:378
 #, c-format
-msgid "hitTest() called with %u args"
+msgid "Error writing %d bytes to output file %s"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1066
-msgid "MovieClip.getInstanceAtDepth(): missing or undefined depth argument"
+#: libcore/asobj/SharedObject_as.cpp:384
+#, c-format
+msgid "SharedObject '%s' written to filesystem."
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1108
-msgid "No arguments passed to MovieClip.getURL()"
+#: libcore/asobj/SharedObject_as.cpp:493
+msgid "Attempting to open SOL file from non localhost-loaded SWF"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1117
+#: libcore/asobj/SharedObject_as.cpp:521
 #, c-format
-msgid "MovieClip.getURL(%s): extra arguments dropped"
-msgstr ""
-
-#: libcore/asobj/MovieClip_as.cpp:1195
 msgid ""
-"MovieClip.getTextSnapshot: failed to construct TextSnapshot (object probably "
-"overridden)"
+"SharedObject path %s is outside the SWF domain %s. Cannot access this object."
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1225
+#: libcore/asobj/SharedObject_as.cpp:534
 #, c-format
 msgid ""
-"MovieClip.getBounds(%s): invalid call, first arg must be a DisplayObject"
+"SharedObject path %s is not part of the SWF path %s. Cannot access this "
+"object."
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1273
-msgid "MovieClip.globalToLocal() takes one arg"
+#: libcore/asobj/SharedObject_as.cpp:703
+msgid "SharedObject.connect(): needs at least one argument"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1281
-#, c-format
-msgid "MovieClip.globalToLocal(%s): first argument doesn't cast to an object"
+#: libcore/asobj/SharedObject_as.cpp:709
+msgid "SharedObject.connect()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1295
-#, c-format
-msgid ""
-"MovieClip.globalToLocal(%s): object parameter doesn't have an 'x' member"
+#: libcore/asobj/SharedObject_as.cpp:730
+msgid "SharedObject.setFps"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1306
-#, c-format
-msgid ""
-"MovieClip.globalToLocal(%s): object parameter doesn't have an 'y' member"
+#: libcore/asobj/SharedObject_as.cpp:739
+msgid "SharedObject.send"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1334
-msgid "MovieClip.localToGlobal() takes one arg"
+#: libcore/asobj/SharedObject_as.cpp:756
+#, c-format
+msgid "Arguments to SharedObject.flush(%s) will be ignored"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1342
+#: libcore/asobj/SharedObject_as.cpp:787
 #, c-format
-msgid "MovieClip.localToGlobal(%s): first argument doesn't cast to an object"
+msgid "SharedObject.getLocal(%s): missing object name"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1355
-#, c-format
-msgid ""
-"MovieClip.localToGlobal(%s): object parameter doesn't have an 'x' member"
+#: libcore/asobj/SharedObject_as.cpp:813
+msgid "SharedObject.getRemote()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1366
-#, c-format
-msgid ""
-"MovieClip.localToGlobal(%s): object parameter doesn't have an 'y' member"
+#: libcore/asobj/SharedObject_as.cpp:828
+msgid "SharedObject.deleteAll()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1395
-#, c-format
-msgid "%s.setMask() : needs an argument"
+#: libcore/asobj/SharedObject_as.cpp:843
+msgid "SharedObject.getDiskUsage()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1414
+#: libcore/asobj/SharedObject_as.cpp:904
 #, c-format
-msgid "%s.setMask(%s) : first argument is not a DisplayObject"
+msgid "readSOL: SOL file %s is too short (only %s bytes long) to be valid."
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1444
-msgid "MovieClip.lineTo() needs at least two arguments"
+#: libcore/asobj/SharedObject_as.cpp:929
+msgid "readSOL: file ends before data segment"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1470
-msgid "MovieClip.moveTo() takes two args"
+#: libcore/asobj/SharedObject_as.cpp:942
+msgid "SharedObject: end of buffer while reading length"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1521
-#, c-format
-msgid "MovieClip.lineStyle(%s): args after the first three will be discarded"
+#: libcore/asobj/SharedObject_as.cpp:951
+msgid "readSOL: empty property name"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1541
-#, c-format
-msgid ""
-"MovieClip.lineStyle(%s): invalid joinStylevalue '%s' (valid values: %s|%s|%s)"
+#: libcore/asobj/SharedObject_as.cpp:956
+msgid "SharedObject::readSOL: premature end of input"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1557
+#: libcore/asobj/SharedObject_as.cpp:967
 #, c-format
-msgid ""
-"MovieClip.lineStyle(%s): invalid capStyle value '%s' (valid values: none|"
-"round|square)"
+msgid "SharedObject: error parsing SharedObject '%s'"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1582
+#: libcore/asobj/SharedObject_as.cpp:986
 #, c-format
-msgid ""
-"MovieClip.lineStyle(%s): invalid noScale value '%s' (valid values: %s|%s|%s|"
-"%s)"
-msgstr ""
-
-#: libcore/asobj/MovieClip_as.cpp:1630
-msgid "MovieClip.curveTo() takes four args"
-msgstr ""
-
-#: libcore/asobj/MovieClip_as.cpp:1671
-msgid "beginFill() with no args is a no-op"
+msgid "readSOL: Reading SharedObject %s: %s"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1715
+#: libcore/asobj/MovieClip_as.cpp:297
 #, c-format
-msgid "%s.beginGradientFill(%s): invalid call: 5 arguments needed"
+msgid "createEmptyMovieClip needs 2 args, but %d given, returning undefined"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1726
+#: libcore/asobj/MovieClip_as.cpp:305
 #, c-format
-msgid "%s.beginGradientFill(%s): extra arguments invalidate call!"
+msgid "createEmptyMovieClip takes 2 args, but %d given, discarding the excess"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1746
-#, c-format
-msgid ""
-"%s.beginGradientFill(%s): first arg must be 'radial', 'focal', or 'linear'"
+#: libcore/asobj/MovieClip_as.cpp:363
+msgid "MovieClip.cacheAsBitmap()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1762
-#, c-format
-msgid ""
-"%s.beginGradientFill(%s): one or more of the args from 2nd to 5th don't cast "
-"to objects"
+#: libcore/asobj/MovieClip_as.cpp:375
+msgid "MovieClip.filters()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1776
-#, c-format
-msgid ""
-"%s.beginGradientFill(%s): colors, alphas and ratios args don't have same "
-"length"
+#: libcore/asobj/MovieClip_as.cpp:394
+msgid "MovieClip.forceSmoothing()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1928
-#, c-format
-msgid "min/max bbox values in MovieClip.startDrag(%s) swapped, fixing"
+#: libcore/asobj/MovieClip_as.cpp:404
+msgid "MovieClip.opaqueBackground()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:1933
-#, c-format
-msgid "non-finite bbox values in MovieClip.startDrag(%s), took as zero"
+#: libcore/asobj/MovieClip_as.cpp:414
+msgid "MovieClip.scale9Grid()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:2077
-msgid "Failed to construct flash.geom.Transform!"
+#: libcore/asobj/MovieClip_as.cpp:424
+msgid "MovieClip.scrollRect()"
 msgstr ""
 
-#: libcore/asobj/MovieClip_as.cpp:2095
-msgid "MovieClip.beginMeshFill"
+#: libcore/asobj/MovieClip_as.cpp:434
+msgid "MovieClip.tabIndex()"
 msgstr ""
 
-#: libcore/asobj/LoadVars_as.cpp:145
+#: libcore/asobj/MovieClip_as.cpp:449
 #, c-format
-msgid "new LoadVars(%s) - arguments discarded"
+msgid ""
+"attachMovie called with wrong number of arguments expected 3 to 4, got (%d) "
+"- returning undefined"
 msgstr ""
 
-#: libcore/asobj/Selection_as.cpp:189
+#: libcore/asobj/MovieClip_as.cpp:464
 #, c-format
-msgid "Selection.setFocus: expected 1 argument, got %d"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:259
-msgid "No MediaHandler exists! Cannot create a Camera object"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:312
-msgid "Camera::motionLevel can be set, but it's not implemented"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:331
-msgid "Camera::quality can be set, but it's not implemented"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:353
-msgid "Camera::activityLevel only has default value"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:358
-msgid "Attempt to set activity property of Camera"
+msgid ""
+"attachMovie: exported resource '%s' is not a DisplayObject definition. "
+"Returning undefined"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:370
-msgid "Camera::bandwidth only has default value"
+#: libcore/asobj/MovieClip_as.cpp:484
+#, c-format
+msgid "MovieClip.attachMovie: invalid depth %d passed; not attaching"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:375
-msgid "Attempt to set bandwidth property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:509
+#, c-format
+msgid ""
+"Fourth argument of attachMovie doesn't cast to an object (%s), we'll act as "
+"if it wasn't given"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:391
-msgid "Attempt to set currentFPS property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:531
+#, c-format
+msgid "MovieClip.attachAudio(): %s"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:407
-msgid "Attempt to set fps property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:532
+#: libcore/asobj/flash/geom/Point_as.cpp:427
+#: libcore/asobj/flash/geom/Point_as.cpp:511
+#: libcore/asobj/flash/geom/Point_as.cpp:596
+#: libcore/asobj/flash/geom/Point_as.cpp:604
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:154
+msgid "missing arguments"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:423
-msgid "Attempt to set height property of Camera, use setMode"
+#: libcore/asobj/MovieClip_as.cpp:541
+#, c-format
+msgid "MovieClip.attachAudio(%s): first arg doesn't cast to a NetStream"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:446
-msgid "Attempt to set index property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:559
+msgid "MovieClip.attachVideo()"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:458
-msgid "Camera::motionLevel only has default value"
+#: libcore/asobj/MovieClip_as.cpp:584
+#, c-format
+msgid "%s.swapDepths() needs one arg"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:463
-msgid "Attempt to set motionLevel property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:595
+#, c-format
+msgid "%s.swapDepths(%s): won't swap a clip below depth %d (%d)"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:475
-msgid "Camera::motionTimeout"
+#: libcore/asobj/MovieClip_as.cpp:613
+#, c-format
+msgid "%s.swapDepths(%s): invalid call, swapping to self?"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:480
-msgid "Attempt to set motionTimeout property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:625
+#, c-format
+msgid ""
+"%s.swapDepths(%s): invalid call, the two DisplayObjects don't have the same "
+"parent"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:492
-msgid "Camera.muted"
+#: libcore/asobj/MovieClip_as.cpp:642
+#, c-format
+msgid ""
+"%s.swapDepths(%s): ignored, source and target DisplayObjects have the same "
+"depth %d"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:497
-msgid "Attempt to set muted property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:657
+#, c-format
+msgid ""
+"%s.swapDepths(%s): first argument invalid (neither a movieclip nor a number)"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:513
-msgid "Attempt to set name property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:666
+#, c-format
+msgid "%s.swapDepths(%s): requested depth is above the accessible range."
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:524
-msgid "Attempt to set names property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:682
+#, c-format
+msgid "%s.swapDepths(%s): ignored, DisplayObject already at depth %d"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:554
-msgid "Camera::quality has only default values"
+#: libcore/asobj/MovieClip_as.cpp:716
+msgid "MovieClip.duplicateMovieClip() needs 2 or 3 args"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:559
-msgid "Attempt to set quality property of Camera"
+#: libcore/asobj/MovieClip_as.cpp:732
+#, c-format
+msgid "MovieClip.duplicateMovieClip: invalid depth %d passed; not duplicating"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:587
-msgid "Camera.setCursor"
+#: libcore/asobj/MovieClip_as.cpp:764
+msgid "movieclip_goto_and_play needs one arg"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:594
-msgid "Camera.setKeyFrameInterval"
+#: libcore/asobj/MovieClip_as.cpp:774
+#, c-format
+msgid "movieclip_goto_and_play('%s') -- invalid frame"
 msgstr ""
 
-#: libcore/asobj/Camera_as.cpp:608
-msgid "Attempt to set width property of Camera, use setMode"
+#: libcore/asobj/MovieClip_as.cpp:794
+msgid "movieclip_goto_and_stop needs one arg"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:163
+#: libcore/asobj/MovieClip_as.cpp:804
 #, c-format
-msgid "Problems serializing an object's member %s=%s"
+msgid "movieclip_goto_and_stop('%s') -- invalid frame"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:323
+#: libcore/asobj/MovieClip_as.cpp:879
 #, c-format
 msgid ""
-"SharedObject.flush() called with a minimum disk space argument (%d), which "
-"is currently ignored"
+"MovieClip.loadMovie() expected 1 or 2 args, got %d - returning undefined"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:331
+#: libcore/asobj/MovieClip_as.cpp:891
 #, c-format
-msgid "Couldn't create dir for flushing SharedObject %s"
+msgid ""
+"First argument of MovieClip.loadMovie(%s) evaluates to an empty string - "
+"returning undefined"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:344
+#: libcore/asobj/MovieClip_as.cpp:941
 #, c-format
 msgid ""
-"Attempting to write object %s when it's SOL Read Only is set! Refusing..."
+"MovieClip.loadVariables() expected 1 or 2 args, got %d - returning undefined"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:352
+#: libcore/asobj/MovieClip_as.cpp:953
 #, c-format
-msgid "SharedObject::flush(): Failed opening file '%s' in binary mode"
+msgid ""
+"First argument passed to MovieClip.loadVariables(%s) evaluates to an empty "
+"string - returning undefined"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:371
-msgid "Error writing SOL header"
+#: libcore/asobj/MovieClip_as.cpp:995
+#, c-format
+msgid "Can't find hitTest target %s"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:378
+#: libcore/asobj/MovieClip_as.cpp:1037
 #, c-format
-msgid "Error writing %d bytes to output file %s"
+msgid "hitTest() called with %u args"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:384
-#, c-format
-msgid "SharedObject '%s' written to filesystem."
+#: libcore/asobj/MovieClip_as.cpp:1066
+msgid "MovieClip.getInstanceAtDepth(): missing or undefined depth argument"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:493
-msgid "Attempting to open SOL file from non localhost-loaded SWF"
+#: libcore/asobj/MovieClip_as.cpp:1108
+msgid "No arguments passed to MovieClip.getURL()"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:521
+#: libcore/asobj/MovieClip_as.cpp:1117
 #, c-format
+msgid "MovieClip.getURL(%s): extra arguments dropped"
+msgstr ""
+
+#: libcore/asobj/MovieClip_as.cpp:1196
 msgid ""
-"SharedObject path %s is outside the SWF domain %s. Cannot access this object."
+"MovieClip.getTextSnapshot: failed to construct TextSnapshot (object probably "
+"overridden)"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:534
+#: libcore/asobj/MovieClip_as.cpp:1226
 #, c-format
 msgid ""
-"SharedObject path %s is not part of the SWF path %s. Cannot access this "
-"object."
+"MovieClip.getBounds(%s): invalid call, first arg must be a DisplayObject"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:703
-msgid "SharedObject.connect(): needs at least one argument"
+#: libcore/asobj/MovieClip_as.cpp:1274
+msgid "MovieClip.globalToLocal() takes one arg"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:709
-msgid "SharedObject.connect()"
+#: libcore/asobj/MovieClip_as.cpp:1282
+#, c-format
+msgid "MovieClip.globalToLocal(%s): first argument doesn't cast to an object"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:730
-msgid "SharedObject.setFps"
+#: libcore/asobj/MovieClip_as.cpp:1296
+#, c-format
+msgid ""
+"MovieClip.globalToLocal(%s): object parameter doesn't have an 'x' member"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:739
-msgid "SharedObject.send"
+#: libcore/asobj/MovieClip_as.cpp:1307
+#, c-format
+msgid ""
+"MovieClip.globalToLocal(%s): object parameter doesn't have an 'y' member"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:756
-#, c-format
-msgid "Arguments to SharedObject.flush(%s) will be ignored"
+#: libcore/asobj/MovieClip_as.cpp:1335
+msgid "MovieClip.localToGlobal() takes one arg"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:787
+#: libcore/asobj/MovieClip_as.cpp:1343
 #, c-format
-msgid "SharedObject.getLocal(%s): missing object name"
+msgid "MovieClip.localToGlobal(%s): first argument doesn't cast to an object"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:813
-msgid "SharedObject.getRemote()"
+#: libcore/asobj/MovieClip_as.cpp:1356
+#, c-format
+msgid ""
+"MovieClip.localToGlobal(%s): object parameter doesn't have an 'x' member"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:828
-msgid "SharedObject.deleteAll()"
+#: libcore/asobj/MovieClip_as.cpp:1367
+#, c-format
+msgid ""
+"MovieClip.localToGlobal(%s): object parameter doesn't have an 'y' member"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:843
-msgid "SharedObject.getDiskUsage()"
+#: libcore/asobj/MovieClip_as.cpp:1396
+#, c-format
+msgid "%s.setMask() : needs an argument"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:904
+#: libcore/asobj/MovieClip_as.cpp:1415
 #, c-format
-msgid "readSOL: SOL file %s is too short (only %s bytes long) to be valid."
+msgid "%s.setMask(%s) : first argument is not a DisplayObject"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:929
-msgid "readSOL: file ends before data segment"
+#: libcore/asobj/MovieClip_as.cpp:1445
+msgid "MovieClip.lineTo() needs at least two arguments"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:942
-msgid "SharedObject: end of buffer while reading length"
+#: libcore/asobj/MovieClip_as.cpp:1471
+msgid "MovieClip.moveTo() takes two args"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:951
-msgid "readSOL: empty property name"
+#: libcore/asobj/MovieClip_as.cpp:1522
+#, c-format
+msgid "MovieClip.lineStyle(%s): args after the first three will be discarded"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:956
-msgid "SharedObject::readSOL: premature end of input"
+#: libcore/asobj/MovieClip_as.cpp:1542
+#, c-format
+msgid ""
+"MovieClip.lineStyle(%s): invalid joinStylevalue '%s' (valid values: %s|%s|%s)"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:967
+#: libcore/asobj/MovieClip_as.cpp:1558
 #, c-format
-msgid "SharedObject: error parsing SharedObject '%s'"
+msgid ""
+"MovieClip.lineStyle(%s): invalid capStyle value '%s' (valid values: none|"
+"round|square)"
 msgstr ""
 
-#: libcore/asobj/SharedObject_as.cpp:986
+#: libcore/asobj/MovieClip_as.cpp:1583
 #, c-format
-msgid "readSOL: Reading SharedObject %s: %s"
+msgid ""
+"MovieClip.lineStyle(%s): invalid noScale value '%s' (valid values: %s|%s|%s|"
+"%s)"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:463
-msgid "Date constructor called with more than 7 arguments"
+#: libcore/asobj/MovieClip_as.cpp:1631
+msgid "MovieClip.curveTo() takes four args"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:723
-msgid "Date.setTime needs one argument"
+#: libcore/asobj/MovieClip_as.cpp:1672
+msgid "beginFill() with no args is a no-op"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:743
-msgid "Date.setTime was called with more than one argument"
+#: libcore/asobj/MovieClip_as.cpp:1716
+#, c-format
+msgid "%s.beginGradientFill(%s): invalid call: 5 arguments needed"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:834
-msgid "Date.setFullYear needs one argument"
+#: libcore/asobj/MovieClip_as.cpp:1727
+#, c-format
+msgid "%s.beginGradientFill(%s): extra arguments invalidate call!"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:874
-msgid "Date.setYear needs one argument"
+#: libcore/asobj/MovieClip_as.cpp:1747
+#, c-format
+msgid ""
+"%s.beginGradientFill(%s): first arg must be 'radial', 'focal', or 'linear'"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:897
-msgid "Date.setYear was called with more than three arguments"
+#: libcore/asobj/MovieClip_as.cpp:1763
+#, c-format
+msgid ""
+"%s.beginGradientFill(%s): one or more of the args from 2nd to 5th don't cast "
+"to objects"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:928
+#: libcore/asobj/MovieClip_as.cpp:1777
 #, c-format
-msgid "Date.set%sMonth needs one argument"
+msgid ""
+"%s.beginGradientFill(%s): colors, alphas and ratios args don't have same "
+"length"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:961
+#: libcore/asobj/MovieClip_as.cpp:1929
 #, c-format
-msgid "Date.set%sMonth was called with more than three arguments"
+msgid "min/max bbox values in MovieClip.startDrag(%s) swapped, fixing"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:983
+#: libcore/asobj/MovieClip_as.cpp:1934
 #, c-format
-msgid "Date.set%sDate needs one argument"
+msgid "non-finite bbox values in MovieClip.startDrag(%s), took as zero"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:997
-#, c-format
-msgid "Date.set%sDate was called with more than one argument"
+#: libcore/asobj/MovieClip_as.cpp:2078
+msgid "Failed to construct flash.geom.Transform!"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1024
-#, c-format
-msgid "Date.set%sHours needs one argument"
+#: libcore/asobj/MovieClip_as.cpp:2096
+msgid "MovieClip.beginMeshFill"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1043
-#, c-format
-msgid "Date.set%sHours was called with more than four arguments"
+#: libcore/asobj/System_as.cpp:310
+msgid "System.security.allowDomain"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1069
-#, c-format
-msgid "Date.set%sMinutes needs one argument"
+#: libcore/asobj/System_as.cpp:321
+msgid "System.security.allowInsecureDomain"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1087 libcore/asobj/Date_as.cpp:1130
-#, c-format
-msgid "Date.set%sMinutes was called with more than three arguments"
+#: libcore/asobj/System_as.cpp:329
+msgid "System.security.loadPolicyFile"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1110
-#, c-format
-msgid "Date.set%sSeconds needs one argument"
+#: libcore/asobj/System_as.cpp:350
+msgid "System.showSettings"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1148
-#, c-format
-msgid "Date.set%sMilliseconds needs one argument"
+#: libcore/asobj/System_as.cpp:367
+msgid "System.exactSettings"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1165
-#, c-format
-msgid "Date.set%sMilliseconds was called with more than one argument"
+#: libcore/asobj/System_as.cpp:385
+msgid "System.useCodepage"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1227
-msgid "Date.UTC needs one argument"
+#: libcore/asobj/Function_as.cpp:105
+msgid "Function.apply() called with no args"
 msgstr ""
 
-#: libcore/asobj/Date_as.cpp:1251
-msgid "Date.UTC was called with more than 7 arguments"
+#: libcore/asobj/Function_as.cpp:129
+#, c-format
+msgid ""
+"Function.apply() got %d args, expected at most 2 -- discarding the ones in "
+"excess"
 msgstr ""
 
 #: libcore/asobj/Global_as.cpp:100
@@ -4492,411 +4545,443 @@ msgstr ""
 msgid "_global.enableDebugConsole"
 msgstr ""
 
-#: libcore/asobj/XMLNode_as.cpp:227
+#: libcore/asobj/flash/net/FileReferenceList_as.cpp:91
+#, c-format
+msgid "FileReferenceList(%s): %s"
+msgstr ""
+
+#: libcore/asobj/flash/net/FileReferenceList_as.cpp:92
+#: libcore/asobj/flash/net/FileReference_as.cpp:160
+#: libcore/asobj/flash/geom/Transform_as.cpp:357
+msgid "arguments discarded"
+msgstr ""
+
+#: libcore/asobj/flash/net/FileReference_as.cpp:159
+#, c-format
+msgid "FileReference(%s): %s"
+msgstr ""
+
+#: libcore/asobj/flash/geom/ColorTransform_as.cpp:365
+#, c-format
 msgid ""
-"XMLNode.insertBefore(): positional parameter is not a child of this node"
+"ColorTransform(%s): not enough arguments (need 8). Constructing with default "
+"values"
 msgstr ""
 
-#: libcore/asobj/XMLNode_as.cpp:596
-msgid "XMLNode::appendChild() needs at least one argument"
+#: libcore/asobj/flash/geom/ColorTransform_as.cpp:380
+#, c-format
+msgid "ColorTransform(%s): discarding extra arguments"
 msgstr ""
 
-#: libcore/asobj/XMLNode_as.cpp:605
-msgid "First argument to XMLNode::appendChild() is not an XMLNode"
+#: libcore/asobj/flash/geom/Matrix_as.cpp:184
+#, c-format
+msgid "Matrix.concat(%s): needs one argument"
 msgstr ""
 
-#: libcore/asobj/XMLNode_as.cpp:643
+#: libcore/asobj/flash/geom/Matrix_as.cpp:198
 #, c-format
-msgid "XMLNode.insertBefore(%s) needs at least two arguments"
+msgid "Matrix.concat(%s): needs a Matrix object"
 msgstr ""
 
-#: libcore/asobj/XMLNode_as.cpp:654
+#: libcore/asobj/flash/geom/Matrix_as.cpp:255
 #, c-format
-msgid "First argument to XMLNode.insertBefore(%s) is not an XMLNode"
+msgid "Matrix.createBox(%s): needs at least two arguments"
 msgstr ""
 
-#: libcore/asobj/XMLNode_as.cpp:665
+#: libcore/asobj/flash/geom/Matrix_as.cpp:314
 #, c-format
-msgid "Second argument to XMLNode.insertBefore(%s) is not an XMLNode"
+msgid "Matrix.createGradientBox(%s): needs at least two arguments"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:299
+#: libcore/asobj/flash/geom/Matrix_as.cpp:388
 #, c-format
-msgid "::pause(%d) called "
+msgid "Matrix.deltaTransformPoint(%s): needs one argument"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:355
-msgid "No NetConnection associated with this NetStream, won't play"
+#: libcore/asobj/flash/geom/Matrix_as.cpp:402
+#, c-format
+msgid "Matrix.deltaTransformPoint(%s): needs an object"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Matrix_as.cpp:421
+#: libcore/asobj/flash/geom/Matrix_as.cpp:747
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:471
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:545
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:603
+msgid "Failed to construct flash.geom.Point!"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Matrix_as.cpp:523
+#, c-format
+msgid "Matrix.rotate(%s): needs one argument"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Matrix_as.cpp:599
+#: libcore/asobj/flash/geom/Matrix_as.cpp:770
+#, c-format
+msgid "Matrix.translate(%s): needs two arguments"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Matrix_as.cpp:704
+#, c-format
+msgid "Matrix.translate(%s): needs one argument"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Matrix_as.cpp:717
+#, c-format
+msgid "Matrix.transformPoint(%s): needs an object"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Matrix_as.cpp:729
+#, c-format
+msgid "Matrix.transformPoint(%s): object must be a Point"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Point_as.cpp:119
+#: libcore/asobj/flash/geom/Point_as.cpp:190
+#: libcore/asobj/flash/geom/Point_as.cpp:238
+#: libcore/asobj/flash/geom/Point_as.cpp:323
+#, c-format
+msgid "%s: missing arguments"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Point_as.cpp:128
+#: libcore/asobj/flash/geom/Point_as.cpp:138
+#: libcore/asobj/flash/geom/Point_as.cpp:148
+#: libcore/asobj/flash/geom/Point_as.cpp:156
+#: libcore/asobj/flash/geom/Point_as.cpp:332
+#: libcore/asobj/flash/geom/Point_as.cpp:342
+#: libcore/asobj/flash/geom/Point_as.cpp:352
+#: libcore/asobj/flash/geom/Point_as.cpp:360
+#, c-format
+msgid "Point.add(%s): %s"
+msgstr ""
+
+#: libcore/asobj/flash/geom/Point_as.cpp:129
+#: libcore/asobj/flash/geom/Point_as.cpp:249
+#: libcore/asobj/flash/geom/Point_as.cpp:333
+msgid "arguments after first discarded"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:366
-msgid "NetConnection is not connected. Won't play."
+#: libcore/asobj/flash/geom/Point_as.cpp:139
+#: libcore/asobj/flash/geom/Point_as.cpp:343
+#: libcore/asobj/flash/geom/Point_as.cpp:532
+msgid "first argument doesn't cast to object"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:379
-#, c-format
-msgid "Couldn't load URL %s"
+#: libcore/asobj/flash/geom/Point_as.cpp:149
+msgid "first argument cast to object doesn't contain an 'x' member"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:386
-#, c-format
-msgid "Connecting to movie: %s"
+#: libcore/asobj/flash/geom/Point_as.cpp:157
+msgid "first argument cast to object doesn't contain an 'y' member"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:392
+#: libcore/asobj/flash/geom/Point_as.cpp:200
 #, c-format
-msgid "NetStream.play(%s): failed starting playback"
+msgid "Point.equals(%s): %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:415
-msgid "NetStream_as::initVideoDecoder: hot-plugging video consumer"
+#: libcore/asobj/flash/geom/Point_as.cpp:201
+#: libcore/asobj/flash/geom/Point_as.cpp:447
+msgid "First arg must be an object"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:420
+#: libcore/asobj/flash/geom/Point_as.cpp:211
+#: libcore/asobj/flash/geom/Point_as.cpp:457
 #, c-format
-msgid "NetStream: Could not create Video decoder: %s"
+msgid "Point.equals(%s): %s %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:444
-msgid "NetStream_as::initAudioDecoder: hot-plugging audio consumer"
+#: libcore/asobj/flash/geom/Point_as.cpp:212
+#: libcore/asobj/flash/geom/Point_as.cpp:458
+msgid "First arg must be an instance of"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:451
+#: libcore/asobj/flash/geom/Point_as.cpp:248
 #, c-format
-msgid "Could not create Audio decoder: %s"
+msgid "Point.normalize(%s): %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:477
-#, c-format
-msgid "Gnash could not get stream '%s' from NetConnection"
+#: libcore/asobj/flash/geom/Point_as.cpp:353
+msgid "first argument casted to object doesn't contain an 'x' member"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:487
-msgid "No Media handler registered, can't parse NetStream input"
+#: libcore/asobj/flash/geom/Point_as.cpp:361
+msgid "first argument casted to object doesn't contain an 'y' member"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:495
-msgid "Unable to create parser for NetStream input"
+#: libcore/asobj/flash/geom/Point_as.cpp:411
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:483
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:557
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:616
+#, c-format
+msgid "Attempt to set read-only property %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:520
+#: libcore/asobj/flash/geom/Point_as.cpp:426
+#: libcore/asobj/flash/geom/Point_as.cpp:436
+#: libcore/asobj/flash/geom/Point_as.cpp:446
 #, c-format
-msgid "%p.startPlayback: playHead position reset to 0"
+msgid "Point.distance(%s): %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:526
-msgid "Setting playStart status"
+#: libcore/asobj/flash/geom/Point_as.cpp:437
+msgid "arguments after first two discarded"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:544
-msgid "getDecodedVideoFrame: no parser available"
+#: libcore/asobj/flash/geom/Point_as.cpp:510
+#: libcore/asobj/flash/geom/Point_as.cpp:520
+#: libcore/asobj/flash/geom/Point_as.cpp:531
+#: libcore/asobj/flash/geom/Point_as.cpp:547
+#, c-format
+msgid "Point.interpolate(%s): %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:553
-#, c-format
-msgid ""
-"getDecodedVideoFrame(%d): no more video frames in input "
-"(nextVideoFrameTimestamp returned false, parsingComplete=%d)"
+#: libcore/asobj/flash/geom/Point_as.cpp:521
+msgid "arguments after first three discarded"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:564
-msgid ""
-"getDecodedVideoFrame setting playStop status (parsing complete and "
-"nextVideoFrameTimestamp() returned false)"
+#: libcore/asobj/flash/geom/Point_as.cpp:548
+msgid "second argument doesn't cast to object"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:575
+#: libcore/asobj/flash/geom/Point_as.cpp:595
+#: libcore/asobj/flash/geom/Point_as.cpp:604
 #, c-format
-msgid "%p.getDecodedVideoFrame(%d): next video frame is in the future (%d)"
+msgid "Point.polar(%s): %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:586
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:153
 #, c-format
-msgid ""
-"nextVideoFrameTimestamp returned true (%d), but decodeNextVideoFrame "
-"returned null, I don't think this should ever happen"
+msgid "flash.geom.Rectangle(%s): %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:596
-#, c-format
-msgid ""
-"%p.getDecodedVideoFrame(%d): last video frame decoded (should set playback "
-"status to STOP?)"
+#: libcore/asobj/flash/geom/Transform_as.cpp:122
+#: libcore/asobj/flash/geom/Transform_as.cpp:198
+msgid "Failed to construct flash.geom.ColorTransform!"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:604
+#: libcore/asobj/flash/geom/Transform_as.cpp:145
 #, c-format
-msgid ""
-"%p.getDecodedVideoFrame(%d): next video frame is in the future, we'll return "
-"this one"
+msgid "Transform.colorTransform(%s): extra arguments discarded"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:622
-msgid "decodeNextVideoFrame: no parser available"
+#: libcore/asobj/flash/geom/Transform_as.cpp:155
+#, c-format
+msgid "Transform.colorTransform(%s): argument is not an object"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:629
+#: libcore/asobj/flash/geom/Transform_as.cpp:170
 #, c-format
-msgid "%p.decodeNextVideoFrame(): no more video frames in input"
+msgid "Transform.colorTransform(%s): argument is not a ColorTransform"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:645
-msgid "Error decoding encoded video frame in NetStream input"
+#: libcore/asobj/flash/geom/Transform_as.cpp:236
+msgid "Failed to construct flash.geom.Matrix!"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:659
+#: libcore/asobj/flash/geom/Transform_as.cpp:305
 #, c-format
-msgid "%p.decodeNextAudioFrame: no more video frames in input"
+msgid "Transform.matrix(%s): extra arguments discarded"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:688
+#: libcore/asobj/flash/geom/Transform_as.cpp:315
 #, c-format
-msgid ""
-"NetStream_as::decodeNextAudioFrame: %d bytes of encoded audio decoded to %d "
-"bytes"
+msgid "Transform.matrix(%s): argument is not an object"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:708
+#: libcore/asobj/flash/geom/Transform_as.cpp:346
 #, c-format
-msgid "NetStream_as::seek(%d): no parser, no party"
+msgid "flash.geom.Transform(%s): needs one argument"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:728
-msgid "Setting invalidTime status"
+#: libcore/asobj/flash/geom/Transform_as.cpp:356
+#, c-format
+msgid "Transform(%s): %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:735
+#: libcore/asobj/flash/external/ExternalInterface_as.cpp:292
 #, c-format
-msgid "_parser->seek(%d) returned %d"
+msgid "VAL: %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:742
+#: libcore/asobj/flash/external/ExternalInterface_as.cpp:343
 #, c-format
-msgid "%p.seek: playHead position set to %d"
+msgid ""
+"ExternalInterface path %s is outside the SWF domain %s. Cannot access this "
+"object."
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:778
-#, c-format
+#: libcore/asobj/flash/display/BitmapData_as.cpp:816
 msgid ""
-"%p.refreshAudioBuffer: doing nothing as playhead is paused - bufferLength=%d/"
-"%d"
+"BitmapData.copyChannel(). Multiple destination channels are not supported"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:787
-#, c-format
+#: libcore/asobj/flash/display/BitmapData_as.cpp:842
 msgid ""
-"%p.refreshAudioBuffer: doing nothing as current position was already decoded "
-"- bufferLength=%d/%d"
+"BitmapData.copyChannel(): no part of source rectangleoverlaps with the "
+"source BitmapData"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:799
-#, c-format
+#: libcore/asobj/flash/display/BitmapData_as.cpp:856
 msgid ""
-"%p.refreshAudioBuffer: currentPosition=%d, playHeadState=%d, bufferLength="
-"%d, bufferTime=%d"
+"BitmapData.copyChannel(): destination area is wholly outside the destination "
+"BitmapData"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:935
-#, c-format
-msgid "%p.pushDecodedAudioFrames(%d) : buffer overrun (%d/%d)."
+#: libcore/asobj/flash/display/BitmapData_as.cpp:914
+msgid "BitmapData.copyPixels(): arguments after the first three are discarded"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:951
-#, c-format
+#: libcore/asobj/flash/display/BitmapData_as.cpp:964
 msgid ""
-"%p.pushDecodedAudioFrames(%d): no more audio frames in input "
-"(nextAudioFrameTimestamp returned false, parsingComplete=%d)"
+"BitmapData.copyPixels(): no part of source rectangleoverlaps with the source "
+"BitmapData"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:962
+#: libcore/asobj/flash/display/BitmapData_as.cpp:978
 msgid ""
-"pushDecodedAudioFrames setting playStop status (parsing complete and "
-"nextAudioFrameTimestamp returned false)"
+"BitmapData.copyPixels(): destination area is wholly outside the destination "
+"BitmapData"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:975
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1064
 #, c-format
-msgid "%p.pushDecodedAudioFrames(%d): next audio frame is in the future (%d)"
+msgid "BitmapData.draw(%s) requires at least one argument"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:988
-#, c-format
-msgid ""
-"nextAudioFrameTimestamp returned true (%d), but decodeNextAudioFrame "
-"returned null, I don't think this should ever happen"
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1076
+msgid "BitmapData.draw() with BitmapData argument"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:997
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1083
 #, c-format
-msgid "pushDecodedAudioFrames(%d): Decoded audio frame contains no samples"
+msgid "BitmapData.draw(%s): first argument must be a MovieClip"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1006
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1124
 #, c-format
-msgid "pushDecodedAudioFrames(%d) pushing %dth frame with timestamp %d"
+msgid "BitmapData.fillRect(%s): needs an object"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1024
-msgid "resuming playback clock on audio consume"
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1161
+msgid "floodFill called on disposed BitmapData!"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1090
-#, c-format
-msgid ""
-"%p.refreshVideoFrame: doing nothing as playhead is paused - bufferLength=%d, "
-"bufferTime=%d"
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1235
+msgid "getPixel32 called on disposed BitmapData!"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1100
-#, c-format
-msgid ""
-"%p.refreshVideoFrame: doing nothing as current position was already decoded "
-"- bufferLength=%d, bufferTime=%d"
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1365
+msgid "BitmapData.perlinNoise() stitch value"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1112
-#, c-format
-msgid ""
-"%p.refreshVideoFrame: currentPosition=%d, playHeadState=%d, bufferLength=%d, "
-"bufferTime=%d"
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1566
+msgid "Failed to construct flash.geom.Rectangle!"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1126
-#, c-format
-msgid ""
-"%p.refreshVideoFrame(): no more video frames to decode (DEC_STOPPED, null "
-"from getDecodedVideoFrame)"
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1588
+msgid "BitmapData.loadBitmap requires one argument"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1135
-#, c-format
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1653
 msgid ""
-"%p.refreshVideoFrame(): last video frame was good enough for current position"
+"BitmapData constructor requires at least two arguments. Will not construct a "
+"BitmapData"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1210
-#, c-format
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1667
 msgid ""
-"%p.advance: buffer empty while decoding, setting buffer to buffering and "
-"pausing playback clock"
-msgstr ""
-
-#: libcore/asobj/NetStream_as.cpp:1215
-msgid "Setting bufferEmpty status"
-msgstr ""
-
-#: libcore/asobj/NetStream_as.cpp:1224
-#, c-format
-msgid "%p.advance : bufferLength=%d, parsing completed"
-msgstr ""
-
-#: libcore/asobj/NetStream_as.cpp:1236
-#, c-format
-msgid "%p.advance: buffering - position=%d, buffer=%d/%d"
+"BitmapData width and height must be between 1 and 2880. Will not construct a "
+"BitmapData"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1255
+#: libcore/asobj/NetConnection_as.cpp:455
 #, c-format
-msgid ""
-"%p.advance: buffer full (or parsing completed), resuming playback clock - "
-"position=%d, buffer=%d/%d"
+msgid "Gnash is not allowed to open this URL: %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1276
+#: libcore/asobj/NetConnection_as.cpp:525
 #, c-format
-msgid "%p.advance: playHead position set to timestamp of first frame: %d"
+msgid "Gnash is not allowed to connect to %s"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1283
+#: libcore/asobj/NetConnection_as.cpp:546
 #, c-format
-msgid ""
-"%p.advance: playHead position is 0 and parser still doesn't have a frame to "
-"set it to"
+msgid "NetConnection.connect(%s): unsupported connection protocol"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1323
+#: libcore/asobj/NetConnection_as.cpp:552
 #, c-format
-msgid ""
-"Moving NetStream playhead from timestamp %d to timestamp %d as there are no "
-"video frames yet, audio buffer is empty and next audio frame timestamp is "
-"there (see bug #26687)"
+msgid "NetConnection.connect(%s): unknown connection protocol"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1424
-msgid "attachAuxStreamer called while already attached"
+#: libcore/asobj/NetConnection_as.cpp:598
+#: libcore/asobj/NetConnection_as.cpp:617
+msgid "NetConnection.call: can't call while not connected"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1435
-#, c-format
-msgid "Could not attach NetStream aux streamer to sound handler: %s"
+#: libcore/asobj/NetConnection_as.cpp:723
+msgid "NetConnection.call(): needs at least one argument"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1566
+#: libcore/asobj/NetConnection_as.cpp:746
 #, c-format
-msgid ""
-"First argument to NetStream constructor doesn't cast to a NetConnection (%s)"
+msgid "NetConnection.call(%s): second argument must be an object"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1612
-msgid "NetStream_as play needs args"
+#: libcore/asobj/NetConnection_as.cpp:836
+msgid "NetConnection.connect(): needs at least one argument"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1619
+#: libcore/asobj/NetConnection_as.cpp:858
 #, c-format
-msgid "NetStream.play(%s): stream is not connected"
-msgstr ""
-
-#: libcore/asobj/NetStream_as.cpp:1668
-msgid "NetStream.attachAudio"
-msgstr ""
-
-#: libcore/asobj/NetStream_as.cpp:1679
-msgid "NetStream.attachVideo"
-msgstr ""
-
-#: libcore/asobj/NetStream_as.cpp:1690
-msgid "NetStream.publish"
+msgid "NetConnection.connect(%s): args after the first are not supported"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1701
-msgid "NetStream.receiveAudio"
+#: libcore/asobj/NetConnection_as.cpp:873
+msgid "NetConnection.addHeader()"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1712
-msgid "NetStream.receiveVideo"
+#: libcore/asobj/NetConnection_as.cpp:957
+msgid "Invoke buffer too short"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1723
-msgid "NetStream.send"
+#: libcore/asobj/NetConnection_as.cpp:964
+msgid "Invoke argument not present"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1807
-msgid "NetStream.liveDelay"
+#: libcore/asobj/NetConnection_as.cpp:1055
+#, c-format
+msgid "Unknown HTTP Remoting response identifier '%s'"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1859
-msgid "Invalid AMF data in FLV tag"
+#: libcore/asobj/NetConnection_as.cpp:1071
+#, c-format
+msgid "Unsupported HTTP Remoting response callback: '%s' (size %d)"
 msgstr ""
 
-#: libcore/asobj/NetStream_as.cpp:1870
-msgid "Could not convert FLV metatag to as_value, passing undefined"
+#: libcore/asobj/NetConnection_as.cpp:1220
+#, c-format
+msgid "Error parsing server AMF: %s"
 msgstr ""
 
-#: libcore/asobj/Number_as.cpp:78
+#: libcore/asobj/NetConnection_as.cpp:1267
 #, c-format
-msgid "Number.toString(%s): radix must be in the 2..36 range (%d is invalid)"
+msgid "Could not serialize NetConnection.call argument %d"
 msgstr ""
 
-#: libcore/asobj/TextSnapshot_as.cpp:521
-msgid "TextSnapshot.findText() requires 3 arguments"
+#: libcore/asobj/NetConnection_as.cpp:1295
+msgid "Sanity failed. no string method in invoke packet"
 msgstr ""
 
-#: libcore/asobj/TextSnapshot_as.cpp:545
-msgid "TextSnapshot.getCount() takes no arguments"
+#: libcore/asobj/NetConnection_as.cpp:1342
+msgid "Server called _onbwcheck without a callback"
 msgstr ""
 
-#: libcore/asobj/TextSnapshot_as.cpp:601
-msgid "TextSnapshot.getText requires exactly 2 arguments"
+#: libcore/asobj/NetConnection_as.cpp:1372
+msgid "RTMP server sent error"
 msgstr ""
 
 #: libcore/asobj/XMLSocket_as.cpp:268
@@ -4919,1930 +5004,1946 @@ msgstr ""
 msgid "XMLSocket.send() needs at least one argument"
 msgstr ""
 
-#: libcore/asobj/AsBroadcaster.cpp:233
-msgid "AsBroadcaster.initialize() requires one argument, none given"
-msgstr ""
-
-#: libcore/asobj/AsBroadcaster.cpp:243
-#, c-format
-msgid "AsBroadcaster.initialize(%s): first arg is not an object"
-msgstr ""
-
-#: libcore/asobj/AsBroadcaster.cpp:252
-#, c-format
+#: libcore/LineStyle.cpp:186
 msgid ""
-"AsBroadcaster.initialize(%s): first arg is an object but doesn't cast to one "
-"(dangling DisplayObject ref?)"
+"UNTESTED: Do not know how to interpolate line styles with different vertical "
+"thickness scaling"
 msgstr ""
 
-#: libcore/asobj/AsBroadcaster.cpp:282 libcore/asobj/AsBroadcaster.cpp:327
-#: libcore/asobj/AsBroadcaster.cpp:393
-#, c-format
-msgid "%p.addListener(%s): this object has no _listeners member"
+#: libcore/LineStyle.cpp:191
+msgid ""
+"UNTESTED: Do not know how to interpolate line styles with different "
+"horizontal thickness scaling"
 msgstr ""
 
-#: libcore/asobj/AsBroadcaster.cpp:293 libcore/asobj/AsBroadcaster.cpp:338
-#: libcore/asobj/AsBroadcaster.cpp:404
+#: libcore/SWFMovie.cpp:54
 #, c-format
-msgid "%p.addListener(%s): this object's _listener isn't an object: %s"
+msgid "Frame %d never loaded. Total frames: %d"
 msgstr ""
 
-#: libcore/asobj/AsBroadcaster.cpp:415
+#: libcore/SWFMovie.cpp:77
 #, c-format
-msgid "%p.broadcastMessage() needs an argument"
+msgid "Frame %d never loaded. Total frames: %d."
 msgstr ""
 
-#: libcore/asobj/TextFormat_as.cpp:406
+#: libcore/SWFMovie.cpp:109
 #, c-format
-msgid "Too many args (%d) passed to TextFormat"
+msgid ""
+"Attempt to perform initialized for a character %s that does not exist "
+"(either not exported or not defined)"
 msgstr ""
 
-#: libcore/asobj/TextFormat_as.cpp:483
-msgid "Getter for textformat_tabStops"
+#: libcore/swf/StreamSoundBlockTag.cpp:77
+msgid "Found SOUNDSTREAMBLOCK tag w/out preceding SOUNDSTREAMHEAD"
 msgstr ""
 
-#: libcore/asobj/TextFormat_as.cpp:562
-msgid "TextFormat.getTextExtent requires at least one argument"
+#: libcore/swf/StreamSoundBlockTag.cpp:113
+msgid "Tag boundary reported past end of stream!"
 msgstr ""
 
-#: libcore/asobj/TextFormat_as.cpp:726
+#: libcore/swf/DefaultTagLoaders.cpp:94
 #, c-format
-msgid "Uknown alignment value: %d, take as left"
+msgid ""
+"Undocumented tag %s encountered. Please report this to the Gnash developers!"
 msgstr ""
 
-#: libcore/asobj/TextFormat_as.cpp:741
+#: libcore/swf/RemoveObjectTag.cpp:71
 #, c-format
-msgid "Unknown display value: %d "
+msgid "  remove_object_2(%d)"
 msgstr ""
 
-#: libcore/asobj/Color_as.cpp:153
-msgid "Color.setRGB() : missing argument"
+#: libcore/swf/DefineButtonCxformTag.cpp:49
+#, c-format
+msgid "DefineButtonCxform refers to an unknown DisplayObject %d"
 msgstr ""
 
-#: libcore/asobj/Color_as.cpp:186
-msgid "Color.setTransform() : missing argument"
+#: libcore/swf/DefineButtonCxformTag.cpp:60
+#, c-format
+msgid ""
+"DefineButtonCxform refers to DisplayObject ID %d (%s). Expected a button "
+"definition"
 msgstr ""
 
-#: libcore/asobj/Color_as.cpp:196
+#: libcore/swf/DefineTextTag.cpp:52
 #, c-format
-msgid "Color.setTransform(%s) : first argument doesn't cast to an object"
+msgid "DefineTextTag, id = %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:279
-msgid "Attempting to write to disabled LocalConnection!"
+#: libcore/swf/DefineTextTag.cpp:93
+#, c-format
+msgid "Text DisplayObject, id = %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:288
-msgid "Failed to attach shared memory segment"
+#: libcore/swf/DefineTextTag.cpp:112
+#, c-format
+msgid "begin text records for DefineTextTag %p"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:296
-msgid "Failed to get shm lock"
+#: libcore/swf/ShapeRecord.cpp:278
+msgid "Invalid fill style %1% in style change record - %2% defined. Set to 0."
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:332
-msgid "Invalid connection name data"
+#: libcore/swf/ShapeRecord.cpp:313
+#, c-format
+msgid "  bound SWFRect: %s"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:431
-msgid "Failed to get lock on shared memory! Will not remove listener"
+#: libcore/swf/ShapeRecord.cpp:340
+#, c-format
+msgid "  ShapeRecord(%s): fillbits %d, linebits %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:461
-msgid "Failed to open shared memory segment"
+#: libcore/swf/ShapeRecord.cpp:418
+#, c-format
+msgid "  Shape read: moveto %d %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:534
-msgid "LocalConnection.connect() expects exactly 1 argument"
+#: libcore/swf/ShapeRecord.cpp:437
+#, c-format
+msgid "  Shape read: fill0 (left) = %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:542
-msgid "LocalConnection.connect(): first argument must be a string"
+#: libcore/swf/ShapeRecord.cpp:456
+#, c-format
+msgid "  Shape read: fill1 (right) = %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:587
-#: libcore/asobj/LocalConnection_as.cpp:599
-#: libcore/asobj/LocalConnection_as.cpp:612
+#: libcore/swf/ShapeRecord.cpp:475
 #, c-format
-msgid "LocalConnection.send(%s): requires at least 2 arguments"
+msgid "ShapeRecord: line %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:783
-msgid "No space for listener in shared memory!"
+#: libcore/swf/ShapeRecord.cpp:489
+msgid "ShapeRecord: more fill styles"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:844
+#: libcore/swf/ShapeRecord.cpp:525
 #, c-format
-msgid "Invalid domain %s"
+msgid "ShapeRecord: curved edge %d %d - %d %d - %d %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:851
+#: libcore/swf/ShapeRecord.cpp:559
 #, c-format
-msgid "Invalid function name %s"
+msgid "ShapeRecord: straight edge %d %d - %d %d"
 msgstr ""
 
-#: libcore/asobj/LocalConnection_as.cpp:877
-msgid "Fewer AMF fields than expected."
+#: libcore/swf/ShapeRecord.cpp:613
+msgid "  fill styles: %1%"
 msgstr ""
 
-#: libcore/asobj/Microphone_as.cpp:252
-msgid "No MediaHandler exists! Cannot create a Microphone object"
+#: libcore/swf/ShapeRecord.cpp:622
+msgid "  Read fill: %1%"
 msgstr ""
 
-#: libcore/asobj/Microphone_as.cpp:284
-msgid "Microphone.gain(): wrong number of parameters passed"
+#: libcore/swf/ShapeRecord.cpp:636
+#, c-format
+msgid "  readLineStyles: count = %d"
 msgstr ""
 
-#: libcore/asobj/Microphone_as.cpp:300
-msgid "Microphone.setRate: wrong number of parameters passed"
+#: libcore/swf/ShapeRecord.cpp:643
+#, c-format
+msgid "  readLineStyles: count2 = %d"
 msgstr ""
 
-#: libcore/asobj/Microphone_as.cpp:313
-msgid "Microphone::activityLevel only has default value (-1)"
+#: libcore/swf/DefineButtonTag.cpp:85
+#, c-format
+msgid "  DefineButton loader: character id = %d"
 msgstr ""
 
-#: libcore/asobj/Microphone_as.cpp:318
-msgid "Attempt to set activity property of Microphone"
+#: libcore/swf/DefineButtonTag.cpp:102
+#, c-format
+msgid "  DefineButton2 loader: chararacter id = %d"
 msgstr ""
 
-#: libcore/asobj/Microphone_as.cpp:353
-msgid "Microphone::muted is always false (always allows access)"
+#: libcore/swf/DefineButtonTag.cpp:134
+msgid "Premature end of DEFINEBUTTON tag, won't read actions"
 msgstr ""
 
-#: libcore/asobj/Microphone_as.cpp:413
-msgid "Microphone::silenceTimeout can be set, but is unimplemented"
+#: libcore/swf/DefineButtonTag.cpp:170
+#, c-format
+msgid "Next Button2 actionOffset (%u) points past the end of tag (%lu)"
 msgstr ""
 
-#: libcore/asobj/Microphone_as.cpp:436
+#: libcore/swf/DefineButtonTag.cpp:211
 #, c-format
-msgid "%s: Too many arguments"
+msgid ""
+"Next action offset (%u) in Button2ActionConditions points past the end of tag"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:176
-msgid "XML.addRequestHeader: XML._customHeaders is not an object"
+#: libcore/swf/DefineButtonTag.cpp:276
+msgid "Premature end of button action input: can't read conditions"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:193
-msgid "XML.addRequestHeader requires at least one argument"
+#: libcore/swf/DefineButtonTag.cpp:286
+#, c-format
+msgid "   button actions for conditions 0x%x"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:206
-msgid "XML.addRequestHeader: single argument is not an array"
+#: libcore/swf/DefineButtonTag.cpp:359
+msgid "   premature end of button record input stream, can't read flags"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:222
+#: libcore/swf/DefineButtonTag.cpp:380
+msgid ""
+"   premature end of button record input stream, can't read DisplayObject id"
+msgstr ""
+
+#: libcore/swf/DefineButtonTag.cpp:395
 #, c-format
-msgid "XML.addRequestHeader(%s): arguments after the second will be discarded"
+msgid ""
+"   button record for states [%s] refer to DisplayObject with id %d, which is "
+"not found in the chars dictionary"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:237
+#: libcore/swf/DefineButtonTag.cpp:402
 #, c-format
-msgid "XML.addRequestHeader(%s): both arguments must be a string"
+msgid "   button record for states [%s] contain DisplayObject %d (%s)"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:304
-msgid "sendAndLoad() requires at least two arguments"
+#: libcore/swf/DefineButtonTag.cpp:410
+msgid ""
+"   premature end of button record input stream, can't read button layer "
+"(depth?)"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:312
-msgid "sendAndLoad(): invalid empty URL"
+#: libcore/swf/VideoFrameTag.cpp:47
+#, c-format
+msgid "VideoFrame tag refers to unknown video stream id %d"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:319
-msgid "sendAndLoad(): invalid target (must be an XML or LoadVars object)"
+#: libcore/swf/VideoFrameTag.cpp:57
+#, c-format
+msgid "VideoFrame tag refers to a non-video DisplayObject %d (%s)"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:397
+#: libcore/swf/VideoFrameTag.cpp:90
+msgid ""
+"Could not read enough bytes when parsing VideoFrame tag. Perhaps we reached "
+"the end of the stream!"
+msgstr ""
+
+#: libcore/swf/StartSoundTag.cpp:56
 #, c-format
-msgid "Loading from URL: '%s'"
+msgid "start_sound_loader: sound_id %d is not defined"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:417
-msgid "load() requires at least one argument"
+#: libcore/swf/StartSoundTag.cpp:64
+#, c-format
+msgid "StartSound: id=%d"
 msgstr ""
 
-#: libcore/asobj/LoadableObject.cpp:426
-msgid "load(): invalid empty URL"
+#: libcore/swf/StartSoundTag.cpp:116
+msgid "STARTSOUND2 tag not parsed and not used"
 msgstr ""
 
-#: libcore/DisplayObjectContainer.cpp:75
-msgid "Children"
+#: libcore/swf/DefineButtonSoundTag.cpp:52
+#, c-format
+msgid "DEFINEBUTTONSOUND refers to an unknown DisplayObject def %d"
 msgstr ""
 
-#: libcore/DisplayList.cpp:305
+#: libcore/swf/DefineButtonSoundTag.cpp:63
 #, c-format
-msgid "moveDisplayObject() -- can't find object at depth %d"
+msgid ""
+"DEFINEBUTTONSOUND refers to DisplayObject id %d, a %s (expected a button "
+"DisplayObject)"
 msgstr ""
 
-#: libcore/DisplayList.cpp:312
-msgid "Request to move an unloaded DisplayObject"
+#: libcore/swf/DefineButtonSoundTag.cpp:73
+msgid "Attempt to redefine button sound ignored"
 msgstr ""
 
-#: libcore/DisplayList.cpp:380
+#: libcore/swf/DefineButtonSoundTag.cpp:99
 #, c-format
-msgid "%s.swapDepth(%d) : ignored call with target depth less then %d"
+msgid "sound tag not found, sound_id=%d, button state #=%i"
 msgstr ""
 
-#: libcore/DisplayList.cpp:404
-msgid ""
-"First argument to DisplayList::swapDepth() is NOT a DisplayObject in the "
-"list. Call ignored."
+#: libcore/swf/DefineShapeTag.cpp:58
+#, c-format
+msgid "DefineShapeTag(%s): id = %d"
+msgstr ""
+
+#: libcore/swf/DefineFontTag.cpp:60
+msgid "reading code table at offset %1%, %2% glyphs"
 msgstr ""
 
-#: libcore/DisplayList.cpp:875
-#, c-format
-msgid ""
-"mergeDisplayList: DisplayObject %s (%s at depth %d [%d]) about to be "
-"discarded in given display list is not marked as unloaded and not found in "
-"the merged current displaylist"
+#: libcore/swf/DefineFontTag.cpp:120
+msgid "reading DefineFont"
 msgstr ""
 
-#: libcore/Geometry.cpp:198
-msgid "Collision detection for unidirectionally scaled strokes"
+#: libcore/swf/DefineFontTag.cpp:157
+msgid "Glyphs offset table corrupted in DefineFont tag"
+msgstr ""
+
+#: libcore/swf/DefineFontTag.cpp:172
+msgid "reading DefineFont2 or DefineFont3"
 msgstr ""
 
-#: libcore/TextField.cpp:234
+#: libcore/swf/DefineFontTag.cpp:225 libcore/swf/DefineFontTag.cpp:237
 #, c-format
-msgid "FIXME: attempt to remove a TextField being a child of a %s"
+msgid "Glyph %d at offset %u"
 msgstr ""
 
-#: libcore/TextField.cpp:413 libcore/TextField.cpp:423
-#: libcore/TextField.cpp:441 libcore/TextField.cpp:456
-msgid "invalid restrict string"
+#: libcore/swf/DefineFontTag.cpp:254
+msgid "Glyphs offset table corrupted in DefineFont2/3 tag"
 msgstr ""
 
-#: libcore/TextField.cpp:965
-#, c-format
-msgid ""
-"TextField: missing glyph for space char (needed for TAB). Make sure "
-"DisplayObject shapes for font %s are being exported into your SWF file."
+#: libcore/swf/DefineFontTag.cpp:266
+msgid "Bad offset in DefineFont2"
 msgstr ""
 
-#: libcore/TextField.cpp:1044
-msgid "No font for TextField!"
+#: libcore/swf/DefineFontTag.cpp:325
+msgid "Repeated kerning pair found - ignoring"
 msgstr ""
 
-#: libcore/TextField.cpp:1444
+#: libcore/swf/DefineFontTag.cpp:344
 #, c-format
-msgid "Unexpected value '%s' in TextField font color attribute"
+msgid "DefineFontInfo tag loader: can't find font with id %d"
 msgstr ""
 
-#: libcore/TextField.cpp:1459
-msgid "Expected a font name in FACE attribute."
+#: libcore/swf/DefineFontTag.cpp:352
+msgid "DefineFontInfo2 partially implemented"
 msgstr ""
 
-#: libcore/TextField.cpp:1513
-msgid "<img> HTML tag in TextField"
+#: libcore/swf/CSMTextSettingsTag.cpp:77
+#, c-format
+msgid ""
+"  CSMTextSettings: TextID=%d, FlashType=%d, GridFit=%d, Thickness=%d, "
+"Sharpness=%d"
 msgstr ""
 
-#: libcore/TextField.cpp:1551
-msgid "<span> HTML tag in TextField"
+#: libcore/swf/CSMTextSettingsTag.cpp:85
+msgid "CSMTextSettings"
 msgstr ""
 
-#: libcore/TextField.cpp:1623
-msgid "HTML <textformat> tag tabstops attribute"
+#: libcore/swf/PlaceObject2Tag.cpp:85
+#, c-format
+msgid "  PLACEOBJECT: depth=%d(%d) char=%d"
 msgstr ""
 
-#: libcore/TextField.cpp:1706
+#: libcore/swf/PlaceObject2Tag.cpp:89 libcore/swf/PlaceObject2Tag.cpp:319
 #, c-format
-msgid ""
-"TextField: missing embedded glyph for char %d. Make sure DisplayObject "
-"shapes for font %s are being exported into your SWF file"
+msgid "  SWFCxForm: %s"
 msgstr ""
 
-#: libcore/TextField.cpp:1714
+#: libcore/swf/PlaceObject2Tag.cpp:105
 #, c-format
-msgid ""
-"TextField: missing device glyph for char %d. Maybe you don't have font '%s' "
-"installed in your system."
+msgid "Reserved field in PlaceObject actions == %u (expected 0)"
 msgstr ""
 
-#: libcore/TextField.cpp:1905
+#: libcore/swf/PlaceObject2Tag.cpp:123
 #, c-format
-msgid ""
-"Current environment has no target, can't bind VariableName (%s) associated "
-"to text field. Gnash will try to register again on next access."
+msgid "  actions: flags = 0x%X"
 msgstr ""
 
-#: libcore/TextField.cpp:1931
+#: libcore/swf/PlaceObject2Tag.cpp:158
 #, c-format
 msgid ""
-"VariableName associated to text field refers to an unknown target (%s). It "
-"is possible that the DisplayObject will be instantiated later in the SWF "
-"stream. Gnash will try to register again on next access."
+"swf_event::read(), even_length = %u, but only %lu bytes left to the end of "
+"current tag. Breaking for safety."
 msgstr ""
 
-#: libcore/TextField.cpp:2024 libcore/TextField.cpp:2058
-#: libcore/TextField.cpp:2149
-msgid "invalid HTML tag"
+#: libcore/swf/PlaceObject2Tag.cpp:169
+msgid "swf_event::read(), event_length = 0 (empty). Skipping."
 msgstr ""
 
-#: libcore/TextField.cpp:2035 libcore/TextField.cpp:2071
-#: libcore/TextField.cpp:2102
-msgid "found NULL character in htmlText"
+#: libcore/swf/PlaceObject2Tag.cpp:227
+#, c-format
+msgid ""
+"swf_event::read() -- unknown / unhandled event type received, flags = 0x%x"
 msgstr ""
 
-#: libcore/TextField.cpp:2075
-msgid "malformed HTML tag, invalid attribute name"
+#: libcore/swf/PlaceObject2Tag.cpp:256
+msgid "Unexpected end of tag while parsing PlaceObject tag events"
 msgstr ""
 
-#: libcore/TextField.cpp:2125
-msgid "malformed HTML tag, invalid attribute value"
+#: libcore/swf/PlaceObject2Tag.cpp:312
+#, c-format
+msgid "  PLACEOBJECT2: depth = %d (%d)"
 msgstr ""
 
-#: libcore/TextField.cpp:2158
-msgid "I declare this a HTML syntax error"
+#: libcore/swf/PlaceObject2Tag.cpp:314 libcore/swf/PlaceObject2Tag.cpp:427
+#, c-format
+msgid "  char id = %d"
 msgstr ""
 
-#: libcore/SWFMovie.cpp:54
+#: libcore/swf/PlaceObject2Tag.cpp:316 libcore/swf/PlaceObject2Tag.cpp:428
 #, c-format
-msgid "Frame %d never loaded. Total frames: %d"
+msgid "  SWFMatrix: %s"
 msgstr ""
 
-#: libcore/SWFMovie.cpp:77
+#: libcore/swf/PlaceObject2Tag.cpp:321 libcore/swf/PlaceObject2Tag.cpp:430
 #, c-format
-msgid "Frame %d never loaded. Total frames: %d."
+msgid "  ratio: %d"
 msgstr ""
 
-#: libcore/SWFMovie.cpp:109
+#: libcore/swf/PlaceObject2Tag.cpp:322 libcore/swf/PlaceObject2Tag.cpp:431
 #, c-format
-msgid ""
-"Attempt to perform initialized for a character %s that does not exist "
-"(either not exported or not defined)"
+msgid "  name = %s"
 msgstr ""
 
-#: libcore/LineStyle.cpp:186
-msgid ""
-"UNTESTED: Do not know how to interpolate line styles with different vertical "
-"thickness scaling"
+#: libcore/swf/PlaceObject2Tag.cpp:324 libcore/swf/PlaceObject2Tag.cpp:433
+#, c-format
+msgid "  clip_depth = %d (%d)"
 msgstr ""
 
-#: libcore/LineStyle.cpp:191
-msgid ""
-"UNTESTED: Do not know how to interpolate line styles with different "
-"horizontal thickness scaling"
+#: libcore/swf/PlaceObject2Tag.cpp:327 libcore/swf/PlaceObject2Tag.cpp:436
+#, c-format
+msgid " m_place_type: %d"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:121
+#: libcore/swf/PlaceObject2Tag.cpp:425
 #, c-format
-msgid "loadMovie against a %s DisplayObject"
+msgid "  PLACEOBJECT3: depth = %d (%d)"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:258
-msgid "blendMode"
+#: libcore/swf/PlaceObject2Tag.cpp:429
+#, c-format
+msgid "  SWFCxForm: %d"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:368
+#: libcore/swf/PlaceObject2Tag.cpp:432
 #, c-format
-msgid "Setting _height=%g of DisplayObject %s (%s)"
+msgid "  class name = %s"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:796
-msgid "yes"
+#: libcore/swf/PlaceObject2Tag.cpp:435
+msgid "   bitmapCaching enabled"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:797
-msgid "no"
+#: libcore/swf/TextRecord.cpp:52
+msgid "end text records"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:803
-msgid "Depth"
+#: libcore/swf/TextRecord.cpp:78
+#, c-format
+msgid "  has_font: font id = %d (%p)"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:809
-msgid "Ratio"
+#: libcore/swf/TextRecord.cpp:90
+msgid "  hasColor"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:819
-msgid "Clipping depth"
+#: libcore/swf/TextRecord.cpp:99
+#, c-format
+msgid "  xOffset = %g"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:824
-msgid "Dimensions"
+#: libcore/swf/TextRecord.cpp:108
+#, c-format
+msgid "  yOffset = %g"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:826
-msgid "Dynamic"
+#: libcore/swf/TextRecord.cpp:117
+#, c-format
+msgid "  textHeight = %g"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:827
-msgid "Mask"
+#: libcore/swf/TextRecord.cpp:126
+#, c-format
+msgid "  GlyphEntries: count = %d"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:828
-msgid "Destroyed"
+#: libcore/swf/TextRecord.cpp:138
+#, c-format
+msgid "   glyph%d: index=%d, advance=%g"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:830
-msgid "Unloaded"
+#: libcore/swf/DefineFontAlignZonesTag.cpp:52
+#, c-format
+msgid "DefineFontAlignZones tag references an undefined font %d"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:834
-msgid "Blend mode"
+#: libcore/swf/DefineFontAlignZonesTag.cpp:71
+#, c-format
+msgid "DefineFontAlignZones: font=%d, flags=%d, table int: %s"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:837
-msgid "Invalidated"
+#: libcore/swf/DefineFontAlignZonesTag.cpp:108
+msgid "DefineFontAlignZoneTag"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:839
-msgid "Child invalidated"
+#: libcore/swf/tag_loaders.cpp:83
+msgid "anchor-labeled frame not supported"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:860 libcore/DisplayObject.cpp:1564
+#: libcore/swf/tag_loaders.cpp:87
 #, c-format
-msgid "Attempt to set property to %s, refused"
+msgid "frame_label_loader end position %d, read up to %d"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1095
+#: libcore/swf/tag_loaders.cpp:107
 #, c-format
-msgid "Attempt to set %s._y to %s (evaluating to number %g) refused"
+msgid "  sprite:  char id = %d"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1126
-#, c-format
-msgid "Attempt to set %s._x to %s (evaluating to number %g) refused"
+#: libcore/swf/tag_loaders.cpp:118
+msgid ""
+"Nested DEFINESPRITE tags. Will add to top-level DisplayObjects dictionary."
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1155
+#: libcore/swf/tag_loaders.cpp:128
 #, c-format
-msgid "Attempt to set %s._xscale to %s (evaluating to number %g) refused"
+msgid "Sprite %d advertise no frames"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1181
+#: libcore/swf/tag_loaders.cpp:169
 #, c-format
-msgid "Attempt to set %s._yscale to %s (evaluating to number %g) refused"
+msgid "DEFINESOUNDLOADER: sound sample rate %d (expected 0 to %u)"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1217
+#: libcore/swf/tag_loaders.cpp:189
 #, c-format
-msgid "Attempt to set %s._visible to %s (evaluating to number %g) refused"
+msgid ""
+"define sound: ch=%d, format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, delay=%d"
+msgstr ""
+
+#: libcore/swf/tag_loaders.cpp:217
+msgid "Tag boundary reported past end of SWFStream!"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1246
+#: libcore/swf/tag_loaders.cpp:237
 #, c-format
-msgid "Attempt to set %s._alpha to %s (evaluating to number %g) refused"
+msgid ""
+"There is no sound handler currently active, so DisplayObject with id %d will "
+"not be added to the dictionary"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1312
+#: libcore/swf/tag_loaders.cpp:271
 #, c-format
-msgid "Attempt to set %s._rotation to %s (evaluating to number %g) refused"
+msgid "File attributes: metadata=%s network=%s"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1352
-msgid "_soundbuftime setting"
+#: libcore/swf/tag_loaders.cpp:272 libcore/swf/tag_loaders.cpp:273
+msgid "true"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1376
-#, c-format
-msgid "Setting _width=%g of DisplayObject %s (%s)"
+#: libcore/swf/tag_loaders.cpp:272 libcore/swf/tag_loaders.cpp:273
+msgid "false"
 msgstr ""
 
-#: libcore/DisplayObject.cpp:1386 libcore/DisplayObject.cpp:1404
-msgid "_focusrect"
+#: libcore/swf/tag_loaders.cpp:277
+msgid ""
+"FileAttributes tag in the SWF requests that network access is not granted to "
+"this movie (or application?) when loaded from the filesystem. Anyway Gnash "
+"won't care; use white/black listing in your .gnashrc instead"
 msgstr ""
 
-#: libcore/StaticText.cpp:53
-msgid "StaticText::pointInShape"
+#: libcore/swf/tag_loaders.cpp:285
+msgid ""
+"This SWF file requires AVM2: there will be no ActionScript interpretation"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:98
-msgid "Problems serializing an object's member"
+#: libcore/swf/tag_loaders.cpp:310
+#, c-format
+msgid ""
+"  RDF metadata (information only): [[\n"
+"%s\n"
+"]]"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:212
+#: libcore/swf/tag_loaders.cpp:326
 #, c-format
-msgid "Problems serializing strict array member %d=%s"
+msgid "Descriptive metadata from movie %s: %s"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:242
-msgid "Could not serialize object"
+#: libcore/swf/tag_loaders.cpp:388
+#, c-format
+msgid "  reflex = \"%c%c%c\""
 msgstr ""
 
-#: libcore/AMFConverter.cpp:319
+#: libcore/swf/SoundStreamHeadTag.cpp:78
 #, c-format
-msgid "Unknown AMF type %s! Cannot proceed"
+msgid "SOUNDSTREAMHEAD: stream sample rate %d (expected 0 to %u)"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:376
+#: libcore/swf/SoundStreamHeadTag.cpp:88
 #, c-format
-msgid "AMF parsing error: %s"
+msgid ""
+"Different stream/playback sound rate (%d/%d). This seems common in SWF "
+"files, so we'll warn only once."
 msgstr ""
 
-#: libcore/AMFConverter.cpp:407
-msgid "Read past _end of buffer for strict array length"
+#: libcore/swf/SoundStreamHeadTag.cpp:95
+#, c-format
+msgid ""
+"Different stream/playback sample size (%d/%d). This seems common in SWF "
+"files, so we'll warn only once."
 msgstr ""
 
-#: libcore/AMFConverter.cpp:425
-msgid "Unable to read array elements"
+#: libcore/swf/SoundStreamHeadTag.cpp:101
+#, c-format
+msgid ""
+"Different stream/playback channels (%s/%s). This seems common in SWF files, "
+"so we'll warn only once."
 msgstr ""
 
-#: libcore/AMFConverter.cpp:442
-msgid "Read past _end of buffer for array length"
+#: libcore/swf/SoundStreamHeadTag.cpp:121
+msgid ""
+"No samples advertised for sound stream, pretty common so will warn only once"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:468 libcore/AMFConverter.cpp:489
-msgid "MALFORMED AMF: premature _end of ECMA_ARRAY block"
+#: libcore/swf/SoundStreamHeadTag.cpp:148
+#, c-format
+msgid ""
+"sound stream head: format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, latency=%d"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:480
-msgid "MALFORMED AMF: empty member name not followed by OBJECT_END_AMF0 byte"
+#: libcore/swf/DefineBitsTag.cpp:154
+msgid "  jpeg_tables_loader"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:504
-msgid "Unable to read array element"
+#: libcore/swf/DefineBitsTag.cpp:165
+#, c-format
+msgid "No bytes to read in JPEGTABLES tag at offset %d"
+msgstr ""
+
+#: libcore/swf/DefineBitsTag.cpp:206
+#, c-format
+msgid "DEFINEBITS: Duplicate id (%d) for bitmap DisplayObject - discarding it"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:528
-msgid "Could not read object property name"
+#: libcore/swf/DefineBitsTag.cpp:235
+msgid "Failed to parse bitmap for character %1%"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:539
-msgid "AMF buffer terminated just before object _end byte. continuing anyway."
+#: libcore/swf/DefineBitsTag.cpp:243
+msgid "No renderer, not adding bitmap %1%"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:566
-#, c-format
-msgid "readAMF0: invalid reference to object %d (%d known objects)"
+#: libcore/swf/DefineBitsTag.cpp:250
+msgid "Adding bitmap id %1%"
 msgstr ""
 
-#: libcore/AMFConverter.cpp:597
+#: libcore/swf/DefineBitsTag.cpp:269
 msgid ""
-"Date type encoded timezone info %1%, even though this field should not be "
-"used."
+"DEFINEBITS: No jpeg loader registered in movie definition - discarding bitmap"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:435
-#, c-format
-msgid "Malformed action code: %s"
+#: libcore/swf/DefineBitsTag.cpp:368
+msgid "gnash is not linked to zlib -- can't load jpeg3 image data"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:450
+#: libcore/swf/DefineBitsTag.cpp:413
 #, c-format
-msgid "%s: CHECKME: was broken"
+msgid "  defbitslossless2: tag = %d, fmt = %d, w = %d, h = %d"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:595
-#, c-format
-msgid "GetUrl: target=%s URL=%s"
+#: libcore/swf/DefineBitsTag.cpp:420
+msgid "Bitmap has a height or width of 0"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:615
-#, c-format
-msgid "ActionWaitForFrame (0x%X) tag length == %d (expected 3)"
+#: libcore/swf/DefineBitsTag.cpp:426
+msgid "gnash is not linked to zlib -- can't load zipped image data"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:629 libcore/vm/ASHandlers.cpp:1695
-#, c-format
-msgid "%s: environment target is null or not a MovieClip"
+#: libcore/swf/DefineBitsTag.cpp:452
+msgid "Will not allocate %1%x%2% image in DefineBitsLossless tag"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:637
+#: libcore/swf/DefineBitsTag.cpp:477
+msgid "Unknown bitmap format. Ignoring"
+msgstr ""
+
+#: libcore/swf/DefineBitsTag.cpp:591
 #, c-format
-msgid "ActionWaitForFrame(%d): target (%s) has only %d frames"
+msgid "inflateWrapper() inflateInit() returned %d (%s)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:679
-msgid "GotoLabel: environment target is null or not a MovieClip"
+#: libcore/swf/DefineBitsTag.cpp:611
+msgid "inflateWrapper(): no end of zstream found within swf tag boundaries"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:876 libcore/vm/ASHandlers.cpp:1572
-msgid "Negative size passed to ActionSubString, taking as whole length"
+#: libcore/swf/DefineBitsTag.cpp:635
+#, c-format
+msgid "inflateWrapper() inflate() returned %d (%s)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:893
-msgid "Start is less then 1 in ActionSubString, setting to 1."
+#: libcore/swf/DefineBitsTag.cpp:644
+#, c-format
+msgid "inflateWrapper() inflateEnd() return %d (%s)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:903
-msgid ""
-"Start goes beyond input string in ActionSubString, returning the empty "
-"string."
+#: libcore/as_function.cpp:94
+#, c-format
+msgid "Native function called as constructor threw exception: %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:916
-msgid ""
-"start + size goes beyond input string in ActionSubString, adjusting size"
+#: libcore/FreetypeGlyphsProvider.cpp:256
+#, c-format
+msgid "Can't init FreeType! Error = %d"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:963
+#: libcore/FreetypeGlyphsProvider.cpp:268
 #, c-format
-msgid ""
-"Can't assign a sprite/DisplayObject to a variable in SWF%d. We'll return "
-"undefined instead of %s."
+msgid "Can't close FreeType! Error = %d"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:971
+#: libcore/FreetypeGlyphsProvider.cpp:282
 #, c-format
-msgid "-- get var: %s=%s"
+msgid "Failed to find fonts directory, using hard-coded font filename \"%s\""
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:984
+#: libcore/FreetypeGlyphsProvider.cpp:295
 #, c-format
-msgid ""
-"ActionSetVariable: %s=%s: variable name evaluates to invalid (empty) string"
+msgid "Can't init fontconfig library, using hard-coded font filename \"%s\""
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:992
+#: libcore/FreetypeGlyphsProvider.cpp:357
 #, c-format
-msgid "-- set var: %s = %s"
+msgid "No device font matches the name '%s', using hard-coded font filename"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1043
+#: libcore/FreetypeGlyphsProvider.cpp:362
 msgid ""
-"ActionGetProperty(<empty>) called, but current target is not a DisplayObject"
+"Font filename matching not implemented (no fontconfig support built-in), "
+"using hard-coded font filename"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1062
-#, c-format
-msgid "Could not find GetProperty target (%s)"
+#: libcore/FreetypeGlyphsProvider.cpp:395
+msgid "Freetype not supported"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1087
+#: libcore/FreetypeGlyphsProvider.cpp:436
 #, c-format
-msgid "ActionSetProperty: can't find target %s for setting property %s"
+msgid "Can't find font file for font '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1110
+#: libcore/FreetypeGlyphsProvider.cpp:449
 #, c-format
-msgid "duplicateMovieClip: invalid depth %d passed; not duplicating"
+msgid "Font file '%s' has bad format"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1125
+#: libcore/FreetypeGlyphsProvider.cpp:458
 #, c-format
-msgid "Path given to duplicateMovieClip(%s) doesn't point to a DisplayObject"
+msgid "Some error opening font '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1136
+#: libcore/FreetypeGlyphsProvider.cpp:492
 #, c-format
-msgid "Path given to duplicateMovieClip(%s) is not a sprite"
+msgid "Error loading freetype outline glyph for char '%c' (error: %d)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1157
+#: libcore/FreetypeGlyphsProvider.cpp:508
 #, c-format
-msgid "Path given to removeMovieClip(%s) doesn't point to a DisplayObject"
+msgid ""
+"FT_Load_Char() returned a glyph format != FT_GLYPH_FORMAT_OUTLINE (%c%c%c%c)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1167
-#, c-format
-msgid "Path given to removeMovieClip(%s) is not a sprite"
+#: libcore/FreetypeGlyphsProvider.cpp:563
+msgid "Could not release FT face resources"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1205
-#, c-format
-msgid "startDrag: unknown target '%s'"
+#: libcore/MovieFactory.cpp:79
+msgid ""
+"Requested to keep from completely loading a movie, but the movie in question "
+"is an image, for which we don't yet have the concept of a 'loading thread'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1225
-msgid "Y values in ActionStartDrag swapped, fixing"
+#: libcore/MovieFactory.cpp:94
+msgid "FLV can't be loaded directly as a movie"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1232
-msgid "X values in ActionStartDrag swapped, fixing"
+#: libcore/MovieFactory.cpp:98
+msgid "Unknown file type"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1296
+#: libcore/MovieFactory.cpp:133
 #, c-format
-msgid "-- %s cast_to %s (invalid args?)"
+msgid "Couldn't load library movie '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1335
-#, c-format
-msgid "Stack value on IMPLEMENTSOP is not an object: %s."
+#: libcore/MovieFactory.cpp:173
+msgid "Can't read file header"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1344
-msgid "Target object for IMPLEMENTSOP has no prototype."
+#: libcore/MovieFactory.cpp:212
+msgid "Can't read 3 bytes after an MZ (.exe) header"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1351
-#, c-format
-msgid "IMPLEMENTSOP target object's prototype is not an object (%s)"
+#: libcore/MovieFactory.cpp:222
+msgid "Could not find SWF inside an .exe file"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1359
+#: libcore/MovieFactory.cpp:231
 #, c-format
-msgid "Invalid interfaces count (%d) on IMPLEMENTSOP"
+msgid "unknown file type, buffer is %c%c%c"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1370
+#: libcore/MovieFactory.cpp:273
 #, c-format
-msgid "class found on stack on IMPLEMENTSOP is not an object: %s"
-msgstr ""
-
-#: libcore/vm/ASHandlers.cpp:1377
-msgid "Interface object for IMPLEMENTSOP has no prototype."
+msgid "Can't read image file from %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1385
+#: libcore/MovieFactory.cpp:283
 #, c-format
-msgid "Prototype of interface object for IMPLEMENTSOP is not an object (%s)."
+msgid "Parsing error: %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1392
+#: libcore/MovieFactory.cpp:309
 #, c-format
-msgid "%s (with .prototype %p) implements %s (with .prototype %p)"
+msgid "failed to open '%s'; can't create movie"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1427
+#: libcore/MovieFactory.cpp:314
 #, c-format
-msgid "fscommand2:%s"
+msgid "streamProvider opener can't open '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1558
+#: libcore/as_environment.cpp:182
 #, c-format
-msgid " ActionMbSubString(%s, %d, %d)"
-msgstr ""
-
-#: libcore/vm/ASHandlers.cpp:1580
-msgid "Base is less then 1 in ActionMbSubString, setting to 1."
+msgid "invalid path '%s' (p=next_slash=%s)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1587
-msgid ""
-"base goes beyond input string in ActionMbSubString, returning the empty "
-"string."
+#: libcore/as_environment.cpp:193
+#, c-format
+msgid "invalid path '%s' (dot not allowed after having seen a slash)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1599
+#: libcore/as_environment.cpp:332
 #, c-format
-msgid ""
-"base+size goes beyond input string in ActionMbSubString, adjusting size "
-"based on length:%d and start:%d"
+msgid "-------------- %s = %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1623 libcore/vm/ASHandlers.cpp:1648
-msgid "Not properly implemented for SWF5"
+#: libcore/as_environment.cpp:346
+#, c-format
+msgid "Path target '%s' not found while setting %s=%s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1674
-msgid "ActionStrictMode set to %1%"
+#: libcore/as_environment.cpp:445
+#, c-format
+msgid "Won't set invalid raw variable name: %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1703
+#: libcore/as_environment.cpp:474
 #, c-format
 msgid ""
-"Frame spec found on stack at ActionWaitForFrame doesn't evaluate to a valid "
-"frame: %s"
+"as_environment::setVariableRaw(%s, %s): neither current target nor original "
+"target are defined, can't set the variable"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1728
-msgid "Unknown constant '%1%' (no pool registered with VM)"
+#: libcore/as_environment.cpp:486
+#, c-format
+msgid "Won't get invalid raw variable name: %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1736
-msgid "Unknown constant '%1%' (registered pool has %2% entries)"
+#: libcore/as_environment.cpp:567
+#, c-format
+msgid "reference to non-existent variable '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1793
-#, c-format
-msgid ""
-"Unknown push type %d. Execution will continue but it is likely to fail due "
-"to lost sync."
+#: libcore/Geometry.cpp:187
+msgid "Collision detection for unidirectionally scaled strokes"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1835
+#: libcore/as_object.cpp:439
 #, c-format
-msgid "Invalid register %d in ActionPush"
+msgid "Caught exception: %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1886
+#: libcore/as_object.cpp:627
 #, c-format
-msgid "\t%d) type=%s, value=%s"
+msgid "Attempt to set read-only property '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1917
-msgid "Undefined GetUrl2 URL on stack, skipping"
+#: libcore/as_object.cpp:639
+#, c-format
+msgid "%s: %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1949
+#: libcore/as_object.cpp:654
 #, c-format
-msgid "branch to offset %d  --  this section only runs to %d"
+msgid "Unknown failure in setting property '%s' on object '%p'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:1983
+#: libcore/as_object.cpp:683
 #, c-format
-msgid ""
-"Couldn't find target_sprite \"%s\" in ActionCallFrame! target frame actions "
-"will not be called..."
+msgid "Attempt to initialize read-only property '%s' on object '%p' twice"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2034
-#, c-format
-msgid ""
-"Frame spec found on stack at ActionGotoExpression doesn't evaluate to a "
-"valid frame: %s"
+#: libcore/as_object.cpp:845
+msgid "Circular inheritance chain detected during isPrototypeOf call"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2046
-#, c-format
-msgid ""
-"Couldn't find target sprite \"%s\" in ActionGotoExpression. Will not go to "
-"target frame..."
+#: libcore/StaticText.cpp:53
+msgid "StaticText::pointInShape"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2125
+#: libcore/vm/VM.cpp:222
 #, c-format
-msgid "delete %s.%s: no object found to delete"
+msgid "-------------- global register[%d] = '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2165
-msgid "delete2 called with a path that does not resolve to an object"
+#: libcore/vm/VM.cpp:250
+#, c-format
+msgid "Recursion limit reached (%u)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2191
+#: libcore/vm/CallStack.cpp:64
 #, c-format
-msgid "-- set local var: %s = %s"
+msgid "-------------- local register[%d] = '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2224
+#: libcore/vm/ASHandlers.cpp:435
 #, c-format
-msgid "ActionCallFunction: %s is not an object"
+msgid "Malformed action code: %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2241
+#: libcore/vm/ASHandlers.cpp:450
 #, c-format
-msgid ""
-"Attempt to call a function with %u arguments while only %u are available on "
-"the stack."
+msgid "%s: CHECKME: was broken"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2303
+#: libcore/vm/ASHandlers.cpp:595
 #, c-format
-msgid "---new object: %s"
+msgid "GetUrl: target=%s URL=%s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2313
+#: libcore/vm/ASHandlers.cpp:615
 #, c-format
-msgid "ActionNew: '%s' is not a constructor"
+msgid "ActionWaitForFrame (0x%X) tag length == %d (expected 3)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2351
-msgid "The 'var whatever' syntax in timeline context is a no-op."
+#: libcore/vm/ASHandlers.cpp:629 libcore/vm/ASHandlers.cpp:1695
+#, c-format
+msgid "%s: environment target is null or not a MovieClip"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2439
+#: libcore/vm/ASHandlers.cpp:637
 #, c-format
-msgid "Argument to TargetPath(%s) doesn't cast to a DisplayObject"
+msgid "ActionWaitForFrame(%d): target (%s) has only %d frames"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2474
-#, c-format
-msgid ""
-"Top of stack doesn't evaluate to an object (%s) at ActionEnumerate execution"
+#: libcore/vm/ASHandlers.cpp:679
+msgid "GotoLabel: environment target is null or not a MovieClip"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2581
-#, c-format
-msgid "getMember called against a value that does not cast to an as_object: %s"
+#: libcore/vm/ASHandlers.cpp:876 libcore/vm/ASHandlers.cpp:1572
+msgid "Negative size passed to ActionSubString, taking as whole length"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2590
-#, c-format
-msgid " ActionGetMember: target: %s (object %p)"
+#: libcore/vm/ASHandlers.cpp:893
+msgid "Start is less then 1 in ActionSubString, setting to 1."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2605
-#, c-format
-msgid "-- get_member %s.%s=%s"
+#: libcore/vm/ASHandlers.cpp:903
+msgid ""
+"Start goes beyond input string in ActionSubString, returning the empty "
+"string."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2624
-#, c-format
+#: libcore/vm/ASHandlers.cpp:916
 msgid ""
-"ActionSetMember: %s.%s=%s: member name evaluates to invalid (empty) string"
+"start + size goes beyond input string in ActionSubString, adjusting size"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2633
+#: libcore/vm/ASHandlers.cpp:963
 #, c-format
-msgid "-- set_member %s.%s=%s"
+msgid ""
+"Can't assign a sprite/DisplayObject to a variable in SWF%d. We'll return "
+"undefined instead of %s."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2645
+#: libcore/vm/ASHandlers.cpp:971
 #, c-format
-msgid "-- set_member %s.%s=%s on invalid object!"
+msgid "-- get var: %s=%s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2706
+#: libcore/vm/ASHandlers.cpp:984
 #, c-format
 msgid ""
-"Attempt to call a method with %u arguments while only %u are available on "
-"the stack."
+"ActionSetVariable: %s=%s: variable name evaluates to invalid (empty) string"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2714
+#: libcore/vm/ASHandlers.cpp:992
 #, c-format
-msgid " method name: %s"
+msgid "-- set var: %s = %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2715
-#, c-format
-msgid " method object/func: %s"
+#: libcore/vm/ASHandlers.cpp:1043
+msgid ""
+"ActionGetProperty(<empty>) called, but current target is not a DisplayObject"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2716
+#: libcore/vm/ASHandlers.cpp:1062
 #, c-format
-msgid " method nargs: %d"
+msgid "Could not find GetProperty target (%s)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2724
+#: libcore/vm/ASHandlers.cpp:1087
 #, c-format
-msgid "ActionCallMethod invoked with non-object object/func (%s)"
+msgid "ActionSetProperty: can't find target %s for setting property %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2758
+#: libcore/vm/ASHandlers.cpp:1110
 #, c-format
-msgid "ActionCallMethod: Can't find method %s of object %s"
+msgid "duplicateMovieClip: invalid depth %d passed; not duplicating"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2770
+#: libcore/vm/ASHandlers.cpp:1125
 #, c-format
-msgid "ActionCallMethod: property %d of object %d is not callable (%s)"
+msgid "Path given to duplicateMovieClip(%s) doesn't point to a DisplayObject"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2843
+#: libcore/vm/ASHandlers.cpp:1136
 #, c-format
-msgid ""
-"Attempt to call a constructor with %u arguments while only %u are available "
-"on the stack."
+msgid "Path given to duplicateMovieClip(%s) is not a sprite"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2855
-msgid "On ActionNewMethod: no object found on stack on ActionMethod"
+#: libcore/vm/ASHandlers.cpp:1157
+#, c-format
+msgid "Path given to removeMovieClip(%s) doesn't point to a DisplayObject"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2872
+#: libcore/vm/ASHandlers.cpp:1167
 #, c-format
-msgid "ActionNewMethod: can't find method %s of object %s"
+msgid "Path given to removeMovieClip(%s) is not a sprite"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2884
-msgid "ActionNewMethod: method name is undefined and object is not a function"
+#: libcore/vm/ASHandlers.cpp:1205
+#, c-format
+msgid "startDrag: unknown target '%s'"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2923
-#, c-format
-msgid "-- %s instanceof %s (invalid args?)"
+#: libcore/vm/ASHandlers.cpp:1225
+msgid "Y values in ActionStartDrag swapped, fixing"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:2952
-#, c-format
-msgid "Top of stack not an object %s at ActionEnum2 execution"
+#: libcore/vm/ASHandlers.cpp:1232
+msgid "X values in ActionStartDrag swapped, fixing"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3086
+#: libcore/vm/ASHandlers.cpp:1296
 #, c-format
-msgid "ActionExtends: Super is not an object (%s)"
+msgid "-- %s cast_to %s (invalid args?)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3090
+#: libcore/vm/ASHandlers.cpp:1335
 #, c-format
-msgid "ActionExtends: Sub is not a function (%s)"
+msgid "Stack value on IMPLEMENTSOP is not an object: %s."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3191
-#, c-format
-msgid ""
-"function2 code len (%u) overflows DOACTION tag boundaries (DOACTION tag len="
-"%d, function2 code offset=%d). Forcing code len to eat the whole buffer "
-"(would this work?)."
+#: libcore/vm/ASHandlers.cpp:1344
+msgid "Target object for IMPLEMENTSOP has no prototype."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3213
+#: libcore/vm/ASHandlers.cpp:1351
 #, c-format
-msgid "DefineFunction2: named function '%s' starts at PC %d"
+msgid "IMPLEMENTSOP target object's prototype is not an object (%s)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3223
+#: libcore/vm/ASHandlers.cpp:1359
 #, c-format
-msgid "DefineFunction2: anonymous function starts at PC %d"
+msgid "Invalid interfaces count (%d) on IMPLEMENTSOP"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3275
+#: libcore/vm/ASHandlers.cpp:1370
 #, c-format
-msgid ""
-"ActionTry: reserved:%x doFinally:%d doCatch:%d trySize:%u catchSize:%u "
-"finallySize:%u catchName:%s catchRegister:%u"
+msgid "class found on stack on IMPLEMENTSOP is not an object: %s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3304
-msgid "ActionWith tag length != 2; skipping"
+#: libcore/vm/ASHandlers.cpp:1377
+msgid "Interface object for IMPLEMENTSOP has no prototype."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3314
-msgid "Empty with() block..."
+#: libcore/vm/ASHandlers.cpp:1385
+#, c-format
+msgid "Prototype of interface object for IMPLEMENTSOP is not an object (%s)."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3325
+#: libcore/vm/ASHandlers.cpp:1392
 #, c-format
-msgid "with(%s) : first argument doesn't cast to an object!"
+msgid "%s (with .prototype %p) implements %s (with .prototype %p)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3440
+#: libcore/vm/ASHandlers.cpp:1427
 #, c-format
-msgid "Unsupported action handler invoked, code at pc is %#x"
+msgid "fscommand2:%s"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3500
-msgid "Bogus empty GetUrl URL in SWF file, skipping"
+#: libcore/vm/ASHandlers.cpp:1558
+#, c-format
+msgid " ActionMbSubString(%s, %d, %d)"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3512
-msgid ""
-"Bogus GetUrl2 send vars method in SWF file (both GET and POST requested). "
-"Using GET"
+#: libcore/vm/ASHandlers.cpp:1580
+msgid "Base is less then 1 in ActionMbSubString, setting to 1."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3571
-#, c-format
-msgid "getURL: target %s not found"
+#: libcore/vm/ASHandlers.cpp:1587
+msgid ""
+"base goes beyond input string in ActionMbSubString, returning the empty "
+"string."
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3577
+#: libcore/vm/ASHandlers.cpp:1599
 #, c-format
-msgid "getURL: target %s is not a sprite"
-msgstr ""
-
-#: libcore/vm/ASHandlers.cpp:3596
-msgid "commonGetURL: current target is undefined"
+msgid ""
+"base+size goes beyond input string in ActionMbSubString, adjusting size "
+"based on length:%d and start:%d"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3616
-#, c-format
-msgid "Unknown loadMovie target: %s"
+#: libcore/vm/ASHandlers.cpp:1623 libcore/vm/ASHandlers.cpp:1648
+msgid "Not properly implemented for SWF5"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3630
-#, c-format
-msgid "get URL: target %s is not a sprite"
+#: libcore/vm/ASHandlers.cpp:1674
+msgid "ActionStrictMode set to %1%"
 msgstr ""
 
-#: libcore/vm/ASHandlers.cpp:3695
+#: libcore/vm/ASHandlers.cpp:1703
 #, c-format
-msgid "Couldn't find movie \"%s\" to set target to! Setting target to NULL..."
+msgid ""
+"Frame spec found on stack at ActionWaitForFrame doesn't evaluate to a valid "
+"frame: %s"
 msgstr ""
 
-#: libcore/vm/CallStack.cpp:64
-#, c-format
-msgid "-------------- local register[%d] = '%s'"
+#: libcore/vm/ASHandlers.cpp:1728
+msgid "Unknown constant '%1%' (no pool registered with VM)"
 msgstr ""
 
-#: libcore/vm/Machine.cpp:895
-#, c-format
-msgid "Can't push a null value onto the scope stack (%s)."
+#: libcore/vm/ASHandlers.cpp:1736
+msgid "Unknown constant '%1%' (registered pool has %2% entries)"
 msgstr ""
 
-#: libcore/vm/Machine.cpp:1438
+#: libcore/vm/ASHandlers.cpp:1793
 #, c-format
 msgid ""
-"CALLPROP: Can't call a method of a value that doesn't cast to an object (%s)."
+"Unknown push type %d. Execution will continue but it is likely to fail due "
+"to lost sync."
 msgstr ""
 
-#: libcore/vm/Machine.cpp:1455
+#: libcore/vm/ASHandlers.cpp:1835
 #, c-format
-msgid "CALLPROP: Property '%s' of object '%s' is '%s', cannot call as method"
+msgid "Invalid register %d in ActionPush"
 msgstr ""
 
-#: libcore/vm/Machine.cpp:1983
+#: libcore/vm/ASHandlers.cpp:1886
 #, c-format
-msgid "GETPROPERTY: Looking for property %s of object %s"
+msgid "\t%d) type=%s, value=%s"
 msgstr ""
 
-#: libcore/vm/Machine.cpp:1987
-#, c-format
-msgid "GETPROPERTY: expecting object on stack, got %s."
+#: libcore/vm/ASHandlers.cpp:1917
+msgid "Undefined GetUrl2 URL on stack, skipping"
 msgstr ""
 
-#: libcore/vm/Machine.cpp:2122
+#: libcore/vm/ASHandlers.cpp:1949
 #, c-format
-msgid "ABC_ACTION_SETSLOT: unexpected non-object stack value %s"
+msgid "branch to offset %d  --  this section only runs to %d"
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:147
+#: libcore/vm/ASHandlers.cpp:1983
 #, c-format
 msgid ""
-"at ActionExec operator() start, pc=%d, stop_pc=%d, code.size=%d, func=%d, "
-"codeVersion=%d"
-msgstr ""
-
-#: libcore/vm/ActionExec.cpp:152 libcore/vm/ActionExec.cpp:285
-#: libcore/vm/ActionExec.cpp:296
-#, c-format
-msgid "%s"
+"Couldn't find target_sprite \"%s\" in ActionCallFrame! target frame actions "
+"will not be called..."
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:222
+#: libcore/vm/ASHandlers.cpp:2034
 #, c-format
-msgid "PC:%d - EX: %s"
+msgid ""
+"Frame spec found on stack at ActionGotoExpression doesn't evaluate to a "
+"valid frame: %s"
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:239
+#: libcore/vm/ASHandlers.cpp:2046
 #, c-format
 msgid ""
-"Length %u (%d) of action tag id %u at pc %d overflows actions buffer size %d"
+"Couldn't find target sprite \"%s\" in ActionGotoExpression. Will not go to "
+"target frame..."
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:292
+#: libcore/vm/ASHandlers.cpp:2125
 #, c-format
-msgid "After execution: PC %d, next PC %d, stack follows"
+msgid "delete %s.%s: no object found to delete"
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:306
-msgid ""
-"Time exceeded (%4% secs) while executing code in %1% between pc %2% and %3%. "
-"Disable scripts?"
+#: libcore/vm/ASHandlers.cpp:2165
+msgid "delete2 called with a path that does not resolve to an object"
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:541
-msgid ""
-"Stack smashed (ActionScript compiler bug, or obfuscated SWF). Taking no "
-"action to fix (as expected)."
+#: libcore/vm/ASHandlers.cpp:2191
+#, c-format
+msgid "-- set local var: %s = %s"
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:545
+#: libcore/vm/ASHandlers.cpp:2224
 #, c-format
-msgid "%d elements left on the stack after block execution."
+msgid "ActionCallFunction: %s is not an object"
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:564
+#: libcore/vm/ASHandlers.cpp:2241
 #, c-format
 msgid ""
-"End of DoAction block hit while skipping %d action tags (pc:%d, stop_pc:%d) "
-"(WaitForFrame, probably)"
+"Attempt to call a function with %u arguments while only %u are available on "
+"the stack."
 msgstr ""
 
-#: libcore/vm/ActionExec.cpp:674
+#: libcore/vm/ASHandlers.cpp:2303
 #, c-format
-msgid "Jump outside DoAction tag requested (offset %d before tag start)"
+msgid "---new object: %s"
 msgstr ""
 
-#: libcore/vm/VM.cpp:222
+#: libcore/vm/ASHandlers.cpp:2313
 #, c-format
-msgid "-------------- global register[%d] = '%s'"
+msgid "ActionNew: '%s' is not a constructor"
 msgstr ""
 
-#: libcore/vm/VM.cpp:250
-#, c-format
-msgid "Recursion limit reached (%u)"
+#: libcore/vm/ASHandlers.cpp:2351
+msgid "The 'var whatever' syntax in timeline context is a no-op."
 msgstr ""
 
-#: libcore/Button.cpp:477
+#: libcore/vm/ASHandlers.cpp:2439
 #, c-format
-msgid "Unhandled button event %s"
-msgstr ""
-
-#: libcore/Button.cpp:788
-msgid "Button placed with an init object. This will be ignored."
+msgid "Argument to TargetPath(%s) doesn't cast to a DisplayObject"
 msgstr ""
 
-#: libcore/Button.cpp:956
-msgid "Enabled"
+#: libcore/vm/ASHandlers.cpp:2474
+#, c-format
+msgid ""
+"Top of stack doesn't evaluate to an object (%s) at ActionEnumerate execution"
 msgstr ""
 
-#: libcore/Button.cpp:961
-msgid "Button state"
+#: libcore/vm/ASHandlers.cpp:2581
+#, c-format
+msgid "getMember called against a value that does not cast to an as_object: %s"
 msgstr ""
 
-#: libcore/Button.cpp:965
-msgid "Action characters"
+#: libcore/vm/ASHandlers.cpp:2590
+#, c-format
+msgid " ActionGetMember: target: %s (object %p)"
 msgstr ""
 
-#: libcore/Button.cpp:994
-msgid "Button.blendMode"
+#: libcore/vm/ASHandlers.cpp:2605
+#, c-format
+msgid "-- get_member %s.%s=%s"
 msgstr ""
 
-#: libcore/Button.cpp:1003
-msgid "Button.cacheAsBitmap"
+#: libcore/vm/ASHandlers.cpp:2624
+#, c-format
+msgid ""
+"ActionSetMember: %s.%s=%s: member name evaluates to invalid (empty) string"
 msgstr ""
 
-#: libcore/Button.cpp:1012
-msgid "Button.filters"
+#: libcore/vm/ASHandlers.cpp:2633
+#, c-format
+msgid "-- set_member %s.%s=%s"
 msgstr ""
 
-#: libcore/Button.cpp:1021
-msgid "Button.scale9Grid"
+#: libcore/vm/ASHandlers.cpp:2645
+#, c-format
+msgid "-- set_member %s.%s=%s on invalid object!"
 msgstr ""
 
-#: libcore/Button.cpp:1030
-msgid "Button.getTabIndex"
+#: libcore/vm/ASHandlers.cpp:2706
+#, c-format
+msgid ""
+"Attempt to call a method with %u arguments while only %u are available on "
+"the stack."
 msgstr ""
 
-#: libcore/Button.cpp:1039
-msgid "Button.setTabIndex"
+#: libcore/vm/ASHandlers.cpp:2714
+#, c-format
+msgid " method name: %s"
 msgstr ""
 
-#: libcore/as_environment.cpp:182
+#: libcore/vm/ASHandlers.cpp:2715
 #, c-format
-msgid "invalid path '%s' (p=next_slash=%s)"
+msgid " method object/func: %s"
 msgstr ""
 
-#: libcore/as_environment.cpp:193
+#: libcore/vm/ASHandlers.cpp:2716
 #, c-format
-msgid "invalid path '%s' (dot not allowed after having seen a slash)"
+msgid " method nargs: %d"
 msgstr ""
 
-#: libcore/as_environment.cpp:332
+#: libcore/vm/ASHandlers.cpp:2724
 #, c-format
-msgid "-------------- %s = %s"
+msgid "ActionCallMethod invoked with non-object object/func (%s)"
 msgstr ""
 
-#: libcore/as_environment.cpp:346
+#: libcore/vm/ASHandlers.cpp:2758
 #, c-format
-msgid "Path target '%s' not found while setting %s=%s"
+msgid "ActionCallMethod: Can't find method %s of object %s"
 msgstr ""
 
-#: libcore/as_environment.cpp:445
+#: libcore/vm/ASHandlers.cpp:2770
 #, c-format
-msgid "Won't set invalid raw variable name: %s"
+msgid "ActionCallMethod: property %d of object %d is not callable (%s)"
 msgstr ""
 
-#: libcore/as_environment.cpp:474
+#: libcore/vm/ASHandlers.cpp:2843
 #, c-format
 msgid ""
-"as_environment::setVariableRaw(%s, %s): neither current target nor original "
-"target are defined, can't set the variable"
+"Attempt to call a constructor with %u arguments while only %u are available "
+"on the stack."
 msgstr ""
 
-#: libcore/as_environment.cpp:486
-#, c-format
-msgid "Won't get invalid raw variable name: %s"
+#: libcore/vm/ASHandlers.cpp:2855
+msgid "On ActionNewMethod: no object found on stack on ActionMethod"
 msgstr ""
 
-#: libcore/as_environment.cpp:567
+#: libcore/vm/ASHandlers.cpp:2872
 #, c-format
-msgid "reference to non-existent variable '%s'"
+msgid "ActionNewMethod: can't find method %s of object %s"
 msgstr ""
 
-#: libcore/MovieClip.cpp:621
-#, c-format
-msgid "call_frame('%s') -- invalid frame"
+#: libcore/vm/ASHandlers.cpp:2884
+msgid "ActionNewMethod: method name is undefined and object is not a function"
 msgstr ""
 
-#: libcore/MovieClip.cpp:667
-msgid "Can't clone root of the movie"
+#: libcore/vm/ASHandlers.cpp:2923
+#, c-format
+msgid "-- %s instanceof %s (invalid args?)"
 msgstr ""
 
-#: libcore/MovieClip.cpp:675
+#: libcore/vm/ASHandlers.cpp:2952
 #, c-format
-msgid "%s parent is not a movieclip, can't clone"
+msgid "Top of stack not an object %s at ActionEnum2 execution"
 msgstr ""
 
-#: libcore/MovieClip.cpp:852
-msgid "MovieClip.unloadMovie()"
+#: libcore/vm/ASHandlers.cpp:3089
+#, c-format
+msgid "ActionExtends: Super is not an object (%s)"
 msgstr ""
 
-#: libcore/MovieClip.cpp:885
+#: libcore/vm/ASHandlers.cpp:3093
 #, c-format
-msgid "advance_movieclip: no frames loaded for movieclip/movie %s"
+msgid "ActionExtends: Sub is not a function (%s)"
 msgstr ""
 
-#: libcore/MovieClip.cpp:935
+#: libcore/vm/ASHandlers.cpp:3194
+#, c-format
 msgid ""
-"Flushing orphaned tags in movieclip %1%. _currentFrame:%2%, _hasLooped:%3%, "
-"frame_count:%4%"
+"function2 code len (%u) overflows DOACTION tag boundaries (DOACTION tag len="
+"%d, function2 code offset=%d). Forcing code len to eat the whole buffer "
+"(would this work?)."
 msgstr ""
 
-#: libcore/MovieClip.cpp:1046
+#: libcore/vm/ASHandlers.cpp:3216
 #, c-format
-msgid "Executing %d tags in frame %d/%d of movieclip %s"
+msgid "DefineFunction2: named function '%s' starts at PC %d"
 msgstr ""
 
-#: libcore/MovieClip.cpp:1084 libcore/MovieClip.cpp:1125
+#: libcore/vm/ASHandlers.cpp:3226
 #, c-format
-msgid ""
-"Target frame of a gotoFrame(%d) was never loaded, although frame count in "
-"header (%d) said we should have found it"
+msgid "DefineFunction2: anonymous function starts at PC %d"
 msgstr ""
 
-#: libcore/MovieClip.cpp:1116
+#: libcore/vm/ASHandlers.cpp:3278
 #, c-format
 msgid ""
-"GotoFrame(%d) targets a yet to be loaded frame (%d). We'll wait for it but a "
-"more correct form is explicitly using WaitForFrame instead"
+"ActionTry: reserved:%x doFinally:%d doCatch:%d trySize:%u catchSize:%u "
+"finallySize:%u catchName:%s catchRegister:%u"
 msgstr ""
 
-#: libcore/MovieClip.cpp:1189
-#, c-format
-msgid "MovieClip::goto_labeled_frame('%s') unknown label"
+#: libcore/vm/ASHandlers.cpp:3307
+msgid "ActionWith tag length != 2; skipping"
 msgstr ""
 
-#: libcore/MovieClip.cpp:1248
-#, c-format
-msgid "MovieClip::add_display_object(): unknown cid = %d"
+#: libcore/vm/ASHandlers.cpp:3317
+msgid "Empty with() block..."
 msgstr ""
 
-#: libcore/MovieClip.cpp:1318
+#: libcore/vm/ASHandlers.cpp:3328
 #, c-format
-msgid "movieclip::replace_display_object(): unknown cid = %d"
+msgid "with(%s) : first argument doesn't cast to an object!"
 msgstr ""
 
-#: libcore/MovieClip.cpp:1327
+#: libcore/vm/ASHandlers.cpp:3443
 #, c-format
+msgid "Unsupported action handler invoked, code at pc is %#x"
+msgstr ""
+
+#: libcore/vm/ASHandlers.cpp:3503
+msgid "Bogus empty GetUrl URL in SWF file, skipping"
+msgstr ""
+
+#: libcore/vm/ASHandlers.cpp:3515
 msgid ""
-"MovieClip::replace_display_object: could not find any DisplayObject at depth "
-"%d"
+"Bogus GetUrl2 send vars method in SWF file (both GET and POST requested). "
+"Using GET"
 msgstr ""
 
-#: libcore/MovieClip.cpp:1905
+#: libcore/vm/ASHandlers.cpp:3574
 #, c-format
-msgid "Could not load variables from %s"
+msgid "getURL: target %s not found"
 msgstr ""
 
-#: libcore/MovieClip.cpp:1958
+#: libcore/vm/ASHandlers.cpp:3580
 #, c-format
-msgid ""
-"removeMovieClip(%s): movieclip depth (%d) out of the 'dynamic' zone "
-"[0..1048575], won't remove"
+msgid "getURL: target %s is not a sprite"
 msgstr ""
 
-#: libcore/parser/TypesParser.cpp:145
-#, c-format
-msgid "Invalid rectangle: minx=%g maxx=%g miny=%g maxy=%g"
+#: libcore/vm/ASHandlers.cpp:3599
+msgid "commonGetURL: current target is undefined"
 msgstr ""
 
-#: libcore/parser/TypesParser.cpp:161
+#: libcore/vm/ASHandlers.cpp:3619
 #, c-format
-msgid "  FillStyle read type = 0x%X"
+msgid "Unknown loadMovie target: %s"
 msgstr ""
 
-#: libcore/parser/TypesParser.cpp:207
+#: libcore/vm/ASHandlers.cpp:3633
 #, c-format
-msgid "  gradients count: %d"
+msgid "get URL: target %s is not a sprite"
 msgstr ""
 
-#: libcore/parser/TypesParser.cpp:212
-msgid "No gradients!"
+#: libcore/vm/ASHandlers.cpp:3698
+#, c-format
+msgid "Couldn't find movie \"%s\" to set target to! Setting target to NULL..."
 msgstr ""
 
-#: libcore/parser/TypesParser.cpp:266
-msgid "Illegal spread mode in gradient definition."
+#: libcore/vm/Machine.cpp:895
+#, c-format
+msgid "Can't push a null value onto the scope stack (%s)."
 msgstr ""
 
-#: libcore/parser/TypesParser.cpp:283
-msgid "Illegal interpolation mode in gradient definition."
+#: libcore/vm/Machine.cpp:1438
+#, c-format
+msgid ""
+"CALLPROP: Can't call a method of a value that doesn't cast to an object (%s)."
 msgstr ""
 
-#: libcore/parser/TypesParser.cpp:408
+#: libcore/vm/Machine.cpp:1455
 #, c-format
-msgid "  color: %s"
+msgid "CALLPROP: Property '%s' of object '%s' is '%s', cannot call as method"
 msgstr ""
 
-#: libcore/parser/sprite_definition.cpp:64
+#: libcore/vm/Machine.cpp:1983
 #, c-format
-msgid "  frames = %d"
+msgid "GETPROPERTY: Looking for property %s of object %s"
 msgstr ""
 
-#: libcore/parser/sprite_definition.cpp:77
+#: libcore/vm/Machine.cpp:1987
 #, c-format
-msgid ""
-"%d frames advertised in header, but only %d SHOWFRAME tags found in define "
-"sprite."
+msgid "GETPROPERTY: expecting object on stack, got %s."
 msgstr ""
 
-#: libcore/parser/sprite_definition.cpp:87
-msgid "  -- sprite END --"
+#: libcore/vm/Machine.cpp:2122
+#, c-format
+msgid "ABC_ACTION_SETSLOT: unexpected non-object stack value %s"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:54
+#: libcore/vm/ActionExec.cpp:147
 #, c-format
-msgid "   number of filters: %d"
+msgid ""
+"at ActionExec operator() start, pc=%d, stop_pc=%d, code.size=%d, func=%d, "
+"codeVersion=%d"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:92
+#: libcore/vm/ActionExec.cpp:152 libcore/vm/ActionExec.cpp:285
+#: libcore/vm/ActionExec.cpp:296
 #, c-format
-msgid "Invalid filter type %d."
+msgid "%s"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:102
+#: libcore/vm/ActionExec.cpp:222
 #, c-format
-msgid "Filter %d could not read."
+msgid "PC:%d - EX: %s"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:134
+#: libcore/vm/ActionExec.cpp:239
 #, c-format
-msgid "   DropShadowFilter: blurX=%f blurY=%f"
+msgid ""
+"Length %u (%d) of action tag id %u at pc %d overflows actions buffer size %d"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:153
+#: libcore/vm/ActionExec.cpp:292
 #, c-format
-msgid "   BlurFilter: blurX=%f blurY=%f quality=%d"
+msgid "After execution: PC %d, next PC %d, stack follows"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:180
-msgid "   GlowFilter "
+#: libcore/vm/ActionExec.cpp:306
+msgid ""
+"Time exceeded (%4% secs) while executing code in %1% between pc %2% and %3%. "
+"Disable scripts?"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:218
-msgid "   BevelFilter "
+#: libcore/vm/ActionExec.cpp:541
+msgid ""
+"Stack smashed (ActionScript compiler bug, or obfuscated SWF). Taking no "
+"action to fix (as expected)."
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:265
-msgid "   GradientGlowFilter "
+#: libcore/vm/ActionExec.cpp:545
+#, c-format
+msgid "%d elements left on the stack after block execution."
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:301
-msgid "   ConvolutionFilter "
+#: libcore/vm/ActionExec.cpp:564
+#, c-format
+msgid ""
+"End of DoAction block hit while skipping %d action tags (pc:%d, stop_pc:%d) "
+"(WaitForFrame, probably)"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:318
-msgid "   ColorMatrixFilter: "
+#: libcore/vm/ActionExec.cpp:674
+#, c-format
+msgid "Jump outside DoAction tag requested (offset %d before tag start)"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:319 libcore/parser/filter_factory.cpp:322
-#: libcore/parser/filter_factory.cpp:325 libcore/parser/filter_factory.cpp:328
+#: libcore/MovieLoader.cpp:260
 #, c-format
-msgid "     %g, %g, %g, %g, %g"
+msgid "Can't create Movie instance for definition loaded from %s"
 msgstr ""
 
-#: libcore/parser/filter_factory.cpp:375
-msgid "   GradientBevelFilter "
+#: libcore/ClassHierarchy.cpp:85
+#, c-format
+msgid "Native class %s is not an object after initialization (%s)"
 msgstr ""
 
-#: libcore/parser/action_buffer.cpp:57
+#: libcore/ClassHierarchy.cpp:92
 #, c-format
-msgid "Empty action buffer starting at offset %lu"
+msgid "Native class %s is not found after initialization"
 msgstr ""
 
-#: libcore/parser/action_buffer.cpp:94
-#, c-format
-msgid "Action buffer starting at offset %lu doesn't end with an END tag"
+#: libcore/RGBA.cpp:47
+msgid "Failed to convert string to RGBA value! This is a Gnash bug"
 msgstr ""
 
-#: libcore/parser/action_buffer.cpp:132
-msgid "action buffer dict length exceeded"
+#: libcore/SWFStream.cpp:475
+msgid "Attempt to seek past the end of an opened tag"
 msgstr ""
 
-#: libcore/parser/action_buffer.cpp:614
-msgid "Native double floating point format not recognised"
+#: libcore/SWFStream.cpp:483
+msgid "Attempt to seek before start of an opened tag"
 msgstr ""
 
-#: libcore/parser/SWFParser.cpp:90
-msgid "SHOWFRAME tag"
+#: libcore/SWFStream.cpp:496
+msgid "Unexpected end of stream"
 msgstr ""
 
-#: libcore/parser/SWFParser.cpp:100
+#: libcore/SWFStream.cpp:564
 #, c-format
 msgid ""
-"Encountered unknown tag %d. These usually store creation tool data and do "
-"not affect playback"
+"Tag %d starting at offset %d is advertised to end at offset %d, which is "
+"after end of previously opened tag starting at offset %d and ending at "
+"offset %d. Making it end where container tag ends."
 msgstr ""
 
-#: libcore/parser/SWFParser.cpp:105
+#: libcore/SWFStream.cpp:581
 #, c-format
-msgid "tag dump follows: %s"
+msgid "SWF[%lu]: tag type = %d, tag length = %d, end tag = %lu"
 msgstr ""
 
-#: libcore/parser/SWFParser.cpp:113
-#, c-format
-msgid "Parsing exception: %s"
+#: libcore/SWFStream.cpp:602
+msgid "Could not seek to reported end of tag"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:255
+#: libcore/SWFStream.cpp:617
 #, c-format
-msgid "Add sound sample %d assigning id %d"
-msgstr ""
-
-#: libcore/parser/SWFMovieDefinition.cpp:284
-msgid ""
-"gnash::SWFMovieDefinition::read() -- file does not start with a SWF header"
+msgid "SWFStream::consumeInput: underlying stream couldn't go_to_end: %s"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:291
+#: libcore/DisplayObject.cpp:124
 #, c-format
-msgid "version: %d, file_length: %d"
+msgid "loadMovie against a %s DisplayObject"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:296
-msgid ""
-"SWFMovieDefinition::read(): unable to read zipped SWF data; gnash was "
-"compiled without zlib support"
+#: libcore/DisplayObject.cpp:261
+msgid "blendMode"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:301
-msgid "file is compressed"
+#: libcore/DisplayObject.cpp:371
+#, c-format
+msgid "Setting _height=%g of DisplayObject %s (%s)"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:320
-msgid "non-finite movie bounds"
+#: libcore/DisplayObject.cpp:799
+msgid "yes"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:336
-#, c-format
-msgid "frame size = %s, frame rate = %f, frames = %d"
+#: libcore/DisplayObject.cpp:800
+msgid "no"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:360
-msgid "Could not start loading thread"
+#: libcore/DisplayObject.cpp:806
+msgid "Depth"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:431
-#, c-format
-msgid "Could not find char %d, dump is: %s"
+#: libcore/DisplayObject.cpp:812
+msgid "Ratio"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:490
-msgid "Error while parsing SWF stream."
+#: libcore/DisplayObject.cpp:822
+msgid "Clipping depth"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:502
-#, c-format
-msgid "%d control tags are NOT followed by a SHOWFRAME tag"
+#: libcore/DisplayObject.cpp:827
+msgid "Dimensions"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:510
-#, c-format
-msgid ""
-"%d frames advertised in header, but only %d SHOWFRAME tags found in stream. "
-"Pretending we loaded all advertised frames"
+#: libcore/DisplayObject.cpp:829
+msgid "Dynamic"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:538
-#, c-format
-msgid ""
-"number of SHOWFRAME tags in SWF stream '%s' (%d) exceeds the advertised "
-"number in header (%d)."
+#: libcore/DisplayObject.cpp:830
+msgid "Mask"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:605
-msgid "More than one JPEGTABLES tag found: not resetting JPEG loader"
+#: libcore/DisplayObject.cpp:831
+msgid "Destroyed"
 msgstr ""
 
-#: libcore/parser/SWFMovieDefinition.cpp:745
-#, c-format
-msgid "import error: could not find resource '%s' in movie '%s'"
+#: libcore/DisplayObject.cpp:833
+msgid "Unloaded"
 msgstr ""
 
-#: libcore/Video.cpp:57
-msgid "No Media handler registered, won't be able to decode embedded video"
+#: libcore/DisplayObject.cpp:837
+msgid "Blend mode"
 msgstr ""
 
-#: libcore/Video.cpp:69
-#, c-format
-msgid "Could not create Video Decoder: %s"
+#: libcore/DisplayObject.cpp:840
+msgid "Invalidated"
 msgstr ""
 
-#: libcore/Video.cpp:138
-msgid "No Video info in video definition"
+#: libcore/DisplayObject.cpp:842
+msgid "Child invalidated"
 msgstr ""
 
-#: libcore/as_function.cpp:94
+#: libcore/DisplayObject.cpp:863 libcore/DisplayObject.cpp:1567
 #, c-format
-msgid "Native function called as constructor threw exception: %s"
+msgid "Attempt to set property to %s, refused"
 msgstr ""
 
-#: libcore/movie_root.cpp:238
+#: libcore/DisplayObject.cpp:1098
 #, c-format
-msgid "ActionParserException thrown during setRootMovie: %s"
+msgid "Attempt to set %s._y to %s (evaluating to number %g) refused"
 msgstr ""
 
-#: libcore/movie_root.cpp:253
+#: libcore/DisplayObject.cpp:1129
 #, c-format
-msgid "No user interface registered, assuming 'Yes' answer to question: %s"
+msgid "Attempt to set %s._x to %s (evaluating to number %g) refused"
 msgstr ""
 
-#: libcore/movie_root.cpp:402 libcore/movie_root.cpp:412
+#: libcore/DisplayObject.cpp:1158
 #, c-format
-msgid ""
-"%s.swapDepth(%d): movie has a depth (%d) below static depth zone (%d), won't "
-"swap its depth"
-msgstr ""
-
-#: libcore/movie_root.cpp:470
-msgid ""
-"movie_root::dropLevel called against a movie not found in the levels "
-"container"
-msgstr ""
-
-#: libcore/movie_root.cpp:477
-msgid "Original root movie can't be removed"
+msgid "Attempt to set %s._xscale to %s (evaluating to number %g) refused"
 msgstr ""
 
-#: libcore/movie_root.cpp:496
+#: libcore/DisplayObject.cpp:1184
 #, c-format
-msgid ""
-"TESTME: loadMovie called on level %d which is not available at load time, "
-"skipped placement for now"
+msgid "Attempt to set %s._yscale to %s (evaluating to number %g) refused"
 msgstr ""
 
-#: libcore/movie_root.cpp:627
+#: libcore/DisplayObject.cpp:1220
 #, c-format
-msgid "ActionLimits hit notifying key listeners: %s."
-msgstr ""
-
-#: libcore/movie_root.cpp:864
-msgid ""
-"movie_root tracking a streaming sound, but the sound handler is not "
-"streaming!"
+msgid "Attempt to set %s._visible to %s (evaluating to number %g) refused"
 msgstr ""
 
-#: libcore/movie_root.cpp:896
-msgid ""
-"Time exceeded (%1% secs) while attempting to catch up to streaming sound. "
-"Give up on synchronization?"
+#: libcore/DisplayObject.cpp:1249
+#, c-format
+msgid "Attempt to set %s._alpha to %s (evaluating to number %g) refused"
 msgstr ""
 
-#: libcore/movie_root.cpp:948
+#: libcore/DisplayObject.cpp:1315
 #, c-format
-msgid "Buffer overread during advance: %s"
+msgid "Attempt to set %s._rotation to %s (evaluating to number %g) refused"
 msgstr ""
 
-#: libcore/movie_root.cpp:1066
-#, c-format
-msgid "ActionLimits hit notifying mouse events: %s."
+#: libcore/DisplayObject.cpp:1355
+msgid "_soundbuftime setting"
 msgstr ""
 
-#: libcore/movie_root.cpp:1558
+#: libcore/DisplayObject.cpp:1379
 #, c-format
-msgid "Couldn't process ExternalInterface Call %s"
+msgid "Setting _width=%g of DisplayObject %s (%s)"
 msgstr ""
 
-#: libcore/movie_root.cpp:1603
-msgid "ExternalInterface::GotoFrame()"
+#: libcore/DisplayObject.cpp:1389 libcore/DisplayObject.cpp:1407
+msgid "_focusrect"
 msgstr ""
 
-#: libcore/movie_root.cpp:1611
-msgid "ExternalInterface::LoadMovie()"
+#: libcore/AMFConverter.cpp:98
+msgid "Problems serializing an object's member"
 msgstr ""
 
-#: libcore/movie_root.cpp:1676 gui/Player.cpp:713
+#: libcore/AMFConverter.cpp:212
 #, c-format
-msgid "Could not write to user-provided host requests fd %d: %s"
+msgid "Problems serializing strict array member %d=%s"
 msgstr ""
 
-#: libcore/movie_root.cpp:1837 libcore/movie_root.cpp:1869
-#: libcore/movie_root.cpp:1925
-#, c-format
-msgid "Could not write to browser fd #%d: %s"
+#: libcore/AMFConverter.cpp:242
+msgid "Could not serialize object"
 msgstr ""
 
-#: libcore/movie_root.cpp:2155
+#: libcore/AMFConverter.cpp:319
 #, c-format
-msgid "Fork failed launching URL opener '%s'"
+msgid "Unknown AMF type %s! Cannot proceed"
 msgstr ""
 
-#: libcore/movie_root.cpp:2202
+#: libcore/AMFConverter.cpp:376
 #, c-format
-msgid "Could only write %d bytes to fd #%d"
+msgid "AMF parsing error: %s"
 msgstr ""
 
-#: libcore/movie_root.cpp:2290
-msgid "Live MovieClips"
+#: libcore/AMFConverter.cpp:407
+msgid "Read past _end of buffer for strict array length"
 msgstr ""
 
-#: libcore/movie_root.cpp:2419
-#, c-format
-msgid "%s to UTF8 conversion in LoadableObject input parsing"
+#: libcore/AMFConverter.cpp:425
+msgid "Unable to read array elements"
 msgstr ""
 
-#: libcore/movie_root.cpp:2442
-#, c-format
-msgid ""
-"Hosting application registered no callback for events/queries, can't call %s"
-"(%s)"
+#: libcore/AMFConverter.cpp:442
+msgid "Read past _end of buffer for array length"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:65 libcore/abc/AbcBlock.cpp:133
-msgid "ABC: Finalizing trait yielded bad type for slot."
+#: libcore/AMFConverter.cpp:468 libcore/AMFConverter.cpp:489
+msgid "MALFORMED AMF: premature _end of ECMA_ARRAY block"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:188
-msgid "ABC: Bad name for trait."
+#: libcore/AMFConverter.cpp:480
+msgid "MALFORMED AMF: empty member name not followed by OBJECT_END_AMF0 byte"
+msgstr ""
+
+#: libcore/AMFConverter.cpp:504
+msgid "Unable to read array element"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:193
-msgid "ABC: Trait name must be fully qualified."
+#: libcore/AMFConverter.cpp:528
+msgid "Could not read object property name"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:240 libcore/abc/AbcBlock.cpp:266
-msgid "Bad method id in trait."
+#: libcore/AMFConverter.cpp:539
+msgid "AMF buffer terminated just before object _end byte. continuing anyway."
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:256
-msgid "Bad Class id in trait."
+#: libcore/AMFConverter.cpp:566
+#, c-format
+msgid "readAMF0: invalid reference to object %d (%d known objects)"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:274
-msgid "ABC: Unknown type of trait."
+#: libcore/AMFConverter.cpp:597
+msgid ""
+"Date type encoded timezone info %1%, even though this field should not be "
+"used."
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:468
+#: libcore/as_value.cpp:768
 #, c-format
-msgid "Abc Version: %d.%d"
+msgid "serialization of as_value of type %d"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:567
-msgid "ABC: Bad string given for namespace."
+#: libcore/DisplayList.cpp:305
+#, c-format
+msgid "moveDisplayObject() -- can't find object at depth %d"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:609
-msgid "ABC: Bad namespace for namespace set."
+#: libcore/DisplayList.cpp:312
+msgid "Request to move an unloaded DisplayObject"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:679
+#: libcore/DisplayList.cpp:380
 #, c-format
-msgid "Action Block: Unknown multiname type (%d)."
+msgid "%s.swapDepth(%d) : ignored call with target depth less then %d"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:712 libcore/abc/AbcBlock.cpp:722
-#: libcore/abc/AbcBlock.cpp:732 libcore/abc/AbcBlock.cpp:742
-msgid "Action Block: Bad index in optional argument."
+#: libcore/DisplayList.cpp:404
+msgid ""
+"First argument to DisplayList::swapDepth() is NOT a DisplayObject in the "
+"list. Call ignored."
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:752
-msgid "ABC: Bad index in optional argument, namespaces."
+#: libcore/DisplayList.cpp:875
+#, c-format
+msgid ""
+"mergeDisplayList: DisplayObject %s (%s at depth %d [%d]) about to be "
+"discarded in given display list is not marked as unloaded and not found in "
+"the merged current displaylist"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:774
+#: libcore/LoadVariablesThread.cpp:75
 #, c-format
-msgid "ABC: Bad default value type (%X), but continuing."
+msgid "%s to UTF8 conversion in MovieClip.loadVariables input parsing"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:812
-msgid "ABC: Bad return type for method info."
+#: libcore/LoadVariablesThread.cpp:124
+#, c-format
+msgid "Stream couldn't seek to end: %s"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:825
-msgid "ABC: Unknown return type."
+#: libcore/LoadVariablesThread.cpp:129
+#, c-format
+msgid ""
+"Size of 'variables' stream advertised to be %d bytes, but turned out to be "
+"%d bytes."
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:842
-msgid "ABC: Bad parameter type in method."
+#: libcore/Button.cpp:477
+#, c-format
+msgid "Unhandled button event %s"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:851
-msgid "ABC: Unknown parameter type."
+#: libcore/Button.cpp:789
+msgid "Button placed with an init object. This will be ignored."
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:940
-msgid "ABC: Out of bounds instance name."
+#: libcore/Button.cpp:957
+msgid "Enabled"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:948
-msgid "ABC: QName required for instance."
+#: libcore/Button.cpp:962
+msgid "Button state"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:953
-msgid "ABC: No namespace to use for storing class."
+#: libcore/Button.cpp:966
+msgid "Action characters"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:968
-msgid "Duplicate class registration."
+#: libcore/Button.cpp:995
+msgid "Button.blendMode"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:984
-msgid "ABC: Bad super type."
+#: libcore/Button.cpp:1004
+msgid "Button.cacheAsBitmap"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:995
-#, c-format
-msgid "ABC: Super type not found (%s)"
+#: libcore/Button.cpp:1013
+msgid "Button.filters"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1002
-msgid "ABC: Can't extend a class which is final."
+#: libcore/Button.cpp:1022
+msgid "Button.scale9Grid"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1008
-msgid "ABC: Can't extend an interface type."
+#: libcore/Button.cpp:1031
+msgid "Button.getTabIndex"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1014
-msgid "ABC: Class cannot be its own supertype."
+#: libcore/Button.cpp:1040
+msgid "Button.setTabIndex"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1035
-msgid "ABC: Bad namespace for protected."
+#: libcore/DisplayObjectContainer.cpp:74
+msgid "Children"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1054
-msgid "ABC: Bad name for interface."
+#: libcore/PropertyList.cpp:274
+#, c-format
+msgid "Property %s already exists, can't addDestructiveGetter"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1061
-msgid "ABC: Can't implement a non-interface type."
+#: libdevice/rawfb/RawFBDevice.cpp:63
+msgid "Couldn't initialize RAWFB device!"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1073
-msgid "ABC: Out of bounds method for initializer."
+#: libdevice/rawfb/RawFBDevice.cpp:95
+msgid "Freeing framebuffer memory"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1108
-msgid "ABC: Out of bound static constructor for class."
+#: libdevice/rawfb/RawFBDevice.cpp:100
+msgid "Freeing offscreen buffer"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1147
-msgid "ABC: Out of bounds method for script."
+#: libdevice/rawfb/RawFBDevice.cpp:119
+#, c-format
+msgid "WARNING: Using %s as a fake framebuffer!"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1183
-msgid "ABC: Out of bounds for method body."
+#: libdevice/rawfb/RawFBDevice.cpp:138
+#, c-format
+msgid "Could not open framebuffer device: %s"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1190
-msgid "ABC: Only one body per method."
+#: libdevice/rawfb/RawFBDevice.cpp:141
+#, c-format
+msgid "Opened framebuffer device: %s"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1236
-msgid "ABC: Out of bound type for exception."
+#: libdevice/rawfb/RawFBDevice.cpp:177
+msgid "LUT8: Setting up colormap"
 msgstr ""
 
-#: libcore/abc/AbcBlock.cpp:1246
+#: libdevice/rawfb/RawFBDevice.cpp:202
 #, c-format
-msgid "ABC: Unknown type of object to catch. (%s)"
-msgstr ""
-
-#: libcore/abc/AbcBlock.cpp:1264
-msgid "ABC: Out of bound name for caught exception."
+msgid "LUT8: Error setting colormap: %s"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:79
-msgid ""
-"Requested to keep from completely loading a movie, but the movie in question "
-"is an image, for which we don't yet have the concept of a 'loading thread'"
+#: libdevice/rawfb/RawFBDevice.cpp:407
+msgid "Couldn't write to the fake cmap!"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:94
-msgid "FLV can't be loaded directly as a movie"
+#: libdevice/rawfb/RawFBDevice.cpp:411
+msgid "Couldn't write to the fake cmap, unknown type!"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:98
-msgid "Unknown file type"
+#: libdevice/rawfb/RawFBDevice.cpp:425
+msgid "Signaled fbe to reload it's colormap."
 msgstr ""
 
-#: libcore/MovieFactory.cpp:133
+#: libdevice/rawfb/RawFBDevice.cpp:432
 #, c-format
-msgid "Couldn't load library movie '%s'"
+msgid "fakefb_ioctl(%d)"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:173
-msgid "Can't read file header"
+#: libdevice/vaapi/VaapiImage.cpp:38
+#, c-format
+msgid "VaapiImage::VaapiImage(): format '%s'\n"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:212
-msgid "Can't read 3 bytes after an MZ (.exe) header"
+#: libdevice/vaapi/VaapiImage.cpp:82
+#, c-format
+msgid "  image 0x%08x, format '%s'\n"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:222
-msgid "Could not find SWF inside an .exe file"
+#: libdevice/vaapi/VaapiSurfaceGLX.cpp:205
+#, c-format
+msgid "  -> surface %p\n"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:231
+#: libdevice/vaapi/VaapiSurfaceGLX.cpp:212
 #, c-format
-msgid "unknown file type, buffer is %c%c%c"
+msgid "VaapiSurface::~VaapiSurface(): surface %p\n"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:273
+#: libdevice/vaapi/VaapiSurfaceGLX.cpp:266
 #, c-format
-msgid "Can't read image file from %s"
+msgid "VaapiSurfaceGLX::update(): from surface 0x%08x\n"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:283
+#: libdevice/vaapi/VaapiSurface.cpp:77
 #, c-format
-msgid "Parsing error: %s"
+msgid "VaapiSurface::~VaapiSurface(): surface 0x%08x\n"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:309
+#: libdevice/vaapi/VaapiSubpicture.cpp:35
 #, c-format
-msgid "failed to open '%s'; can't create movie"
+msgid "VaapiSubpicture::VaapiSubpicture(): format '%s'\n"
 msgstr ""
 
-#: libcore/MovieFactory.cpp:314
+#: libdevice/vaapi/VaapiSurfaceProxy.cpp:31
 #, c-format
-msgid "streamProvider opener can't open '%s'"
+msgid "VaapiSurfaceProxy::VaapiSurfaceProxy(): surface 0x%08x\n"
 msgstr ""
 
-#: libcore/PropertyList.cpp:274
+#: libdevice/vaapi/VaapiSurfaceProxy.cpp:36
 #, c-format
-msgid "Property %s already exists, can't addDestructiveGetter"
+msgid "VaapiSurfaceProxy::~VaapiSurfaceProxy(): surface 0x%08x\n"
 msgstr ""
 
-#: libcore/as_object.cpp:439
-#, c-format
-msgid "Caught exception: %s"
+#: libdevice/x11/X11Device.cpp:88 libdevice/x11/X11Device.cpp:106
+msgid "Couldn't initialize X11 device!"
 msgstr ""
 
-#: libcore/as_object.cpp:627
-#, c-format
-msgid "Attempt to set read-only property '%s'"
+#: libdevice/x11/X11Device.cpp:142
+msgid "couldn't open X11 display!"
 msgstr ""
 
-#: libcore/as_object.cpp:639
-#, c-format
-msgid "%s: %s"
+#: libdevice/x11/X11Device.cpp:162
+msgid "Error: couldn't get X visual\n"
 msgstr ""
 
-#: libcore/as_object.cpp:654
-#, c-format
-msgid "Unknown failure in setting property '%s' on object '%p'"
+#: libdevice/x11/X11Device.cpp:199
+msgid "The default Display is not set!"
 msgstr ""
 
-#: libcore/as_object.cpp:683
-#, c-format
-msgid "Attempt to initialize read-only property '%s' on object '%p' twice"
+#: libdevice/x11/X11Device.cpp:212
+msgid "No Display device set!"
 msgstr ""
 
-#: libcore/as_object.cpp:845
-msgid "Circular inheritance chain detected during isPrototypeOf call"
+#: libdevice/x11/X11Device.cpp:217
+msgid "No drawable window set!"
 msgstr ""
 
 #: libdevice/egl/eglDevice.cpp:86 libdevice/egl/eglDevice.cpp:108
@@ -6879,18 +6980,18 @@ msgstr ""
 msgid "EGL_VERSION = %s, EGL_VENDOR = %s"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:208 libdevice/egl/eglDevice.cpp:543
+#: libdevice/egl/eglDevice.cpp:208 libdevice/egl/eglDevice.cpp:547
 #: gui/gtk/gtk_glue_ovg.cpp:383
 #, c-format
 msgid "eglGetConfigs() failed to retrieve the number of configs (error %s)"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:213 libdevice/egl/eglDevice.cpp:548
+#: libdevice/egl/eglDevice.cpp:213 libdevice/egl/eglDevice.cpp:552
 #: gui/gtk/gtk_glue_ovg.cpp:388
 msgid "No EGLconfigs found\n"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:216 libdevice/egl/eglDevice.cpp:551
+#: libdevice/egl/eglDevice.cpp:216 libdevice/egl/eglDevice.cpp:555
 #, c-format
 msgid "Max number of EGL Configs is %d"
 msgstr ""
@@ -6975,93 +7076,120 @@ msgstr ""
 msgid "Initializing EGL for OpenVG"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:390
+#: libdevice/egl/eglDevice.cpp:394
 msgid "Initializing EGL Surface"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:397
+#: libdevice/egl/eglDevice.cpp:401
 #, c-format
 msgid "eglCreateWindowSurface failed (error %s)"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:411
+#: libdevice/egl/eglDevice.cpp:415
 #, c-format
 msgid "eglCreateContext failed (error %s)"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:423
+#: libdevice/egl/eglDevice.cpp:427
 #, c-format
 msgid "eglMakeCurrent failed (error %s)"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:555 gui/gtk/gtk_glue_ovg.cpp:395
+#: libdevice/egl/eglDevice.cpp:559 gui/gtk/gtk_glue_ovg.cpp:395
 msgid "Out of memory\n"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:560
+#: libdevice/egl/eglDevice.cpp:564
 #, c-format
 msgid "eglGetConfigs() failed to retrieve the configs (error %s)"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:773
+#: libdevice/egl/eglDevice.cpp:777
 #, c-format
 msgid "eglCreatePbufferSurface() failed (error 0x%x)"
 msgstr ""
 
-#: libdevice/egl/eglDevice.cpp:793 libdevice/egl/eglDevice.cpp:814
+#: libdevice/egl/eglDevice.cpp:797 libdevice/egl/eglDevice.cpp:818
 #, c-format
 msgid "eglCreatePbufferFromClientBuffer() failed (error 0x%x)"
 msgstr ""
 
-#: libdevice/vaapi/VaapiSurfaceProxy.cpp:31
+#: libdevice/events/UinputDevice.cpp:46
+msgid "ioctl(UI_DEV_DESTROY)"
+msgstr ""
+
+#: libdevice/events/UinputDevice.cpp:77 libdevice/events/MouseDevice.cpp:94
+#: libdevice/events/TouchDevice.cpp:312 libdevice/events/EventDevice.cpp:703
 #, c-format
-msgid "VaapiSurfaceProxy::VaapiSurfaceProxy(): surface 0x%08x\n"
+msgid "You don't have the proper permissions to open %s"
+msgstr ""
+
+#: libdevice/events/UinputDevice.cpp:82
+#, c-format
+msgid "Found a User mode input device at %s"
+msgstr ""
+
+#: libdevice/events/UinputDevice.cpp:98
+msgid "User Mode Input device not initialized yet!"
+msgstr ""
+
+#: libdevice/events/UinputDevice.cpp:103
+msgid "ioctl(UI_SET_EVBIT, EV_KEY)"
+msgstr ""
+
+#: libdevice/events/UinputDevice.cpp:109
+msgid "ioctl(UI_SET_EVBIT, EV_REL)"
+msgstr ""
+
+#: libdevice/events/UinputDevice.cpp:113
+msgid "ioctl(UI_SET_RELBIT, REL_X)"
+msgstr ""
+
+#: libdevice/events/UinputDevice.cpp:117
+msgid "ioctl( UI_SET_RELBIT, REL_Y)"
 msgstr ""
 
-#: libdevice/vaapi/VaapiSurfaceProxy.cpp:36
-#, c-format
-msgid "VaapiSurfaceProxy::~VaapiSurfaceProxy(): surface 0x%08x\n"
+#: libdevice/events/UinputDevice.cpp:142
+msgid "write uidev"
 msgstr ""
 
-#: libdevice/vaapi/VaapiSubpicture.cpp:35
+#: libdevice/events/UinputDevice.cpp:147
 #, c-format
-msgid "VaapiSubpicture::VaapiSubpicture(): format '%s'\n"
+msgid "ioctl(UI_SET_EVBIT, EV_ABS): %s"
 msgstr ""
 
-#: libdevice/vaapi/VaapiSurface.cpp:77
+#: libdevice/events/UinputDevice.cpp:151
 #, c-format
-msgid "VaapiSurface::~VaapiSurface(): surface 0x%08x\n"
+msgid "ioctl(UI_SET_ABSBIT,ABS_X): %s"
 msgstr ""
 
-#: libdevice/vaapi/VaapiSurfaceGLX.cpp:205
+#: libdevice/events/UinputDevice.cpp:155
 #, c-format
-msgid "  -> surface %p\n"
+msgid "ioctl(UI_SET_ABSBIT, ABS_Y): %s"
 msgstr ""
 
-#: libdevice/vaapi/VaapiSurfaceGLX.cpp:212
+#: libdevice/events/UinputDevice.cpp:161
 #, c-format
-msgid "VaapiSurface::~VaapiSurface(): surface %p\n"
+msgid "ioctl(UI_SET_KEYBIT, BTN_LEFT)): %s"
 msgstr ""
 
-#: libdevice/vaapi/VaapiSurfaceGLX.cpp:266
+#: libdevice/events/UinputDevice.cpp:165
 #, c-format
-msgid "VaapiSurfaceGLX::update(): from surface 0x%08x\n"
+msgid "ioctl(UI_SET_KEYBIT, BTN_RIGHT): %s"
 msgstr ""
 
-#: libdevice/vaapi/VaapiImage.cpp:38
+#: libdevice/events/UinputDevice.cpp:169
 #, c-format
-msgid "VaapiImage::VaapiImage(): format '%s'\n"
+msgid "ioctl(UI_SET_EVBIT, ABS_PRESSURE): %s"
 msgstr ""
 
-#: libdevice/vaapi/VaapiImage.cpp:82
+#: libdevice/events/UinputDevice.cpp:177
 #, c-format
-msgid "  image 0x%08x, format '%s'\n"
+msgid "ioctl(UI_SET_KEYBIT, BTN_MOUSE): %s"
 msgstr ""
 
-#: libdevice/events/MouseDevice.cpp:94 libdevice/events/EventDevice.cpp:699
-#: libdevice/events/TouchDevice.cpp:312 libdevice/events/UinputDevice.cpp:77
-#, c-format
-msgid "You don't have the proper permissions to open %s"
+#: libdevice/events/UinputDevice.cpp:182
+msgid "ioctl(UI_DEV_CREATED) failed!"
 msgstr ""
 
 #: libdevice/events/MouseDevice.cpp:99
@@ -7146,15 +7274,50 @@ msgstr ""
 msgid "mouse_command: discarded %d bytes from input buffer"
 msgstr ""
 
-#: libdevice/events/InputDevice.cpp:136
+#: libdevice/events/TouchDevice.cpp:83
+msgid "No filespec specified for the touchscreen device."
+msgstr ""
+
+#: libdevice/events/TouchDevice.cpp:89
 #, c-format
-msgid "The device has this error: %s"
+msgid "Could not open touchscreen %s: %s"
 msgstr ""
 
-#: libdevice/events/InputDevice.cpp:211
+#: libdevice/events/TouchDevice.cpp:96
+#, c-format
+msgid "Could not get touchscreen fd %s: %s"
+msgstr ""
+
+#: libdevice/events/TouchDevice.cpp:103
+#, c-format
+msgid "Using TSLIB on %s"
+msgstr ""
+
+#: libdevice/events/TouchDevice.cpp:134
+#, c-format
+msgid "Touched x: %d, y: %d"
+msgstr ""
+
+#: libdevice/events/TouchDevice.cpp:138
+#, c-format
+msgid "lifted x: %d y: %d"
+msgstr ""
+
+#: libdevice/events/TouchDevice.cpp:244
+msgid "WARNING: Error parsing calibration data!"
+msgstr ""
+
+#: libdevice/events/TouchDevice.cpp:246
+#, c-format
 msgid ""
-"WARNING: PS/2 Mouse support disabled as it conflicts with the input event "
-"support."
+"Using touchscreen calibration data: %.0f / %.0f / %.0f / %.0f / %.0f / %.0f"
+msgstr ""
+
+#: libdevice/events/TouchDevice.cpp:249
+msgid ""
+"WARNING: No touchscreen calibration settings found. The mouse pointer most "
+"probably won't work precisely. Set TSCALIB environment variable with correct "
+"values for better results"
 msgstr ""
 
 #: libdevice/events/EventDevice.cpp:80
@@ -7171,22 +7334,22 @@ msgstr ""
 msgid "evdev driver version is %d.%d.%d"
 msgstr ""
 
-#: libdevice/events/EventDevice.cpp:102 libdevice/events/EventDevice.cpp:720
+#: libdevice/events/EventDevice.cpp:102 libdevice/events/EventDevice.cpp:724
 #, c-format
 msgid "ioctl (EVIOCGID): %s"
 msgstr ""
 
-#: libdevice/events/EventDevice.cpp:107 libdevice/events/EventDevice.cpp:714
+#: libdevice/events/EventDevice.cpp:107 libdevice/events/EventDevice.cpp:718
 #, c-format
 msgid "ioctl (EVIOCGNAME): %s"
 msgstr ""
 
-#: libdevice/events/EventDevice.cpp:109 libdevice/events/EventDevice.cpp:716
+#: libdevice/events/EventDevice.cpp:109 libdevice/events/EventDevice.cpp:720
 #, c-format
 msgid "The device on %s says its name is %s"
 msgstr ""
 
-#: libdevice/events/EventDevice.cpp:115 libdevice/events/EventDevice.cpp:722
+#: libdevice/events/EventDevice.cpp:115 libdevice/events/EventDevice.cpp:726
 #, c-format
 msgid "vendor %04hx product %04hx version %04hx"
 msgstr ""
@@ -7292,348 +7455,173 @@ msgstr ""
 msgid "ioctl (EVIOCGABS(ABS_Y)): %s"
 msgstr ""
 
-#: libdevice/events/EventDevice.cpp:245
-#, c-format
-msgid "ioctl (EVIOCSABS(ABS_Y)): %s"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:307
-#, c-format
-msgid "Type is: %s(%hd), Code is: %hd, Val is: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:388
-#, c-format
-msgid "REL_X: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:392
-#, c-format
-msgid "REL_Y: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:396
-#, c-format
-msgid "REL_Z: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:400
-#, c-format
-msgid "REL_RX: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:404
-#, c-format
-msgid "REL_RY: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:408
-#, c-format
-msgid "REL_RZ: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:412
-#, c-format
-msgid "REL_HWHEEL: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:414
-#, c-format
-msgid "REL_DIAL: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:416
-#, c-format
-msgid "REL_WHEEL: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:418
-#, c-format
-msgid "REL_MISC: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:420
-#, c-format
-msgid "Relative move event %d from Input Event Device"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:443
-#, c-format
-msgid "ABS_Z: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:450
-#, c-format
-msgid "ABS_VOLUME: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:454
-#, c-format
-msgid "ABS_DISTANCE: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:458
-#, c-format
-msgid "ABS_RX: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:462
-#, c-format
-msgid "ABS_RY: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:466
-#, c-format
-msgid "ABS_RZ: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:470
-#, c-format
-msgid "ABS_THROTTLE: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:474
-#, c-format
-msgid "ABS_RUDDER: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:478
-#, c-format
-msgid "ABS_GAS: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:482
-#, c-format
-msgid "ABS_BRAKE: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:486
-#, c-format
-msgid "ABS_TILT_X: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:490
-#, c-format
-msgid "ABS_TILT_Y: %d"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:505 libdevice/events/EventDevice.cpp:529
-msgid "Misc event from Input Event Device"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:533
-msgid "LED event from Input Event Device"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:536
-msgid "Sound event from Input Event Device"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:539
-msgid "Key autorepeat event from Input Event Device"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:542
-msgid "Force Feedback event from Input Event Device"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:545
-msgid "Force Feedback status event from Input Event Device"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:548
-msgid "Power event from Input Event Device"
-msgstr ""
-
-#: libdevice/events/EventDevice.cpp:736
-#, c-format
-msgid "Enabling USB device: %s"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:83
-msgid "No filespec specified for the touchscreen device."
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:89
-#, c-format
-msgid "Could not open touchscreen %s: %s"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:96
-#, c-format
-msgid "Could not get touchscreen fd %s: %s"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:103
-#, c-format
-msgid "Using TSLIB on %s"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:134
-#, c-format
-msgid "Touched x: %d, y: %d"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:138
-#, c-format
-msgid "lifted x: %d y: %d"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:244
-msgid "WARNING: Error parsing calibration data!"
+#: libdevice/events/EventDevice.cpp:245
+#, c-format
+msgid "ioctl (EVIOCSABS(ABS_Y)): %s"
 msgstr ""
 
-#: libdevice/events/TouchDevice.cpp:246
+#: libdevice/events/EventDevice.cpp:307
 #, c-format
-msgid ""
-"Using touchscreen calibration data: %.0f / %.0f / %.0f / %.0f / %.0f / %.0f"
+msgid "Type is: %s(%hd), Code is: %hd, Val is: %d"
 msgstr ""
 
-#: libdevice/events/TouchDevice.cpp:249
-msgid ""
-"WARNING: No touchscreen calibration settings found. The mouse pointer most "
-"probably won't work precisely. Set TSCALIB environment variable with correct "
-"values for better results"
+#: libdevice/events/EventDevice.cpp:388
+#, c-format
+msgid "REL_X: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:46
-msgid "ioctl(UI_DEV_DESTROY)"
+#: libdevice/events/EventDevice.cpp:392
+#, c-format
+msgid "REL_Y: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:82
+#: libdevice/events/EventDevice.cpp:396
 #, c-format
-msgid "Found a User mode input device at %s"
+msgid "REL_Z: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:98
-msgid "User Mode Input device not initialized yet!"
+#: libdevice/events/EventDevice.cpp:400
+#, c-format
+msgid "REL_RX: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:103
-msgid "ioctl(UI_SET_EVBIT, EV_KEY)"
+#: libdevice/events/EventDevice.cpp:404
+#, c-format
+msgid "REL_RY: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:109
-msgid "ioctl(UI_SET_EVBIT, EV_REL)"
+#: libdevice/events/EventDevice.cpp:408
+#, c-format
+msgid "REL_RZ: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:113
-msgid "ioctl(UI_SET_RELBIT, REL_X)"
+#: libdevice/events/EventDevice.cpp:412
+#, c-format
+msgid "REL_HWHEEL: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:117
-msgid "ioctl( UI_SET_RELBIT, REL_Y)"
+#: libdevice/events/EventDevice.cpp:415
+#, c-format
+msgid "REL_DIAL: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:142
-msgid "write uidev"
+#: libdevice/events/EventDevice.cpp:418
+#, c-format
+msgid "REL_WHEEL: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:147
+#: libdevice/events/EventDevice.cpp:421
 #, c-format
-msgid "ioctl(UI_SET_EVBIT, EV_ABS): %s"
+msgid "REL_MISC: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:151
+#: libdevice/events/EventDevice.cpp:424
 #, c-format
-msgid "ioctl(UI_SET_ABSBIT,ABS_X): %s"
+msgid "Relative move event %d from Input Event Device"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:155
+#: libdevice/events/EventDevice.cpp:447
 #, c-format
-msgid "ioctl(UI_SET_ABSBIT, ABS_Y): %s"
+msgid "ABS_Z: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:161
+#: libdevice/events/EventDevice.cpp:454
 #, c-format
-msgid "ioctl(UI_SET_KEYBIT, BTN_LEFT)): %s"
+msgid "ABS_VOLUME: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:165
+#: libdevice/events/EventDevice.cpp:458
 #, c-format
-msgid "ioctl(UI_SET_KEYBIT, BTN_RIGHT): %s"
+msgid "ABS_DISTANCE: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:169
+#: libdevice/events/EventDevice.cpp:462
 #, c-format
-msgid "ioctl(UI_SET_EVBIT, ABS_PRESSURE): %s"
+msgid "ABS_RX: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:177
+#: libdevice/events/EventDevice.cpp:466
 #, c-format
-msgid "ioctl(UI_SET_KEYBIT, BTN_MOUSE): %s"
+msgid "ABS_RY: %d"
 msgstr ""
 
-#: libdevice/events/UinputDevice.cpp:182
-msgid "ioctl(UI_DEV_CREATED) failed!"
+#: libdevice/events/EventDevice.cpp:470
+#, c-format
+msgid "ABS_RZ: %d"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:63
-msgid "Couldn't initialize RAWFB device!"
+#: libdevice/events/EventDevice.cpp:474
+#, c-format
+msgid "ABS_THROTTLE: %d"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:94
-msgid "Freeing framebuffer memory"
+#: libdevice/events/EventDevice.cpp:478
+#, c-format
+msgid "ABS_RUDDER: %d"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:99
-msgid "Freeing offscreen buffer"
+#: libdevice/events/EventDevice.cpp:482
+#, c-format
+msgid "ABS_GAS: %d"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:118
+#: libdevice/events/EventDevice.cpp:486
 #, c-format
-msgid "WARNING: Using %s as a fake framebuffer!"
+msgid "ABS_BRAKE: %d"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:133
+#: libdevice/events/EventDevice.cpp:490
 #, c-format
-msgid "Could not open framebuffer device: %s"
+msgid "ABS_TILT_X: %d"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:136
+#: libdevice/events/EventDevice.cpp:494
 #, c-format
-msgid "Opened framebuffer device: %s"
+msgid "ABS_TILT_Y: %d"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:147
-#, c-format
-msgid "Framebuffer device uses %d bytes of memory."
+#: libdevice/events/EventDevice.cpp:509 libdevice/events/EventDevice.cpp:533
+msgid "Misc event from Input Event Device"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:149
-#, c-format
-msgid "Video mode: %dx%d with %d bits per pixel."
+#: libdevice/events/EventDevice.cpp:537
+msgid "LED event from Input Event Device"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:153
-#, c-format
-msgid "Framebuffer stride is: %d."
+#: libdevice/events/EventDevice.cpp:540
+msgid "Sound event from Input Event Device"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:167
-msgid "LUT8: Setting up colormap"
+#: libdevice/events/EventDevice.cpp:543
+msgid "Key autorepeat event from Input Event Device"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:192
-#, c-format
-msgid "LUT8: Error setting colormap: %s"
+#: libdevice/events/EventDevice.cpp:546
+msgid "Force Feedback event from Input Event Device"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:376
-msgid "Couldn't write to the fake cmap!"
+#: libdevice/events/EventDevice.cpp:549
+msgid "Force Feedback status event from Input Event Device"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:380
-msgid "Couldn't write to the fake cmap, unknown type!"
+#: libdevice/events/EventDevice.cpp:552
+msgid "Power event from Input Event Device"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:394
-msgid "Signaled fbe to reload it's colormap."
+#: libdevice/events/EventDevice.cpp:740
+#, c-format
+msgid "Enabling USB device: %s"
 msgstr ""
 
-#: libdevice/rawfb/RawFBDevice.cpp:401
+#: libdevice/events/InputDevice.cpp:136
 #, c-format
-msgid "fakefb_ioctl(%d)"
+msgid "The device has this error: %s"
+msgstr ""
+
+#: libdevice/events/InputDevice.cpp:211
+msgid ""
+"WARNING: PS/2 Mouse support disabled as it conflicts with the input event "
+"support."
 msgstr ""
 
 #: libdevice/directfb/DirectFBDevice.cpp:78
@@ -7684,54 +7672,6 @@ msgstr ""
 msgid "iDirectFB data not set!"
 msgstr ""
 
-#: libdevice/x11/X11Device.cpp:88 libdevice/x11/X11Device.cpp:106
-msgid "Couldn't initialize X11 device!"
-msgstr ""
-
-#: libdevice/x11/X11Device.cpp:142
-msgid "couldn't open X11 display!"
-msgstr ""
-
-#: libdevice/x11/X11Device.cpp:162
-msgid "Error: couldn't get X visual\n"
-msgstr ""
-
-#: libdevice/x11/X11Device.cpp:199
-msgid "The default Display is not set!"
-msgstr ""
-
-#: libdevice/x11/X11Device.cpp:212
-msgid "No Display device set!"
-msgstr ""
-
-#: libdevice/x11/X11Device.cpp:217
-msgid "No drawable window set!"
-msgstr ""
-
-#: libsound/WAVWriter.cpp:65
-msgid "Unable to write file %1%"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:75
-msgid "Unable to open audio"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:339
-msgid "Mkit: Mkit_sound_handler::pause"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:343
-msgid "Mkit: paused"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:351
-msgid "Mkit: Mkit_sound_handler::unpause"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:355
-msgid "Mkit: unpaused"
-msgstr ""
-
 #: libsound/aos4/sound_handler_ahi.cpp:125
 msgid "AOS4: Spawn Audio Process."
 msgstr ""
@@ -7808,6 +7748,26 @@ msgstr ""
 msgid "AOS4: audioTask:Close timer."
 msgstr ""
 
+#: libsound/mkit/sound_handler_mkit.cpp:75
+msgid "Unable to open audio"
+msgstr ""
+
+#: libsound/mkit/sound_handler_mkit.cpp:339
+msgid "Mkit: Mkit_sound_handler::pause"
+msgstr ""
+
+#: libsound/mkit/sound_handler_mkit.cpp:343
+msgid "Mkit: paused"
+msgstr ""
+
+#: libsound/mkit/sound_handler_mkit.cpp:351
+msgid "Mkit: Mkit_sound_handler::unpause"
+msgstr ""
+
+#: libsound/mkit/sound_handler_mkit.cpp:355
+msgid "Mkit: unpaused"
+msgstr ""
+
 #: libsound/sdl/sound_handler_sdl.cpp:91
 #, c-format
 msgid "Couldn't open SDL audio: %s"
@@ -7822,158 +7782,128 @@ msgstr ""
 msgid "Zero buffer length in sdl_audio_callback"
 msgstr ""
 
-#: libsound/sound_handler.cpp:70
+#: libsound/sound_handler.cpp:71
 msgid ""
 "Sound data creator didn't appropriately pad buffer. We'll do so now, but "
 "will cost memory copies."
 msgstr ""
 
-#: libsound/sound_handler.cpp:83
+#: libsound/sound_handler.cpp:84
 #, c-format
 msgid "Invalid (%d) handle passed to fill_stream_data, doing nothing"
 msgstr ""
 
-#: libsound/sound_handler.cpp:90
+#: libsound/sound_handler.cpp:91
 #, c-format
 msgid "handle passed to fill_stream_data (%d) was deleted"
 msgstr ""
 
-#: libsound/sound_handler.cpp:141
+#: libsound/sound_handler.cpp:142
 #, c-format
 msgid "Invalid (%d) handle passed to delete_sound, doing nothing"
 msgstr ""
 
-#: libsound/sound_handler.cpp:152
+#: libsound/sound_handler.cpp:153
 #, c-format
 msgid "handle passed to delete_sound (%d) already deleted"
 msgstr ""
 
-#: libsound/sound_handler.cpp:236
+#: libsound/sound_handler.cpp:237
 #, c-format
 msgid "stop_sound(%d): sound was deleted"
 msgstr ""
 
-#: libsound/sound_handler.cpp:324
+#: libsound/sound_handler.cpp:325
 #, c-format
 msgid "SDL_sound_handler::unplugInputStream: Aux streamer %p not found. "
 msgstr ""
 
-#: libsound/sound_handler.cpp:454
+#: libsound/sound_handler.cpp:455
 #, c-format
 msgid "Could not start streaming sound: %s"
 msgstr ""
 
-#: libsound/sound_handler.cpp:465
+#: libsound/sound_handler.cpp:466
 #, c-format
 msgid "Invalid (%d) sound_handle passed to startSound, doing nothing"
 msgstr ""
 
-#: libsound/sound_handler.cpp:531
+#: libsound/sound_handler.cpp:532
 msgid "Trying to play sound with size 0"
 msgstr ""
 
-#: libsound/sound_handler.cpp:545
+#: libsound/sound_handler.cpp:546
 #, c-format
 msgid "Could not start event sound: %s"
 msgstr ""
 
-#: libsound/sound_handler.cpp:559
+#: libsound/sound_handler.cpp:560
 #, c-format
 msgid "_inputStreams container still has a pointer to deleted InputStream %p!"
 msgstr ""
 
-#: libsound/sound_handler.cpp:704
+#: libsound/sound_handler.cpp:705
 #, c-format
 msgid "Expected 1 InputStream element, found %d"
 msgstr ""
 
-#: utilities/soldumper.cpp:72
-msgid "This program dumps the internal data of a .sol file"
-msgstr ""
-
-#: utilities/soldumper.cpp:74
-msgid "Usage: soldumper [h] filename"
+#: libsound/WAVWriter.cpp:64
+msgid "Unable to write file %1%"
 msgstr ""
 
-#: utilities/soldumper.cpp:75 utilities/dumpshm.cpp:344
-#: utilities/flvdumper.cpp:305
-msgid "-h\tHelp"
+#: utilities/processor.cpp:151
+#, c-format
+msgid "fs_callback(%p): %s %s"
 msgstr ""
 
-#: utilities/soldumper.cpp:76
-msgid "-f\tForce local directory access"
+#: utilities/processor.cpp:169
+#, c-format
+msgid "eventCallback: %s %s"
 msgstr ""
 
-#: utilities/soldumper.cpp:77
-msgid "-l\tList all .sol files in default dir"
+#: utilities/processor.cpp:205
+msgid "gprocessor does not handle %1% message"
 msgstr ""
 
-#: utilities/soldumper.cpp:105
+#: utilities/processor.cpp:240 cygnal/cvm.cpp:227
 #, c-format
-msgid "Gnash soldumper version: %s, Gnash version: %s\n"
+msgid "Gnash gprocessor version: %s, Gnash version: %s\n"
 msgstr ""
 
-#: utilities/soldumper.cpp:121 utilities/processor.cpp:276
-#: utilities/flvdumper.cpp:154 cygnal/cygnal.cpp:476
-#: cygnal/cgi-bin/echo/echo.cpp:144 cygnal/cgi-bin/echo/gateway.cpp:119
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:149
+#: utilities/processor.cpp:279 utilities/flvdumper.cpp:154
+#: utilities/soldumper.cpp:121 cygnal/cygnal.cpp:482
 #: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:216
-#: cygnal/testsuite/libnet.all/test_handler.cpp:103
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:95
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:149
+#: cygnal/cgi-bin/echo/gateway.cpp:119 cygnal/cgi-bin/echo/echo.cpp:144
 #: cygnal/testsuite/libnet.all/test_rtmp.cpp:110
 #: cygnal/testsuite/libnet.all/test_diskstream.cpp:91
+#: cygnal/testsuite/libnet.all/test_handler.cpp:103
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:95
 #: cygnal/testsuite/libnet.all/test_cache.cpp:94
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:103
-#: cygnal/testsuite/libamf.all/test_sol.cpp:103
-#: cygnal/testsuite/libamf.all/test_flv.cpp:92
 #: cygnal/testsuite/libamf.all/test_el.cpp:91
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:108
-#: cygnal/testsuite/libamf.all/test_amf.cpp:109
-msgid "Verbose output turned on"
-msgstr ""
-
-#: utilities/soldumper.cpp:125
-msgid "forcing local directory access only"
-msgstr ""
-
-#: utilities/soldumper.cpp:130
-msgid "List .sol files in the default directory"
-msgstr ""
-
-#: utilities/processor.cpp:148
-#, c-format
-msgid "fs_callback(%p): %s %s"
-msgstr ""
-
-#: utilities/processor.cpp:166
-#, c-format
-msgid "eventCallback: %s %s"
-msgstr ""
-
-#: utilities/processor.cpp:202
-msgid "gprocessor does not handle %1% message"
-msgstr ""
-
-#: utilities/processor.cpp:237 cygnal/cvm.cpp:227
-#, c-format
-msgid "Gnash gprocessor version: %s, Gnash version: %s\n"
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:108
+#: cygnal/testsuite/libamf.all/test_flv.cpp:92
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:103
+#: cygnal/testsuite/libamf.all/test_sol.cpp:103
+#: cygnal/testsuite/libamf.all/test_amf.cpp:109
+msgid "Verbose output turned on"
 msgstr ""
 
-#: utilities/processor.cpp:285 cygnal/cvm.cpp:282
+#: utilities/processor.cpp:288 cygnal/cvm.cpp:282
 msgid "Verbose actions disabled at compile time"
 msgstr ""
 
-#: utilities/processor.cpp:292 cygnal/cvm.cpp:289
+#: utilities/processor.cpp:295 cygnal/cvm.cpp:289
 msgid "Verbose parsing disabled at compile time"
 msgstr ""
 
-#: utilities/processor.cpp:456 utilities/processor.cpp:459
+#: utilities/processor.cpp:466 utilities/processor.cpp:469
 #: gui/pythonmod/gnash-view.cpp:438 gui/pythonmod/gnash-view.cpp:441
 #, c-format
 msgid "%s appended to local sandboxes"
 msgstr ""
 
-#: utilities/processor.cpp:631
+#: utilities/processor.cpp:641
 #, c-format
 msgid ""
 "gprocessor -- an SWF processor for Gnash.\n"
@@ -7985,7 +7915,7 @@ msgid ""
 "%s%s%s%s"
 msgstr ""
 
-#: utilities/processor.cpp:638
+#: utilities/processor.cpp:648
 msgid ""
 "options:\n"
 "\n"
@@ -7994,15 +7924,15 @@ msgid ""
 "  -v          Be verbose; i.e. print log messages to stdout\n"
 msgstr ""
 
-#: utilities/processor.cpp:645
+#: utilities/processor.cpp:655
 msgid "  -vp         Be verbose about movie parsing\n"
 msgstr ""
 
-#: utilities/processor.cpp:650
+#: utilities/processor.cpp:660
 msgid "  -va         Be verbose about ActionScript\n"
 msgstr ""
 
-#: utilities/processor.cpp:655
+#: utilities/processor.cpp:665
 msgid ""
 "  -d [<ms>]\n"
 "              Milliseconds delay between advances (0 by default).\n"
@@ -8016,6 +7946,53 @@ msgid ""
 "              is encountered if set to 0 (default).\n"
 msgstr ""
 
+#: utilities/flvdumper.cpp:172 cygnal/testsuite/libnet.all/test_rtmp.cpp:120
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:100
+#: cygnal/testsuite/libnet.all/test_handler.cpp:112
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:111
+#: cygnal/testsuite/libnet.all/test_cache.cpp:103
+#: cygnal/testsuite/libamf.all/test_el.cpp:107
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:123
+#: cygnal/testsuite/libamf.all/test_flv.cpp:103
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:119
+#: cygnal/testsuite/libamf.all/test_sol.cpp:113
+#: cygnal/testsuite/libamf.all/test_amf.cpp:125
+msgid "Error parsing command line options: "
+msgstr ""
+
+#: utilities/flvdumper.cpp:173
+msgid "This is a Gnash flvdumper bug."
+msgstr ""
+
+#: utilities/flvdumper.cpp:178
+msgid "Error: no input file was specified. Exiting."
+msgstr ""
+
+#: utilities/flvdumper.cpp:302
+msgid "This program dumps the internal data of an FLV video file"
+msgstr ""
+
+#: utilities/flvdumper.cpp:304
+msgid "Usage: flvdumper [-h] [-m] [-a] filename"
+msgstr ""
+
+#: utilities/flvdumper.cpp:305 utilities/dumpshm.cpp:344
+#: utilities/soldumper.cpp:75
+msgid "-h\tHelp"
+msgstr ""
+
+#: utilities/flvdumper.cpp:306
+msgid "-m\tPrint only Meta tags (default)"
+msgstr ""
+
+#: utilities/flvdumper.cpp:307
+msgid "-a\tPrint all tags."
+msgstr ""
+
+#: utilities/rtmpget.cpp:445
+msgid "Error parsing command line: "
+msgstr ""
+
 #: utilities/dumpshm.cpp:136
 #, c-format
 msgid "Gnash dumpshm version: %s, Gnash version: %s\n"
@@ -8112,396 +8089,469 @@ msgstr ""
 msgid "\tTotal # of bytes: "
 msgstr ""
 
-#: utilities/flvdumper.cpp:172
-#: cygnal/testsuite/libnet.all/test_handler.cpp:112
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:111
-#: cygnal/testsuite/libnet.all/test_rtmp.cpp:120
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:100
-#: cygnal/testsuite/libnet.all/test_cache.cpp:103
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:119
-#: cygnal/testsuite/libamf.all/test_sol.cpp:113
-#: cygnal/testsuite/libamf.all/test_flv.cpp:103
-#: cygnal/testsuite/libamf.all/test_el.cpp:107
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:123
-#: cygnal/testsuite/libamf.all/test_amf.cpp:125
-msgid "Error parsing command line options: "
-msgstr ""
-
-#: utilities/flvdumper.cpp:173
-msgid "This is a Gnash flvdumper bug."
+#: utilities/soldumper.cpp:72
+msgid "This program dumps the internal data of a .sol file"
 msgstr ""
 
-#: utilities/flvdumper.cpp:178
-msgid "Error: no input file was specified. Exiting."
+#: utilities/soldumper.cpp:74
+msgid "Usage: soldumper [h] filename"
 msgstr ""
 
-#: utilities/flvdumper.cpp:302
-msgid "This program dumps the internal data of an FLV video file"
+#: utilities/soldumper.cpp:76
+msgid "-f\tForce local directory access"
 msgstr ""
 
-#: utilities/flvdumper.cpp:304
-msgid "Usage: flvdumper [-h] [-m] [-a] filename"
+#: utilities/soldumper.cpp:77
+msgid "-l\tList all .sol files in default dir"
 msgstr ""
 
-#: utilities/flvdumper.cpp:306
-msgid "-m\tPrint only Meta tags (default)"
+#: utilities/soldumper.cpp:105
+#, c-format
+msgid "Gnash soldumper version: %s, Gnash version: %s\n"
 msgstr ""
 
-#: utilities/flvdumper.cpp:307
-msgid "-a\tPrint all tags."
+#: utilities/soldumper.cpp:125
+msgid "forcing local directory access only"
 msgstr ""
 
-#: utilities/rtmpget.cpp:445
-msgid "Error parsing command line: "
+#: utilities/soldumper.cpp:130
+msgid "List .sol files in the default directory"
 msgstr ""
 
-#: plugin/win32/plugin.cpp:590 plugin/aos4/plugin.cpp:593
+#: plugin/aos4/plugin.cpp:593 plugin/win32/plugin.cpp:590
 #, c-format
 msgid "FSCommand_callback(%p): %s %s"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:94
-msgid "Bad magic number for FLV file!"
+#: cygnal/rtmp_server.cpp:124
+msgid "Failed to read the handshake from the client."
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:101
-#, c-format
-msgid "Bad version in FLV header! %d"
+#: cygnal/rtmp_server.cpp:139
+msgid "failed to read the handshake from the client."
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:110
-#, c-format
-msgid "Bad FLV file Type: %d"
+#: cygnal/rtmp_server.cpp:149
+msgid "Didn't receive any data in handshake!"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:123
-#, c-format
-msgid "Bad header size in FLV header! %d"
+#: cygnal/rtmp_server.cpp:160
+msgid "RTMP header had parsing error!"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:156
+#: cygnal/rtmp_server.cpp:168
 #, c-format
-msgid "%d bytes for a string is over the safe limit of %d"
+msgid "NetConnection unusually large! %d"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:186
-#, c-format
-msgid "Bad FLV Audio Sound Type: %x"
+#: cygnal/rtmp_server.cpp:202
+msgid "failed to read the body of the handshake data from the client."
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:195
-#, c-format
-msgid "Bad FLV Audio Sound size: %d"
+#: cygnal/rtmp_server.cpp:210
+msgid "Didn't receive NetConnection object in handshake!"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:209
-#, c-format
-msgid "Bad FLV Audio Sound Rate: %d"
+#: cygnal/rtmp_server.cpp:234
+msgid "Couldn't send onBWDone to client!"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:226
+#: cygnal/rtmp_server.cpp:261 cygnal/rtmp_server.cpp:1704
+msgid "Couldn't send Ping to client!"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:275
+msgid "Couldn't send response to client!"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:338
 #, c-format
-msgid "Bad FLV Audio Sound format: %d"
+msgid "Couldn't sent RTMP Handshake response at %d!"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:257
+#: cygnal/rtmp_server.cpp:355
+msgid "No data in original handshake buffer."
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:359
+msgid "No data in response handshake buffer."
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:387
 #, c-format
-msgid "Bad FLV Video Codec CodecID: 0x%x"
+msgid "Handshake Finish Data didn't match by %d bytes"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:267
+#: cygnal/rtmp_server.cpp:555
+msgid "Route"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:567
+msgid "AMF3 Notify"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:573
+msgid "AMF3 Invoke"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:582
+msgid "FLV Dat"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:585
 #, c-format
-msgid "Bad FLV Video Frame CodecID: 0x%x"
+msgid "ERROR: Unidentified RTMP message content type 0x%x"
 msgstr ""
 
-#: cygnal/libamf/flv.cpp:340 cygnal/libamf/flv.cpp:342
-#: cygnal/libamf/flv.cpp:344
+#: cygnal/rtmp_server.cpp:1105
+msgid "Couldn't reliably extract the echo data!"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:1402
 #, c-format
-msgid "FLV MetaData: %s: %s"
+msgid "No stream for client %d"
 msgstr ""
 
-#: cygnal/libamf/lcshm.cpp:372
-msgid "No data pointer to parse!"
+#: cygnal/rtmp_server.cpp:1444
+msgid "Stream Start"
 msgstr ""
 
-#: cygnal/libamf/lcshm.cpp:391
-msgid "Didn't extract an element from the byte stream!"
+#: cygnal/rtmp_server.cpp:1447
+msgid "Stream EOF"
 msgstr ""
 
-#: cygnal/libamf/lcshm.cpp:503
-#, c-format
-msgid " The size of %s is %d "
+#: cygnal/rtmp_server.cpp:1450
+msgid "Stream No Data"
 msgstr ""
 
-#: cygnal/libamf/lcshm.cpp:520
+#: cygnal/rtmp_server.cpp:1453
 #, c-format
-msgid "Failed to open shared memory segment: \"%s\""
+msgid "Stream Set Buffer: %d"
 msgstr ""
 
-#: cygnal/libamf/lcshm.cpp:561
+#: cygnal/rtmp_server.cpp:1467
+msgid "Stream Pong"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:1486
+msgid "Set Chunk Size"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:1489
+msgid "Bytes Read"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:1497
+msgid "Set Window Size"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:1500
+msgid "Set Bandwidth"
+msgstr ""
+
+#: cygnal/rtmp_server.cpp:1511 cygnal/rtmp_server.cpp:1514
+#: cygnal/rtmp_server.cpp:1517 cygnal/rtmp_server.cpp:1520
+#: cygnal/rtmp_server.cpp:1667
 #, c-format
-msgid "Failed to open shared memory segment: 0x%x"
+msgid "RTMP type %d"
 msgstr ""
 
-#: cygnal/libamf/lcshm.cpp:660
+#: cygnal/rtmp_server.cpp:1526
 #, c-format
-msgid " ***** The size of the data is %s *****"
+msgid "Error INVOKING method \"%s\"!"
 msgstr ""
 
-#: cygnal/libamf/element.cpp:175
-msgid "Can't create remote function calls yet"
+#: cygnal/rtmp_server.cpp:1650
+msgid "Received an _error message from the client!"
 msgstr ""
 
-#: cygnal/libamf/element.cpp:479
+#: cygnal/rtmp_server.cpp:1670
 #, c-format
-msgid "Size of Element \"%s\" is: %d"
+msgid "ERROR: Unidentified AMF header data type 0x%x"
 msgstr ""
 
-#: cygnal/libamf/element.cpp:1534
-msgid "FIXME: got AMF3 data!"
+#: cygnal/cygnal.cpp:190
+msgid "cygnal -- a streaming media server."
 msgstr ""
 
-#: cygnal/libamf/sol.cpp:230
-#, c-format
-msgid ""
-"%s: SOL file header is: \n"
-"%s"
+#: cygnal/cygnal.cpp:192
+msgid "Usage: cygnal [options...]"
 msgstr ""
 
-#: cygnal/libamf/sol.cpp:250
-#, c-format
-msgid "Failed opening file '%s' in binary mode"
+#: cygnal/cygnal.cpp:193 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:596
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:321
+#: cygnal/cgi-bin/echo/gateway.cpp:406 cygnal/cgi-bin/echo/echo.cpp:316
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:269
+#: cygnal/testsuite/libnet.all/test_handler.cpp:281
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:300
+#: cygnal/testsuite/libnet.all/test_cache.cpp:391
+#: cygnal/testsuite/libamf.all/test_el.cpp:491
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:721
+#: cygnal/testsuite/libamf.all/test_flv.cpp:282
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:247
+#: cygnal/testsuite/libamf.all/test_amf.cpp:422
+msgid "  -h,  --help          Print this help and exit"
+msgstr ""
+
+#: cygnal/cygnal.cpp:194
+msgid "  -V,  --version       Print version information and exit"
+msgstr ""
+
+#: cygnal/cygnal.cpp:195 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:597
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:322
+#: cygnal/cgi-bin/echo/gateway.cpp:407 cygnal/cgi-bin/echo/echo.cpp:317
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:270
+#: cygnal/testsuite/libnet.all/test_handler.cpp:282
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:301
+#: cygnal/testsuite/libnet.all/test_cache.cpp:392
+#: cygnal/testsuite/libamf.all/test_el.cpp:492
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:722
+#: cygnal/testsuite/libamf.all/test_flv.cpp:283
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:248
+#: cygnal/testsuite/libamf.all/test_amf.cpp:423
+msgid "  -v,  --verbose       Output verbose debug info"
 msgstr ""
 
-#: cygnal/libamf/sol.cpp:337
-#, c-format
-msgid "Error writing %d bytes of header to output file %s"
+#: cygnal/cygnal.cpp:196
+msgid "  -s,  --singlethread  Disable Multi Threading"
 msgstr ""
 
-#: cygnal/libamf/sol.cpp:344
-#, c-format
-msgid "Error writing %d bytes of body to output file %s"
+#: cygnal/cygnal.cpp:197 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:598
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:323
+#: cygnal/cgi-bin/echo/gateway.cpp:408 cygnal/cgi-bin/echo/echo.cpp:318
+msgid "  -n,  --netdebug      Turn on net debugging messages"
 msgstr ""
 
-#: cygnal/libamf/sol.cpp:404
-#, c-format
-msgid "%s is an SOL file"
+#: cygnal/cygnal.cpp:198
+msgid "  -o   --only-port     Only use port for debugging"
 msgstr ""
 
-#: cygnal/libamf/sol.cpp:407
-#, c-format
-msgid ""
-"%s looks like an SOL file, but the length is wrong. Should be %d, got %d"
+#: cygnal/cygnal.cpp:199
+msgid "  -p   --port-offset   Port offset for debugging"
 msgstr ""
 
-#: cygnal/libamf/sol.cpp:413
-#, c-format
-msgid "%s isn't an SOL file"
+#: cygnal/cygnal.cpp:200
+msgid "  -t,  --testing       Turn on special Gnash testing support"
 msgstr ""
 
-#: cygnal/libamf/sol.cpp:455
-#, c-format
-msgid "Reading SharedObject %s: %s"
+#: cygnal/cygnal.cpp:201
+msgid "  -a,  --admin         Enable the administration thread"
 msgstr ""
 
-#: cygnal/libamf/amf_msg.cpp:178
-msgid "AMF Message 'target' field missing!"
+#: cygnal/cygnal.cpp:202
+msgid "  -r,  --root          Document root for all files"
 msgstr ""
 
-#: cygnal/libamf/amf_msg.cpp:181
-msgid "AMF Message 'reply' field missing!"
+#: cygnal/cygnal.cpp:203
+msgid "  -m,  --machine       Hostname for this machine"
 msgstr ""
 
-#: cygnal/libamf/amf_msg.cpp:184
-msgid "AMF Message 'size' field missing!"
+#: cygnal/cygnal.cpp:266
+msgid ": couldn't open file: "
 msgstr ""
 
-#: cygnal/libamf/amf_msg.cpp:231
+#: cygnal/cygnal.cpp:343
 #, c-format
-msgid ""
-"Error parsing the AMF packet: \n"
-"\t%s"
+msgid "Couldn't connect to %s"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:180
+#: cygnal/cygnal.cpp:363
 #, c-format
-msgid "Encoded data size has %d properties"
-msgstr ""
-
-#: cygnal/libamf/amf.cpp:300
-msgid "XML AMF objects not supported yet"
+msgid "%s is active on fd #%d."
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:404
-msgid "Movie Clip AMF objects not supported yet"
+#: cygnal/cygnal.cpp:509
+#, c-format
+msgid "Extraneous argument: %s"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:495
-msgid "Long String AMF objects not supported yet"
+#: cygnal/cygnal.cpp:513 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:441
+#, c-format
+msgid "Document Root for media files is: %s"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:512
-msgid "Reecord Set AMF objects not supported yet"
+#: cygnal/cygnal.cpp:597
+msgid "Cygnal done..."
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:561
-msgid "Encoding a strict array as an ecma array"
+#: cygnal/cygnal.cpp:610
+#, c-format
+msgid "Got a %d interrupt"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:784
-msgid "FIXME: got AMF3 data type"
+#: cygnal/cygnal.cpp:630
+msgid ""
+"Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\n"
+"Cygnal comes with NO WARRANTY, to the extent permitted by law.\n"
+"You may redistribute copies of Cygnal under the terms of the GNU General\n"
+"Public License V3 or later. For more information, see the file named "
+"COPYING.\n"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:913
-msgid "AMF body input data is NULL"
+#: cygnal/cygnal.cpp:652
+#, c-format
+msgid "Starting Admin Handler for port %d"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:937
-msgid "AMF data too short to contain type field"
+#: cygnal/cygnal.cpp:658
+msgid "Got an incoming Admin request"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:948
-msgid "Element has no type!"
+#: cygnal/cygnal.cpp:666
+msgid "no more admin data, exiting...\n"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:958
-msgid "AMF data segment too short to containtype NUMBER"
+#: cygnal/cygnal.cpp:751
+msgid "admin_handler: Done...!\n"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:978
+#: cygnal/cygnal.cpp:780
 #, c-format
-msgid "%d bytes for a string is over the safe limit of %d, line %d"
+msgid "Can't start %s Connection Handler for fd #%d, port %hd"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:1021
-msgid "AMF0 MovieClip frame"
+#: cygnal/cygnal.cpp:784
+#, c-format
+msgid "Starting %s Connection Handler for fd #%d, port %hd"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:1151
-msgid "Found object terminator byte"
+#: cygnal/cygnal.cpp:795
+#, c-format
+msgid "This system has %d cpus."
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:1169
+#: cygnal/cygnal.cpp:832
 #, c-format
-msgid "%s: type %d"
+msgid "No new %s network connections"
 msgstr ""
 
-#: cygnal/libamf/amf.cpp:1262
+#: cygnal/cygnal.cpp:836
 #, c-format
-msgid "No data associated with Property \"%s\""
+msgid "*** New %s network connection for thread ID #%d, fd #%d ***"
 msgstr ""
 
-#: cygnal/libamf/buffer.cpp:179
+#: cygnal/cygnal.cpp:882
 #, c-format
-msgid "Buffer %x (%d) stayed in queue for %f seconds"
+msgid "Creating new %s Handler for %s using fd #%d"
 msgstr ""
 
-#: cygnal/libamf/buffer.cpp:711
+#: cygnal/cygnal.cpp:900
 #, c-format
-msgid "cygnal::Buffer::resize(%d): Truncating data (%d bytes) while resizing!"
+msgid "Reusing %s Handler for %s using fd #%d"
 msgstr ""
 
-#: cygnal/libamf/buffer.cpp:766
+#: cygnal/cygnal.cpp:926
 #, c-format
-msgid "Creating %d errors in the buffer"
+msgid "Creating new %s Handler for: %s for fd %#d"
 msgstr ""
 
-#: cygnal/handler.cpp:128
+#: cygnal/cygnal.cpp:950
 #, c-format
-msgid "Protocol %d for Handler::AddClient()"
+msgid "Cygnal Plugin paths are: %s"
 msgstr ""
 
-#: cygnal/handler.cpp:171 cygnal/handler.cpp:196
-msgid "HTTP key couldn't be read!"
+#: cygnal/cygnal.cpp:971
+#, c-format
+msgid "Couldn't load plugin for %s"
 msgstr ""
 
-#: cygnal/handler.cpp:214 cygnal/handler.cpp:244
+#: cygnal/cygnal.cpp:982
 #, c-format
-msgid "FD #%d has no protocol handler registered"
+msgid "Number of active Threads is %d"
 msgstr ""
 
-#: cygnal/handler.cpp:319
+#: cygnal/cygnal.cpp:985
 #, c-format
-msgid "No %s symbol in plugin"
+msgid "Restarting loop for next connection for port %d..."
 msgstr ""
 
-#: cygnal/handler.cpp:322
+#: cygnal/cygnal.cpp:1043
 #, c-format
-msgid "Initialized Plugin: \"%s\": %s"
+msgid "%d active disk streams"
 msgstr ""
 
-#: cygnal/handler.cpp:335 cygnal/handler.cpp:350
+#: cygnal/cygnal.cpp:1083
 #, c-format
-msgid "Couldn't get %s symbol"
+msgid "Got a hit for fd #%d, protocol %s"
 msgstr ""
 
-#: cygnal/cvm.cpp:276
-msgid "The debugger has been disabled at configuration time"
+#: cygnal/cygnal.cpp:1087
+msgid "No protocol specified!"
 msgstr ""
 
-#: cygnal/http_server.cpp:154 cygnal/http_server.cpp:211
+#: cygnal/cygnal.cpp:1095 cygnal/cygnal.cpp:1120 cygnal/cygnal.cpp:1131
 #, c-format
-msgid "New filestream %s"
+msgid "Done with HTTP connection for fd #%d, CGI %s"
 msgstr ""
 
-#: cygnal/http_server.cpp:213
+#: cygnal/cygnal.cpp:1100
 #, c-format
-msgid "Reusing filestream %s"
-msgstr ""
-
-#: cygnal/http_server.cpp:306
-msgid "couldn't read data!"
+msgid "Not Done with HTTP connection for fd #%d, it's a persistent connection."
 msgstr ""
 
-#: cygnal/http_server.cpp:373 cygnal/libnet/http.cpp:592
-msgid "PUT request"
+#: cygnal/cygnal.cpp:1109
+#, c-format
+msgid "Done with RTMP connection for fd #%d, CGI "
 msgstr ""
 
-#: cygnal/http_server.cpp:383 cygnal/libnet/http.cpp:601
-msgid "DELETE request"
+#: cygnal/cygnal.cpp:1143
+#, c-format
+msgid "Unsupported network protocol for fd #%d, %d"
 msgstr ""
 
-#: cygnal/http_server.cpp:393 cygnal/libnet/http.cpp:609
-msgid "CONNECT request"
+#: cygnal/cygnal.cpp:1163
+#, c-format
+msgid "Got no hits, %d retries"
 msgstr ""
 
-#: cygnal/http_server.cpp:403 cygnal/libnet/http.cpp:617
-msgid "OPTIONS request"
+#: cygnal/cvm.cpp:276
+msgid "The debugger has been disabled at configuration time"
 msgstr ""
 
-#: cygnal/http_server.cpp:413 cygnal/libnet/http.cpp:625
-msgid "HEAD request"
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:233
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:166
+#: cygnal/cgi-bin/echo/gateway.cpp:139 cygnal/cgi-bin/echo/echo.cpp:161
+#, c-format
+msgid "Error parsing command line options: %s"
 msgstr ""
 
-#: cygnal/http_server.cpp:423 cygnal/libnet/http.cpp:633
-msgid "TRACE request"
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:309
+#, c-format
+msgid "Scanning directory \"%s\" for %s files"
 msgstr ""
 
-#: cygnal/http_server.cpp:1013
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:340
 #, c-format
-msgid "Processing HTTP data for fd #%d"
+msgid "Gnash media file name: %s"
 msgstr ""
 
-#: cygnal/http_server.cpp:1022
-msgid "FIXME: Existing data in packet!"
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:595
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:320
+#: cygnal/cgi-bin/echo/gateway.cpp:405 cygnal/cgi-bin/echo/echo.cpp:315
+#: cygnal/testsuite/libamf.all/test_flv.cpp:281
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:246
+#: cygnal/testsuite/libamf.all/test_amf.cpp:421
+msgid "Usage: test_amf [options...]"
 msgstr ""
 
-#: cygnal/http_server.cpp:1024
-msgid "FIXME: No existing data in packet!"
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:599
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:324 cygnal/cgi-bin/echo/echo.cpp:319
+msgid "  -p,  --netdebug      port for network"
 msgstr ""
 
-#: cygnal/libnet/cache.cpp:62
-msgid "using this constructor is only allowed for testing purposes."
+#: cygnal/crc.cpp:145
+#, c-format
+msgid "Couldn't open file: %s"
 msgstr ""
 
-#: cygnal/libnet/cache.cpp:105
+#: cygnal/libnet/statistics.cpp:113
 #, c-format
-msgid "Adding file %s to cache."
+msgid "Stream type is: %s"
 msgstr ""
 
-#: cygnal/libnet/cache.cpp:148
+#: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "Trying to find %s in the cache."
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp.cpp:184
@@ -8744,757 +8794,738 @@ msgstr ""
 msgid "RTMP header size is out of range! %d"
 msgstr ""
 
-#: cygnal/libnet/sshserver.cpp:145
-#, c-format
-msgid "User %s wants to auth with pass %s\n"
-msgstr ""
-
-#: cygnal/libnet/sshserver.cpp:200 cygnal/libnet/sshclient.cpp:459
-msgid "==== The SSH header breaks down as follows: ===="
-msgstr ""
-
-#: cygnal/libnet/network.cpp:114
-msgid "Could not find a usable WinSock DLL"
-msgstr ""
-
-#: cygnal/libnet/network.cpp:162
-#, c-format
-msgid "already connected to port %hd"
-msgstr ""
-
-#: cygnal/libnet/network.cpp:184
-#, c-format
-msgid "unable to get protocol entry for %s"
-msgstr ""
-
-#: cygnal/libnet/network.cpp:201 cygnal/libnet/network.cpp:425
-#: cygnal/libnet/network.cpp:583
+#: cygnal/libnet/rtmp_client.cpp:152
 #, c-format
-msgid "unable to create socket: %s"
-msgstr ""
-
-#: cygnal/libnet/network.cpp:208
-msgid "setsockopt SO_REUSEADDR failed"
+msgid "URL is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:219
+#: cygnal/libnet/rtmp_client.cpp:153
 #, c-format
-msgid "unable to bind to port %hd: %s"
+msgid "Protocol is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:229
+#: cygnal/libnet/rtmp_client.cpp:154
 #, c-format
-msgid "Server bound to service on %s, port %hd, using fd #%d"
+msgid "Host is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:235
+#: cygnal/libnet/rtmp_client.cpp:155
 #, c-format
-msgid "unable to listen on port: %hd: %s "
+msgid "Port is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:291
+#: cygnal/libnet/rtmp_client.cpp:156
 #, c-format
-msgid "Waiting to accept net traffic on fd #%d for port %d"
-msgstr ""
-
-#: cygnal/libnet/network.cpp:351
-msgid "There is a new network connection request."
+msgid "Path is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:358
+#: cygnal/libnet/rtmp_client.cpp:157
 #, c-format
-msgid "The accept() socket for fd #%d was interrupted by a system call"
+msgid "Filename is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:382
+#: cygnal/libnet/rtmp_client.cpp:158
 #, c-format
-msgid "unable to accept: %s"
+msgid "App is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:387
+#: cygnal/libnet/rtmp_client.cpp:159
 #, c-format
-msgid "Accepting TCP/IP connection on fd #%d for port %d"
+msgid "Query is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:446 cygnal/libnet/network.cpp:604
+#: cygnal/libnet/rtmp_client.cpp:160
 #, c-format
-msgid "The connect() socket for fd %d was interrupted by a system call"
+msgid "tcUrl is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:452 cygnal/libnet/network.cpp:477
-#: cygnal/libnet/network.cpp:610 cygnal/libnet/network.cpp:650
+#: cygnal/libnet/rtmp_client.cpp:161
 #, c-format
-msgid "The connect() socket for fd %d never was available for writing"
+msgid "swfUrl is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:463 cygnal/libnet/network.cpp:628
+#: cygnal/libnet/rtmp_client.cpp:162
 #, c-format
-msgid "The connect() socket for fd %d timed out waiting to write"
+msgid "pageUrl is %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:471
-#, c-format
-msgid "\tsocket name %s for fd %d"
+#: cygnal/libnet/rtmp_client.cpp:313
+msgid "RTMP handshake request failed"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:553
-#, c-format
-msgid "%s: to host %s at port %d"
+#: cygnal/libnet/rtmp_client.cpp:336
+msgid "RTMP handshake completion failed!"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:559
-#, c-format
-msgid "The hostname for this machine is %s"
+#: cygnal/libnet/rtmp_client.cpp:350
+msgid "Sent NetConnection Connect message successfully"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:561
-msgid "Couldn't get the hostname for this machine"
+#: cygnal/libnet/rtmp_client.cpp:353
+msgid "Couldn't send NetConnection Connect message,"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:576
-#, c-format
-msgid "The IP address for this client socket is %s"
+#: cygnal/libnet/rtmp_client.cpp:622
+msgid "Couldn't read data block in handshake!"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:643
+#: cygnal/libnet/rtmp_client.cpp:635
 #, c-format
-msgid "\tport %d at IP %s for fd %d"
+msgid "Read data block in handshake, got %d bytes."
 msgstr ""
 
-#: cygnal/libnet/network.cpp:730
+#: cygnal/libnet/rtmp_client.cpp:638
 #, c-format
-msgid "Unable to close the socket for fd #%d: %s"
+msgid "Couldn't read data block in handshake, read %d bytes!"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:738
+#: cygnal/libnet/rtmp_client.cpp:645
 #, c-format
-msgid "Closed the socket on fd #%d"
+msgid "RTMP Handshake header: Uptime: %u"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:767
+#: cygnal/libnet/rtmp_client.cpp:688
 #, c-format
-msgid "%s: Closed fd #%d"
+msgid "About to write %d bytes, data is: %d bytes."
 msgstr ""
 
-#: cygnal/libnet/network.cpp:879
+#: cygnal/libnet/rtmp_client.cpp:691
 #, c-format
-msgid "Trying to read %d bytes from fd #%d"
+msgid "Client response header for handshake 2: %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:943 cygnal/libnet/network.cpp:1117
+#: cygnal/libnet/rtmp_client.cpp:693
 #, c-format
-msgid "The socket for fd #%d was interrupted by a system call"
+msgid "Data in response for handshake 2: %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:947
-#, c-format
-msgid "The socket for fd #%d was never available for reading"
+#: cygnal/libnet/rtmp_client.cpp:702
+msgid "Couldn't write the second handshake packet!"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:953
-#, c-format
-msgid "The socket for #fd %d timed out waiting to read"
+#: cygnal/libnet/rtmp_client.cpp:729
+msgid "Got no response from the RTMP server"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:970
-#, c-format
-msgid "The socket for fd #%d was never available for reading data"
+#: cygnal/libnet/rtmp_client.cpp:737
+msgid "Got empty packet in buffer."
 msgstr ""
 
-#: cygnal/libnet/network.cpp:976
-#, c-format
-msgid "The socket for #fd %d timed out waiting to read data"
+#: cygnal/libnet/rtmp_client.cpp:748
+msgid "No response from INVOKE of NetConnection connect"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:982
+#: cygnal/libnet/rtmp_client.cpp:755
 #, c-format
-msgid "read %d bytes from fd #%d from port %d"
+msgid ""
+"%s: There are %d channel queues in the RTMP input queue, %d messages in "
+"front queue"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:986
-#, c-format
-msgid ""
-"%s: Read packet data from fd #%d (%d bytes): \n"
-"%s"
+#: cygnal/libnet/rtmp_client.cpp:768
+msgid "Couldn't decode RTMP message header"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1121
-#, c-format
-msgid "The socket for fd #%d was never available for writing"
+#: cygnal/libnet/rtmp_client.cpp:773
+msgid "RTMP packet can't be of none type!"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1125
-#, c-format
-msgid "The socket for fd #%d timed out waiting to write"
+#: cygnal/libnet/rtmp_client.cpp:777
+msgid "Server message data packet"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1139
-#, c-format
-msgid "Wrote zero out of %d bytes to fd #%d: %s"
+#: cygnal/libnet/rtmp_client.cpp:781
+msgid "Abort packet"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1144
-#, c-format
-msgid "Couldn't write %d bytes to fd #%d: %s"
+#: cygnal/libnet/rtmp_client.cpp:784
+msgid "Bytes Read data packet"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1152
+#: cygnal/libnet/rtmp_client.cpp:789
 #, c-format
-msgid "wrote %d bytes to fd #%d, expected %d"
+msgid "Got a Ping type %s"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1157
-#, c-format
-msgid "wrote %d bytes to fd #%d for port %d"
+#: cygnal/libnet/rtmp_client.cpp:793
+msgid "Set Window Size message data packet"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1165
-#, c-format
-msgid ""
-"%s: Wrote packet data to fd #%d: \n"
-"%s"
+#: cygnal/libnet/rtmp_client.cpp:796
+msgid "Set Bandwidthmessage data packet"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1179
-#, c-format
-msgid "took %d usec to write (%d bytes)"
+#: cygnal/libnet/rtmp_client.cpp:799
+msgid "Route from other server packet"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1194 cygnal/libnet/network.cpp:1205
-#, c-format
-msgid "%s: adding fd #%d to pollfds"
+#: cygnal/libnet/rtmp_client.cpp:818
+msgid "AMF0 Shared Object data packet message"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1231
-#, c-format
-msgid "%s: erasing fd #%d from pollfds"
+#: cygnal/libnet/rtmp_client.cpp:821
+msgid "AMF3 Notify data packet message"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1279
-#, c-format
-msgid "%s: waiting for %d fds"
+#: cygnal/libnet/rtmp_client.cpp:824
+msgid "AMF3 Shared Object data packet message"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1318
-#, c-format
-msgid "Poll returned: %d, timeout is: %d"
+#: cygnal/libnet/rtmp_client.cpp:827
+msgid "AMF0 Invoke packet message"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1449
-msgid "Waiting for data was interrupted by a system call"
+#: cygnal/libnet/rtmp_client.cpp:830
+msgid "AMF0 Notify data packet message"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1453
-msgid "Waiting for data for fdset, was never available for reading"
+#: cygnal/libnet/rtmp_client.cpp:841
+msgid "FLV data packet message"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1467
-#, c-format
-msgid "select() got an error: %s."
+#: cygnal/libnet/rtmp_client.cpp:844
+msgid "Couldn't decode RTMP message Body"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1471
-#, c-format
-msgid "select() saw activity on %d file descriptors."
+#: cygnal/libnet/cque.cpp:71
+msgid "CQue::wait(win32)"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1547
-#, c-format
-msgid "Can't connect to server %s"
+#: cygnal/libnet/cque.cpp:83
+msgid "CQue::notify(win32)"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1559
+#: cygnal/libnet/http.cpp:176
 #, c-format
-msgid "Using default hostname: \"%s\""
+msgid "Setting Content Length to %d"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1564
+#: cygnal/libnet/http.cpp:189
 #, c-format
-msgid "Using default keyfile: \"%s\""
+msgid "Setting Content Type to %d"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1569
+#: cygnal/libnet/http.cpp:199
 #, c-format
-msgid "Using default CA List: \"%s\""
+msgid "Got a request, parsing \"%s\""
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1575
+#: cygnal/libnet/http.cpp:216 cygnal/libnet/http.cpp:1295
 #, c-format
-msgid "Using default Password: \"%s\""
+msgid "Parameters for file: \"%s\""
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1580
+#: cygnal/libnet/http.cpp:220
 #, c-format
-msgid "Using default Root Path to PEM files: \"%s\""
+msgid "Requesting file: \"%s\""
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1585
-msgid "Connected to SSL server"
+#: cygnal/libnet/http.cpp:225
+msgid "Enabling Keep Alive by default for HTTP > 1.0"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1587
-msgid "Couldn't connect to SSL server"
+#: cygnal/libnet/http.cpp:422 cygnal/libnet/http.cpp:521
+#, c-format
+msgid "Que empty, net connection dropped for fd #%d"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1620
-#, c-format
-msgid "#%d bytes waiting in kernel network buffer."
+#: cygnal/libnet/http.cpp:433
+msgid "FIXME: found file in cache!"
 msgstr ""
 
-#: cygnal/libnet/network.cpp:1631
+#: cygnal/libnet/http.cpp:499
 #, c-format
-msgid "Got an %d interrupt while blocked on pselect()"
+msgid "http_handler all done transferring requested file \"%s\"."
 msgstr ""
 
-#: cygnal/libnet/statistics.cpp:113
-#, c-format
-msgid "Stream type is: %s"
+#: cygnal/libnet/http.cpp:542
+msgid "Got file data in POST"
 msgstr ""
 
-#: cygnal/libnet/statistics.cpp:119
-#, c-format
-msgid "%d bytes were transferred in %s seconds"
+#: cygnal/libnet/http.cpp:549
+msgid "Got AMF data in POST"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:152
-#, c-format
-msgid "URL is %s"
+#: cygnal/libnet/http.cpp:564
+msgid "Got CGI echo request in POST"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:153
-#, c-format
-msgid "Protocol is %s"
+#: cygnal/libnet/http.cpp:592 cygnal/http_server.cpp:375
+msgid "PUT request"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:154
-#, c-format
-msgid "Host is %s"
+#: cygnal/libnet/http.cpp:601 cygnal/http_server.cpp:385
+msgid "DELETE request"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:155
-#, c-format
-msgid "Port is %s"
+#: cygnal/libnet/http.cpp:609 cygnal/http_server.cpp:395
+msgid "CONNECT request"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:156
-#, c-format
-msgid "Path is %s"
+#: cygnal/libnet/http.cpp:617 cygnal/http_server.cpp:405
+msgid "OPTIONS request"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:157
-#, c-format
-msgid "Filename is %s"
+#: cygnal/libnet/http.cpp:625 cygnal/http_server.cpp:415
+msgid "HEAD request"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:158
-#, c-format
-msgid "App is %s"
+#: cygnal/libnet/http.cpp:633 cygnal/http_server.cpp:425
+msgid "TRACE request"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:159
+#: cygnal/libnet/http.cpp:1385
 #, c-format
-msgid "Query is %s"
+msgid "%s: Total size for first chunk is: %d, data size %d (%d)"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:160
+#: cygnal/libnet/http.cpp:1419 cygnal/libnet/http.cpp:1512
 #, c-format
-msgid "tcUrl is %s"
+msgid "no data yet for fd #%d, continuing..."
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:161
+#: cygnal/libnet/http.cpp:1436
 #, c-format
-msgid "swfUrl is %s"
+msgid "%s: end of chunks!"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:162
+#: cygnal/libnet/http.cpp:1502
 #, c-format
-msgid "pageUrl is %s"
+msgid "Starting to wait for data in net for fd #%d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:313
-msgid "RTMP handshake request failed"
+#: cygnal/libnet/http.cpp:1538
+#, c-format
+msgid "no more data for fd #%d, exiting..."
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:336
-msgid "RTMP handshake completion failed!"
+#: cygnal/libnet/http.cpp:1542
+#, c-format
+msgid "Handler done for fd #%d, can't read any data..."
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:350
-msgid "Sent NetConnection Connect message successfully"
+#: cygnal/libnet/http.cpp:1548
+#, c-format
+msgid "Done receiving data for fd #%d..."
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:353
-msgid "Couldn't send NetConnection Connect message,"
+#: cygnal/libnet/http.cpp:1560
+msgid "==== The HTTP header breaks down as follows: ===="
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:622
-msgid "Couldn't read data block in handshake!"
+#: cygnal/libnet/http.cpp:1561
+#, c-format
+msgid "Filespec: %s"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:635
+#: cygnal/libnet/http.cpp:1562
 #, c-format
-msgid "Read data block in handshake, got %d bytes."
+msgid "Version: %d.%d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:638
+#: cygnal/libnet/http.cpp:1566
 #, c-format
-msgid "Couldn't read data block in handshake, read %d bytes!"
+msgid "Field: \"%s\" = \"%s\""
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:645
-#, c-format
-msgid "RTMP Handshake header: Uptime: %u"
+#: cygnal/libnet/http.cpp:1570
+msgid "RTMPT optional index is: "
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:688
-#, c-format
-msgid "About to write %d bytes, data is: %d bytes."
+#: cygnal/libnet/http.cpp:1571
+msgid "RTMPT optional client ID is: "
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:691
-#, c-format
-msgid "Client response header for handshake 2: %s"
+#: cygnal/libnet/http.cpp:1572
+msgid "==== ==== ===="
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:693
-#, c-format
-msgid "Data in response for handshake 2: %s"
+#: cygnal/libnet/network.cpp:113
+msgid "Could not find a usable WinSock DLL"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:702
-msgid "Couldn't write the second handshake packet!"
+#: cygnal/libnet/network.cpp:165
+#, c-format
+msgid "already connected to port %hd"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:729
-msgid "Got no response from the RTMP server"
+#: cygnal/libnet/network.cpp:182 cygnal/libnet/network.cpp:580
+#, c-format
+msgid "getaddrinfo() failed with code: #%d - %s\n"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:737
-msgid "Got empty packet in buffer."
+#: cygnal/libnet/network.cpp:231 cygnal/libnet/network.cpp:446
+#, c-format
+msgid "unable to create socket: %s"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:748
-msgid "No response from INVOKE of NetConnection connect"
+#: cygnal/libnet/network.cpp:238
+msgid "setsockopt SO_REUSEADDR failed"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:755
+#: cygnal/libnet/network.cpp:246
 #, c-format
-msgid ""
-"%s: There are %d channel queues in the RTMP input queue, %d messages in "
-"front queue"
+msgid "unable to bind to port %hd: %s"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:768
-msgid "Couldn't decode RTMP message header"
+#: cygnal/libnet/network.cpp:253
+#, c-format
+msgid "unable to listen on port: %hd: %s "
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:773
-msgid "RTMP packet can't be of none type!"
+#: cygnal/libnet/network.cpp:312
+#, c-format
+msgid "Waiting to accept net traffic on fd #%d for port %d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:777
-msgid "Server message data packet"
+#: cygnal/libnet/network.cpp:372
+msgid "There is a new network connection request."
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:781
-msgid "Abort packet"
+#: cygnal/libnet/network.cpp:379
+#, c-format
+msgid "The accept() socket for fd #%d was interrupted by a system call"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:784
-msgid "Bytes Read data packet"
+#: cygnal/libnet/network.cpp:403
+#, c-format
+msgid "unable to accept: %s"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:789
+#: cygnal/libnet/network.cpp:408
 #, c-format
-msgid "Got a Ping type %s"
+msgid "Accepting TCP/IP connection on fd #%d for port %d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:793
-msgid "Set Window Size message data packet"
+#: cygnal/libnet/network.cpp:467 cygnal/libnet/network.cpp:661
+#, c-format
+msgid "The connect() socket for fd %d was interrupted by a system call"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:796
-msgid "Set Bandwidthmessage data packet"
+#: cygnal/libnet/network.cpp:473 cygnal/libnet/network.cpp:498
+#: cygnal/libnet/network.cpp:667 cygnal/libnet/network.cpp:702
+#, c-format
+msgid "The connect() socket for fd %d never was available for writing"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:799
-msgid "Route from other server packet"
+#: cygnal/libnet/network.cpp:484 cygnal/libnet/network.cpp:685
+#, c-format
+msgid "The connect() socket for fd %d timed out waiting to write"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:818
-msgid "AMF0 Shared Object data packet message"
+#: cygnal/libnet/network.cpp:492
+#, c-format
+msgid "\tsocket name %s for fd %d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:821
-msgid "AMF3 Notify data packet message"
+#: cygnal/libnet/network.cpp:571
+#, c-format
+msgid "%s: to host %s at port %d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:824
-msgid "AMF3 Shared Object data packet message"
+#: cygnal/libnet/network.cpp:695
+#, c-format
+msgid "\tport %d at IP %s for fd %d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:827
-msgid "AMF0 Invoke packet message"
+#: cygnal/libnet/network.cpp:780
+#, c-format
+msgid "Unable to close the socket for fd #%d: %s"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:830
-msgid "AMF0 Notify data packet message"
+#: cygnal/libnet/network.cpp:788
+#, c-format
+msgid "Closed the socket on fd #%d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:841
-msgid "FLV data packet message"
+#: cygnal/libnet/network.cpp:817
+#, c-format
+msgid "%s: Closed fd #%d"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:844
-msgid "Couldn't decode RTMP message Body"
+#: cygnal/libnet/network.cpp:929
+#, c-format
+msgid "Trying to read %d bytes from fd #%d"
 msgstr ""
 
-#: cygnal/libnet/sslserver.cpp:136
-msgid "SSL!!"
+#: cygnal/libnet/network.cpp:993 cygnal/libnet/network.cpp:1167
+#, c-format
+msgid "The socket for fd #%d was interrupted by a system call"
 msgstr ""
 
-#: cygnal/libnet/sslserver.cpp:159
-msgid "Got an incoming SSL connection request"
+#: cygnal/libnet/network.cpp:997
+#, c-format
+msgid "The socket for fd #%d was never available for reading"
 msgstr ""
 
-#: cygnal/libnet/sslserver.cpp:169 cygnal/libnet/sslclient.cpp:137
-#: cygnal/libnet/sslclient.cpp:161 cygnal/libnet/sslclient.cpp:212
-#: cygnal/libnet/sslclient.cpp:236 cygnal/libnet/sslclient.cpp:314
+#: cygnal/libnet/network.cpp:1003
 #, c-format
-msgid "Error was: \"%s\"!"
+msgid "The socket for #fd %d timed out waiting to read"
 msgstr ""
 
-#: cygnal/libnet/sslserver.cpp:182 cygnal/libnet/sslclient.cpp:386
-msgid "==== The SSL header breaks down as follows: ===="
+#: cygnal/libnet/network.cpp:1020
+#, c-format
+msgid "The socket for fd #%d was never available for reading data"
 msgstr ""
 
-#: cygnal/libnet/cque.cpp:71
-msgid "CQue::wait(win32)"
+#: cygnal/libnet/network.cpp:1026
+#, c-format
+msgid "The socket for #fd %d timed out waiting to read data"
 msgstr ""
 
-#: cygnal/libnet/cque.cpp:83
-msgid "CQue::notify(win32)"
+#: cygnal/libnet/network.cpp:1032
+#, c-format
+msgid "read %d bytes from fd #%d from port %d"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:211
+#: cygnal/libnet/network.cpp:1036
 #, c-format
-msgid "Can't read CA list from \"%s\"!"
+msgid ""
+"%s: Read packet data from fd #%d (%d bytes): \n"
+"%s"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:216
+#: cygnal/libnet/network.cpp:1171
 #, c-format
-msgid "Read CA list from \"%s\""
+msgid "The socket for fd #%d was never available for writing"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:222
+#: cygnal/libnet/network.cpp:1175
 #, c-format
-msgid "Can't read certificate file \"%s\"!"
+msgid "The socket for fd #%d timed out waiting to write"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:225
+#: cygnal/libnet/network.cpp:1189
 #, c-format
-msgid "Read certificate file \"%s\"."
+msgid "Wrote zero out of %d bytes to fd #%d: %s"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:235
+#: cygnal/libnet/network.cpp:1194
 #, c-format
-msgid "Can't read CERT file \"%s\"!"
+msgid "Couldn't write %d bytes to fd #%d: %s"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:240
+#: cygnal/libnet/network.cpp:1202
 #, c-format
-msgid "Read key file \"%s\"."
+msgid "wrote %d bytes to fd #%d, expected %d"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:301
+#: cygnal/libnet/network.cpp:1207
 #, c-format
-msgid "PORT is: %d"
+msgid "wrote %d bytes to fd #%d for port %d"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:304
+#: cygnal/libnet/network.cpp:1215
 #, c-format
-msgid "Error connecting to remote machine: %s"
+msgid ""
+"%s: Wrote packet data to fd #%d: \n"
+"%s"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:313
+#: cygnal/libnet/network.cpp:1229
 #, c-format
-msgid "Can't connect to SSL server %s"
+msgid "took %d usec to write (%d bytes)"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:318
+#: cygnal/libnet/network.cpp:1244 cygnal/libnet/network.cpp:1255
 #, c-format
-msgid "Connected to SSL server %s"
+msgid "%s: adding fd #%d to pollfds"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:351
-msgid "Certificate doesn't verify"
+#: cygnal/libnet/network.cpp:1281
+#, c-format
+msgid "%s: erasing fd #%d from pollfds"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:354
-msgid "Certificate verified."
+#: cygnal/libnet/network.cpp:1329
+#, c-format
+msgid "%s: waiting for %d fds"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:363
-msgid "Couldn't get Peer certificate!"
+#: cygnal/libnet/network.cpp:1368
+#, c-format
+msgid "Poll returned: %d, timeout is: %d"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:366
-msgid "Got Peer certificate."
+#: cygnal/libnet/network.cpp:1499
+msgid "Waiting for data was interrupted by a system call"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:374
-msgid "Common name doesn't match host name"
+#: cygnal/libnet/network.cpp:1503
+msgid "Waiting for data for fdset, was never available for reading"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:409
+#: cygnal/libnet/network.cpp:1517
 #, c-format
-msgid "Callback executed to set the SSL password, size is: %d"
+msgid "select() got an error: %s."
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:413
+#: cygnal/libnet/network.cpp:1521
 #, c-format
-msgid "The buffer for the password needs to be %d bytes larger"
+msgid "select() saw activity on %d file descriptors."
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:439
+#: cygnal/libnet/network.cpp:1597
 #, c-format
-msgid "-Error with certificate at depth: %i\n"
+msgid "Can't connect to server %s"
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:441
+#: cygnal/libnet/network.cpp:1609
 #, c-format
-msgid "  issuer   = %s\n"
+msgid "Using default hostname: \"%s\""
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:443
+#: cygnal/libnet/network.cpp:1614
 #, c-format
-msgid "  subject  = %s\n"
+msgid "Using default keyfile: \"%s\""
 msgstr ""
 
-#: cygnal/libnet/sslclient.cpp:444
+#: cygnal/libnet/network.cpp:1619
 #, c-format
-msgid "err %i:%s\n"
+msgid "Using default CA List: \"%s\""
 msgstr ""
 
-#: cygnal/libnet/http.cpp:176
+#: cygnal/libnet/network.cpp:1625
 #, c-format
-msgid "Setting Content Length to %d"
+msgid "Using default Password: \"%s\""
 msgstr ""
 
-#: cygnal/libnet/http.cpp:189
+#: cygnal/libnet/network.cpp:1630
 #, c-format
-msgid "Setting Content Type to %d"
+msgid "Using default Root Path to PEM files: \"%s\""
 msgstr ""
 
-#: cygnal/libnet/http.cpp:199
-#, c-format
-msgid "Got a request, parsing \"%s\""
+#: cygnal/libnet/network.cpp:1635
+msgid "Connected to SSL server"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:216 cygnal/libnet/http.cpp:1295
-#, c-format
-msgid "Parameters for file: \"%s\""
+#: cygnal/libnet/network.cpp:1637
+msgid "Couldn't connect to SSL server"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:220
+#: cygnal/libnet/network.cpp:1670
 #, c-format
-msgid "Requesting file: \"%s\""
+msgid "#%d bytes waiting in kernel network buffer."
 msgstr ""
 
-#: cygnal/libnet/http.cpp:225
-msgid "Enabling Keep Alive by default for HTTP > 1.0"
+#: cygnal/libnet/network.cpp:1692
+msgid "no IP address in addrinfo!"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:422 cygnal/libnet/http.cpp:521
+#: cygnal/libnet/network.cpp:1704
 #, c-format
-msgid "Que empty, net connection dropped for fd #%d"
+msgid "Got an %d interrupt while blocked on pselect()"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:433
-msgid "FIXME: found file in cache!"
+#: cygnal/libnet/sslclient.cpp:137 cygnal/libnet/sslclient.cpp:161
+#: cygnal/libnet/sslclient.cpp:212 cygnal/libnet/sslclient.cpp:236
+#: cygnal/libnet/sslclient.cpp:314 cygnal/libnet/sslserver.cpp:169
+#, c-format
+msgid "Error was: \"%s\"!"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:499
+#: cygnal/libnet/sslclient.cpp:211
 #, c-format
-msgid "http_handler all done transferring requested file \"%s\"."
+msgid "Can't read CA list from \"%s\"!"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:542
-msgid "Got file data in POST"
+#: cygnal/libnet/sslclient.cpp:216
+#, c-format
+msgid "Read CA list from \"%s\""
 msgstr ""
 
-#: cygnal/libnet/http.cpp:549
-msgid "Got AMF data in POST"
+#: cygnal/libnet/sslclient.cpp:222
+#, c-format
+msgid "Can't read certificate file \"%s\"!"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:564
-msgid "Got CGI echo request in POST"
+#: cygnal/libnet/sslclient.cpp:225
+#, c-format
+msgid "Read certificate file \"%s\"."
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1385
+#: cygnal/libnet/sslclient.cpp:235
 #, c-format
-msgid "%s: Total size for first chunk is: %d, data size %d (%d)"
+msgid "Can't read CERT file \"%s\"!"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1419 cygnal/libnet/http.cpp:1512
+#: cygnal/libnet/sslclient.cpp:240
 #, c-format
-msgid "no data yet for fd #%d, continuing..."
+msgid "Read key file \"%s\"."
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1436
+#: cygnal/libnet/sslclient.cpp:301
 #, c-format
-msgid "%s: end of chunks!"
+msgid "PORT is: %d"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1502
+#: cygnal/libnet/sslclient.cpp:304
 #, c-format
-msgid "Starting to wait for data in net for fd #%d"
+msgid "Error connecting to remote machine: %s"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1538
+#: cygnal/libnet/sslclient.cpp:313
 #, c-format
-msgid "no more data for fd #%d, exiting..."
+msgid "Can't connect to SSL server %s"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1542
+#: cygnal/libnet/sslclient.cpp:318
 #, c-format
-msgid "Handler done for fd #%d, can't read any data..."
+msgid "Connected to SSL server %s"
+msgstr ""
+
+#: cygnal/libnet/sslclient.cpp:351
+msgid "Certificate doesn't verify"
+msgstr ""
+
+#: cygnal/libnet/sslclient.cpp:354
+msgid "Certificate verified."
+msgstr ""
+
+#: cygnal/libnet/sslclient.cpp:363
+msgid "Couldn't get Peer certificate!"
+msgstr ""
+
+#: cygnal/libnet/sslclient.cpp:366
+msgid "Got Peer certificate."
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1548
-#, c-format
-msgid "Done receiving data for fd #%d..."
+#: cygnal/libnet/sslclient.cpp:374
+msgid "Common name doesn't match host name"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1560
-msgid "==== The HTTP header breaks down as follows: ===="
+#: cygnal/libnet/sslclient.cpp:386 cygnal/libnet/sslserver.cpp:182
+msgid "==== The SSL header breaks down as follows: ===="
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1561
+#: cygnal/libnet/sslclient.cpp:409
 #, c-format
-msgid "Filespec: %s"
+msgid "Callback executed to set the SSL password, size is: %d"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1562
+#: cygnal/libnet/sslclient.cpp:413
 #, c-format
-msgid "Version: %d.%d"
+msgid "The buffer for the password needs to be %d bytes larger"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1566
+#: cygnal/libnet/sslclient.cpp:439
 #, c-format
-msgid "Field: \"%s\" = \"%s\""
+msgid "-Error with certificate at depth: %i\n"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1570
-msgid "RTMPT optional index is: "
+#: cygnal/libnet/sslclient.cpp:441
+#, c-format
+msgid "  issuer   = %s\n"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1571
-msgid "RTMPT optional client ID is: "
+#: cygnal/libnet/sslclient.cpp:443
+#, c-format
+msgid "  subject  = %s\n"
 msgstr ""
 
-#: cygnal/libnet/http.cpp:1572
-msgid "==== ==== ===="
+#: cygnal/libnet/sslclient.cpp:444
+#, c-format
+msgid "err %i:%s\n"
 msgstr ""
 
 #: cygnal/libnet/diskstream.cpp:307
@@ -9555,51 +9586,51 @@ msgstr ""
 msgid "Writing data (%d bytes) to disk: \"%s\""
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:660
+#: cygnal/libnet/diskstream.cpp:662
 #, c-format
 msgid "Trying to open %s"
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:665
+#: cygnal/libnet/diskstream.cpp:667
 #, c-format
 msgid "Opening file %s (fd #%d), %lld bytes in size."
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:672
+#: cygnal/libnet/diskstream.cpp:674
 #, c-format
 msgid "File %s doesn't exist"
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:727
+#: cygnal/libnet/diskstream.cpp:729
 #, c-format
 msgid "No Diskstream open %s for net fd #%d"
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:733
+#: cygnal/libnet/diskstream.cpp:735
 #, c-format
 msgid "Diskstream %s is closed on net fd #%d."
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:753
+#: cygnal/libnet/diskstream.cpp:755
 #, c-format
 msgid "In %s(%d): couldn't write %d bytes to net fd #%d! %s"
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:758
+#: cygnal/libnet/diskstream.cpp:760
 #, c-format
 msgid "Done playing file %s, size was: %d"
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:771
+#: cygnal/libnet/diskstream.cpp:773
 #, c-format
 msgid "In %s(%d): couldn't write %d of bytes of data to net fd #%d! Got %d, %s"
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:803
+#: cygnal/libnet/diskstream.cpp:805
 msgid "Restarting Disk Stream from the beginning"
 msgstr ""
 
-#: cygnal/libnet/diskstream.cpp:956
+#: cygnal/libnet/diskstream.cpp:958
 #, c-format
 msgid "%s is a directory, appending index.html"
 msgstr ""
@@ -9714,485 +9745,403 @@ msgstr ""
 msgid "Can't write to a non-existent channel!"
 msgstr ""
 
-#: cygnal/crc.cpp:145
-#, c-format
-msgid "Couldn't open file: %s"
-msgstr ""
-
-#: cygnal/cygnal.cpp:190
-msgid "cygnal -- a streaming media server."
-msgstr ""
-
-#: cygnal/cygnal.cpp:192
-msgid "Usage: cygnal [options...]"
-msgstr ""
-
-#: cygnal/cygnal.cpp:193 cygnal/cgi-bin/echo/echo.cpp:316
-#: cygnal/cgi-bin/echo/gateway.cpp:406
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:321
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:596
-#: cygnal/testsuite/libnet.all/test_handler.cpp:281
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:300
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:269
-#: cygnal/testsuite/libnet.all/test_cache.cpp:391
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:247
-#: cygnal/testsuite/libamf.all/test_flv.cpp:282
-#: cygnal/testsuite/libamf.all/test_el.cpp:491
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:721
-#: cygnal/testsuite/libamf.all/test_amf.cpp:422
-msgid "  -h,  --help          Print this help and exit"
-msgstr ""
-
-#: cygnal/cygnal.cpp:194
-msgid "  -V,  --version       Print version information and exit"
-msgstr ""
-
-#: cygnal/cygnal.cpp:195 cygnal/cgi-bin/echo/echo.cpp:317
-#: cygnal/cgi-bin/echo/gateway.cpp:407
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:322
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:597
-#: cygnal/testsuite/libnet.all/test_handler.cpp:282
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:301
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:270
-#: cygnal/testsuite/libnet.all/test_cache.cpp:392
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:248
-#: cygnal/testsuite/libamf.all/test_flv.cpp:283
-#: cygnal/testsuite/libamf.all/test_el.cpp:492
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:722
-#: cygnal/testsuite/libamf.all/test_amf.cpp:423
-msgid "  -v,  --verbose       Output verbose debug info"
-msgstr ""
-
-#: cygnal/cygnal.cpp:196
-msgid "  -s,  --singlethread  Disable Multi Threading"
-msgstr ""
-
-#: cygnal/cygnal.cpp:197 cygnal/cgi-bin/echo/echo.cpp:318
-#: cygnal/cgi-bin/echo/gateway.cpp:408
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:323
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:598
-msgid "  -n,  --netdebug      Turn on net debugging messages"
-msgstr ""
-
-#: cygnal/cygnal.cpp:198
-msgid "  -o   --only-port     Only use port for debugging"
-msgstr ""
-
-#: cygnal/cygnal.cpp:199
-msgid "  -p   --port-offset   Port offset for debugging"
-msgstr ""
-
-#: cygnal/cygnal.cpp:200
-msgid "  -t,  --testing       Turn on special Gnash testing support"
-msgstr ""
-
-#: cygnal/cygnal.cpp:201
-msgid "  -a,  --admin         Enable the administration thread"
-msgstr ""
-
-#: cygnal/cygnal.cpp:202
-msgid "  -r,  --root          Document root for all files"
+#: cygnal/libnet/sshclient.cpp:459 cygnal/libnet/sshserver.cpp:200
+msgid "==== The SSH header breaks down as follows: ===="
 msgstr ""
 
-#: cygnal/cygnal.cpp:265
-msgid ": couldn't open file: "
+#: cygnal/libnet/sslserver.cpp:136
+msgid "SSL!!"
 msgstr ""
 
-#: cygnal/cygnal.cpp:342
-#, c-format
-msgid "Couldn't connect to %s"
+#: cygnal/libnet/sslserver.cpp:159
+msgid "Got an incoming SSL connection request"
 msgstr ""
 
-#: cygnal/cygnal.cpp:362
-#, c-format
-msgid "%s is active on fd #%d."
+#: cygnal/libnet/cache.cpp:62
+msgid "using this constructor is only allowed for testing purposes."
 msgstr ""
 
-#: cygnal/cygnal.cpp:500
+#: cygnal/libnet/cache.cpp:105
 #, c-format
-msgid "Extraneous argument: %s"
+msgid "Adding file %s to cache."
 msgstr ""
 
-#: cygnal/cygnal.cpp:504 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:441
+#: cygnal/libnet/cache.cpp:148
 #, c-format
-msgid "Document Root for media files is: %s"
-msgstr ""
-
-#: cygnal/cygnal.cpp:586
-msgid "Cygnal done..."
+msgid "Trying to find %s in the cache."
 msgstr ""
 
-#: cygnal/cygnal.cpp:599
+#: cygnal/libnet/sshserver.cpp:145
 #, c-format
-msgid "Got a %d interrupt"
+msgid "User %s wants to auth with pass %s\n"
 msgstr ""
 
-#: cygnal/cygnal.cpp:619
-msgid ""
-"Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\n"
-"Cygnal comes with NO WARRANTY, to the extent permitted by law.\n"
-"You may redistribute copies of Cygnal under the terms of the GNU General\n"
-"Public License V3. For more information, see the file named COPYING.\n"
+#: cygnal/testsuite/libnet.all/test_rtmp.cpp:113
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:99
+#: cygnal/testsuite/libamf.all/test_el.cpp:95
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:111
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:107
+#: cygnal/testsuite/libamf.all/test_sol.cpp:106
+#: cygnal/testsuite/libamf.all/test_amf.cpp:113
+msgid "Enabling memory statistics"
 msgstr ""
 
-#: cygnal/cygnal.cpp:641
-#, c-format
-msgid "Starting Admin Handler for port %d"
+#: cygnal/testsuite/libnet.all/test_rtmp.cpp:121
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:101
+#: cygnal/testsuite/libnet.all/test_handler.cpp:113
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:112
+#: cygnal/testsuite/libnet.all/test_cache.cpp:104
+#: cygnal/testsuite/libamf.all/test_el.cpp:108
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:124
+#: cygnal/testsuite/libamf.all/test_flv.cpp:104
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:120
+#: cygnal/testsuite/libamf.all/test_sol.cpp:114
+#: cygnal/testsuite/libamf.all/test_amf.cpp:126
+msgid "This is a Gnash bug."
 msgstr ""
 
-#: cygnal/cygnal.cpp:643
-msgid "Got an incoming Admin request"
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:268
+#: cygnal/testsuite/libnet.all/test_handler.cpp:280
+#: cygnal/testsuite/libnet.all/test_cache.cpp:390
+msgid "Usage: test_diskstream [options...]"
 msgstr ""
 
-#: cygnal/cygnal.cpp:651
-msgid "no more admin data, exiting...\n"
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:271
+#: cygnal/testsuite/libnet.all/test_handler.cpp:283
+#: cygnal/testsuite/libnet.all/test_cache.cpp:393
+msgid "  -d,  --dump          Dump data structures"
 msgstr ""
 
-#: cygnal/cygnal.cpp:736
-msgid "admin_handler: Done...!\n"
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:104
+#: cygnal/testsuite/libamf.all/test_el.cpp:100
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:116
+#: cygnal/testsuite/libamf.all/test_flv.cpp:96
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:112
+#: cygnal/testsuite/libamf.all/test_amf.cpp:118
+msgid "Logging to disk enabled"
 msgstr ""
 
-#: cygnal/cygnal.cpp:765
-#, c-format
-msgid "Can't start %s Connection Handler for fd #%d, port %hd"
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:299
+#: cygnal/testsuite/libamf.all/test_el.cpp:490
+msgid "Usage: test_el [options...]"
 msgstr ""
 
-#: cygnal/cygnal.cpp:769
-#, c-format
-msgid "Starting %s Connection Handler for fd #%d, port %hd"
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:302
+#: cygnal/testsuite/libamf.all/test_el.cpp:493
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:723
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:249
+#: cygnal/testsuite/libamf.all/test_amf.cpp:424
+msgid "  -m,  --memdebug      Output memory statistics"
 msgstr ""
 
-#: cygnal/cygnal.cpp:780
-#, c-format
-msgid "This system has %d cpus."
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:718
+msgid "test_buffer - test Buffer class"
 msgstr ""
 
-#: cygnal/cygnal.cpp:817
-#, c-format
-msgid "No new %s network connections"
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:720
+msgid "Usage: test_buffer [options...]"
 msgstr ""
 
-#: cygnal/cygnal.cpp:821
-#, c-format
-msgid "*** New %s network connection for thread ID #%d, fd #%d ***"
+#: cygnal/libamf/amf_msg.cpp:178
+msgid "AMF Message 'target' field missing!"
 msgstr ""
 
-#: cygnal/cygnal.cpp:867
-#, c-format
-msgid "Creating new %s Handler for %s using fd #%d"
+#: cygnal/libamf/amf_msg.cpp:181
+msgid "AMF Message 'reply' field missing!"
 msgstr ""
 
-#: cygnal/cygnal.cpp:885
-#, c-format
-msgid "Reusing %s Handler for %s using fd #%d"
+#: cygnal/libamf/amf_msg.cpp:184
+msgid "AMF Message 'size' field missing!"
 msgstr ""
 
-#: cygnal/cygnal.cpp:911
+#: cygnal/libamf/amf_msg.cpp:231
 #, c-format
-msgid "Creating new %s Handler for: %s for fd %#d"
+msgid ""
+"Error parsing the AMF packet: \n"
+"\t%s"
 msgstr ""
 
-#: cygnal/cygnal.cpp:935
+#: cygnal/libamf/sol.cpp:212
 #, c-format
-msgid "Cygnal Plugin paths are: %s"
+msgid ""
+"%s: SOL file header is: \n"
+"%s"
 msgstr ""
 
-#: cygnal/cygnal.cpp:956
+#: cygnal/libamf/sol.cpp:232
 #, c-format
-msgid "Couldn't load plugin for %s"
+msgid "Failed opening file '%s' in binary mode"
 msgstr ""
 
-#: cygnal/cygnal.cpp:967
+#: cygnal/libamf/sol.cpp:319
 #, c-format
-msgid "Number of active Threads is %d"
+msgid "Error writing %d bytes of header to output file %s"
 msgstr ""
 
-#: cygnal/cygnal.cpp:970
+#: cygnal/libamf/sol.cpp:326
 #, c-format
-msgid "Restarting loop for next connection for port %d..."
+msgid "Error writing %d bytes of body to output file %s"
 msgstr ""
 
-#: cygnal/cygnal.cpp:1028
+#: cygnal/libamf/sol.cpp:386
 #, c-format
-msgid "%d active disk streams"
+msgid "%s is an SOL file"
 msgstr ""
 
-#: cygnal/cygnal.cpp:1068
+#: cygnal/libamf/sol.cpp:389
 #, c-format
-msgid "Got a hit for fd #%d, protocol %s"
-msgstr ""
-
-#: cygnal/cygnal.cpp:1072
-msgid "No protocol specified!"
+msgid ""
+"%s looks like an SOL file, but the length is wrong. Should be %d, got %d"
 msgstr ""
 
-#: cygnal/cygnal.cpp:1080 cygnal/cygnal.cpp:1105 cygnal/cygnal.cpp:1116
+#: cygnal/libamf/sol.cpp:395
 #, c-format
-msgid "Done with HTTP connection for fd #%d, CGI %s"
+msgid "%s isn't an SOL file"
 msgstr ""
 
-#: cygnal/cygnal.cpp:1085
+#: cygnal/libamf/sol.cpp:437
 #, c-format
-msgid "Not Done with HTTP connection for fd #%d, it's a persistent connection."
+msgid "Reading SharedObject %s: %s"
 msgstr ""
 
-#: cygnal/cygnal.cpp:1094
-#, c-format
-msgid "Done with RTMP connection for fd #%d, CGI "
+#: cygnal/libamf/flv.cpp:94
+msgid "Bad magic number for FLV file!"
 msgstr ""
 
-#: cygnal/cygnal.cpp:1128
+#: cygnal/libamf/flv.cpp:101
 #, c-format
-msgid "Unsupported network protocol for fd #%d, %d"
+msgid "Bad version in FLV header! %d"
 msgstr ""
 
-#: cygnal/cygnal.cpp:1148
+#: cygnal/libamf/flv.cpp:110
 #, c-format
-msgid "Got no hits, %d retries"
+msgid "Bad FLV file Type: %d"
 msgstr ""
 
-#: cygnal/cgi-bin/echo/echo.cpp:161 cygnal/cgi-bin/echo/gateway.cpp:139
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:166
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:233
+#: cygnal/libamf/flv.cpp:123
 #, c-format
-msgid "Error parsing command line options: %s"
+msgid "Bad header size in FLV header! %d"
 msgstr ""
 
-#: cygnal/cgi-bin/echo/echo.cpp:315 cygnal/cgi-bin/echo/gateway.cpp:405
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:320
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:595
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:246
-#: cygnal/testsuite/libamf.all/test_flv.cpp:281
-#: cygnal/testsuite/libamf.all/test_amf.cpp:421
-msgid "Usage: test_amf [options...]"
+#: cygnal/libamf/flv.cpp:156
+#, c-format
+msgid "%d bytes for a string is over the safe limit of %d"
 msgstr ""
 
-#: cygnal/cgi-bin/echo/echo.cpp:319 cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:324
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:599
-msgid "  -p,  --netdebug      port for network"
+#: cygnal/libamf/flv.cpp:186
+#, c-format
+msgid "Bad FLV Audio Sound Type: %x"
 msgstr ""
 
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:309
+#: cygnal/libamf/flv.cpp:195
 #, c-format
-msgid "Scanning directory \"%s\" for %s files"
+msgid "Bad FLV Audio Sound size: %d"
 msgstr ""
 
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:340
+#: cygnal/libamf/flv.cpp:209
 #, c-format
-msgid "Gnash media file name: %s"
+msgid "Bad FLV Audio Sound Rate: %d"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:124
-msgid "Failed to read the handshake from the client."
+#: cygnal/libamf/flv.cpp:226
+#, c-format
+msgid "Bad FLV Audio Sound format: %d"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:139
-msgid "failed to read the handshake from the client."
+#: cygnal/libamf/flv.cpp:257
+#, c-format
+msgid "Bad FLV Video Codec CodecID: 0x%x"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:149
-msgid "Didn't receive any data in handshake!"
+#: cygnal/libamf/flv.cpp:267
+#, c-format
+msgid "Bad FLV Video Frame CodecID: 0x%x"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:160
-msgid "RTMP header had parsing error!"
+#: cygnal/libamf/flv.cpp:340 cygnal/libamf/flv.cpp:342
+#: cygnal/libamf/flv.cpp:344
+#, c-format
+msgid "FLV MetaData: %s: %s"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:168
-#, c-format
-msgid "NetConnection unusually large! %d"
+#: cygnal/libamf/element.cpp:175
+msgid "Can't create remote function calls yet"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:202
-msgid "failed to read the body of the handshake data from the client."
+#: cygnal/libamf/element.cpp:479
+#, c-format
+msgid "Size of Element \"%s\" is: %d"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:210
-msgid "Didn't receive NetConnection object in handshake!"
+#: cygnal/libamf/element.cpp:1534
+msgid "FIXME: got AMF3 data!"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:234
-msgid "Couldn't send onBWDone to client!"
+#: cygnal/libamf/lcshm.cpp:372
+msgid "No data pointer to parse!"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:261 cygnal/rtmp_server.cpp:1702
-msgid "Couldn't send Ping to client!"
+#: cygnal/libamf/lcshm.cpp:391
+msgid "Didn't extract an element from the byte stream!"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:275
-msgid "Couldn't send response to client!"
+#: cygnal/libamf/lcshm.cpp:503
+#, c-format
+msgid " The size of %s is %d "
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:338
+#: cygnal/libamf/lcshm.cpp:520
 #, c-format
-msgid "Couldn't sent RTMP Handshake response at %d!"
+msgid "Failed to open shared memory segment: \"%s\""
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:355
-msgid "No data in original handshake buffer."
+#: cygnal/libamf/lcshm.cpp:561
+#, c-format
+msgid "Failed to open shared memory segment: 0x%x"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:359
-msgid "No data in response handshake buffer."
+#: cygnal/libamf/lcshm.cpp:660
+#, c-format
+msgid " ***** The size of the data is %s *****"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:387
+#: cygnal/libamf/buffer.cpp:179
 #, c-format
-msgid "Handshake Finish Data didn't match by %d bytes"
+msgid "Buffer %x (%d) stayed in queue for %f seconds"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:555
-msgid "Route"
+#: cygnal/libamf/buffer.cpp:711
+#, c-format
+msgid "cygnal::Buffer::resize(%d): Truncating data (%d bytes) while resizing!"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:567
-msgid "AMF3 Notify"
+#: cygnal/libamf/buffer.cpp:766
+#, c-format
+msgid "Creating %d errors in the buffer"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:573
-msgid "AMF3 Invoke"
+#: cygnal/libamf/amf.cpp:180
+#, c-format
+msgid "Encoded data size has %d properties"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:582
-msgid "FLV Dat"
+#: cygnal/libamf/amf.cpp:300
+msgid "XML AMF objects not supported yet"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:585
-#, c-format
-msgid "ERROR: Unidentified RTMP message content type 0x%x"
+#: cygnal/libamf/amf.cpp:404
+msgid "Movie Clip AMF objects not supported yet"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1105
-msgid "Couldn't reliably extract the echo data!"
+#: cygnal/libamf/amf.cpp:495
+msgid "Long String AMF objects not supported yet"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1400
-#, c-format
-msgid "No stream for client %d"
+#: cygnal/libamf/amf.cpp:512
+msgid "Reecord Set AMF objects not supported yet"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1442
-msgid "Stream Start"
+#: cygnal/libamf/amf.cpp:561
+msgid "Encoding a strict array as an ecma array"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1445
-msgid "Stream EOF"
+#: cygnal/libamf/amf.cpp:784
+msgid "FIXME: got AMF3 data type"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1448
-msgid "Stream No Data"
+#: cygnal/libamf/amf.cpp:913
+msgid "AMF body input data is NULL"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1451
-#, c-format
-msgid "Stream Set Buffer: %d"
+#: cygnal/libamf/amf.cpp:937
+msgid "AMF data too short to contain type field"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1465
-msgid "Stream Pong"
+#: cygnal/libamf/amf.cpp:948
+msgid "Element has no type!"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1484
-msgid "Set Chunk Size"
+#: cygnal/libamf/amf.cpp:958
+msgid "AMF data segment too short to containtype NUMBER"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1487
-msgid "Bytes Read"
+#: cygnal/libamf/amf.cpp:978
+#, c-format
+msgid "%d bytes for a string is over the safe limit of %d, line %d"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1495
-msgid "Set Window Size"
+#: cygnal/libamf/amf.cpp:1021
+msgid "AMF0 MovieClip frame"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1498
-msgid "Set Bandwidth"
+#: cygnal/libamf/amf.cpp:1151
+msgid "Found object terminator byte"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1509 cygnal/rtmp_server.cpp:1512
-#: cygnal/rtmp_server.cpp:1515 cygnal/rtmp_server.cpp:1518
-#: cygnal/rtmp_server.cpp:1665
+#: cygnal/libamf/amf.cpp:1169
 #, c-format
-msgid "RTMP type %d"
+msgid "%s: type %d"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1524
+#: cygnal/libamf/amf.cpp:1262
 #, c-format
-msgid "Error INVOKING method \"%s\"!"
+msgid "No data associated with Property \"%s\""
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1648
-msgid "Received an _error message from the client!"
+#: cygnal/http_server.cpp:154 cygnal/http_server.cpp:211
+#, c-format
+msgid "New filestream %s"
 msgstr ""
 
-#: cygnal/rtmp_server.cpp:1668
+#: cygnal/http_server.cpp:213
 #, c-format
-msgid "ERROR: Unidentified AMF header data type 0x%x"
+msgid "Reusing filestream %s"
 msgstr ""
 
-#: cygnal/testsuite/libnet.all/test_handler.cpp:113
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:112
-#: cygnal/testsuite/libnet.all/test_rtmp.cpp:121
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:101
-#: cygnal/testsuite/libnet.all/test_cache.cpp:104
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:120
-#: cygnal/testsuite/libamf.all/test_sol.cpp:114
-#: cygnal/testsuite/libamf.all/test_flv.cpp:104
-#: cygnal/testsuite/libamf.all/test_el.cpp:108
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:124
-#: cygnal/testsuite/libamf.all/test_amf.cpp:126
-msgid "This is a Gnash bug."
+#: cygnal/http_server.cpp:308
+msgid "couldn't read data!"
 msgstr ""
 
-#: cygnal/testsuite/libnet.all/test_handler.cpp:280
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:268
-#: cygnal/testsuite/libnet.all/test_cache.cpp:390
-msgid "Usage: test_diskstream [options...]"
+#: cygnal/http_server.cpp:1015
+#, c-format
+msgid "Processing HTTP data for fd #%d"
 msgstr ""
 
-#: cygnal/testsuite/libnet.all/test_handler.cpp:283
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:271
-#: cygnal/testsuite/libnet.all/test_cache.cpp:393
-msgid "  -d,  --dump          Dump data structures"
+#: cygnal/http_server.cpp:1024
+msgid "FIXME: Existing data in packet!"
 msgstr ""
 
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:99
-#: cygnal/testsuite/libnet.all/test_rtmp.cpp:113
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:107
-#: cygnal/testsuite/libamf.all/test_sol.cpp:106
-#: cygnal/testsuite/libamf.all/test_el.cpp:95
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:111
-#: cygnal/testsuite/libamf.all/test_amf.cpp:113
-msgid "Enabling memory statistics"
+#: cygnal/http_server.cpp:1026
+msgid "FIXME: No existing data in packet!"
 msgstr ""
 
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:104
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:112
-#: cygnal/testsuite/libamf.all/test_flv.cpp:96
-#: cygnal/testsuite/libamf.all/test_el.cpp:100
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:116
-#: cygnal/testsuite/libamf.all/test_amf.cpp:118
-msgid "Logging to disk enabled"
+#: cygnal/handler.cpp:128
+#, c-format
+msgid "Protocol %d for Handler::AddClient()"
 msgstr ""
 
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:299
-#: cygnal/testsuite/libamf.all/test_el.cpp:490
-msgid "Usage: test_el [options...]"
+#: cygnal/handler.cpp:171 cygnal/handler.cpp:196
+msgid "HTTP key couldn't be read!"
 msgstr ""
 
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:302
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:249
-#: cygnal/testsuite/libamf.all/test_el.cpp:493
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:723
-#: cygnal/testsuite/libamf.all/test_amf.cpp:424
-msgid "  -m,  --memdebug      Output memory statistics"
+#: cygnal/handler.cpp:214 cygnal/handler.cpp:244
+#, c-format
+msgid "FD #%d has no protocol handler registered"
 msgstr ""
 
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:718
-msgid "test_buffer - test Buffer class"
+#: cygnal/handler.cpp:319
+#, c-format
+msgid "No %s symbol in plugin"
 msgstr ""
 
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:720
-msgid "Usage: test_buffer [options...]"
+#: cygnal/handler.cpp:322
+#, c-format
+msgid "Initialized Plugin: \"%s\": %s"
+msgstr ""
+
+#: cygnal/handler.cpp:335 cygnal/handler.cpp:350
+#, c-format
+msgid "Couldn't get %s symbol"
 msgstr ""
 
 #: cygnal/proc.cpp:119
@@ -10200,1246 +10149,1245 @@ msgstr ""
 msgid "Invalid filespec for CGI: \"%s\""
 msgstr ""
 
-#: gui/fb/fb.cpp:229
-#, c-format
-msgid "No renderer! %s not supported."
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:163
+msgid "WARNING: failed to create VA-API display."
 msgstr ""
 
-#: gui/fb/fb.cpp:240
-msgid "Found no accessible User mode input event device"
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:204
+#, c-format
+msgid ""
+"GTK-AGG: Unknown RGB format %s reported by VA-API.Please report this to the "
+"gnash-dev mailing list."
 msgstr ""
 
-#: gui/fb/fb.cpp:249
-msgid "Found no accessible input event devices"
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:231 gui/gtk/gtk_glue_agg_vaapi.cpp:289
+msgid "failed to map VA-API image."
 msgstr ""
 
-#: gui/fb/fb.cpp:262
-msgid "WARNING: Mouse support may conflict with the input event support."
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:237
+msgid "failed to associate VA-API subpicture."
 msgstr ""
 
-#: gui/fb/fb.cpp:276
-msgid "Enabling Touchscreen support."
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:371
+#, c-format
+msgid "failed to setup video window for surface 0x%08x."
 msgstr ""
 
-#: gui/fb/fb.cpp:281
-msgid "WARNING: Babbage Tablet support disabled as it conflicts with TSlib"
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:378
+#, c-format
+msgid "failed to associate subpicture to surface 0x%08x."
 msgstr ""
 
-#: gui/fb/fb.cpp:283
-msgid "Enabling Babbage Touchscreen support"
+#: gui/gtk/gtk_glue_gtkglext.cpp:72
+msgid ""
+"Cannot find the double-buffered visual.\n"
+"Trying single-buffered visual."
 msgstr ""
 
-#: gui/fb/fb.cpp:288
-msgid "Enabling Power Button support"
+#: gui/gtk/gtk_glue_gtkglext.cpp:78
+msgid "No appropriate OpenGL-capable visual found."
 msgstr ""
 
-#: gui/fb/fb.cpp:368
+#: gui/gtk/gtk_glue_agg.cpp:96 gui/haiku/haiku_agg_glue.cpp:297
 #, c-format
-msgid "Movie Frame Rate is %d, adjusting delay to %dms"
-msgstr ""
-
-#: gui/fb/fb.cpp:462
-msgid "This GUI does not yet support menus"
+msgid "Could not create AGG renderer with pixelformat %s"
 msgstr ""
 
-#: gui/fb/fb.cpp:468
-msgid "This GUI does not yet support a mouse pointer"
+#: gui/gtk/gtk_glue_ovg.cpp:88 gui/fb/fb_glue_ovg.cpp:73
+msgid "Probing found an EGL display device"
 msgstr ""
 
-#: gui/fb/fb.cpp:539
-msgid "Could not detect controlling TTY"
+#: gui/gtk/gtk_glue_ovg.cpp:92 gui/fb/fb_glue_ovg.cpp:77
+msgid "Probing found a raw Framebuffer display device"
 msgstr ""
 
-#: gui/fb/fb.cpp:548 gui/fb/fb.cpp:585 gui/fb/fb.cpp:619 gui/fb/fb.cpp:670
-#, c-format
-msgid "Could not open %s"
+#: gui/gtk/gtk_glue_ovg.cpp:96 gui/fb/fb_glue_ovg.cpp:81
+msgid "Probing found an X11 display device"
 msgstr ""
 
-#: gui/fb/fb.cpp:554
-msgid "Could not get current VT state"
+#: gui/gtk/gtk_glue_ovg.cpp:100 gui/fb/fb_glue_ovg.cpp:85
+msgid "Probing found a DirectFB display device"
 msgstr ""
 
-#: gui/fb/fb.cpp:565
-msgid "Could not request a new VT"
+#: gui/gtk/gtk_glue_ovg.cpp:105 gui/fb/fb_glue_ovg.cpp:90
+msgid "No display devices found by probing!"
 msgstr ""
 
-#: gui/fb/fb.cpp:579 gui/fb/fb.cpp:613 gui/fb/fb.cpp:664
-#, c-format
-msgid "Could not find device for VT number %d"
+#: gui/gtk/gtk_glue_ovg.cpp:182
+msgid "Could not create OPENVG renderer"
 msgstr ""
 
-#: gui/fb/fb.cpp:590 gui/fb/fb.cpp:675
-#, c-format
-msgid "Could not activate VT number %d"
+#: gui/gtk/gtk_glue_ovg.cpp:265 gui/gtk/gtk_glue_ovg.cpp:282
+msgid "No off screen buffer!"
 msgstr ""
 
-#: gui/fb/fb.cpp:596 gui/fb/fb.cpp:681
+#: gui/gtk/gtk_glue_ovg.cpp:400
 #, c-format
-msgid "Error waiting for VT %d becoming active"
+msgid "eglGetConfigs() failed to retrive the configs (error %s)"
 msgstr ""
 
-#: gui/fb/fb.cpp:627
-#, c-format
-msgid "Could not attach controlling terminal (%s)"
+#: gui/gtk/gtk_glue_cairo.cpp:223
+msgid "Cairo: failed to create a rendering buffer!"
 msgstr ""
 
-#: gui/fb/fb.cpp:635
-msgid "Could not query current keyboard mode on VT"
+#: gui/gtk/gtk.cpp:155
+msgid "Failed to initialize X threading support\n"
 msgstr ""
 
-#: gui/fb/fb.cpp:639
-msgid "Could not switch to graphics mode on new VT"
+#: gui/gtk/gtk.cpp:198
+msgid "This system lacks a hardware OpenGL driver!"
 msgstr ""
 
-#: gui/fb/fb.cpp:690
-msgid "Could not restore keyboard mode"
+#: gui/gtk/gtk.cpp:210
+msgid "Click to play"
 msgstr ""
 
-#: gui/fb/fb_glue_ovg.cpp:73 gui/gtk/gtk_glue_ovg.cpp:88
-msgid "Probing found an EGL display device"
+#: gui/gtk/gtk.cpp:599
+#, c-format
+msgid "Advance interval timer set to %d ms (~ %d FPS)"
 msgstr ""
 
-#: gui/fb/fb_glue_ovg.cpp:77 gui/gtk/gtk_glue_ovg.cpp:92
-msgid "Probing found a raw Framebuffer display device"
+#: gui/gtk/gtk.cpp:673
+msgid "Sound"
 msgstr ""
 
-#: gui/fb/fb_glue_ovg.cpp:81 gui/gtk/gtk_glue_ovg.cpp:96
-msgid "Probing found an X11 display device"
+#: gui/gtk/gtk.cpp:1226 gui/qt/Qt4Gui.cpp:771
+msgid "Gnash preferences"
 msgstr ""
 
-#: gui/fb/fb_glue_ovg.cpp:85 gui/gtk/gtk_glue_ovg.cpp:100
-msgid "Probing found a DirectFB display device"
+#: gui/gtk/gtk.cpp:1261
+msgid "_Network"
 msgstr ""
 
-#: gui/fb/fb_glue_ovg.cpp:90 gui/gtk/gtk_glue_ovg.cpp:105
-msgid "No display devices found by probing!"
+#: gui/gtk/gtk.cpp:1265 gui/qt/Qt4Gui.cpp:888
+msgid "<b>Network preferences</b>"
 msgstr ""
 
-#: gui/fb/fb_glue_ovg.cpp:156
-msgid "Could not create OpenVG renderer"
+#: gui/gtk/gtk.cpp:1273
+msgid "Network timeout in seconds (0 for no timeout):"
 msgstr ""
 
-#: gui/fb/fb_glue_ovg.cpp:168 gui/fb/fb_glue_agg.cpp:76
-msgid "No renderer set!"
+#: gui/gtk/gtk.cpp:1292
+msgid "_Logging"
 msgstr ""
 
-#: gui/fb/fb_glue_gles1.cpp:98
-msgid "EGL: getDisplay ok"
+#: gui/gtk/gtk.cpp:1297 gui/qt/Qt4Gui.cpp:789
+msgid "<b>Logging options</b>"
 msgstr ""
 
-#: gui/fb/fb_glue_gles1.cpp:104
-msgid "EGL: initialize ok"
+#: gui/gtk/gtk.cpp:1301
+msgid "Verbosity level:"
 msgstr ""
 
-#: gui/fb/fb_glue_gles1.cpp:111
-msgid "EGL: config ok"
+#: gui/gtk/gtk.cpp:1314
+msgid "Log to _file"
 msgstr ""
 
-#: gui/fb/fb_glue_gles1.cpp:118
-msgid "EGL: surface ok"
+#: gui/gtk/gtk.cpp:1320
+msgid "Logfile name:"
 msgstr ""
 
-#: gui/fb/fb_glue_gles1.cpp:124
-msgid "EGL: context ok"
+#: gui/gtk/gtk.cpp:1333
+msgid "Log _parser output"
 msgstr ""
 
-#: gui/fb/fb_glue_gles1.cpp:130
-msgid "EGL: current ok"
+#: gui/gtk/gtk.cpp:1341
+msgid "Log SWF _actions"
 msgstr ""
 
-#: gui/fb/fb_glue_agg.cpp:87
-#, c-format
-msgid "No renderer set in %s!"
+#: gui/gtk/gtk.cpp:1349
+msgid "Log malformed SWF _errors"
 msgstr ""
 
-#: gui/fb/fb_glue_agg.cpp:130
-msgid "failed to create a render handler for AGG!"
+#: gui/gtk/gtk.cpp:1357
+msgid "Log ActionScript _coding errors"
 msgstr ""
 
-#: gui/fb/fb_glue_agg.cpp:151
-msgid "No Device layer initialized yet!"
+#: gui/gtk/gtk.cpp:1373
+msgid "_Security"
 msgstr ""
 
-#: gui/fb/fb_glue_agg.cpp:182
-msgid "The pixel format of your framebuffer could not be detected."
+#: gui/gtk/gtk.cpp:1380 gui/qt/Qt4Gui.cpp:840
+msgid "<b>Network connections</b>"
 msgstr ""
 
-#: gui/fb/fb_glue_agg.cpp:191
-msgid "Double buffering disabled"
+#: gui/gtk/gtk.cpp:1386
+msgid "Connect only to local _host"
 msgstr ""
 
-#: gui/fb/fb_glue_agg.cpp:194
-msgid "Double buffering enabled"
+#: gui/gtk/gtk.cpp:1393
+msgid "Connect only to local _domain"
 msgstr ""
 
-#: gui/fb/fb_glue_agg.cpp:221
-#, c-format
-msgid "No Drawbounds set in %s!"
+#: gui/gtk/gtk.cpp:1400
+msgid "Disable SSL _verification"
 msgstr ""
 
-#: gui/gnash.cpp:125
-#, c-format
-msgid "Error parsing options: %s\n"
+#: gui/gtk/gtk.cpp:1407
+msgid "_Whitelist"
 msgstr ""
 
-#: gui/gnash.cpp:166
-msgid "Error: no input file was specified. Exiting.\n"
+#: gui/gtk/gtk.cpp:1416
+msgid "_Blacklist"
 msgstr ""
 
-#: gui/gnash.cpp:212
-msgid "Invalid host communication filedescriptor %1%\n"
+#: gui/gtk/gtk.cpp:1425 gui/qt/Qt4Gui.cpp:858
+msgid "<b>Privacy</b>"
 msgstr ""
 
-#: gui/gnash.cpp:219
-msgid "Invalid control communication filedescriptor %1%\n"
+#: gui/gtk/gtk.cpp:1429 gui/qt/Qt4Gui.cpp:861
+msgid "Shared objects directory:"
 msgstr ""
 
-#: gui/gnash.cpp:251
-msgid "ERROR: -r must be followed by 0, 1, 2 or 3 "
+#: gui/gtk/gtk.cpp:1441
+msgid "Do _not write Shared Object files"
 msgstr ""
 
-#: gui/gnash.cpp:267
-msgid "Debugging options"
+#: gui/gtk/gtk.cpp:1448
+msgid "Only _access local Shared Object files"
 msgstr ""
 
-#: gui/gnash.cpp:273
-msgid "Produce verbose output"
+#: gui/gtk/gtk.cpp:1455
+msgid "Disable Local _Connection object"
 msgstr ""
 
-#: gui/gnash.cpp:280
-msgid "Produce the disk based debug log"
+#: gui/gtk/gtk.cpp:1469
+msgid "_Media"
 msgstr ""
 
-#: gui/gnash.cpp:285
-msgid "Be (very) verbose about action execution"
+#: gui/gtk/gtk.cpp:1475 gui/qt/Qt4Gui.cpp:906
+msgid "<b>Sound</b>"
 msgstr ""
 
-#: gui/gnash.cpp:291
-msgid "Be (very) verbose about parsing"
+#: gui/gtk/gtk.cpp:1480
+msgid "Use sound _handler"
 msgstr ""
 
-#: gui/gnash.cpp:297
-msgid "Print FPS every num seconds"
+#: gui/gtk/gtk.cpp:1488
+msgid "<b>Media Streams</b>"
 msgstr ""
 
-#: gui/gnash.cpp:320
-msgid "Options"
+#: gui/gtk/gtk.cpp:1494 gui/qt/Qt4Gui.cpp:913
+msgid "Save media streams to disk"
 msgstr ""
 
-#: gui/gnash.cpp:325
-msgid "Print this help and exit"
+#: gui/gtk/gtk.cpp:1503 gui/qt/Qt4Gui.cpp:919
+msgid "Save dynamically loaded media to disk"
 msgstr ""
 
-#: gui/gnash.cpp:328
-msgid "Print version information and exit"
+#: gui/gtk/gtk.cpp:1511 gui/qt/Qt4Gui.cpp:923
+msgid "Saved media directory:"
 msgstr ""
 
-#: gui/gnash.cpp:333
-msgid "Scale the movie by the specified factor"
+#: gui/gtk/gtk.cpp:1531
+msgid "_Player"
 msgstr ""
 
-#: gui/gnash.cpp:337
-msgid "Number of milliseconds to delay in main loop"
+#: gui/gtk/gtk.cpp:1537 gui/qt/Qt4Gui.cpp:935
+msgid "<b>Player description</b>"
 msgstr ""
 
-#: gui/gnash.cpp:341
-msgid "Audio dump file (wave format)"
+#: gui/gtk/gtk.cpp:1545 gui/qt/Qt4Gui.cpp:938
+msgid "Player version:"
 msgstr ""
 
-#: gui/gnash.cpp:346
-msgid "Hardware Video Accelerator to use"
+#: gui/gtk/gtk.cpp:1561 gui/qt/Qt4Gui.cpp:944
+msgid "Operating system:"
 msgstr ""
 
-#: gui/gnash.cpp:351
-msgid "X11 Window ID for display"
+#: gui/gtk/gtk.cpp:1571
+msgid "<i>If blank, Gnash will detect your OS</i>"
 msgstr ""
 
-#: gui/gnash.cpp:355
-msgid "Set window width"
+#: gui/gtk/gtk.cpp:1581 gui/qt/Qt4Gui.cpp:955
+msgid "URL opener:"
 msgstr ""
 
-#: gui/gnash.cpp:359
-msgid "Set window height"
+#: gui/gtk/gtk.cpp:1593 gui/qt/Qt4Gui.cpp:962
+msgid "<b>Performance</b>"
 msgstr ""
 
-#: gui/gnash.cpp:363
-msgid "Set window x position"
+#: gui/gtk/gtk.cpp:1607 gui/qt/Qt4Gui.cpp:965
+msgid "Max size of movie library:"
 msgstr ""
 
-#: gui/gnash.cpp:367
-msgid "Set window y position"
+#: gui/gtk/gtk.cpp:1624
+msgid "Max scripts execution time (in seconds):"
 msgstr ""
 
-#: gui/gnash.cpp:372
-msgid "Exit when/if movie reaches the last frame"
+#: gui/gtk/gtk.cpp:1643
+msgid "Max scripts recursion limit (stack depth):"
 msgstr ""
 
-#: gui/gnash.cpp:378
-msgid "disable rendering and sound"
+#: gui/gtk/gtk.cpp:1659
+msgid "Lock script limits so that SWF tags can't override"
 msgstr ""
 
-#: gui/gnash.cpp:380
-msgid "enable rendering, disable sound"
+#: gui/gtk/gtk.cpp:1671
+msgid "Start _Gnash in pause mode"
 msgstr ""
 
-#: gui/gnash.cpp:382
-msgid "enable sound, disable rendering"
+#: gui/gtk/gtk.cpp:1695 gui/qt/Qt4Gui.cpp:468
+msgid "Movie properties"
 msgstr ""
 
-#: gui/gnash.cpp:384
-msgid "enable rendering and sound"
+#: gui/gtk/gtk.cpp:1765 gui/qt/Qt4Gui.cpp:487
+msgid "Variable"
 msgstr ""
 
-#: gui/gnash.cpp:392
-msgid "The media handler to use"
+#: gui/gtk/gtk.cpp:1777 gui/qt/Qt4Gui.cpp:488
+msgid "Value"
 msgstr ""
 
-#: gui/gnash.cpp:400
-msgid "The renderer to use"
+#: gui/gtk/gtk.cpp:1830
+msgid ""
+"This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 3 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+"GNU General Public License for more details.\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301\n"
+"USA or visit http://www.gnu.org/licenses/."
 msgstr ""
 
-#: gui/gnash.cpp:406
-msgid "Exit after the specified number of seconds"
+#: gui/gtk/gtk.cpp:1846
+msgid "Gnash is the GNU SWF Player based on GameSWF."
 msgstr ""
 
-#: gui/gnash.cpp:409
-msgid "Set \"real\" URL of the movie"
+#: gui/gtk/gtk.cpp:1847
+msgid ""
+"\n"
+"Renderer: "
 msgstr ""
 
-#: gui/gnash.cpp:413
-msgid "Set \"base\" URL for resolving relative URLs"
+#: gui/gtk/gtk.cpp:1849
+msgid ""
+"\n"
+"Hardware Acceleration: "
 msgstr ""
 
-#: gui/gnash.cpp:418
-msgid "Set parameter (e.g. \"FlashVars=A=1&b=2\")"
+#: gui/gtk/gtk.cpp:1851
+msgid ""
+"\n"
+"GUI: "
 msgstr ""
 
-#: gui/gnash.cpp:422
-msgid "Filedescriptor to use for external communications"
+#: gui/gtk/gtk.cpp:1853
+msgid ""
+"\n"
+"Media: "
 msgstr ""
 
-#: gui/gnash.cpp:428
-msgid "Exit after specified number of frame advances"
+#: gui/gtk/gtk.cpp:1883
+msgid "translator-credits"
 msgstr ""
 
-#: gui/gnash.cpp:432
-msgid "Start in fullscreen mode"
+#: gui/gtk/gtk.cpp:1910
+msgid "_File"
 msgstr ""
 
-#: gui/gnash.cpp:437
-msgid "Start without displaying the menu bar"
+#: gui/gtk/gtk.cpp:1963
+msgid "_Edit"
 msgstr ""
 
-#: gui/gnash.cpp:442
-msgid "List of frames to save as screenshots"
+#: gui/gtk/gtk.cpp:1983
+msgid "_Help"
 msgstr ""
 
-#: gui/gnash.cpp:446
-msgid "Filename pattern for screenshot images"
+#: gui/gtk/gtk.cpp:2003
+msgid "_View"
 msgstr ""
 
-#: gui/gnash.cpp:450
-msgid "Quality for screenshot output (not all formats)"
+#: gui/gtk/gtk.cpp:2011
+msgid "Redraw"
 msgstr ""
 
-#: gui/gnash.cpp:453
-msgid "Input files"
+#: gui/gtk/gtk.cpp:2021 gui/gtk/gtk.cpp:2026
+msgid "Toggle fullscreen"
 msgstr ""
 
-#: gui/gnash.cpp:464
-msgid "Dump options"
+#: gui/gtk/gtk.cpp:2035
+msgid "Show updated ranges"
 msgstr ""
 
-#: gui/gnash.cpp:469
-msgid "Video dump file (raw format) and optional video FPS (@<num>)"
+#: gui/gtk/gtk.cpp:2054
+msgid "_Quality"
 msgstr ""
 
-#: gui/gnash.cpp:471
-msgid "Number of milliseconds to sleep between advances"
+#: gui/gtk/gtk.cpp:2064
+msgid "Low"
 msgstr ""
 
-#: gui/gnash.cpp:473
-msgid "Trigger expression to start dumping"
+#: gui/gtk/gtk.cpp:2070
+msgid "Medium"
 msgstr ""
 
-#: gui/gnash.cpp:485
-msgid "Keys:\n"
+#: gui/gtk/gtk.cpp:2076
+msgid "High"
 msgstr ""
 
-#: gui/gnash.cpp:487
-msgid "Quit\n"
+#: gui/gtk/gtk.cpp:2082
+msgid "Best"
 msgstr ""
 
-#: gui/gnash.cpp:489
-msgid "Toggle fullscreen\n"
+#: gui/gtk/gtk.cpp:2095
+msgid "Movie _Control"
 msgstr ""
 
-#: gui/gnash.cpp:491
-msgid "Toggle pause\n"
+#: gui/gtk/gtk.cpp:2106 gui/qt/Qt4Gui.cpp:605
+msgid "Play"
 msgstr ""
 
-#: gui/gnash.cpp:493
-msgid "Restart the movie\n"
+#: gui/gtk/gtk.cpp:2117 gui/qt/Qt4Gui.cpp:609
+msgid "Pause"
 msgstr ""
 
-#: gui/gnash.cpp:495
-msgid "Take a screenshot\n"
+#: gui/gtk/gtk.cpp:2127 gui/qt/Qt4Gui.cpp:613
+msgid "Stop"
 msgstr ""
 
-#: gui/gnash.cpp:497
-msgid "Force immediate redraw\n"
+#: gui/gtk/gtk.cpp:2139 gui/qt/kde.cpp:416
+msgid "Restart Movie"
 msgstr ""
 
-#: gui/gnash.cpp:503
-msgid "Usage: gnash [options] movie_file.swf\n"
+#: gui/gtk/gtk.cpp:2262 gui/gtk/gtk.cpp:2263
+#, c-format
+msgid "Couldn't find pixmap file: %s"
 msgstr ""
 
-#: gui/gnash.cpp:504
-msgid "Plays a SWF (Shockwave Flash) movie\n"
+#: gui/gtk/gtk.cpp:2269
+#, c-format
+msgid "Failed to load pixbuf file: %s: %s"
 msgstr ""
 
-#: gui/gnash.cpp:521
+#: gui/gtk/gtk.cpp:2578 gui/aos4/aos4.cpp:266
+#, c-format
 msgid ""
-"Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software "
-"Foundation, Inc.\n"
-"Gnash comes with NO WARRANTY, to the extent permitted by law.\n"
-"You may redistribute copies of Gnash under the terms of the GNU General\n"
-"Public License.  For more information, see the file named COPYING.\n"
-"\n"
+"Attempting to open file %s.\n"
+"NOTE: the file open functionality is not yet implemented!"
 msgstr ""
 
-#: gui/gnash.cpp:532
-msgid "Build options "
+#: gui/gtk/gtk.cpp:2595 gui/gtk/gtk.cpp:2608
+msgid "Open file"
 msgstr ""
 
-#: gui/gnash.cpp:533
-msgid "   Renderers: "
+#: gui/Player.cpp:132
+msgid "GUI ExternalInterface.Pan event"
 msgstr ""
 
-#: gui/gnash.cpp:534
-msgid "   Hardware Acceleration: "
+#: gui/Player.cpp:144
+msgid "GUI ExternalInterface.SetZoomRect event"
 msgstr ""
 
-#: gui/gnash.cpp:535
-msgid "   GUI: "
+#: gui/Player.cpp:152
+msgid "GUI ExternalInterface.Zoom event"
 msgstr ""
 
-#: gui/gnash.cpp:536
-msgid "   Media handlers: "
+#: gui/Player.cpp:170
+#, c-format
+msgid "Unhandled callback %s with arguments %s"
 msgstr ""
 
-#: gui/gnash.cpp:538
-msgid "   Configured with: "
+#: gui/Player.cpp:284 gui/pythonmod/gnash-view.cpp:223
+msgid "Sound requested but no sound support compiled in"
 msgstr ""
 
-#: gui/gnash.cpp:539
-msgid "   CXXFLAGS: "
+#: gui/Player.cpp:289 gui/pythonmod/gnash-view.cpp:220
+#, c-format
+msgid "Could not create sound handler: %s. Will continue without sound."
 msgstr ""
 
-#: gui/fltk/fltk_glue_agg.cpp:50
-msgid "Could not create AGG renderer with pixelformat RGB24"
+#: gui/Player.cpp:437
+msgid "Non-existent media handler %1% specified"
 msgstr ""
 
-#: gui/dump/dump.cpp:117
-msgid "Ignoring request to display in X11 window"
+#: gui/Player.cpp:685
+msgid "Got unexpected argument type for message %1%"
 msgstr ""
 
-#: gui/dump/dump.cpp:128 gui/haiku/haiku.cpp:384
-msgid "# FATAL:  No filename given with -D argument."
+#: gui/Player.cpp:720
+#, c-format
+msgid ""
+"Could only write %d bytes over %d required to user-provided host requests fd "
+"%d"
 msgstr ""
 
-#: gui/dump/dump.cpp:144
-msgid "# FATAL:  No sleep ms value given with -S argument."
+#: gui/Player.cpp:776
+#, c-format
+msgid "FsCommand exec called with argument %s"
 msgstr ""
 
-#: gui/dump/dump.cpp:155
-msgid "# FATAL:  No trigger value given with -T argument.\n"
+#: gui/Player.cpp:793
+#, c-format
+msgid "FsCommand trapallkeys called with argument %s"
 msgstr ""
 
-#: gui/dump/dump.cpp:352
+#: gui/Player.cpp:799
 #, c-format
-msgid "Unable to write file '%s'."
+msgid "FsCommand '%s(%s)' not handled internally"
 msgstr ""
 
-#: gui/ScreenShotter.cpp:99
+#: gui/aos4/aos4_agg_glue.cpp:116 gui/sdl/sdl_agg_glue.cpp:78
+#: gui/haiku/haiku_agg_glue.cpp:290
 #, c-format
-msgid "Failed to open screenshot file \"%s\"!"
+msgid "AGG's bit depth must be 16, 24 or 32 bits, not %d."
 msgstr ""
 
-#: gui/haiku/haiku.cpp:141
-msgid "spawn_thread failed"
+#: gui/aos4/aos4_agg_glue.cpp:216 gui/aos4/aos4_cairo_glue.cpp:212
+msgid "Cannot layout Menu!!\n"
 msgstr ""
 
-#: gui/haiku/haiku.cpp:144
-msgid "resume_thread failed"
+#: gui/aos4/aos4_agg_glue.cpp:220 gui/aos4/aos4_cairo_glue.cpp:216
+msgid "Cannot create Menu!!\n"
 msgstr ""
 
-#: gui/haiku/haiku.cpp:157
-#, c-format
-msgid "pulses thread returned %d"
+#: gui/aos4/aos4_agg_glue.cpp:223 gui/aos4/aos4_cairo_glue.cpp:219
+msgid "Cannot get Visual Info!!\n"
 msgstr ""
 
-#: gui/haiku/haiku.cpp:248
-msgid "send_data failed"
+#: gui/aos4/aos4_agg_glue.cpp:226 gui/aos4/aos4_cairo_glue.cpp:222
+msgid "Cannot get WB Screen pointer!!\n"
 msgstr ""
 
-#: gui/haiku/haiku_agg_glue.cpp:290 gui/aos4/aos4_agg_glue.cpp:116
-#: gui/sdl/sdl_agg_glue.cpp:78
-#, c-format
-msgid "AGG's bit depth must be 16, 24 or 32 bits, not %d."
+#: gui/aos4/aos4_agg_glue.cpp:264 gui/aos4/aos4_cairo_glue.cpp:259
+msgid "prepDrawingArea() failed.\n"
 msgstr ""
 
-#: gui/haiku/haiku_agg_glue.cpp:297 gui/gtk/gtk_glue_agg.cpp:96
+#: gui/aos4/aos4_agg_glue.cpp:277
 #, c-format
-msgid "Could not create AGG renderer with pixelformat %s"
+msgid "AOS4-AGG: %i byte offscreen buffer allocated"
 msgstr ""
 
-#: gui/haiku/haiku_agg_glue.cpp:416 gui/sdl/sdl_agg_glue.cpp:132
+#: gui/aos4/aos4.cpp:70
 #, c-format
-msgid "SDL-AGG: %i byte offscreen buffer allocated"
+msgid "Exception: %s on file %s line %d"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:120
-msgid "Cairo renderer not supported!"
+#: gui/aos4/aos4.cpp:274
+msgid "Cannot open File Requester!\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:128
-msgid "OpenGL renderer not supported!"
+#: gui/aos4/aos4.cpp:609
+msgid "error creating RenderHandler!\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:136
-msgid "AGG renderer not supported!"
+#: gui/aos4/aos4_cairo_glue.cpp:124
+#, c-format
+msgid "Cairo's bit depth must be 16, 24 or 32 bits, not %d."
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:467 gui/gtk/gtk.cpp:1708
-msgid "Movie properties"
+#: gui/gnash.cpp:127
+#, c-format
+msgid "Error parsing options: %s\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:486 gui/gtk/gtk.cpp:1778
-msgid "Variable"
+#: gui/gnash.cpp:168
+msgid "Error: no input file was specified. Exiting.\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:487 gui/gtk/gtk.cpp:1790
-msgid "Value"
+#: gui/gnash.cpp:214
+msgid "Invalid host communication filedescriptor %1%\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:588
-msgid "Properties"
+#: gui/gnash.cpp:221
+msgid "Invalid control communication filedescriptor %1%\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:592 gui/qt/kde.cpp:424
-msgid "Quit Gnash"
+#: gui/gnash.cpp:233
+#, c-format
+msgid "Cookiefile %s does not exist or is not a regular file\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:599
-msgid "Preferences"
+#: gui/gnash.cpp:265
+msgid "ERROR: -r must be followed by 0, 1, 2 or 3 "
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:604 gui/gtk/gtk.cpp:2119
-msgid "Play"
+#: gui/gnash.cpp:281
+msgid "Debugging options"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:608 gui/gtk/gtk.cpp:2130
-msgid "Pause"
+#: gui/gnash.cpp:287
+msgid "Produce verbose output"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:612 gui/gtk/gtk.cpp:2140
-msgid "Stop"
+#: gui/gnash.cpp:294
+msgid "Produce the disk based debug log"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:616
-msgid "Restart"
+#: gui/gnash.cpp:299
+msgid "Be (very) verbose about action execution"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:621 gui/qt/kde.cpp:423
-msgid "Refresh"
+#: gui/gnash.cpp:305
+msgid "Be (very) verbose about parsing"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:625
-msgid "Fullscreen"
+#: gui/gnash.cpp:311
+msgid "Print FPS every num seconds"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:640
-msgid "File"
+#: gui/gnash.cpp:335
+msgid "Options"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:645
-msgid "Edit"
+#: gui/gnash.cpp:340
+msgid "Print this help and exit"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:649
-msgid "Movie Control"
+#: gui/gnash.cpp:343
+msgid "Print version information and exit"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:656
-msgid "View"
+#: gui/gnash.cpp:348
+msgid "Scale the movie by the specified factor"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:738
-msgid "Click to Play"
+#: gui/gnash.cpp:352
+msgid "Number of milliseconds to delay in main loop"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:770 gui/gtk/gtk.cpp:1239
-msgid "Gnash preferences"
+#: gui/gnash.cpp:356
+msgid "Audio dump file (wave format)"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:785
-msgid "Logging"
+#: gui/gnash.cpp:361
+msgid "Hardware Video Accelerator to use"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:788 gui/gtk/gtk.cpp:1310
-msgid "<b>Logging options</b>"
+#: gui/gnash.cpp:366
+msgid "X11 Window ID for display"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:791
-msgid "Verbosity level"
+#: gui/gnash.cpp:370
+msgid "Set window width"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:809
-msgid "Log to file"
+#: gui/gnash.cpp:374
+msgid "Set window height"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:816
-msgid "Log parser output"
+#: gui/gnash.cpp:378
+msgid "Set window x position"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:820
-msgid "Log SWF actions"
+#: gui/gnash.cpp:382
+msgid "Set window y position"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:824
-msgid "Log malformed SWF errors"
+#: gui/gnash.cpp:387
+msgid "Exit when/if movie reaches the last frame"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:829
-msgid "Log ActionScript coding errors"
+#: gui/gnash.cpp:393
+msgid "disable rendering and sound"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:836
-msgid "Security"
+#: gui/gnash.cpp:395
+msgid "enable rendering, disable sound"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:839 gui/gtk/gtk.cpp:1393
-msgid "<b>Network connections</b>"
+#: gui/gnash.cpp:397
+msgid "enable sound, disable rendering"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:842
-msgid "Connect only to local host"
+#: gui/gnash.cpp:399
+msgid "enable rendering and sound"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:847
-msgid "Connect only to local domain"
+#: gui/gnash.cpp:407
+msgid "The media handler to use"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:852
-msgid "Disable SSL verification"
+#: gui/gnash.cpp:415
+msgid "The renderer to use"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:857 gui/gtk/gtk.cpp:1438
-msgid "<b>Privacy</b>"
+#: gui/gnash.cpp:421
+msgid "Exit after the specified number of seconds"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:860 gui/gtk/gtk.cpp:1442
-msgid "Shared objects directory:"
+#: gui/gnash.cpp:424
+msgid "Set \"real\" URL of the movie"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:866
-msgid "Do not write Shared Object files"
+#: gui/gnash.cpp:428
+msgid "Set \"base\" URL for resolving relative URLs"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:872
-msgid "Only access local Shared Object files"
+#: gui/gnash.cpp:433
+msgid "Set parameter (e.g. \"FlashVars=A=1&b=2\")"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:877
-msgid "Disable Local Connection object"
+#: gui/gnash.cpp:437
+msgid "Filedescriptor to use for external communications"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:884
-msgid "Network"
+#: gui/gnash.cpp:443
+msgid "Cookiefile to use"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:887 gui/gtk/gtk.cpp:1278
-msgid "<b>Network preferences</b>"
+#: gui/gnash.cpp:447
+msgid "Exit after specified number of frame advances"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:890
-msgid "Network timeout in seconds"
+#: gui/gnash.cpp:451
+msgid "Start in fullscreen mode"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:902
-msgid "Media"
+#: gui/gnash.cpp:456
+msgid "Start without displaying the menu bar"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:905 gui/gtk/gtk.cpp:1488
-msgid "<b>Sound</b>"
+#: gui/gnash.cpp:461
+msgid "List of frames to save as screenshots"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:908
-msgid "Use sound handler"
+#: gui/gnash.cpp:465
+msgid "Filename pattern for screenshot images"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:912 gui/gtk/gtk.cpp:1507
-msgid "Save media streams to disk"
+#: gui/gnash.cpp:469
+msgid "Quality for screenshot output (not all formats)"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:918 gui/gtk/gtk.cpp:1516
-msgid "Save dynamically loaded media to disk"
+#: gui/gnash.cpp:472
+msgid "Input files"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:922 gui/gtk/gtk.cpp:1524
-msgid "Saved media directory:"
+#: gui/gnash.cpp:483
+msgid "Dump options"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:931
-msgid "Player"
+#: gui/gnash.cpp:488
+msgid "Video dump file (raw format) and optional video FPS (@<num>)"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:934 gui/gtk/gtk.cpp:1550
-msgid "<b>Player description</b>"
+#: gui/gnash.cpp:490
+msgid "Number of milliseconds to sleep between advances"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:937 gui/gtk/gtk.cpp:1558
-msgid "Player version:"
+#: gui/gnash.cpp:492
+msgid "Trigger expression to start dumping"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:943 gui/gtk/gtk.cpp:1574
-msgid "Operating system:"
+#: gui/gnash.cpp:504
+msgid "Keys:\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:948 gui/qt/Qt4Gui.cpp:1021
-msgid "<Autodetect>"
+#: gui/gnash.cpp:506
+msgid "Quit\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:954 gui/gtk/gtk.cpp:1594
-msgid "URL opener:"
+#: gui/gnash.cpp:508
+msgid "Toggle fullscreen\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:961 gui/gtk/gtk.cpp:1606
-msgid "<b>Performance</b>"
+#: gui/gnash.cpp:510
+msgid "Toggle pause\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:964 gui/gtk/gtk.cpp:1620
-msgid "Max size of movie library:"
+#: gui/gnash.cpp:512
+msgid "Restart the movie\n"
 msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:973
-msgid "Start Gnash in pause mode"
+#: gui/gnash.cpp:514
+msgid "Take a screenshot\n"
 msgstr ""
 
-#: gui/qt/Qt4GlueAgg.cpp:115
-msgid "Could not create AGG renderer with pixelformat ABGR32"
+#: gui/gnash.cpp:516
+msgid "Force immediate redraw\n"
 msgstr ""
 
-#: gui/qt/kde_glue_agg.cpp:156
-msgid "Could not create AGG renderer with pixelformat BGRA32"
+#: gui/gnash.cpp:522
+msgid "Usage: gnash [options] movie_file.swf\n"
 msgstr ""
 
-#: gui/qt/kde.cpp:413
-msgid "Play Movie"
+#: gui/gnash.cpp:523
+msgid "Plays a SWF (Shockwave Flash) movie\n"
 msgstr ""
 
-#: gui/qt/kde.cpp:414
-msgid "Pause Movie"
+#: gui/gnash.cpp:540
+msgid ""
+"Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free "
+"Software Foundation, Inc.\n"
+"Gnash comes with NO WARRANTY, to the extent permitted by law.\n"
+"You may redistribute copies of Gnash under the terms of the GNU General\n"
+"Public License.  For more information, see the file named COPYING.\n"
+"\n"
 msgstr ""
 
-#: gui/qt/kde.cpp:415
-msgid "Stop Movie"
+#: gui/gnash.cpp:551
+msgid "Build options "
 msgstr ""
 
-#: gui/qt/kde.cpp:416 gui/gtk/gtk.cpp:2152
-msgid "Restart Movie"
+#: gui/gnash.cpp:552
+msgid "   Renderers: "
 msgstr ""
 
-#: gui/qt/kde.cpp:418
-msgid "Step Forward"
+#: gui/gnash.cpp:553
+msgid "   Hardware Acceleration: "
 msgstr ""
 
-#: gui/qt/kde.cpp:419
-msgid "Step Backward"
+#: gui/gnash.cpp:554
+msgid "   GUI: "
 msgstr ""
 
-#: gui/qt/kde.cpp:420
-msgid "Jump Forward"
+#: gui/gnash.cpp:555
+msgid "   Media handlers: "
 msgstr ""
 
-#: gui/qt/kde.cpp:421
-msgid "Jump Backward"
+#: gui/gnash.cpp:557
+msgid "   Configured with: "
 msgstr ""
 
-#: gui/pythonmod/gnash-view.cpp:220 gui/Player.cpp:288
-#, c-format
-msgid "Could not create sound handler: %s. Will continue without sound."
+#: gui/gnash.cpp:558
+msgid "   CXXFLAGS: "
 msgstr ""
 
-#: gui/pythonmod/gnash-view.cpp:223 gui/Player.cpp:283
-msgid "Sound requested but no sound support compiled in"
+#: gui/sdl/sdl_agg_glue.cpp:95
+msgid "SDL_SetVideoMode() failed for SdlAggGlue."
 msgstr ""
 
-#: gui/aos4/aos4.cpp:70
+#: gui/sdl/sdl_agg_glue.cpp:132 gui/haiku/haiku_agg_glue.cpp:416
 #, c-format
-msgid "Exception: %s on file %s line %d"
+msgid "SDL-AGG: %i byte offscreen buffer allocated"
 msgstr ""
 
-#: gui/aos4/aos4.cpp:266 gui/gtk/gtk.cpp:2591
-#, c-format
-msgid ""
-"Attempting to open file %s.\n"
-"NOTE: the file open functionality is not yet implemented!"
+#: gui/fltk/fltk_glue_agg.cpp:50
+msgid "Could not create AGG renderer with pixelformat RGB24"
 msgstr ""
 
-#: gui/aos4/aos4.cpp:274
-msgid "Cannot open File Requester!\n"
+#: gui/fb/fb_glue_ovg.cpp:160
+msgid "Could not create OpenVG renderer"
 msgstr ""
 
-#: gui/aos4/aos4.cpp:609
-msgid "error creating RenderHandler!\n"
+#: gui/fb/fb_glue_ovg.cpp:172 gui/fb/fb_glue_agg.cpp:76
+msgid "No renderer set!"
 msgstr ""
 
-#: gui/aos4/aos4_cairo_glue.cpp:124
+#: gui/fb/fb_glue_agg.cpp:87
 #, c-format
-msgid "Cairo's bit depth must be 16, 24 or 32 bits, not %d."
+msgid "No renderer set in %s!"
 msgstr ""
 
-#: gui/aos4/aos4_cairo_glue.cpp:212 gui/aos4/aos4_agg_glue.cpp:216
-msgid "Cannot layout Menu!!\n"
+#: gui/fb/fb_glue_agg.cpp:130
+msgid "failed to create a render handler for AGG!"
 msgstr ""
 
-#: gui/aos4/aos4_cairo_glue.cpp:216 gui/aos4/aos4_agg_glue.cpp:220
-msgid "Cannot create Menu!!\n"
+#: gui/fb/fb_glue_agg.cpp:151
+msgid "No Device layer initialized yet!"
 msgstr ""
 
-#: gui/aos4/aos4_cairo_glue.cpp:219 gui/aos4/aos4_agg_glue.cpp:223
-msgid "Cannot get Visual Info!!\n"
+#: gui/fb/fb_glue_agg.cpp:182
+msgid "The pixel format of your framebuffer could not be detected."
 msgstr ""
 
-#: gui/aos4/aos4_cairo_glue.cpp:222 gui/aos4/aos4_agg_glue.cpp:226
-msgid "Cannot get WB Screen pointer!!\n"
+#: gui/fb/fb_glue_agg.cpp:191
+msgid "Double buffering disabled"
 msgstr ""
 
-#: gui/aos4/aos4_cairo_glue.cpp:259 gui/aos4/aos4_agg_glue.cpp:264
-msgid "prepDrawingArea() failed.\n"
+#: gui/fb/fb_glue_agg.cpp:194
+msgid "Double buffering enabled"
 msgstr ""
 
-#: gui/aos4/aos4_agg_glue.cpp:277
+#: gui/fb/fb_glue_agg.cpp:221
 #, c-format
-msgid "AOS4-AGG: %i byte offscreen buffer allocated"
-msgstr ""
-
-#: gui/sdl/sdl_agg_glue.cpp:95
-msgid "SDL_SetVideoMode() failed for SdlAggGlue."
+msgid "No Drawbounds set in %s!"
 msgstr ""
 
-#: gui/gui.cpp:193
-msgid "Clipboard not yet supported in this GUI"
+#: gui/fb/fb_glue_gles1.cpp:98
+msgid "EGL: getDisplay ok"
 msgstr ""
 
-#: gui/gui.cpp:199 gui/gui.cpp:211
-msgid "Fullscreen not yet supported in this GUI"
+#: gui/fb/fb_glue_gles1.cpp:104
+msgid "EGL: initialize ok"
 msgstr ""
 
-#: gui/gui.cpp:205
-msgid "Window resize not yet supported in this GUI"
+#: gui/fb/fb_glue_gles1.cpp:112
+msgid "EGL: config ok"
 msgstr ""
 
-#: gui/gui.cpp:229 gui/gui.cpp:242
-msgid "Menu show/hide not yet supported in this GUI"
+#: gui/fb/fb_glue_gles1.cpp:121
+msgid "EGL: surface ok"
 msgstr ""
 
-#: gui/gui.cpp:235
-msgid "Mouse show/hide not yet supported in this GUI"
+#: gui/fb/fb_glue_gles1.cpp:129
+msgid "EGL: context ok"
 msgstr ""
 
-#: gui/gui.cpp:282
-msgid "Can't update stage matrix till VM is initialized"
+#: gui/fb/fb_glue_gles1.cpp:137
+msgid "EGL: current ok"
 msgstr ""
 
-#: gui/gui.cpp:334
+#: gui/fb/fb.cpp:257
 #, c-format
-msgid "Invalid scaleMode %d"
+msgid "No renderer! %s not supported."
 msgstr ""
 
-#: gui/gui.cpp:374
-#, c-format
-msgid "Invalid horizontal align %d"
+#: gui/fb/fb.cpp:269
+msgid "Found no accessible User mode input event device"
 msgstr ""
 
-#: gui/gui.cpp:405
-#, c-format
-msgid "Invalid vertical align %d"
+#: gui/fb/fb.cpp:279
+msgid "Found no accessible input event devices"
 msgstr ""
 
-#: gui/gui.cpp:900
-msgid "GUI is in stop mode, won't start application"
+#: gui/fb/fb.cpp:292
+msgid "WARNING: Mouse support may conflict with the input event support."
 msgstr ""
 
-#: gui/gui.cpp:1261
-#, c-format
-msgid "This gui didn't override 'yesno', assuming 'yes' answer to question: %s"
+#: gui/fb/fb.cpp:306
+msgid "Enabling Touchscreen support."
 msgstr ""
 
-#: gui/gui.cpp:1270
-msgid "Gui::setQuality called before a movie_root was available"
+#: gui/fb/fb.cpp:311
+msgid "WARNING: Babbage Tablet support disabled as it conflicts with TSlib"
 msgstr ""
 
-#: gui/gui.cpp:1280
-msgid "Gui::getQuality called before a movie_root was available"
+#: gui/fb/fb.cpp:313
+msgid "Enabling Babbage Touchscreen support"
 msgstr ""
 
-#: gui/Player.cpp:131
-msgid "GUI ExternalInterface.Pan event"
+#: gui/fb/fb.cpp:318
+msgid "Enabling Power Button support"
 msgstr ""
 
-#: gui/Player.cpp:143
-msgid "GUI ExternalInterface.SetZoomRect event"
+#: gui/fb/fb.cpp:492
+msgid "This GUI does not yet support menus"
 msgstr ""
 
-#: gui/Player.cpp:151
-msgid "GUI ExternalInterface.Zoom event"
+#: gui/fb/fb.cpp:498
+msgid "This GUI does not yet support a mouse pointer"
 msgstr ""
 
-#: gui/Player.cpp:169
-#, c-format
-msgid "Unhandled callback %s with arguments %s"
+#: gui/fb/fb.cpp:571
+msgid "Could not detect controlling TTY"
 msgstr ""
 
-#: gui/Player.cpp:434
-msgid "Non-existent media handler %1% specified"
+#: gui/fb/fb.cpp:580 gui/fb/fb.cpp:619 gui/fb/fb.cpp:653 gui/fb/fb.cpp:706
+#, c-format
+msgid "Could not open %s"
 msgstr ""
 
-#: gui/Player.cpp:545
-#, c-format
-msgid "Movie Frame Rate is %d, adjusting delay"
+#: gui/fb/fb.cpp:586
+msgid "Could not get current VT state"
 msgstr ""
 
-#: gui/Player.cpp:682
-msgid "Got unexpected argument type for message %1%"
+#: gui/fb/fb.cpp:599
+msgid "Could not request a new VT"
 msgstr ""
 
-#: gui/Player.cpp:717
+#: gui/fb/fb.cpp:613 gui/fb/fb.cpp:647 gui/fb/fb.cpp:700
 #, c-format
-msgid ""
-"Could only write %d bytes over %d required to user-provided host requests fd "
-"%d"
+msgid "Could not find device for VT number %d"
 msgstr ""
 
-#: gui/Player.cpp:773
+#: gui/fb/fb.cpp:624 gui/fb/fb.cpp:711
 #, c-format
-msgid "FsCommand exec called with argument %s"
+msgid "Could not activate VT number %d"
 msgstr ""
 
-#: gui/Player.cpp:790
+#: gui/fb/fb.cpp:630 gui/fb/fb.cpp:719
 #, c-format
-msgid "FsCommand trapallkeys called with argument %s"
+msgid "Error waiting for VT %d becoming active"
 msgstr ""
 
-#: gui/Player.cpp:796
+#: gui/fb/fb.cpp:661
 #, c-format
-msgid "FsCommand '%s(%s)' not handled internally"
+msgid "Could not attach controlling terminal (%s)"
 msgstr ""
 
-#: gui/gtk/gtk_glue_cairo.cpp:223
-msgid "Cairo: failed to create a rendering buffer!"
+#: gui/fb/fb.cpp:669
+msgid "Could not query current keyboard mode on VT"
 msgstr ""
 
-#: gui/gtk/gtk_glue_ovg.cpp:182
-msgid "Could not create OPENVG renderer"
+#: gui/fb/fb.cpp:673
+msgid "Could not switch to graphics mode on new VT"
 msgstr ""
 
-#: gui/gtk/gtk_glue_ovg.cpp:265 gui/gtk/gtk_glue_ovg.cpp:282
-msgid "No off screen buffer!"
+#: gui/fb/fb.cpp:728
+msgid "Could not restore keyboard mode"
 msgstr ""
 
-#: gui/gtk/gtk_glue_ovg.cpp:400
-#, c-format
-msgid "eglGetConfigs() failed to retrive the configs (error %s)"
+#: gui/dump/dump.cpp:118
+msgid "Ignoring request to display in X11 window"
 msgstr ""
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:163
-msgid "WARNING: failed to create VA-API display."
+#: gui/dump/dump.cpp:129 gui/haiku/haiku.cpp:384
+msgid "# FATAL:  No filename given with -D argument."
 msgstr ""
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:204
-#, c-format
-msgid ""
-"GTK-AGG: Unknown RGB format %s reported by VA-API.Please report this to the "
-"gnash-dev mailing list."
+#: gui/dump/dump.cpp:145
+msgid "# FATAL:  No sleep ms value given with -S argument."
 msgstr ""
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:231 gui/gtk/gtk_glue_agg_vaapi.cpp:289
-msgid "failed to map VA-API image."
+#: gui/dump/dump.cpp:156
+msgid "# FATAL:  No trigger value given with -T argument.\n"
 msgstr ""
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:237
-msgid "failed to associate VA-API subpicture."
+#: gui/dump/dump.cpp:353
+#, c-format
+msgid "Unable to write file '%s'."
 msgstr ""
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:371
+#: gui/ScreenShotter.cpp:99
 #, c-format
-msgid "failed to setup video window for surface 0x%08x."
+msgid "Failed to open screenshot file \"%s\"!"
 msgstr ""
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:378
-#, c-format
-msgid "failed to associate subpicture to surface 0x%08x."
+#: gui/qt/Qt4GlueAgg.cpp:115
+msgid "Could not create AGG renderer with pixelformat ABGR32"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:159
-msgid "Failed to initialize X threading support\n"
+#: gui/qt/kde.cpp:413
+msgid "Play Movie"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:202
-msgid "This system lacks a hardware OpenGL driver!"
+#: gui/qt/kde.cpp:414
+msgid "Pause Movie"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:223
-msgid "Click to play"
+#: gui/qt/kde.cpp:415
+msgid "Stop Movie"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:612
-#, c-format
-msgid "Advance interval timer set to %d ms (~ %d FPS)"
+#: gui/qt/kde.cpp:418
+msgid "Step Forward"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:686
-msgid "Sound"
+#: gui/qt/kde.cpp:419
+msgid "Step Backward"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1274
-msgid "_Network"
+#: gui/qt/kde.cpp:420
+msgid "Jump Forward"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1286
-msgid "Network timeout in seconds (0 for no timeout):"
+#: gui/qt/kde.cpp:421
+msgid "Jump Backward"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1305
-msgid "_Logging"
+#: gui/qt/kde.cpp:423 gui/qt/Qt4Gui.cpp:622
+msgid "Refresh"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1314
-msgid "Verbosity level:"
+#: gui/qt/kde.cpp:424 gui/qt/Qt4Gui.cpp:593
+msgid "Quit Gnash"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1327
-msgid "Log to _file"
+#: gui/qt/kde_glue_agg.cpp:156
+msgid "Could not create AGG renderer with pixelformat BGRA32"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1333
-msgid "Logfile name:"
+#: gui/qt/Qt4Gui.cpp:121
+msgid "Cairo renderer not supported!"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1346
-msgid "Log _parser output"
+#: gui/qt/Qt4Gui.cpp:129
+msgid "OpenGL renderer not supported!"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1354
-msgid "Log SWF _actions"
+#: gui/qt/Qt4Gui.cpp:137
+msgid "AGG renderer not supported!"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1362
-msgid "Log malformed SWF _errors"
+#: gui/qt/Qt4Gui.cpp:589
+msgid "Properties"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1370
-msgid "Log ActionScript _coding errors"
+#: gui/qt/Qt4Gui.cpp:600
+msgid "Preferences"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1386
-msgid "_Security"
+#: gui/qt/Qt4Gui.cpp:617
+msgid "Restart"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1399
-msgid "Connect only to local _host"
+#: gui/qt/Qt4Gui.cpp:626
+msgid "Fullscreen"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1406
-msgid "Connect only to local _domain"
+#: gui/qt/Qt4Gui.cpp:641
+msgid "File"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1413
-msgid "Disable SSL _verification"
+#: gui/qt/Qt4Gui.cpp:646
+msgid "Edit"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1420
-msgid "_Whitelist"
+#: gui/qt/Qt4Gui.cpp:650
+msgid "Movie Control"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1429
-msgid "_Blacklist"
+#: gui/qt/Qt4Gui.cpp:657
+msgid "View"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1454
-msgid "Do _not write Shared Object files"
+#: gui/qt/Qt4Gui.cpp:739
+msgid "Click to Play"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1461
-msgid "Only _access local Shared Object files"
+#: gui/qt/Qt4Gui.cpp:786
+msgid "Logging"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1468
-msgid "Disable Local _Connection object"
+#: gui/qt/Qt4Gui.cpp:792
+msgid "Verbosity level"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1482
-msgid "_Media"
+#: gui/qt/Qt4Gui.cpp:810
+msgid "Log to file"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1493
-msgid "Use sound _handler"
+#: gui/qt/Qt4Gui.cpp:817
+msgid "Log parser output"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1501
-msgid "<b>Media Streams</b>"
+#: gui/qt/Qt4Gui.cpp:821
+msgid "Log SWF actions"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1544
-msgid "_Player"
+#: gui/qt/Qt4Gui.cpp:825
+msgid "Log malformed SWF errors"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1584
-msgid "<i>If blank, Gnash will detect your OS</i>"
+#: gui/qt/Qt4Gui.cpp:830
+msgid "Log ActionScript coding errors"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1637
-msgid "Max scripts execution time (in seconds):"
+#: gui/qt/Qt4Gui.cpp:837
+msgid "Security"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1656
-msgid "Max scripts recursion limit (stack depth):"
+#: gui/qt/Qt4Gui.cpp:843
+msgid "Connect only to local host"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1672
-msgid "Lock script limits so that SWF tags can't override"
+#: gui/qt/Qt4Gui.cpp:848
+msgid "Connect only to local domain"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1684
-msgid "Start _Gnash in pause mode"
+#: gui/qt/Qt4Gui.cpp:853
+msgid "Disable SSL verification"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1843
-msgid ""
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 3 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-"GNU General Public License for more details.\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301\n"
-"USA or visit http://www.gnu.org/licenses/."
+#: gui/qt/Qt4Gui.cpp:867
+msgid "Do not write Shared Object files"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1859
-msgid "Gnash is the GNU SWF Player based on GameSWF."
+#: gui/qt/Qt4Gui.cpp:873
+msgid "Only access local Shared Object files"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1860
-msgid ""
-"\n"
-"Renderer: "
+#: gui/qt/Qt4Gui.cpp:878
+msgid "Disable Local Connection object"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1862
-msgid ""
-"\n"
-"Hardware Acceleration: "
+#: gui/qt/Qt4Gui.cpp:885
+msgid "Network"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1864
-msgid ""
-"\n"
-"GUI: "
+#: gui/qt/Qt4Gui.cpp:891
+msgid "Network timeout in seconds"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1866
-msgid ""
-"\n"
-"Media: "
+#: gui/qt/Qt4Gui.cpp:903
+msgid "Media"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1896
-msgid "translator-credits"
+#: gui/qt/Qt4Gui.cpp:909
+msgid "Use sound handler"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1923
-msgid "_File"
+#: gui/qt/Qt4Gui.cpp:932
+msgid "Player"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1976
-msgid "_Edit"
+#: gui/qt/Qt4Gui.cpp:949 gui/qt/Qt4Gui.cpp:1022
+msgid "<Autodetect>"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:1996
-msgid "_Help"
+#: gui/qt/Qt4Gui.cpp:974
+msgid "Start Gnash in pause mode"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2016
-msgid "_View"
+#: gui/gui.cpp:194
+msgid "Clipboard not yet supported in this GUI"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2024
-msgid "Redraw"
+#: gui/gui.cpp:200 gui/gui.cpp:212
+msgid "Fullscreen not yet supported in this GUI"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2034 gui/gtk/gtk.cpp:2039
-msgid "Toggle fullscreen"
+#: gui/gui.cpp:206
+msgid "Window resize not yet supported in this GUI"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2048
-msgid "Show updated ranges"
+#: gui/gui.cpp:230 gui/gui.cpp:243
+msgid "Menu show/hide not yet supported in this GUI"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2067
-msgid "_Quality"
+#: gui/gui.cpp:236
+msgid "Mouse show/hide not yet supported in this GUI"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2077
-msgid "Low"
+#: gui/gui.cpp:283
+msgid "Can't update stage matrix till VM is initialized"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2083
-msgid "Medium"
+#: gui/gui.cpp:335
+#, c-format
+msgid "Invalid scaleMode %d"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2089
-msgid "High"
+#: gui/gui.cpp:375
+#, c-format
+msgid "Invalid horizontal align %d"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2095
-msgid "Best"
+#: gui/gui.cpp:406
+#, c-format
+msgid "Invalid vertical align %d"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2108
-msgid "Movie _Control"
+#: gui/gui.cpp:903
+msgid "GUI is in stop mode, won't start application"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2275 gui/gtk/gtk.cpp:2276
+#: gui/gui.cpp:1266
 #, c-format
-msgid "Couldn't find pixmap file: %s"
+msgid "This GUI didn't override 'yesno', assuming 'yes' answer to question: %s"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2282
-#, c-format
-msgid "Failed to load pixbuf file: %s: %s"
+#: gui/gui.cpp:1275
+msgid "Gui::setQuality called before a movie_root was available"
 msgstr ""
 
-#: gui/gtk/gtk.cpp:2608 gui/gtk/gtk.cpp:2621
-msgid "Open file"
+#: gui/gui.cpp:1285
+msgid "Gui::getQuality called before a movie_root was available"
 msgstr ""
 
-#: gui/gtk/gtk_glue_gtkglext.cpp:72
-msgid ""
-"Cannot find the double-buffered visual.\n"
-"Trying single-buffered visual."
+#: gui/haiku/haiku.cpp:141
+msgid "spawn_thread failed"
 msgstr ""
 
-#: gui/gtk/gtk_glue_gtkglext.cpp:78
-msgid "No appropriate OpenGL-capable visual found."
+#: gui/haiku/haiku.cpp:144
+msgid "resume_thread failed"
+msgstr ""
+
+#: gui/haiku/haiku.cpp:157
+#, c-format
+msgid "pulses thread returned %d"
+msgstr ""
+
+#: gui/haiku/haiku.cpp:248
+msgid "send_data failed"
 msgstr ""
 
 #: extensions/mysql/mysql_db.cpp:186
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..920a6f1
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,1292 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-01-01 09:28-0700\n"
+"PO-Revision-Date: 2014-04-20 15:41+0200\n"
+"Last-Translator: Petter <pere at hungry.com>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.5\n"
+
+#: libcore/movie_root.cpp:1676 gui/Player.cpp:713
+#, c-format
+msgid "Could not write to user-provided host requests fd %d: %s"
+msgstr ""
+
+#: libdevice/egl/eglDevice.cpp:209 libdevice/egl/eglDevice.cpp:544
+#: gui/gtk/gtk_glue_ovg.cpp:383
+#, c-format
+msgid "eglGetConfigs() failed to retrieve the number of configs (error %s)"
+msgstr ""
+
+#: libdevice/egl/eglDevice.cpp:214 libdevice/egl/eglDevice.cpp:549
+#: gui/gtk/gtk_glue_ovg.cpp:388
+msgid "No EGLconfigs found\n"
+msgstr "Fant ikke EGLconfigs\n"
+
+#: libdevice/egl/eglDevice.cpp:556 gui/gtk/gtk_glue_ovg.cpp:395
+msgid "Out of memory\n"
+msgstr "Fritt for minne\n"
+
+#: libdevice/egl/eglDevice.cpp:561 gui/gtk/gtk_glue_ovg.cpp:400
+#, c-format
+msgid "eglGetConfigs() failed to retrive the configs (error %s)"
+msgstr ""
+
+#: utilities/processor.cpp:456 utilities/processor.cpp:459
+#: gui/pythonmod/gnash-view.cpp:438 gui/pythonmod/gnash-view.cpp:441
+#, c-format
+msgid "%s appended to local sandboxes"
+msgstr "$s lagt til lokale sandkasser"
+
+#: gui/fb/fb.cpp:229
+#, c-format
+msgid "No renderer! %s not supported."
+msgstr ""
+
+#: gui/fb/fb.cpp:240
+msgid "Found no accessible User mode input event device"
+msgstr ""
+
+#: gui/fb/fb.cpp:249
+msgid "Found no accessible input event devices"
+msgstr ""
+
+#: gui/fb/fb.cpp:262
+msgid "WARNING: Mouse support may conflict with the input event support."
+msgstr ""
+
+#: gui/fb/fb.cpp:276
+msgid "Enabling Touchscreen support."
+msgstr ""
+
+#: gui/fb/fb.cpp:281
+msgid "WARNING: Babbage Tablet support disabled as it conflicts with TSlib"
+msgstr ""
+
+#: gui/fb/fb.cpp:283
+msgid "Enabling Babbage Touchscreen support"
+msgstr ""
+
+#: gui/fb/fb.cpp:288
+msgid "Enabling Power Button support"
+msgstr ""
+
+#: gui/fb/fb.cpp:368
+#, c-format
+msgid "Movie Frame Rate is %d, adjusting delay to %dms"
+msgstr ""
+
+#: gui/fb/fb.cpp:462
+msgid "This GUI does not yet support menus"
+msgstr ""
+
+#: gui/fb/fb.cpp:468
+msgid "This GUI does not yet support a mouse pointer"
+msgstr "Dette grafiske grensesnittet støtter ennå ikke en muspeker"
+
+#: gui/fb/fb.cpp:539
+msgid "Could not detect controlling TTY"
+msgstr "Klarte ikke oppdage kontrollerende TTY"
+
+#: gui/fb/fb.cpp:548 gui/fb/fb.cpp:585 gui/fb/fb.cpp:619 gui/fb/fb.cpp:670
+#, c-format
+msgid "Could not open %s"
+msgstr "Kunne ikke åpne %s"
+
+#: gui/fb/fb.cpp:554
+msgid "Could not get current VT state"
+msgstr ""
+
+#: gui/fb/fb.cpp:565
+msgid "Could not request a new VT"
+msgstr ""
+
+#: gui/fb/fb.cpp:579 gui/fb/fb.cpp:613 gui/fb/fb.cpp:664
+#, c-format
+msgid "Could not find device for VT number %d"
+msgstr ""
+
+#: gui/fb/fb.cpp:590 gui/fb/fb.cpp:675
+#, c-format
+msgid "Could not activate VT number %d"
+msgstr ""
+
+#: gui/fb/fb.cpp:596 gui/fb/fb.cpp:681
+#, c-format
+msgid "Error waiting for VT %d becoming active"
+msgstr ""
+
+#: gui/fb/fb.cpp:627
+#, c-format
+msgid "Could not attach controlling terminal (%s)"
+msgstr ""
+
+#: gui/fb/fb.cpp:635
+msgid "Could not query current keyboard mode on VT"
+msgstr ""
+
+#: gui/fb/fb.cpp:639
+msgid "Could not switch to graphics mode on new VT"
+msgstr ""
+
+#: gui/fb/fb.cpp:690
+msgid "Could not restore keyboard mode"
+msgstr ""
+
+#: gui/fb/fb_glue_ovg.cpp:73 gui/gtk/gtk_glue_ovg.cpp:88
+msgid "Probing found an EGL display device"
+msgstr ""
+
+#: gui/fb/fb_glue_ovg.cpp:77 gui/gtk/gtk_glue_ovg.cpp:92
+msgid "Probing found a raw Framebuffer display device"
+msgstr ""
+
+#: gui/fb/fb_glue_ovg.cpp:81 gui/gtk/gtk_glue_ovg.cpp:96
+msgid "Probing found an X11 display device"
+msgstr ""
+
+#: gui/fb/fb_glue_ovg.cpp:85 gui/gtk/gtk_glue_ovg.cpp:100
+msgid "Probing found a DirectFB display device"
+msgstr ""
+
+#: gui/fb/fb_glue_ovg.cpp:90 gui/gtk/gtk_glue_ovg.cpp:105
+msgid "No display devices found by probing!"
+msgstr ""
+
+#: gui/fb/fb_glue_ovg.cpp:156
+msgid "Could not create OpenVG renderer"
+msgstr ""
+
+#: gui/fb/fb_glue_ovg.cpp:168 gui/fb/fb_glue_agg.cpp:76
+msgid "No renderer set!"
+msgstr ""
+
+#: gui/fb/fb_glue_gles1.cpp:98
+msgid "EGL: getDisplay ok"
+msgstr ""
+
+#: gui/fb/fb_glue_gles1.cpp:104
+msgid "EGL: initialize ok"
+msgstr ""
+
+#: gui/fb/fb_glue_gles1.cpp:111
+msgid "EGL: config ok"
+msgstr ""
+
+#: gui/fb/fb_glue_gles1.cpp:118
+msgid "EGL: surface ok"
+msgstr ""
+
+#: gui/fb/fb_glue_gles1.cpp:124
+msgid "EGL: context ok"
+msgstr ""
+
+#: gui/fb/fb_glue_gles1.cpp:130
+msgid "EGL: current ok"
+msgstr ""
+
+#: gui/fb/fb_glue_agg.cpp:87
+#, c-format
+msgid "No renderer set in %s!"
+msgstr ""
+
+#: gui/fb/fb_glue_agg.cpp:130
+msgid "failed to create a render handler for AGG!"
+msgstr ""
+
+#: gui/fb/fb_glue_agg.cpp:151
+msgid "No Device layer initialized yet!"
+msgstr ""
+
+#: gui/fb/fb_glue_agg.cpp:182
+msgid "The pixel format of your framebuffer could not be detected."
+msgstr ""
+
+#: gui/fb/fb_glue_agg.cpp:191
+msgid "Double buffering disabled"
+msgstr ""
+
+#: gui/fb/fb_glue_agg.cpp:194
+msgid "Double buffering enabled"
+msgstr ""
+
+#: gui/fb/fb_glue_agg.cpp:221
+#, c-format
+msgid "No Drawbounds set in %s!"
+msgstr ""
+
+#: gui/gnash.cpp:125
+#, c-format
+msgid "Error parsing options: %s\n"
+msgstr ""
+
+#: gui/gnash.cpp:166
+msgid "Error: no input file was specified. Exiting.\n"
+msgstr ""
+
+#: gui/gnash.cpp:212
+msgid "Invalid host communication filedescriptor %1%\n"
+msgstr ""
+
+#: gui/gnash.cpp:219
+msgid "Invalid control communication filedescriptor %1%\n"
+msgstr ""
+
+#: gui/gnash.cpp:251
+msgid "ERROR: -r must be followed by 0, 1, 2 or 3 "
+msgstr ""
+
+#: gui/gnash.cpp:267
+msgid "Debugging options"
+msgstr "Feilsøkingsvalg"
+
+#: gui/gnash.cpp:273
+msgid "Produce verbose output"
+msgstr ""
+
+#: gui/gnash.cpp:280
+msgid "Produce the disk based debug log"
+msgstr ""
+
+#: gui/gnash.cpp:285
+msgid "Be (very) verbose about action execution"
+msgstr ""
+
+#: gui/gnash.cpp:291
+msgid "Be (very) verbose about parsing"
+msgstr ""
+
+#: gui/gnash.cpp:297
+msgid "Print FPS every num seconds"
+msgstr ""
+
+#: gui/gnash.cpp:320
+msgid "Options"
+msgstr "Valg"
+
+#: gui/gnash.cpp:325
+msgid "Print this help and exit"
+msgstr ""
+
+#: gui/gnash.cpp:328
+msgid "Print version information and exit"
+msgstr ""
+
+#: gui/gnash.cpp:333
+msgid "Scale the movie by the specified factor"
+msgstr ""
+
+#: gui/gnash.cpp:337
+msgid "Number of milliseconds to delay in main loop"
+msgstr ""
+
+#: gui/gnash.cpp:341
+msgid "Audio dump file (wave format)"
+msgstr ""
+
+#: gui/gnash.cpp:346
+msgid "Hardware Video Accelerator to use"
+msgstr ""
+
+#: gui/gnash.cpp:351
+msgid "X11 Window ID for display"
+msgstr ""
+
+#: gui/gnash.cpp:355
+msgid "Set window width"
+msgstr "Sett vindusbredde"
+
+#: gui/gnash.cpp:359
+msgid "Set window height"
+msgstr "Sett vindushøyde"
+
+#: gui/gnash.cpp:363
+msgid "Set window x position"
+msgstr "Sett x-posisjon for vindu"
+
+#: gui/gnash.cpp:367
+msgid "Set window y position"
+msgstr "Sett y-posisjon for vindu"
+
+#: gui/gnash.cpp:372
+msgid "Exit when/if movie reaches the last frame"
+msgstr ""
+
+#: gui/gnash.cpp:378
+msgid "disable rendering and sound"
+msgstr ""
+
+#: gui/gnash.cpp:380
+msgid "enable rendering, disable sound"
+msgstr ""
+
+#: gui/gnash.cpp:382
+msgid "enable sound, disable rendering"
+msgstr ""
+
+#: gui/gnash.cpp:384
+msgid "enable rendering and sound"
+msgstr ""
+
+#: gui/gnash.cpp:392
+msgid "The media handler to use"
+msgstr ""
+
+#: gui/gnash.cpp:400
+msgid "The renderer to use"
+msgstr ""
+
+#: gui/gnash.cpp:406
+msgid "Exit after the specified number of seconds"
+msgstr ""
+
+#: gui/gnash.cpp:409
+msgid "Set \"real\" URL of the movie"
+msgstr ""
+
+#: gui/gnash.cpp:413
+msgid "Set \"base\" URL for resolving relative URLs"
+msgstr "Sett «utgangs»-URL for å løse relative URL-er"
+
+#: gui/gnash.cpp:418
+msgid "Set parameter (e.g. \"FlashVars=A=1&b=2\")"
+msgstr ""
+
+#: gui/gnash.cpp:422
+msgid "Filedescriptor to use for external communications"
+msgstr ""
+
+#: gui/gnash.cpp:428
+msgid "Exit after specified number of frame advances"
+msgstr ""
+
+#: gui/gnash.cpp:432
+msgid "Start in fullscreen mode"
+msgstr ""
+
+#: gui/gnash.cpp:437
+msgid "Start without displaying the menu bar"
+msgstr ""
+
+#: gui/gnash.cpp:442
+msgid "List of frames to save as screenshots"
+msgstr ""
+
+#: gui/gnash.cpp:446
+msgid "Filename pattern for screenshot images"
+msgstr ""
+
+#: gui/gnash.cpp:450
+msgid "Quality for screenshot output (not all formats)"
+msgstr ""
+
+#: gui/gnash.cpp:453
+msgid "Input files"
+msgstr ""
+
+#: gui/gnash.cpp:464
+msgid "Dump options"
+msgstr ""
+
+#: gui/gnash.cpp:469
+msgid "Video dump file (raw format) and optional video FPS (@<num>)"
+msgstr ""
+
+#: gui/gnash.cpp:471
+msgid "Number of milliseconds to sleep between advances"
+msgstr ""
+
+#: gui/gnash.cpp:473
+msgid "Trigger expression to start dumping"
+msgstr ""
+
+#: gui/gnash.cpp:485
+msgid "Keys:\n"
+msgstr "Nøkler:\n"
+
+#: gui/gnash.cpp:487
+msgid "Quit\n"
+msgstr "Avslutt\n"
+
+#: gui/gnash.cpp:489
+msgid "Toggle fullscreen\n"
+msgstr ""
+
+#: gui/gnash.cpp:491
+msgid "Toggle pause\n"
+msgstr ""
+
+#: gui/gnash.cpp:493
+msgid "Restart the movie\n"
+msgstr "Start filmen på nytt\n"
+
+#: gui/gnash.cpp:495
+msgid "Take a screenshot\n"
+msgstr "Ta et øyeblikksbilde\n"
+
+#: gui/gnash.cpp:497
+msgid "Force immediate redraw\n"
+msgstr "Tving tegning på nytt øyeblikkelig\n"
+
+#: gui/gnash.cpp:503
+msgid "Usage: gnash [options] movie_file.swf\n"
+msgstr "Bruk: gnash [valg] film_fil.swf\n"
+
+#: gui/gnash.cpp:504
+msgid "Plays a SWF (Shockwave Flash) movie\n"
+msgstr ""
+
+#: gui/gnash.cpp:521
+msgid ""
+"Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software "
+"Foundation, Inc.\n"
+"Gnash comes with NO WARRANTY, to the extent permitted by law.\n"
+"You may redistribute copies of Gnash under the terms of the GNU General\n"
+"Public License.  For more information, see the file named COPYING.\n"
+"\n"
+msgstr ""
+"Opphavsrettsbeskyttet (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free "
+"Software Foundation, Inc.\n"
+"Gnash kommer helt UTEN GARANTI i den utstrekning tillat i loven.\n"
+"Du kan spre kopier av Gnash i henhold til vilkårene til lisensen GNU\n"
+"General Public License.  For mer informasjon, se filen ved navn COPYING.\n"
+"\n"
+
+#: gui/gnash.cpp:532
+msgid "Build options "
+msgstr "Byggevalg "
+
+#: gui/gnash.cpp:533
+msgid "   Renderers: "
+msgstr ""
+
+#: gui/gnash.cpp:534
+msgid "   Hardware Acceleration: "
+msgstr ""
+
+#: gui/gnash.cpp:535
+msgid "   GUI: "
+msgstr ""
+
+#: gui/gnash.cpp:536
+msgid "   Media handlers: "
+msgstr ""
+
+#: gui/gnash.cpp:538
+msgid "   Configured with: "
+msgstr ""
+
+#: gui/gnash.cpp:539
+msgid "   CXXFLAGS: "
+msgstr ""
+
+#: gui/fltk/fltk_glue_agg.cpp:50
+msgid "Could not create AGG renderer with pixelformat RGB24"
+msgstr ""
+
+#: gui/dump/dump.cpp:117
+msgid "Ignoring request to display in X11 window"
+msgstr ""
+
+#: gui/dump/dump.cpp:128 gui/haiku/haiku.cpp:384
+msgid "# FATAL:  No filename given with -D argument."
+msgstr ""
+
+#: gui/dump/dump.cpp:144
+msgid "# FATAL:  No sleep ms value given with -S argument."
+msgstr ""
+
+#: gui/dump/dump.cpp:155
+msgid "# FATAL:  No trigger value given with -T argument.\n"
+msgstr ""
+
+#: gui/dump/dump.cpp:352
+#, c-format
+msgid "Unable to write file '%s'."
+msgstr "Klarte ikke skrive til fil «%s»."
+
+#: gui/ScreenShotter.cpp:99
+#, c-format
+msgid "Failed to open screenshot file \"%s\"!"
+msgstr "Ute av stand til å åpne øyeblikksbildefil «%s»!"
+
+#: gui/haiku/haiku.cpp:141
+msgid "spawn_thread failed"
+msgstr "spawn_thread feilet"
+
+#: gui/haiku/haiku.cpp:144
+msgid "resume_thread failed"
+msgstr "resume_thread feilet"
+
+#: gui/haiku/haiku.cpp:157
+#, c-format
+msgid "pulses thread returned %d"
+msgstr "pulses-tråd returnerte %d"
+
+#: gui/haiku/haiku.cpp:248
+msgid "send_data failed"
+msgstr ""
+
+#: gui/haiku/haiku_agg_glue.cpp:290 gui/aos4/aos4_agg_glue.cpp:116
+#: gui/sdl/sdl_agg_glue.cpp:78
+#, c-format
+msgid "AGG's bit depth must be 16, 24 or 32 bits, not %d."
+msgstr ""
+
+#: gui/haiku/haiku_agg_glue.cpp:297 gui/gtk/gtk_glue_agg.cpp:96
+#, c-format
+msgid "Could not create AGG renderer with pixelformat %s"
+msgstr ""
+
+#: gui/haiku/haiku_agg_glue.cpp:416 gui/sdl/sdl_agg_glue.cpp:132
+#, c-format
+msgid "SDL-AGG: %i byte offscreen buffer allocated"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:120
+msgid "Cairo renderer not supported!"
+msgstr "Cairo-rendreren støttes ikke!"
+
+#: gui/qt/Qt4Gui.cpp:128
+msgid "OpenGL renderer not supported!"
+msgstr "OpenGL-rendreren støttes ikke!"
+
+#: gui/qt/Qt4Gui.cpp:136
+msgid "AGG renderer not supported!"
+msgstr "AGG-rendreren støttes ikke!"
+
+#: gui/qt/Qt4Gui.cpp:467 gui/gtk/gtk.cpp:1708
+msgid "Movie properties"
+msgstr "Filmegenskaper"
+
+#: gui/qt/Qt4Gui.cpp:486 gui/gtk/gtk.cpp:1778
+msgid "Variable"
+msgstr "Variabel"
+
+#: gui/qt/Qt4Gui.cpp:487 gui/gtk/gtk.cpp:1790
+msgid "Value"
+msgstr "Verdi"
+
+#: gui/qt/Qt4Gui.cpp:588
+msgid "Properties"
+msgstr "Egenskaper"
+
+#: gui/qt/Qt4Gui.cpp:592 gui/qt/kde.cpp:424
+msgid "Quit Gnash"
+msgstr "Avslutt Gnash"
+
+#: gui/qt/Qt4Gui.cpp:599
+msgid "Preferences"
+msgstr "Innstillinger"
+
+#: gui/qt/Qt4Gui.cpp:604 gui/gtk/gtk.cpp:2119
+msgid "Play"
+msgstr "Spill av"
+
+#: gui/qt/Qt4Gui.cpp:608 gui/gtk/gtk.cpp:2130
+msgid "Pause"
+msgstr "Pause"
+
+#: gui/qt/Qt4Gui.cpp:612 gui/gtk/gtk.cpp:2140
+msgid "Stop"
+msgstr "Stopp"
+
+#: gui/qt/Qt4Gui.cpp:616
+msgid "Restart"
+msgstr "Start på nytt"
+
+#: gui/qt/Qt4Gui.cpp:621 gui/qt/kde.cpp:423
+msgid "Refresh"
+msgstr "Frisk opp"
+
+#: gui/qt/Qt4Gui.cpp:625
+msgid "Fullscreen"
+msgstr "Fullskjerm"
+
+#: gui/qt/Qt4Gui.cpp:640
+msgid "File"
+msgstr "Fil"
+
+#: gui/qt/Qt4Gui.cpp:645
+msgid "Edit"
+msgstr "Rediger"
+
+#: gui/qt/Qt4Gui.cpp:649
+msgid "Movie Control"
+msgstr "Filmkontroll"
+
+#: gui/qt/Qt4Gui.cpp:656
+msgid "View"
+msgstr "Vis"
+
+#: gui/qt/Qt4Gui.cpp:738
+msgid "Click to Play"
+msgstr "Trykk for å spille av"
+
+#: gui/qt/Qt4Gui.cpp:770 gui/gtk/gtk.cpp:1239
+msgid "Gnash preferences"
+msgstr "Gnash-innstillinger"
+
+#: gui/qt/Qt4Gui.cpp:785
+msgid "Logging"
+msgstr "Logging"
+
+#: gui/qt/Qt4Gui.cpp:788 gui/gtk/gtk.cpp:1310
+msgid "<b>Logging options</b>"
+msgstr "<b>Loggingsinnstillinger</b>"
+
+#: gui/qt/Qt4Gui.cpp:791
+msgid "Verbosity level"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:809
+msgid "Log to file"
+msgstr "Logg til fil"
+
+#: gui/qt/Qt4Gui.cpp:816
+msgid "Log parser output"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:820
+msgid "Log SWF actions"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:824
+msgid "Log malformed SWF errors"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:829
+msgid "Log ActionScript coding errors"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:836
+msgid "Security"
+msgstr "Sikkerhet"
+
+#: gui/qt/Qt4Gui.cpp:839 gui/gtk/gtk.cpp:1393
+msgid "<b>Network connections</b>"
+msgstr "<b>Nettverksforbindelser</b>"
+
+#: gui/qt/Qt4Gui.cpp:842
+msgid "Connect only to local host"
+msgstr "Koble kun til lokal vert"
+
+#: gui/qt/Qt4Gui.cpp:847
+msgid "Connect only to local domain"
+msgstr "Koble kun til lokalt domene"
+
+#: gui/qt/Qt4Gui.cpp:852
+msgid "Disable SSL verification"
+msgstr "Slå av SSL-bekreftelse"
+
+#: gui/qt/Qt4Gui.cpp:857 gui/gtk/gtk.cpp:1438
+msgid "<b>Privacy</b>"
+msgstr "<b>Privatliv</b>"
+
+#: gui/qt/Qt4Gui.cpp:860 gui/gtk/gtk.cpp:1442
+msgid "Shared objects directory:"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:866
+msgid "Do not write Shared Object files"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:872
+msgid "Only access local Shared Object files"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:877
+msgid "Disable Local Connection object"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:884
+msgid "Network"
+msgstr "Nettverk"
+
+#: gui/qt/Qt4Gui.cpp:887 gui/gtk/gtk.cpp:1278
+msgid "<b>Network preferences</b>"
+msgstr "<b>Nettverksinnstillinger</b>"
+
+#: gui/qt/Qt4Gui.cpp:890
+msgid "Network timeout in seconds"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:902
+msgid "Media"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:905 gui/gtk/gtk.cpp:1488
+msgid "<b>Sound</b>"
+msgstr "<b>Lyd</b>"
+
+#: gui/qt/Qt4Gui.cpp:908
+msgid "Use sound handler"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:912 gui/gtk/gtk.cpp:1507
+msgid "Save media streams to disk"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:918 gui/gtk/gtk.cpp:1516
+msgid "Save dynamically loaded media to disk"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:922 gui/gtk/gtk.cpp:1524
+msgid "Saved media directory:"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:931
+msgid "Player"
+msgstr "Avspiller"
+
+#: gui/qt/Qt4Gui.cpp:934 gui/gtk/gtk.cpp:1550
+msgid "<b>Player description</b>"
+msgstr "<b>Avspillerbeskrivelse</b>"
+
+#: gui/qt/Qt4Gui.cpp:937 gui/gtk/gtk.cpp:1558
+msgid "Player version:"
+msgstr "Avspillerversjon:"
+
+#: gui/qt/Qt4Gui.cpp:943 gui/gtk/gtk.cpp:1574
+msgid "Operating system:"
+msgstr "Operativsystem:"
+
+#: gui/qt/Qt4Gui.cpp:948 gui/qt/Qt4Gui.cpp:1021
+msgid "<Autodetect>"
+msgstr ""
+
+#: gui/qt/Qt4Gui.cpp:954 gui/gtk/gtk.cpp:1594
+msgid "URL opener:"
+msgstr "URL-Ã¥pner:"
+
+#: gui/qt/Qt4Gui.cpp:961 gui/gtk/gtk.cpp:1606
+msgid "<b>Performance</b>"
+msgstr "<b>Ytelse</b>"
+
+#: gui/qt/Qt4Gui.cpp:964 gui/gtk/gtk.cpp:1620
+msgid "Max size of movie library:"
+msgstr "Maksimal størrelse på filmbiblioteket:"
+
+#: gui/qt/Qt4Gui.cpp:973
+msgid "Start Gnash in pause mode"
+msgstr "Start Gnash i pausemodus"
+
+#: gui/qt/Qt4GlueAgg.cpp:115
+msgid "Could not create AGG renderer with pixelformat ABGR32"
+msgstr ""
+
+#: gui/qt/kde_glue_agg.cpp:156
+msgid "Could not create AGG renderer with pixelformat BGRA32"
+msgstr ""
+
+#: gui/qt/kde.cpp:413
+msgid "Play Movie"
+msgstr "Spill film"
+
+#: gui/qt/kde.cpp:414
+msgid "Pause Movie"
+msgstr "Pause film"
+
+#: gui/qt/kde.cpp:415
+msgid "Stop Movie"
+msgstr "Stopp film"
+
+#: gui/qt/kde.cpp:416 gui/gtk/gtk.cpp:2152
+msgid "Restart Movie"
+msgstr "Start film på nytt"
+
+#: gui/qt/kde.cpp:418
+msgid "Step Forward"
+msgstr "Steg forover"
+
+#: gui/qt/kde.cpp:419
+msgid "Step Backward"
+msgstr "Steg bakover"
+
+#: gui/qt/kde.cpp:420
+msgid "Jump Forward"
+msgstr "Hopp forover"
+
+#: gui/qt/kde.cpp:421
+msgid "Jump Backward"
+msgstr "Hopp bakover"
+
+#: gui/pythonmod/gnash-view.cpp:220 gui/Player.cpp:288
+#, c-format
+msgid "Could not create sound handler: %s. Will continue without sound."
+msgstr ""
+
+#: gui/pythonmod/gnash-view.cpp:223 gui/Player.cpp:283
+msgid "Sound requested but no sound support compiled in"
+msgstr ""
+
+#: gui/aos4/aos4.cpp:70
+#, c-format
+msgid "Exception: %s on file %s line %d"
+msgstr "Unntak: %s i fil %s linje %d"
+
+#: gui/aos4/aos4.cpp:266 gui/gtk/gtk.cpp:2591
+#, c-format
+msgid ""
+"Attempting to open file %s.\n"
+"NOTE: the file open functionality is not yet implemented!"
+msgstr ""
+
+#: gui/aos4/aos4.cpp:274
+msgid "Cannot open File Requester!\n"
+msgstr ""
+
+#: gui/aos4/aos4.cpp:609
+msgid "error creating RenderHandler!\n"
+msgstr ""
+
+#: gui/aos4/aos4_cairo_glue.cpp:124
+#, c-format
+msgid "Cairo's bit depth must be 16, 24 or 32 bits, not %d."
+msgstr ""
+
+#: gui/aos4/aos4_cairo_glue.cpp:212 gui/aos4/aos4_agg_glue.cpp:216
+msgid "Cannot layout Menu!!\n"
+msgstr ""
+
+#: gui/aos4/aos4_cairo_glue.cpp:216 gui/aos4/aos4_agg_glue.cpp:220
+msgid "Cannot create Menu!!\n"
+msgstr ""
+
+#: gui/aos4/aos4_cairo_glue.cpp:219 gui/aos4/aos4_agg_glue.cpp:223
+msgid "Cannot get Visual Info!!\n"
+msgstr ""
+
+#: gui/aos4/aos4_cairo_glue.cpp:222 gui/aos4/aos4_agg_glue.cpp:226
+msgid "Cannot get WB Screen pointer!!\n"
+msgstr ""
+
+#: gui/aos4/aos4_cairo_glue.cpp:259 gui/aos4/aos4_agg_glue.cpp:264
+msgid "prepDrawingArea() failed.\n"
+msgstr ""
+
+#: gui/aos4/aos4_agg_glue.cpp:277
+#, c-format
+msgid "AOS4-AGG: %i byte offscreen buffer allocated"
+msgstr ""
+
+#: gui/sdl/sdl_agg_glue.cpp:95
+msgid "SDL_SetVideoMode() failed for SdlAggGlue."
+msgstr ""
+
+#: gui/gui.cpp:193
+msgid "Clipboard not yet supported in this GUI"
+msgstr ""
+
+#: gui/gui.cpp:199 gui/gui.cpp:211
+msgid "Fullscreen not yet supported in this GUI"
+msgstr ""
+
+#: gui/gui.cpp:205
+msgid "Window resize not yet supported in this GUI"
+msgstr ""
+
+#: gui/gui.cpp:229 gui/gui.cpp:242
+msgid "Menu show/hide not yet supported in this GUI"
+msgstr ""
+
+#: gui/gui.cpp:235
+msgid "Mouse show/hide not yet supported in this GUI"
+msgstr ""
+
+#: gui/gui.cpp:282
+msgid "Can't update stage matrix till VM is initialized"
+msgstr ""
+
+#: gui/gui.cpp:334
+#, c-format
+msgid "Invalid scaleMode %d"
+msgstr ""
+
+#: gui/gui.cpp:374
+#, c-format
+msgid "Invalid horizontal align %d"
+msgstr ""
+
+#: gui/gui.cpp:405
+#, c-format
+msgid "Invalid vertical align %d"
+msgstr ""
+
+#: gui/gui.cpp:900
+msgid "Gui is in stop mode, won't start application"
+msgstr ""
+
+#: gui/gui.cpp:1261
+#, c-format
+msgid "This gui didn't override 'yesno', assuming 'yes' answer to question: %s"
+msgstr ""
+
+#: gui/gui.cpp:1270
+msgid "Gui::setQuality called before a movie_root was available"
+msgstr ""
+
+#: gui/gui.cpp:1280
+msgid "Gui::getQuality called before a movie_root was available"
+msgstr ""
+
+#: gui/Player.cpp:131
+msgid "GUI ExternalInterface.Pan event"
+msgstr ""
+
+#: gui/Player.cpp:143
+msgid "GUI ExternalInterface.SetZoomRect event"
+msgstr ""
+
+#: gui/Player.cpp:151
+msgid "GUI ExternalInterface.Zoom event"
+msgstr ""
+
+#: gui/Player.cpp:169
+#, c-format
+msgid "Unhandled callback %s with arguments %s"
+msgstr ""
+
+#: gui/Player.cpp:434
+msgid "Non-existent media handler %1% specified"
+msgstr ""
+
+#: gui/Player.cpp:545
+#, c-format
+msgid "Movie Frame Rate is %d, adjusting delay"
+msgstr ""
+
+#: gui/Player.cpp:682
+msgid "Got unexpected argument type for message %1%"
+msgstr ""
+
+#: gui/Player.cpp:717
+#, c-format
+msgid ""
+"Could only write %d bytes over %d required to user-provided host requests fd "
+"%d"
+msgstr ""
+
+#: gui/Player.cpp:773
+#, c-format
+msgid "FsCommand exec called with argument %s"
+msgstr ""
+
+#: gui/Player.cpp:790
+#, c-format
+msgid "FsCommand trapallkeys called with argument %s"
+msgstr ""
+
+#: gui/Player.cpp:796
+#, c-format
+msgid "FsCommand '%s(%s)' not handled internally"
+msgstr ""
+
+#: gui/gtk/gtk_glue_cairo.cpp:223
+msgid "Cairo: failed to create a rendering buffer!"
+msgstr ""
+
+#: gui/gtk/gtk_glue_ovg.cpp:182
+msgid "Could not create OPENVG renderer"
+msgstr ""
+
+#: gui/gtk/gtk_glue_ovg.cpp:265 gui/gtk/gtk_glue_ovg.cpp:282
+msgid "No off screen buffer!"
+msgstr ""
+
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:163
+msgid "WARNING: failed to create VA-API display."
+msgstr ""
+
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:204
+#, c-format
+msgid ""
+"GTK-AGG: Unknown RGB format %s reported by VA-API.Please report this to the "
+"gnash-dev mailing list."
+msgstr ""
+
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:231 gui/gtk/gtk_glue_agg_vaapi.cpp:289
+msgid "failed to map VA-API image."
+msgstr ""
+
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:237
+msgid "failed to associate VA-API subpicture."
+msgstr ""
+
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:371
+#, c-format
+msgid "failed to setup video window for surface 0x%08x."
+msgstr ""
+
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:378
+#, c-format
+msgid "failed to associate subpicture to surface 0x%08x."
+msgstr ""
+
+#: gui/gtk/gtk.cpp:159
+msgid "Failed to initialize X threading support\n"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:202
+msgid "This system lacks a hardware OpenGL driver!"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:223
+msgid "Click to play"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:612
+#, c-format
+msgid "Advance interval timer set to %d ms (~ %d FPS)"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:686
+msgid "Sound"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1274
+msgid "_Network"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1286
+msgid "Network timeout in seconds (0 for no timeout):"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1305
+msgid "_Logging"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1314
+msgid "Verbosity level:"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1327
+msgid "Log to _file"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1333
+msgid "Logfile name:"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1346
+msgid "Log _parser output"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1354
+msgid "Log SWF _actions"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1362
+msgid "Log malformed SWF _errors"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1370
+msgid "Log ActionScript _coding errors"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1386
+msgid "_Security"
+msgstr "_Sikkerhet"
+
+#: gui/gtk/gtk.cpp:1399
+msgid "Connect only to local _host"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1406
+msgid "Connect only to local _domain"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1413
+msgid "Disable SSL _verification"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1420
+msgid "_Whitelist"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1429
+msgid "_Blacklist"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1454
+msgid "Do _not write Shared Object files"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1461
+msgid "Only _access local Shared Object files"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1468
+msgid "Disable Local _Connection object"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1482
+msgid "_Media"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1493
+msgid "Use sound _handler"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1501
+msgid "<b>Media Streams</b>"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1544
+msgid "_Player"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1584
+msgid "<i>If blank, Gnash will detect your OS</i>"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1637
+msgid "Max scripts execution time (in seconds):"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1656
+msgid "Max scripts recursion limit (stack depth):"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1672
+msgid "Lock script limits so that SWF tags can't override"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1684
+msgid "Start _Gnash in pause mode"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1843
+msgid ""
+"This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 3 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+"GNU General Public License for more details.\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301\n"
+"USA or visit http://www.gnu.org/licenses/."
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1859
+msgid "Gnash is the GNU SWF Player based on GameSWF."
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1860
+msgid ""
+"\n"
+"Renderer: "
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1862
+msgid ""
+"\n"
+"Hardware Acceleration: "
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1864
+msgid ""
+"\n"
+"GUI: "
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1866
+msgid ""
+"\n"
+"Media: "
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1896
+msgid "translator-credits"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:1923
+msgid "_File"
+msgstr "_Fil"
+
+#: gui/gtk/gtk.cpp:1976
+msgid "_Edit"
+msgstr "_Rediger"
+
+#: gui/gtk/gtk.cpp:1996
+msgid "_Help"
+msgstr "_Hjelp"
+
+#: gui/gtk/gtk.cpp:2016
+msgid "_View"
+msgstr "_Vis"
+
+#: gui/gtk/gtk.cpp:2024
+msgid "Redraw"
+msgstr "Tegn på nytt"
+
+#: gui/gtk/gtk.cpp:2034 gui/gtk/gtk.cpp:2039
+msgid "Toggle fullscreen"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:2048
+msgid "Show updated ranges"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:2067
+msgid "_Quality"
+msgstr "_Kvalitet"
+
+#: gui/gtk/gtk.cpp:2077
+msgid "Low"
+msgstr "Lav"
+
+#: gui/gtk/gtk.cpp:2083
+msgid "Medium"
+msgstr "Medium"
+
+#: gui/gtk/gtk.cpp:2089
+msgid "High"
+msgstr "Høy"
+
+#: gui/gtk/gtk.cpp:2095
+msgid "Best"
+msgstr "Best"
+
+#: gui/gtk/gtk.cpp:2108
+msgid "Movie _Control"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:2275 gui/gtk/gtk.cpp:2276
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:2282
+#, c-format
+msgid "Failed to load pixbuf file: %s: %s"
+msgstr ""
+
+#: gui/gtk/gtk.cpp:2608 gui/gtk/gtk.cpp:2621
+msgid "Open file"
+msgstr "Ã…pne fil"
+
+#: gui/gtk/gtk_glue_gtkglext.cpp:72
+msgid ""
+"Cannot find the double-buffered visual.\n"
+"Trying single-buffered visual."
+msgstr ""
+
+#: gui/gtk/gtk_glue_gtkglext.cpp:78
+msgid "No appropriate OpenGL-capable visual found."
+msgstr ""
diff --git a/po/zh_TW.po b/po/zh_CN.po
similarity index 58%
copy from po/zh_TW.po
copy to po/zh_CN.po
index 4b11f0a..e446b7a 100644
--- a/po/zh_TW.po
+++ b/po/zh_CN.po
@@ -6,9 +6,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-20 17:11-0700\n"
-"PO-Revision-Date: 2012-01-05 04:24+0200\n"
-"Last-Translator: Chris <cjl at laptop.org>\n"
+"POT-Creation-Date: 2014-04-20 00:37+0200\n"
+"PO-Revision-Date: 2013-05-18 17:39+0200\n"
+"Last-Translator: lite <litekok at gmail.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
@@ -17,1241 +17,1359 @@ msgstr ""
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: Pootle 2.0.5\n"
 
+#: libbase/extension.cpp:115
+#, c-format
+msgid "Loading module: %s from %s"
+msgstr "装载模块: %s 来自 %s"
+
+#: libbase/extension.cpp:125 cygnal/handler.cpp:300
+#, c-format
+msgid "Initializing module: \"%s\" from %s"
+msgstr "初始化模块:\"%s\" 来自 %s"
+
+#: libbase/extension.cpp:142
+msgid "Couldn't get class_init symbol"
+msgstr "无法获取class_init符号"
+
+#: libbase/extension.cpp:154
+#, c-format
+msgid "Initializing module: \"%s\""
+msgstr "正在初始化模块: \"%s\""
+
+#: libbase/extension.cpp:168
+#, c-format
+msgid "Couldn't get class_init symbol: \"%s\""
+msgstr "无法获取class_init符号:\"%s\""
+
+#: libbase/extension.cpp:196 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:313
+#, c-format
+msgid "Can't open directory %s"
+msgstr "无法打开目录%s"
+
 #: libbase/RTMP.cpp:222
 msgid "Initial connection failed"
-msgstr ""
+msgstr "初始连接失败"
 
 #: libbase/RTMP.cpp:325 libbase/RTMP.cpp:329
 msgid "unsupported packet received"
-msgstr ""
+msgstr "收到了不支持的包"
 
 #: libbase/RTMP.cpp:334
 #, c-format
 msgid "partially supported packet %s received"
-msgstr ""
+msgstr "收到了部分支持包,名为%s"
 
 #: libbase/RTMP.cpp:344
 #, c-format
 msgid "packet %s received"
-msgstr ""
+msgstr "收到了名为%s的包"
 
 #: libbase/RTMP.cpp:356
 #, c-format
 msgid "Unknown packet %s received"
-msgstr ""
+msgstr "收到了不明的包%s"
 
-#: libbase/RTMP.cpp:458
+#: libbase/RTMP.cpp:456
 msgid "failed to read RTMP packet header 2nd byte"
-msgstr ""
+msgstr "读取RTMP包的第2个字节失败"
 
-#: libbase/RTMP.cpp:466
+#: libbase/RTMP.cpp:464
 msgid "Failed to read RTMP packet header 3nd byte"
-msgstr ""
+msgstr "读取RTMP包的第3个字节失败"
 
-#: libbase/RTMP.cpp:484
+#: libbase/RTMP.cpp:482
 #, c-format
 msgid "Incomplete packet received on channel %s"
-msgstr ""
+msgstr "在通道%s中收到了不完整的包"
 
-#: libbase/RTMP.cpp:497
+#: libbase/RTMP.cpp:495
 #, c-format
 msgid "Failed to read RTMP packet header. type: %s"
-msgstr ""
+msgstr "读取类别为%s的RTMP包失败"
 
-#: libbase/RTMP.cpp:542
+#: libbase/RTMP.cpp:540
 #, c-format
 msgid "%s, failed to read extended timestamp"
-msgstr ""
+msgstr "%s,读取扩展的时间戳失败"
 
-#: libbase/RTMP.cpp:871
+#: libbase/RTMP.cpp:873
 msgid "Stage 1 socket not ready. This should not happen."
-msgstr ""
+msgstr "第一阶段套接字未准备好。这是不应该发生的。"
 
-#: libbase/RTMP.cpp:877
+#: libbase/RTMP.cpp:879
 msgid "Could not send stage 1 data"
-msgstr ""
+msgstr "无法发送第一阶段数据"
 
-#: libbase/RTMP.cpp:899
+#: libbase/RTMP.cpp:901
 #, c-format
 msgid "Type mismatch: client sent %d, server answered %d"
-msgstr ""
+msgstr "类型不匹配:客户端发送的是%d, 而服务器端响应的是 %d."
 
-#: libbase/RTMP.cpp:927
+#: libbase/RTMP.cpp:929
 msgid "Could not send complete signature."
-msgstr ""
+msgstr "无法发送完整的签名"
 
-#: libbase/RTMP.cpp:953
+#: libbase/RTMP.cpp:955
 msgid "Signatures do not match during handshake!"
-msgstr ""
+msgstr "在握手过程中签名不匹配!"
 
-#: libbase/RTMP.cpp:1041
+#: libbase/RTMP.cpp:1043
 msgid "Control packet too short"
-msgstr ""
+msgstr "控制包太短"
 
-#: libbase/RTMP.cpp:1049
+#: libbase/RTMP.cpp:1051
 #, c-format
 msgid "Control packet (%s) data too short"
-msgstr ""
+msgstr "控制包(%s)的数据太短"
 
-#: libbase/RTMP.cpp:1087
+#: libbase/RTMP.cpp:1089
 #, c-format
 msgid "Received unknown or unhandled control %s"
-msgstr ""
+msgstr "收到了未知或未处理的控制%s"
 
-#: libbase/GnashImagePng.cpp:51
-msgid "PNG error: "
-msgstr ""
+#: libbase/SharedMem.cpp:69
+#, c-format
+msgid "Error detaching shared memory: %s"
+msgstr "脱离共享内存出错: %s"
 
-#: libbase/StreamProvider.cpp:84 libbase/StreamProvider.cpp:149
-msgid "Could not open file %1%: %2%"
-msgstr ""
+#: libbase/SharedMem.cpp:76
+#, c-format
+msgid "Error during stat of shared memory segment: %s"
+msgstr "共享内存段状态出错:%s"
 
-#: libbase/StreamProvider.cpp:112
-msgid "Request Headers discarded while getting stream from file: uri"
-msgstr ""
+#: libbase/SharedMem.cpp:84
+msgid "No shared memory users left. Removing segment and semaphore."
+msgstr "没有用户剩下的共享内存。删除段和信号量。"
 
-#: libbase/StreamProvider.cpp:135
-msgid "POST data discarded while getting a stream from file: uri"
-msgstr ""
+#: libbase/SharedMem.cpp:137
+#, fuzzy
+msgid "Failed to set semaphore value: %1%"
+msgstr "无法设置信号量的值"
 
-#: libbase/noseek_fd_adapter.cpp:223
-#, c-format
-msgid "Error reading %d bytes from input stream"
-msgstr ""
+#: libbase/SharedMem.cpp:144
+#, fuzzy
+msgid "Failed to obtain nonexclusive semaphore for shared memory: %1%"
+msgstr "无法获取共享内存的信号量!"
 
-#: libbase/Socket.cpp:98
-msgid "XMLSocket: The socket was never available"
+#: libbase/SharedMem.cpp:167
+msgid "Timed out waiting for semaphore initialization."
 msgstr ""
 
-#: libbase/Socket.cpp:125
-msgid "Connection attempt while already connected"
-msgstr ""
+#: libbase/SharedMem.cpp:171
+#, fuzzy
+msgid "Failed creating semaphore: %1%"
+msgstr "无法设置信号量的值"
 
-#: libbase/Socket.cpp:154
-#, c-format
-msgid "Socket creation failed: %s"
-msgstr ""
+#: libbase/SharedMem.cpp:218
+msgid "Unable to get shared memory segment!"
+msgstr "无法获取共享内存段!"
 
-#: libbase/Socket.cpp:171
+#: libbase/SharedMem.cpp:225
 #, c-format
-msgid "Failed to connect socket: %s"
-msgstr ""
+msgid "Unable to attach shared memory: %s"
+msgstr "无法连接共享内存:%s"
 
-#: libbase/Socket.cpp:187
-msgid "Setting socket timeout failed"
-msgstr ""
+#: libbase/GnashImageJpeg.cpp:115
+msgid "JPEG: Empty jpeg source stream."
+msgstr "JPEG:JPEG源流为空。"
+
+#: libbase/GnashImageJpeg.cpp:260 libbase/GnashImageJpeg.cpp:287
+#: libbase/GnashImageJpeg.cpp:305 libbase/GnashImageJpeg.cpp:361
+msgid "Internal jpeg error: "
+msgstr "内部的JPEG错误:"
 
-#: libbase/Socket.cpp:237
+#: libbase/GnashImageJpeg.cpp:271
+msgid "Lack of data during JPEG header parsing"
+msgstr "JPEG头部解析时缺少数据"
+
+#: libbase/GnashImageJpeg.cpp:281
 #, c-format
-msgid "Socket receive error %s"
-msgstr ""
+msgid "unexpected: jpeg_read_header returned %d"
+msgstr "意外:jpeg_read_header返回 %d"
+
+#: libbase/GnashImageJpeg.cpp:317
+msgid "lack of data during JPEG header parsing"
+msgstr "JPEG头部解析时缺少数据"
 
-#: libbase/Socket.cpp:340
+#: libbase/GnashImageJpeg.cpp:327
 #, c-format
-msgid "Socket send error %s"
-msgstr ""
+msgid "unexpected: jpeg_read_header returned %d [%s:%d]"
+msgstr "意外:jpeg_read_header返回 %d [%s:%d]"
 
-#: libbase/Socket.cpp:355
-msgid "tell() called for Socket"
-msgstr ""
+#: libbase/GnashImageJpeg.cpp:335
+msgid "Internal jpeg error during header parsing: "
+msgstr "头部解析时内部JPEG错误:"
 
-#: libbase/Socket.cpp:362
-msgid "seek() called for Socket"
-msgstr ""
+#: libbase/GnashImageJpeg.cpp:343
+msgid "Internal jpeg error during decompression: "
+msgstr "解压时内部JPEG错误:"
 
-#: libbase/Socket.cpp:369
-msgid "go_to_end() called for Socket"
-msgstr ""
+#: libbase/GnashImageJpeg.cpp:518
+msgid "rw_dest_IOChannel couldn't write data."
+msgstr "rw_dest_IOChannel不能写入数据。"
 
-#: libbase/tu_file.cpp:193
-msgid "Error while seeking to end: %1%"
-msgstr ""
+#: libbase/GnashImageJpeg.cpp:543
+msgid "rw_dest_IOChannel::term_destination couldn't write data."
+msgstr "rw_dest_IOChannel::term_destination不能写入数据。"
 
-#: libbase/tu_file.cpp:229
-msgid "Could not fstat file"
-msgstr ""
+#: libbase/URLAccessManager.cpp:95
+#, c-format
+msgid "Load from host %s granted (whitelisted)"
+msgstr "从授权主机%s (白名单)载入"
 
-#: libbase/rc.cpp:171 libbase/rc.cpp:702
-msgid "Failed to find user settings directory"
-msgstr ""
+#: libbase/URLAccessManager.cpp:101
+#, c-format
+msgid "Load from host %s forbidden (not in non-empty whitelist)"
+msgstr "从禁止主机%s (不在非空白名单)载入"
 
-#: libbase/rc.cpp:382
-msgid "RcInitFile: couldn't open file: "
-msgstr ""
+#: libbase/URLAccessManager.cpp:115
+#, c-format
+msgid "Load from host %s forbidden (blacklisted)"
+msgstr "从禁止主机%s (黑名单)载入"
 
-#: libbase/rc.cpp:422
+#: libbase/URLAccessManager.cpp:120
 #, c-format
-msgid "Warning: missing value for variable \"%s\" in rcfile %s, line %d"
-msgstr ""
+msgid "Load from host %s granted (default)"
+msgstr "从授权主机%s (缺省)载入"
 
-#: libbase/rc.cpp:625
+#: libbase/URLAccessManager.cpp:152
 #, c-format
-msgid "Warning: unrecognized directive \"%s\" in rcfile %s line %d"
-msgstr ""
+msgid "Load of file %s forbidden (starting URL %s is not a local resource)"
+msgstr "载入文件%s被禁止(起始网址%s不是一个本地资源)"
 
-#: libbase/rc.cpp:637
+#: libbase/URLAccessManager.cpp:169
 #, c-format
-msgid "Warning: empty include specification in rcfile %s, line %d"
-msgstr ""
+msgid "Load of file %s granted (under local sandbox %s)"
+msgstr "载入文件%s被授权(在本地沙盒%s)"
 
-#: libbase/rc.cpp:642
+#: libbase/URLAccessManager.cpp:177
 #, c-format
-msgid ""
-"Warning: include specification must be an absolute path in rcfile %s, line %d"
-msgstr ""
+msgid "Load of file %s forbidden (not under local sandboxes)"
+msgstr "载入文件%s被禁止(不在本地沙盒)"
 
-#: libbase/rc.cpp:651
+#: libbase/URLAccessManager.cpp:217
 #, c-format
-msgid "Warning: unrecognized action \"%s\" in rcfile %s, line %d"
-msgstr ""
+msgid "gethostname failed: %s"
+msgstr "gethostname 失败:%s"
 
-#: libbase/rc.cpp:743
+#: libbase/URLAccessManager.cpp:239
 #, c-format
-msgid "Couldn't open file %s for writing"
-msgstr ""
+msgid "Load from host %s forbidden (not in the local domain)"
+msgstr "禁止从主机%s载入(不在本地域)"
 
-#: libbase/rc.cpp:752
-msgid "# Generated by Gnash. Manual changes to this file may be overridden."
-msgstr ""
+#: libbase/URLAccessManager.cpp:245
+#, c-format
+msgid "Load from host %s forbidden (not on the local host)"
+msgstr "禁止从主机%s载入(不在本主机)"
 
-#: libbase/extension.cpp:115
+#: libbase/URLAccessManager.cpp:267
 #, c-format
-msgid "Loading module: %s from %s"
-msgstr ""
+msgid "Attempt to connect to disallowed port %s"
+msgstr "试图连接到禁止端口 %s"
 
-#: libbase/extension.cpp:128 cygnal/handler.cpp:300
+#: libbase/URLAccessManager.cpp:277
 #, c-format
-msgid "Initializing module: \"%s\" from %s"
-msgstr ""
+msgid "Checking security of URL '%s'"
+msgstr "检查链接 '%s' 的安全"
 
-#: libbase/extension.cpp:145
-msgid "Couldn't get class_init symbol"
-msgstr ""
+#: libbase/URLAccessManager.cpp:289
+msgid "Network connection without hostname requested"
+msgstr "无主机名请求的网络连接"
+
+#: libbase/AMF.cpp:90
+msgid "Read past _end of buffer for string length"
+msgstr "阅读过去 _缓冲区结束的字符串长度"
+
+#: libbase/AMF.cpp:97
+msgid "Read past _end of buffer for string type"
+msgstr "阅读过去 _缓冲区结束的字符串类型"
+
+#: libbase/AMF.cpp:138
+msgid "writePlainString called with invalid type!"
+msgstr "writePlainString调用时无效的类型!"
+
+#: libbase/StreamProvider.cpp:84 libbase/StreamProvider.cpp:149
+msgid "Could not open file %1%: %2%"
+msgstr "不能打开文件 %1%: %2%"
+
+#: libbase/StreamProvider.cpp:112
+msgid "Request Headers discarded while getting stream from file: uri"
+msgstr "从文件: uri读取流的时候丢弃了请求的头部。"
+
+#: libbase/StreamProvider.cpp:135
+msgid "POST data discarded while getting a stream from file: uri"
+msgstr "从文件: uri读取流时丢弃了POST请求的数据"
 
-#: libbase/extension.cpp:159
+#: libbase/GnashVaapiImage.cpp:51
 #, c-format
-msgid "Initializing module: \"%s\""
-msgstr ""
+msgid "GnashVaapiImage::GnashVaapiImage(): surface 0x%08x, size %dx%d\n"
+msgstr "GnashVaapiImage::GnashVaapiImage(): 表面 0x%08x, 大小 %dx%d\n"
 
-#: libbase/extension.cpp:174
+#: libbase/GnashVaapiImage.cpp:57
 #, c-format
-msgid "Couldn't get class_init symbol: \"%s\""
-msgstr ""
+msgid "GnashVaapiImage::~GnashVaapiImage(): surface 0x%08x\n"
+msgstr "GnashVaapiImage::GnashVaapiImage(): 表面 0x%08x\n"
 
-#: libbase/extension.cpp:202 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:313
+#: libbase/GnashVaapiImage.cpp:69
 #, c-format
-msgid "Can't open directory %s"
-msgstr ""
+msgid "GnashVaapi::update(): data %p\n"
+msgstr "GnashVaapi::update(): 数据 %p\n"
+
+#: libbase/GnashVaapiImage.cpp:101
+msgid "GnashVaapiImage: VA surface to SW pixels are not supported\n"
+msgstr "GnashVaapiImage: 不支持VA表面到SW像素\n"
+
+#: libbase/GnashVaapiImage.cpp:112
+#, c-format
+msgid "GnashVaapiImage::data(): surface 0x%08x\n"
+msgstr "GnashVaapiImage::data(): 表面 0x%08x\n"
+
+#: libbase/GnashVaapiImage.cpp:113 libbase/GnashVaapiImage.cpp:129
+#, c-format
+msgid "  -> %u usec from creation\n"
+msgstr "  -> %u 创建后的微秒数\n"
+
+#: libbase/GnashVaapiImage.cpp:127
+#, c-format
+msgid "GnashVaapiImage::data() const: surface 0x%08x\n"
+msgstr "GnashVaapiImage::data() const: 表面 0x%08x\n"
+
+#: libbase/ClockTime.cpp:223
+msgid "Cannot get requested timezone information"
+msgstr "无法获取要求的时区信息"
+
+#: libbase/GnashImagePng.cpp:51
+msgid "PNG error: "
+msgstr "PNG错误:"
 
-#: libbase/curl_adapter.cpp:48
+#: libbase/NetworkAdapter.cpp:50
 msgid ""
 "libcurl is not available, but Gnash has attempted to use the curl adapter"
-msgstr ""
+msgstr "libcurl不可用,但Gnash已经尝试使用curl适配器"
 
-#: libbase/curl_adapter.cpp:245
+#: libbase/NetworkAdapter.cpp:247
 #, c-format
 msgid "Failed cleaning up share handle: %s. Giving up after %d retries."
-msgstr ""
+msgstr "清理共享句柄%s失败,重新尝试%d次后放弃。"
 
-#: libbase/curl_adapter.cpp:249
+#: libbase/NetworkAdapter.cpp:251
 #, c-format
 msgid "Failed cleaning up share handle: %s. Will try again in a second."
-msgstr ""
+msgstr "清理共享句柄%s失败,将很快进行重试。"
 
-#: libbase/curl_adapter.cpp:339
+#: libbase/NetworkAdapter.cpp:341
 msgid "lockSharedHandle: SSL session locking unsupported"
-msgstr ""
+msgstr "lockSharedHandle: 不支持SSL会话锁"
 
-#: libbase/curl_adapter.cpp:342
+#: libbase/NetworkAdapter.cpp:344
 msgid "lockSharedHandle: connect locking unsupported"
-msgstr ""
+msgstr "lockSharedHandle: 不支持连接锁"
 
-#: libbase/curl_adapter.cpp:345
+#: libbase/NetworkAdapter.cpp:347
 msgid "lockSharedHandle: last locking unsupported ?!"
-msgstr ""
+msgstr "lockSharedHandle: 不支持上次锁 ?!"
 
-#: libbase/curl_adapter.cpp:348
+#: libbase/NetworkAdapter.cpp:350
 #, c-format
 msgid "lockSharedHandle: unknown shared data %d"
-msgstr ""
+msgstr "lockSharedHandle: 未知的共享数据 %d"
 
-#: libbase/curl_adapter.cpp:374
+#: libbase/NetworkAdapter.cpp:376
 msgid "unlockSharedHandle: SSL session locking unsupported"
-msgstr ""
+msgstr "unlockSharedHandle: 不支持SSL会话锁"
 
-#: libbase/curl_adapter.cpp:377
+#: libbase/NetworkAdapter.cpp:379
 msgid "unlockSharedHandle: connect locking unsupported"
-msgstr ""
+msgstr "unlockSharedHandle: 不支持连接锁"
 
-#: libbase/curl_adapter.cpp:380
+#: libbase/NetworkAdapter.cpp:382
 msgid "unlockSharedHandle: last locking unsupported ?!"
-msgstr ""
+msgstr "unlockSharedHandle: 不支持上次锁 ?!"
 
-#: libbase/curl_adapter.cpp:383
+#: libbase/NetworkAdapter.cpp:385
 #, c-format
 msgid "unlockSharedHandle: unknown shared data %d"
-msgstr ""
+msgstr "unlockSharedHandle: 未知的共享数据 %d"
 
-#: libbase/curl_adapter.cpp:672
+#: libbase/NetworkAdapter.cpp:674
 #, c-format
 msgid "FIXME: Timeout (%u milliseconds) while loading from URL %s"
-msgstr ""
+msgstr "修改这里:载入超时(%u milliseconds),链接地址 %s"
 
-#: libbase/curl_adapter.cpp:720
+#: libbase/NetworkAdapter.cpp:722
 #, c-format
 msgid "Timeout (%u milliseconds) while loading from URL %s"
-msgstr ""
+msgstr "载入超时(%u milliseconds),链接地址 %s"
 
-#: libbase/curl_adapter.cpp:763
+#: libbase/NetworkAdapter.cpp:765
 #, c-format
 msgid "HTTP response %ld from URL %s"
-msgstr ""
+msgstr "HTTP响应 %ld, 链接地址 URL %s"
 
-#: libbase/curl_adapter.cpp:774
+#: libbase/NetworkAdapter.cpp:776
 #, c-format
 msgid "CURL: %s"
-msgstr ""
+msgstr "CURL: %s"
 
-#: libbase/curl_adapter.cpp:807
+#: libbase/NetworkAdapter.cpp:809
 msgid ""
 "Could not open specified path as cache file. Using a temporary file instead"
-msgstr ""
+msgstr "无法打开指定的缓存文件路径。使用临时文件代替"
 
-#: libbase/curl_adapter.cpp:815
+#: libbase/NetworkAdapter.cpp:817
 msgid "Could not create temporary cache file"
-msgstr ""
+msgstr "无法创建临时缓存文件"
 
-#: libbase/curl_adapter.cpp:825
+#: libbase/NetworkAdapter.cpp:827
 msgid "Allowing connections to SSL sites with invalid certificates"
-msgstr ""
+msgstr "允许连接到无效的SSL证书的网站"
 
-#: libbase/curl_adapter.cpp:1091
+#: libbase/NetworkAdapter.cpp:1093
+#, fuzzy
 msgid ""
-"curl adaptor's fillCacheNonBlocking set _error rather then throwing an "
-"exception"
-msgstr ""
+"curl adaptor's fillCacheNonBlocking method sets an error condition rather "
+"than throwing an exception"
+msgstr "curl adaptor's fillCacheNonBlocking 设置 _error,而不是抛出一个异常"
 
-#: libbase/curl_adapter.cpp:1156
+#: libbase/NetworkAdapter.cpp:1158
 #, c-format
 msgid "Warning: could not cache enough bytes on seek: %d requested, %d cached"
-msgstr ""
+msgstr "警告:不能缓存定位足够的字节:请求%d,缓存%d"
 
-#: libbase/curl_adapter.cpp:1162
+#: libbase/NetworkAdapter.cpp:1164
 msgid "Warning: fseek failed"
-msgstr ""
+msgstr "警告: fseek 失败"
 
-#: libbase/curl_adapter.cpp:1342 libbase/curl_adapter.cpp:1361
-#: libbase/curl_adapter.cpp:1377
+#: libbase/NetworkAdapter.cpp:1353 libbase/NetworkAdapter.cpp:1372
+#: libbase/NetworkAdapter.cpp:1388
 #, c-format
 msgid "curl stream: %s"
-msgstr ""
-
-#: libbase/ClockTime.cpp:223
-msgid "Cannot get requested timezone information"
-msgstr ""
+msgstr "curl 流: %s"
 
-#: libbase/SharedMem.cpp:68
-#, c-format
-msgid "Error detaching shared memory: %s"
-msgstr ""
-
-#: libbase/SharedMem.cpp:75
+#: libbase/noseek_fd_adapter.cpp:223
 #, c-format
-msgid "Error during stat of shared memory segment: %s"
-msgstr ""
-
-#: libbase/SharedMem.cpp:83
-msgid "No shared memory users left. Removing segment and semaphore."
-msgstr ""
-
-#: libbase/SharedMem.cpp:150
-msgid "Failed to get semaphore for shared memory!"
-msgstr ""
+msgid "Error reading %d bytes from input stream"
+msgstr "从输入流中读入%d个字节时出错"
 
-#: libbase/SharedMem.cpp:157
-msgid "Failed to set semaphore value"
-msgstr ""
+#: libbase/GnashImageGif.cpp:175
+msgid "GIF: Error retrieving image description"
+msgstr "GIF:获取图像描述出错"
 
-#: libbase/SharedMem.cpp:167
-msgid "Need semaphore value of 1 for locking. Cannot attach shared memory!"
-msgstr ""
+#: libbase/GnashImageGif.cpp:204
+msgid "GIF: invalid image data (bounds outside GIF screen)"
+msgstr "GIF:无效的图像数据(超出GIF屏幕边界)"
 
-#: libbase/SharedMem.cpp:182
-msgid "Unable to get shared memory segment!"
-msgstr ""
+#: libbase/GnashImageGif.cpp:226 libbase/GnashImageGif.cpp:244
+msgid "GIF: failed reading pixel data"
+msgstr "GIF:无法读取像素数据"
 
-#: libbase/SharedMem.cpp:189
-#, c-format
-msgid "Unable to attach shared memory: %s"
-msgstr ""
+#: libbase/GnashImageGif.cpp:293
+msgid "GIF: Error retrieving record type"
+msgstr "GIF:获取记录类型出错"
 
-#: libbase/GnashImage.cpp:179
+#: libbase/GnashImage.cpp:198
 msgid "Requested to write image as unsupported filetype"
-msgstr ""
+msgstr "请求写入的图像是不支持的格式"
 
-#: libbase/GnashImage.cpp:235
+#: libbase/GnashImage.cpp:254
 msgid "Invalid image returned"
-msgstr ""
+msgstr "返回无效的图片"
 
-#: libbase/GnashImage.cpp:243
+#: libbase/GnashImage.cpp:262
 #, c-format
 msgid "Out of memory while trying to create %dx%d image"
-msgstr ""
+msgstr "试图创建 %dx%d 图像时内存不足"
 
-#: libbase/GnashImageGif.cpp:175
-msgid "GIF: Error retrieving image description"
-msgstr ""
-
-#: libbase/GnashImageGif.cpp:204
-msgid "GIF: invalid image data (bounds outside GIF screen)"
-msgstr ""
-
-#: libbase/GnashImageGif.cpp:226 libbase/GnashImageGif.cpp:244
-msgid "GIF: failed reading pixel data"
-msgstr ""
-
-#: libbase/GnashImageGif.cpp:283
-msgid "GIF: Error retrieving record type"
-msgstr ""
-
-#: libbase/memory.cpp:94
-#, c-format
-msgid "Allocating buffer for %d data samples"
-msgstr ""
-
-#: libbase/memory.cpp:301
-msgid "Calculations don't equal"
-msgstr ""
-
-#: libbase/memory.cpp:303
-msgid "Zero memory leaks for this program"
-msgstr ""
-
-#: libbase/GnashVaapiImage.cpp:51
-#, c-format
-msgid "GnashVaapiImage::GnashVaapiImage(): surface 0x%08x, size %dx%d\n"
-msgstr ""
-
-#: libbase/GnashVaapiImage.cpp:57
-#, c-format
-msgid "GnashVaapiImage::~GnashVaapiImage(): surface 0x%08x\n"
-msgstr ""
+#: libbase/Socket.cpp:106
+msgid "XMLSocket: The socket was never available"
+msgstr "XMLSocket: 套接字一直不可用"
 
-#: libbase/GnashVaapiImage.cpp:69
+#: libbase/Socket.cpp:138
 #, c-format
-msgid "GnashVaapi::update(): data %p\n"
-msgstr ""
-
-#: libbase/GnashVaapiImage.cpp:101
-msgid "GnashVaapiImage: VA surface to SW pixels are not supported\n"
+msgid "getaddrinfo() failed with code: #%d - %s"
 msgstr ""
 
-#: libbase/GnashVaapiImage.cpp:112
-#, c-format
-msgid "GnashVaapiImage::data(): surface 0x%08x\n"
-msgstr ""
+#: libbase/Socket.cpp:154
+msgid "Connection attempt while already connected"
+msgstr "已经连接好之后还在做连接尝试"
 
-#: libbase/GnashVaapiImage.cpp:113 libbase/GnashVaapiImage.cpp:129
-#, c-format
-msgid "  -> %u usec from creation\n"
-msgstr ""
+#: libbase/Socket.cpp:182
+#, fuzzy
+msgid "getnameinfo() failed: %1%"
+msgstr "gethostname 失败:%s"
 
-#: libbase/GnashVaapiImage.cpp:127
+#: libbase/Socket.cpp:196 cygnal/libnet/network.cpp:623
 #, c-format
-msgid "GnashVaapiImage::data() const: surface 0x%08x\n"
-msgstr ""
+msgid "Socket creation failed: %s"
+msgstr "创建套接字出错: %s"
 
-#: libbase/sharedlib.cpp:69
-#, c-format
-msgid "Couldn't initialize ltdl: %s"
-msgstr ""
+#: libbase/Socket.cpp:206
+#, fuzzy
+msgid "Socket creation attempt(s) failed: giving up."
+msgstr "创建套接字出错: %s"
 
-#: libbase/sharedlib.cpp:98
-#, c-format
-msgid "Trying to open shared library \"%s\""
-msgstr ""
+#: libbase/Socket.cpp:222
+#, fuzzy, c-format
+msgid "Failed to connect to socket: %s"
+msgstr "连接套接字失败: %s"
 
-#: libbase/sharedlib.cpp:112
-#, c-format
-msgid "Opened dynamic library \"%s\""
-msgstr ""
+#: libbase/Socket.cpp:238
+msgid "Setting socket timeout failed"
+msgstr "设置套接字超时失败"
 
-#: libbase/sharedlib.cpp:131
+#: libbase/Socket.cpp:281
 #, c-format
-msgid "Couldn't find symbol: %s"
-msgstr ""
+msgid "Socket receive error %s"
+msgstr "套接字接收错误 %s"
 
-#: libbase/sharedlib.cpp:134
+#: libbase/Socket.cpp:382
 #, c-format
-msgid "Found symbol %s @ %p"
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:116
-msgid "JPEG: Empty jpeg source stream."
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:263 libbase/GnashImageJpeg.cpp:290
-#: libbase/GnashImageJpeg.cpp:308 libbase/GnashImageJpeg.cpp:364
-msgid "Internal jpeg error: "
-msgstr ""
+msgid "Socket send error %s"
+msgstr "套接字发送错误 %s"
 
-#: libbase/GnashImageJpeg.cpp:274
-msgid "Lack of data during JPEG header parsing"
-msgstr ""
+#: libbase/Socket.cpp:397
+msgid "tell() called for Socket"
+msgstr "tell()函数要求套接字"
 
-#: libbase/GnashImageJpeg.cpp:284
-#, c-format
-msgid "unexpected: jpeg_read_header returned %d"
-msgstr ""
+#: libbase/Socket.cpp:404
+msgid "seek() called for Socket"
+msgstr "seek()函数要求套接字"
 
-#: libbase/GnashImageJpeg.cpp:320
-msgid "lack of data during JPEG header parsing"
-msgstr ""
+#: libbase/Socket.cpp:411
+msgid "go_to_end() called for Socket"
+msgstr "go_to_end()函数要求套接字"
 
-#: libbase/GnashImageJpeg.cpp:330
+#: libbase/memory.cpp:94
 #, c-format
-msgid "unexpected: jpeg_read_header returned %d [%s:%d]"
-msgstr ""
-
-#: libbase/GnashImageJpeg.cpp:338
-msgid "Internal jpeg error during header parsing: "
-msgstr ""
+msgid "Allocating buffer for %d data samples"
+msgstr "为 %d 数据样本分配缓冲区"
 
-#: libbase/GnashImageJpeg.cpp:346
-msgid "Internal jpeg error during decompression: "
-msgstr ""
+#: libbase/memory.cpp:301
+msgid "Calculations don't equal"
+msgstr "计算不相等"
 
-#: libbase/GnashImageJpeg.cpp:521
-msgid "rw_dest_IOChannel couldn't write data."
-msgstr ""
+#: libbase/memory.cpp:303
+msgid "Zero memory leaks for this program"
+msgstr "该程序没有内存泄露"
 
-#: libbase/GnashImageJpeg.cpp:546
-msgid "rw_dest_IOChannel::term_destination couldn't write data."
-msgstr ""
+#: libbase/tu_file.cpp:193
+msgid "Error while seeking to end: %1%"
+msgstr "定位末尾时出错: %1%"
 
-#: libbase/AMF.cpp:90
-msgid "Read past _end of buffer for string length"
-msgstr ""
+#: libbase/tu_file.cpp:229
+msgid "Could not fstat file"
+msgstr "无法对文件调用fstat函数返回其信息"
 
-#: libbase/AMF.cpp:97
-msgid "Read past _end of buffer for string type"
-msgstr ""
+#: libbase/rc.cpp:170 libbase/rc.cpp:701
+msgid "Failed to find user settings directory"
+msgstr "无法找到用户设置目录"
 
-#: libbase/AMF.cpp:138
-msgid "writePlainString called with invalid type!"
-msgstr ""
+#: libbase/rc.cpp:381
+msgid "RcInitFile: couldn't open file: "
+msgstr "RcInitFile: 无法打开文件:"
 
-#: libbase/URLAccessManager.cpp:90
+#: libbase/rc.cpp:421
 #, c-format
-msgid "Load from host %s granted (whitelisted)"
-msgstr ""
+msgid "Warning: missing value for variable \"%s\" in rcfile %s, line %d"
+msgstr "警告:在rcfile %s第%d行中,变量\"%s\"缺少值"
 
-#: libbase/URLAccessManager.cpp:96
+#: libbase/rc.cpp:624
 #, c-format
-msgid "Load from host %s forbidden (not in non-empty whitelist)"
-msgstr ""
+msgid "Warning: unrecognized directive \"%s\" in rcfile %s line %d"
+msgstr "警告:在rcfile %s第%d行中有无法识别的指令"
 
-#: libbase/URLAccessManager.cpp:110
+#: libbase/rc.cpp:636
 #, c-format
-msgid "Load from host %s forbidden (blacklisted)"
-msgstr ""
+msgid "Warning: empty include specification in rcfile %s, line %d"
+msgstr "警告:在rcfile %s第%d行中规格包含空白"
 
-#: libbase/URLAccessManager.cpp:115
+#: libbase/rc.cpp:641
 #, c-format
-msgid "Load from host %s granted (default)"
-msgstr ""
+msgid ""
+"Warning: include specification must be an absolute path in rcfile %s, line %d"
+msgstr "警告:在rcfile %s第%d行的include必须使用绝对路径"
 
-#: libbase/URLAccessManager.cpp:147
+#: libbase/rc.cpp:650
 #, c-format
-msgid "Load of file %s forbidden (starting URL %s is not a local resource)"
-msgstr ""
+msgid "Warning: unrecognized action \"%s\" in rcfile %s, line %d"
+msgstr "警告:在rcfile %s第%d行中有无法识别的动作 \"%s\""
 
-#: libbase/URLAccessManager.cpp:164
+#: libbase/rc.cpp:742
 #, c-format
-msgid "Load of file %s granted (under local sandbox %s)"
-msgstr ""
+msgid "Couldn't open file %s for writing"
+msgstr "无法打开%s文件进行写入"
 
-#: libbase/URLAccessManager.cpp:172
-#, c-format
-msgid "Load of file %s forbidden (not under local sandboxes)"
-msgstr ""
+#: libbase/rc.cpp:751
+msgid "# Generated by Gnash. Manual changes to this file may be overridden."
+msgstr "# Gnash生成。该文件手册的更改可能会被覆盖。"
 
-#: libbase/URLAccessManager.cpp:212
+#: libbase/sharedlib.cpp:69
 #, c-format
-msgid "gethostname failed: %s"
-msgstr ""
+msgid "Couldn't initialize ltdl: %s"
+msgstr "不能初始化 ltdl: %s"
 
-#: libbase/URLAccessManager.cpp:234
+#: libbase/sharedlib.cpp:98
 #, c-format
-msgid "Load from host %s forbidden (not in the local domain)"
-msgstr ""
+msgid "Trying to open shared library \"%s\""
+msgstr "试图打开共享库 \"%s\""
 
-#: libbase/URLAccessManager.cpp:240
+#: libbase/sharedlib.cpp:112
 #, c-format
-msgid "Load from host %s forbidden (not on the local host)"
-msgstr ""
+msgid "Opened dynamic library \"%s\""
+msgstr "已打开动态库 \"%s\""
 
-#: libbase/URLAccessManager.cpp:262
+#: libbase/sharedlib.cpp:131
 #, c-format
-msgid "Attempt to connect to disallowed port %s"
-msgstr ""
+msgid "Couldn't find symbol: %s"
+msgstr "找不到符号:%s"
 
-#: libbase/URLAccessManager.cpp:272
+#: libbase/sharedlib.cpp:134
 #, c-format
-msgid "Checking security of URL '%s'"
-msgstr ""
-
-#: libbase/URLAccessManager.cpp:284
-msgid "Network connection without hostname requested"
-msgstr ""
-
-#: librender/opengl/Renderer_ogl.cpp:234
-msgid "OSMesaCreateContext failed!"
-msgstr ""
+msgid "Found symbol %s @ %p"
+msgstr "已找不到符号 %s @ %p"
 
-#: librender/opengl/Renderer_ogl.cpp:240
-msgid "OSMesaMakeCurrent failed!"
-msgstr ""
+#: librender/agg/Renderer_agg.cpp:799
+msgid "Can't render this type of frame"
+msgstr "无法渲染该帧类型"
 
-#: librender/opengl/Renderer_ogl.cpp:247
-#, c-format
-msgid "OSMesa handle successfully created. with width %d and height %d."
-msgstr ""
+#: librender/agg/Renderer_agg.cpp:1730
+msgid ""
+"Unidirectionally scaled strokes in AGG renderer (we'll scale by the scalable "
+"one)"
+msgstr "AGG渲染器的单向刻度线(我们将按比例为1进行缩放)"
 
-#: librender/opengl/Renderer_ogl.cpp:344
+#: librender/agg/Renderer_agg.cpp:2117
 #, c-format
-msgid "OpenGL: %s"
-msgstr ""
+msgid "Unknown pixelformat: %s\n"
+msgstr "未知的像素格式:%s\n"
 
-#: librender/opengl/Renderer_ogl.cpp:517
-#, c-format
-msgid "GLU: %s"
-msgstr ""
+#: librender/opengles1/Renderer_gles1.cpp:95
+msgid "Couldn't initialize EGL Device!"
+msgstr "无法初始化EGL设备!"
 
-#: librender/opengl/Renderer_ogl.cpp:868
-msgid ""
-"An insane number of video frames have been requested to be drawn. Further "
-"video frames will be ignored."
-msgstr ""
+#: librender/opengles1/Renderer_gles1.cpp:124
+#: librender/openvg/OpenVGRenderer.cpp:319
+msgid "drawVideoFrame"
+msgstr "drawVideoFrame"
 
-#: librender/opengl/Renderer_ogl.cpp:1142
-#: librender/openvg/OpenVGRenderer.cpp:569
 #: librender/opengles1/Renderer_gles1.cpp:230
+#: librender/openvg/OpenVGRenderer.cpp:569
+#: librender/opengl/Renderer_ogl.cpp:1142
 msgid "set_antialiased"
-msgstr ""
-
-#: librender/opengl/Renderer_ogl.cpp:1436
-#: librender/openvg/OpenVGRenderer.cpp:864
-msgid "Unidirectionally scaled strokes in OGL renderer"
-msgstr ""
-
-#: librender/opengl/Renderer_ogl.cpp:1450
-msgid ""
-"Your OpenGL implementation does not support the line width requested. Lines "
-"will be drawn with reduced width."
-msgstr ""
-
-#: librender/opengl/Renderer_ogl.cpp:1927
-#, c-format
-msgid "two gradients in a FillStyle have the same position/ratio: %d"
-msgstr ""
+msgstr "set_antialiased"
 
 #: librender/openvg/OpenVGBitmap.cpp:82 librender/openvg/OpenVGBitmap.cpp:285
 #, c-format
 msgid "Failed to create VG image! %s"
-msgstr ""
+msgstr "无法创建 VG 图像!%s"
 
 #: librender/openvg/OpenVGBitmap.cpp:88 librender/openvg/OpenVGBitmap.cpp:291
 #, c-format
 msgid "Image has RGB Pixel Format, Stride is %d, width is %d, height is %d"
-msgstr ""
+msgstr "图像使用RGB格式,跨距是 %d, 宽度 %d, 高度是 %d"
 
 #: librender/openvg/OpenVGBitmap.cpp:94 librender/openvg/OpenVGBitmap.cpp:297
 #, c-format
 msgid "Image has RGBA Pixel Format, Stride is %d, width is %d, height is %d"
-msgstr ""
+msgstr "图像使用RGBA格式,跨距是 %d, 宽度 %d, 高度是 %d"
 
 #: librender/openvg/OpenVGBitmap.cpp:349
 msgid "No supported wrap mode specified!"
-msgstr ""
+msgstr "不支持指定的换行模式!"
 
 #: librender/openvg/OpenVGRenderer.cpp:275
 #, c-format
 msgid "VG Vendor is %s, VG Version is %s, VG Renderer is %s"
-msgstr ""
+msgstr "VG厂商是%s,VG版本是%s,VG的渲染器是%s"
 
 #: librender/openvg/OpenVGRenderer.cpp:278
 msgid "VG Extensions are: "
-msgstr ""
-
-#: librender/openvg/OpenVGRenderer.cpp:319
-#: librender/opengles1/Renderer_gles1.cpp:124
-msgid "drawVideoFrame"
-msgstr ""
+msgstr "VG 扩展是:"
 
 #: librender/openvg/OpenVGRenderer.cpp:836
-#: librender/cairo/Renderer_cairo.cpp:864
+#: librender/cairo/Renderer_cairo.cpp:865
 msgid "join style"
-msgstr ""
+msgstr "连接样式"
 
 #: librender/openvg/OpenVGRenderer.cpp:850
-#: librender/cairo/Renderer_cairo.cpp:883
+#: librender/cairo/Renderer_cairo.cpp:884
 msgid "cap style"
-msgstr ""
+msgstr "端点样式"
+
+#: librender/openvg/OpenVGRenderer.cpp:864
+#: librender/opengl/Renderer_ogl.cpp:1436
+msgid "Unidirectionally scaled strokes in OGL renderer"
+msgstr "OGL渲染器单向缩放画笔"
 
 #: librender/openvg/OpenVGRenderer.cpp:1299
 msgid "unsupported VG_MATRIX_MODE!"
-msgstr ""
+msgstr "不支持的 VG_MATRIX_MODE!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1301
 #, c-format
 msgid "VG_MATRIX_MODE is %s"
-msgstr ""
+msgstr "VG_MATRIX_MODE 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1312
 msgid "unsupported VG_FILL_RULE!"
-msgstr ""
+msgstr "不支持的 VG_FILL_RULE!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1314
 #, c-format
 msgid "VG_FILL_RULE is %s"
-msgstr ""
+msgstr "VG_FILL_RULE 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1333
 msgid "unsupported VG_IMAGE_QUALITY!"
-msgstr ""
+msgstr "不支持的 VG_IMAGE_QUALITY!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1335
 #, c-format
 msgid "VG_IMAGE_QUALITY is %s"
-msgstr ""
+msgstr "VG_IMAGE_QUALITY 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1354
 msgid "unsupported VG_RENDERING_QUALITY!"
-msgstr ""
+msgstr "不支持的 VG_RENDERING_QUALITY!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1356
 #, c-format
 msgid "VG_RENDERING_QUALITY is %s"
-msgstr ""
+msgstr "VG_RENDERING_QUALITY 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1391
 msgid "unsupported VG_BLEND_MODE!"
-msgstr ""
+msgstr "不支持的 VG_BLEND_MODE!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1393
 #, c-format
 msgid "VG_BLEND_MODE is %s"
-msgstr ""
+msgstr "VG_BLEND_MODE 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1412
 msgid "unsupported VG_IMAGE_MODE!"
-msgstr ""
+msgstr "不支持的 VG_IMAGE_MODE!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1414
 #, c-format
 msgid "VG_IMAGE_MODE is %s"
-msgstr ""
+msgstr "VG_IMAGE_MODE 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1417
 #, c-format
 msgid "VG_STROKE_LINE_WIDTH is %d"
-msgstr ""
+msgstr "VG_STROKE_LINE_WIDTH 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1436
 msgid "unsupported VG_STROKE_CAP_STYLE!"
-msgstr ""
+msgstr "不支持的 VG_STROKE_CAP_STYLE!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1438
 #, c-format
 msgid "VG_STROKE_CAP_STYLE is %s"
-msgstr ""
+msgstr "VG_STROKE_CAP_STYLE 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1457
 msgid "unsupported VG_STROKE_JOIN_STYLE!"
-msgstr ""
+msgstr "不支持的 VG_STROKE_JOIN_STYLE!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1459
 #, c-format
 msgid "VG_STROKE_JOIN_STYLE is %s"
-msgstr ""
+msgstr "VG_STROKE_JOIN_STYLE 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1462
 #, c-format
 msgid "VG_STROKE_MITER_LIMIT is %d"
-msgstr ""
+msgstr "VG_STROKE_MITER_LIMIT 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1463
 #, c-format
 msgid "VG_MASKING is %d"
-msgstr ""
+msgstr "VG_MASKING 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1464
 #, c-format
 msgid "VG_SCISSORING is %d"
-msgstr ""
+msgstr "VG_SCISSORING 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1489
 msgid "unsupported VG_PIXEL_LAYOUT!"
-msgstr ""
+msgstr "不支持的 VG_PIXEL_LAYOUT!"
 
 #: librender/openvg/OpenVGRenderer.cpp:1491
 #, c-format
 msgid "VG_PIXEL_LAYOUT is %s"
-msgstr ""
+msgstr "VG_PIXEL_LAYOUT 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1493
 #, c-format
 msgid "VG_STROKE_DASH_PHASE_RESET is %s"
-msgstr ""
+msgstr "VG_STROKE_DASH_PHASE_RESET 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1495
 #, c-format
 msgid "VG_FILTER_FORMAT_LINEAR is %s"
-msgstr ""
+msgstr "VG_FILTER_FORMAT_LINEAR 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1497
 #, c-format
 msgid "VG_FILTER_FORMAT_PREMULTIPLIED is %s"
-msgstr ""
+msgstr "VG_FILTER_FORMAT_PREMULTIPLIED 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1514
 #, c-format
 msgid "VG_FILTER_CHANNEL_MASK is %s"
-msgstr ""
+msgstr "VG_FILTER_CHANNEL_MASK 是 %s"
 
 #: librender/openvg/OpenVGRenderer.cpp:1516
 #, c-format
 msgid "VG_MAX_IMAGE_WIDTH is %d"
-msgstr ""
+msgstr "VG_MAX_IMAGE_WIDTH 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1517
 #, c-format
 msgid "VG_MAX_IMAGE_HEIGHT is %d"
-msgstr ""
+msgstr "VG_MAX_IMAGE_HEIGHT 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1518
 #, c-format
 msgid "VG_MAX_IMAGE_PIXELS is %d"
-msgstr ""
+msgstr "VG_MAX_IMAGE_PIXELS 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1519
 #, c-format
 msgid "VG_MAX_IMAGE_BYTES is %d"
-msgstr ""
+msgstr "VG_MAX_IMAGE_BYTES 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1526
 #, c-format
 msgid "VG_PATH_FORMAT is %d"
-msgstr ""
+msgstr "VG_PATH_FORMAT 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1527
 #, c-format
 msgid "VG_PATH_DATATYPE is %d"
-msgstr ""
+msgstr "VG_PATH_DATATYPE 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1528
 #, c-format
 msgid "VG_PATH_CAPABILITY_APPEND_TO is %d"
-msgstr ""
+msgstr "VG_PATH_CAPABILITY_APPEND_TO 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1529
 #, c-format
 msgid "VG_PATH_SCALE is %g"
-msgstr ""
+msgstr "VG_PATH_SCALE 是 %g"
 
 #: librender/openvg/OpenVGRenderer.cpp:1530
 #, c-format
 msgid "VG_PATH_BIA is %g"
-msgstr ""
+msgstr "VG_PATH_BIA 是 %g"
 
 #: librender/openvg/OpenVGRenderer.cpp:1532
 #, c-format
 msgid "VG_PATH_NUM_SEGMENTS is %d"
-msgstr ""
+msgstr "VG_PATH_NUM_SEGMENTS 是 %d"
 
 #: librender/openvg/OpenVGRenderer.cpp:1533
 #, c-format
 msgid "VG_PATH_NUM_COORDS is %d"
-msgstr ""
-
-#: librender/opengles1/Renderer_gles1.cpp:95
-msgid "Couldn't initialize EGL Device!"
-msgstr ""
+msgstr "VG_PATH_NUM_COORDS 是 %d"
 
-#: librender/cairo/Renderer_cairo.cpp:498
+#: librender/cairo/Renderer_cairo.cpp:499
 msgid "Can't render videos with alpha"
-msgstr ""
+msgstr "无法渲染出带alpha通道的视频"
 
-#: librender/cairo/Renderer_cairo.cpp:869
+#: librender/cairo/Renderer_cairo.cpp:870
 msgid "differing start and end cap styles"
-msgstr ""
+msgstr "区分起点和终点的样式"
 
-#: librender/cairo/Renderer_cairo.cpp:911
+#: librender/cairo/Renderer_cairo.cpp:912
 msgid "Scaled strokes in Cairo renderer"
-msgstr ""
+msgstr "Cairo渲染器的刻度线"
 
 #: librender/cairo/PathParser.cpp:90
 msgid "path not closed!"
-msgstr ""
+msgstr "路径不封闭!"
 
-#: librender/agg/Renderer_agg.cpp:794
-msgid "Can't render this type of frame"
-msgstr ""
+#: librender/testr.cpp:190
+msgid "Couldn't get Drawable window from X11"
+msgstr "无法从X11获取可绘窗口"
 
-#: librender/agg/Renderer_agg.cpp:1764
-msgid ""
-"Unidirectionally scaled strokes in AGG renderer (we'll scale by the scalable "
-"one)"
-msgstr ""
+#: librender/opengl/Renderer_ogl.cpp:234
+msgid "OSMesaCreateContext failed!"
+msgstr "OSMesaCreateContext 失败!"
+
+#: librender/opengl/Renderer_ogl.cpp:240
+msgid "OSMesaMakeCurrent failed!"
+msgstr "OSMesaMakeCurrent 失败!"
 
-#: librender/agg/Renderer_agg.cpp:2151
+#: librender/opengl/Renderer_ogl.cpp:247
 #, c-format
-msgid "Unknown pixelformat: %s\n"
-msgstr ""
+msgid "OSMesa handle successfully created. with width %d and height %d."
+msgstr "OSMesa 句柄创建成功。宽度是 %d,高度是 %d。"
 
-#: librender/testr.cpp:190
-msgid "Couldn't get Drawable window from X11"
-msgstr ""
+#: librender/opengl/Renderer_ogl.cpp:344
+#, c-format
+msgid "OpenGL: %s"
+msgstr "OpenGL: %s"
+
+#: librender/opengl/Renderer_ogl.cpp:517
+#, c-format
+msgid "GLU: %s"
+msgstr "GLU: %s"
+
+#: librender/opengl/Renderer_ogl.cpp:868
+msgid ""
+"An insane number of video frames have been requested to be drawn. Further "
+"video frames will be ignored."
+msgstr "已请求绘制大量的视频。以后的视频帧将被忽略。"
+
+#: librender/opengl/Renderer_ogl.cpp:1450
+msgid ""
+"Your OpenGL implementation does not support the line width requested. Lines "
+"will be drawn with reduced width."
+msgstr "你的OpenGL的实现不支持请求的线宽。线条将用减少的宽度来绘制。"
+
+#: librender/opengl/Renderer_ogl.cpp:1895
+#, c-format
+msgid "two gradients in a FillStyle have the same position/ratio: %d"
+msgstr "填充样式中两种梯度使用同样的位置/比例:%d"
 
 #: librender/GnashTexture.cpp:70
 #, c-format
 msgid "glError: %s caught\n"
-msgstr ""
+msgstr "glError: 发现 %s \n"
 
-#: libmedia/MediaParser.cpp:83
-msgid "No ID3 support implemented in this MediaParser"
-msgstr ""
+#: libmedia/AudioDecoderSpeex.cpp:41
+msgid "AudioDecoderSpeex: state initialization failed."
+msgstr "AudioDecoderSpeex: 状态无法初始化。"
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:80
-msgid "MediaParserFfmpeg could not read probe data from input"
-msgstr ""
+#: libmedia/AudioDecoderSpeex.cpp:54
+msgid "AudioDecoderSpeex: initialization failed."
+msgstr "AudioDecoderSpeex: 无法初始化。"
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:113
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:122
+#: libmedia/AudioDecoderSpeex.cpp:109
+msgid "Corrupt Speex stream!"
+msgstr "损坏的Speex流!"
+
+#: libmedia/AudioDecoderSpeex.cpp:133
+msgid "Failed to resample Speex frame."
+msgstr "无法重新取样Speex帧。"
+
+#: libmedia/FLVParser.cpp:170
 #, c-format
-msgid "%s: seeking failed"
+msgid ""
+"Unexpected audio tag found at offset %d FLV stream advertising no audio in "
+"header. We'll warn only once for each FLV, expecting any further audio tag."
 msgstr ""
+"头部无音频FLV流%d偏移处发现异常的音频标签。当另一些音频标签出现,每个FLV我们"
+"只会警告一次。"
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:211
+#: libmedia/FLVParser.cpp:187
+msgid "could not read audio frame?"
+msgstr "无法读取音频帧?"
+
+#: libmedia/FLVParser.cpp:225
+#, c-format
 msgid ""
-"FIXME: FFmpeg packet decompression timestamp has no value, taking as zero"
+"Unexpected video tag found at offset %d of FLV stream advertising no video "
+"in header. We'll warn only once per FLV, expecting any further video tag."
 msgstr ""
+"头部无视频FLV流%d偏移处发现异常的视频标签。当另一些视频标签出现,每个FLV我们"
+"只会警告一次。"
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:272
+#: libmedia/FLVParser.cpp:245
+#, c-format
+msgid "AVC packet type: %d"
+msgstr "AVC数据包类型:%d"
+
+#: libmedia/FLVParser.cpp:264
+msgid "could not read video frame?"
+msgstr "无法读取视频帧?"
+
+#: libmedia/FLVParser.cpp:322
+#, c-format
+msgid "FLVParser::parseNextTag: can't seek to %d"
+msgstr "FLVParser::parseNextTag: 无法定位到 %d"
+
+#: libmedia/FLVParser.cpp:336
 #, c-format
 msgid ""
-"MediaParserFfmpeg::parseNextFrame: Problems parsing next frame "
-"(av_read_frame returned %d). We'll consider the stream fully parsed."
-msgstr ""
+"FLVParser::parseNextTag: can't read tag info (needed 12 bytes, only got %d)"
+msgstr "FLVParser::parseNextTag: 无法读取标志信息 (需要12字节, 只有 %d)"
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:443
+#: libmedia/FLVParser.cpp:423
 #, c-format
-msgid "  Using stream %d for audio: codec id %d"
-msgstr ""
+msgid "First byte of FLV_META_TAG is %d, expected 0x02 (STRING AMF0 type)"
+msgstr "FLV_META_TAG第一个字节是%d,应该是0x02(STRING AMF0类型)"
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:456
+#: libmedia/FLVParser.cpp:435
 #, c-format
-msgid "  Using stream %d for video: codec id %d"
+msgid ""
+"FLVParser::parseNextTag: can't read metaTag (%d) body (needed %d bytes, only "
+"got %d)"
 msgstr ""
+"FLVParser:: parseNextTag:无法读取元标记(%d)内容(需要%d字节,只有%d)"
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:478
-msgid "Duration of video stream unknown"
-msgstr ""
+#: libmedia/FLVParser.cpp:446
+msgid "Corrupt FLV: Meta tag unterminated!"
+msgstr "损坏的FLV:未结束的元标签! "
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:507
-msgid "Duration of audio stream unknown to ffmpeg"
-msgstr ""
+#: libmedia/FLVParser.cpp:454
+#, c-format
+msgid "FLVParser::parseNextTag: unknown FLV tag type %d"
+msgstr "FLVParser:: parseNextTag:未知的FLV标签类型%d"
 
-#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:587
+#: libmedia/FLVParser.cpp:463
 msgid ""
-"MediaParserFfmpeg couldn't parse input format: tried to seek at negative "
-"offset %1%."
-msgstr ""
+"Corrupt FLV: previous tag size record (%1%) unexpected (actual size: %2%)"
+msgstr "损坏的FLV:上一个标签大小记录(%1%)异常(实际大小:%2%)"
 
-#: libmedia/ffmpeg/VideoConverterFfmpeg.cpp:122
-msgid "VideoConverterFfmpeg cannot convert to the requested format"
-msgstr ""
+#: libmedia/FLVParser.cpp:481
+msgid "FLVParser::parseHeader: couldn't read 9 bytes of header"
+msgstr "FLVParser:: parseHeader:无法读取头部的9个字节"
 
-#: libmedia/ffmpeg/MediaHandlerFfmpeg.cpp:122
+#: libmedia/FLVParser.cpp:533
 #, c-format
-msgid "MediaHandlerFfmpeg::createAudioDecoder: %s -- %s"
-msgstr ""
+msgid "FLVParser::readAudioFrame: could only read %d/%d bytes"
+msgstr "FLVParser:: readAudioFrame:只能读取 %d/%d 字节"
+
+#: libmedia/ffmpeg/VideoConverterFfmpeg.cpp:122
+msgid "VideoConverterFfmpeg cannot convert to the requested format"
+msgstr "VideoConverterFfmpeg无法转换到请求的格式"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:53
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:48
 #, c-format
 msgid "AudioDecoderFfmpeg: initialized FFmpeg codec %d (%s)"
-msgstr ""
+msgstr "AudioDecoderFfmpeg: 初始化FFmpeg编解码%d (%s)"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:56
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:51
 #, c-format
 msgid ""
 "AudioDecoderFfmpeg: initialized FFmpeg codec %d (%s) for flash codec %d (%s)"
-msgstr ""
+msgstr "AudioDecoderFfmpeg: 为flash编解码%d (%s)初始化FFmpeg编解码%d (%s)"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:71
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:66
 #, c-format
 msgid "AudioDecoderFfmpeg: initialized FFmpeg codec %s (%d)"
-msgstr ""
+msgstr "AudioDecoderFfmpeg: 初始化FFmpeg编解码%s (%d)"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:110
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:107
 #, c-format
 msgid "Unsupported audio codec %d"
-msgstr ""
+msgstr "不支持的音频编解码%d"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:119
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:116
 #, c-format
 msgid "libavcodec could not find a decoder for codec %d (%s)"
-msgstr ""
+msgstr "libavcodec 无法为编解码 %d (%s)找到解码器"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:129
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:126
 msgid "AudioDecoderFfmpeg can't initialize MP3 parser"
-msgstr ""
+msgstr "AudioDecoderFfmpeg无法初始化MP3解析器"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:136
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:185
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:137
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:196
 msgid "libavcodec couldn't allocate context"
-msgstr ""
+msgstr "libavcodec无法分配上下文"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:144
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:315
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:149
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:331
 #, c-format
 msgid ""
 "AudioDecoderFfmpeg: avcodec_open failed to initialize FFmpeg codec %s (%d)"
-msgstr ""
+msgstr "AudioDecoderFfmpeg:avcodec_open初始化FFmpeg编解码器 %s (%d)失败"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:149
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:154
 #, c-format
 msgid "AudioDecoder: initialized FFMPEG codec %s (%d)"
-msgstr ""
+msgstr "AudioDecoder:初始化 FFMPEG 编解码器 %s (%d)"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:222
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:230
 #, c-format
 msgid "AudioDecoderFfmpeg: unsupported flash audio codec %d (%s)"
-msgstr ""
+msgstr "AudioDecoderFfmpeg: 不支持的flash音频编解码 %d (%s)"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:231
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:239
 #, c-format
 msgid "AudioDecoderFfmpeg: unknown codec type %d (should never happen)"
-msgstr ""
+msgstr "AudioDecoderFfmpeg:未知的编解码类型 %d (不应该发生)"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:241
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:249
 #, c-format
 msgid ""
 "AudioDecoderFfmpeg: libavcodec could not find a decoder for codec %d (%s)"
-msgstr ""
+msgstr "AudioDecoderFfmpeg: libavcodec 无法为编解码 %d (%s)找到解码器"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:247
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:255
 #, c-format
 msgid ""
 "AudioDecoderFfmpeg: libavcodec could not find a decoder for ffmpeg codec id "
 "%s"
-msgstr ""
+msgstr "AudioDecoderFfmpeg: libavcodec 无法为 ffmpeg编解码 %s找到一个解码器"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:259
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:271
 msgid "AudioDecoderFfmpeg: libavcodec couldn't allocate context"
-msgstr ""
+msgstr "AudioDecoderFfmpeg: libavcodec 无法分配上下文"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:348
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:364
 #, c-format
 msgid ""
 "av_parser_parse returned %d. Upgrading ffmpeg/libavcodec might fix this "
 "issue."
-msgstr ""
-
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:401
-#, c-format
-msgid ""
-"AudioDecoderFfmpeg: could not find a complete frame in the last %d bytes of "
-"input (malformed SWF or FLV?)"
-msgstr ""
+msgstr "av_parser_parse返回%d。升级ffmpeg/libavcodec也许会解决该问题。"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:490
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:483
 msgid "failed to allocate audio buffer."
-msgstr ""
+msgstr "分配音频缓冲器失败。"
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:505
+#, fuzzy
+msgid "failed to allocate frame."
+msgstr "分配音频缓冲器失败。"
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:528
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:523
 #, c-format
-msgid ""
-"avcodec_decode_audio returned %d. Upgrading ffmpeg/libavcodec might fix this "
-"issue."
+msgid "output buffer size is too small for the current frame (%d < %d)"
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:537
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:549
 #, c-format
-msgid ""
-"outputSize:%d after decoding %d bytes of input audio data. Upgrading ffmpeg/"
-"libavcodec might fix this issue."
+msgid "avcodec_decode_audio returned %d."
 msgstr ""
 
-#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:587
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:551
+#, fuzzy, c-format
+msgid "outputSize:%d after decoding %d bytes of input audio data."
+msgstr ""
+"outputSize:%d在解码输入音频数据%d字节之后。升级ffmpeg/libavcodec也许会解决该"
+"问题。"
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:553
+#, fuzzy
+msgid "Upgrading ffmpeg/libavcodec might fix this issue."
+msgstr "av_parser_parse返回%d。升级ffmpeg/libavcodec也许会解决该问题。"
+
+#: libmedia/ffmpeg/AudioDecoderFfmpeg.cpp:598
 #, c-format
 msgid ""
 " --- Computation of resampled samples (%d) < then the actual returned "
 "samples (%d)"
-msgstr ""
+msgstr "---再次采样的样本计算(%d)< 实际回收样本((%d)"
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:141
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:145
 #, c-format
 msgid "Cannot find suitable decoder for flash codec %d"
-msgstr ""
+msgstr "无法为flash编解码%d找到适合的解码器"
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:180
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:187
 msgid "libavcodec can't decode this video format"
-msgstr ""
+msgstr "libavcodec 无法解码该视频格式"
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:208
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:227
 #, c-format
 msgid "libavcodec failed to initialize FFMPEG codec %s (%d)"
-msgstr ""
+msgstr "libavcodec 无法初始化FFMPEG编解码%s (%d)"
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:216
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:235
 #, c-format
 msgid "VideoDecoder: initialized FFMPEG codec %s (%d)"
-msgstr ""
+msgstr "VideoDecoder:初始化FFMPEG编解码%s (%d)"
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:306
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:325
 msgid "Pixel format not handled"
-msgstr ""
+msgstr "未处理像素格式"
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:354
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:373
 msgid "Out of memory while allocating avcodec frame"
-msgstr ""
+msgstr "分配avcodec帧时内存不足"
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:373
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:392
 msgid "Decoding of a video frame failed"
-msgstr ""
+msgstr "视频帧解码失败"
 
-#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:434
+#: libmedia/ffmpeg/VideoDecoderFfmpeg.cpp:453
 #, c-format
 msgid "Unsupported video codec %d"
-msgstr ""
+msgstr "不支持的视频编解码器 %d"
 
-#: libmedia/haiku/MediaHandlerHaiku.cpp:115
+#: libmedia/ffmpeg/MediaHandlerFfmpeg.cpp:122
 #, c-format
-msgid "MediaHandlerHaiku::createAudioDecoder: %s -- %s"
-msgstr ""
-
-#: libmedia/AudioDecoderSpeex.cpp:41
-msgid "AudioDecoderSpeex: state initialization failed."
-msgstr ""
+msgid "MediaHandlerFfmpeg::createAudioDecoder: %s -- %s"
+msgstr "MediaHandlerFfmpeg::createAudioDecoder: %s -- %s"
 
-#: libmedia/AudioDecoderSpeex.cpp:54
-msgid "AudioDecoderSpeex: initialization failed."
-msgstr ""
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:80
+msgid "MediaParserFfmpeg could not read probe data from input"
+msgstr "MediaParserFfmpeg无法从输入读取探头数据"
 
-#: libmedia/AudioDecoderSpeex.cpp:109
-msgid "Corrupt Speex stream!"
-msgstr ""
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:113
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:122
+#, c-format
+msgid "%s: seeking failed"
+msgstr "%s:寻找失败"
 
-#: libmedia/AudioDecoderSpeex.cpp:133
-msgid "Failed to resample Speex frame."
-msgstr ""
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:211
+msgid ""
+"FIXME: FFmpeg packet decompression timestamp has no value, taking as zero"
+msgstr "需修复: FFmpeg的包解压的时间戳没有值,取值为零"
 
-#: libmedia/FLVParser.cpp:170
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:272
 #, c-format
 msgid ""
-"Unexpected audio tag found at offset %d FLV stream advertising no audio in "
-"header. We'll warn only once for each FLV, expecting any further audio tag."
-msgstr ""
-
-#: libmedia/FLVParser.cpp:187
-msgid "could not read audio frame?"
+"MediaParserFfmpeg::parseNextFrame: Problems parsing next frame "
+"(av_read_frame returned %d). We'll consider the stream fully parsed."
 msgstr ""
+"MediaParserFfmpeg::parseNextFrame:解析下一帧有问题(av_read_frame返回%d)。"
+"我们将考虑完全被解析的流。"
 
-#: libmedia/FLVParser.cpp:225
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:467
 #, c-format
-msgid ""
-"Unexpected video tag found at offset %d of FLV stream advertising no video "
-"in header. We'll warn only once per FLV, expecting any further video tag."
-msgstr ""
+msgid "  Using stream %d for audio: codec id %d"
+msgstr "使用流%d作为音频:编解码器标识为%d"
 
-#: libmedia/FLVParser.cpp:245
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:480
 #, c-format
-msgid "AVC packet type: %d"
-msgstr ""
+msgid "  Using stream %d for video: codec id %d"
+msgstr "使用流%d作为视频:编解码器标识为%d"
 
-#: libmedia/FLVParser.cpp:264
-msgid "could not read video frame?"
-msgstr ""
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:502
+msgid "Duration of video stream unknown"
+msgstr "视频流的持续时间未知"
 
-#: libmedia/FLVParser.cpp:322
-#, c-format
-msgid "FLVParser::parseNextTag: can't seek to %d"
-msgstr ""
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:531
+msgid "Duration of audio stream unknown to ffmpeg"
+msgstr "音频流的持续时间ffmepg未知"
 
-#: libmedia/FLVParser.cpp:336
-#, c-format
+#: libmedia/ffmpeg/MediaParserFfmpeg.cpp:611
 msgid ""
-"FLVParser::parseNextTag: can't read tag info (needed 12 bytes, only got %d)"
-msgstr ""
+"MediaParserFfmpeg couldn't parse input format: tried to seek at negative "
+"offset %1%."
+msgstr "MediaParserFfmpeg无法解析输入的格式:试图在负偏移 %1%查找。"
 
-#: libmedia/FLVParser.cpp:423
+#: libmedia/MediaHandler.cpp:49
+msgid "MediaHandler::isFLV: Could not read 3 bytes from input stream"
+msgstr "MediaHandler::isFLV: 不能从输入流中读取3个字节"
+
+#: libmedia/MediaHandler.cpp:65
+msgid ""
+"MediaHandler::createMediaParser: only FLV input is supported by this "
+"MediaHandler"
+msgstr "MediaHandler::createMediaParser: 该 MediaHandler 只支持 FLV 输入"
+
+#: libmedia/MediaHandler.cpp:71
 #, c-format
-msgid "First byte of FLV_META_TAG is %d, expected 0x02 (STRING AMF0 type)"
-msgstr ""
+msgid "Exception while reading from stream: %s"
+msgstr "从流中读取时发生异常: %s"
 
-#: libmedia/FLVParser.cpp:435
+#: libmedia/MediaHandler.cpp:108
 #, c-format
 msgid ""
-"FLVParser::parseNextTag: can't read metaTag (%d) body (needed %d bytes, only "
-"got %d)"
+"MediaHandler::createFlashAudioDecoder: no available flash decoders for codec "
+"%d (%s)"
 msgstr ""
+"MediaHandler::createFlashAudioDecoder: 没有可用的 flash编码 %d 的解码器(%s)"
 
-#: libmedia/FLVParser.cpp:446
-msgid "Corrupt FLV: Meta tag unterminated!"
-msgstr ""
+#: libmedia/AudioDecoderSimple.cpp:163
+msgid "corrupted ADPCM header"
+msgstr "损坏的ADPCM头"
 
-#: libmedia/FLVParser.cpp:454
+#: libmedia/AudioDecoderSimple.cpp:291 libmedia/AudioDecoderSimple.cpp:304
 #, c-format
-msgid "FLVParser::parseNextTag: unknown FLV tag type %d"
-msgstr ""
+msgid "AudioDecoderSimple: initialized flash codec %s (%d)"
+msgstr "AudioDecoderSimple: 已经初始化 flash 编码 %s (%d)"
 
-#: libmedia/FLVParser.cpp:463
-msgid ""
-"Corrupt FLV: previous tag size record (%1%) unexpected (actual size: %2%)"
-msgstr ""
+#: libmedia/AudioDecoderSimple.cpp:330 libmedia/AudioDecoderSimple.cpp:361
+#, c-format
+msgid "AudioDecoderSimple: unsupported flash codec %d (%s)"
+msgstr "AudioDecoderSimple: 不支持 flash 编码 %d (%s)"
 
-#: libmedia/FLVParser.cpp:481
-msgid "FLVParser::parseHeader: couldn't read 9 bytes of header"
-msgstr ""
+#: libmedia/AudioDecoderSimple.cpp:341
+#, c-format
+msgid "AudioDecoderSimple: unable to intepret custom audio codec id %s"
+msgstr "AudioDecoderSimple: 无法解释自定义的音频编码标识 %s"
 
-#: libmedia/FLVParser.cpp:533
+#: libmedia/AudioDecoderSimple.cpp:428
+msgid "Host endianness not detected in AudioDecoderSimple"
+msgstr "AudioDecoderSimple 中没有检测到主机字节序"
+
+#: libmedia/AudioDecoderSimple.cpp:478
+msgid "Error in sound sample conversion"
+msgstr "声音采样转换中出错"
+
+#: libmedia/gst/MediaHandlerGst.cpp:90
+msgid "Wrong arguments given to GST VideoDecoder"
+msgstr "传给GST视频解码器了错误的参数 "
+
+#: libmedia/gst/MediaHandlerGst.cpp:137
 #, c-format
-msgid "FLVParser::readAudioFrame: could only read %d/%d bytes"
-msgstr ""
+msgid "MediaHandlerGst::createAudioDecoder: %s -- %s"
+msgstr "MediaHandlerGst::createAudioDecoder: %s -- %s"
 
 #: libmedia/gst/VideoConverterGst.cpp:39
 msgid "VideoConverterGst: ffmpegcolorspace element missing"
-msgstr ""
+msgstr "VideoConverterGst:ffmpegcolorspace元素不存在"
 
 #: libmedia/gst/VideoConverterGst.cpp:72
 msgid "VideoConverterGst: can't output requested format"
-msgstr ""
+msgstr "VideoConverterGst:不能输出请求的格式"
 
 #: libmedia/gst/VideoConverterGst.cpp:100
 msgid "VideoConverterGst: internal error (caps creation failed)"
-msgstr ""
+msgstr "VideoConverterGst:内部错误(无法创建caps)"
 
 #: libmedia/gst/VideoConverterGst.cpp:107
+#, fuzzy
 msgid "VideoConverterGst: initialization failed."
-msgstr ""
+msgstr "VideoConverterGst:初始化失败。"
 
 #: libmedia/gst/VideoConverterGst.cpp:142
 msgid "VideoConverterGst: buffer push failed."
-msgstr ""
+msgstr "VideoConverterGst:缓冲区推入失败。"
 
 #: libmedia/gst/VideoConverterGst.cpp:149
 msgid "VideoConverterGst: buffer pull failed."
-msgstr ""
+msgstr "VideoConverterGst:缓冲区拉出失败。"
+
+#: libmedia/gst/VideoDecoderGst.cpp:97
+msgid "Video codec is zero.  Streaming video expected later."
+msgstr "视频编解码器是零。后面预计是视频流。"
+
+#: libmedia/gst/VideoDecoderGst.cpp:100
+#, c-format
+msgid "No support for video codec %s."
+msgstr "不支持的视频编解码器 %s。"
+
+#: libmedia/gst/VideoDecoderGst.cpp:122 libmedia/gst/VideoDecoderGst.cpp:148
+msgid "VideoDecoderGst: internal error (caps creation failed)"
+msgstr "VideoDecoderGst:内部错误(caps创建失败)"
+
+#: libmedia/gst/VideoDecoderGst.cpp:130
+#, c-format
+msgid "Couldn't find a plugin for video type %s!"
+msgstr "无法为视频类型  %s 找到插件!"
+
+#: libmedia/gst/VideoDecoderGst.cpp:134
+msgid " Please make sure you have gstreamer-ffmpeg installed."
+msgstr "请确保您的 gstreamer-ffmpeg 已经安装。"
+
+#: libmedia/gst/VideoDecoderGst.cpp:158
+#, c-format
+msgid "VideoDecoderGst: initialisation failed for video type %s!"
+msgstr "VideoDecoderGst:初始化视频类型%s失败!"
+
+#: libmedia/gst/VideoDecoderGst.cpp:189
+msgid "VideoDecoderGst: buffer push failed."
+msgstr "VideoDecoderGst:缓冲区推入失败。"
 
 #: libmedia/gst/GstUtil.cpp:76
 msgid "Unable to retrieve a valid audio sink from ~/.gnashrc"
-msgstr ""
+msgstr "无法从~/.gnashrc获取到有效的音频槽"
 
 #: libmedia/gst/GstUtil.cpp:82
 msgid "Unable to retrieve a valid audio sink from autoaudiosink"
-msgstr ""
+msgstr "无法从autoaudiosink获取到有效的音频槽"
 
 #: libmedia/gst/GstUtil.cpp:87
 #, c-format
@@ -1259,2518 +1377,2827 @@ msgid ""
 "Unable to retrieve a valid audio sink from gconfaudiosink\n"
 "%s"
 msgstr ""
+"无法从gconfaudiosink获取到有效的音频槽\n"
+"%s"
 
 #: libmedia/gst/GstUtil.cpp:88
 msgid "Sink search exhausted: you won't be able to hear sound!"
-msgstr ""
+msgstr "槽搜索耗尽:你将无法听到声音!"
 
 #: libmedia/gst/GstUtil.cpp:94
 #, c-format
 msgid "Got a non-NULL audio sink; its wrapper name is: %s"
-msgstr ""
+msgstr "得到一个非空的音频槽;包名称为: %s"
 
 #: libmedia/gst/GstUtil.cpp:116
 msgid ""
 "Missing plugin, but plugin installing not supported. Will try anyway, but "
 "expect failure."
-msgstr ""
+msgstr "缺少插件,而插件安装不支持。可以继续试试,但估计会失败。"
 
 #: libmedia/gst/GstUtil.cpp:122
 msgid "Missing plugin, but failed to convert it to gst missing plugin detail."
-msgstr ""
+msgstr "缺少插件,而不能将其转换为gst缺少的插件信息。"
 
 #: libmedia/gst/GstUtil.cpp:135
 msgid ""
 "gst_update_registry failed. You'll need to restart Gnash to use the new "
 "plugins."
-msgstr ""
+msgstr "gst_update_registry失败。使用新的插件请重新启动Gnash。"
 
 #: libmedia/gst/GstUtil.cpp:142
 msgid "Missing plugin, but automatic plugin installation not available."
-msgstr ""
+msgstr "缺少插件,而自动插件安装不可用。"
 
-#: libmedia/gst/VideoDecoderGst.cpp:97
-msgid "Video codec is zero.  Streaming video expected later."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:319
+msgid "too high an index value, will cause segfault"
+msgstr "索引值过高,会导致段错误"
 
-#: libmedia/gst/VideoDecoderGst.cpp:100
+#: libmedia/gst/VideoInputGst.cpp:369
 #, c-format
-msgid "No support for video codec %s."
-msgstr ""
+msgid "%s: Could not create video test source."
+msgstr "%s:无法创建视频测试源。"
 
-#: libmedia/gst/VideoDecoderGst.cpp:122 libmedia/gst/VideoDecoderGst.cpp:148
-msgid "VideoDecoderGst: internal error (caps creation failed)"
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:387 libmedia/gst/AudioInputGst.cpp:119
+#, c-format
+msgid "%s: Could not create pulsesrc element"
+msgstr "%s:无法创建脉冲源组件。"
 
-#: libmedia/gst/VideoDecoderGst.cpp:130
+#: libmedia/gst/VideoInputGst.cpp:392 libmedia/gst/AudioInputGst.cpp:124
 #, c-format
-msgid "Couldn't find a plugin for video type %s!"
-msgstr ""
+msgid "%s: Could not get property probe from pulsesrc element"
+msgstr "%s:无法从脉冲源组件获取属性探针"
 
-#: libmedia/gst/VideoDecoderGst.cpp:134
-msgid " Please make sure you have gstreamer-ffmpeg installed."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:628
+msgid "You have an invalid camera selected. Please check your gnashrc file"
+msgstr "你选择了无效的相机。请检查 gnashrc 文件"
 
-#: libmedia/gst/VideoDecoderGst.cpp:158
+#: libmedia/gst/VideoInputGst.cpp:657
 #, c-format
-msgid "VideoDecoderGst: initialisation failed for video type %s!"
-msgstr ""
+msgid "%s: Passed an invalid argument (not a valid dev_select value)"
+msgstr "%s:传递了一个无效的参数(不是有效的 dev_select 值)"
 
-#: libmedia/gst/VideoDecoderGst.cpp:189
-msgid "VideoDecoderGst: buffer push failed."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:685 libmedia/gst/AudioInputGst.cpp:222
+#, c-format
+msgid "%s: Pipeline bus isn't an object for some reason"
+msgstr "%s:由于某种原因管道总线不是一个对象"
 
-#: libmedia/gst/MediaParserGst.cpp:55
-msgid "MediaParserGst couldn't create a bin"
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:705 libmedia/gst/AudioInputGst.cpp:241
+#, c-format
+msgid "%s: Template pad isn't an object for some reason"
+msgstr "%s:由于某种原因模板垫子不是一个对象"
 
-#: libmedia/gst/MediaParserGst.cpp:60
-msgid "MediaParserGst couldn't create a typefind element."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:718 libmedia/gst/AudioInputGst.cpp:255
+#, c-format
+msgid "%s: pipeline isn't an object for some reason"
+msgstr "%s:由于某种原因管道不是一个对象"
 
-#: libmedia/gst/MediaParserGst.cpp:72 libmedia/gst/MediaParserGst.cpp:94
-#: libmedia/gst/MediaParserGst.cpp:317 libmedia/gst/MediaParserGst.cpp:374
-#: libmedia/gst/MediaParserGst.cpp:528
-msgid "MediaParserGst could not change element state"
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:804
+#, c-format
+msgid "%s: type %s, cannot be handled for resolution width"
+msgstr "%s:类型 %s, 不能处理的分辨率宽度"
 
-#: libmedia/gst/MediaParserGst.cpp:85
+#: libmedia/gst/VideoInputGst.cpp:825 libmedia/gst/AudioInputGst.cpp:281
 #, c-format
-msgid "Needed %d dead iterations to detect audio type."
-msgstr ""
+msgid "%s: was passed a NULL pointer"
+msgstr "%s:传递了一个NULL指针"
 
-#: libmedia/gst/MediaParserGst.cpp:89
-msgid "MediaParserGst failed to detect any stream types."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:931 libmedia/gst/VideoInputGst.cpp:1104
+#, c-format
+msgid "%s: Creation of the webcam_source_bin failed"
+msgstr "%s:创建webcam_source_bin失败"
 
-#: libmedia/gst/MediaParserGst.cpp:187
-msgid ""
-"MediaParserGst failed to read the stream, but it did not reach EOF or enter "
-"a bad state."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:933 libmedia/gst/VideoInputGst.cpp:1106
+#: libmedia/gst/AudioInputGst.cpp:328 libmedia/gst/AudioInputGst.cpp:384
+#, c-format
+msgid "the error was %s"
+msgstr "错误是 %s"
 
-#: libmedia/gst/MediaParserGst.cpp:201
-msgid "MediaParserGst failed to push more data into the demuxer! Seeking back."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:961
+#, fuzzy, c-format
+msgid "%s: webcam isn't set!"
+msgstr "%s:没有设置webam!"
+
+#: libmedia/gst/VideoInputGst.cpp:1024
+#, fuzzy, c-format
+msgid "%s: the resolution you chose isn't supported, picking a supported value"
+msgstr "%s:你选择的分辨率不支持,请选择一个支持的值"
 
-#: libmedia/gst/MediaParserGst.cpp:280
+#: libmedia/gst/VideoInputGst.cpp:1128 libmedia/gst/AudioInputGst.cpp:339
 #, c-format
-msgid "MediaParserGst/typefound: Detected media type %s"
-msgstr ""
+msgid "%s: couldn't drop the sourcebin back into the main bin"
+msgstr "%s:无法把 sourcebin 拖回主 bin 中"
 
-#: libmedia/gst/MediaParserGst.cpp:292 libmedia/gst/MediaParserGst.cpp:299
-msgid "MediaParserGst Failed to create fakesink."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1137 libmedia/gst/AudioInputGst.cpp:349
+#, c-format
+msgid "%s: couldn't link up sourcebin and tee"
+msgstr "%s:无法连接 sourcebin 和 tee"
 
-#: libmedia/gst/MediaParserGst.cpp:305
-msgid "MediaParserGst: couldn't get the fakesink src element."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1169
+#, c-format
+msgid "%s: problem creating source bin"
+msgstr "%s:创建源 bin 故障"
 
-#: libmedia/gst/MediaParserGst.cpp:313
-msgid "MediaParserGst: couln't link fakesink"
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1176 libmedia/gst/AudioInputGst.cpp:412
+#, c-format
+msgid "%s: problem creating tee element"
+msgstr "%s:创建 tee 组件故障"
 
-#: libmedia/gst/MediaParserGst.cpp:337
-msgid "MediaParserGst: couldn't get the typefind src element."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1180 libmedia/gst/AudioInputGst.cpp:416
+#, c-format
+msgid "%s: problem creating save_queue element"
+msgstr "%s:创建 save_queue 组件故障"
 
-#: libmedia/gst/MediaParserGst.cpp:352
-msgid "MediaParserGst: couldn't create the demuxer"
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1185
+#, c-format
+msgid "%s: problem creating video_display_queue element"
+msgstr "%s:创建 video_display_queue 组件故障"
 
-#: libmedia/gst/MediaParserGst.cpp:358 libmedia/gst/MediaParserGst.cpp:363
-msgid "MediaParserGst: failed adding demuxer to bin."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1196
+#, c-format
+msgid "%s: couldn't link webcam_source_bin and tee"
+msgstr "%s:无法连接 webcam_source_bin 和 tee"
 
-#: libmedia/gst/MediaParserGst.cpp:390
-msgid "MediaParserGst: couldn't get structure name."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1203
+#, c-format
+msgid "%s: couldn't link tee and save_queue"
+msgstr "%s:无法连接 tee 和 save_queue"
 
-#: libmedia/gst/MediaParserGst.cpp:404
+#: libmedia/gst/VideoInputGst.cpp:1209
 #, c-format
-msgid "MediaParserGst: ignoring stream of type %s."
-msgstr ""
+msgid "%s: couldn't link tee and video_display_queue"
+msgstr "%s:无法连接 tee 和 video_display_queue"
 
-#: libmedia/gst/MediaParserGst.cpp:428
+#: libmedia/gst/VideoInputGst.cpp:1218
 #, c-format
-msgid "MediaParserGst: Failed to find a parser (media: %s)."
-msgstr ""
+msgid "%s: couldn't get save_queue_src_pad"
+msgstr "%s:无法得到 save_queue_src_pad"
 
-#: libmedia/gst/MediaParserGst.cpp:437
-msgid ""
-"MediaParserGst: Failed to find a parser. We'll continue, but either audio or "
-"video will not work!"
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1228
+#, c-format
+msgid "%s: couldn't get video_display_queue_pad"
+msgstr "%s:无法得到 video_display_queue_pad"
 
-#: libmedia/gst/MediaParserGst.cpp:446
-msgid "MediaParserGst: couldn't add parser."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1240 libmedia/gst/AudioInputGst.cpp:466
+#, c-format
+msgid "%s: Unable to create main pipeline"
+msgstr "%s:不能创建主管道"
 
-#: libmedia/gst/MediaParserGst.cpp:459
-msgid "MediaParserGst: couldn't link parser."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1258
+#, c-format
+msgid "%s: something went wrong creating the new video_display_bin"
+msgstr "%s:创建新的 video_display_bin 发生错误"
 
-#: libmedia/gst/MediaParserGst.cpp:471 libmedia/gst/MediaParserGst.cpp:504
-msgid "MediaParserGst: couldn't link \"fake\" sink."
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1264
+#, c-format
+msgid "%s: problem creating video_scale element"
+msgstr "%s:创建 video_scale 组件出错"
 
-#: libmedia/gst/MediaParserGst.cpp:490
+#: libmedia/gst/VideoInputGst.cpp:1273
 #, c-format
-msgid "MediaParserGst: Linked audio source (type: %s)"
-msgstr ""
+msgid "%s: problem creating the video_sink element"
+msgstr "%s:创建 video_sink 组件出错"
 
-#: libmedia/gst/MediaParserGst.cpp:520
+#: libmedia/gst/VideoInputGst.cpp:1282
 #, c-format
-msgid "MediaParserGst: Linked video source (type: %s)"
-msgstr ""
+msgid "%s: something went wrong in linking elements in video_display_bin"
+msgstr "%s:在video_display_bin中连接组件发生错误"
 
-#: libmedia/gst/AudioDecoderGst.cpp:100
-msgid "Creating AAC decoder without extra data. This will probably fail!"
-msgstr ""
+#: libmedia/gst/VideoInputGst.cpp:1324
+msgid "something went wrong in the make_video_display_link function"
+msgstr "函数 make_video_display_link 中发生错误"
 
-#: libmedia/gst/AudioDecoderGst.cpp:110
+#: libmedia/gst/VideoInputGst.cpp:1356
 #, c-format
-msgid "AudioDecoderGst: cannot handle codec %d (%s)"
-msgstr ""
+msgid "%s: the unlinking of the pads failed"
+msgstr "%s:垫子断开连接失败"
 
-#: libmedia/gst/AudioDecoderGst.cpp:120
+#: libmedia/gst/VideoInputGst.cpp:1386
 #, c-format
-msgid "AudioDecoderGst: cannot handle codec %d (no ExtraInfoGst attached)"
-msgstr ""
+msgid "%s: something went wrong in the make_video_display_link function"
+msgstr "%s:函数 make_video_display_link 中发生错误"
 
-#: libmedia/gst/AudioDecoderGst.cpp:149
-msgid ""
-"The best available resampler is 'audioresample'. Please install gstreamer-"
-"ffmpeg 0.10.4 or newer, or you may experience long delays in audio playback!"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:168 libmedia/gst/AudioDecoderGst.cpp:188
-msgid "AudioDecoderGst: internal error (caps creation failed)"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:175
-#, c-format
-msgid "Couldn't find a plugin for audio type %s!"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:199
+#: libmedia/gst/VideoInputGst.cpp:1416 libmedia/gst/AudioInputGst.cpp:542
+#: libmedia/gst/AudioInputGst.cpp:682
 #, c-format
-msgid "AudioDecoderGst: initialisation failed for audio type %s!"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:227
-msgid "Pushed data, but there's nothing to pull (yet)"
-msgstr ""
-
-#: libmedia/gst/AudioDecoderGst.cpp:263 libmedia/gst/AudioDecoderGst.cpp:291
-msgid "AudioDecoderGst: buffer push failed."
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:317
-msgid "too high an index value, will cause segfault"
-msgstr ""
+msgid "%s: unlink failed"
+msgstr "%s:断开连接失败"
 
-#: libmedia/gst/VideoInputGst.cpp:367
+#: libmedia/gst/VideoInputGst.cpp:1423 libmedia/gst/AudioInputGst.cpp:689
 #, c-format
-msgid "%s: Could not create video test source."
-msgstr ""
+msgid "%s: couldn't remove saveBin from pipeline"
+msgstr "%s:不能从管道移除 saveBin"
 
-#: libmedia/gst/VideoInputGst.cpp:385 libmedia/gst/AudioInputGst.cpp:117
+#: libmedia/gst/VideoInputGst.cpp:1430
 #, c-format
-msgid "%s: Could not create pulsesrc element"
-msgstr ""
+msgid "%s: videoSaveBin state change failed"
+msgstr "%s:改变 videoSaveBin 状态失败"
 
-#: libmedia/gst/VideoInputGst.cpp:390 libmedia/gst/AudioInputGst.cpp:122
+#: libmedia/gst/VideoInputGst.cpp:1453
 #, c-format
-msgid "%s: Could not get property probe from pulsesrc element"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:626
-msgid "You have an invalid camera selected. Please check your gnashrc file"
-msgstr ""
+msgid "%s: problem with creating video_save_csp element"
+msgstr "%s:创建 video_save_csp 组件出错"
 
-#: libmedia/gst/VideoInputGst.cpp:657
+#: libmedia/gst/VideoInputGst.cpp:1458
 #, c-format
-msgid "%s: Passed an invalid argument (not a valid dev_select value)"
-msgstr ""
+msgid "%s: problem with creating video_enc element"
+msgstr "%s:创建 video_enc 组件出错"
 
-#: libmedia/gst/VideoInputGst.cpp:685 libmedia/gst/AudioInputGst.cpp:220
+#: libmedia/gst/VideoInputGst.cpp:1465
 #, c-format
-msgid "%s: Pipeline bus isn't an object for some reason"
-msgstr ""
+msgid "%s: problem with creating video_save_rate element"
+msgstr "%s:创建 video_save_rate 组件出错"
 
-#: libmedia/gst/VideoInputGst.cpp:705 libmedia/gst/AudioInputGst.cpp:239
+#: libmedia/gst/VideoInputGst.cpp:1469
 #, c-format
-msgid "%s: Template pad isn't an object for some reason"
-msgstr ""
+msgid "%s: problem with creating video_save_scale element"
+msgstr "%s:创建 video_save_scale 组件出错"
 
-#: libmedia/gst/VideoInputGst.cpp:718 libmedia/gst/AudioInputGst.cpp:253
+#: libmedia/gst/VideoInputGst.cpp:1476
 #, c-format
-msgid "%s: pipeline isn't an object for some reason"
-msgstr ""
+msgid "%s: problem with creating mux element"
+msgstr "%s:创建 mux 组件出错"
 
-#: libmedia/gst/VideoInputGst.cpp:804
+#: libmedia/gst/VideoInputGst.cpp:1480
 #, c-format
-msgid "%s: type %s, cannot be handled for resolution width"
-msgstr ""
+msgid "%s: problem with creating video_file_sink element"
+msgstr "%s:创建 video_file_sink 组件出错"
 
-#: libmedia/gst/VideoInputGst.cpp:825 libmedia/gst/AudioInputGst.cpp:279
+#: libmedia/gst/VideoInputGst.cpp:1500
 #, c-format
-msgid "%s: was passed a NULL pointer"
-msgstr ""
+msgid "%s: there was some problem in linking!"
+msgstr "%s:链接时出错!"
 
-#: libmedia/gst/VideoInputGst.cpp:931 libmedia/gst/VideoInputGst.cpp:1104
-#, c-format
-msgid "%s: Creation of the webcam_source_bin failed"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:53
+msgid "MediaParserGst couldn't create a bin"
+msgstr "MediaParserGst不能创建一个bin"
 
-#: libmedia/gst/VideoInputGst.cpp:933 libmedia/gst/VideoInputGst.cpp:1106
-#: libmedia/gst/AudioInputGst.cpp:326 libmedia/gst/AudioInputGst.cpp:382
-#, c-format
-msgid "the error was %s"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:58
+msgid "MediaParserGst couldn't create a typefind element."
+msgstr "MediaParserGst不能创建一个typefind元素。"
 
-#: libmedia/gst/VideoInputGst.cpp:961
-#, c-format
-msgid "%s: webam isn't set!"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:70 libmedia/gst/MediaParserGst.cpp:74
+#: libmedia/gst/MediaParserGst.cpp:282 libmedia/gst/MediaParserGst.cpp:339
+#: libmedia/gst/MediaParserGst.cpp:493
+msgid "MediaParserGst could not change element state"
+msgstr "MediaParserGst无法改变元素的状态"
 
-#: libmedia/gst/VideoInputGst.cpp:1024
-#, c-format
+#: libmedia/gst/MediaParserGst.cpp:167
 msgid ""
-"%s: the resolution you chose isn't supported, picking                 a "
-"supported value"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1128 libmedia/gst/AudioInputGst.cpp:337
-#, c-format
-msgid "%s: couldn't drop the sourcebin back into the main bin"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1137 libmedia/gst/AudioInputGst.cpp:347
-#, c-format
-msgid "%s: couldn't link up sourcebin and tee"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1169
-#, c-format
-msgid "%s: problem creating source bin"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1176 libmedia/gst/AudioInputGst.cpp:410
-#, c-format
-msgid "%s: problem creating tee element"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1180 libmedia/gst/AudioInputGst.cpp:414
-#, c-format
-msgid "%s: problem creating save_queue element"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1185
-#, c-format
-msgid "%s: problem creating video_display_queue element"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1196
-#, c-format
-msgid "%s: couldn't link webcam_source_bin and tee"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1203
-#, c-format
-msgid "%s: couldn't link tee and save_queue"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1209
-#, c-format
-msgid "%s: couldn't link tee and video_display_queue"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1218
-#, c-format
-msgid "%s: couldn't get save_queue_src_pad"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1228
-#, c-format
-msgid "%s: couldn't get video_display_queue_pad"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1240 libmedia/gst/AudioInputGst.cpp:464
-#, c-format
-msgid "%s: Unable to create main pipeline"
-msgstr ""
-
-#: libmedia/gst/VideoInputGst.cpp:1258
-#, c-format
-msgid "%s: something went wrong creating the new video_display_bin"
-msgstr ""
+"MediaParserGst failed to read the stream, but it did not reach EOF or enter "
+"a bad state."
+msgstr "MediaParserGst无法读取流,但它并没有结束或进入不正确的状态。"
 
-#: libmedia/gst/VideoInputGst.cpp:1264
-#, c-format
-msgid "%s: problem creating video_scale element"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:184
+#, fuzzy
+msgid "MediaParserGst failed to push more data into the demuxer."
+msgstr "MediaParserGst无法推入更多的数据到分路器!定位到后面。"
 
-#: libmedia/gst/VideoInputGst.cpp:1273
+#: libmedia/gst/MediaParserGst.cpp:245
 #, c-format
-msgid "%s: problem creating the video_sink element"
-msgstr ""
+msgid "MediaParserGst/typefound: Detected media type %s"
+msgstr "MediaParserGst/ typefound:检测到媒体类型 %s"
 
-#: libmedia/gst/VideoInputGst.cpp:1282
-#, c-format
-msgid "%s: something went wrong in linking elements in video_display_bin"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:257 libmedia/gst/MediaParserGst.cpp:264
+msgid "MediaParserGst Failed to create fakesink."
+msgstr "MediaParserGst创建fakesink失败。"
 
-#: libmedia/gst/VideoInputGst.cpp:1324
-msgid "something went wrong in the make_video_display_link function"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:270
+msgid "MediaParserGst: couldn't get the fakesink src element."
+msgstr "MediaParserGst:无法得到fakesink src元素。"
 
-#: libmedia/gst/VideoInputGst.cpp:1356
-#, c-format
-msgid "%s: the unlinking of the pads failed"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:278
+msgid "MediaParserGst: couln't link fakesink"
+msgstr "MediaParserGst:无法链接fakesink"
 
-#: libmedia/gst/VideoInputGst.cpp:1386
-#, c-format
-msgid "%s: something went wrong in the make_video_display_link function"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:302
+msgid "MediaParserGst: couldn't get the typefind src element."
+msgstr "MediaParserGst:无法得到typefind src元素。"
 
-#: libmedia/gst/VideoInputGst.cpp:1416 libmedia/gst/AudioInputGst.cpp:540
-#: libmedia/gst/AudioInputGst.cpp:680
-#, c-format
-msgid "%s: unlink failed"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:317
+msgid "MediaParserGst: couldn't create the demuxer"
+msgstr "MediaParserGst:无法创建分路器"
 
-#: libmedia/gst/VideoInputGst.cpp:1423 libmedia/gst/AudioInputGst.cpp:687
-#, c-format
-msgid "%s: couldn't remove saveBin from pipeline"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:323 libmedia/gst/MediaParserGst.cpp:328
+msgid "MediaParserGst: failed adding demuxer to bin."
+msgstr "MediaParserGst:添加分路器到bin失败。"
 
-#: libmedia/gst/VideoInputGst.cpp:1430
-#, c-format
-msgid "%s: videoSaveBin state change failed"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:355
+msgid "MediaParserGst: couldn't get structure name."
+msgstr "MediaParserGst:无法得到结构的名称。"
 
-#: libmedia/gst/VideoInputGst.cpp:1453
+#: libmedia/gst/MediaParserGst.cpp:369
 #, c-format
-msgid "%s: problem with creating video_save_csp element"
-msgstr ""
+msgid "MediaParserGst: ignoring stream of type %s."
+msgstr "MediaParserGst:忽略类型 %s 的流。"
 
-#: libmedia/gst/VideoInputGst.cpp:1458
+#: libmedia/gst/MediaParserGst.cpp:393
 #, c-format
-msgid "%s: problem with creating video_enc element"
-msgstr ""
+msgid "MediaParserGst: Failed to find a parser (media: %s)."
+msgstr "MediaParserGst:无法找到一个解析器(媒体:%s)。"
 
-#: libmedia/gst/VideoInputGst.cpp:1465
-#, c-format
-msgid "%s: problem with creating video_save_rate element"
+#: libmedia/gst/MediaParserGst.cpp:402
+msgid ""
+"MediaParserGst: Failed to find a parser. We'll continue, but either audio or "
+"video will not work!"
 msgstr ""
+"MediaParserGst:无法找到一个解析器。我们将继续进行,但音频或视频将无法正常工"
+"作!"
 
-#: libmedia/gst/VideoInputGst.cpp:1469
-#, c-format
-msgid "%s: problem with creating video_save_scale element"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:411
+msgid "MediaParserGst: couldn't add parser."
+msgstr "MediaParserGst:不能添加解析器。"
 
-#: libmedia/gst/VideoInputGst.cpp:1476
-#, c-format
-msgid "%s: problem with creating mux element"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:424
+msgid "MediaParserGst: couldn't link parser."
+msgstr "MediaParserGst:不能链接解析器。"
 
-#: libmedia/gst/VideoInputGst.cpp:1480
-#, c-format
-msgid "%s: problem with creating video_file_sink element"
-msgstr ""
+#: libmedia/gst/MediaParserGst.cpp:436 libmedia/gst/MediaParserGst.cpp:469
+msgid "MediaParserGst: couldn't link \"fake\" sink."
+msgstr "MediaParserGst:无法连接“伪装”槽。"
 
-#: libmedia/gst/VideoInputGst.cpp:1500
+#: libmedia/gst/MediaParserGst.cpp:455
 #, c-format
-msgid "%s: there was some problem in linking!"
-msgstr ""
-
-#: libmedia/gst/MediaHandlerGst.cpp:90
-msgid "Wrong arguments given to GST VideoDecoder"
-msgstr ""
+msgid "MediaParserGst: Linked audio source (type: %s)"
+msgstr "MediaParserGst:链接的音频源(类型:%s)"
 
-#: libmedia/gst/MediaHandlerGst.cpp:137
+#: libmedia/gst/MediaParserGst.cpp:485
 #, c-format
-msgid "MediaHandlerGst::createAudioDecoder: %s -- %s"
-msgstr ""
+msgid "MediaParserGst: Linked video source (type: %s)"
+msgstr "MediaParserGst:链接的视频源(类型:%s)"
 
-#: libmedia/gst/AudioInputGst.cpp:100
+#: libmedia/gst/AudioInputGst.cpp:102
 #, c-format
 msgid "%s: Could not create audio test source"
-msgstr ""
+msgstr "%s:无法创建音频测试源"
 
-#: libmedia/gst/AudioInputGst.cpp:190
+#: libmedia/gst/AudioInputGst.cpp:192
 #, c-format
 msgid "%s: passed an invalid devselect argument"
-msgstr ""
+msgstr "%s:传入一个无效的 devselect 参数"
 
-#: libmedia/gst/AudioInputGst.cpp:244
+#: libmedia/gst/AudioInputGst.cpp:246
 msgid "The input device you selected isn't supported (yet)"
-msgstr ""
+msgstr "不支持您所选择的输入设备"
 
-#: libmedia/gst/AudioInputGst.cpp:270
+#: libmedia/gst/AudioInputGst.cpp:272
 #, c-format
 msgid "%s: Passed a bad devselect value"
-msgstr ""
+msgstr "%s:传入一个错误的 devselect 值"
 
-#: libmedia/gst/AudioInputGst.cpp:324 libmedia/gst/AudioInputGst.cpp:380
+#: libmedia/gst/AudioInputGst.cpp:326 libmedia/gst/AudioInputGst.cpp:382
 #, c-format
 msgid "%s: Creation of the audioSourceBin failed"
-msgstr ""
+msgstr "%s:创建 audioSourceBin 失败"
 
-#: libmedia/gst/AudioInputGst.cpp:406
+#: libmedia/gst/AudioInputGst.cpp:408
 #, c-format
 msgid "%s: audioCreateSourceBin failed!"
-msgstr ""
+msgstr "%s:audioCreateSourceBin 失败"
 
-#: libmedia/gst/AudioInputGst.cpp:419
+#: libmedia/gst/AudioInputGst.cpp:421
 #, c-format
 msgid "%s: problem creating audioPlaybackQueue element"
-msgstr ""
+msgstr "%s:创建 audioPlaybackQueue 组件出错"
 
-#: libmedia/gst/AudioInputGst.cpp:426
+#: libmedia/gst/AudioInputGst.cpp:428
 #, c-format
 msgid "%s: couldn't link audioSourceBin and tee"
-msgstr ""
+msgstr "%s:无法连接 audioSourceBin 和 tee"
 
-#: libmedia/gst/AudioInputGst.cpp:431
+#: libmedia/gst/AudioInputGst.cpp:433
 #, c-format
 msgid "%s: couldn't link tee and saveQueue"
-msgstr ""
+msgstr "%s: 无法连接 tee 和 saveQueue"
 
-#: libmedia/gst/AudioInputGst.cpp:436
+#: libmedia/gst/AudioInputGst.cpp:438
 #, c-format
 msgid "%s: couldn't link tee and audioPlaybackQueue"
-msgstr ""
+msgstr "%s: 无法连接 tee 和 audioPlaybackQueue"
 
-#: libmedia/gst/AudioInputGst.cpp:445
+#: libmedia/gst/AudioInputGst.cpp:447
 #, c-format
 msgid "%s: couldn't get saveQueueSrcPad"
-msgstr ""
+msgstr "%s: 无法得到 saveQueueSrcPad"
 
-#: libmedia/gst/AudioInputGst.cpp:455
+#: libmedia/gst/AudioInputGst.cpp:457
 #, c-format
 msgid "%s: couldn't get audioPlaybackQueue"
-msgstr ""
+msgstr "%s: 无法得到 audioPlaybackQueue"
 
-#: libmedia/gst/AudioInputGst.cpp:481
+#: libmedia/gst/AudioInputGst.cpp:483
 #, c-format
 msgid "%s: There was a problem making the audiosink!"
-msgstr ""
+msgstr "%s: 生成 audiosink 出错!"
 
-#: libmedia/gst/AudioInputGst.cpp:517
+#: libmedia/gst/AudioInputGst.cpp:519
 msgid "something went wrong in the makeSourcePlaybackLink function"
-msgstr ""
+msgstr "在makeSourcePlaybackLink函数中某处出错"
 
-#: libmedia/gst/AudioInputGst.cpp:548
+#: libmedia/gst/AudioInputGst.cpp:550
 #, c-format
 msgid "%s: couldn't remove audioPlaybackBin from pipeline"
-msgstr ""
+msgstr "%s: 无法从管道移除 audioPlaybackBin"
 
-#: libmedia/gst/AudioInputGst.cpp:555
+#: libmedia/gst/AudioInputGst.cpp:557
 #, c-format
 msgid "%s: changing state of audioPlaybackBin failed"
-msgstr ""
+msgstr "%s: 改变audioPlaybackBin状态失败"
 
-#: libmedia/gst/AudioInputGst.cpp:579
+#: libmedia/gst/AudioInputGst.cpp:581
 #, c-format
 msgid "Error: %s"
-msgstr ""
+msgstr "错误:%s"
 
-#: libmedia/gst/AudioInputGst.cpp:599
+#: libmedia/gst/AudioInputGst.cpp:601
 #, c-format
 msgid "%s: Couldn't make audioconvert element"
-msgstr ""
+msgstr "%s: 无法生成 audioconvert 组件"
 
-#: libmedia/gst/AudioInputGst.cpp:603
+#: libmedia/gst/AudioInputGst.cpp:605
 #, c-format
 msgid "%s: Couldn't make vorbisenc element"
-msgstr ""
+msgstr "%s: 无法生成 vorbisenc 组件"
 
-#: libmedia/gst/AudioInputGst.cpp:607
+#: libmedia/gst/AudioInputGst.cpp:609
 #, c-format
 msgid "%s: Couldn't make oggmux element"
-msgstr ""
+msgstr "%s: 无法生成 oggmux 组件"
 
-#: libmedia/gst/AudioInputGst.cpp:611
+#: libmedia/gst/AudioInputGst.cpp:613
 #, c-format
 msgid "%s: Couldn't make filesink element"
-msgstr ""
+msgstr "%s: 无法生成 filesink 组件"
 
-#: libmedia/gst/AudioInputGst.cpp:630
+#: libmedia/gst/AudioInputGst.cpp:632
 #, c-format
 msgid "%s: Something went wrong in linking"
-msgstr ""
+msgstr "%s: 连接发生错误"
 
-#: libmedia/gst/AudioInputGst.cpp:658
+#: libmedia/gst/AudioInputGst.cpp:660
 msgid "something went wrong in the makeAudioSourceSaveLink function"
-msgstr ""
+msgstr "在 makeAudioSourceSaveLink 函数中发生错误"
 
-#: libmedia/gst/AudioInputGst.cpp:694
+#: libmedia/gst/AudioInputGst.cpp:696
 #, c-format
 msgid "%s: audioSaveBin state change failed"
-msgstr ""
+msgstr "%s: 改变 audioSaveBin 状态失败"
 
-#: libmedia/gst/AudioInputGst.cpp:755
+#: libmedia/gst/AudioInputGst.cpp:757
 msgid "You have an invalid microphone selected. Check your gnashrc file"
-msgstr ""
+msgstr "选择了一个无效的麦克风。检查您的 gnashrc 文件"
 
-#: libmedia/AudioDecoderSimple.cpp:163
-msgid "corrupted ADPCM header"
-msgstr ""
+#: libmedia/gst/AudioDecoderGst.cpp:100
+msgid "Creating AAC decoder without extra data. This will probably fail!"
+msgstr "创建不带额外数据的AAC解码器。这可能会失败!"
 
-#: libmedia/AudioDecoderSimple.cpp:291 libmedia/AudioDecoderSimple.cpp:304
+#: libmedia/gst/AudioDecoderGst.cpp:110
 #, c-format
-msgid "AudioDecoderSimple: initialized flash codec %s (%d)"
-msgstr ""
+msgid "AudioDecoderGst: cannot handle codec %d (%s)"
+msgstr "AudioDecoderGst:不能处理编解码器%d (%s)"
 
-#: libmedia/AudioDecoderSimple.cpp:330 libmedia/AudioDecoderSimple.cpp:361
+#: libmedia/gst/AudioDecoderGst.cpp:120
 #, c-format
-msgid "AudioDecoderSimple: unsupported flash codec %d (%s)"
-msgstr ""
+msgid "AudioDecoderGst: cannot handle codec %d (no ExtraInfoGst attached)"
+msgstr "AudioDecoderGst:不能处理编解码器%d (没有附加ExtraInfoGst)"
 
-#: libmedia/AudioDecoderSimple.cpp:341
-#, c-format
-msgid "AudioDecoderSimple: unable to intepret custom audio codec id %s"
+#: libmedia/gst/AudioDecoderGst.cpp:149
+msgid ""
+"The best available resampler is 'audioresample'. Please install gstreamer-"
+"ffmpeg 0.10.4 or newer, or you may experience long delays in audio playback!"
 msgstr ""
+"最好用的采样器是'audioresample“。请安装gstreamer-ffmpeg 0.10.4或更高版本,否"
+"则可能在音频播放时会遇到长时间的延迟!"
 
-#: libmedia/AudioDecoderSimple.cpp:428
-msgid "Host endianness not detected in AudioDecoderSimple"
-msgstr ""
+#: libmedia/gst/AudioDecoderGst.cpp:168 libmedia/gst/AudioDecoderGst.cpp:188
+msgid "AudioDecoderGst: internal error (caps creation failed)"
+msgstr "AudioDecoderGst:内部错误(caps创建失败)"
 
-#: libmedia/AudioDecoderSimple.cpp:478
-msgid "Error in sound sample conversion"
-msgstr ""
+#: libmedia/gst/AudioDecoderGst.cpp:175
+#, c-format
+msgid "Couldn't find a plugin for audio type %s!"
+msgstr "无法找到一个音频类型 %s的插件!"
 
-#: libmedia/MediaHandler.cpp:49
-msgid "MediaHandler::isFLV: Could not read 3 bytes from input stream"
-msgstr ""
+#: libmedia/gst/AudioDecoderGst.cpp:199
+#, c-format
+msgid "AudioDecoderGst: initialisation failed for audio type %s!"
+msgstr "AudioDecoderGst:无法初始化音频类型%s!"
 
-#: libmedia/MediaHandler.cpp:65
-msgid ""
-"MediaHandler::createMediaParser: only FLV input is supported by this "
-"MediaHandler"
-msgstr ""
+#: libmedia/gst/AudioDecoderGst.cpp:227
+msgid "Pushed data, but there's nothing to pull (yet)"
+msgstr "数据已放入,但还没有可以取出的。"
 
-#: libmedia/MediaHandler.cpp:71
+#: libmedia/gst/AudioDecoderGst.cpp:263 libmedia/gst/AudioDecoderGst.cpp:291
+msgid "AudioDecoderGst: buffer push failed."
+msgstr "AudioDecoderGst:放入缓冲区失败。"
+
+#: libmedia/haiku/MediaHandlerHaiku.cpp:115
 #, c-format
-msgid "Exception while reading from stream: %s"
-msgstr ""
+msgid "MediaHandlerHaiku::createAudioDecoder: %s -- %s"
+msgstr "MediaHandlerHaiku::createAudioDecoder: %s -- %s"
 
-#: libmedia/MediaHandler.cpp:108
+#: libmedia/MediaParser.cpp:83
+msgid "No ID3 support implemented in this MediaParser"
+msgstr "该MediaParser没有实现ID3支持"
+
+#: libcore/abc/AbcBlock.cpp:65 libcore/abc/AbcBlock.cpp:133
+msgid "ABC: Finalizing trait yielded bad type for slot."
+msgstr "ABC: 最终特征产生错误通道类型。"
+
+#: libcore/abc/AbcBlock.cpp:188
+msgid "ABC: Bad name for trait."
+msgstr "ABC: 错误的特征名称。"
+
+#: libcore/abc/AbcBlock.cpp:193
+msgid "ABC: Trait name must be fully qualified."
+msgstr "ABC: 特征名称必须完全符合。"
+
+#: libcore/abc/AbcBlock.cpp:240 libcore/abc/AbcBlock.cpp:266
+msgid "Bad method id in trait."
+msgstr "特征中错误的方法ID。"
+
+#: libcore/abc/AbcBlock.cpp:256
+msgid "Bad Class id in trait."
+msgstr "特征中错误的类id。"
+
+#: libcore/abc/AbcBlock.cpp:274
+msgid "ABC: Unknown type of trait."
+msgstr "ABC: 未知的特征类型。"
+
+#: libcore/abc/AbcBlock.cpp:468
 #, c-format
-msgid ""
-"MediaHandler::createFlashAudioDecoder: no available flash decoders for codec "
-"%d (%s)"
-msgstr ""
+msgid "Abc Version: %d.%d"
+msgstr "Abc 版本: %d.%d"
+
+#: libcore/abc/AbcBlock.cpp:567
+msgid "ABC: Bad string given for namespace."
+msgstr "ABC: 错误的命名空间字符串。"
+
+#: libcore/abc/AbcBlock.cpp:609
+msgid "ABC: Bad namespace for namespace set."
+msgstr "ABC: 错误命名空间的命名空间集。"
 
-#: libcore/ExternalInterface.cpp:133
+#: libcore/abc/AbcBlock.cpp:679
 #, c-format
-msgid "Can't convert unknown type %d"
-msgstr ""
+msgid "Action Block: Unknown multiname type (%d)."
+msgstr "操作区块: 未知的多名称类型 (%d)。"
 
-#: libcore/as_value.cpp:768
+#: libcore/abc/AbcBlock.cpp:712 libcore/abc/AbcBlock.cpp:722
+#: libcore/abc/AbcBlock.cpp:732 libcore/abc/AbcBlock.cpp:742
+msgid "Action Block: Bad index in optional argument."
+msgstr "操作区块: 可选参数的错误索引。"
+
+#: libcore/abc/AbcBlock.cpp:752
+msgid "ABC: Bad index in optional argument, namespaces."
+msgstr "ABC: 可选参数,命名空间中的错误索引。"
+
+#: libcore/abc/AbcBlock.cpp:774
 #, c-format
-msgid "serialization of as_value of type %d"
-msgstr ""
+msgid "ABC: Bad default value type (%X), but continuing."
+msgstr "ABC: 错误的缺省值类型 (%X), 可以继续。"
 
-#: libcore/ClassHierarchy.cpp:85
+#: libcore/abc/AbcBlock.cpp:812
+msgid "ABC: Bad return type for method info."
+msgstr "ABC: 方法信息的错误返回类型。"
+
+#: libcore/abc/AbcBlock.cpp:825
+msgid "ABC: Unknown return type."
+msgstr "ABC: 未知的返回类型。"
+
+#: libcore/abc/AbcBlock.cpp:842
+msgid "ABC: Bad parameter type in method."
+msgstr "ABC: 方法中错误的参数类型。"
+
+#: libcore/abc/AbcBlock.cpp:851
+msgid "ABC: Unknown parameter type."
+msgstr "ABC: 未知的参数类型。"
+
+#: libcore/abc/AbcBlock.cpp:940
+msgid "ABC: Out of bounds instance name."
+msgstr "ABC: 超出边界的实例名称。"
+
+#: libcore/abc/AbcBlock.cpp:948
+msgid "ABC: QName required for instance."
+msgstr "ABC: 实例所需的 QName。"
+
+#: libcore/abc/AbcBlock.cpp:953
+msgid "ABC: No namespace to use for storing class."
+msgstr "ABC: 没有用于存放类的命名空间。"
+
+#: libcore/abc/AbcBlock.cpp:968
+msgid "Duplicate class registration."
+msgstr "重复的类注册。"
+
+#: libcore/abc/AbcBlock.cpp:984
+msgid "ABC: Bad super type."
+msgstr "ABC: 错误的超类。"
+
+#: libcore/abc/AbcBlock.cpp:995
 #, c-format
-msgid "Native class %s is not an object after initialization (%s)"
-msgstr ""
+msgid "ABC: Super type not found (%s)"
+msgstr "ABC: 未找到超类 (%s)"
 
-#: libcore/ClassHierarchy.cpp:92
+#: libcore/abc/AbcBlock.cpp:1002
+msgid "ABC: Can't extend a class which is final."
+msgstr "ABC: 无法extend 一个 final 类。"
+
+#: libcore/abc/AbcBlock.cpp:1008
+msgid "ABC: Can't extend an interface type."
+msgstr "ABC: 无法 extend 一个接口类型。"
+
+#: libcore/abc/AbcBlock.cpp:1014
+msgid "ABC: Class cannot be its own supertype."
+msgstr "ABC: 类不能为它自己的超类。"
+
+#: libcore/abc/AbcBlock.cpp:1035
+msgid "ABC: Bad namespace for protected."
+msgstr "ABC: 错误的 protected 命名空间。"
+
+#: libcore/abc/AbcBlock.cpp:1054
+msgid "ABC: Bad name for interface."
+msgstr "ABC: 错误的接口名称。"
+
+#: libcore/abc/AbcBlock.cpp:1061
+msgid "ABC: Can't implement a non-interface type."
+msgstr "ABC: 无法实现一个非接口类型。"
+
+#: libcore/abc/AbcBlock.cpp:1073
+msgid "ABC: Out of bounds method for initializer."
+msgstr "ABC: 超出边界的初始化方法。"
+
+#: libcore/abc/AbcBlock.cpp:1108
+msgid "ABC: Out of bound static constructor for class."
+msgstr "ABC: 超出边界的类的静态构造函数。"
+
+#: libcore/abc/AbcBlock.cpp:1147
+msgid "ABC: Out of bounds method for script."
+msgstr "ABC: 超出边界的脚本方法。"
+
+#: libcore/abc/AbcBlock.cpp:1183
+msgid "ABC: Out of bounds for method body."
+msgstr "ABC: 超出边界的主体方法。"
+
+#: libcore/abc/AbcBlock.cpp:1190
+msgid "ABC: Only one body per method."
+msgstr "ABC: 每个方法只有一个主体。"
+
+#: libcore/abc/AbcBlock.cpp:1236
+msgid "ABC: Out of bound type for exception."
+msgstr "ABC: 超出边界的异常类型。"
+
+#: libcore/abc/AbcBlock.cpp:1246
 #, c-format
-msgid "Native class %s is not found after initialization"
-msgstr ""
+msgid "ABC: Unknown type of object to catch. (%s)"
+msgstr "ABC: 捕获的未知对象类型。 (%s)"
+
+#: libcore/abc/AbcBlock.cpp:1264
+msgid "ABC: Out of bound name for caught exception."
+msgstr "ABC: 超出边界的捕获异常的名称。"
 
-#: libcore/MovieLoader.cpp:259
+#: libcore/ExternalInterface.cpp:137
 #, c-format
-msgid "Can't create Movie instance for definition loaded from %s"
-msgstr ""
+msgid "Can't convert unknown type %d"
+msgstr "无法转换未知类型 %d"
 
-#: libcore/FreetypeGlyphsProvider.cpp:254
+#: libcore/MovieClip.cpp:621
 #, c-format
-msgid "Can't init FreeType! Error = %d"
-msgstr ""
+msgid "call_frame('%s') -- invalid frame"
+msgstr "call_frame('%s') -- 不合法的帧"
+
+#: libcore/MovieClip.cpp:667
+msgid "Can't clone root of the movie"
+msgstr "无法克隆该电影的根节点"
 
-#: libcore/FreetypeGlyphsProvider.cpp:266
+#: libcore/MovieClip.cpp:675
 #, c-format
-msgid "Can't close FreeType! Error = %d"
-msgstr ""
+msgid "%s parent is not a movieclip, can't clone"
+msgstr "%s 父节点不是一个电影片段, 无法克隆"
 
-#: libcore/FreetypeGlyphsProvider.cpp:280
+#: libcore/MovieClip.cpp:852
+msgid "MovieClip.unloadMovie()"
+msgstr "MovieClip.unloadMovie()"
+
+#: libcore/MovieClip.cpp:885
 #, c-format
-msgid "Failed to find fonts directory, using hard-coded font filename \"%s\""
+msgid "advance_movieclip: no frames loaded for movieclip/movie %s"
+msgstr "advance_movieclip: 没有加载电影片段/电影 %s 的帧"
+
+#: libcore/MovieClip.cpp:935
+msgid ""
+"Flushing orphaned tags in movieclip %1%. _currentFrame:%2%, _hasLooped:%3%, "
+"frame_count:%4%"
 msgstr ""
+"立即写入单独的标签到电影片段 %1%. _currentFrame:%2%, _hasLooped:%3%, "
+"frame_count:%4%"
 
-#: libcore/FreetypeGlyphsProvider.cpp:293
+#: libcore/MovieClip.cpp:1046
 #, c-format
-msgid "Can't init fontconfig library, using hard-coded font filename \"%s\""
-msgstr ""
+msgid "Executing %d tags in frame %d/%d of movieclip %s"
+msgstr "执行 %d 标签,帧 %d/%d,电影片段 %s"
 
-#: libcore/FreetypeGlyphsProvider.cpp:355
+#: libcore/MovieClip.cpp:1084 libcore/MovieClip.cpp:1125
 #, c-format
-msgid "No device font matches the name '%s', using hard-coded font filename"
+msgid ""
+"Target frame of a gotoFrame(%d) was never loaded, although frame count in "
+"header (%d) said we should have found it"
 msgstr ""
+"一个 gotoFrame(%d) 的目标帧从未被加载,尽管头部的帧数(%d) 告诉我们应该已经找"
+"到改帧"
 
-#: libcore/FreetypeGlyphsProvider.cpp:360
+#: libcore/MovieClip.cpp:1116
+#, c-format
 msgid ""
-"Font filename matching not implemented (no fontconfig support built-in), "
-"using hard-coded font filename"
+"GotoFrame(%d) targets a yet to be loaded frame (%d). We'll wait for it but a "
+"more correct form is explicitly using WaitForFrame instead"
 msgstr ""
+"GotoFrame(%d) 将跳转到一个还已加载的帧 (%d)。我们将等待,但使用WaitForFrame会"
+"是一个更加正确的方式"
 
-#: libcore/FreetypeGlyphsProvider.cpp:393
-msgid "Freetype not supported"
-msgstr ""
+#: libcore/MovieClip.cpp:1189
+#, c-format
+msgid "MovieClip::goto_labeled_frame('%s') unknown label"
+msgstr "MovieClip::goto_labeled_frame('%s') 未知的标记"
 
-#: libcore/FreetypeGlyphsProvider.cpp:434
+#: libcore/MovieClip.cpp:1248
 #, c-format
-msgid "Can't find font file for font '%s'"
-msgstr ""
+msgid "MovieClip::add_display_object(): unknown cid = %d"
+msgstr "MovieClip::add_display_object(): 未知 cid = %d"
 
-#: libcore/FreetypeGlyphsProvider.cpp:447
+#: libcore/MovieClip.cpp:1318
 #, c-format
-msgid "Font file '%s' has bad format"
-msgstr ""
+msgid "movieclip::replace_display_object(): unknown cid = %d"
+msgstr "movieclip::replace_display_object(): 未知 cid = %d"
 
-#: libcore/FreetypeGlyphsProvider.cpp:456
+#: libcore/MovieClip.cpp:1327
 #, c-format
-msgid "Some error opening font '%s'"
+msgid ""
+"MovieClip::replace_display_object: could not find any DisplayObject at depth "
+"%d"
 msgstr ""
+"MovieClip::replace_display_object: 无法找到任何在深度 %d 的DisplayObject"
 
-#: libcore/FreetypeGlyphsProvider.cpp:490
+#: libcore/MovieClip.cpp:1905
 #, c-format
-msgid "Error loading freetype outline glyph for char '%c' (error: %d)"
-msgstr ""
+msgid "Could not load variables from %s"
+msgstr "无法从 %s 加载变量"
 
-#: libcore/FreetypeGlyphsProvider.cpp:506
+#: libcore/MovieClip.cpp:1958
 #, c-format
 msgid ""
-"FT_Load_Char() returned a glyph format != FT_GLYPH_FORMAT_OUTLINE (%c%c%c%c)"
+"removeMovieClip(%s): movieclip depth (%d) out of the 'dynamic' zone "
+"[0..1048575], won't remove"
 msgstr ""
+"removeMovieClip(%s): 电影片段深度 (%d) 超出该 'dynamic' 区域 [0..1048575], 不"
+"会删除"
 
-#: libcore/FreetypeGlyphsProvider.cpp:561
-msgid "Could not release FT face resources"
-msgstr ""
+#: libcore/movie_root.cpp:238
+#, c-format
+msgid "ActionParserException thrown during setRootMovie: %s"
+msgstr "ActionParserException 发生在 setRootMovie 时: %s"
 
-#: libcore/swf/DefineShapeTag.cpp:58
+#: libcore/movie_root.cpp:253
 #, c-format
-msgid "DefineShapeTag(%s): id = %d"
-msgstr ""
-
-#: libcore/swf/VideoFrameTag.cpp:47
-#, c-format
-msgid "VideoFrame tag refers to unknown video stream id %d"
-msgstr ""
+msgid "No user interface registered, assuming 'Yes' answer to question: %s"
+msgstr "没有注册用户接口, 假设用‘是’来回答问题: %s"
 
-#: libcore/swf/VideoFrameTag.cpp:57
+#: libcore/movie_root.cpp:402 libcore/movie_root.cpp:412
 #, c-format
-msgid "VideoFrame tag refers to a non-video DisplayObject %d (%s)"
+msgid ""
+"%s.swapDepth(%d): movie has a depth (%d) below static depth zone (%d), won't "
+"swap its depth"
 msgstr ""
+"%s.swapDepth(%d): 影片有一个深度 (%d) 在静态深度区域 (%d)以下, 将不会交换深度"
 
-#: libcore/swf/VideoFrameTag.cpp:90
+#: libcore/movie_root.cpp:470
 msgid ""
-"Could not read enough bytes when parsing VideoFrame tag. Perhaps we reached "
-"the end of the stream!"
-msgstr ""
+"movie_root::dropLevel called against a movie not found in the levels "
+"container"
+msgstr "movie_root::dropLevel 调用时在各级容器中没有发现影片"
 
-#: libcore/swf/DefineTextTag.cpp:52
-#, c-format
-msgid "DefineTextTag, id = %d"
-msgstr ""
+#: libcore/movie_root.cpp:477
+msgid "Original root movie can't be removed"
+msgstr "不能删除原始的根节点影片"
 
-#: libcore/swf/DefineTextTag.cpp:93
+#: libcore/movie_root.cpp:496
 #, c-format
-msgid "Text DisplayObject, id = %d"
-msgstr ""
+msgid ""
+"TESTME: loadMovie called on level %d which is not available at load time, "
+"skipped placement for now"
+msgstr "TESTME: loadMovie 在加载时不可用的 %d 级上被调用,跳过现在位置"
 
-#: libcore/swf/DefineTextTag.cpp:112
+#: libcore/movie_root.cpp:627
 #, c-format
-msgid "begin text records for DefineTextTag %p"
-msgstr ""
+msgid "ActionLimits hit notifying key listeners: %s."
+msgstr "ActionLimits 点正在通知关键监听者: %s."
 
-#: libcore/swf/DefaultTagLoaders.cpp:94
-#, c-format
+#: libcore/movie_root.cpp:865
 msgid ""
-"Undocumented tag %s encountered. Please report this to the Gnash developers!"
-msgstr ""
-
-#: libcore/swf/DefineFontTag.cpp:60
-msgid "reading code table at offset %1%, %2% glyphs"
-msgstr ""
+"movie_root tracking a streaming sound, but the sound handler is not "
+"streaming!"
+msgstr "movie_root 正在处理一个声音流, 但该声音处理程序不在流状态!"
 
-#: libcore/swf/DefineFontTag.cpp:120
-msgid "reading DefineFont"
-msgstr ""
+#: libcore/movie_root.cpp:897
+msgid ""
+"Time exceeded (%1% secs) while attempting to catch up to streaming sound. "
+"Give up on synchronization?"
+msgstr "试图赶上声音流但时间超出 (%1% 秒)。放弃同步吗?"
 
-#: libcore/swf/DefineFontTag.cpp:157
-msgid "Glyphs offset table corrupted in DefineFont tag"
-msgstr ""
+#: libcore/movie_root.cpp:949
+#, c-format
+msgid "Buffer overread during advance: %s"
+msgstr "高级期缓冲区预读:%s"
 
-#: libcore/swf/DefineFontTag.cpp:172
-msgid "reading DefineFont2 or DefineFont3"
-msgstr ""
+#: libcore/movie_root.cpp:1068
+#, c-format
+msgid "ActionLimits hit notifying mouse events: %s."
+msgstr "ActionLimits 点正在通知鼠标事件: %s。"
 
-#: libcore/swf/DefineFontTag.cpp:225 libcore/swf/DefineFontTag.cpp:237
+#: libcore/movie_root.cpp:1560
 #, c-format
-msgid "Glyph %d at offset %u"
-msgstr ""
+msgid "Couldn't process ExternalInterface Call %s"
+msgstr "无法处理外部接口调用 %s"
 
-#: libcore/swf/DefineFontTag.cpp:254
-msgid "Glyphs offset table corrupted in DefineFont2/3 tag"
-msgstr ""
+#: libcore/movie_root.cpp:1605
+msgid "ExternalInterface::GotoFrame()"
+msgstr "ExternalInterface::GotoFrame()"
 
-#: libcore/swf/DefineFontTag.cpp:266
-msgid "Bad offset in DefineFont2"
-msgstr ""
+#: libcore/movie_root.cpp:1613
+msgid "ExternalInterface::LoadMovie()"
+msgstr "ExternalInterface::LoadMovie()"
 
-#: libcore/swf/DefineFontTag.cpp:325
-msgid "Repeated kerning pair found - ignoring"
-msgstr ""
+#: libcore/movie_root.cpp:1682 gui/Player.cpp:716
+#, c-format
+msgid "Could not write to user-provided host requests fd %d: %s"
+msgstr "无法写入用户提供的主机请求文件描述符 %d:%s"
 
-#: libcore/swf/DefineFontTag.cpp:344
+#: libcore/movie_root.cpp:1843 libcore/movie_root.cpp:1875
+#: libcore/movie_root.cpp:1931
 #, c-format
-msgid "DefineFontInfo tag loader: can't find font with id %d"
-msgstr ""
+msgid "Could not write to browser fd #%d: %s"
+msgstr "无法写入浏览器文件描述符 #%d: %s"
 
-#: libcore/swf/DefineFontTag.cpp:352
-msgid "DefineFontInfo2 partially implemented"
-msgstr ""
+#: libcore/movie_root.cpp:2189
+#, c-format
+msgid "Fork failed launching URL opener '%s'"
+msgstr "启动 URL 打开程序 '%s' 失败"
 
-#: libcore/swf/CSMTextSettingsTag.cpp:77
+#: libcore/movie_root.cpp:2236
 #, c-format
-msgid ""
-"  CSMTextSettings: TextID=%d, FlashType=%d, GridFit=%d, Thickness=%d, "
-"Sharpness=%d"
-msgstr ""
+msgid "Could only write %d bytes to fd #%d"
+msgstr "只能写 %d 字节到文件描述符 #%d"
 
-#: libcore/swf/CSMTextSettingsTag.cpp:85
-msgid "CSMTextSettings"
-msgstr ""
+#: libcore/movie_root.cpp:2324
+msgid "Live MovieClips"
+msgstr "现场影片剪辑"
 
-#: libcore/swf/TextRecord.cpp:52
-msgid "end text records"
-msgstr ""
+#: libcore/movie_root.cpp:2453
+#, fuzzy, c-format
+msgid "%s to UTF8 conversion in LoadableObject input parsing"
+msgstr "在 LoadableObject 输入解析中转换 %s 到 utf8"
 
-#: libcore/swf/TextRecord.cpp:78
+#: libcore/movie_root.cpp:2476
 #, c-format
-msgid "  has_font: font id = %d (%p)"
-msgstr ""
-
-#: libcore/swf/TextRecord.cpp:90
-msgid "  hasColor"
-msgstr ""
+msgid ""
+"Hosting application registered no callback for events/queries, can't call %s"
+"(%s)"
+msgstr "托管应用程序注册无事件/查询的回调,不能调用 %s(%s)"
 
-#: libcore/swf/TextRecord.cpp:99
+#: libcore/parser/TypesParser.cpp:145
 #, c-format
-msgid "  xOffset = %g"
-msgstr ""
+msgid "Invalid rectangle: minx=%g maxx=%g miny=%g maxy=%g"
+msgstr "不合法矩形: minx=%g maxx=%g miny=%g maxy=%g"
 
-#: libcore/swf/TextRecord.cpp:108
+#: libcore/parser/TypesParser.cpp:161
 #, c-format
-msgid "  yOffset = %g"
-msgstr ""
+msgid "  FillStyle read type = 0x%X"
+msgstr "FillStyle 读取类型 = 0x%X"
 
-#: libcore/swf/TextRecord.cpp:117
+#: libcore/parser/TypesParser.cpp:207
 #, c-format
-msgid "  textHeight = %g"
-msgstr ""
+msgid "  gradients count: %d"
+msgstr "梯度数: %d"
 
-#: libcore/swf/TextRecord.cpp:126
+#: libcore/parser/TypesParser.cpp:212
+msgid "No gradients!"
+msgstr "没有梯度!"
+
+#: libcore/parser/TypesParser.cpp:266
+msgid "Illegal spread mode in gradient definition."
+msgstr "梯度定义中非法的扩散模式。"
+
+#: libcore/parser/TypesParser.cpp:283
+msgid "Illegal interpolation mode in gradient definition."
+msgstr "梯度定义中非法的插值模式。"
+
+#: libcore/parser/TypesParser.cpp:408
 #, c-format
-msgid "  GlyphEntries: count = %d"
-msgstr ""
+msgid "  color: %s"
+msgstr "颜色: %s"
 
-#: libcore/swf/TextRecord.cpp:138
+#: libcore/parser/SWFParser.cpp:90
+msgid "SHOWFRAME tag"
+msgstr "SHOWFRAME 标签"
+
+#: libcore/parser/SWFParser.cpp:100
 #, c-format
-msgid "   glyph%d: index=%d, advance=%g"
-msgstr ""
+msgid ""
+"Encountered unknown tag %d. These usually store creation tool data and do "
+"not affect playback"
+msgstr "遇到未知的标签 %d。这些通常存放创建工具的数据,并且不影响回放"
 
-#: libcore/swf/StartSoundTag.cpp:56
+#: libcore/parser/SWFParser.cpp:105
 #, c-format
-msgid "start_sound_loader: sound_id %d is not defined"
-msgstr ""
+msgid "tag dump follows: %s"
+msgstr "标记转储如下:%s"
 
-#: libcore/swf/StartSoundTag.cpp:64
+#: libcore/parser/SWFParser.cpp:113
 #, c-format
-msgid "StartSound: id=%d"
-msgstr ""
+msgid "Parsing exception: %s"
+msgstr "解析异常:%s"
 
-#: libcore/swf/StartSoundTag.cpp:114
-msgid "STARTSOUND2 tag not parsed and not used"
-msgstr ""
+#: libcore/parser/SWFParser.cpp:151 libcore/SWFStream.cpp:302
+#: libcore/SWFStream.cpp:320 libcore/SWFStream.cpp:353
+#: libcore/SWFStream.cpp:384
+msgid "Unexpected end of stream while reading"
+msgstr "读取时流意外结束"
 
-#: libcore/swf/DefineButtonSoundTag.cpp:52
+#: libcore/parser/sprite_definition.cpp:64
 #, c-format
-msgid "DEFINEBUTTONSOUND refers to an unknown DisplayObject def %d"
-msgstr ""
+msgid "  frames = %d"
+msgstr "帧 = %d"
 
-#: libcore/swf/DefineButtonSoundTag.cpp:63
+#: libcore/parser/sprite_definition.cpp:77
 #, c-format
 msgid ""
-"DEFINEBUTTONSOUND refers to DisplayObject id %d, a %s (expected a button "
-"DisplayObject)"
-msgstr ""
+"%d frames advertised in header, but only %d SHOWFRAME tags found in define "
+"sprite."
+msgstr "在头部 %d 帧被声明, 但在限定精灵中只发现了 %d SHOWFRAME 标签。"
 
-#: libcore/swf/DefineButtonSoundTag.cpp:73
-msgid "Attempt to redefine button sound ignored"
-msgstr ""
+#: libcore/parser/sprite_definition.cpp:87
+msgid "  -- sprite END --"
+msgstr "-- 精灵 结束 --"
 
-#: libcore/swf/DefineButtonSoundTag.cpp:99
+#: libcore/parser/SWFMovieDefinition.cpp:255
 #, c-format
-msgid "sound tag not found, sound_id=%d, button state #=%i"
-msgstr ""
+msgid "Add sound sample %d assigning id %d"
+msgstr "添加声音样本  %d 分配id %d"
 
-#: libcore/swf/tag_loaders.cpp:83
-msgid "anchor-labeled frame not supported"
-msgstr ""
+#: libcore/parser/SWFMovieDefinition.cpp:284
+msgid ""
+"gnash::SWFMovieDefinition::read() -- file does not start with a SWF header"
+msgstr "gnash::SWFMovieDefinition::read() -- 文件没有以一个 SWF 头部开始"
 
-#: libcore/swf/tag_loaders.cpp:87
+#: libcore/parser/SWFMovieDefinition.cpp:291
 #, c-format
-msgid "frame_label_loader end position %d, read up to %d"
+msgid "version: %d, file_length: %d"
+msgstr "版本: %d, 文件长度: %d"
+
+#: libcore/parser/SWFMovieDefinition.cpp:296
+#, fuzzy
+msgid ""
+"SWFMovieDefinition::read(): unable to read zipped SWF data; Gnash was "
+"compiled without zlib support"
 msgstr ""
+"SWFMovieDefinition::read(): 无法读取已压缩的 SWF 数据; 编译gnash时没有加入 "
+"zlib 支持"
 
-#: libcore/swf/tag_loaders.cpp:107
+#: libcore/parser/SWFMovieDefinition.cpp:301
+msgid "file is compressed"
+msgstr "文件被压缩"
+
+#: libcore/parser/SWFMovieDefinition.cpp:320
+msgid "non-finite movie bounds"
+msgstr "无限的影片边界"
+
+#: libcore/parser/SWFMovieDefinition.cpp:336
 #, c-format
-msgid "  sprite:  char id = %d"
-msgstr ""
+msgid "frame size = %s, frame rate = %f, frames = %d"
+msgstr "帧大小 = %s, 帧速率 = %f, 帧数 = %d"
 
-#: libcore/swf/tag_loaders.cpp:118
-msgid ""
-"Nested DEFINESPRITE tags. Will add to top-level DisplayObjects dictionary."
-msgstr ""
+#: libcore/parser/SWFMovieDefinition.cpp:360
+msgid "Could not start loading thread"
+msgstr "无法启动加载​​线程"
 
-#: libcore/swf/tag_loaders.cpp:128
+#: libcore/parser/SWFMovieDefinition.cpp:431
 #, c-format
-msgid "Sprite %d advertise no frames"
-msgstr ""
+msgid "Could not find char %d, dump is: %s"
+msgstr "无法找到字符 %d, 转储是: %s"
 
-#: libcore/swf/tag_loaders.cpp:168
+#: libcore/parser/SWFMovieDefinition.cpp:490
+msgid "Error while parsing SWF stream."
+msgstr "解析 SWF 流时出错。"
+
+#: libcore/parser/SWFMovieDefinition.cpp:502
 #, c-format
-msgid "DEFINESOUNDLOADER: sound sample rate %d (expected 0 to %u)"
-msgstr ""
+msgid "%d control tags are NOT followed by a SHOWFRAME tag"
+msgstr "%d 控制标签没有跟随一个 SHOWFRAME 标签"
 
-#: libcore/swf/tag_loaders.cpp:188
+#: libcore/parser/SWFMovieDefinition.cpp:510
 #, c-format
 msgid ""
-"define sound: ch=%d, format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, delay=%d"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:216
-msgid "Tag boundary reported past end of SWFStream!"
+"%d frames advertised in header, but only %d SHOWFRAME tags found in stream. "
+"Pretending we loaded all advertised frames"
 msgstr ""
+"在头部 %d 帧被声明, 但在流中只发现了 %d SHOWFRAME 标签。假装我们已加载所有已"
+"声明的帧"
 
-#: libcore/swf/tag_loaders.cpp:236
+#: libcore/parser/SWFMovieDefinition.cpp:538
 #, c-format
 msgid ""
-"There is no sound handler currently active, so DisplayObject with id %d will "
-"not be added to the dictionary"
-msgstr ""
+"number of SHOWFRAME tags in SWF stream '%s' (%d) exceeds the advertised "
+"number in header (%d)."
+msgstr "SWF 流中 SHOWFRAME 标签 '%s' (%d) 超出在头部声明的数目 (%d)。"
 
-#: libcore/swf/tag_loaders.cpp:269
+#: libcore/parser/SWFMovieDefinition.cpp:605
+msgid "More than one JPEGTABLES tag found: not resetting JPEG loader"
+msgstr "发现超过一个 JPEGTABLES 标签: 不重设 JPEG 加载器"
+
+#: libcore/parser/SWFMovieDefinition.cpp:745
 #, c-format
-msgid "File attributes: metadata=%s network=%s"
-msgstr ""
+msgid "import error: could not find resource '%s' in movie '%s'"
+msgstr "导入错误: 无法找到资源 '%s' 在影片 '%s' 中"
 
-#: libcore/swf/tag_loaders.cpp:270 libcore/swf/tag_loaders.cpp:271
-msgid "true"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:270 libcore/swf/tag_loaders.cpp:271
-msgid "false"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:275
-msgid ""
-"FileAttributes tag in the SWF requests that network access is not granted to "
-"this movie (or application?) when loaded from the filesystem. Anyway Gnash "
-"won't care; use white/black listing in your .gnashrc instead"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:283
-msgid ""
-"This SWF file requires AVM2: there will be no ActionScript interpretation"
-msgstr ""
-
-#: libcore/swf/tag_loaders.cpp:308
+#: libcore/parser/filter_factory.cpp:54
 #, c-format
-msgid ""
-"  RDF metadata (information only): [[\n"
-"%s\n"
-"]]"
-msgstr ""
+msgid "   number of filters: %d"
+msgstr "滤镜数: %d"
 
-#: libcore/swf/tag_loaders.cpp:324
+#: libcore/parser/filter_factory.cpp:92
 #, c-format
-msgid "Descriptive metadata from movie %s: %s"
-msgstr ""
+msgid "Invalid filter type %d."
+msgstr "不合法滤镜类型 %d。"
 
-#: libcore/swf/tag_loaders.cpp:386
+#: libcore/parser/filter_factory.cpp:102
 #, c-format
-msgid "  reflex = \"%c%c%c\""
-msgstr ""
+msgid "Filter %d could not read."
+msgstr "无法读取滤镜 %d。"
 
-#: libcore/swf/DefineFontAlignZonesTag.cpp:54
+#: libcore/parser/filter_factory.cpp:134
 #, c-format
-msgid "DefineFontAlignZones tag references an undefined font %d"
-msgstr ""
+msgid "   DropShadowFilter: blurX=%f blurY=%f"
+msgstr "阴影滤镜: blurX=%f blurY=%f"
 
-#: libcore/swf/DefineFontAlignZonesTag.cpp:73
+#: libcore/parser/filter_factory.cpp:153
 #, c-format
-msgid "DefineFontAlignZones: font=%d, flags=%d, table int: %s"
-msgstr ""
+msgid "   BlurFilter: blurX=%f blurY=%f quality=%d"
+msgstr "模糊滤镜: blurX=%f blurY=%f quality=%d"
 
-#: libcore/swf/DefineFontAlignZonesTag.cpp:110
-msgid "DefineFontAlignZoneTag"
-msgstr ""
+#: libcore/parser/filter_factory.cpp:180
+msgid "   GlowFilter "
+msgstr "发光滤镜"
 
-#: libcore/swf/ShapeRecord.cpp:274
-#, c-format
-msgid "  bound SWFRect: %s"
-msgstr ""
+#: libcore/parser/filter_factory.cpp:218
+msgid "   BevelFilter "
+msgstr "斜角滤镜"
 
-#: libcore/swf/ShapeRecord.cpp:301
-#, c-format
-msgid "  ShapeRecord(%s): fillbits %d, linebits %d"
-msgstr ""
+#: libcore/parser/filter_factory.cpp:265
+msgid "   GradientGlowFilter "
+msgstr "渐变发光滤镜"
 
-#: libcore/swf/ShapeRecord.cpp:379
-#, c-format
-msgid "  Shape read: moveto %d %d"
-msgstr ""
+#: libcore/parser/filter_factory.cpp:301
+msgid "   ConvolutionFilter "
+msgstr "回旋滤镜"
 
-#: libcore/swf/ShapeRecord.cpp:400
-#, c-format
-msgid ""
-"Invalid fill style %d in fillStyle0Change record for font tag (0 or 1 "
-"valid). Set to 0."
-msgstr ""
+#: libcore/parser/filter_factory.cpp:318
+msgid "   ColorMatrixFilter: "
+msgstr "彩色矩阵滤镜"
 
-#: libcore/swf/ShapeRecord.cpp:410
+#: libcore/parser/filter_factory.cpp:319 libcore/parser/filter_factory.cpp:322
+#: libcore/parser/filter_factory.cpp:325 libcore/parser/filter_factory.cpp:328
 #, c-format
-msgid ""
-"Invalid fill style %d in fillStyle0Change record - %d defined. Set to 0."
-msgstr ""
+msgid "     %g, %g, %g, %g, %g"
+msgstr "%g, %g, %g, %g, %g"
+
+#: libcore/parser/filter_factory.cpp:375
+msgid "   GradientBevelFilter "
+msgstr "渐变斜角滤镜"
 
-#: libcore/swf/ShapeRecord.cpp:421
+#: libcore/parser/action_buffer.cpp:57
 #, c-format
-msgid "  Shape read: fill0 (left) = %d"
-msgstr ""
+msgid "Empty action buffer starting at offset %lu"
+msgstr "空操作缓冲区开始于偏移 %lu"
 
-#: libcore/swf/ShapeRecord.cpp:443
+#: libcore/parser/action_buffer.cpp:94
 #, c-format
+msgid "Action buffer starting at offset %lu doesn't end with an END tag"
+msgstr "操作缓冲区开始于偏移 %lu 没有以一个 END 标签结束"
+
+#: libcore/parser/action_buffer.cpp:132
+msgid "action buffer dict length exceeded"
+msgstr "操作缓冲区字典长度超出"
+
+#: libcore/parser/action_buffer.cpp:537 libcore/SWFStream.cpp:285
+msgid "Native floating point format not recognised"
+msgstr "原生浮点格式未被识别"
+
+#: libcore/parser/action_buffer.cpp:614
+msgid "Native double floating point format not recognised"
+msgstr "原生双浮点格式未识别"
+
+#: libcore/Font.cpp:130
 msgid ""
-"Invalid fill style %d in fillStyle1Change record for font tag (0 or 1 "
-"valid). Set to 0."
+"Attempt to set font display or copyright name again. This should mean there "
+"is more than one DefineFontName tag referring to the same Font. Don't know "
+"what to do in this case, so ignoring."
 msgstr ""
+"再次尝试设置字体显示或版权名。这应该意味着有一个以上DefineFontName标签指向相"
+"同的字体。在这种情况下不知道要做什么,所以忽略。"
 
-#: libcore/swf/ShapeRecord.cpp:453
-#, c-format
+#: libcore/Font.cpp:167
 msgid ""
-"Invalid fill style %d in fillStyle1Change record - %d defined. Set to 0."
+"Attempt to add an embedded glyph CodeTable to a font that already has one. "
+"This should mean there are several DefineFontInfo tags, or a DefineFontInfo "
+"tag refers to a font created by DefineFont2 or DefineFont3. Don't know what "
+"should happen in this case, so ignoring."
 msgstr ""
+"尝试添加一个嵌入的字形码表到已有的字体。这应该意味着有几个DefineFontInfo标"
+"签,或一个DefineFontInfo标签指向一个由DefineFont2或DefineFont3创建的字体。在"
+"这种情况下不知道会发生什么,所以忽略。"
 
-#: libcore/swf/ShapeRecord.cpp:463
+#: libcore/Font.cpp:201
 #, c-format
-msgid "  Shape read: fill1 (right) = %d"
-msgstr ""
+msgid "Failed to find glyph %s in %s font %s"
+msgstr "无法找到字形 %s 在 %s 字体 %s"
+
+#: libcore/Font.cpp:276
+msgid "Device font provider was not initialized, can't get unitsPerEM"
+msgstr "设备字体供应商没有被初始化,无法得到unitsPerEM"
 
-#: libcore/swf/ShapeRecord.cpp:484
+#: libcore/Font.cpp:298
 #, c-format
 msgid ""
-"Invalid line style %d in lineStyleChange record for font tag (0 or 1 valid). "
-"Set to 0."
-msgstr ""
+"Could not create shape glyph for DisplayObject code %u (%c) with device font "
+"%s (%p)"
+msgstr "无法创建DisplayObject代码 %u (%c) 的形状字形和设备字体 %s (%p)"
 
-#: libcore/swf/ShapeRecord.cpp:494
-#, c-format
-msgid "Invalid fill style %d in lineStyleChange record - %d defined. Set to 0."
-msgstr ""
+#: libcore/Font.cpp:332
+msgid ""
+"No name associated with this font, can't use device fonts (should I use a "
+"default one?)"
+msgstr "这个字体没有相关的名称,不能使用设备字体(我应该使用一个默认的吗?)"
 
-#: libcore/swf/ShapeRecord.cpp:504
+#: libcore/Font.cpp:340
 #, c-format
-msgid "ShapeRecord: line %d"
-msgstr ""
-
-#: libcore/swf/ShapeRecord.cpp:518
-msgid "ShapeRecord: more fill styles"
-msgstr ""
+msgid "Could not create a freetype face %s"
+msgstr "无法创建一个freetype face %s"
 
-#: libcore/swf/ShapeRecord.cpp:558
+#: libcore/TextField.cpp:236
 #, c-format
-msgid "ShapeRecord: curved edge %d %d - %d %d - %d %d"
-msgstr ""
+msgid "FIXME: attempt to remove a TextField being a child of a %s"
+msgstr "FIXME: 试图移除%s子节点的一个文本字段"
 
-#: libcore/swf/ShapeRecord.cpp:593
-#, c-format
-msgid "ShapeRecord: straight edge %d %d - %d %d"
-msgstr ""
+#: libcore/TextField.cpp:415 libcore/TextField.cpp:425
+#: libcore/TextField.cpp:443 libcore/TextField.cpp:458
+msgid "invalid restrict string"
+msgstr "不合法的限制字符串"
 
-#: libcore/swf/ShapeRecord.cpp:642
-msgid "  fill styles: %1%"
+#: libcore/TextField.cpp:967
+#, c-format
+msgid ""
+"TextField: missing glyph for space char (needed for TAB). Make sure "
+"DisplayObject shapes for font %s are being exported into your SWF file."
 msgstr ""
+"文本字段:缺少空格字符(制表符所需)的字形。确保字体 %s 的 DisplayObject 形状"
+"被导出到你的 SWF 文件。"
 
-#: libcore/swf/ShapeRecord.cpp:651
-msgid "  Read fill: %1%"
-msgstr ""
+#: libcore/TextField.cpp:1046
+msgid "No font for TextField!"
+msgstr "没有文本字段的字体"
 
-#: libcore/swf/ShapeRecord.cpp:665
+#: libcore/TextField.cpp:1446
 #, c-format
-msgid "  readLineStyles: count = %d"
-msgstr ""
+msgid "Unexpected value '%s' in TextField font color attribute"
+msgstr "在文本字段字体颜色属性中出现未预料的值 '%s' "
 
-#: libcore/swf/ShapeRecord.cpp:672
-#, c-format
-msgid "  readLineStyles: count2 = %d"
-msgstr ""
+#: libcore/TextField.cpp:1461
+msgid "Expected a font name in FACE attribute."
+msgstr "预计有一个字体名称在 FACE 属性中。"
 
-#: libcore/swf/PlaceObject2Tag.cpp:85
-#, c-format
-msgid "  PLACEOBJECT: depth=%d(%d) char=%d"
-msgstr ""
+#: libcore/TextField.cpp:1515
+#, fuzzy
+msgid "<img> HTML tag in TextField"
+msgstr "文本字段中的html标签 <img> "
 
-#: libcore/swf/PlaceObject2Tag.cpp:89 libcore/swf/PlaceObject2Tag.cpp:311
-#, c-format
-msgid "  SWFCxForm: %s"
-msgstr ""
+#: libcore/TextField.cpp:1553
+#, fuzzy
+msgid "<span> HTML tag in TextField"
+msgstr "文本字段中的html标签 <span> "
 
-#: libcore/swf/PlaceObject2Tag.cpp:105
+#: libcore/TextField.cpp:1625
+#, fuzzy
+msgid "HTML <textformat> tag tabstops attribute"
+msgstr "html标签 <textformat> 的 tabstops 属性"
+
+#: libcore/TextField.cpp:1708
 #, c-format
-msgid "Reserved field in PlaceObject actions == %u (expected 0)"
+msgid ""
+"TextField: missing embedded glyph for char %d. Make sure DisplayObject "
+"shapes for font %s are being exported into your SWF file"
 msgstr ""
+"文本字段:缺少字符 %d 的嵌入字形。确保字体 %s 的 DisplayObject 形状导出到你的"
+"SWF文件"
 
-#: libcore/swf/PlaceObject2Tag.cpp:123
+#: libcore/TextField.cpp:1716
 #, c-format
-msgid "  actions: flags = 0x%X"
-msgstr ""
+msgid ""
+"TextField: missing device glyph for char %d. Maybe you don't have font '%s' "
+"installed in your system."
+msgstr "文本字段:缺少字符 %d 设备字形。也许你的系统中没有安装字体 '%s'。"
 
-#: libcore/swf/PlaceObject2Tag.cpp:158
+#: libcore/TextField.cpp:1907
 #, c-format
 msgid ""
-"swf_event::read(), even_length = %u, but only %lu bytes left to the end of "
-"current tag. Breaking for safety."
+"Current environment has no target, can't bind VariableName (%s) associated "
+"to text field. Gnash will try to register again on next access."
 msgstr ""
+"当前的环境没有目标,不能绑定到关联文本字段的 VariableName (%s)。Gnash将在下一"
+"次访问时再次注册。 "
 
-#: libcore/swf/PlaceObject2Tag.cpp:219
+#: libcore/TextField.cpp:1933
 #, c-format
 msgid ""
-"swf_event::read() -- unknown / unhandled event type received, flags = 0x%x"
+"VariableName associated to text field refers to an unknown target (%s). It "
+"is possible that the DisplayObject will be instantiated later in the SWF "
+"stream. Gnash will try to register again on next access."
 msgstr ""
+"关联到文本字段的 VariableName 指向一个未知的目标 (%s)。有可能该 "
+"DisplayObject 会稍后在 SWF 流中被实例化。Gnash 将在下一次访问时再次注册。"
 
-#: libcore/swf/PlaceObject2Tag.cpp:248
-msgid "Unexpected end of tag while parsing PlaceObject tag events"
-msgstr ""
+#: libcore/TextField.cpp:2026 libcore/TextField.cpp:2060
+#: libcore/TextField.cpp:2151
+#, fuzzy
+msgid "invalid HTML tag"
+msgstr "不合法的 html 标签"
 
-#: libcore/swf/PlaceObject2Tag.cpp:304
-#, c-format
-msgid "  PLACEOBJECT2: depth = %d (%d)"
-msgstr ""
+#: libcore/TextField.cpp:2037 libcore/TextField.cpp:2073
+#: libcore/TextField.cpp:2104
+msgid "found NULL character in htmlText"
+msgstr "在 htmlText 中发现 NULL"
 
-#: libcore/swf/PlaceObject2Tag.cpp:306 libcore/swf/PlaceObject2Tag.cpp:419
-#, c-format
-msgid "  char id = %d"
-msgstr ""
+#: libcore/TextField.cpp:2077
+msgid "malformed HTML tag, invalid attribute name"
+msgstr "错误格式的 HTML 标签,不合法的属性名"
 
-#: libcore/swf/PlaceObject2Tag.cpp:308 libcore/swf/PlaceObject2Tag.cpp:420
-#, c-format
-msgid "  SWFMatrix: %s"
-msgstr ""
+#: libcore/TextField.cpp:2127
+msgid "malformed HTML tag, invalid attribute value"
+msgstr "错误格式的 HTML 标签,不合法的属性值"
 
-#: libcore/swf/PlaceObject2Tag.cpp:313 libcore/swf/PlaceObject2Tag.cpp:422
-#, c-format
-msgid "  ratio: %d"
-msgstr ""
+#: libcore/TextField.cpp:2160
+msgid "I declare this a HTML syntax error"
+msgstr "我认为这是一个HTML的语法错误"
 
-#: libcore/swf/PlaceObject2Tag.cpp:314 libcore/swf/PlaceObject2Tag.cpp:423
-#, c-format
-msgid "  name = %s"
-msgstr ""
+#: libcore/Video.cpp:57
+msgid "No Media handler registered, won't be able to decode embedded video"
+msgstr "没有注册媒体处理程序,将不能解码嵌入的视频"
 
-#: libcore/swf/PlaceObject2Tag.cpp:316 libcore/swf/PlaceObject2Tag.cpp:425
+#: libcore/Video.cpp:69
 #, c-format
-msgid "  clip_depth = %d (%d)"
-msgstr ""
+msgid "Could not create Video Decoder: %s"
+msgstr "无法创建视频解码器: %s"
 
-#: libcore/swf/PlaceObject2Tag.cpp:319 libcore/swf/PlaceObject2Tag.cpp:428
-#, c-format
-msgid " m_place_type: %d"
-msgstr ""
+#: libcore/Video.cpp:138
+msgid "No Video info in video definition"
+msgstr "视频定义中没有视频信息"
 
-#: libcore/swf/PlaceObject2Tag.cpp:417
+#: libcore/asobj/Selection_as.cpp:189
 #, c-format
-msgid "  PLACEOBJECT3: depth = %d (%d)"
-msgstr ""
+msgid "Selection.setFocus: expected 1 argument, got %d"
+msgstr "Selection.setFocus: 预计1个参数,给出了 %d 个"
 
-#: libcore/swf/PlaceObject2Tag.cpp:421
+#: libcore/asobj/Array_as.cpp:631
 #, c-format
-msgid "  SWFCxForm: %d"
-msgstr ""
+msgid "Unhandled sort flags: %d (0x%X)"
+msgstr "未处理的排序标志:%d (0x%X)"
 
-#: libcore/swf/PlaceObject2Tag.cpp:424
+#: libcore/asobj/Array_as.cpp:1036
+msgid "Array.splice() needs at least 1 argument, call ignored"
+msgstr "Array.splice() 最少需要1个参数, 调用被忽略"
+
+#: libcore/asobj/Array_as.cpp:1059
 #, c-format
-msgid "  class name = %s"
-msgstr ""
+msgid "Array.splice(%d,%d): negative length given, call ignored"
+msgstr "Array.splice(%d,%d): 长度不能为负数,调用被忽略"
 
-#: libcore/swf/PlaceObject2Tag.cpp:427
-msgid "   bitmapCaching enabled"
-msgstr ""
+#: libcore/asobj/Array_as.cpp:1157
+msgid "Sort called with invalid arguments."
+msgstr "调用 Sort 的参数无效。"
 
-#: libcore/swf/SoundStreamHeadTag.cpp:76
-#, c-format
-msgid "SOUNDSTREAMHEAD: stream sample rate %d (expected 0 to %u)"
-msgstr ""
+#: libcore/asobj/Array_as.cpp:1301
+msgid "SortOn called with invalid arguments."
+msgstr "调用 SortOn 的参数无效。"
 
-#: libcore/swf/SoundStreamHeadTag.cpp:86
-#, c-format
+#: libcore/asobj/Array_as.cpp:1491
 msgid ""
-"Different stream/playback sound rate (%d/%d). This seems common in SWF "
-"files, so we'll warn only once."
-msgstr ""
+"More than 2 arguments to Array.slice, and I don't know what to do with "
+"them.  Ignoring them"
+msgstr "Array.slice 有超过2个参数,我不知道如何处理。忽略他们"
 
-#: libcore/swf/SoundStreamHeadTag.cpp:93
-#, c-format
-msgid ""
-"Different stream/playback sample size (%d/%d). This seems common in SWF "
-"files, so we'll warn only once."
-msgstr ""
+#: libcore/asobj/TextSnapshot_as.cpp:521
+msgid "TextSnapshot.findText() requires 3 arguments"
+msgstr "TextSnapshot.findText() 需要3个参数"
 
-#: libcore/swf/SoundStreamHeadTag.cpp:99
-#, c-format
-msgid ""
-"Different stream/playback channels (%s/%s). This seems common in SWF files, "
-"so we'll warn only once."
-msgstr ""
+#: libcore/asobj/TextSnapshot_as.cpp:545
+msgid "TextSnapshot.getCount() takes no arguments"
+msgstr "TextSnapshot.getCount() 不带参数"
 
-#: libcore/swf/SoundStreamHeadTag.cpp:119
-msgid ""
-"No samples advertised for sound stream, pretty common so will warn only once"
-msgstr ""
+#: libcore/asobj/TextSnapshot_as.cpp:601
+msgid "TextSnapshot.getText requires exactly 2 arguments"
+msgstr "TextSnapshot.getText 只需要2个参数"
 
-#: libcore/swf/SoundStreamHeadTag.cpp:146
-#, c-format
+#: libcore/asobj/XMLNode_as.cpp:240
 msgid ""
-"sound stream head: format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, latency=%d"
-msgstr ""
+"XMLNode.insertBefore(): positional parameter is not a child of this node"
+msgstr "XMLNode.insertBefore(): positional 参数不是该节点的孩子"
 
-#: libcore/swf/DefineButtonCxformTag.cpp:49
-#, c-format
-msgid "DefineButtonCxform refers to an unknown DisplayObject %d"
-msgstr ""
+#: libcore/asobj/XMLNode_as.cpp:616
+msgid "XMLNode::appendChild() needs at least one argument"
+msgstr "XMLNode::appendChild() 至少需要一个参数"
 
-#: libcore/swf/DefineButtonCxformTag.cpp:60
+#: libcore/asobj/XMLNode_as.cpp:625
+msgid "First argument to XMLNode::appendChild() is not an XMLNode"
+msgstr "XMLNode::appendChild() 的第一个参数不是一个 XMLNode"
+
+#: libcore/asobj/XMLNode_as.cpp:663
 #, c-format
-msgid ""
-"DefineButtonCxform refers to DisplayObject ID %d (%s). Expected a button "
-"definition"
-msgstr ""
+msgid "XMLNode.insertBefore(%s) needs at least two arguments"
+msgstr "XMLNode.insertBefore(%s) 至少需要两个参数"
 
-#: libcore/swf/RemoveObjectTag.cpp:71
+#: libcore/asobj/XMLNode_as.cpp:674
 #, c-format
-msgid "  remove_object_2(%d)"
-msgstr ""
+msgid "First argument to XMLNode.insertBefore(%s) is not an XMLNode"
+msgstr "XMLNode.insertBefore(%s) 的第一个参数不是一个 XMLNode"
 
-#: libcore/swf/StreamSoundBlockTag.cpp:75
-msgid "Found SOUNDSTREAMBLOCK tag w/out preceding SOUNDSTREAMHEAD"
-msgstr ""
+#: libcore/asobj/XMLNode_as.cpp:685
+#, c-format
+msgid "Second argument to XMLNode.insertBefore(%s) is not an XMLNode"
+msgstr "XMLNode.insertBefore(%s) 的第二个参数不是一个 XMLNode"
 
-#: libcore/swf/StreamSoundBlockTag.cpp:111
-msgid "Tag boundary reported past end of stream!"
-msgstr ""
+#: libcore/asobj/String_as.cpp:451
+msgid "string.slice() called with end < start"
+msgstr "string.slice() 调用时 end 小于 start"
 
-#: libcore/swf/DefineButtonTag.cpp:85
+#: libcore/asobj/String_as.cpp:496
 #, c-format
-msgid "  DefineButton loader: character id = %d"
-msgstr ""
+msgid "String.indexOf(%s, %s): second argument casts to invalid offset (%d)"
+msgstr "String.indexOf(%s, %s): 第二个参数转换为无效的偏移(%d)"
 
-#: libcore/swf/DefineButtonTag.cpp:102
-#, c-format
-msgid "  DefineButton2 loader: chararacter id = %d"
-msgstr ""
+#: libcore/asobj/String_as.cpp:569
+msgid "string.charCodeAt needs one argument"
+msgstr "string.charCodeAt 需要一个参数"
 
-#: libcore/swf/DefineButtonTag.cpp:134
-msgid "Premature end of DEFINEBUTTON tag, won't read actions"
-msgstr ""
+#: libcore/asobj/String_as.cpp:578
+msgid "string.charCodeAt has more than one argument"
+msgstr "string.charCodeAt 参数超过一个"
 
-#: libcore/swf/DefineButtonTag.cpp:170
-#, c-format
-msgid "Next Button2 actionOffset (%u) points past the end of tag (%lu)"
-msgstr ""
+#: libcore/asobj/String_as.cpp:756
+msgid "No fn_call::callerDef in string function call"
+msgstr "string 函数调用时没有 fn_call::callerDef"
 
-#: libcore/swf/DefineButtonTag.cpp:211
-#, c-format
-msgid ""
-"Next action offset (%u) in Button2ActionConditions points past the end of tag"
-msgstr ""
+#: libcore/asobj/String_as.cpp:780
+msgid "%1%(%2%) needs %3% argument(s)"
+msgstr "%1%(%2%) 需要 %3% 参数"
 
-#: libcore/swf/DefineButtonTag.cpp:279
-msgid "Premature end of button action input: can't read conditions"
-msgstr ""
+#: libcore/asobj/String_as.cpp:791
+msgid "%1%(%2%) has more than %3% argument(s)"
+msgstr "%1%(%2%) 参数超过 %3% 个"
+
+#: libcore/asobj/Object.cpp:148
+msgid "Too many args to Object constructor"
+msgstr "对象构造函数的参数太多。"
 
-#: libcore/swf/DefineButtonTag.cpp:289
+#: libcore/asobj/Object.cpp:192
 #, c-format
-msgid "   button actions for conditions 0x%x"
+msgid ""
+"Invalid call to Object.addProperty(%s) - expected 3 arguments (<name>, "
+"<getter>, <setter>)"
 msgstr ""
+"无效调用 Object.addProperty(%s) - 预计3个参数(<name>, <getter>, <setter>)"
 
-#: libcore/swf/DefineButtonTag.cpp:362
-msgid "   premature end of button record input stream, can't read flags"
-msgstr ""
+#: libcore/asobj/Object.cpp:209
+msgid "Invalid call to Object.addProperty() - empty property name"
+msgstr "无效调用 Object.addProperty() - 空白属性名"
+
+#: libcore/asobj/Object.cpp:219
+msgid "Invalid call to Object.addProperty() - getter is not an AS function"
+msgstr "无效调用 Object.addProperty() - getter 不是一个 AS 函数"
 
-#: libcore/swf/DefineButtonTag.cpp:383
+#: libcore/asobj/Object.cpp:233
+#, c-format
 msgid ""
-"   premature end of button record input stream, can't read DisplayObject id"
-msgstr ""
+"Invalid call to Object.addProperty() - setter is not null and not an AS "
+"function (%s)"
+msgstr "无效调用 Object.addProperty() - setter 不为空也不是一个 AS 函数 (%s)"
 
-#: libcore/swf/DefineButtonTag.cpp:398
+#: libcore/asobj/Object.cpp:257
 #, c-format
 msgid ""
-"   button record for states [%s] refer to DisplayObject with id %d, which is "
-"not found in the chars dictionary"
+"Invalid call to Object.registerClass(%s) - expected 2 arguments (<symbol>, "
+"<constructor>)"
 msgstr ""
+"无效调用 Object.registerClass(%s) - 预计3个参数(<symbol>, <constructor>)"
 
-#: libcore/swf/DefineButtonTag.cpp:405
+#: libcore/asobj/Object.cpp:274
 #, c-format
-msgid "   button record for states [%s] contain DisplayObject %d (%s)"
-msgstr ""
+msgid ""
+"Invalid call to Object.registerClass(%s) - first argument (symbol id) "
+"evaluates to empty string"
+msgstr "无效调用 Object.registerClass(%s) - 第一个参数(符号ID)值为空字符串"
 
-#: libcore/swf/DefineButtonTag.cpp:413
+#: libcore/asobj/Object.cpp:286
+#, c-format
 msgid ""
-"   premature end of button record input stream, can't read button layer "
-"(depth?)"
-msgstr ""
+"Invalid call to Object.registerClass(%s) - second argument (class) is not a "
+"function)"
+msgstr "无效调用 Object.registerClass(%s) - 第二个参数 (class)不是一个函数"
 
-#: libcore/swf/DefineBitsTag.cpp:154
-msgid "  jpeg_tables_loader"
-msgstr ""
+#: libcore/asobj/Object.cpp:298
+msgid ""
+"current environment has no target, wouldn't know where to look for symbol "
+"required for registerClass"
+msgstr "目前的环境没有一个目标,不知道从哪里查找registerClass所需的符号"
 
-#: libcore/swf/DefineBitsTag.cpp:165
+#: libcore/asobj/Object.cpp:313
 #, c-format
-msgid "No bytes to read in JPEGTABLES tag at offset %d"
-msgstr ""
+msgid "Object.registerClass('%s', %s): can't find exported symbol (id: %d)"
+msgstr "Object.registerClass('%s', %s): 无法找到导出的符号 (id: %d)"
 
-#: libcore/swf/DefineBitsTag.cpp:206
+#: libcore/asobj/Object.cpp:326
 #, c-format
-msgid "DEFINEBITS: Duplicate id (%d) for bitmap DisplayObject - discarding it"
+msgid ""
+"Object.registerClass(%s, %s): exported symbol is not a MovieClip symbol "
+"(sprite_definition), but a %s"
 msgstr ""
+"Object.registerClass(%s, %s): 导出的符号不是一个 MovieClip 符号 "
+"(sprite_definition), 而是一个 %s"
 
-#: libcore/swf/DefineBitsTag.cpp:235
-msgid "Failed to parse bitmap for character %1%"
-msgstr ""
+#: libcore/asobj/Object.cpp:348
+msgid "Object.hasOwnProperty() requires one arg"
+msgstr "Object.hasOwnProperty() 需要一个参数"
 
-#: libcore/swf/DefineBitsTag.cpp:243
-msgid "No renderer, not adding bitmap %1%"
-msgstr ""
+#: libcore/asobj/Object.cpp:357
+#, c-format
+msgid "Invalid call to Object.hasOwnProperty('%s')"
+msgstr "非法调用 Object.hasOwnProperty('%s')"
 
-#: libcore/swf/DefineBitsTag.cpp:250
-msgid "Adding bitmap id %1%"
-msgstr ""
+#: libcore/asobj/Object.cpp:373
+msgid "Object.isPropertyEnumerable() requires one arg"
+msgstr "Object.isPropertyEnumerable() 需要一个参数"
 
-#: libcore/swf/DefineBitsTag.cpp:269
-msgid ""
-"DEFINEBITS: No jpeg loader registered in movie definition - discarding bitmap"
-msgstr ""
+#: libcore/asobj/Object.cpp:382
+#, c-format
+msgid "Invalid call to Object.isPropertyEnumerable('%s')"
+msgstr "非法调用 Object.isPropertyEnumerable('%s')"
 
-#: libcore/swf/DefineBitsTag.cpp:374
-msgid "gnash is not linked to zlib -- can't load jpeg3 image data"
-msgstr ""
+#: libcore/asobj/Object.cpp:405
+msgid "Object.isPrototypeOf() requires one arg"
+msgstr "Object.isPrototypeOf() 需要一个参数"
 
-#: libcore/swf/DefineBitsTag.cpp:419
+#: libcore/asobj/Object.cpp:413
 #, c-format
-msgid "  defbitslossless2: tag = %d, fmt = %d, w = %d, h = %d"
-msgstr ""
+msgid "First arg to Object.isPrototypeOf(%s) is not an object"
+msgstr "Object.isPrototypeOf(%s) 的第一个参数不是一个对象"
 
-#: libcore/swf/DefineBitsTag.cpp:426
-msgid "Bitmap has a height or width of 0"
-msgstr ""
+#: libcore/asobj/Object.cpp:432
+#, c-format
+msgid "Object.watch(%s): missing arguments"
+msgstr "Object.watch(%s): 缺少参数"
 
-#: libcore/swf/DefineBitsTag.cpp:432
-msgid "gnash is not linked to zlib -- can't load zipped image data"
-msgstr ""
+#: libcore/asobj/Object.cpp:443
+#, c-format
+msgid "Object.watch(%s): second argument is not a function"
+msgstr "Object.watch(%s): 第二个参数不是一个函数"
 
-#: libcore/swf/DefineBitsTag.cpp:458
-msgid "Will not allocate %1%x%2% image in DefineBitsLossless tag"
-msgstr ""
+#: libcore/asobj/Object.cpp:469
+#, c-format
+msgid "Object.unwatch(%s): missing argument"
+msgstr "Object.unwatch(%s): 缺少参数"
 
-#: libcore/swf/DefineBitsTag.cpp:483
-msgid "Unknown bitmap format. Ignoring"
-msgstr ""
+#: libcore/asobj/LoadVars_as.cpp:145
+#, c-format
+msgid "new LoadVars(%s) - arguments discarded"
+msgstr "新的 LoadVars(%s) - 丢弃参数"
 
-#: libcore/swf/DefineBitsTag.cpp:597
+#: libcore/asobj/TextFormat_as.cpp:408
 #, c-format
-msgid "inflateWrapper() inflateInit() returned %d (%s)"
-msgstr ""
+msgid "Too many args (%d) passed to TextFormat"
+msgstr "太多参数(%d) 传给 TextFormat"
 
-#: libcore/swf/DefineBitsTag.cpp:617
-msgid "inflateWrapper(): no end of zstream found within swf tag boundaries"
-msgstr ""
+#: libcore/asobj/TextFormat_as.cpp:486
+msgid "Getter for textformat_tabStops"
+msgstr "textformat_tabStops çš„ Getter"
+
+#: libcore/asobj/TextFormat_as.cpp:564
+msgid "TextFormat.getTextExtent requires at least one argument"
+msgstr "TextFormat.getTextExtent 至少需要一个参数"
 
-#: libcore/swf/DefineBitsTag.cpp:640
+#: libcore/asobj/TextFormat_as.cpp:776
 #, c-format
-msgid "inflateWrapper() inflate() returned %d (%s)"
-msgstr ""
+msgid "Uknown alignment value: %d, take as left"
+msgstr "未知的对齐值: %d, 使用左边"
 
-#: libcore/swf/DefineBitsTag.cpp:649
+#: libcore/asobj/TextFormat_as.cpp:791
 #, c-format
-msgid "inflateWrapper() inflateEnd() return %d (%s)"
-msgstr ""
+msgid "Unknown display value: %d "
+msgstr "未知的显示值: %d"
 
-#: libcore/LoadVariablesThread.cpp:74
+#: libcore/asobj/TextField_as.cpp:218
 #, c-format
-msgid "%s to UTF8 conversion in MovieClip.loadVariables input parsing"
-msgstr ""
+msgid "createTextField called with %d args, expected 6 - returning undefined"
+msgstr "createTextField 被调用时带有 %d 个参数, 期望6 - 返回未定义"
 
-#: libcore/LoadVariablesThread.cpp:123
+#: libcore/asobj/TextField_as.cpp:232
 #, c-format
-msgid "Stream couldn't seek to end: %s"
-msgstr ""
+msgid "createTextField: negative width (%d) - reverting sign"
+msgstr "createTextField: 负宽度 (%d) - 回归符号"
 
-#: libcore/LoadVariablesThread.cpp:128
+#: libcore/asobj/TextField_as.cpp:242
 #, c-format
-msgid ""
-"Size of 'variables' stream advertised to be %d bytes, but turned out to be "
-"%d bytes."
-msgstr ""
+msgid "createTextField: negative height (%d) - reverting sign"
+msgstr "createTextField: 负高度 (%d) - 回归符号"
 
-#: libcore/SWFStream.cpp:285 libcore/parser/action_buffer.cpp:537
-msgid "Native floating point format not recognised"
-msgstr ""
+#: libcore/asobj/TextField_as.cpp:436
+#, c-format
+msgid "Attempt to set length property of TextField %s"
+msgstr "试图设置 TextField %s 的长度属性"
 
-#: libcore/SWFStream.cpp:302 libcore/SWFStream.cpp:320
-#: libcore/SWFStream.cpp:353 libcore/SWFStream.cpp:384
-#: libcore/parser/SWFParser.cpp:151
-msgid "Unexpected end of stream while reading"
-msgstr ""
+#: libcore/asobj/TextField_as.cpp:462 libcore/asobj/TextField_as.cpp:488
+#, c-format
+msgid "Attempt to set read-only %s property of TextField %s"
+msgstr "试图设置 TextField %s 的 只读属性 %s  "
 
-#: libcore/SWFStream.cpp:475
-msgid "Attempt to seek past the end of an opened tag"
-msgstr ""
+#: libcore/asobj/TextField_as.cpp:544
+#, c-format
+msgid "Invalid value given to TextField.type: %s"
+msgstr "无效 TextField.type 值: %s"
 
-#: libcore/SWFStream.cpp:483
-msgid "Attempt to seek before start of an opened tag"
-msgstr ""
+#: libcore/asobj/TextField_as.cpp:597
+msgid "TextField.getFontList()"
+msgstr "TextField.getFontList()"
 
-#: libcore/SWFStream.cpp:496
-msgid "Unexpected end of stream"
-msgstr ""
+#: libcore/asobj/TextField_as.cpp:608
+msgid "TextField.getNewTextFormat()"
+msgstr "TextField.getNewTextFormat()"
 
-#: libcore/SWFStream.cpp:564
-#, c-format
+#: libcore/asobj/TextField_as.cpp:658
 msgid ""
-"Tag %d starting at offset %d is advertised to end at offset %d, which is "
-"after end of previously opened tag starting at offset %d and ending at "
-"offset %d. Making it end where container tag ends."
+"TextField.getTextFormat() discards URL, target, tabStops, bullet and display"
 msgstr ""
+"TextField.getTextFormat() 丢弃了 URL, target, tabStops, bullet 和 display"
 
-#: libcore/SWFStream.cpp:581
+#: libcore/asobj/TextField_as.cpp:672 libcore/asobj/TextField_as.cpp:694
 #, c-format
-msgid "SWF[%lu]: tag type = %d, tag length = %d, end tag = %lu"
-msgstr ""
+msgid "TextField.setTextFormat(%s) : %s"
+msgstr "TextField.setTextFormat(%s) : %s"
 
-#: libcore/SWFStream.cpp:602
-msgid "Could not seek to reported end of tag"
-msgstr ""
+#: libcore/asobj/TextField_as.cpp:673
+msgid "missing arg"
+msgstr "缺少参数"
 
-#: libcore/SWFStream.cpp:617
+#: libcore/asobj/TextField_as.cpp:679
 #, c-format
-msgid "SWFStream::consumeInput: underlying stream couldn't go_to_end: %s"
-msgstr ""
-
-#: libcore/RGBA.cpp:47
-msgid "Failed to convert string to RGBA value! This is a Gnash bug"
-msgstr ""
-
-#: libcore/Font.cpp:130
 msgid ""
-"Attempt to set font display or copyright name again. This should mean there "
-"is more than one DefineFontName tag referring to the same Font. Don't know "
-"what to do in this case, so ignoring."
-msgstr ""
-
-#: libcore/Font.cpp:167
-msgid ""
-"Attempt to add an embedded glyph CodeTable to a font that already has one. "
-"This should mean there are several DefineFontInfo tags, or a DefineFontInfo "
-"tag refers to a font created by DefineFont2 or DefineFont3. Don't know what "
-"should happen in this case, so ignoring."
-msgstr ""
-
-#: libcore/Font.cpp:201
-#, c-format
-msgid "Failed to find glyph %s in %s font %s"
-msgstr ""
-
-#: libcore/Font.cpp:276
-msgid "Device font provider was not initialized, can't get unitsPerEM"
-msgstr ""
-
-#: libcore/Font.cpp:298
-#, c-format
-msgid ""
-"Could not create shape glyph for DisplayObject code %u (%c) with device font "
-"%s (%p)"
-msgstr ""
-
-#: libcore/Font.cpp:332
-msgid ""
-"No name associated with this font, can't use device fonts (should I use a "
-"default one?)"
-msgstr ""
-
-#: libcore/Font.cpp:340
-#, c-format
-msgid "Could not create a freetype face %s"
-msgstr ""
-
-#: libcore/asobj/Stage_as.cpp:146
-msgid "Stage.width is a read-only property!"
-msgstr ""
-
-#: libcore/asobj/Stage_as.cpp:163
-msgid "Stage.height is a read-only property!"
-msgstr ""
-
-#: libcore/asobj/Stage_as.cpp:202
-msgid "Stage.showMenu implemented by setting gnashrc option and for gtk only"
-msgstr ""
-
-#: libcore/asobj/Video_as.cpp:114
-msgid "attachVideo needs 1 arg"
-msgstr ""
-
-#: libcore/asobj/Video_as.cpp:126
-#, c-format
-msgid "attachVideo(%s) first arg is not a NetStream instance"
-msgstr ""
-
-#: libcore/asobj/Video_as.cpp:139
-msgid "Video.deblocking"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:218
-#, c-format
-msgid "createTextField called with %d args, expected 6 - returning undefined"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:232
-#, c-format
-msgid "createTextField: negative width (%d) - reverting sign"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:242
-#, c-format
-msgid "createTextField: negative height (%d) - reverting sign"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:436
-#, c-format
-msgid "Attempt to set length property of TextField %s"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:462 libcore/asobj/TextField_as.cpp:488
-#, c-format
-msgid "Attempt to set read-only %s property of TextField %s"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:544
-#, c-format
-msgid "Invalid value given to TextField.type: %s"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:597
-msgid "TextField.getFontList()"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:608
-msgid "TextField.getNewTextFormat()"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:658
-msgid ""
-"TextField.getTextFormat() discards URL, target, tabStops, bullet and display"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:672 libcore/asobj/TextField_as.cpp:694
-#, c-format
-msgid "TextField.setTextFormat(%s) : %s"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:673
-msgid "missing arg"
-msgstr ""
-
-#: libcore/asobj/TextField_as.cpp:679
-#, c-format
-msgid ""
-"TextField.setTextFormat(%s) : args past the first are unhandled by Gnash"
-msgstr ""
+"TextField.setTextFormat(%s) : args past the first are unhandled by Gnash"
+msgstr "TextField.setTextFormat(%s) : Gnash没有处理传入的第一个参数"
 
 #: libcore/asobj/TextField_as.cpp:695
 msgid "first argument is not a TextFormat"
-msgstr ""
+msgstr "第一个参数不是一个 TextFormat"
 
 #: libcore/asobj/TextField_as.cpp:729
 msgid "TextField.setNewTextFormat(), we'll delegate to setTextFormat"
-msgstr ""
+msgstr "TextField.setNewTextFormat(), 我们将委托给 setTextFormat"
 
 #: libcore/asobj/TextField_as.cpp:789
 msgid "TextField.bottomScroll is not complete"
-msgstr ""
+msgstr "TextField.bottomScroll 是未完成的"
 
 #: libcore/asobj/TextField_as.cpp:809
 msgid "TextField.maxhscroll is not complete"
-msgstr ""
+msgstr "TextField.maxhscroll 是未完成的"
 
 #: libcore/asobj/TextField_as.cpp:905
 #, c-format
 msgid "TextField.replaceSel(%s) requires exactly one argument"
-msgstr ""
+msgstr "TextField.replaceSel(%s) 要求只有一个参数"
 
 #: libcore/asobj/TextField_as.cpp:944
 msgid "TextField._hscroll is not complete"
-msgstr ""
+msgstr "TextField._hscroll 是未完成的"
 
 #: libcore/asobj/TextField_as.cpp:962
 msgid "TextField.maxscroll is not complete"
-msgstr ""
+msgstr "TextField.maxscroll 是未完成的"
 
 #: libcore/asobj/TextField_as.cpp:983
 msgid "TextField.replaceText() called with less than 3 args"
-msgstr ""
+msgstr "TextField.replaceText() 被调用时少于3个参数"
 
 #: libcore/asobj/TextField_as.cpp:993
 #, c-format
 msgid "TextField.replaceText(%s): negative endIndex - doing nothing"
-msgstr ""
+msgstr "TextField.replaceText(%s): endIndex为负数 - 什么都不做"
 
 #: libcore/asobj/TextField_as.cpp:1019
 #, c-format
 msgid "TextField.replaceText(%s): beginIndex out of range - doing nothing"
-msgstr ""
+msgstr "TextField.replaceText(%s): beginIndex 超出范围 - 什么都不做"
 
 #: libcore/asobj/TextField_as.cpp:1036
 #, c-format
 msgid ""
 "TextField.replaceText(%s): endIndex out of range - taking as end of string"
-msgstr ""
+msgstr "TextField.replaceText(%s): endIndex 超出范围 - 取字符串的结尾"
 
-#: libcore/asobj/NetConnection_as.cpp:440
+#: libcore/asobj/Sound_as.cpp:431
 #, c-format
-msgid "Gnash is not allowed to open this URL: %s"
-msgstr ""
+msgid "Could not create audio decoder: %s"
+msgstr "无法创建音频解码器: %s"
 
-#: libcore/asobj/NetConnection_as.cpp:496
-#, c-format
-msgid "Gnash is not allowed to connect to %s"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:439
+msgid "No audio in Sound input."
+msgstr "声音输入中没有音效。"
 
-#: libcore/asobj/NetConnection_as.cpp:517
+#: libcore/asobj/Sound_as.cpp:593
 #, c-format
-msgid "NetConnection.connect(%s): unsupported connection protocol"
-msgstr ""
+msgid "Gnash could not open this URL: %s"
+msgstr "Gnash 无法打开该链接: %s"
 
-#: libcore/asobj/NetConnection_as.cpp:523
+#: libcore/asobj/Sound_as.cpp:604
 #, c-format
-msgid "NetConnection.connect(%s): unknown connection protocol"
-msgstr ""
-
-#: libcore/asobj/NetConnection_as.cpp:569
-msgid "NetConnection.call: can't call while not connected"
-msgstr ""
-
-#: libcore/asobj/NetConnection_as.cpp:658
-msgid "NetConnection.call(): needs at least one argument"
-msgstr ""
+msgid "Unable to create parser for Sound at %s"
+msgstr "无法创建在 %s 的声音解析器"
 
-#: libcore/asobj/NetConnection_as.cpp:681
-#, c-format
-msgid "NetConnection.call(%s): second argument must be an object"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:694
+msgid "No sound handler, nothing to start..."
+msgstr "无声音处理程序,没有开始..."
 
-#: libcore/asobj/NetConnection_as.cpp:771
-msgid "NetConnection.connect(): needs at least one argument"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:701
+msgid "No MediaParser initialized, can't start an external sound"
+msgstr "MediaParser无法初始化,无法启动外部声音"
 
-#: libcore/asobj/NetConnection_as.cpp:793
-#, c-format
-msgid "NetConnection.connect(%s): args after the first are not supported"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:707
+msgid "Sound.start() has no effect on a streaming Sound"
+msgstr "Sound.start() 在音频流上没有效果"
 
-#: libcore/asobj/NetConnection_as.cpp:808
-msgid "NetConnection.addHeader()"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:755
+msgid "No sound handler, nothing to stop..."
+msgstr "无声音处理程序,没有结束..."
 
-#: libcore/asobj/NetConnection_as.cpp:892
-msgid "Invoke buffer too short"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:785
+msgid "No sound handler, can't check duration..."
+msgstr "无声音处理程序,无法检查持续时间..."
 
-#: libcore/asobj/NetConnection_as.cpp:899
-msgid "Invoke argument not present"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:810
+msgid ""
+"No sound handler, can't check position (we're likely not playing anyway)..."
+msgstr "无声音处理程序,无法查询位置(很可能现在没有播放呢)..."
 
-#: libcore/asobj/NetConnection_as.cpp:990
+#: libcore/asobj/Sound_as.cpp:878
 #, c-format
-msgid "Unknown HTTP Remoting response identifier '%s'"
-msgstr ""
+msgid "No samples decoded from input of %d bytes"
+msgstr "%d 字节的输入中没有采样被解码"
 
-#: libcore/asobj/NetConnection_as.cpp:1006
+#: libcore/asobj/Sound_as.cpp:979
 #, c-format
-msgid "Unsupported HTTP Remoting response callback: '%s' (size %d)"
-msgstr ""
+msgid "new Sound(%d) : args after first one ignored"
+msgstr "新的声音(%d):忽略第一个以后的参数"
 
-#: libcore/asobj/NetConnection_as.cpp:1155
+#: libcore/asobj/Sound_as.cpp:993
 #, c-format
-msgid "Error parsing server AMF: %s"
+msgid ""
+"new Sound(%s) : first argument isn't null or undefined, and isn't a "
+"DisplayObject. We'll take as an invalid DisplayObject ref."
 msgstr ""
+"新的声音(%s):第一个参数不为空或未定义,并且不是一个DisplayObject。我们将它"
+"当做一个无效的DisplayObject引用。"
+
+#: libcore/asobj/Sound_as.cpp:1011
+msgid "-- start sound"
+msgstr "- 开始声音"
+
+#: libcore/asobj/Sound_as.cpp:1033
+msgid "-- stop sound "
+msgstr "- 停止声音"
 
-#: libcore/asobj/NetConnection_as.cpp:1202
+#: libcore/asobj/Sound_as.cpp:1049 libcore/asobj/Sound_as.cpp:1104
 #, c-format
-msgid "Could not serialize NetConnection.call argument %d"
-msgstr ""
+msgid "No such export '%s'"
+msgstr "没有这样的输出 '%s'"
 
-#: libcore/asobj/NetConnection_as.cpp:1230
-msgid "Sanity failed. no string method in invoke packet"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1058
+#, c-format
+msgid "Export '%s' is not a sound"
+msgstr "输出 '%s' 不是一个声音"
 
-#: libcore/asobj/NetConnection_as.cpp:1277
-msgid "Server called _onbwcheck without a callback"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1074
+msgid "-- attach sound"
+msgstr "- 添加声音"
 
-#: libcore/asobj/NetConnection_as.cpp:1307
-msgid "RTMP server sent error"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1079
+msgid "attach sound needs one argument"
+msgstr "添加声音需要一个参数"
 
-#: libcore/asobj/Function_as.cpp:105
-msgid "Function.apply() called with no args"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1089
+msgid "attachSound needs a non-empty string"
+msgstr "attachSound 需要一个非空字符串"
 
-#: libcore/asobj/Function_as.cpp:129
+#: libcore/asobj/Sound_as.cpp:1113
 #, c-format
-msgid ""
-"Function.apply() got %d args, expected at most 2 -- discarding the ones in "
-"excess"
-msgstr ""
+msgid "Export '%s'is not a sound"
+msgstr "输出 '%s' 不是一个声音"
 
-#: libcore/asobj/Array_as.cpp:535
-#, c-format
-msgid "Unhandled sort flags: %d (0x%X)"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1148
+msgid "Sound.getPan()"
+msgstr "Sound.getPan()"
 
-#: libcore/asobj/Array_as.cpp:934
-msgid "Array.splice() needs at least 1 argument, call ignored"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1163
+msgid "Sound.setDuration()"
+msgstr "Sound.setDuration()"
 
-#: libcore/asobj/Array_as.cpp:957
-#, c-format
-msgid "Array.splice(%d,%d): negative length given, call ignored"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1178
+msgid "Sound.setPosition()"
+msgstr "Sound.setPosition()"
 
-#: libcore/asobj/Array_as.cpp:1055
-msgid "Sort called with invalid arguments."
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1185
+msgid "Sound.getTransform()"
+msgstr "Sound.getTransform()"
 
-#: libcore/asobj/Array_as.cpp:1199
-msgid "SortOn called with invalid arguments."
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1198
+#, c-format
+msgid "Sound.getVolume(%s) : arguments ignored"
+msgstr "Sound.getVolume(%s) : 忽略参数"
 
-#: libcore/asobj/Array_as.cpp:1389
-msgid ""
-"More than 2 arguments to Array.slice, and I don't know what to do with "
-"them.  Ignoring them"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1214
+msgid "Sound.loadSound() needs at least 1 argument"
+msgstr "Sound.loadSound() 至少需要一个参数"
 
-#: libcore/asobj/System_as.cpp:310
-msgid "System.security.allowDomain"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1229
+#, c-format
+msgid "Sound.loadSound(%s): arguments after first 2 discarded"
+msgstr "Sound.loadSound(%s): 丢弃第两个之后的参数"
 
-#: libcore/asobj/System_as.cpp:321
-msgid "System.security.allowInsecureDomain"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1243
+msgid "Sound.setPan()"
+msgstr "Sound.setPan()"
 
-#: libcore/asobj/System_as.cpp:329
-msgid "System.security.loadPolicyFile"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1250
+msgid "Sound.setTransform()"
+msgstr "Sound.setTransform()"
 
-#: libcore/asobj/System_as.cpp:350
-msgid "System.showSettings"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1259
+msgid "set volume of sound needs one argument"
+msgstr "设置音量需要一个参数"
 
-#: libcore/asobj/System_as.cpp:367
-msgid "System.exactSettings"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1274
+msgid "Sound.checkPolicyFile"
+msgstr "Sound.checkPolicyFile"
 
-#: libcore/asobj/System_as.cpp:385
-msgid "System.useCodepage"
-msgstr ""
+#: libcore/asobj/Sound_as.cpp:1287
+msgid "Sound.areSoundsInaccessible()"
+msgstr "Sound.areSoundsInaccessible()"
 
 #: libcore/asobj/Key_as.cpp:40
 msgid "Key.isAccessible"
-msgstr ""
+msgstr "Key.isAccessible"
 
 #: libcore/asobj/Key_as.cpp:70
 msgid "Key.isDown needs one argument (the key code)"
-msgstr ""
+msgstr "Key.isDown 需要一个参数(键码值)"
 
 #: libcore/asobj/Key_as.cpp:79
 #, c-format
 msgid "Key.isKeyDown(%d): keycode out of range"
-msgstr ""
+msgstr "Key.isKeyDown(%d): 键码值超出范围"
 
 #: libcore/asobj/Key_as.cpp:97
 msgid "Key.isToggled"
-msgstr ""
+msgstr "Key.isToggled"
 
-#: libcore/asobj/Object.cpp:148
-msgid "Too many args to Object constructor"
-msgstr ""
+#: libcore/asobj/XML_as.cpp:467
+msgid "XML data is empty"
+msgstr "XML 数据为空"
 
-#: libcore/asobj/Object.cpp:192
-#, c-format
-msgid ""
-"Invalid call to Object.addProperty(%s) - expected 3 arguments (<name>, "
-"<getter>, <setter>)"
-msgstr ""
+#: libcore/asobj/XML_as.cpp:742
+msgid "no text for text node creation"
+msgstr "文本节点创建时缺少文本"
 
-#: libcore/asobj/Object.cpp:209
-msgid "Invalid call to Object.addProperty() - empty property name"
-msgstr ""
+#: libcore/asobj/XML_as.cpp:755
+msgid "XML.parseXML() needs one argument"
+msgstr "XML.parseXML() 需要一个参数"
 
-#: libcore/asobj/Object.cpp:219
-msgid "Invalid call to Object.addProperty() - getter is not an AS function"
-msgstr ""
+#: libcore/asobj/AsBroadcaster.cpp:233
+msgid "AsBroadcaster.initialize() requires one argument, none given"
+msgstr "AsBroadcaster.initialize() 需要一个参数,没有给出参数"
 
-#: libcore/asobj/Object.cpp:233
+#: libcore/asobj/AsBroadcaster.cpp:243
 #, c-format
-msgid ""
-"Invalid call to Object.addProperty() - setter is not null and not an AS "
-"function (%s)"
-msgstr ""
+msgid "AsBroadcaster.initialize(%s): first arg is not an object"
+msgstr "AsBroadcaster.initialize(%s): 第一个参数不是一个对象"
 
-#: libcore/asobj/Object.cpp:257
+#: libcore/asobj/AsBroadcaster.cpp:252
 #, c-format
 msgid ""
-"Invalid call to Object.registerClass(%s) - expected 2 arguments (<symbol>, "
-"<constructor>)"
+"AsBroadcaster.initialize(%s): first arg is an object but doesn't cast to one "
+"(dangling DisplayObject ref?)"
 msgstr ""
+"AsBroadcaster.initialize(%s): 第一个参数不是一个对象也不能转换为对象"
+"( DisplayObject 引用被修改?)"
 
-#: libcore/asobj/Object.cpp:274
+#: libcore/asobj/AsBroadcaster.cpp:282 libcore/asobj/AsBroadcaster.cpp:327
+#: libcore/asobj/AsBroadcaster.cpp:393
 #, c-format
-msgid ""
-"Invalid call to Object.registerClass(%s) - first argument (symbol id) "
-"evaluates to empty string"
-msgstr ""
+msgid "%p.addListener(%s): this object has no _listeners member"
+msgstr "%p.addListener(%s): 该对象没有 _listeners 成员"
 
-#: libcore/asobj/Object.cpp:286
+#: libcore/asobj/AsBroadcaster.cpp:293 libcore/asobj/AsBroadcaster.cpp:338
+#: libcore/asobj/AsBroadcaster.cpp:404
 #, c-format
-msgid ""
-"Invalid call to Object.registerClass(%s) - second argument (class) is not a "
-"function)"
-msgstr ""
-
-#: libcore/asobj/Object.cpp:298
-msgid ""
-"current environment has no target, wouldn't know where to look for symbol "
-"required for registerClass"
-msgstr ""
+msgid "%p.addListener(%s): this object's _listener isn't an object: %s"
+msgstr "%p.addListener(%s): 该对象的 _listener 不是一个对象: %s"
 
-#: libcore/asobj/Object.cpp:313
+#: libcore/asobj/AsBroadcaster.cpp:415
 #, c-format
-msgid "Object.registerClass('%s', %s): can't find exported symbol (id: %d)"
-msgstr ""
+msgid "%p.broadcastMessage() needs an argument"
+msgstr "%p.broadcastMessage() 需要一个参数"
 
-#: libcore/asobj/Object.cpp:326
+#: libcore/asobj/MovieClipLoader.cpp:105
 #, c-format
-msgid ""
-"Object.registerClass(%s, %s): exported symbol is not a MovieClip symbol "
-"(sprite_definition), but a %s"
-msgstr ""
+msgid "MovieClipLoader.loadClip(%s): missing arguments"
+msgstr "MovieClipLoader.loadClip(%s): 缺少参数"
 
-#: libcore/asobj/Object.cpp:348
-msgid "Object.hasOwnProperty() requires one arg"
-msgstr ""
+#: libcore/asobj/MovieClipLoader.cpp:114
+#, c-format
+msgid "MovieClipLoader.loadClip(%s): first argument must be a string"
+msgstr "MovieClipLoader.loadClip(%s): 第一个参数必须是一个字符串"
 
-#: libcore/asobj/Object.cpp:357
+#: libcore/asobj/MovieClipLoader.cpp:132
 #, c-format
-msgid "Invalid call to Object.hasOwnProperty('%s')"
-msgstr ""
+msgid "Could not find target %s (evaluated from %s)"
+msgstr "无法找到目标 %s (从 %s 评估)"
 
-#: libcore/asobj/Object.cpp:373
-msgid "Object.isPropertyEnumerable() requires one arg"
-msgstr ""
+#: libcore/asobj/MovieClipLoader.cpp:149
+#, c-format
+msgid "MovieClipLoader.unloadClip(%s): expected at least one argument"
+msgstr "MovieClipLoader.unloadClip(%s): 期望至少一个参数"
 
-#: libcore/asobj/Object.cpp:382
+#: libcore/asobj/MovieClipLoader.cpp:156
 #, c-format
-msgid "Invalid call to Object.isPropertyEnumerable('%s')"
-msgstr ""
+msgid "MovieClipLoader.unloadClip: %s"
+msgstr "MovieClipLoader.unloadClip: %s"
 
-#: libcore/asobj/Object.cpp:405
-msgid "Object.isPrototypeOf() requires one arg"
-msgstr ""
+#: libcore/asobj/MovieClipLoader.cpp:180
+msgid "MovieClipLoader.getProgress(): missing argument"
+msgstr "MovieClipLoader.getProgress(): 缺少参数"
 
-#: libcore/asobj/Object.cpp:413
+#: libcore/asobj/MovieClipLoader.cpp:189
 #, c-format
-msgid "First arg to Object.isPrototypeOf(%s) is not an object"
-msgstr ""
+msgid "MovieClipLoader.getProgress(%s): first argument is not an object"
+msgstr "MovieClipLoader.getProgress(%s): 第一个参数不是一个对象"
 
-#: libcore/asobj/Object.cpp:432
+#: libcore/asobj/MovieClipLoader.cpp:198
 #, c-format
-msgid "Object.watch(%s): missing arguments"
-msgstr ""
+msgid "MovieClipLoader.getProgress(%s): first argument is not an sprite"
+msgstr "MovieClipLoader.getProgress(%s): 第一个参数不是一个 sprite"
 
-#: libcore/asobj/Object.cpp:443
+#: libcore/asobj/Stage_as.cpp:146
+msgid "Stage.width is a read-only property!"
+msgstr "Stage.width是一个只读属性!"
+
+#: libcore/asobj/Stage_as.cpp:163
+msgid "Stage.height is a read-only property!"
+msgstr "Stage. height是一个只读属性!"
+
+#: libcore/asobj/Stage_as.cpp:202
+msgid "Stage.showMenu implemented by setting gnashrc option and for gtk only"
+msgstr "Stage.showMenu为设置gnashrc选项而实现,并且仅用于GTK"
+
+#: libcore/asobj/Color_as.cpp:153
+msgid "Color.setRGB() : missing argument"
+msgstr "Color.setRGB() : 缺少参数"
+
+#: libcore/asobj/Color_as.cpp:186
+msgid "Color.setTransform() : missing argument"
+msgstr "Color.setTransform() : 缺少参数"
+
+#: libcore/asobj/Color_as.cpp:196
 #, c-format
-msgid "Object.watch(%s): second argument is not a function"
-msgstr ""
+msgid "Color.setTransform(%s) : first argument doesn't cast to an object"
+msgstr "Color.setTransform(%s) : 第一个参数不能转换为一个对象"
 
-#: libcore/asobj/Object.cpp:469
+#: libcore/asobj/Number_as.cpp:78
 #, c-format
-msgid "Object.unwatch(%s): missing argument"
-msgstr ""
+msgid "Number.toString(%s): radix must be in the 2..36 range (%d is invalid)"
+msgstr "Number.toString(%s): radix 必须在 2..36 范围之内 (%d 是不合法的)"
 
-#: libcore/asobj/String_as.cpp:451
-msgid "string.slice() called with end < start"
-msgstr ""
+#: libcore/asobj/Microphone_as.cpp:252
+msgid "No MediaHandler exists! Cannot create a Microphone object"
+msgstr "没有MediaHandler存在!不能创建一个Microphone对象"
 
-#: libcore/asobj/String_as.cpp:496
+#: libcore/asobj/Microphone_as.cpp:284
+msgid "Microphone.gain(): wrong number of parameters passed"
+msgstr "Microphone.gain(): 错误数量的参数被传入"
+
+#: libcore/asobj/Microphone_as.cpp:300
+msgid "Microphone.setRate: wrong number of parameters passed"
+msgstr "Microphone.setRate: 错误数量的参数被传入"
+
+#: libcore/asobj/Microphone_as.cpp:313
+msgid "Microphone::activityLevel only has default value (-1)"
+msgstr "Microphone::activityLevel 只有缺省值 (-1)"
+
+#: libcore/asobj/Microphone_as.cpp:318
+msgid "Attempt to set activity property of Microphone"
+msgstr "试图设置 Microphone 的活动属性"
+
+#: libcore/asobj/Microphone_as.cpp:353
+msgid "Microphone::muted is always false (always allows access)"
+msgstr "Microphone::muted 总为 false (总是允许读取)"
+
+#: libcore/asobj/Microphone_as.cpp:413
+msgid "Microphone::silenceTimeout can be set, but is unimplemented"
+msgstr "Microphone::silenceTimeout 可以被设置, 但该功能还未实现"
+
+#: libcore/asobj/Microphone_as.cpp:436
 #, c-format
-msgid "String.indexOf(%s, %s): second argument casts to invalid offset (%d)"
-msgstr ""
+msgid "%s: Too many arguments"
+msgstr "%s: 太多参数"
 
-#: libcore/asobj/String_as.cpp:569
-msgid "string.charCodeAt needs one argument"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:463
+msgid "Date constructor called with more than 7 arguments"
+msgstr "Date 构造器调用带有超过 7 个参数"
 
-#: libcore/asobj/String_as.cpp:578
-msgid "string.charCodeAt has more than one argument"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:724
+msgid "Date.setTime needs one argument"
+msgstr "Date.setTime 需要一个参数"
 
-#: libcore/asobj/String_as.cpp:756
-msgid "No fn_call::callerDef in string function call"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:744
+msgid "Date.setTime was called with more than one argument"
+msgstr "Date.setTime 调用时带有超过一个参数"
 
-#: libcore/asobj/String_as.cpp:780
-msgid "%1%(%2%) needs %3% argument(s)"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:835
+msgid "Date.setFullYear needs one argument"
+msgstr "Date.setFullYear 需要一个参数"
 
-#: libcore/asobj/String_as.cpp:791
-msgid "%1%(%2%) has more than %3% argument(s)"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:875
+msgid "Date.setYear needs one argument"
+msgstr "Date.setYear 需要一个参数"
 
-#: libcore/asobj/flash/external/ExternalInterface_as.cpp:292
+#: libcore/asobj/Date_as.cpp:898
+msgid "Date.setYear was called with more than three arguments"
+msgstr "Date.setYear 调用时带有超过三个参数"
+
+#: libcore/asobj/Date_as.cpp:929
 #, c-format
-msgid "VAL: %s"
-msgstr ""
+msgid "Date.set%sMonth needs one argument"
+msgstr "Date.set%sMonth 需要一个参数"
 
-#: libcore/asobj/flash/external/ExternalInterface_as.cpp:343
+#: libcore/asobj/Date_as.cpp:962
 #, c-format
-msgid ""
-"ExternalInterface path %s is outside the SWF domain %s. Cannot access this "
-"object."
-msgstr ""
+msgid "Date.set%sMonth was called with more than three arguments"
+msgstr "Date.set%sMonth 调用时带有超过三个参数"
 
-#: libcore/asobj/flash/net/FileReferenceList_as.cpp:91
+#: libcore/asobj/Date_as.cpp:984
 #, c-format
-msgid "FileReferenceList(%s): %s"
-msgstr ""
+msgid "Date.set%sDate needs one argument"
+msgstr "Date.set%sDate 需要一个参数"
 
-#: libcore/asobj/flash/net/FileReferenceList_as.cpp:92
-#: libcore/asobj/flash/net/FileReference_as.cpp:160
-#: libcore/asobj/flash/geom/Transform_as.cpp:357
-msgid "arguments discarded"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:998
+#, c-format
+msgid "Date.set%sDate was called with more than one argument"
+msgstr "Date.set%sDate 调用时带有超过一个参数"
 
-#: libcore/asobj/flash/net/FileReference_as.cpp:159
+#: libcore/asobj/Date_as.cpp:1025
 #, c-format
-msgid "FileReference(%s): %s"
-msgstr ""
+msgid "Date.set%sHours needs one argument"
+msgstr "Date.set%sHours 需要一个参数"
 
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:153
+#: libcore/asobj/Date_as.cpp:1044
 #, c-format
-msgid "flash.geom.Rectangle(%s): %s"
-msgstr ""
+msgid "Date.set%sHours was called with more than four arguments"
+msgstr "Date.set%sHours 调用时带有超过四个参数"
 
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:154
-#: libcore/asobj/flash/geom/Point_as.cpp:427
-#: libcore/asobj/flash/geom/Point_as.cpp:511
-#: libcore/asobj/flash/geom/Point_as.cpp:596
-#: libcore/asobj/flash/geom/Point_as.cpp:604
-#: libcore/asobj/MovieClip_as.cpp:532
-msgid "missing arguments"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:1070
+#, c-format
+msgid "Date.set%sMinutes needs one argument"
+msgstr "Date.set%sMinutes 需要一个参数"
 
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:471
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:545
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:603
-#: libcore/asobj/flash/geom/Matrix_as.cpp:421
-#: libcore/asobj/flash/geom/Matrix_as.cpp:747
-msgid "Failed to construct flash.geom.Point!"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:1088 libcore/asobj/Date_as.cpp:1131
+#, c-format
+msgid "Date.set%sMinutes was called with more than three arguments"
+msgstr "Date.set%sMinutes 调用时带有超过三个参数"
 
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:483
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:557
-#: libcore/asobj/flash/geom/Rectangle_as.cpp:616
-#: libcore/asobj/flash/geom/Point_as.cpp:411
+#: libcore/asobj/Date_as.cpp:1111
 #, c-format
-msgid "Attempt to set read-only property %s"
-msgstr ""
+msgid "Date.set%sSeconds needs one argument"
+msgstr "Date.set%sSeconds 需要一个参数"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:119
-#: libcore/asobj/flash/geom/Point_as.cpp:190
-#: libcore/asobj/flash/geom/Point_as.cpp:238
-#: libcore/asobj/flash/geom/Point_as.cpp:323
+#: libcore/asobj/Date_as.cpp:1149
 #, c-format
-msgid "%s: missing arguments"
-msgstr ""
+msgid "Date.set%sMilliseconds needs one argument"
+msgstr "Date.set%sMilliseconds 需要一个参数"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:128
-#: libcore/asobj/flash/geom/Point_as.cpp:138
-#: libcore/asobj/flash/geom/Point_as.cpp:148
-#: libcore/asobj/flash/geom/Point_as.cpp:156
-#: libcore/asobj/flash/geom/Point_as.cpp:332
-#: libcore/asobj/flash/geom/Point_as.cpp:342
-#: libcore/asobj/flash/geom/Point_as.cpp:352
-#: libcore/asobj/flash/geom/Point_as.cpp:360
+#: libcore/asobj/Date_as.cpp:1166
 #, c-format
-msgid "Point.add(%s): %s"
-msgstr ""
+msgid "Date.set%sMilliseconds was called with more than one argument"
+msgstr "Date.set%sMilliseconds 调用时带有超过一个参数"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:129
-#: libcore/asobj/flash/geom/Point_as.cpp:249
-#: libcore/asobj/flash/geom/Point_as.cpp:333
-msgid "arguments after first discarded"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:1228
+msgid "Date.UTC needs one argument"
+msgstr "Date.UTC 需要一个参数"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:139
-#: libcore/asobj/flash/geom/Point_as.cpp:343
-#: libcore/asobj/flash/geom/Point_as.cpp:532
-msgid "first argument doesn't cast to object"
-msgstr ""
+#: libcore/asobj/Date_as.cpp:1252
+msgid "Date.UTC was called with more than 7 arguments"
+msgstr "Date.UTC 调用时带有超过 7 个参数"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:149
-msgid "first argument cast to object doesn't contain an 'x' member"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:315
+#, c-format
+msgid "::pause(%d) called "
+msgstr "::pause(%d) 被调用"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:157
-msgid "first argument cast to object doesn't contain an 'y' member"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:371
+msgid "No NetConnection associated with this NetStream, won't play"
+msgstr "没有 NetConnection 关联到该 NetStream, 将不会播放"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:200
+#: libcore/asobj/NetStream_as.cpp:382
+msgid "NetConnection is not connected. Won't play."
+msgstr "NetConnection 未连接。将不会播放"
+
+#: libcore/asobj/NetStream_as.cpp:395
 #, c-format
-msgid "Point.equals(%s): %s"
-msgstr ""
+msgid "Couldn't load URL %s"
+msgstr "无法加载 URL %s"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:201
-#: libcore/asobj/flash/geom/Point_as.cpp:447
-msgid "First arg must be an object"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:402
+#, c-format
+msgid "Connecting to movie: %s"
+msgstr "连接到电影:%s"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:211
-#: libcore/asobj/flash/geom/Point_as.cpp:457
+#: libcore/asobj/NetStream_as.cpp:408
 #, c-format
-msgid "Point.equals(%s): %s %s"
-msgstr ""
+msgid "NetStream.play(%s): failed starting playback"
+msgstr "NetStream.play(%s): 无法开始回放"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:212
-#: libcore/asobj/flash/geom/Point_as.cpp:458
-msgid "First arg must be an instance of"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:431
+msgid "NetStream_as::initVideoDecoder: hot-plugging video consumer"
+msgstr "NetStream_as::initVideoDecoder:热插拔视频消耗"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:248
+#: libcore/asobj/NetStream_as.cpp:436
 #, c-format
-msgid "Point.normalize(%s): %s"
-msgstr ""
+msgid "NetStream: Could not create Video decoder: %s"
+msgstr "NetStream:无法创建视频解码器:%s"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:353
-msgid "first argument casted to object doesn't contain an 'x' member"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:460
+msgid "NetStream_as::initAudioDecoder: hot-plugging audio consumer"
+msgstr "NetStream_as::initAudioDecoder: 热插拔家庭音频"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:361
-msgid "first argument casted to object doesn't contain an 'y' member"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:467
+#, c-format
+msgid "Could not create Audio decoder: %s"
+msgstr "无法创建音频解码器:%s"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:426
-#: libcore/asobj/flash/geom/Point_as.cpp:436
-#: libcore/asobj/flash/geom/Point_as.cpp:446
+#: libcore/asobj/NetStream_as.cpp:493
 #, c-format
-msgid "Point.distance(%s): %s"
-msgstr ""
+msgid "Gnash could not get stream '%s' from NetConnection"
+msgstr "Gnash 无法从 NetConnection 获取流 '%s'"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:437
-msgid "arguments after first two discarded"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:503
+msgid "No Media handler registered, can't parse NetStream input"
+msgstr "没有已注册的媒体处理器,无法解析 NetStream 输入"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:510
-#: libcore/asobj/flash/geom/Point_as.cpp:520
-#: libcore/asobj/flash/geom/Point_as.cpp:531
-#: libcore/asobj/flash/geom/Point_as.cpp:547
+#: libcore/asobj/NetStream_as.cpp:511
+msgid "Unable to create parser for NetStream input"
+msgstr "不能为 NetStream 输入创建解析器"
+
+#: libcore/asobj/NetStream_as.cpp:536
 #, c-format
-msgid "Point.interpolate(%s): %s"
-msgstr ""
+msgid "%p.startPlayback: playHead position reset to 0"
+msgstr "%p.startPlayback: playHead 位置重设为0"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:521
-msgid "arguments after first three discarded"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:542
+msgid "Setting playStart status"
+msgstr "设置 playStart 状态"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:548
-msgid "second argument doesn't cast to object"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:561
+msgid "getDecodedVideoFrame: no parser available"
+msgstr "getDecodedVideoFrame:没有可用的解析器"
 
-#: libcore/asobj/flash/geom/Point_as.cpp:595
-#: libcore/asobj/flash/geom/Point_as.cpp:604
+#: libcore/asobj/NetStream_as.cpp:570
 #, c-format
-msgid "Point.polar(%s): %s"
+msgid ""
+"getDecodedVideoFrame(%d): no more video frames in input "
+"(nextVideoFrameTimestamp returned false, parsingComplete=%d)"
 msgstr ""
+"getDecodedVideoFrame(%d): 输入中没有更多的视频帧 (nextVideoFrameTimestamp 返"
+"回 false, parsingComplete=%d)"
 
-#: libcore/asobj/flash/geom/ColorTransform_as.cpp:365
-#, c-format
+#: libcore/asobj/NetStream_as.cpp:581
 msgid ""
-"ColorTransform(%s): not enough arguments (need 8). Constructing with default "
-"values"
+"getDecodedVideoFrame setting playStop status (parsing complete and "
+"nextVideoFrameTimestamp() returned false)"
 msgstr ""
+"getDecodedVideoFrame 设置 playStop 状态 (解析完成, nextVideoFrameTimestamp"
+"() 返回 false)"
 
-#: libcore/asobj/flash/geom/ColorTransform_as.cpp:380
+#: libcore/asobj/NetStream_as.cpp:592
 #, c-format
-msgid "ColorTransform(%s): discarding extra arguments"
-msgstr ""
+msgid "%p.getDecodedVideoFrame(%d): next video frame is in the future (%d)"
+msgstr "%p.getDecodedVideoFrame(%d): 下一个视频帧在后面 (%d)"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:184
+#: libcore/asobj/NetStream_as.cpp:603
 #, c-format
-msgid "Matrix.concat(%s): needs one argument"
+msgid ""
+"nextVideoFrameTimestamp returned true (%d), but decodeNextVideoFrame "
+"returned null, I don't think this should ever happen"
 msgstr ""
+"nextVideoFrameTimestamp 返回 true (%d), 但 decodeNextVideoFrame 返回为空, 我"
+"认为这不应该发生。"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:198
+#: libcore/asobj/NetStream_as.cpp:613
 #, c-format
-msgid "Matrix.concat(%s): needs a Matrix object"
+msgid ""
+"%p.getDecodedVideoFrame(%d): last video frame decoded (should set playback "
+"status to STOP?)"
 msgstr ""
+"%p.getDecodedVideoFrame(%d): 上一个视频帧被解码 (是否应该设置回放状态为 "
+"STOP?)"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:255
+#: libcore/asobj/NetStream_as.cpp:621
 #, c-format
-msgid "Matrix.createBox(%s): needs at least two arguments"
-msgstr ""
+msgid ""
+"%p.getDecodedVideoFrame(%d): next video frame is in the future, we'll return "
+"this one"
+msgstr "%p.getDecodedVideoFrame(%d): 下一个视频帧在后面,我们会返回它"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:314
-#, c-format
-msgid "Matrix.createGradientBox(%s): needs at least two arguments"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:641
+msgid "decodeNextVideoFrame: no parser available"
+msgstr "decodeNextVideoFrame: 没有可用的解析器"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:388
+#: libcore/asobj/NetStream_as.cpp:648
 #, c-format
-msgid "Matrix.deltaTransformPoint(%s): needs one argument"
-msgstr ""
+msgid "%p.decodeNextVideoFrame(): no more video frames in input"
+msgstr "%p.decodeNextVideoFrame(): 输入中没有更多的视频帧"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:402
+#: libcore/asobj/NetStream_as.cpp:664
+msgid "Error decoding encoded video frame in NetStream input"
+msgstr "NetStream 输入中的编码视频帧发生解码错误"
+
+#: libcore/asobj/NetStream_as.cpp:680
 #, c-format
-msgid "Matrix.deltaTransformPoint(%s): needs an object"
-msgstr ""
+msgid "%p.decodeNextAudioFrame: no more video frames in input"
+msgstr "%p.decodeNextAudioFrame: 输入中没有更多的视频帧"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:523
+#: libcore/asobj/NetStream_as.cpp:710
 #, c-format
-msgid "Matrix.rotate(%s): needs one argument"
+msgid ""
+"NetStream_as::decodeNextAudioFrame: %d bytes of encoded audio decoded to %d "
+"bytes"
 msgstr ""
+"NetStream_as::decodeNextAudioFrame: 编码音频中的 %d 字节被解码成 %d 字节"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:599
-#: libcore/asobj/flash/geom/Matrix_as.cpp:770
+#: libcore/asobj/NetStream_as.cpp:731
 #, c-format
-msgid "Matrix.translate(%s): needs two arguments"
-msgstr ""
+msgid "NetStream_as::seek(%d): no parser, no party"
+msgstr "NetStream_as::seek(%d): 没有解析器,没有 party"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:704
+#: libcore/asobj/NetStream_as.cpp:751
+msgid "Setting invalidTime status"
+msgstr "设置 invalidTime 状态"
+
+#: libcore/asobj/NetStream_as.cpp:758
 #, c-format
-msgid "Matrix.translate(%s): needs one argument"
-msgstr ""
+msgid "_parser->seek(%d) returned %d"
+msgstr "_parser->seek(%d) 返回 %d"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:717
+#: libcore/asobj/NetStream_as.cpp:765
 #, c-format
-msgid "Matrix.transformPoint(%s): needs an object"
-msgstr ""
+msgid "%p.seek: playHead position set to %d"
+msgstr "%p.seek: playHead 位置设为 %d"
 
-#: libcore/asobj/flash/geom/Matrix_as.cpp:729
+#: libcore/asobj/NetStream_as.cpp:803
 #, c-format
-msgid "Matrix.transformPoint(%s): object must be a Point"
+msgid ""
+"%p.refreshAudioBuffer: doing nothing as playhead is paused - bufferLength=%d/"
+"%d"
 msgstr ""
+"%p.refreshAudioBuffer: 什么也不做,因为 playhead 被暂停 - bufferLength=%d/%d"
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:122
-#: libcore/asobj/flash/geom/Transform_as.cpp:198
-msgid "Failed to construct flash.geom.ColorTransform!"
+#: libcore/asobj/NetStream_as.cpp:812
+#, c-format
+msgid ""
+"%p.refreshAudioBuffer: doing nothing as current position was already decoded "
+"- bufferLength=%d/%d"
 msgstr ""
+"%p.refreshAudioBuffer: 什么也不做,因为当前位置已经解码 - bufferLength=%d/%d"
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:145
+#: libcore/asobj/NetStream_as.cpp:824
 #, c-format
-msgid "Transform.colorTransform(%s): extra arguments discarded"
+msgid ""
+"%p.refreshAudioBuffer: currentPosition=%d, playHeadState=%d, bufferLength="
+"%d, bufferTime=%d"
 msgstr ""
+"%p.refreshAudioBuffer: currentPosition=%d, playHeadState=%d, bufferLength="
+"%d, bufferTime=%d"
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:155
+#: libcore/asobj/NetStream_as.cpp:962
 #, c-format
-msgid "Transform.colorTransform(%s): argument is not an object"
-msgstr ""
+msgid "%p.pushDecodedAudioFrames(%d) : buffer overrun (%d/%d)."
+msgstr "%p.pushDecodedAudioFrames(%d) : 缓冲区溢出 (%d/%d)."
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:170
+#: libcore/asobj/NetStream_as.cpp:978
 #, c-format
-msgid "Transform.colorTransform(%s): argument is not a ColorTransform"
+msgid ""
+"%p.pushDecodedAudioFrames(%d): no more audio frames in input "
+"(nextAudioFrameTimestamp returned false, parsingComplete=%d)"
 msgstr ""
+"%p.pushDecodedAudioFrames(%d): 输入中没有更多的音频帧 "
+"(nextAudioFrameTimestamp 返回 false, parsingComplete=%d)"
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:236
-msgid "Failed to construct flash.geom.Matrix!"
+#: libcore/asobj/NetStream_as.cpp:989
+msgid ""
+"pushDecodedAudioFrames setting playStop status (parsing complete and "
+"nextAudioFrameTimestamp returned false)"
 msgstr ""
+"pushDecodedAudioFrames 设置 playStop 状态 (解析完成,  "
+"nextAudioFrameTimestamp 返回 false)"
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:305
+#: libcore/asobj/NetStream_as.cpp:1002
 #, c-format
-msgid "Transform.matrix(%s): extra arguments discarded"
-msgstr ""
+msgid "%p.pushDecodedAudioFrames(%d): next audio frame is in the future (%d)"
+msgstr "%p.pushDecodedAudioFrames(%d): 下一个音频帧在后面 (%d)"
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:315
+#: libcore/asobj/NetStream_as.cpp:1015
 #, c-format
-msgid "Transform.matrix(%s): argument is not an object"
+msgid ""
+"nextAudioFrameTimestamp returned true (%d), but decodeNextAudioFrame "
+"returned null, I don't think this should ever happen"
 msgstr ""
+"nextAudioFrameTimestamp 返回 true (%d), 而 decodeNextAudioFrame 返回空, 我认"
+"为这不应该发生"
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:346
+#: libcore/asobj/NetStream_as.cpp:1024
 #, c-format
-msgid "flash.geom.Transform(%s): needs one argument"
-msgstr ""
+msgid "pushDecodedAudioFrames(%d): Decoded audio frame contains no samples"
+msgstr "pushDecodedAudioFrames(%d):解码后的音频帧不包含任何样本"
 
-#: libcore/asobj/flash/geom/Transform_as.cpp:356
+#: libcore/asobj/NetStream_as.cpp:1033
 #, c-format
-msgid "Transform(%s): %s"
-msgstr ""
+msgid "pushDecodedAudioFrames(%d) pushing %dth frame with timestamp %d"
+msgstr "pushDecodedAudioFrames(%d) 推入第 %d 帧待时间戳 %d"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:816
-msgid ""
-"BitmapData.copyChannel(). Multiple destination channels are not supported"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1051
+msgid "resuming playback clock on audio consume"
+msgstr "在音频消耗上恢复回放时钟"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:842
+#: libcore/asobj/NetStream_as.cpp:1116
+#, c-format
 msgid ""
-"BitmapData.copyChannel(): no part of source rectangleoverlaps with the "
-"source BitmapData"
+"%p.refreshVideoFrame: doing nothing as playhead is paused - bufferLength=%d, "
+"bufferTime=%d"
 msgstr ""
+"%p.refreshVideoFrame: 什么也不做,因为 playhead 被暂停 - bufferLength=%d, "
+"bufferTime=%d"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:856
+#: libcore/asobj/NetStream_as.cpp:1126
+#, c-format
 msgid ""
-"BitmapData.copyChannel(): destination area is wholly outside the destination "
-"BitmapData"
+"%p.refreshVideoFrame: doing nothing as current position was already decoded "
+"- bufferLength=%d, bufferTime=%d"
 msgstr ""
+"%p.refreshVideoFrame: 什么也不做,因为 current position 已经被解码 - "
+"bufferLength=%d, bufferTime=%d"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:914
-msgid "BitmapData.copyPixels(): arguments after the first three are discarded"
+#: libcore/asobj/NetStream_as.cpp:1138
+#, c-format
+msgid ""
+"%p.refreshVideoFrame: currentPosition=%d, playHeadState=%d, bufferLength=%d, "
+"bufferTime=%d"
 msgstr ""
+"%p.refreshVideoFrame: currentPosition=%d, playHeadState=%d, bufferLength=%d, "
+"bufferTime=%d"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:964
+#: libcore/asobj/NetStream_as.cpp:1152
+#, fuzzy, c-format
 msgid ""
-"BitmapData.copyPixels(): no part of source rectangleoverlaps with the source "
-"BitmapData"
+"%p.refreshVideoFrame(): no more video frames to decode (DEC_STOPPED, null "
+"from getDeodedVideoFrame)"
 msgstr ""
+"%p.refreshVideoFrame(): 没有更多要解码的视频帧(DEC_STOPPED, 为空来自 "
+"getDecodedVideoFrame)"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:978
+#: libcore/asobj/NetStream_as.cpp:1161
+#, c-format
 msgid ""
-"BitmapData.copyPixels(): destination area is wholly outside the destination "
-"BitmapData"
-msgstr ""
+"%p.refreshVideoFrame(): last video frame was good enough for current position"
+msgstr "%p.refreshVideoFrame():上一个视频帧正好在当前位置好"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1064
+#: libcore/asobj/NetStream_as.cpp:1238
 #, c-format
-msgid "BitmapData.draw(%s) requires at least one argument"
-msgstr ""
+msgid ""
+"%p.advance: buffer empty while decoding, setting buffer to buffering and "
+"pausing playback clock"
+msgstr "%p.advance:解码时缓冲区为空,设置用于缓冲及播放回放时钟的缓冲区"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1076
-msgid "BitmapData.draw() with BitmapData argument"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1243
+msgid "Setting bufferEmpty status"
+msgstr "设置 bufferEmpty 状态"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1083
+#: libcore/asobj/NetStream_as.cpp:1252
 #, c-format
-msgid "BitmapData.draw(%s): first argument must be a MovieClip"
-msgstr ""
+msgid "%p.advance : bufferLength=%d, parsing completed"
+msgstr "%p.advance : bufferLength=%d, 解析完成"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1120
+#: libcore/asobj/NetStream_as.cpp:1264
 #, c-format
-msgid "BitmapData.fillRect(%s): needs an object"
-msgstr ""
+msgid "%p.advance: buffering - position=%d, buffer=%d/%d"
+msgstr "%p.advance: 正在缓冲 - position=%d, buffer=%d/%d"
 
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1157
-msgid "floodFill called on disposed BitmapData!"
-msgstr ""
-
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1231
-msgid "getPixel32 called on disposed BitmapData!"
-msgstr ""
-
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1361
-msgid "BitmapData.perlinNoise() stitch value"
-msgstr ""
-
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1562
-msgid "Failed to construct flash.geom.Rectangle!"
-msgstr ""
-
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1584
-msgid "BitmapData.loadBitmap requires one argument"
-msgstr ""
-
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1649
-msgid ""
-"BitmapData constructor requires at least two arguments. Will not construct a "
-"BitmapData"
-msgstr ""
-
-#: libcore/asobj/flash/display/BitmapData_as.cpp:1663
+#: libcore/asobj/NetStream_as.cpp:1283
+#, c-format
 msgid ""
-"BitmapData width and height must be between 1 and 2880. Will not construct a "
-"BitmapData"
+"%p.advance: buffer full (or parsing completed), resuming playback clock - "
+"position=%d, buffer=%d/%d"
 msgstr ""
+"%p.advance: 缓冲区已满 (或解析完成),继续回放时钟 - position=%d, buffer=%d/%d"
 
-#: libcore/asobj/MovieClipLoader.cpp:105
+#: libcore/asobj/NetStream_as.cpp:1304
 #, c-format
-msgid "MovieClipLoader.loadClip(%s): missing arguments"
-msgstr ""
+msgid "%p.advance: playHead position set to timestamp of first frame: %d"
+msgstr "%p.advance: playHead 位置设置为第一帧的时间戳: %d"
 
-#: libcore/asobj/MovieClipLoader.cpp:114
+#: libcore/asobj/NetStream_as.cpp:1311
 #, c-format
-msgid "MovieClipLoader.loadClip(%s): first argument must be a string"
-msgstr ""
+msgid ""
+"%p.advance: playHead position is 0 and parser still doesn't have a frame to "
+"set it to"
+msgstr "%p.advance: playHead 位置为0,而且还没有设置解析器到某一帧"
 
-#: libcore/asobj/MovieClipLoader.cpp:132
+#: libcore/asobj/NetStream_as.cpp:1351
 #, c-format
-msgid "Could not find target %s (evaluated from %s)"
+msgid ""
+"Moving NetStream playhead from timestamp %d to timestamp %d as there are no "
+"video frames yet, audio buffer is empty and next audio frame timestamp is "
+"there (see bug #26687)"
 msgstr ""
+"因为没有视频帧,从时间戳 %d 移动NetStream播放头到时间戳 %d,音频缓冲区是空"
+"的,下一个音频帧时间戳在那里(见bug#26687)"
 
-#: libcore/asobj/MovieClipLoader.cpp:149
+#: libcore/asobj/NetStream_as.cpp:1453
+msgid "attachAuxStreamer called while already attached"
+msgstr "attachAuxStreamer 在已连接时被调用"
+
+#: libcore/asobj/NetStream_as.cpp:1464
 #, c-format
-msgid "MovieClipLoader.unloadClip(%s): expected at least one argument"
-msgstr ""
+msgid "Could not attach NetStream aux streamer to sound handler: %s"
+msgstr "无法连接 NetStream 辅助流到声音处理器: %s"
 
-#: libcore/asobj/MovieClipLoader.cpp:156
+#: libcore/asobj/NetStream_as.cpp:1603
 #, c-format
-msgid "MovieClipLoader.unloadClip: %s"
-msgstr ""
+msgid ""
+"First argument to NetStream constructor doesn't cast to a NetConnection (%s)"
+msgstr "NetStream 构造器的第一个参数没有转换为一个 NetConnection (%s)"
 
-#: libcore/asobj/MovieClipLoader.cpp:180
-msgid "MovieClipLoader.getProgress(): missing argument"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1648
+msgid "NetStream_as play needs args"
+msgstr "NetStream_as 播放需要参数"
 
-#: libcore/asobj/MovieClipLoader.cpp:189
+#: libcore/asobj/NetStream_as.cpp:1655
 #, c-format
-msgid "MovieClipLoader.getProgress(%s): first argument is not an object"
-msgstr ""
+msgid "NetStream.play(%s): stream is not connected"
+msgstr "NetStream.play(%s): 未连接到流"
 
-#: libcore/asobj/MovieClipLoader.cpp:198
-#, c-format
-msgid "MovieClipLoader.getProgress(%s): first argument is not an sprite"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1704
+msgid "NetStream.attachAudio"
+msgstr "NetStream.attachAudio"
 
-#: libcore/asobj/Sound_as.cpp:420
-#, c-format
-msgid "Could not create audio decoder: %s"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1715
+msgid "NetStream.attachVideo"
+msgstr "NetStream.attachVideo"
 
-#: libcore/asobj/Sound_as.cpp:428
-msgid "No audio in Sound input."
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1726
+msgid "NetStream.publish"
+msgstr "NetStream.publish"
 
-#: libcore/asobj/Sound_as.cpp:581
-#, c-format
-msgid "Gnash could not open this URL: %s"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1737
+msgid "NetStream.receiveAudio"
+msgstr "NetStream.receiveAudio"
 
-#: libcore/asobj/Sound_as.cpp:592
-#, c-format
-msgid "Unable to create parser for Sound at %s"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1748
+msgid "NetStream.receiveVideo"
+msgstr "NetStream.receiveVideo"
 
-#: libcore/asobj/Sound_as.cpp:676
-msgid "No sound handler, nothing to start..."
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1759
+msgid "NetStream.send"
+msgstr "NetStream.send"
 
-#: libcore/asobj/Sound_as.cpp:682
-msgid "No MediaParser initialized, can't start an external sound"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1843
+msgid "NetStream.liveDelay"
+msgstr "NetStream.liveDelay"
 
-#: libcore/asobj/Sound_as.cpp:688
-msgid "Sound.start() has no effect on a streaming Sound"
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1900
+msgid "Invalid AMF data in FLV tag"
+msgstr "不合法的 FLV 标签中的 AMF 数据"
 
-#: libcore/asobj/Sound_as.cpp:735
-msgid "No sound handler, nothing to stop..."
-msgstr ""
+#: libcore/asobj/NetStream_as.cpp:1911
+msgid "Could not convert FLV metatag to as_value, passing undefined"
+msgstr "无法转换 FLV 元标签到 as_value, 传入未定义"
 
-#: libcore/asobj/Sound_as.cpp:763
-msgid "No sound handler, can't check duration..."
-msgstr ""
+#: libcore/asobj/LoadableObject.cpp:176
+msgid "XML.addRequestHeader: XML._customHeaders is not an object"
+msgstr "XML.addRequestHeader: XML._customHeaders 不是一个对象"
 
-#: libcore/asobj/Sound_as.cpp:788
-msgid ""
-"No sound handler, can't check position (we're likely not playing anyway)..."
-msgstr ""
+#: libcore/asobj/LoadableObject.cpp:193
+msgid "XML.addRequestHeader requires at least one argument"
+msgstr "XML.addRequestHeader 至少需要一个参数"
 
-#: libcore/asobj/Sound_as.cpp:855
-#, c-format
-msgid "No samples decoded from input of %d bytes"
-msgstr ""
+#: libcore/asobj/LoadableObject.cpp:206
+msgid "XML.addRequestHeader: single argument is not an array"
+msgstr "XML.addRequestHeader: 单个参数不是一个数组"
 
-#: libcore/asobj/Sound_as.cpp:955
+#: libcore/asobj/LoadableObject.cpp:222
 #, c-format
-msgid "new Sound(%d) : args after first one ignored"
-msgstr ""
+msgid "XML.addRequestHeader(%s): arguments after the second will be discarded"
+msgstr "XML.addRequestHeader(%s): 第二个之后的参数将被丢弃"
 
-#: libcore/asobj/Sound_as.cpp:969
+#: libcore/asobj/LoadableObject.cpp:237
 #, c-format
-msgid ""
-"new Sound(%s) : first argument isn't null or undefined, and isn't a "
-"DisplayObject. We'll take as an invalid DisplayObject ref."
-msgstr ""
+msgid "XML.addRequestHeader(%s): both arguments must be a string"
+msgstr "XML.addRequestHeader(%s): 所有参数必须是字符串"
 
-#: libcore/asobj/Sound_as.cpp:987
-msgid "-- start sound"
-msgstr ""
+#: libcore/asobj/LoadableObject.cpp:304
+msgid "sendAndLoad() requires at least two arguments"
+msgstr "sendAndLoad() 至少需要两个参数"
 
-#: libcore/asobj/Sound_as.cpp:1012
-msgid "-- stop sound "
-msgstr ""
+#: libcore/asobj/LoadableObject.cpp:312
+msgid "sendAndLoad(): invalid empty URL"
+msgstr "sendAndLoad(): 不合法的空 URL"
 
-#: libcore/asobj/Sound_as.cpp:1028 libcore/asobj/Sound_as.cpp:1083
-#, c-format
-msgid "No such export '%s'"
-msgstr ""
+#: libcore/asobj/LoadableObject.cpp:319
+msgid "sendAndLoad(): invalid target (must be an XML or LoadVars object)"
+msgstr "sendAndLoad(): 不合法的目标 (必须是一个 XML 或 LoadVars 对象)"
 
-#: libcore/asobj/Sound_as.cpp:1037
+#: libcore/asobj/LoadableObject.cpp:397
 #, c-format
-msgid "Export '%s' is not a sound"
-msgstr ""
+msgid "Loading from URL: '%s'"
+msgstr "加载自 URL: '%s'"
 
-#: libcore/asobj/Sound_as.cpp:1053
-msgid "-- attach sound"
-msgstr ""
+#: libcore/asobj/LoadableObject.cpp:417
+msgid "load() requires at least one argument"
+msgstr "load() 至少需要一个参数"
 
-#: libcore/asobj/Sound_as.cpp:1058
-msgid "attach sound needs one argument"
-msgstr ""
+#: libcore/asobj/LoadableObject.cpp:426
+msgid "load(): invalid empty URL"
+msgstr "load(): 不合法的空 URL"
 
-#: libcore/asobj/Sound_as.cpp:1068
-msgid "attachSound needs a non-empty string"
-msgstr ""
+#: libcore/asobj/Video_as.cpp:114
+msgid "attachVideo needs 1 arg"
+msgstr "attachVideo 需要 1 个参数"
 
-#: libcore/asobj/Sound_as.cpp:1092
+#: libcore/asobj/Video_as.cpp:126
 #, c-format
-msgid "Export '%s'is not a sound"
-msgstr ""
+msgid "attachVideo(%s) first arg is not a NetStream instance"
+msgstr "attachVideo(%s) 第一个参数不是一个 NetStream 实例"
 
-#: libcore/asobj/Sound_as.cpp:1127
-msgid "Sound.getPan()"
-msgstr ""
+#: libcore/asobj/Video_as.cpp:139
+msgid "Video.deblocking"
+msgstr "Video.deblocking"
 
-#: libcore/asobj/Sound_as.cpp:1142
-msgid "Sound.setDuration()"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:279
+msgid "Attempting to write to disabled LocalConnection!"
+msgstr "试图写入禁用的本地连接!"
 
-#: libcore/asobj/Sound_as.cpp:1157
-msgid "Sound.setPosition()"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:288
+msgid "Failed to attach shared memory segment"
+msgstr "无法连接共享内存段"
 
-#: libcore/asobj/Sound_as.cpp:1164
-msgid "Sound.getTransform()"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:296
+msgid "Failed to get shm lock"
+msgstr "无法得到 shm 锁"
 
-#: libcore/asobj/Sound_as.cpp:1177
-#, c-format
-msgid "Sound.getVolume(%s) : arguments ignored"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:332
+msgid "Invalid connection name data"
+msgstr "不合法的连接名数据"
 
-#: libcore/asobj/Sound_as.cpp:1193
-msgid "Sound.loadSound() needs at least 1 argument"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:431
+msgid "Failed to get lock on shared memory! Will not remove listener"
+msgstr "无法在共享内存上获得锁!不会移除监听器"
 
-#: libcore/asobj/Sound_as.cpp:1208
-#, c-format
-msgid "Sound.loadSound(%s): arguments after first 2 discarded"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:461
+msgid "Failed to open shared memory segment"
+msgstr "无法打开共享内存段"
 
-#: libcore/asobj/Sound_as.cpp:1222
-msgid "Sound.setPan()"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:534
+msgid "LocalConnection.connect() expects exactly 1 argument"
+msgstr "LocalConnection.connect() 只需要1个参数"
 
-#: libcore/asobj/Sound_as.cpp:1229
-msgid "Sound.setTransform()"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:542
+msgid "LocalConnection.connect(): first argument must be a string"
+msgstr "LocalConnection.connect(): 第一个参数必须是个字符串"
 
-#: libcore/asobj/Sound_as.cpp:1238
-msgid "set volume of sound needs one argument"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:587
+#: libcore/asobj/LocalConnection_as.cpp:599
+#: libcore/asobj/LocalConnection_as.cpp:612
+#, c-format
+msgid "LocalConnection.send(%s): requires at least 2 arguments"
+msgstr "LocalConnection.send(%s): 至少需要2个参数"
 
-#: libcore/asobj/Sound_as.cpp:1253
-msgid "Sound.checkPolicyFile"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:783
+msgid "No space for listener in shared memory!"
+msgstr "在共享内存中没有监听器的足够空间!"
 
-#: libcore/asobj/Sound_as.cpp:1266
-msgid "Sound.areSoundsInaccessible()"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:844
+#, c-format
+msgid "Invalid domain %s"
+msgstr "不合法域名 %s"
 
-#: libcore/asobj/XML_as.cpp:464
-msgid "XML data is empty"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:851
+#, c-format
+msgid "Invalid function name %s"
+msgstr "不合法的函数名称 %s"
 
-#: libcore/asobj/XML_as.cpp:740
-msgid "no text for text node creation"
-msgstr ""
+#: libcore/asobj/LocalConnection_as.cpp:877
+msgid "Fewer AMF fields than expected."
+msgstr "少于预期的AMF字段。"
 
-#: libcore/asobj/XML_as.cpp:753
-msgid "XML.parseXML() needs one argument"
-msgstr ""
+#: libcore/asobj/Camera_as.cpp:259
+msgid "No MediaHandler exists! Cannot create a Camera object"
+msgstr "MediaHandler 不存在! 不能创建 Camera 对象"
 
-#: libcore/asobj/MovieClip_as.cpp:297
-#, c-format
-msgid "createEmptyMovieClip needs 2 args, but %d given, returning undefined"
-msgstr ""
+#: libcore/asobj/Camera_as.cpp:312
+msgid "Camera::motionLevel can be set, but it's not implemented"
+msgstr "Camera::motionLevel 可以设置,但还没有实现"
 
-#: libcore/asobj/MovieClip_as.cpp:305
-#, c-format
-msgid "createEmptyMovieClip takes 2 args, but %d given, discarding the excess"
-msgstr ""
+#: libcore/asobj/Camera_as.cpp:331
+msgid "Camera::quality can be set, but it's not implemented"
+msgstr "Camera::quality 可以设置,但还没有实现"
 
-#: libcore/asobj/MovieClip_as.cpp:363
-msgid "MovieClip.cacheAsBitmap()"
-msgstr ""
+#: libcore/asobj/Camera_as.cpp:353
+msgid "Camera::activityLevel only has default value"
+msgstr "Camera::activityLevel 是默认值"
 
-#: libcore/asobj/MovieClip_as.cpp:375
-msgid "MovieClip.filters()"
-msgstr ""
+#: libcore/asobj/Camera_as.cpp:358
+msgid "Attempt to set activity property of Camera"
+msgstr "试图设置 Camera 的 activity 属性"
 
-#: libcore/asobj/MovieClip_as.cpp:394
-msgid "MovieClip.forceSmoothing()"
-msgstr ""
+#: libcore/asobj/Camera_as.cpp:370
+msgid "Camera::bandwidth only has default value"
+msgstr "Camera::bandwidth 是默认值"
 
-#: libcore/asobj/MovieClip_as.cpp:404
-msgid "MovieClip.opaqueBackground()"
-msgstr ""
+#: libcore/asobj/Camera_as.cpp:375
+msgid "Attempt to set bandwidth property of Camera"
+msgstr "试图设置 Camera 的 bandwidth 属性"
 
-#: libcore/asobj/MovieClip_as.cpp:414
-msgid "MovieClip.scale9Grid()"
-msgstr ""
+#: libcore/asobj/Camera_as.cpp:391
+msgid "Attempt to set currentFPS property of Camera"
+msgstr "试图设置 Camera 的 currentFPS 属性"
+
+#: libcore/asobj/Camera_as.cpp:407
+msgid "Attempt to set fps property of Camera"
+msgstr "试图设置 Camera 的 fps 属性"
+
+#: libcore/asobj/Camera_as.cpp:423
+msgid "Attempt to set height property of Camera, use setMode"
+msgstr "试图设置 Camera 的 height 属性,使用 setMode"
+
+#: libcore/asobj/Camera_as.cpp:446
+msgid "Attempt to set index property of Camera"
+msgstr "试图设置 Camera 的 index 属性"
+
+#: libcore/asobj/Camera_as.cpp:458
+msgid "Camera::motionLevel only has default value"
+msgstr "Camera::motionLevel 只有默认值"
+
+#: libcore/asobj/Camera_as.cpp:463
+msgid "Attempt to set motionLevel property of Camera"
+msgstr "试图设置 Camera 的 motionLevel 属性"
+
+#: libcore/asobj/Camera_as.cpp:475
+msgid "Camera::motionTimeout"
+msgstr "Camera::motionTimeout"
+
+#: libcore/asobj/Camera_as.cpp:480
+msgid "Attempt to set motionTimeout property of Camera"
+msgstr "试图设置 Camera 的 motionTimeout 属性"
+
+#: libcore/asobj/Camera_as.cpp:492
+msgid "Camera.muted"
+msgstr "Camera.muted"
+
+#: libcore/asobj/Camera_as.cpp:497
+msgid "Attempt to set muted property of Camera"
+msgstr "试图设置 Camera 的 muted 属性"
+
+#: libcore/asobj/Camera_as.cpp:513
+msgid "Attempt to set name property of Camera"
+msgstr "试图设置 Camera 的 name 属性"
+
+#: libcore/asobj/Camera_as.cpp:524
+msgid "Attempt to set names property of Camera"
+msgstr "试图设置 Camera 的 names 属性"
+
+#: libcore/asobj/Camera_as.cpp:554
+msgid "Camera::quality has only default values"
+msgstr "Camera::quality 只有默认值"
+
+#: libcore/asobj/Camera_as.cpp:559
+msgid "Attempt to set quality property of Camera"
+msgstr "试图设置 Camera 的 quality 属性"
+
+#: libcore/asobj/Camera_as.cpp:587
+msgid "Camera.setCursor"
+msgstr "Camera.setCursor"
+
+#: libcore/asobj/Camera_as.cpp:594
+msgid "Camera.setKeyFrameInterval"
+msgstr "Camera.setKeyFrameInterval"
+
+#: libcore/asobj/Camera_as.cpp:608
+msgid "Attempt to set width property of Camera, use setMode"
+msgstr "试图设置 Camera 的 width 属性,使用 setMode"
+
+#: libcore/asobj/SharedObject_as.cpp:163
+#, c-format
+msgid "Problems serializing an object's member %s=%s"
+msgstr "序列化一个对象的成员 %s=%s 时出现问题"
+
+#: libcore/asobj/SharedObject_as.cpp:323
+#, c-format
+msgid ""
+"SharedObject.flush() called with a minimum disk space argument (%d), which "
+"is currently ignored"
+msgstr "SharedObject.flush() 调用时带有一个最小的磁盘空间参数 (%d),当前被忽略"
+
+#: libcore/asobj/SharedObject_as.cpp:331
+#, c-format
+msgid "Couldn't create dir for flushing SharedObject %s"
+msgstr "无法为写入 SharedObject %s 创建目录"
+
+#: libcore/asobj/SharedObject_as.cpp:344
+#, c-format
+msgid ""
+"Attempting to write object %s when it's SOL Read Only is set! Refusing..."
+msgstr "当SOL设置为只读时,试图写入对象 %s!拒绝..."
+
+#: libcore/asobj/SharedObject_as.cpp:352
+#, c-format
+msgid "SharedObject::flush(): Failed opening file '%s' in binary mode"
+msgstr "SharedObject::flush(): 无法以二进制模式打开文件 '%s'"
+
+#: libcore/asobj/SharedObject_as.cpp:371
+msgid "Error writing SOL header"
+msgstr "写入 SOL 头出错"
+
+#: libcore/asobj/SharedObject_as.cpp:378
+#, c-format
+msgid "Error writing %d bytes to output file %s"
+msgstr "写入 %d 字节到输出文件 %s 时出错"
+
+#: libcore/asobj/SharedObject_as.cpp:384
+#, c-format
+msgid "SharedObject '%s' written to filesystem."
+msgstr "SharedObject '%s' 已写入到文件系统。"
+
+#: libcore/asobj/SharedObject_as.cpp:493
+msgid "Attempting to open SOL file from non localhost-loaded SWF"
+msgstr "试图从非本地加载的 SWF 打开 SOL 文件"
+
+#: libcore/asobj/SharedObject_as.cpp:521
+#, c-format
+msgid ""
+"SharedObject path %s is outside the SWF domain %s. Cannot access this object."
+msgstr "SharedObject 路径 %s 在该 SWF 域名 %s 之外。不能访问该对象。"
+
+#: libcore/asobj/SharedObject_as.cpp:534
+#, c-format
+msgid ""
+"SharedObject path %s is not part of the SWF path %s. Cannot access this "
+"object."
+msgstr "SharedObject 路径 %s 不是 SWF 路径 %s 的一部分。不能访问该对象。"
+
+#: libcore/asobj/SharedObject_as.cpp:703
+msgid "SharedObject.connect(): needs at least one argument"
+msgstr "SharedObject.connect(): 至少需要一个参数"
+
+#: libcore/asobj/SharedObject_as.cpp:709
+msgid "SharedObject.connect()"
+msgstr "SharedObject.connect()"
+
+#: libcore/asobj/SharedObject_as.cpp:730
+msgid "SharedObject.setFps"
+msgstr "SharedObject.setFps"
+
+#: libcore/asobj/SharedObject_as.cpp:739
+msgid "SharedObject.send"
+msgstr "SharedObject.send"
+
+#: libcore/asobj/SharedObject_as.cpp:756
+#, c-format
+msgid "Arguments to SharedObject.flush(%s) will be ignored"
+msgstr "SharedObject.flush(%s) 参数将被忽略"
+
+#: libcore/asobj/SharedObject_as.cpp:787
+#, c-format
+msgid "SharedObject.getLocal(%s): missing object name"
+msgstr "SharedObject.getLocal(%s): 缺少对象名称"
+
+#: libcore/asobj/SharedObject_as.cpp:813
+msgid "SharedObject.getRemote()"
+msgstr "SharedObject.getRemote()"
+
+#: libcore/asobj/SharedObject_as.cpp:828
+msgid "SharedObject.deleteAll()"
+msgstr "SharedObject.deleteAll()"
+
+#: libcore/asobj/SharedObject_as.cpp:843
+msgid "SharedObject.getDiskUsage()"
+msgstr "SharedObject.getDiskUsage()"
+
+#: libcore/asobj/SharedObject_as.cpp:904
+#, c-format
+msgid "readSOL: SOL file %s is too short (only %s bytes long) to be valid."
+msgstr "readSOL: SOL 文件 %s 太短了 (只有 %s 字节长),不合法。"
+
+#: libcore/asobj/SharedObject_as.cpp:929
+msgid "readSOL: file ends before data segment"
+msgstr "readSOL: 数据段之前文件已结束"
+
+#: libcore/asobj/SharedObject_as.cpp:942
+msgid "SharedObject: end of buffer while reading length"
+msgstr "SharedObject: 当读取长度时缓冲区已结束"
+
+#: libcore/asobj/SharedObject_as.cpp:951
+msgid "readSOL: empty property name"
+msgstr "readSOL: 空属性名程"
+
+#: libcore/asobj/SharedObject_as.cpp:956
+msgid "SharedObject::readSOL: premature end of input"
+msgstr "SharedObject::readSOL: premature 输入已结束"
+
+#: libcore/asobj/SharedObject_as.cpp:967
+#, c-format
+msgid "SharedObject: error parsing SharedObject '%s'"
+msgstr "SharedObject: 错误解析 SharedObject '%s'"
+
+#: libcore/asobj/SharedObject_as.cpp:986
+#, c-format
+msgid "readSOL: Reading SharedObject %s: %s"
+msgstr "readSOL: 读取 SharedObject %s: %s"
+
+#: libcore/asobj/MovieClip_as.cpp:297
+#, c-format
+msgid "createEmptyMovieClip needs 2 args, but %d given, returning undefined"
+msgstr "createEmptyMovieClip 需要2个参数,但给定了 %d 个,返回未定义"
+
+#: libcore/asobj/MovieClip_as.cpp:305
+#, c-format
+msgid "createEmptyMovieClip takes 2 args, but %d given, discarding the excess"
+msgstr "createEmptyMovieClip 使用2个参数, 但给定了 %d 个,丢弃多余的"
+
+#: libcore/asobj/MovieClip_as.cpp:363
+msgid "MovieClip.cacheAsBitmap()"
+msgstr "MovieClip.cacheAsBitmap()"
+
+#: libcore/asobj/MovieClip_as.cpp:375
+msgid "MovieClip.filters()"
+msgstr "MovieClip.filters()"
+
+#: libcore/asobj/MovieClip_as.cpp:394
+msgid "MovieClip.forceSmoothing()"
+msgstr "MovieClip.forceSmoothing()"
+
+#: libcore/asobj/MovieClip_as.cpp:404
+msgid "MovieClip.opaqueBackground()"
+msgstr "MovieClip.opaqueBackground()"
+
+#: libcore/asobj/MovieClip_as.cpp:414
+msgid "MovieClip.scale9Grid()"
+msgstr "MovieClip.scale9Grid()"
 
 #: libcore/asobj/MovieClip_as.cpp:424
 msgid "MovieClip.scrollRect()"
-msgstr ""
+msgstr "MovieClip.scrollRect()"
 
 #: libcore/asobj/MovieClip_as.cpp:434
 msgid "MovieClip.tabIndex()"
-msgstr ""
+msgstr "MovieClip.tabIndex()"
 
 #: libcore/asobj/MovieClip_as.cpp:449
 #, c-format
 msgid ""
 "attachMovie called with wrong number of arguments expected 3 to 4, got (%d) "
 "- returning undefined"
-msgstr ""
+msgstr "attachMovie 需要3到4个参数,调用时参数数量错误,现有 (%d) - 返回未定义"
 
 #: libcore/asobj/MovieClip_as.cpp:464
 #, c-format
 msgid ""
 "attachMovie: exported resource '%s' is not a DisplayObject definition. "
 "Returning undefined"
-msgstr ""
+msgstr "attachMovie: 输出资源 '%s' 不是一个 DisplayObject 定义。 返回未定义"
 
 #: libcore/asobj/MovieClip_as.cpp:484
 #, c-format
 msgid "MovieClip.attachMovie: invalid depth %d passed; not attaching"
-msgstr ""
+msgstr "MovieClip.attachMovie: 传入非法的深度; 不会添加"
 
 #: libcore/asobj/MovieClip_as.cpp:509
 #, c-format
@@ -3778,111 +4205,121 @@ msgid ""
 "Fourth argument of attachMovie doesn't cast to an object (%s), we'll act as "
 "if it wasn't given"
 msgstr ""
+"attachMovie 的第四个参数不能转换到一个对象 (%s), 当没有给定时会使用我们"
 
 #: libcore/asobj/MovieClip_as.cpp:531
 #, c-format
 msgid "MovieClip.attachAudio(): %s"
-msgstr ""
+msgstr "MovieClip.attachAudio(): %s"
+
+#: libcore/asobj/MovieClip_as.cpp:532
+#: libcore/asobj/flash/geom/Point_as.cpp:427
+#: libcore/asobj/flash/geom/Point_as.cpp:511
+#: libcore/asobj/flash/geom/Point_as.cpp:596
+#: libcore/asobj/flash/geom/Point_as.cpp:604
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:154
+msgid "missing arguments"
+msgstr "缺少参数"
 
 #: libcore/asobj/MovieClip_as.cpp:541
 #, c-format
 msgid "MovieClip.attachAudio(%s): first arg doesn't cast to a NetStream"
-msgstr ""
+msgstr "MovieClip.attachAudio(%s): 第一个参数不会转换到一个 NetStream"
 
 #: libcore/asobj/MovieClip_as.cpp:559
 msgid "MovieClip.attachVideo()"
-msgstr ""
+msgstr "MovieClip.attachVideo()"
 
 #: libcore/asobj/MovieClip_as.cpp:584
 #, c-format
 msgid "%s.swapDepths() needs one arg"
-msgstr ""
+msgstr "%s.swapDepths() 需要一个参数"
 
 #: libcore/asobj/MovieClip_as.cpp:595
 #, c-format
 msgid "%s.swapDepths(%s): won't swap a clip below depth %d (%d)"
-msgstr ""
+msgstr "%s.swapDepths(%s): 将不会交换深度低于%d (%d) 的片段"
 
 #: libcore/asobj/MovieClip_as.cpp:613
 #, c-format
 msgid "%s.swapDepths(%s): invalid call, swapping to self?"
-msgstr ""
+msgstr "%s.swapDepths(%s): 非法调用,转换到 self?"
 
 #: libcore/asobj/MovieClip_as.cpp:625
 #, c-format
 msgid ""
 "%s.swapDepths(%s): invalid call, the two DisplayObjects don't have the same "
 "parent"
-msgstr ""
+msgstr "%s.swapDepths(%s): 非法调用, 两个DisplayObjects没有同一个父母"
 
 #: libcore/asobj/MovieClip_as.cpp:642
 #, c-format
 msgid ""
 "%s.swapDepths(%s): ignored, source and target DisplayObjects have the same "
 "depth %d"
-msgstr ""
+msgstr "%s.swapDepths(%s): 已忽略, 源和目标 DisplayObjects 有相同的深度 %d"
 
 #: libcore/asobj/MovieClip_as.cpp:657
 #, c-format
 msgid ""
 "%s.swapDepths(%s): first argument invalid (neither a movieclip nor a number)"
-msgstr ""
+msgstr "%s.swapDepths(%s): 第一个参数非法 (不是一个 movieclip 或数字)"
 
 #: libcore/asobj/MovieClip_as.cpp:666
 #, c-format
 msgid "%s.swapDepths(%s): requested depth is above the accessible range."
-msgstr ""
+msgstr "%s.swapDepths(%s): 请求的深度在访问范围之上。"
 
 #: libcore/asobj/MovieClip_as.cpp:682
 #, c-format
 msgid "%s.swapDepths(%s): ignored, DisplayObject already at depth %d"
-msgstr ""
+msgstr "%s.swapDepths(%s): 已忽略, DisplayObject 已经存在于深度 %d"
 
 #: libcore/asobj/MovieClip_as.cpp:716
 msgid "MovieClip.duplicateMovieClip() needs 2 or 3 args"
-msgstr ""
+msgstr "MovieClip.duplicateMovieClip() 需要2或3个参数"
 
 #: libcore/asobj/MovieClip_as.cpp:732
 #, c-format
 msgid "MovieClip.duplicateMovieClip: invalid depth %d passed; not duplicating"
-msgstr ""
+msgstr "MovieClip.duplicateMovieClip: 传入非法深度 %d ; 不能复制"
 
 #: libcore/asobj/MovieClip_as.cpp:764
 msgid "movieclip_goto_and_play needs one arg"
-msgstr ""
+msgstr "movieclip_goto_and_play 需要一个参数"
 
 #: libcore/asobj/MovieClip_as.cpp:774
 #, c-format
 msgid "movieclip_goto_and_play('%s') -- invalid frame"
-msgstr ""
+msgstr "movieclip_goto_and_play('%s') -- 非法帧"
 
 #: libcore/asobj/MovieClip_as.cpp:794
 msgid "movieclip_goto_and_stop needs one arg"
-msgstr ""
+msgstr "movieclip_goto_and_stop 需要一个参数"
 
 #: libcore/asobj/MovieClip_as.cpp:804
 #, c-format
 msgid "movieclip_goto_and_stop('%s') -- invalid frame"
-msgstr ""
+msgstr "movieclip_goto_and_stop('%s') -- 非法帧"
 
 #: libcore/asobj/MovieClip_as.cpp:879
 #, c-format
 msgid ""
 "MovieClip.loadMovie() expected 1 or 2 args, got %d - returning undefined"
-msgstr ""
+msgstr "MovieClip.loadMovie() 需要 1 或 2 个参数, 给出了 %d 个- 返回未定义"
 
 #: libcore/asobj/MovieClip_as.cpp:891
 #, c-format
 msgid ""
 "First argument of MovieClip.loadMovie(%s) evaluates to an empty string - "
 "returning undefined"
-msgstr ""
+msgstr "MovieClip.loadMovie(%s) 的第一个参数计算结果为空字符串  - 返回未定义"
 
 #: libcore/asobj/MovieClip_as.cpp:941
 #, c-format
 msgid ""
 "MovieClip.loadVariables() expected 1 or 2 args, got %d - returning undefined"
-msgstr ""
+msgstr "MovieClip.loadVariables() 需要 1 或 2 个参数, 给出了 %d - 返回未定义"
 
 #: libcore/asobj/MovieClip_as.cpp:953
 #, c-format
@@ -3890,1640 +4327,1739 @@ msgid ""
 "First argument passed to MovieClip.loadVariables(%s) evaluates to an empty "
 "string - returning undefined"
 msgstr ""
+"MovieClip.loadVariables(%s) 的第一个参数计算结果为空字符串 - 返回未定义"
 
 #: libcore/asobj/MovieClip_as.cpp:995
 #, c-format
 msgid "Can't find hitTest target %s"
-msgstr ""
+msgstr "无法找到的 hitTest 目标%s"
 
 #: libcore/asobj/MovieClip_as.cpp:1037
 #, c-format
 msgid "hitTest() called with %u args"
-msgstr ""
+msgstr "hitTest() 调用时带 %u 个参数"
 
 #: libcore/asobj/MovieClip_as.cpp:1066
 msgid "MovieClip.getInstanceAtDepth(): missing or undefined depth argument"
-msgstr ""
+msgstr "MovieClip.getInstanceAtDepth(): 缺少或未定义深度参数"
 
 #: libcore/asobj/MovieClip_as.cpp:1108
 msgid "No arguments passed to MovieClip.getURL()"
-msgstr ""
+msgstr "没有给 MovieClip.getURL() 传入参数"
 
 #: libcore/asobj/MovieClip_as.cpp:1117
 #, c-format
 msgid "MovieClip.getURL(%s): extra arguments dropped"
-msgstr ""
+msgstr "MovieClip.getURL(%s): 丢弃额外的参数"
 
-#: libcore/asobj/MovieClip_as.cpp:1195
+#: libcore/asobj/MovieClip_as.cpp:1196
 msgid ""
 "MovieClip.getTextSnapshot: failed to construct TextSnapshot (object probably "
 "overridden)"
-msgstr ""
+msgstr "MovieClip.getTextSnapshot: 无法构建TextSnapshot(对象可能覆盖)"
 
-#: libcore/asobj/MovieClip_as.cpp:1225
+#: libcore/asobj/MovieClip_as.cpp:1226
 #, c-format
 msgid ""
 "MovieClip.getBounds(%s): invalid call, first arg must be a DisplayObject"
-msgstr ""
+msgstr "MovieClip.getBounds(%s): 非法调用,第一个参数必须是 DisplayObject"
 
-#: libcore/asobj/MovieClip_as.cpp:1273
+#: libcore/asobj/MovieClip_as.cpp:1274
 msgid "MovieClip.globalToLocal() takes one arg"
-msgstr ""
+msgstr "MovieClip.globalToLocal() 需要一个参数"
 
-#: libcore/asobj/MovieClip_as.cpp:1281
+#: libcore/asobj/MovieClip_as.cpp:1282
 #, c-format
 msgid "MovieClip.globalToLocal(%s): first argument doesn't cast to an object"
-msgstr ""
+msgstr "MovieClip.globalToLocal(%s): 第一个参数不能转换为一个对象"
 
-#: libcore/asobj/MovieClip_as.cpp:1295
+#: libcore/asobj/MovieClip_as.cpp:1296
 #, c-format
 msgid ""
 "MovieClip.globalToLocal(%s): object parameter doesn't have an 'x' member"
-msgstr ""
+msgstr "MovieClip.globalToLocal(%s): 对象参数没有一个成员 'x'"
 
-#: libcore/asobj/MovieClip_as.cpp:1306
+#: libcore/asobj/MovieClip_as.cpp:1307
 #, c-format
 msgid ""
 "MovieClip.globalToLocal(%s): object parameter doesn't have an 'y' member"
-msgstr ""
+msgstr "MovieClip.globalToLocal(%s): 对象参数没有一个成员 'y'"
 
-#: libcore/asobj/MovieClip_as.cpp:1334
+#: libcore/asobj/MovieClip_as.cpp:1335
 msgid "MovieClip.localToGlobal() takes one arg"
-msgstr ""
+msgstr "MovieClip.localToGlobal() 需要一个参数"
 
-#: libcore/asobj/MovieClip_as.cpp:1342
+#: libcore/asobj/MovieClip_as.cpp:1343
 #, c-format
 msgid "MovieClip.localToGlobal(%s): first argument doesn't cast to an object"
-msgstr ""
+msgstr "MovieClip.localToGlobal(%s): 第一个参数不能转换为一个对象"
 
-#: libcore/asobj/MovieClip_as.cpp:1355
+#: libcore/asobj/MovieClip_as.cpp:1356
 #, c-format
 msgid ""
 "MovieClip.localToGlobal(%s): object parameter doesn't have an 'x' member"
-msgstr ""
+msgstr "MovieClip.localToGlobal(%s): 对象参数没有一个成员 'x'"
 
-#: libcore/asobj/MovieClip_as.cpp:1366
+#: libcore/asobj/MovieClip_as.cpp:1367
 #, c-format
 msgid ""
 "MovieClip.localToGlobal(%s): object parameter doesn't have an 'y' member"
-msgstr ""
+msgstr "MovieClip.localToGlobal(%s): 对象参数没有一个成员 'y'"
 
-#: libcore/asobj/MovieClip_as.cpp:1395
+#: libcore/asobj/MovieClip_as.cpp:1396
 #, c-format
 msgid "%s.setMask() : needs an argument"
-msgstr ""
+msgstr "%s.setMask() : 需要一个参数"
 
-#: libcore/asobj/MovieClip_as.cpp:1414
+#: libcore/asobj/MovieClip_as.cpp:1415
 #, c-format
 msgid "%s.setMask(%s) : first argument is not a DisplayObject"
-msgstr ""
+msgstr "%s.setMask(%s) : 第一个参数不是一个 DisplayObject"
 
-#: libcore/asobj/MovieClip_as.cpp:1444
+#: libcore/asobj/MovieClip_as.cpp:1445
 msgid "MovieClip.lineTo() needs at least two arguments"
-msgstr ""
+msgstr "MovieClip.lineTo() 至少需要两个参数"
 
-#: libcore/asobj/MovieClip_as.cpp:1470
+#: libcore/asobj/MovieClip_as.cpp:1471
 msgid "MovieClip.moveTo() takes two args"
-msgstr ""
+msgstr "MovieClip.moveTo() 需要两个参数"
 
-#: libcore/asobj/MovieClip_as.cpp:1521
+#: libcore/asobj/MovieClip_as.cpp:1522
 #, c-format
 msgid "MovieClip.lineStyle(%s): args after the first three will be discarded"
-msgstr ""
+msgstr "MovieClip.lineStyle(%s): 第三个之后的参数将被丢弃"
 
-#: libcore/asobj/MovieClip_as.cpp:1541
+#: libcore/asobj/MovieClip_as.cpp:1542
 #, c-format
 msgid ""
 "MovieClip.lineStyle(%s): invalid joinStylevalue '%s' (valid values: %s|%s|%s)"
-msgstr ""
+msgstr "MovieClip.lineStyle(%s): 非法的 joinStyle 值 '%s' (合法值: %s|%s|%s)"
 
-#: libcore/asobj/MovieClip_as.cpp:1557
+#: libcore/asobj/MovieClip_as.cpp:1558
 #, c-format
 msgid ""
 "MovieClip.lineStyle(%s): invalid capStyle value '%s' (valid values: none|"
 "round|square)"
 msgstr ""
+"MovieClip.lineStyle(%s): 非法的 capStyle 值 '%s' (合法值: none|round|square)"
 
-#: libcore/asobj/MovieClip_as.cpp:1582
+#: libcore/asobj/MovieClip_as.cpp:1583
 #, c-format
 msgid ""
 "MovieClip.lineStyle(%s): invalid noScale value '%s' (valid values: %s|%s|%s|"
 "%s)"
-msgstr ""
+msgstr "MovieClip.lineStyle(%s): 非法的 noScale 值 '%s' (合法值: %s|%s|%s|%s)"
 
-#: libcore/asobj/MovieClip_as.cpp:1630
+#: libcore/asobj/MovieClip_as.cpp:1631
 msgid "MovieClip.curveTo() takes four args"
-msgstr ""
+msgstr "MovieClip.curveTo() 需要四个参数"
 
-#: libcore/asobj/MovieClip_as.cpp:1671
+#: libcore/asobj/MovieClip_as.cpp:1672
 msgid "beginFill() with no args is a no-op"
-msgstr ""
+msgstr "beginFill() 不带参数是一个不执行任何操作的 no-op 函数"
 
-#: libcore/asobj/MovieClip_as.cpp:1715
+#: libcore/asobj/MovieClip_as.cpp:1716
 #, c-format
 msgid "%s.beginGradientFill(%s): invalid call: 5 arguments needed"
-msgstr ""
+msgstr "%s.beginGradientFill(%s): 非法调用: 需要5个参数"
 
-#: libcore/asobj/MovieClip_as.cpp:1726
+#: libcore/asobj/MovieClip_as.cpp:1727
 #, c-format
 msgid "%s.beginGradientFill(%s): extra arguments invalidate call!"
-msgstr ""
+msgstr "%s.beginGradientFill(%s): 参数多余的非法调用!"
 
-#: libcore/asobj/MovieClip_as.cpp:1746
+#: libcore/asobj/MovieClip_as.cpp:1747
 #, c-format
 msgid ""
 "%s.beginGradientFill(%s): first arg must be 'radial', 'focal', or 'linear'"
 msgstr ""
+"%s.beginGradientFill(%s): 第一个参数必须是 'radial', 'focal', 或 'linear'"
 
-#: libcore/asobj/MovieClip_as.cpp:1762
+#: libcore/asobj/MovieClip_as.cpp:1763
 #, c-format
 msgid ""
 "%s.beginGradientFill(%s): one or more of the args from 2nd to 5th don't cast "
 "to objects"
-msgstr ""
+msgstr "%s.beginGradientFill(%s): 第2到第5个参数中的一个或多个不能转换为对象"
 
-#: libcore/asobj/MovieClip_as.cpp:1776
+#: libcore/asobj/MovieClip_as.cpp:1777
 #, c-format
 msgid ""
 "%s.beginGradientFill(%s): colors, alphas and ratios args don't have same "
 "length"
-msgstr ""
+msgstr "%s.beginGradientFill(%s): colors, alphas 和 ratios 参数没有同样的长度"
 
-#: libcore/asobj/MovieClip_as.cpp:1928
+#: libcore/asobj/MovieClip_as.cpp:1929
 #, c-format
 msgid "min/max bbox values in MovieClip.startDrag(%s) swapped, fixing"
-msgstr ""
+msgstr "MovieClip.startDrag(%s) 中最小/最大 bbox 值已交换, 固定"
 
-#: libcore/asobj/MovieClip_as.cpp:1933
+#: libcore/asobj/MovieClip_as.cpp:1934
 #, c-format
 msgid "non-finite bbox values in MovieClip.startDrag(%s), took as zero"
-msgstr ""
+msgstr "MovieClip.startDrag(%s) 中非限定 bbox 值, 取0值"
 
-#: libcore/asobj/MovieClip_as.cpp:2077
+#: libcore/asobj/MovieClip_as.cpp:2078
 msgid "Failed to construct flash.geom.Transform!"
-msgstr ""
+msgstr "无法构建 flash.geom.Transform!"
 
-#: libcore/asobj/MovieClip_as.cpp:2095
+#: libcore/asobj/MovieClip_as.cpp:2096
 msgid "MovieClip.beginMeshFill"
-msgstr ""
+msgstr "MovieClip.beginMeshFill"
 
-#: libcore/asobj/LoadVars_as.cpp:145
-#, c-format
-msgid "new LoadVars(%s) - arguments discarded"
-msgstr ""
+#: libcore/asobj/System_as.cpp:310
+msgid "System.security.allowDomain"
+msgstr "System.security.allowDomain"
 
-#: libcore/asobj/Selection_as.cpp:189
-#, c-format
-msgid "Selection.setFocus: expected 1 argument, got %d"
-msgstr ""
+#: libcore/asobj/System_as.cpp:321
+msgid "System.security.allowInsecureDomain"
+msgstr "System.security.allowInsecureDomain"
 
-#: libcore/asobj/Camera_as.cpp:259
-msgid "No MediaHandler exists! Cannot create a Camera object"
-msgstr ""
+#: libcore/asobj/System_as.cpp:329
+msgid "System.security.loadPolicyFile"
+msgstr "System.security.loadPolicyFile"
 
-#: libcore/asobj/Camera_as.cpp:312
-msgid "Camera::motionLevel can be set, but it's not implemented"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:331
-msgid "Camera::quality can be set, but it's not implemented"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:353
-msgid "Camera::activityLevel only has default value"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:358
-msgid "Attempt to set activity property of Camera"
-msgstr ""
-
-#: libcore/asobj/Camera_as.cpp:370
-msgid "Camera::bandwidth only has default value"
-msgstr ""
+#: libcore/asobj/System_as.cpp:350
+msgid "System.showSettings"
+msgstr "System.showSettings"
 
-#: libcore/asobj/Camera_as.cpp:375
-msgid "Attempt to set bandwidth property of Camera"
-msgstr ""
+#: libcore/asobj/System_as.cpp:367
+msgid "System.exactSettings"
+msgstr "System.exactSettings"
 
-#: libcore/asobj/Camera_as.cpp:391
-msgid "Attempt to set currentFPS property of Camera"
-msgstr ""
+#: libcore/asobj/System_as.cpp:385
+msgid "System.useCodepage"
+msgstr "System.useCodepage"
 
-#: libcore/asobj/Camera_as.cpp:407
-msgid "Attempt to set fps property of Camera"
-msgstr ""
+#: libcore/asobj/Function_as.cpp:105
+msgid "Function.apply() called with no args"
+msgstr "Function.apply() 调用时没有参数"
 
-#: libcore/asobj/Camera_as.cpp:423
-msgid "Attempt to set height property of Camera, use setMode"
-msgstr ""
+#: libcore/asobj/Function_as.cpp:129
+#, c-format
+msgid ""
+"Function.apply() got %d args, expected at most 2 -- discarding the ones in "
+"excess"
+msgstr "Function.apply() 有 %d 个参数,预计最多2个参数,- 丢弃多余的参数"
 
-#: libcore/asobj/Camera_as.cpp:446
-msgid "Attempt to set index property of Camera"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:100
+#, c-format
+msgid "%s needs one argument"
+msgstr "%s 需要一个参数"
 
-#: libcore/asobj/Camera_as.cpp:458
-msgid "Camera::motionLevel only has default value"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:106
+#, c-format
+msgid "%s has more than one argument"
+msgstr "%s 有一个以上的参数"
 
-#: libcore/asobj/Camera_as.cpp:463
-msgid "Attempt to set motionLevel property of Camera"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:323
+msgid "Extensions enabled, scanning plugin dir for load"
+msgstr "扩展被启用,扫描加载的插件目录"
 
-#: libcore/asobj/Camera_as.cpp:475
-msgid "Camera::motionTimeout"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:328
+msgid "Extensions disabled"
+msgstr "扩展被禁用"
 
-#: libcore/asobj/Camera_as.cpp:480
-msgid "Attempt to set motionTimeout property of Camera"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:493
+#, c-format
+msgid "%s needs at least one argument"
+msgstr "%s 需要至少一个参数"
 
-#: libcore/asobj/Camera_as.cpp:492
-msgid "Camera.muted"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:500
+#, c-format
+msgid "%s has more than two arguments"
+msgstr "%s 有两个以上的参数"
 
-#: libcore/asobj/Camera_as.cpp:497
-msgid "Attempt to set muted property of Camera"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:594
+#, c-format
+msgid "%s needs at least three arguments"
+msgstr "%s 至少需要三个参数"
 
-#: libcore/asobj/Camera_as.cpp:513
-msgid "Attempt to set name property of Camera"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:601
+#, c-format
+msgid "%s has more than four arguments"
+msgstr "%s 有四个以上的参数"
 
-#: libcore/asobj/Camera_as.cpp:524
-msgid "Attempt to set names property of Camera"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:609
+#, c-format
+msgid "Invalid call to ASSetPropFlags: first argument is not an object: %s"
+msgstr "ASSetPropFlags 调用不合法:第一个参数不是一个对象:%s"
 
-#: libcore/asobj/Camera_as.cpp:554
-msgid "Camera::quality has only default values"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:657 libcore/asobj/Global_as.cpp:700
+#, c-format
+msgid "ASNative(%s): needs at least two arguments"
+msgstr "ASNative(%s):至少需要两个参数"
 
-#: libcore/asobj/Camera_as.cpp:559
-msgid "Attempt to set quality property of Camera"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:669
+#, c-format
+msgid "ASconstructor(%s): args must be 0 or above"
+msgstr "ASconstructor(%s): 参数必须大于或等于0"
 
-#: libcore/asobj/Camera_as.cpp:587
-msgid "Camera.setCursor"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:712
+#, c-format
+msgid "ASnative(%s): args must be 0 or above"
+msgstr "ASnative(%s): 参数必须大于或等于0"
 
-#: libcore/asobj/Camera_as.cpp:594
-msgid "Camera.setKeyFrameInterval"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:734
+msgid "ASNative (2, 0) - old ASnew"
+msgstr "ASNative (2, 0) - 旧的 ASnew"
 
-#: libcore/asobj/Camera_as.cpp:608
-msgid "Attempt to set width property of Camera, use setMode"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:884
+msgid "updateAfterEvent()"
+msgstr "updateAfterEvent()"
 
-#: libcore/asobj/SharedObject_as.cpp:163
+#: libcore/asobj/Global_as.cpp:946
 #, c-format
-msgid "Problems serializing an object's member %s=%s"
-msgstr ""
+msgid "Invalid call to setInterval(%s) - need at least 2 arguments"
+msgstr "setInterval(%s) 调用不合法 - 至少需要 2 个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:323
+#: libcore/asobj/Global_as.cpp:960 libcore/asobj/Global_as.cpp:1032
 #, c-format
 msgid ""
-"SharedObject.flush() called with a minimum disk space argument (%d), which "
-"is currently ignored"
-msgstr ""
+"Invalid call to setInterval(%s) - first argument is not an object or function"
+msgstr "setInterval(%s) 调用不合法 - 第一个参数不是一个对象或函数"
 
-#: libcore/asobj/SharedObject_as.cpp:331
+#: libcore/asobj/Global_as.cpp:980
 #, c-format
-msgid "Couldn't create dir for flushing SharedObject %s"
-msgstr ""
+msgid "Invalid call to setInterval(%s) - missing timeout argument"
+msgstr "setInterval(%s) 调用不合法 - 缺少 timeout 参数"
 
-#: libcore/asobj/SharedObject_as.cpp:344
+#: libcore/asobj/Global_as.cpp:1019
 #, c-format
-msgid ""
-"Attempting to write object %s when it's SOL Read Only is set! Refusing..."
-msgstr ""
+msgid "Invalid call to setTimeout(%s) - need at least 2 arguments"
+msgstr "setTimeout(%s) 调用不合法 - 至少需要 2 个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:352
+#: libcore/asobj/Global_as.cpp:1052
 #, c-format
-msgid "SharedObject::flush(): Failed opening file '%s' in binary mode"
-msgstr ""
+msgid "Invalid call to setTimeout(%s): missing timeout argument"
+msgstr "setTimeout(%s) 调用不合法:缺少 timeout 参数"
 
-#: libcore/asobj/SharedObject_as.cpp:371
-msgid "Error writing SOL header"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:1088
+msgid "clearInterval requires one argument, got none"
+msgstr "clearInterval 需要一个参数,没带参数"
 
-#: libcore/asobj/SharedObject_as.cpp:378
-#, c-format
-msgid "Error writing %d bytes to output file %s"
-msgstr ""
+#: libcore/asobj/Global_as.cpp:1102
+msgid "_global.showRedrawRegions"
+msgstr "_global.showRedrawRegions"
 
-#: libcore/asobj/SharedObject_as.cpp:384
+#: libcore/asobj/Global_as.cpp:1109
+msgid "_global.enableDebugConsole"
+msgstr "_global.enableDebugConsole"
+
+#: libcore/asobj/flash/net/FileReferenceList_as.cpp:91
 #, c-format
-msgid "SharedObject '%s' written to filesystem."
-msgstr ""
+msgid "FileReferenceList(%s): %s"
+msgstr "FileReferenceList(%s): %s"
 
-#: libcore/asobj/SharedObject_as.cpp:493
-msgid "Attempting to open SOL file from non localhost-loaded SWF"
-msgstr ""
+#: libcore/asobj/flash/net/FileReferenceList_as.cpp:92
+#: libcore/asobj/flash/net/FileReference_as.cpp:160
+#: libcore/asobj/flash/geom/Transform_as.cpp:357
+msgid "arguments discarded"
+msgstr "参数丢弃"
 
-#: libcore/asobj/SharedObject_as.cpp:521
+#: libcore/asobj/flash/net/FileReference_as.cpp:159
 #, c-format
-msgid ""
-"SharedObject path %s is outside the SWF domain %s. Cannot access this object."
-msgstr ""
+msgid "FileReference(%s): %s"
+msgstr "FileReference(%s): %s"
 
-#: libcore/asobj/SharedObject_as.cpp:534
+#: libcore/asobj/flash/geom/ColorTransform_as.cpp:365
 #, c-format
 msgid ""
-"SharedObject path %s is not part of the SWF path %s. Cannot access this "
-"object."
-msgstr ""
+"ColorTransform(%s): not enough arguments (need 8). Constructing with default "
+"values"
+msgstr "ColorTransform(%s): 没有足够的参数(需要8个参数)。 用默认值构建"
 
-#: libcore/asobj/SharedObject_as.cpp:703
-msgid "SharedObject.connect(): needs at least one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/ColorTransform_as.cpp:380
+#, c-format
+msgid "ColorTransform(%s): discarding extra arguments"
+msgstr "ColorTransform(%s): 丢弃额外的参数"
 
-#: libcore/asobj/SharedObject_as.cpp:709
-msgid "SharedObject.connect()"
-msgstr ""
+#: libcore/asobj/flash/geom/Matrix_as.cpp:184
+#, c-format
+msgid "Matrix.concat(%s): needs one argument"
+msgstr "Matrix.concat(%s): 需要至少一个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:730
-msgid "SharedObject.setFps"
-msgstr ""
+#: libcore/asobj/flash/geom/Matrix_as.cpp:198
+#, c-format
+msgid "Matrix.concat(%s): needs a Matrix object"
+msgstr "Matrix.concat(%s): 需要一个Matrix对象"
 
-#: libcore/asobj/SharedObject_as.cpp:739
-msgid "SharedObject.send"
-msgstr ""
+#: libcore/asobj/flash/geom/Matrix_as.cpp:255
+#, c-format
+msgid "Matrix.createBox(%s): needs at least two arguments"
+msgstr "Matrix.createBox(%s): 需要至少两个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:756
+#: libcore/asobj/flash/geom/Matrix_as.cpp:314
 #, c-format
-msgid "Arguments to SharedObject.flush(%s) will be ignored"
-msgstr ""
+msgid "Matrix.createGradientBox(%s): needs at least two arguments"
+msgstr "Matrix.createGradientBox(%s): 需要至少两个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:787
+#: libcore/asobj/flash/geom/Matrix_as.cpp:388
 #, c-format
-msgid "SharedObject.getLocal(%s): missing object name"
-msgstr ""
+msgid "Matrix.deltaTransformPoint(%s): needs one argument"
+msgstr "Matrix.deltaTransformPoint(%s): 需要一个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:813
-msgid "SharedObject.getRemote()"
-msgstr ""
+#: libcore/asobj/flash/geom/Matrix_as.cpp:402
+#, c-format
+msgid "Matrix.deltaTransformPoint(%s): needs an object"
+msgstr "Matrix.deltaTransformPoint(%s): 需要一个对象"
 
-#: libcore/asobj/SharedObject_as.cpp:828
-msgid "SharedObject.deleteAll()"
-msgstr ""
+#: libcore/asobj/flash/geom/Matrix_as.cpp:421
+#: libcore/asobj/flash/geom/Matrix_as.cpp:747
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:471
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:545
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:603
+msgid "Failed to construct flash.geom.Point!"
+msgstr "无法构建 flash.geom.Point!"
 
-#: libcore/asobj/SharedObject_as.cpp:843
-msgid "SharedObject.getDiskUsage()"
-msgstr ""
+#: libcore/asobj/flash/geom/Matrix_as.cpp:523
+#, c-format
+msgid "Matrix.rotate(%s): needs one argument"
+msgstr "Matrix.rotate(%s): 需要一个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:904
+#: libcore/asobj/flash/geom/Matrix_as.cpp:599
+#: libcore/asobj/flash/geom/Matrix_as.cpp:770
 #, c-format
-msgid "readSOL: SOL file %s is too short (only %s bytes long) to be valid."
-msgstr ""
+msgid "Matrix.translate(%s): needs two arguments"
+msgstr "Matrix.translate(%s): 需要两个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:929
-msgid "readSOL: file ends before data segment"
-msgstr ""
+#: libcore/asobj/flash/geom/Matrix_as.cpp:704
+#, c-format
+msgid "Matrix.translate(%s): needs one argument"
+msgstr "Matrix.translate(%s): 需要一个参数"
 
-#: libcore/asobj/SharedObject_as.cpp:942
-msgid "SharedObject: end of buffer while reading length"
-msgstr ""
-
-#: libcore/asobj/SharedObject_as.cpp:951
-msgid "readSOL: empty property name"
-msgstr ""
-
-#: libcore/asobj/SharedObject_as.cpp:956
-msgid "SharedObject::readSOL: premature end of input"
-msgstr ""
-
-#: libcore/asobj/SharedObject_as.cpp:967
+#: libcore/asobj/flash/geom/Matrix_as.cpp:717
 #, c-format
-msgid "SharedObject: error parsing SharedObject '%s'"
-msgstr ""
+msgid "Matrix.transformPoint(%s): needs an object"
+msgstr "Matrix.transformPoint(%s): 需要一个对象"
 
-#: libcore/asobj/SharedObject_as.cpp:986
+#: libcore/asobj/flash/geom/Matrix_as.cpp:729
 #, c-format
-msgid "readSOL: Reading SharedObject %s: %s"
-msgstr ""
+msgid "Matrix.transformPoint(%s): object must be a Point"
+msgstr "Matrix.transformPoint(%s): 对象必须是一个 Point"
 
-#: libcore/asobj/Date_as.cpp:463
-msgid "Date constructor called with more than 7 arguments"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:119
+#: libcore/asobj/flash/geom/Point_as.cpp:190
+#: libcore/asobj/flash/geom/Point_as.cpp:238
+#: libcore/asobj/flash/geom/Point_as.cpp:323
+#, c-format
+msgid "%s: missing arguments"
+msgstr "%s: 缺少参数"
 
-#: libcore/asobj/Date_as.cpp:723
-msgid "Date.setTime needs one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:128
+#: libcore/asobj/flash/geom/Point_as.cpp:138
+#: libcore/asobj/flash/geom/Point_as.cpp:148
+#: libcore/asobj/flash/geom/Point_as.cpp:156
+#: libcore/asobj/flash/geom/Point_as.cpp:332
+#: libcore/asobj/flash/geom/Point_as.cpp:342
+#: libcore/asobj/flash/geom/Point_as.cpp:352
+#: libcore/asobj/flash/geom/Point_as.cpp:360
+#, c-format
+msgid "Point.add(%s): %s"
+msgstr "Point.add(%s): %s"
 
-#: libcore/asobj/Date_as.cpp:743
-msgid "Date.setTime was called with more than one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:129
+#: libcore/asobj/flash/geom/Point_as.cpp:249
+#: libcore/asobj/flash/geom/Point_as.cpp:333
+msgid "arguments after first discarded"
+msgstr "丢弃第一个参数之后的其余参数"
 
-#: libcore/asobj/Date_as.cpp:834
-msgid "Date.setFullYear needs one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:139
+#: libcore/asobj/flash/geom/Point_as.cpp:343
+#: libcore/asobj/flash/geom/Point_as.cpp:532
+msgid "first argument doesn't cast to object"
+msgstr "第一个参数不能转换成对象"
 
-#: libcore/asobj/Date_as.cpp:874
-msgid "Date.setYear needs one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:149
+msgid "first argument cast to object doesn't contain an 'x' member"
+msgstr "第一个转换为对象的参数不包含成员“x”"
 
-#: libcore/asobj/Date_as.cpp:897
-msgid "Date.setYear was called with more than three arguments"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:157
+msgid "first argument cast to object doesn't contain an 'y' member"
+msgstr "第一个转换为对象的参数不包含成员“y”"
 
-#: libcore/asobj/Date_as.cpp:928
+#: libcore/asobj/flash/geom/Point_as.cpp:200
 #, c-format
-msgid "Date.set%sMonth needs one argument"
-msgstr ""
+msgid "Point.equals(%s): %s"
+msgstr "Point.equals(%s): %s"
 
-#: libcore/asobj/Date_as.cpp:961
-#, c-format
-msgid "Date.set%sMonth was called with more than three arguments"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:201
+#: libcore/asobj/flash/geom/Point_as.cpp:447
+msgid "First arg must be an object"
+msgstr "第一个参数必须是一个对象"
 
-#: libcore/asobj/Date_as.cpp:983
+#: libcore/asobj/flash/geom/Point_as.cpp:211
+#: libcore/asobj/flash/geom/Point_as.cpp:457
 #, c-format
-msgid "Date.set%sDate needs one argument"
-msgstr ""
+msgid "Point.equals(%s): %s %s"
+msgstr "Point.equals(%s): %s %s"
 
-#: libcore/asobj/Date_as.cpp:997
-#, c-format
-msgid "Date.set%sDate was called with more than one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:212
+#: libcore/asobj/flash/geom/Point_as.cpp:458
+msgid "First arg must be an instance of"
+msgstr "第一个参数必须是一个实例"
 
-#: libcore/asobj/Date_as.cpp:1024
+#: libcore/asobj/flash/geom/Point_as.cpp:248
 #, c-format
-msgid "Date.set%sHours needs one argument"
-msgstr ""
+msgid "Point.normalize(%s): %s"
+msgstr "Point.normalize(%s): %s"
 
-#: libcore/asobj/Date_as.cpp:1043
-#, c-format
-msgid "Date.set%sHours was called with more than four arguments"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:353
+msgid "first argument casted to object doesn't contain an 'x' member"
+msgstr "第一个参数转换为对象不包含成员 'x'"
 
-#: libcore/asobj/Date_as.cpp:1069
-#, c-format
-msgid "Date.set%sMinutes needs one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:361
+msgid "first argument casted to object doesn't contain an 'y' member"
+msgstr "第一个参数转换为对象不包含成员 'y'"
 
-#: libcore/asobj/Date_as.cpp:1087 libcore/asobj/Date_as.cpp:1130
+#: libcore/asobj/flash/geom/Point_as.cpp:411
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:483
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:557
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:616
 #, c-format
-msgid "Date.set%sMinutes was called with more than three arguments"
-msgstr ""
+msgid "Attempt to set read-only property %s"
+msgstr "尝试设置只读属性 %s"
 
-#: libcore/asobj/Date_as.cpp:1110
+#: libcore/asobj/flash/geom/Point_as.cpp:426
+#: libcore/asobj/flash/geom/Point_as.cpp:436
+#: libcore/asobj/flash/geom/Point_as.cpp:446
 #, c-format
-msgid "Date.set%sSeconds needs one argument"
-msgstr ""
+msgid "Point.distance(%s): %s"
+msgstr "Point.distance(%s): %s"
 
-#: libcore/asobj/Date_as.cpp:1148
-#, c-format
-msgid "Date.set%sMilliseconds needs one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:437
+msgid "arguments after first two discarded"
+msgstr "丢弃第二个之后的参数"
 
-#: libcore/asobj/Date_as.cpp:1165
+#: libcore/asobj/flash/geom/Point_as.cpp:510
+#: libcore/asobj/flash/geom/Point_as.cpp:520
+#: libcore/asobj/flash/geom/Point_as.cpp:531
+#: libcore/asobj/flash/geom/Point_as.cpp:547
 #, c-format
-msgid "Date.set%sMilliseconds was called with more than one argument"
-msgstr ""
+msgid "Point.interpolate(%s): %s"
+msgstr "Point.interpolate(%s): %s"
 
-#: libcore/asobj/Date_as.cpp:1227
-msgid "Date.UTC needs one argument"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:521
+msgid "arguments after first three discarded"
+msgstr "丢弃第三个之后的参数"
 
-#: libcore/asobj/Date_as.cpp:1251
-msgid "Date.UTC was called with more than 7 arguments"
-msgstr ""
+#: libcore/asobj/flash/geom/Point_as.cpp:548
+msgid "second argument doesn't cast to object"
+msgstr "第二个参数不能转换为对象"
 
-#: libcore/asobj/Global_as.cpp:100
+#: libcore/asobj/flash/geom/Point_as.cpp:595
+#: libcore/asobj/flash/geom/Point_as.cpp:604
 #, c-format
-msgid "%s needs one argument"
-msgstr ""
+msgid "Point.polar(%s): %s"
+msgstr "Point.polar(%s): %s"
 
-#: libcore/asobj/Global_as.cpp:106
+#: libcore/asobj/flash/geom/Rectangle_as.cpp:153
 #, c-format
-msgid "%s has more than one argument"
-msgstr ""
+msgid "flash.geom.Rectangle(%s): %s"
+msgstr "flash.geom.Rectangle(%s): %s"
 
-#: libcore/asobj/Global_as.cpp:323
-msgid "Extensions enabled, scanning plugin dir for load"
-msgstr ""
+#: libcore/asobj/flash/geom/Transform_as.cpp:122
+#: libcore/asobj/flash/geom/Transform_as.cpp:198
+msgid "Failed to construct flash.geom.ColorTransform!"
+msgstr "无法构造 flash.geom.ColorTransform!"
 
-#: libcore/asobj/Global_as.cpp:328
-msgid "Extensions disabled"
-msgstr ""
+#: libcore/asobj/flash/geom/Transform_as.cpp:145
+#, c-format
+msgid "Transform.colorTransform(%s): extra arguments discarded"
+msgstr "Transform.colorTransform(%s): 丢弃多余的参数"
 
-#: libcore/asobj/Global_as.cpp:493
+#: libcore/asobj/flash/geom/Transform_as.cpp:155
 #, c-format
-msgid "%s needs at least one argument"
-msgstr ""
+msgid "Transform.colorTransform(%s): argument is not an object"
+msgstr "Transform.colorTransform(%s): 参数不是一个对象"
 
-#: libcore/asobj/Global_as.cpp:500
+#: libcore/asobj/flash/geom/Transform_as.cpp:170
 #, c-format
-msgid "%s has more than two arguments"
-msgstr ""
+msgid "Transform.colorTransform(%s): argument is not a ColorTransform"
+msgstr "Transform.colorTransform(%s): 参数不是一个ColorTransform"
 
-#: libcore/asobj/Global_as.cpp:594
+#: libcore/asobj/flash/geom/Transform_as.cpp:236
+msgid "Failed to construct flash.geom.Matrix!"
+msgstr "无法构造 flash.geom.Matrix!"
+
+#: libcore/asobj/flash/geom/Transform_as.cpp:305
 #, c-format
-msgid "%s needs at least three arguments"
-msgstr ""
+msgid "Transform.matrix(%s): extra arguments discarded"
+msgstr "Transform.matrix(%s): 丢弃多余的参数"
 
-#: libcore/asobj/Global_as.cpp:601
+#: libcore/asobj/flash/geom/Transform_as.cpp:315
 #, c-format
-msgid "%s has more than four arguments"
-msgstr ""
+msgid "Transform.matrix(%s): argument is not an object"
+msgstr "Transform.matrix(%s): 参数不是一个对象"
 
-#: libcore/asobj/Global_as.cpp:609
+#: libcore/asobj/flash/geom/Transform_as.cpp:346
 #, c-format
-msgid "Invalid call to ASSetPropFlags: first argument is not an object: %s"
-msgstr ""
+msgid "flash.geom.Transform(%s): needs one argument"
+msgstr "flash.geom.Transform(%s): 需要一个参数"
 
-#: libcore/asobj/Global_as.cpp:657 libcore/asobj/Global_as.cpp:700
+#: libcore/asobj/flash/geom/Transform_as.cpp:356
 #, c-format
-msgid "ASNative(%s): needs at least two arguments"
-msgstr ""
+msgid "Transform(%s): %s"
+msgstr "Transform(%s): %s"
 
-#: libcore/asobj/Global_as.cpp:669
+#: libcore/asobj/flash/external/ExternalInterface_as.cpp:292
 #, c-format
-msgid "ASconstructor(%s): args must be 0 or above"
-msgstr ""
+msgid "VAL: %s"
+msgstr "VAL: %s"
 
-#: libcore/asobj/Global_as.cpp:712
+#: libcore/asobj/flash/external/ExternalInterface_as.cpp:343
 #, c-format
-msgid "ASnative(%s): args must be 0 or above"
-msgstr ""
+msgid ""
+"ExternalInterface path %s is outside the SWF domain %s. Cannot access this "
+"object."
+msgstr "ExternalInterface 路径 %s 在SWF域 %s 之外。无法访问该对象。"
 
-#: libcore/asobj/Global_as.cpp:734
-msgid "ASNative (2, 0) - old ASnew"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:816
+msgid ""
+"BitmapData.copyChannel(). Multiple destination channels are not supported"
+msgstr "BitmapData.copyChannel()。不支持多目标通道"
 
-#: libcore/asobj/Global_as.cpp:884
-msgid "updateAfterEvent()"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:842
+msgid ""
+"BitmapData.copyChannel(): no part of source rectangleoverlaps with the "
+"source BitmapData"
+msgstr "BitmapData.copyChannel(): 源矩形和源 BitmapData 没有重叠的部分"
 
-#: libcore/asobj/Global_as.cpp:946
-#, c-format
-msgid "Invalid call to setInterval(%s) - need at least 2 arguments"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:856
+msgid ""
+"BitmapData.copyChannel(): destination area is wholly outside the destination "
+"BitmapData"
+msgstr "BitmapData.copyChannel(): 目标区域全部在目标 BitmapData 之外"
 
-#: libcore/asobj/Global_as.cpp:960 libcore/asobj/Global_as.cpp:1032
-#, c-format
+#: libcore/asobj/flash/display/BitmapData_as.cpp:914
+msgid "BitmapData.copyPixels(): arguments after the first three are discarded"
+msgstr "BitmapData.copyPixels(): 第一个之后的参数被丢弃"
+
+#: libcore/asobj/flash/display/BitmapData_as.cpp:964
 msgid ""
-"Invalid call to setInterval(%s) - first argument is not an object or function"
-msgstr ""
+"BitmapData.copyPixels(): no part of source rectangleoverlaps with the source "
+"BitmapData"
+msgstr "BitmapData.copyPixels(): 源矩形和源 BitmapData 没有重叠的部分"
 
-#: libcore/asobj/Global_as.cpp:980
+#: libcore/asobj/flash/display/BitmapData_as.cpp:978
+msgid ""
+"BitmapData.copyPixels(): destination area is wholly outside the destination "
+"BitmapData"
+msgstr "BitmapData.copyPixels(): 目标区域全部在目标 BitmapData 之外"
+
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1064
 #, c-format
-msgid "Invalid call to setInterval(%s) - missing timeout argument"
-msgstr ""
+msgid "BitmapData.draw(%s) requires at least one argument"
+msgstr "BitmapData.draw(%s) 至少需要一个参数"
 
-#: libcore/asobj/Global_as.cpp:1019
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1076
+msgid "BitmapData.draw() with BitmapData argument"
+msgstr "BitmapData.draw() 参数为 BitmapData"
+
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1083
 #, c-format
-msgid "Invalid call to setTimeout(%s) - need at least 2 arguments"
-msgstr ""
+msgid "BitmapData.draw(%s): first argument must be a MovieClip"
+msgstr "BitmapData.draw(%s): 第一个参数必须是一个 MovieClip"
 
-#: libcore/asobj/Global_as.cpp:1052
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1124
 #, c-format
-msgid "Invalid call to setTimeout(%s): missing timeout argument"
-msgstr ""
+msgid "BitmapData.fillRect(%s): needs an object"
+msgstr "BitmapData.fillRect(%s): 需要一个对象"
 
-#: libcore/asobj/Global_as.cpp:1088
-msgid "clearInterval requires one argument, got none"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1161
+msgid "floodFill called on disposed BitmapData!"
+msgstr "销毁 BitmapData 时 floodFill 被调用 !"
 
-#: libcore/asobj/Global_as.cpp:1102
-msgid "_global.showRedrawRegions"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1235
+msgid "getPixel32 called on disposed BitmapData!"
+msgstr "销毁 BitmapData 时 getPixel32 被调用!"
 
-#: libcore/asobj/Global_as.cpp:1109
-msgid "_global.enableDebugConsole"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1365
+msgid "BitmapData.perlinNoise() stitch value"
+msgstr "BitmapData.perlinNoise() stitch 值"
 
-#: libcore/asobj/XMLNode_as.cpp:227
-msgid ""
-"XMLNode.insertBefore(): positional parameter is not a child of this node"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1566
+msgid "Failed to construct flash.geom.Rectangle!"
+msgstr "无法构造 flash.geom.Rectangle!"
 
-#: libcore/asobj/XMLNode_as.cpp:596
-msgid "XMLNode::appendChild() needs at least one argument"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1588
+msgid "BitmapData.loadBitmap requires one argument"
+msgstr "BitmapData.loadBitmap 需要一个参数"
 
-#: libcore/asobj/XMLNode_as.cpp:605
-msgid "First argument to XMLNode::appendChild() is not an XMLNode"
-msgstr ""
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1653
+msgid ""
+"BitmapData constructor requires at least two arguments. Will not construct a "
+"BitmapData"
+msgstr "BitmapData 构造器需要至少两个参数。不会构造一个 BitmapData"
+
+#: libcore/asobj/flash/display/BitmapData_as.cpp:1667
+msgid ""
+"BitmapData width and height must be between 1 and 2880. Will not construct a "
+"BitmapData"
+msgstr "BitmapData 宽度河高度必须在 1 和 2880之间。不会构造一个 BitmapData"
 
-#: libcore/asobj/XMLNode_as.cpp:643
+#: libcore/asobj/NetConnection_as.cpp:455
 #, c-format
-msgid "XMLNode.insertBefore(%s) needs at least two arguments"
-msgstr ""
+msgid "Gnash is not allowed to open this URL: %s"
+msgstr "Gnash 不允许打开该 URL: %s"
 
-#: libcore/asobj/XMLNode_as.cpp:654
+#: libcore/asobj/NetConnection_as.cpp:525
 #, c-format
-msgid "First argument to XMLNode.insertBefore(%s) is not an XMLNode"
-msgstr ""
+msgid "Gnash is not allowed to connect to %s"
+msgstr "Gnash 不允许连接到 %s"
 
-#: libcore/asobj/XMLNode_as.cpp:665
+#: libcore/asobj/NetConnection_as.cpp:546
 #, c-format
-msgid "Second argument to XMLNode.insertBefore(%s) is not an XMLNode"
-msgstr ""
+msgid "NetConnection.connect(%s): unsupported connection protocol"
+msgstr "NetConnection.connect(%s): 连接协议不支持"
 
-#: libcore/asobj/NetStream_as.cpp:299
+#: libcore/asobj/NetConnection_as.cpp:552
 #, c-format
-msgid "::pause(%d) called "
-msgstr ""
+msgid "NetConnection.connect(%s): unknown connection protocol"
+msgstr "NetConnection.connect(%s): 连接协议未知"
 
-#: libcore/asobj/NetStream_as.cpp:355
-msgid "No NetConnection associated with this NetStream, won't play"
-msgstr ""
+#: libcore/asobj/NetConnection_as.cpp:598
+#: libcore/asobj/NetConnection_as.cpp:617
+msgid "NetConnection.call: can't call while not connected"
+msgstr "NetConnection.call: 未连接时不能调用"
 
-#: libcore/asobj/NetStream_as.cpp:366
-msgid "NetConnection is not connected. Won't play."
-msgstr ""
+#: libcore/asobj/NetConnection_as.cpp:723
+msgid "NetConnection.call(): needs at least one argument"
+msgstr "NetConnection.call(): 至少需要一个参数"
 
-#: libcore/asobj/NetStream_as.cpp:379
+#: libcore/asobj/NetConnection_as.cpp:746
 #, c-format
-msgid "Couldn't load URL %s"
-msgstr ""
+msgid "NetConnection.call(%s): second argument must be an object"
+msgstr "NetConnection.call(%s): 第二个参数必须是对象"
 
-#: libcore/asobj/NetStream_as.cpp:386
-#, c-format
-msgid "Connecting to movie: %s"
-msgstr ""
+#: libcore/asobj/NetConnection_as.cpp:836
+msgid "NetConnection.connect(): needs at least one argument"
+msgstr "NetConnection.connect(): 至少需要一个参数"
 
-#: libcore/asobj/NetStream_as.cpp:392
+#: libcore/asobj/NetConnection_as.cpp:858
 #, c-format
-msgid "NetStream.play(%s): failed starting playback"
-msgstr ""
+msgid "NetConnection.connect(%s): args after the first are not supported"
+msgstr "NetConnection.connect(%s):第一个参数之后的是不支持的"
 
-#: libcore/asobj/NetStream_as.cpp:415
-msgid "NetStream_as::initVideoDecoder: hot-plugging video consumer"
-msgstr ""
+#: libcore/asobj/NetConnection_as.cpp:873
+msgid "NetConnection.addHeader()"
+msgstr "NetConnection.addHeader()"
+
+#: libcore/asobj/NetConnection_as.cpp:957
+msgid "Invoke buffer too short"
+msgstr "调用缓冲区太短"
 
-#: libcore/asobj/NetStream_as.cpp:420
+#: libcore/asobj/NetConnection_as.cpp:964
+msgid "Invoke argument not present"
+msgstr "调用参数不存在"
+
+#: libcore/asobj/NetConnection_as.cpp:1055
 #, c-format
-msgid "NetStream: Could not create Video decoder: %s"
-msgstr ""
+msgid "Unknown HTTP Remoting response identifier '%s'"
+msgstr "未知的HTTP远程响应标识符 '%s'"
 
-#: libcore/asobj/NetStream_as.cpp:444
-msgid "NetStream_as::initAudioDecoder: hot-plugging audio consumer"
-msgstr ""
+#: libcore/asobj/NetConnection_as.cpp:1071
+#, c-format
+msgid "Unsupported HTTP Remoting response callback: '%s' (size %d)"
+msgstr "不支持的 HTTP远程响应回调: '%s' (大小 %d)"
 
-#: libcore/asobj/NetStream_as.cpp:451
+#: libcore/asobj/NetConnection_as.cpp:1220
 #, c-format
-msgid "Could not create Audio decoder: %s"
-msgstr ""
+msgid "Error parsing server AMF: %s"
+msgstr "错误解析服务器 AMF: %s"
 
-#: libcore/asobj/NetStream_as.cpp:477
+#: libcore/asobj/NetConnection_as.cpp:1267
 #, c-format
-msgid "Gnash could not get stream '%s' from NetConnection"
-msgstr ""
+msgid "Could not serialize NetConnection.call argument %d"
+msgstr "无法序列化NetConnection.call参数 %d"
 
-#: libcore/asobj/NetStream_as.cpp:487
-msgid "No Media handler registered, can't parse NetStream input"
-msgstr ""
+#: libcore/asobj/NetConnection_as.cpp:1295
+msgid "Sanity failed. no string method in invoke packet"
+msgstr "合理性失败。调用包中没有string方法"
 
-#: libcore/asobj/NetStream_as.cpp:495
-msgid "Unable to create parser for NetStream input"
-msgstr ""
+#: libcore/asobj/NetConnection_as.cpp:1342
+msgid "Server called _onbwcheck without a callback"
+msgstr "服务器调用_onbwcheck时没有回调函数"
 
-#: libcore/asobj/NetStream_as.cpp:520
-#, c-format
-msgid "%p.startPlayback: playHead position reset to 0"
-msgstr ""
+#: libcore/asobj/NetConnection_as.cpp:1372
+#, fuzzy
+msgid "RTMP server sent error"
+msgstr "rtmp 服务器发送错误"
 
-#: libcore/asobj/NetStream_as.cpp:526
-msgid "Setting playStart status"
-msgstr ""
+#: libcore/asobj/XMLSocket_as.cpp:268
+msgid "XMLSocket.send(): socket not initialized"
+msgstr "XMLSocket.send(): 未初始化socket"
 
-#: libcore/asobj/NetStream_as.cpp:544
-msgid "getDecodedVideoFrame: no parser available"
-msgstr ""
+#: libcore/asobj/XMLSocket_as.cpp:312
+msgid "XMLSocket.connect() called while already connected, ignored"
+msgstr "XMLSocket.connect() 在已连接时调用,会被忽略"
 
-#: libcore/asobj/NetStream_as.cpp:553
-#, c-format
+#: libcore/asobj/XMLSocket_as.cpp:319
+msgid "XMLSocket.connect() needs two arguments"
+msgstr "XMLSocket.connect() 需要两个参数"
+
+#: libcore/asobj/XMLSocket_as.cpp:344
+msgid "XMLSocket.connect(): connection failed"
+msgstr "XMLSocket.connect(): 连接失败"
+
+#: libcore/asobj/XMLSocket_as.cpp:360
+msgid "XMLSocket.send() needs at least one argument"
+msgstr "XMLSocket.send() 至少需要一个参数"
+
+#: libcore/LineStyle.cpp:186
 msgid ""
-"getDecodedVideoFrame(%d): no more video frames in input "
-"(nextVideoFrameTimestamp returned false, parsingComplete=%d)"
-msgstr ""
+"UNTESTED: Do not know how to interpolate line styles with different vertical "
+"thickness scaling"
+msgstr "UNTESTED: 不知道如何用不同垂直厚度比例插入​线条样式"
 
-#: libcore/asobj/NetStream_as.cpp:564
+#: libcore/LineStyle.cpp:191
 msgid ""
-"getDecodedVideoFrame setting playStop status (parsing complete and "
-"nextVideoFrameTimestamp() returned false)"
-msgstr ""
+"UNTESTED: Do not know how to interpolate line styles with different "
+"horizontal thickness scaling"
+msgstr "UNTESTED: 不知道如何用不同水平厚度比例插入​线条样式"
 
-#: libcore/asobj/NetStream_as.cpp:575
+#: libcore/SWFMovie.cpp:54
 #, c-format
-msgid "%p.getDecodedVideoFrame(%d): next video frame is in the future (%d)"
-msgstr ""
+msgid "Frame %d never loaded. Total frames: %d"
+msgstr "帧 %d 未加载。总帧数: %d"
 
-#: libcore/asobj/NetStream_as.cpp:586
+#: libcore/SWFMovie.cpp:77
 #, c-format
-msgid ""
-"nextVideoFrameTimestamp returned true (%d), but decodeNextVideoFrame "
-"returned null, I don't think this should ever happen"
-msgstr ""
+msgid "Frame %d never loaded. Total frames: %d."
+msgstr "帧 %d 未加载。总帧数: %d。"
 
-#: libcore/asobj/NetStream_as.cpp:596
+#: libcore/SWFMovie.cpp:109
 #, c-format
 msgid ""
-"%p.getDecodedVideoFrame(%d): last video frame decoded (should set playback "
-"status to STOP?)"
-msgstr ""
+"Attempt to perform initialized for a character %s that does not exist "
+"(either not exported or not defined)"
+msgstr "试图初始化一个不存在的字符 %s (也许没有导出或被未定义)"
 
-#: libcore/asobj/NetStream_as.cpp:604
+#: libcore/swf/StreamSoundBlockTag.cpp:77
+msgid "Found SOUNDSTREAMBLOCK tag w/out preceding SOUNDSTREAMHEAD"
+msgstr "SOUNDSTREAMHEAD前发现 SOUNDSTREAMBLOCK 标签 w/out  "
+
+#: libcore/swf/StreamSoundBlockTag.cpp:113
+msgid "Tag boundary reported past end of stream!"
+msgstr "流结尾处发现标签边界!"
+
+#: libcore/swf/DefaultTagLoaders.cpp:94
 #, c-format
 msgid ""
-"%p.getDecodedVideoFrame(%d): next video frame is in the future, we'll return "
-"this one"
-msgstr ""
+"Undocumented tag %s encountered. Please report this to the Gnash developers!"
+msgstr "遇到未公开的标记  %s。请向 Gnash 开发者发送报告!"
 
-#: libcore/asobj/NetStream_as.cpp:622
-msgid "decodeNextVideoFrame: no parser available"
-msgstr ""
+#: libcore/swf/RemoveObjectTag.cpp:71
+#, c-format
+msgid "  remove_object_2(%d)"
+msgstr "remove_object_2(%d)"
 
-#: libcore/asobj/NetStream_as.cpp:629
+#: libcore/swf/DefineButtonCxformTag.cpp:49
 #, c-format
-msgid "%p.decodeNextVideoFrame(): no more video frames in input"
-msgstr ""
+msgid "DefineButtonCxform refers to an unknown DisplayObject %d"
+msgstr "DefineButtonCxform 指向一个未知 DisplayObject %d"
 
-#: libcore/asobj/NetStream_as.cpp:645
-msgid "Error decoding encoded video frame in NetStream input"
-msgstr ""
+#: libcore/swf/DefineButtonCxformTag.cpp:60
+#, c-format
+msgid ""
+"DefineButtonCxform refers to DisplayObject ID %d (%s). Expected a button "
+"definition"
+msgstr "DefineButtonCxform 指向 DisplayObject ID %d (%s). 需要一个按钮定义"
 
-#: libcore/asobj/NetStream_as.cpp:659
+#: libcore/swf/DefineTextTag.cpp:52
 #, c-format
-msgid "%p.decodeNextAudioFrame: no more video frames in input"
-msgstr ""
+msgid "DefineTextTag, id = %d"
+msgstr "DefineTextTag, id = %d"
 
-#: libcore/asobj/NetStream_as.cpp:688
+#: libcore/swf/DefineTextTag.cpp:93
 #, c-format
-msgid ""
-"NetStream_as::decodeNextAudioFrame: %d bytes of encoded audio decoded to %d "
-"bytes"
-msgstr ""
+msgid "Text DisplayObject, id = %d"
+msgstr "文本显示对象, id = %d"
 
-#: libcore/asobj/NetStream_as.cpp:708
+#: libcore/swf/DefineTextTag.cpp:112
 #, c-format
-msgid "NetStream_as::seek(%d): no parser, no party"
-msgstr ""
+msgid "begin text records for DefineTextTag %p"
+msgstr "开始 DefineTextTag %p 的文本记录"
 
-#: libcore/asobj/NetStream_as.cpp:728
-msgid "Setting invalidTime status"
-msgstr ""
+#: libcore/swf/ShapeRecord.cpp:278
+#, fuzzy
+msgid "Invalid fill style %1% in style change record - %2% defined. Set to 0."
+msgstr "无效的填充样式 %d 在lineStyleChange记录中 - %d 已定义。设置为0。"
 
-#: libcore/asobj/NetStream_as.cpp:735
+#: libcore/swf/ShapeRecord.cpp:313
 #, c-format
-msgid "_parser->seek(%d) returned %d"
-msgstr ""
+msgid "  bound SWFRect: %s"
+msgstr "边界 SWFRect: %s"
 
-#: libcore/asobj/NetStream_as.cpp:742
+#: libcore/swf/ShapeRecord.cpp:340
 #, c-format
-msgid "%p.seek: playHead position set to %d"
-msgstr ""
+msgid "  ShapeRecord(%s): fillbits %d, linebits %d"
+msgstr "ShapeRecord(%s): fillbits %d, linebits %d"
 
-#: libcore/asobj/NetStream_as.cpp:778
+#: libcore/swf/ShapeRecord.cpp:418
 #, c-format
-msgid ""
-"%p.refreshAudioBuffer: doing nothing as playhead is paused - bufferLength=%d/"
-"%d"
-msgstr ""
+msgid "  Shape read: moveto %d %d"
+msgstr "形状读取:移动到 %d %d"
 
-#: libcore/asobj/NetStream_as.cpp:787
+#: libcore/swf/ShapeRecord.cpp:437
 #, c-format
-msgid ""
-"%p.refreshAudioBuffer: doing nothing as current position was already decoded "
-"- bufferLength=%d/%d"
-msgstr ""
+msgid "  Shape read: fill0 (left) = %d"
+msgstr "形状读取:fill0 (left) = %d"
 
-#: libcore/asobj/NetStream_as.cpp:799
+#: libcore/swf/ShapeRecord.cpp:456
 #, c-format
-msgid ""
-"%p.refreshAudioBuffer: currentPosition=%d, playHeadState=%d, bufferLength="
-"%d, bufferTime=%d"
-msgstr ""
+msgid "  Shape read: fill1 (right) = %d"
+msgstr "形状读取:fill1 (right) = %d"
 
-#: libcore/asobj/NetStream_as.cpp:935
+#: libcore/swf/ShapeRecord.cpp:475
 #, c-format
-msgid "%p.pushDecodedAudioFrames(%d) : buffer overrun (%d/%d)."
-msgstr ""
+msgid "ShapeRecord: line %d"
+msgstr "ShapeRecord: %d行"
+
+#: libcore/swf/ShapeRecord.cpp:489
+msgid "ShapeRecord: more fill styles"
+msgstr "ShapeRecord: 更多的填充样式"
 
-#: libcore/asobj/NetStream_as.cpp:951
+#: libcore/swf/ShapeRecord.cpp:525
 #, c-format
-msgid ""
-"%p.pushDecodedAudioFrames(%d): no more audio frames in input "
-"(nextAudioFrameTimestamp returned false, parsingComplete=%d)"
-msgstr ""
+msgid "ShapeRecord: curved edge %d %d - %d %d - %d %d"
+msgstr "ShapeRecord: 弧形边缘 %d %d - %d %d - %d %d"
 
-#: libcore/asobj/NetStream_as.cpp:962
-msgid ""
-"pushDecodedAudioFrames setting playStop status (parsing complete and "
-"nextAudioFrameTimestamp returned false)"
-msgstr ""
+#: libcore/swf/ShapeRecord.cpp:559
+#, c-format
+msgid "ShapeRecord: straight edge %d %d - %d %d"
+msgstr "ShapeRecord: 直线边缘 %d %d - %d %d"
 
-#: libcore/asobj/NetStream_as.cpp:975
+#: libcore/swf/ShapeRecord.cpp:613
+msgid "  fill styles: %1%"
+msgstr "填充样式: %1%"
+
+#: libcore/swf/ShapeRecord.cpp:622
+msgid "  Read fill: %1%"
+msgstr "读取填充: %1%"
+
+#: libcore/swf/ShapeRecord.cpp:636
 #, c-format
-msgid "%p.pushDecodedAudioFrames(%d): next audio frame is in the future (%d)"
-msgstr ""
+msgid "  readLineStyles: count = %d"
+msgstr "readLineStyles:count = %d"
 
-#: libcore/asobj/NetStream_as.cpp:988
+#: libcore/swf/ShapeRecord.cpp:643
 #, c-format
-msgid ""
-"nextAudioFrameTimestamp returned true (%d), but decodeNextAudioFrame "
-"returned null, I don't think this should ever happen"
-msgstr ""
+msgid "  readLineStyles: count2 = %d"
+msgstr "readLineStyles: count2 = %d"
 
-#: libcore/asobj/NetStream_as.cpp:997
+#: libcore/swf/DefineButtonTag.cpp:85
 #, c-format
-msgid "pushDecodedAudioFrames(%d): Decoded audio frame contains no samples"
-msgstr ""
+msgid "  DefineButton loader: character id = %d"
+msgstr "DefineButton 加载器: 字符 id = %d"
 
-#: libcore/asobj/NetStream_as.cpp:1006
+#: libcore/swf/DefineButtonTag.cpp:102
 #, c-format
-msgid "pushDecodedAudioFrames(%d) pushing %dth frame with timestamp %d"
-msgstr ""
+msgid "  DefineButton2 loader: chararacter id = %d"
+msgstr "DefineButton2 加载器: 字符 id = %d"
 
-#: libcore/asobj/NetStream_as.cpp:1024
-msgid "resuming playback clock on audio consume"
-msgstr ""
+#: libcore/swf/DefineButtonTag.cpp:134
+msgid "Premature end of DEFINEBUTTON tag, won't read actions"
+msgstr "过早结束的 DEFINEBUTTON 标签,将无法读取操作"
 
-#: libcore/asobj/NetStream_as.cpp:1090
+#: libcore/swf/DefineButtonTag.cpp:170
 #, c-format
-msgid ""
-"%p.refreshVideoFrame: doing nothing as playhead is paused - bufferLength=%d, "
-"bufferTime=%d"
-msgstr ""
+msgid "Next Button2 actionOffset (%u) points past the end of tag (%lu)"
+msgstr "下一个 Button2 的actionOffset (%u) 点晚于结束标记(%lu)"
 
-#: libcore/asobj/NetStream_as.cpp:1100
+#: libcore/swf/DefineButtonTag.cpp:211
 #, c-format
 msgid ""
-"%p.refreshVideoFrame: doing nothing as current position was already decoded "
-"- bufferLength=%d, bufferTime=%d"
-msgstr ""
+"Next action offset (%u) in Button2ActionConditions points past the end of tag"
+msgstr "下一个 操作Button2ActionConditions点的偏移 (%u) 晚于结束标记"
 
-#: libcore/asobj/NetStream_as.cpp:1112
+#: libcore/swf/DefineButtonTag.cpp:276
+msgid "Premature end of button action input: can't read conditions"
+msgstr "过早结束的按钮动作输入:无法读取条件"
+
+#: libcore/swf/DefineButtonTag.cpp:286
 #, c-format
+msgid "   button actions for conditions 0x%x"
+msgstr "条件为 0x%x 的按钮操作"
+
+#: libcore/swf/DefineButtonTag.cpp:359
+msgid "   premature end of button record input stream, can't read flags"
+msgstr "按钮记录输入流过早结束,无法读取标志"
+
+#: libcore/swf/DefineButtonTag.cpp:380
 msgid ""
-"%p.refreshVideoFrame: currentPosition=%d, playHeadState=%d, bufferLength=%d, "
-"bufferTime=%d"
-msgstr ""
+"   premature end of button record input stream, can't read DisplayObject id"
+msgstr "按钮记录输入流过早结束,无法读取DisplayObject ID"
 
-#: libcore/asobj/NetStream_as.cpp:1126
+#: libcore/swf/DefineButtonTag.cpp:395
 #, c-format
 msgid ""
-"%p.refreshVideoFrame(): no more video frames to decode (DEC_STOPPED, null "
-"from getDecodedVideoFrame)"
-msgstr ""
+"   button record for states [%s] refer to DisplayObject with id %d, which is "
+"not found in the chars dictionary"
+msgstr "指向DisplayObject ID为 %d 的状态 [%s] 的按键记录,没有在字符字典中找到"
 
-#: libcore/asobj/NetStream_as.cpp:1135
+#: libcore/swf/DefineButtonTag.cpp:402
 #, c-format
-msgid ""
-"%p.refreshVideoFrame(): last video frame was good enough for current position"
-msgstr ""
+msgid "   button record for states [%s] contain DisplayObject %d (%s)"
+msgstr "状态 [%s] 的按钮记录包含DisplayObject %d (%s)"
 
-#: libcore/asobj/NetStream_as.cpp:1210
-#, c-format
+#: libcore/swf/DefineButtonTag.cpp:410
 msgid ""
-"%p.advance: buffer empty while decoding, setting buffer to buffering and "
-"pausing playback clock"
-msgstr ""
-
-#: libcore/asobj/NetStream_as.cpp:1215
-msgid "Setting bufferEmpty status"
-msgstr ""
+"   premature end of button record input stream, can't read button layer "
+"(depth?)"
+msgstr "按钮记录输入流过早结束,无法读取按钮层(深度?)"
 
-#: libcore/asobj/NetStream_as.cpp:1224
+#: libcore/swf/VideoFrameTag.cpp:47
 #, c-format
-msgid "%p.advance : bufferLength=%d, parsing completed"
-msgstr ""
+msgid "VideoFrame tag refers to unknown video stream id %d"
+msgstr "VideoFrame 标记指向未知的视频流标识 %d"
 
-#: libcore/asobj/NetStream_as.cpp:1236
+#: libcore/swf/VideoFrameTag.cpp:57
 #, c-format
-msgid "%p.advance: buffering - position=%d, buffer=%d/%d"
-msgstr ""
+msgid "VideoFrame tag refers to a non-video DisplayObject %d (%s)"
+msgstr "VideoFrame 标记指向非视频显示对象 %d(%s)"
 
-#: libcore/asobj/NetStream_as.cpp:1255
-#, c-format
+#: libcore/swf/VideoFrameTag.cpp:90
 msgid ""
-"%p.advance: buffer full (or parsing completed), resuming playback clock - "
-"position=%d, buffer=%d/%d"
-msgstr ""
-
-#: libcore/asobj/NetStream_as.cpp:1276
-#, c-format
-msgid "%p.advance: playHead position set to timestamp of first frame: %d"
-msgstr ""
+"Could not read enough bytes when parsing VideoFrame tag. Perhaps we reached "
+"the end of the stream!"
+msgstr "解析VideoFrame标签时无法读取到足够的字节。也许已到达流的末尾!"
 
-#: libcore/asobj/NetStream_as.cpp:1283
+#: libcore/swf/StartSoundTag.cpp:56
 #, c-format
-msgid ""
-"%p.advance: playHead position is 0 and parser still doesn't have a frame to "
-"set it to"
-msgstr ""
+msgid "start_sound_loader: sound_id %d is not defined"
+msgstr "start_sound_loader: sound_id %d 未定义"
 
-#: libcore/asobj/NetStream_as.cpp:1323
+#: libcore/swf/StartSoundTag.cpp:64
 #, c-format
-msgid ""
-"Moving NetStream playhead from timestamp %d to timestamp %d as there are no "
-"video frames yet, audio buffer is empty and next audio frame timestamp is "
-"there (see bug #26687)"
-msgstr ""
+msgid "StartSound: id=%d"
+msgstr "StartSound: id=%d"
 
-#: libcore/asobj/NetStream_as.cpp:1424
-msgid "attachAuxStreamer called while already attached"
-msgstr ""
+#: libcore/swf/StartSoundTag.cpp:116
+msgid "STARTSOUND2 tag not parsed and not used"
+msgstr "STARTSOUND2 tag 未解析和使用"
 
-#: libcore/asobj/NetStream_as.cpp:1435
+#: libcore/swf/DefineButtonSoundTag.cpp:52
 #, c-format
-msgid "Could not attach NetStream aux streamer to sound handler: %s"
-msgstr ""
+msgid "DEFINEBUTTONSOUND refers to an unknown DisplayObject def %d"
+msgstr "DEFINEBUTTONSOUND 指向一个未知的显示对象 %d"
 
-#: libcore/asobj/NetStream_as.cpp:1566
+#: libcore/swf/DefineButtonSoundTag.cpp:63
 #, c-format
 msgid ""
-"First argument to NetStream constructor doesn't cast to a NetConnection (%s)"
+"DEFINEBUTTONSOUND refers to DisplayObject id %d, a %s (expected a button "
+"DisplayObject)"
 msgstr ""
+"DEFINEBUTTONSOUND 指向标识为%d的显示对象,一个 %s(应该是一个按钮显示对象)"
 
-#: libcore/asobj/NetStream_as.cpp:1612
-msgid "NetStream_as play needs args"
-msgstr ""
+#: libcore/swf/DefineButtonSoundTag.cpp:73
+msgid "Attempt to redefine button sound ignored"
+msgstr "试图重新定义被忽略的按键声音"
 
-#: libcore/asobj/NetStream_as.cpp:1619
+#: libcore/swf/DefineButtonSoundTag.cpp:99
 #, c-format
-msgid "NetStream.play(%s): stream is not connected"
-msgstr ""
+msgid "sound tag not found, sound_id=%d, button state #=%i"
+msgstr "没找到声音标签,声音id=%d, 按钮状态 #=%i"
 
-#: libcore/asobj/NetStream_as.cpp:1668
-msgid "NetStream.attachAudio"
-msgstr ""
+#: libcore/swf/DefineShapeTag.cpp:58
+#, c-format
+msgid "DefineShapeTag(%s): id = %d"
+msgstr "DefineShapeTag(%s): id = %d"
 
-#: libcore/asobj/NetStream_as.cpp:1679
-msgid "NetStream.attachVideo"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:60
+msgid "reading code table at offset %1%, %2% glyphs"
+msgstr "在偏移 %1%, %2% 字形读取代码表"
 
-#: libcore/asobj/NetStream_as.cpp:1690
-msgid "NetStream.publish"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:120
+msgid "reading DefineFont"
+msgstr "读取 DefineFont"
 
-#: libcore/asobj/NetStream_as.cpp:1701
-msgid "NetStream.receiveAudio"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:157
+msgid "Glyphs offset table corrupted in DefineFont tag"
+msgstr "DefineFont标签中字形偏移表损坏"
 
-#: libcore/asobj/NetStream_as.cpp:1712
-msgid "NetStream.receiveVideo"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:172
+msgid "reading DefineFont2 or DefineFont3"
+msgstr "读取 DefineFont2 或 DefineFont3"
 
-#: libcore/asobj/NetStream_as.cpp:1723
-msgid "NetStream.send"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:225 libcore/swf/DefineFontTag.cpp:237
+#, c-format
+msgid "Glyph %d at offset %u"
+msgstr "偏移 %u 处的 字形 %d"
 
-#: libcore/asobj/NetStream_as.cpp:1807
-msgid "NetStream.liveDelay"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:254
+msgid "Glyphs offset table corrupted in DefineFont2/3 tag"
+msgstr "在 DefineFont2/3 标签中字形偏移表损坏"
 
-#: libcore/asobj/NetStream_as.cpp:1859
-msgid "Invalid AMF data in FLV tag"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:266
+msgid "Bad offset in DefineFont2"
+msgstr "DefineFont2 中错误的偏移"
 
-#: libcore/asobj/NetStream_as.cpp:1870
-msgid "Could not convert FLV metatag to as_value, passing undefined"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:325
+msgid "Repeated kerning pair found - ignoring"
+msgstr "发现重复的字距配对 - 忽略"
 
-#: libcore/asobj/Number_as.cpp:78
+#: libcore/swf/DefineFontTag.cpp:344
 #, c-format
-msgid "Number.toString(%s): radix must be in the 2..36 range (%d is invalid)"
-msgstr ""
-
-#: libcore/asobj/TextSnapshot_as.cpp:521
-msgid "TextSnapshot.findText() requires 3 arguments"
-msgstr ""
+msgid "DefineFontInfo tag loader: can't find font with id %d"
+msgstr "DefineFontInfo 标签加载器:无法找到标识为 %d 的字体"
 
-#: libcore/asobj/TextSnapshot_as.cpp:545
-msgid "TextSnapshot.getCount() takes no arguments"
-msgstr ""
+#: libcore/swf/DefineFontTag.cpp:352
+msgid "DefineFontInfo2 partially implemented"
+msgstr "DefineFontInfo2 部分实现"
 
-#: libcore/asobj/TextSnapshot_as.cpp:601
-msgid "TextSnapshot.getText requires exactly 2 arguments"
+#: libcore/swf/CSMTextSettingsTag.cpp:77
+#, c-format
+msgid ""
+"  CSMTextSettings: TextID=%d, FlashType=%d, GridFit=%d, Thickness=%d, "
+"Sharpness=%d"
 msgstr ""
+"CSMTextSettings: TextID=%d, FlashType=%d, GridFit=%d, Thickness=%d, "
+"Sharpness=%d"
 
-#: libcore/asobj/XMLSocket_as.cpp:268
-msgid "XMLSocket.send(): socket not initialized"
-msgstr ""
+#: libcore/swf/CSMTextSettingsTag.cpp:85
+msgid "CSMTextSettings"
+msgstr "CSMTextSettings"
 
-#: libcore/asobj/XMLSocket_as.cpp:312
-msgid "XMLSocket.connect() called while already connected, ignored"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:85
+#, c-format
+msgid "  PLACEOBJECT: depth=%d(%d) char=%d"
+msgstr "PLACEOBJECT: depth=%d(%d) char=%d"
 
-#: libcore/asobj/XMLSocket_as.cpp:319
-msgid "XMLSocket.connect() needs two arguments"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:89 libcore/swf/PlaceObject2Tag.cpp:319
+#, c-format
+msgid "  SWFCxForm: %s"
+msgstr "SWFCxForm: %s"
 
-#: libcore/asobj/XMLSocket_as.cpp:344
-msgid "XMLSocket.connect(): connection failed"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:105
+#, c-format
+msgid "Reserved field in PlaceObject actions == %u (expected 0)"
+msgstr "PlaceObject 中保留字段 actions == %u(预计值0)"
 
-#: libcore/asobj/XMLSocket_as.cpp:360
-msgid "XMLSocket.send() needs at least one argument"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:123
+#, c-format
+msgid "  actions: flags = 0x%X"
+msgstr "actions: flags = 0x%X"
 
-#: libcore/asobj/AsBroadcaster.cpp:233
-msgid "AsBroadcaster.initialize() requires one argument, none given"
+#: libcore/swf/PlaceObject2Tag.cpp:158
+#, c-format
+msgid ""
+"swf_event::read(), even_length = %u, but only %lu bytes left to the end of "
+"current tag. Breaking for safety."
 msgstr ""
+"swf_event::read(), even_length = %u, 到当前标签结束只留下 %lu 字节。出于安全"
+"性而中断。"
 
-#: libcore/asobj/AsBroadcaster.cpp:243
-#, c-format
-msgid "AsBroadcaster.initialize(%s): first arg is not an object"
+#: libcore/swf/PlaceObject2Tag.cpp:169
+msgid "swf_event::read(), event_length = 0 (empty). Skipping."
 msgstr ""
 
-#: libcore/asobj/AsBroadcaster.cpp:252
+#: libcore/swf/PlaceObject2Tag.cpp:227
 #, c-format
 msgid ""
-"AsBroadcaster.initialize(%s): first arg is an object but doesn't cast to one "
-"(dangling DisplayObject ref?)"
-msgstr ""
+"swf_event::read() -- unknown / unhandled event type received, flags = 0x%x"
+msgstr "swf_event::read() -- 收到未知/未处理的事件类型, flags = 0x%x"
 
-#: libcore/asobj/AsBroadcaster.cpp:282 libcore/asobj/AsBroadcaster.cpp:327
-#: libcore/asobj/AsBroadcaster.cpp:393
-#, c-format
-msgid "%p.addListener(%s): this object has no _listeners member"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:256
+msgid "Unexpected end of tag while parsing PlaceObject tag events"
+msgstr "解析PlaceObject标签事件时意外的标签结束"
 
-#: libcore/asobj/AsBroadcaster.cpp:293 libcore/asobj/AsBroadcaster.cpp:338
-#: libcore/asobj/AsBroadcaster.cpp:404
+#: libcore/swf/PlaceObject2Tag.cpp:312
 #, c-format
-msgid "%p.addListener(%s): this object's _listener isn't an object: %s"
-msgstr ""
+msgid "  PLACEOBJECT2: depth = %d (%d)"
+msgstr "PLACEOBJECT2: depth = %d (%d)"
 
-#: libcore/asobj/AsBroadcaster.cpp:415
+#: libcore/swf/PlaceObject2Tag.cpp:314 libcore/swf/PlaceObject2Tag.cpp:427
 #, c-format
-msgid "%p.broadcastMessage() needs an argument"
-msgstr ""
+msgid "  char id = %d"
+msgstr "字符 id = %d"
 
-#: libcore/asobj/TextFormat_as.cpp:406
+#: libcore/swf/PlaceObject2Tag.cpp:316 libcore/swf/PlaceObject2Tag.cpp:428
 #, c-format
-msgid "Too many args (%d) passed to TextFormat"
-msgstr ""
+msgid "  SWFMatrix: %s"
+msgstr "SWFMatrix: %s"
 
-#: libcore/asobj/TextFormat_as.cpp:483
-msgid "Getter for textformat_tabStops"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:321 libcore/swf/PlaceObject2Tag.cpp:430
+#, c-format
+msgid "  ratio: %d"
+msgstr "比数: %d"
 
-#: libcore/asobj/TextFormat_as.cpp:562
-msgid "TextFormat.getTextExtent requires at least one argument"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:322 libcore/swf/PlaceObject2Tag.cpp:431
+#, c-format
+msgid "  name = %s"
+msgstr "名称 = %s"
 
-#: libcore/asobj/TextFormat_as.cpp:726
+#: libcore/swf/PlaceObject2Tag.cpp:324 libcore/swf/PlaceObject2Tag.cpp:433
 #, c-format
-msgid "Uknown alignment value: %d, take as left"
-msgstr ""
+msgid "  clip_depth = %d (%d)"
+msgstr "clip_depth = %d (%d)"
 
-#: libcore/asobj/TextFormat_as.cpp:741
+#: libcore/swf/PlaceObject2Tag.cpp:327 libcore/swf/PlaceObject2Tag.cpp:436
 #, c-format
-msgid "Unknown display value: %d "
-msgstr ""
+msgid " m_place_type: %d"
+msgstr "m_place_type: %d"
 
-#: libcore/asobj/Color_as.cpp:153
-msgid "Color.setRGB() : missing argument"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:425
+#, c-format
+msgid "  PLACEOBJECT3: depth = %d (%d)"
+msgstr "PLACEOBJECT3: depth = %d (%d)"
 
-#: libcore/asobj/Color_as.cpp:186
-msgid "Color.setTransform() : missing argument"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:429
+#, c-format
+msgid "  SWFCxForm: %d"
+msgstr "SWFCxForm: %d"
 
-#: libcore/asobj/Color_as.cpp:196
+#: libcore/swf/PlaceObject2Tag.cpp:432
 #, c-format
-msgid "Color.setTransform(%s) : first argument doesn't cast to an object"
-msgstr ""
+msgid "  class name = %s"
+msgstr "类名 = %s"
 
-#: libcore/asobj/LocalConnection_as.cpp:279
-msgid "Attempting to write to disabled LocalConnection!"
-msgstr ""
+#: libcore/swf/PlaceObject2Tag.cpp:435
+msgid "   bitmapCaching enabled"
+msgstr "启用 bitmapCaching"
 
-#: libcore/asobj/LocalConnection_as.cpp:288
-msgid "Failed to attach shared memory segment"
-msgstr ""
+#: libcore/swf/TextRecord.cpp:52
+msgid "end text records"
+msgstr "结束文本记录"
 
-#: libcore/asobj/LocalConnection_as.cpp:296
-msgid "Failed to get shm lock"
-msgstr ""
+#: libcore/swf/TextRecord.cpp:78
+#, c-format
+msgid "  has_font: font id = %d (%p)"
+msgstr "has_font: 字体 id = %d (%p)"
 
-#: libcore/asobj/LocalConnection_as.cpp:332
-msgid "Invalid connection name data"
-msgstr ""
+#: libcore/swf/TextRecord.cpp:90
+msgid "  hasColor"
+msgstr "hasColor"
 
-#: libcore/asobj/LocalConnection_as.cpp:431
-msgid "Failed to get lock on shared memory! Will not remove listener"
-msgstr ""
+#: libcore/swf/TextRecord.cpp:99
+#, c-format
+msgid "  xOffset = %g"
+msgstr "xOffset = %g"
 
-#: libcore/asobj/LocalConnection_as.cpp:461
-msgid "Failed to open shared memory segment"
-msgstr ""
+#: libcore/swf/TextRecord.cpp:108
+#, c-format
+msgid "  yOffset = %g"
+msgstr "yOffset = %g"
 
-#: libcore/asobj/LocalConnection_as.cpp:534
-msgid "LocalConnection.connect() expects exactly 1 argument"
-msgstr ""
+#: libcore/swf/TextRecord.cpp:117
+#, c-format
+msgid "  textHeight = %g"
+msgstr "textHeight = %g"
 
-#: libcore/asobj/LocalConnection_as.cpp:542
-msgid "LocalConnection.connect(): first argument must be a string"
-msgstr ""
-
-#: libcore/asobj/LocalConnection_as.cpp:587
-#: libcore/asobj/LocalConnection_as.cpp:599
-#: libcore/asobj/LocalConnection_as.cpp:612
+#: libcore/swf/TextRecord.cpp:126
 #, c-format
-msgid "LocalConnection.send(%s): requires at least 2 arguments"
-msgstr ""
-
-#: libcore/asobj/LocalConnection_as.cpp:783
-msgid "No space for listener in shared memory!"
-msgstr ""
+msgid "  GlyphEntries: count = %d"
+msgstr "GlyphEntries: count = %d"
 
-#: libcore/asobj/LocalConnection_as.cpp:844
+#: libcore/swf/TextRecord.cpp:138
 #, c-format
-msgid "Invalid domain %s"
-msgstr ""
+msgid "   glyph%d: index=%d, advance=%g"
+msgstr "glyph%d: index=%d, advance=%g"
 
-#: libcore/asobj/LocalConnection_as.cpp:851
+#: libcore/swf/DefineFontAlignZonesTag.cpp:52
 #, c-format
-msgid "Invalid function name %s"
-msgstr ""
-
-#: libcore/asobj/LocalConnection_as.cpp:877
-msgid "Fewer AMF fields than expected."
-msgstr ""
-
-#: libcore/asobj/Microphone_as.cpp:252
-msgid "No MediaHandler exists! Cannot create a Microphone object"
-msgstr ""
+msgid "DefineFontAlignZones tag references an undefined font %d"
+msgstr "DefineFontAlignZones 标记引用了一个未定义的字体 %d"
 
-#: libcore/asobj/Microphone_as.cpp:284
-msgid "Microphone.gain(): wrong number of parameters passed"
-msgstr ""
+#: libcore/swf/DefineFontAlignZonesTag.cpp:71
+#, c-format
+msgid "DefineFontAlignZones: font=%d, flags=%d, table int: %s"
+msgstr "DefineFontAlignZones: font=%d, flags=%d, table int: %s"
 
-#: libcore/asobj/Microphone_as.cpp:300
-msgid "Microphone.setRate: wrong number of parameters passed"
-msgstr ""
+#: libcore/swf/DefineFontAlignZonesTag.cpp:108
+msgid "DefineFontAlignZoneTag"
+msgstr "DefineFontAlignZoneTag"
 
-#: libcore/asobj/Microphone_as.cpp:313
-msgid "Microphone::activityLevel only has default value (-1)"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:83
+msgid "anchor-labeled frame not supported"
+msgstr "不支持锚标记的帧"
 
-#: libcore/asobj/Microphone_as.cpp:318
-msgid "Attempt to set activity property of Microphone"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:87
+#, c-format
+msgid "frame_label_loader end position %d, read up to %d"
+msgstr "frame_label_loader 结束位置 %d,最多读取到 %d"
 
-#: libcore/asobj/Microphone_as.cpp:353
-msgid "Microphone::muted is always false (always allows access)"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:107
+#, c-format
+msgid "  sprite:  char id = %d"
+msgstr "精灵:字符id = %d"
 
-#: libcore/asobj/Microphone_as.cpp:413
-msgid "Microphone::silenceTimeout can be set, but is unimplemented"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:118
+msgid ""
+"Nested DEFINESPRITE tags. Will add to top-level DisplayObjects dictionary."
+msgstr "嵌套DEFINESPRITE标签。将加入到顶层的DisplayObject字典中。"
 
-#: libcore/asobj/Microphone_as.cpp:436
+#: libcore/swf/tag_loaders.cpp:128
 #, c-format
-msgid "%s: Too many arguments"
-msgstr ""
+msgid "Sprite %d advertise no frames"
+msgstr "精灵%d的广告没有帧。"
 
-#: libcore/asobj/LoadableObject.cpp:176
-msgid "XML.addRequestHeader: XML._customHeaders is not an object"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:169
+#, c-format
+msgid "DEFINESOUNDLOADER: sound sample rate %d (expected 0 to %u)"
+msgstr "DEFINESOUNDLOADER: 声音采样率 %d (预计0至 %u)"
 
-#: libcore/asobj/LoadableObject.cpp:193
-msgid "XML.addRequestHeader requires at least one argument"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:189
+#, c-format
+msgid ""
+"define sound: ch=%d, format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, delay=%d"
+msgstr "定义声音:ch=%d, format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, delay=%d"
 
-#: libcore/asobj/LoadableObject.cpp:206
-msgid "XML.addRequestHeader: single argument is not an array"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:217
+msgid "Tag boundary reported past end of SWFStream!"
+msgstr "标签边界超过SWFStream的结尾!"
 
-#: libcore/asobj/LoadableObject.cpp:222
+#: libcore/swf/tag_loaders.cpp:237
 #, c-format
-msgid "XML.addRequestHeader(%s): arguments after the second will be discarded"
+msgid ""
+"There is no sound handler currently active, so DisplayObject with id %d will "
+"not be added to the dictionary"
 msgstr ""
+"当前没有活动的声音处理程序,所以id为 %d 的 DisplayObject 将不会被添加到字典中"
 
-#: libcore/asobj/LoadableObject.cpp:237
+#: libcore/swf/tag_loaders.cpp:271
 #, c-format
-msgid "XML.addRequestHeader(%s): both arguments must be a string"
-msgstr ""
-
-#: libcore/asobj/LoadableObject.cpp:304
-msgid "sendAndLoad() requires at least two arguments"
-msgstr ""
-
-#: libcore/asobj/LoadableObject.cpp:312
-msgid "sendAndLoad(): invalid empty URL"
-msgstr ""
+msgid "File attributes: metadata=%s network=%s"
+msgstr "文件属性: metadata=%s network=%s"
 
-#: libcore/asobj/LoadableObject.cpp:319
-msgid "sendAndLoad(): invalid target (must be an XML or LoadVars object)"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:272 libcore/swf/tag_loaders.cpp:273
+msgid "true"
+msgstr "真"
 
-#: libcore/asobj/LoadableObject.cpp:397
-#, c-format
-msgid "Loading from URL: '%s'"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:272 libcore/swf/tag_loaders.cpp:273
+msgid "false"
+msgstr "假"
 
-#: libcore/asobj/LoadableObject.cpp:417
-msgid "load() requires at least one argument"
+#: libcore/swf/tag_loaders.cpp:277
+msgid ""
+"FileAttributes tag in the SWF requests that network access is not granted to "
+"this movie (or application?) when loaded from the filesystem. Anyway Gnash "
+"won't care; use white/black listing in your .gnashrc instead"
 msgstr ""
+"从文件系统加载时,SWF中文件属性标签的网络访问请求没有被授予这个电影(或应用程"
+"序)。Gnash不会在意; 而会使用 .gnashrc中的白/黑名单"
 
-#: libcore/asobj/LoadableObject.cpp:426
-msgid "load(): invalid empty URL"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:285
+msgid ""
+"This SWF file requires AVM2: there will be no ActionScript interpretation"
+msgstr "该SWF文件需要AVM2:不会有任何的ActionScript解释器"
 
-#: libcore/DisplayObjectContainer.cpp:75
-msgid "Children"
+#: libcore/swf/tag_loaders.cpp:310
+#, c-format
+msgid ""
+"  RDF metadata (information only): [[\n"
+"%s\n"
+"]]"
 msgstr ""
+"RDF 元数据 (只有信息): [[\n"
+"%s\n"
+"]]"
 
-#: libcore/DisplayList.cpp:305
+#: libcore/swf/tag_loaders.cpp:326
 #, c-format
-msgid "moveDisplayObject() -- can't find object at depth %d"
-msgstr ""
+msgid "Descriptive metadata from movie %s: %s"
+msgstr "电影 %s的描述元数据: %s"
 
-#: libcore/DisplayList.cpp:312
-msgid "Request to move an unloaded DisplayObject"
-msgstr ""
+#: libcore/swf/tag_loaders.cpp:388
+#, c-format
+msgid "  reflex = \"%c%c%c\""
+msgstr "反射 = \"%c%c%c\""
 
-#: libcore/DisplayList.cpp:380
+#: libcore/swf/SoundStreamHeadTag.cpp:78
 #, c-format
-msgid "%s.swapDepth(%d) : ignored call with target depth less then %d"
-msgstr ""
+msgid "SOUNDSTREAMHEAD: stream sample rate %d (expected 0 to %u)"
+msgstr "SOUNDSTREAMHEAD: 流采样率 %d (预计为 0 到 %u)"
 
-#: libcore/DisplayList.cpp:404
+#: libcore/swf/SoundStreamHeadTag.cpp:88
+#, c-format
 msgid ""
-"First argument to DisplayList::swapDepth() is NOT a DisplayObject in the "
-"list. Call ignored."
+"Different stream/playback sound rate (%d/%d). This seems common in SWF "
+"files, so we'll warn only once."
 msgstr ""
+"不同的流/回放声音频率 (%d/%d)。这似乎在SWF文件中是普遍的,所以我们只警告一"
+"次。"
 
-#: libcore/DisplayList.cpp:875
+#: libcore/swf/SoundStreamHeadTag.cpp:95
 #, c-format
 msgid ""
-"mergeDisplayList: DisplayObject %s (%s at depth %d [%d]) about to be "
-"discarded in given display list is not marked as unloaded and not found in "
-"the merged current displaylist"
-msgstr ""
-
-#: libcore/Geometry.cpp:198
-msgid "Collision detection for unidirectionally scaled strokes"
+"Different stream/playback sample size (%d/%d). This seems common in SWF "
+"files, so we'll warn only once."
 msgstr ""
+"不同的流/回放采样大小 (%d/%d)。这似乎在SWF文件中是普遍的,所以我们只警告一"
+"次。"
 
-#: libcore/TextField.cpp:234
+#: libcore/swf/SoundStreamHeadTag.cpp:101
 #, c-format
-msgid "FIXME: attempt to remove a TextField being a child of a %s"
+msgid ""
+"Different stream/playback channels (%s/%s). This seems common in SWF files, "
+"so we'll warn only once."
 msgstr ""
+"不同的流/回放频道(%s/%s)。这似乎在SWF文件中是普遍的,所以我们只警告一次。"
 
-#: libcore/TextField.cpp:413 libcore/TextField.cpp:423
-#: libcore/TextField.cpp:441 libcore/TextField.cpp:456
-msgid "invalid restrict string"
-msgstr ""
+#: libcore/swf/SoundStreamHeadTag.cpp:121
+msgid ""
+"No samples advertised for sound stream, pretty common so will warn only once"
+msgstr "声音流没有样本广告,很常见所以只警告一次"
 
-#: libcore/TextField.cpp:965
+#: libcore/swf/SoundStreamHeadTag.cpp:148
 #, c-format
 msgid ""
-"TextField: missing glyph for space char (needed for TAB). Make sure "
-"DisplayObject shapes for font %s are being exported into your SWF file."
-msgstr ""
+"sound stream head: format=%s, rate=%d, 16=%d, stereo=%d, ct=%d, latency=%d"
+msgstr "声音流头部: 格式=%s, 频率=%d, 16=%d, 立体声=%d, 电流=%d, 延迟=%d"
 
-#: libcore/TextField.cpp:1044
-msgid "No font for TextField!"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:154
+msgid "  jpeg_tables_loader"
+msgstr "jpeg_tables_loader"
 
-#: libcore/TextField.cpp:1444
+#: libcore/swf/DefineBitsTag.cpp:165
 #, c-format
-msgid "Unexpected value '%s' in TextField font color attribute"
-msgstr ""
+msgid "No bytes to read in JPEGTABLES tag at offset %d"
+msgstr "在JPEGTABLES 标签中偏移 %d 处没有读取到字节"
 
-#: libcore/TextField.cpp:1459
-msgid "Expected a font name in FACE attribute."
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:206
+#, c-format
+msgid "DEFINEBITS: Duplicate id (%d) for bitmap DisplayObject - discarding it"
+msgstr "DEFINEBITS:位图DisplayObject有重复的ID (%d)  - 丢弃它"
 
-#: libcore/TextField.cpp:1513
-msgid "<img> HTML tag in TextField"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:235
+msgid "Failed to parse bitmap for character %1%"
+msgstr "无法解析字符%1%的位图"
 
-#: libcore/TextField.cpp:1551
-msgid "<span> HTML tag in TextField"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:243
+msgid "No renderer, not adding bitmap %1%"
+msgstr "没有渲染,没有添加位图 %1%"
 
-#: libcore/TextField.cpp:1623
-msgid "HTML <textformat> tag tabstops attribute"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:250
+msgid "Adding bitmap id %1%"
+msgstr "添加位图 id %1%"
 
-#: libcore/TextField.cpp:1706
-#, c-format
+#: libcore/swf/DefineBitsTag.cpp:269
 msgid ""
-"TextField: missing embedded glyph for char %d. Make sure DisplayObject "
-"shapes for font %s are being exported into your SWF file"
-msgstr ""
+"DEFINEBITS: No jpeg loader registered in movie definition - discarding bitmap"
+msgstr "DEFINEBITS:电影定义中没有注册JPEG加载器 - 丢弃位图"
 
-#: libcore/TextField.cpp:1714
-#, c-format
-msgid ""
-"TextField: missing device glyph for char %d. Maybe you don't have font '%s' "
-"installed in your system."
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:368
+msgid "gnash is not linked to zlib -- can't load jpeg3 image data"
+msgstr "gnash未链接到zlib - 无法加载jpeg3图像数据"
 
-#: libcore/TextField.cpp:1905
+#: libcore/swf/DefineBitsTag.cpp:413
 #, c-format
-msgid ""
-"Current environment has no target, can't bind VariableName (%s) associated "
-"to text field. Gnash will try to register again on next access."
-msgstr ""
+msgid "  defbitslossless2: tag = %d, fmt = %d, w = %d, h = %d"
+msgstr "defbitslossless2: tag = %d, fmt = %d, w = %d, h = %d"
 
-#: libcore/TextField.cpp:1931
-#, c-format
-msgid ""
-"VariableName associated to text field refers to an unknown target (%s). It "
-"is possible that the DisplayObject will be instantiated later in the SWF "
-"stream. Gnash will try to register again on next access."
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:420
+msgid "Bitmap has a height or width of 0"
+msgstr "位图的高度或宽度为0"
 
-#: libcore/TextField.cpp:2024 libcore/TextField.cpp:2058
-#: libcore/TextField.cpp:2149
-msgid "invalid HTML tag"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:426
+msgid "gnash is not linked to zlib -- can't load zipped image data"
+msgstr "未链接gnash到zlib - 无法加载压缩的图像数据"
 
-#: libcore/TextField.cpp:2035 libcore/TextField.cpp:2071
-#: libcore/TextField.cpp:2102
-msgid "found NULL character in htmlText"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:452
+msgid "Will not allocate %1%x%2% image in DefineBitsLossless tag"
+msgstr "将不会在 DefineBitsLossless 标签中分配 %1%x%2% 图像"
 
-#: libcore/TextField.cpp:2075
-msgid "malformed HTML tag, invalid attribute name"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:477
+msgid "Unknown bitmap format. Ignoring"
+msgstr "未知的位图格式。忽略"
 
-#: libcore/TextField.cpp:2125
-msgid "malformed HTML tag, invalid attribute value"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:591
+#, c-format
+msgid "inflateWrapper() inflateInit() returned %d (%s)"
+msgstr "inflateWrapper() inflateInit() 返回 %d (%s)"
 
-#: libcore/TextField.cpp:2158
-msgid "I declare this a HTML syntax error"
-msgstr ""
+#: libcore/swf/DefineBitsTag.cpp:611
+msgid "inflateWrapper(): no end of zstream found within swf tag boundaries"
+msgstr "inflateWrapper(): 没有在SWF标签的界限内找到zstream结束"
 
-#: libcore/SWFMovie.cpp:54
+#: libcore/swf/DefineBitsTag.cpp:635
 #, c-format
-msgid "Frame %d never loaded. Total frames: %d"
-msgstr ""
+msgid "inflateWrapper() inflate() returned %d (%s)"
+msgstr "inflateWrapper() inflate() 返回 %d (%s)"
 
-#: libcore/SWFMovie.cpp:77
+#: libcore/swf/DefineBitsTag.cpp:644
 #, c-format
-msgid "Frame %d never loaded. Total frames: %d."
-msgstr ""
+msgid "inflateWrapper() inflateEnd() return %d (%s)"
+msgstr "inflateWrapper() inflateEnd() 返回 %d (%s)"
 
-#: libcore/SWFMovie.cpp:109
+#: libcore/as_function.cpp:94
 #, c-format
-msgid ""
-"Attempt to perform initialized for a character %s that does not exist "
-"(either not exported or not defined)"
-msgstr ""
+msgid "Native function called as constructor threw exception: %s"
+msgstr "原生函数被作为构造函数调用时发生异常: %s"
 
-#: libcore/LineStyle.cpp:186
-msgid ""
-"UNTESTED: Do not know how to interpolate line styles with different vertical "
-"thickness scaling"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:256
+#, c-format
+msgid "Can't init FreeType! Error = %d"
+msgstr "无法初始化 FreeType!错误 = %d"
 
-#: libcore/LineStyle.cpp:191
-msgid ""
-"UNTESTED: Do not know how to interpolate line styles with different "
-"horizontal thickness scaling"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:268
+#, c-format
+msgid "Can't close FreeType! Error = %d"
+msgstr "无法关闭 FreeType!错误 = %d"
 
-#: libcore/DisplayObject.cpp:121
+#: libcore/FreetypeGlyphsProvider.cpp:282
 #, c-format
-msgid "loadMovie against a %s DisplayObject"
-msgstr ""
+msgid "Failed to find fonts directory, using hard-coded font filename \"%s\""
+msgstr "无法找到字体目录,使用预定的字体文件名 \"%s\""
 
-#: libcore/DisplayObject.cpp:258
-msgid "blendMode"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:295
+#, c-format
+msgid "Can't init fontconfig library, using hard-coded font filename \"%s\""
+msgstr "无法初始化 fontconfig 库,使用预定的字体文件名 \"%s\""
 
-#: libcore/DisplayObject.cpp:368
+#: libcore/FreetypeGlyphsProvider.cpp:357
 #, c-format
-msgid "Setting _height=%g of DisplayObject %s (%s)"
-msgstr ""
+msgid "No device font matches the name '%s', using hard-coded font filename"
+msgstr "没有匹配名称'%s'的设备字体,使用预定的字体文件名"
 
-#: libcore/DisplayObject.cpp:796
-msgid "yes"
+#: libcore/FreetypeGlyphsProvider.cpp:362
+msgid ""
+"Font filename matching not implemented (no fontconfig support built-in), "
+"using hard-coded font filename"
 msgstr ""
+"没有实现字体文件名匹配(没有内置fontconfig的支持),使用预定的字体文件名"
 
-#: libcore/DisplayObject.cpp:797
-msgid "no"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:395
+msgid "Freetype not supported"
+msgstr "不支持 Freetype"
 
-#: libcore/DisplayObject.cpp:803
-msgid "Depth"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:436
+#, c-format
+msgid "Can't find font file for font '%s'"
+msgstr "无法为字体 '%s' 找到字体文件"
 
-#: libcore/DisplayObject.cpp:809
-msgid "Ratio"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:449
+#, c-format
+msgid "Font file '%s' has bad format"
+msgstr "字体文件 '%s' 格式错误"
 
-#: libcore/DisplayObject.cpp:819
-msgid "Clipping depth"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:458
+#, c-format
+msgid "Some error opening font '%s'"
+msgstr "打开字体 '%s' 错误"
 
-#: libcore/DisplayObject.cpp:824
-msgid "Dimensions"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:492
+#, c-format
+msgid "Error loading freetype outline glyph for char '%c' (error: %d)"
+msgstr "为字符 '%c' 装载freetype轮廓字形出错(错误:%d)"
 
-#: libcore/DisplayObject.cpp:826
-msgid "Dynamic"
+#: libcore/FreetypeGlyphsProvider.cpp:508
+#, c-format
+msgid ""
+"FT_Load_Char() returned a glyph format != FT_GLYPH_FORMAT_OUTLINE (%c%c%c%c)"
 msgstr ""
+"FT_Load_Char() 返回了一个字型 format != FT_GLYPH_FORMAT_OUTLINE (%c%c%c%c)"
 
-#: libcore/DisplayObject.cpp:827
-msgid "Mask"
-msgstr ""
+#: libcore/FreetypeGlyphsProvider.cpp:563
+msgid "Could not release FT face resources"
+msgstr "无法释放 FT 字体资源"
 
-#: libcore/DisplayObject.cpp:828
-msgid "Destroyed"
+#: libcore/MovieFactory.cpp:79
+msgid ""
+"Requested to keep from completely loading a movie, but the movie in question "
+"is an image, for which we don't yet have the concept of a 'loading thread'"
 msgstr ""
+"要求避免完全加载影片,但问题中影片是一个图像,我们还没有一个'加载线程'的概念"
 
-#: libcore/DisplayObject.cpp:830
-msgid "Unloaded"
-msgstr ""
+#: libcore/MovieFactory.cpp:94
+msgid "FLV can't be loaded directly as a movie"
+msgstr "FLV 不能作为一个影片被直接加载"
 
-#: libcore/DisplayObject.cpp:834
-msgid "Blend mode"
-msgstr ""
+#: libcore/MovieFactory.cpp:98
+msgid "Unknown file type"
+msgstr "未知文件类型"
 
-#: libcore/DisplayObject.cpp:837
-msgid "Invalidated"
-msgstr ""
+#: libcore/MovieFactory.cpp:133
+#, c-format
+msgid "Couldn't load library movie '%s'"
+msgstr "不能加载库中影片 '%s'"
 
-#: libcore/DisplayObject.cpp:839
-msgid "Child invalidated"
-msgstr ""
+#: libcore/MovieFactory.cpp:173
+msgid "Can't read file header"
+msgstr "无法读取文件头部"
 
-#: libcore/DisplayObject.cpp:860 libcore/DisplayObject.cpp:1564
-#, c-format
-msgid "Attempt to set property to %s, refused"
-msgstr ""
+#: libcore/MovieFactory.cpp:212
+msgid "Can't read 3 bytes after an MZ (.exe) header"
+msgstr "无法读取一个MZ(.exe)头部之后的3个字节"
 
-#: libcore/DisplayObject.cpp:1095
-#, c-format
-msgid "Attempt to set %s._y to %s (evaluating to number %g) refused"
-msgstr ""
+#: libcore/MovieFactory.cpp:222
+#, fuzzy
+msgid "Could not find SWF inside an .exe file"
+msgstr "无法找到在一个exe文件内部的SWF"
+
+#: libcore/MovieFactory.cpp:231
+#, fuzzy, c-format
+msgid "unknown file type, buffer is %c%c%c"
+msgstr "未知文件类型, 缓冲区是 %c%c%c"
 
-#: libcore/DisplayObject.cpp:1126
+#: libcore/MovieFactory.cpp:273
 #, c-format
-msgid "Attempt to set %s._x to %s (evaluating to number %g) refused"
-msgstr ""
+msgid "Can't read image file from %s"
+msgstr "无法从 %s 读取图像文件"
 
-#: libcore/DisplayObject.cpp:1155
+#: libcore/MovieFactory.cpp:283
 #, c-format
-msgid "Attempt to set %s._xscale to %s (evaluating to number %g) refused"
-msgstr ""
+msgid "Parsing error: %s"
+msgstr "解析错误: %s"
 
-#: libcore/DisplayObject.cpp:1181
+#: libcore/MovieFactory.cpp:309
 #, c-format
-msgid "Attempt to set %s._yscale to %s (evaluating to number %g) refused"
-msgstr ""
+msgid "failed to open '%s'; can't create movie"
+msgstr "无法打开 '%s'; 不能创建影片"
 
-#: libcore/DisplayObject.cpp:1217
+#: libcore/MovieFactory.cpp:314
 #, c-format
-msgid "Attempt to set %s._visible to %s (evaluating to number %g) refused"
-msgstr ""
+msgid "streamProvider opener can't open '%s'"
+msgstr "streamProvider 打开程序无法打开 '%s'"
 
-#: libcore/DisplayObject.cpp:1246
+#: libcore/as_environment.cpp:182
 #, c-format
-msgid "Attempt to set %s._alpha to %s (evaluating to number %g) refused"
-msgstr ""
+msgid "invalid path '%s' (p=next_slash=%s)"
+msgstr "不合法路径 '%s' (p=next_slash=%s)"
 
-#: libcore/DisplayObject.cpp:1312
+#: libcore/as_environment.cpp:193
 #, c-format
-msgid "Attempt to set %s._rotation to %s (evaluating to number %g) refused"
-msgstr ""
+msgid "invalid path '%s' (dot not allowed after having seen a slash)"
+msgstr "不合法路径 '%s' (不允许有超过一个斜线)"
 
-#: libcore/DisplayObject.cpp:1352
-msgid "_soundbuftime setting"
-msgstr ""
+#: libcore/as_environment.cpp:332
+#, c-format
+msgid "-------------- %s = %s"
+msgstr "-------------- %s = %s"
 
-#: libcore/DisplayObject.cpp:1376
+#: libcore/as_environment.cpp:346
 #, c-format
-msgid "Setting _width=%g of DisplayObject %s (%s)"
-msgstr ""
+msgid "Path target '%s' not found while setting %s=%s"
+msgstr "路径目标 '%s' 未找到,在设置 %s=%s 时"
 
-#: libcore/DisplayObject.cpp:1386 libcore/DisplayObject.cpp:1404
-msgid "_focusrect"
-msgstr ""
+#: libcore/as_environment.cpp:445
+#, c-format
+msgid "Won't set invalid raw variable name: %s"
+msgstr "将不会设置不合法的原始变量的名称: %s"
 
-#: libcore/StaticText.cpp:53
-msgid "StaticText::pointInShape"
+#: libcore/as_environment.cpp:474
+#, c-format
+msgid ""
+"as_environment::setVariableRaw(%s, %s): neither current target nor original "
+"target are defined, can't set the variable"
 msgstr ""
+"as_environment::setVariableRaw(%s, %s): 当前目标和原始目标都未定义,不能设置该"
+"变量"
 
-#: libcore/AMFConverter.cpp:98
-msgid "Problems serializing an object's member"
-msgstr ""
+#: libcore/as_environment.cpp:486
+#, c-format
+msgid "Won't get invalid raw variable name: %s"
+msgstr "将不能得到不合法的原始变量的名称: %s"
 
-#: libcore/AMFConverter.cpp:212
+#: libcore/as_environment.cpp:567
 #, c-format
-msgid "Problems serializing strict array member %d=%s"
-msgstr ""
+msgid "reference to non-existent variable '%s'"
+msgstr "应用到不存在的变量 '%s'"
 
-#: libcore/AMFConverter.cpp:242
-msgid "Could not serialize object"
-msgstr ""
+#: libcore/Geometry.cpp:187
+msgid "Collision detection for unidirectionally scaled strokes"
+msgstr "单向缩放笔划的碰撞检测"
 
-#: libcore/AMFConverter.cpp:319
+#: libcore/as_object.cpp:439
 #, c-format
-msgid "Unknown AMF type %s! Cannot proceed"
-msgstr ""
+msgid "Caught exception: %s"
+msgstr "捕获异常: %s"
 
-#: libcore/AMFConverter.cpp:376
+#: libcore/as_object.cpp:627
 #, c-format
-msgid "AMF parsing error: %s"
-msgstr ""
-
-#: libcore/AMFConverter.cpp:407
-msgid "Read past _end of buffer for strict array length"
-msgstr ""
-
-#: libcore/AMFConverter.cpp:425
-msgid "Unable to read array elements"
-msgstr ""
+msgid "Attempt to set read-only property '%s'"
+msgstr "试图设置只读属性 '%s'"
 
-#: libcore/AMFConverter.cpp:442
-msgid "Read past _end of buffer for array length"
-msgstr ""
+#: libcore/as_object.cpp:639
+#, c-format
+msgid "%s: %s"
+msgstr "%s: %s"
 
-#: libcore/AMFConverter.cpp:468 libcore/AMFConverter.cpp:489
-msgid "MALFORMED AMF: premature _end of ECMA_ARRAY block"
-msgstr ""
+#: libcore/as_object.cpp:654
+#, c-format
+msgid "Unknown failure in setting property '%s' on object '%p'"
+msgstr "设置属性'%s',对象 '%p' 发生未知错误。 "
 
-#: libcore/AMFConverter.cpp:480
-msgid "MALFORMED AMF: empty member name not followed by OBJECT_END_AMF0 byte"
-msgstr ""
+#: libcore/as_object.cpp:683
+#, c-format
+msgid "Attempt to initialize read-only property '%s' on object '%p' twice"
+msgstr "试图两次初始化只读属性  '%s',对象 '%p'"
 
-#: libcore/AMFConverter.cpp:504
-msgid "Unable to read array element"
-msgstr ""
+#: libcore/as_object.cpp:845
+msgid "Circular inheritance chain detected during isPrototypeOf call"
+msgstr "在isPrototypeOf 调用中检测到循环的继承关系。"
 
-#: libcore/AMFConverter.cpp:528
-msgid "Could not read object property name"
-msgstr ""
+#: libcore/StaticText.cpp:53
+msgid "StaticText::pointInShape"
+msgstr "StaticText::pointInShape"
 
-#: libcore/AMFConverter.cpp:539
-msgid "AMF buffer terminated just before object _end byte. continuing anyway."
-msgstr ""
+#: libcore/vm/VM.cpp:222
+#, c-format
+msgid "-------------- global register[%d] = '%s'"
+msgstr "-------------- 全局寄存器[%d] = '%s'"
 
-#: libcore/AMFConverter.cpp:566
+#: libcore/vm/VM.cpp:250
 #, c-format
-msgid "readAMF0: invalid reference to object %d (%d known objects)"
-msgstr ""
+msgid "Recursion limit reached (%u)"
+msgstr "达到递归上限 (%u)"
 
-#: libcore/AMFConverter.cpp:597
-msgid ""
-"Date type encoded timezone info %1%, even though this field should not be "
-"used."
-msgstr ""
+#: libcore/vm/CallStack.cpp:64
+#, c-format
+msgid "-------------- local register[%d] = '%s'"
+msgstr "-------------- 本地寄存器[%d] = '%s'"
 
 #: libcore/vm/ASHandlers.cpp:435
 #, c-format
 msgid "Malformed action code: %s"
-msgstr ""
+msgstr "错误格式的动作代码:%s"
 
 #: libcore/vm/ASHandlers.cpp:450
 #, c-format
 msgid "%s: CHECKME: was broken"
-msgstr ""
+msgstr "%s: CHECKME: 已损坏"
 
 #: libcore/vm/ASHandlers.cpp:595
 #, c-format
 msgid "GetUrl: target=%s URL=%s"
-msgstr ""
+msgstr "GetUrl: target=%s URL=%s"
 
 #: libcore/vm/ASHandlers.cpp:615
 #, c-format
 msgid "ActionWaitForFrame (0x%X) tag length == %d (expected 3)"
-msgstr ""
+msgstr "ActionWaitForFrame (0x%X) 标签长度 == %d (预计为3)"
 
 #: libcore/vm/ASHandlers.cpp:629 libcore/vm/ASHandlers.cpp:1695
 #, c-format
 msgid "%s: environment target is null or not a MovieClip"
-msgstr ""
+msgstr "%s: 环境目标为空或不是一个 MovieClip"
 
 #: libcore/vm/ASHandlers.cpp:637
 #, c-format
 msgid "ActionWaitForFrame(%d): target (%s) has only %d frames"
-msgstr ""
+msgstr "ActionWaitForFrame(%d): 目标 (%s) 只有 %d 帧"
 
 #: libcore/vm/ASHandlers.cpp:679
 msgid "GotoLabel: environment target is null or not a MovieClip"
-msgstr ""
+msgstr "GotoLabel: 环境目标为空或不是一个 MovieClip"
 
 #: libcore/vm/ASHandlers.cpp:876 libcore/vm/ASHandlers.cpp:1572
 msgid "Negative size passed to ActionSubString, taking as whole length"
-msgstr ""
+msgstr "负数尺寸被传入到ActionSubString, 取整个长度的值"
 
 #: libcore/vm/ASHandlers.cpp:893
 msgid "Start is less then 1 in ActionSubString, setting to 1."
-msgstr ""
+msgstr "ActionSubString中 Start 小于1, 设置为1"
 
 #: libcore/vm/ASHandlers.cpp:903
 msgid ""
 "Start goes beyond input string in ActionSubString, returning the empty "
 "string."
-msgstr ""
+msgstr "ActionSubString中 Start 超出了输入的字符串, 返回空字符串。"
 
 #: libcore/vm/ASHandlers.cpp:916
 msgid ""
 "start + size goes beyond input string in ActionSubString, adjusting size"
-msgstr ""
+msgstr "ActionSubString中 start + size 超出了输入的字符串,  请调整size"
 
 #: libcore/vm/ASHandlers.cpp:963
 #, c-format
@@ -5531,138 +6067,140 @@ msgid ""
 "Can't assign a sprite/DisplayObject to a variable in SWF%d. We'll return "
 "undefined instead of %s."
 msgstr ""
+"不能为SWF%d中的一个变量分配一个 sprite/DisplayObject。我们将返回未定义来代"
+"替。"
 
 #: libcore/vm/ASHandlers.cpp:971
 #, c-format
 msgid "-- get var: %s=%s"
-msgstr ""
+msgstr "-- 得到变量: %s=%s"
 
 #: libcore/vm/ASHandlers.cpp:984
 #, c-format
 msgid ""
 "ActionSetVariable: %s=%s: variable name evaluates to invalid (empty) string"
-msgstr ""
+msgstr "ActionSetVariable: %s=%s: 变量名计算结果为不合法的(空)字符串"
 
 #: libcore/vm/ASHandlers.cpp:992
 #, c-format
 msgid "-- set var: %s = %s"
-msgstr ""
+msgstr "-- 设置变量: %s = %s"
 
 #: libcore/vm/ASHandlers.cpp:1043
 msgid ""
 "ActionGetProperty(<empty>) called, but current target is not a DisplayObject"
-msgstr ""
+msgstr "ActionGetProperty(<空>) 被调用,但当前目标不是一个 DisplayObject"
 
 #: libcore/vm/ASHandlers.cpp:1062
 #, c-format
 msgid "Could not find GetProperty target (%s)"
-msgstr ""
+msgstr "无法找到 GetProperty 目标(%s)"
 
 #: libcore/vm/ASHandlers.cpp:1087
 #, c-format
 msgid "ActionSetProperty: can't find target %s for setting property %s"
-msgstr ""
+msgstr "ActionSetProperty: 无法找到目标 %s 设置属性 %s"
 
 #: libcore/vm/ASHandlers.cpp:1110
 #, c-format
 msgid "duplicateMovieClip: invalid depth %d passed; not duplicating"
-msgstr ""
+msgstr "duplicateMovieClip: 传入不合法的深度 %d; 不复制"
 
 #: libcore/vm/ASHandlers.cpp:1125
 #, c-format
 msgid "Path given to duplicateMovieClip(%s) doesn't point to a DisplayObject"
-msgstr ""
+msgstr "duplicateMovieClip(%s)所给定的 Path 不指向一个 DisplayObject"
 
 #: libcore/vm/ASHandlers.cpp:1136
 #, c-format
 msgid "Path given to duplicateMovieClip(%s) is not a sprite"
-msgstr ""
+msgstr "duplicateMovieClip(%s) 所给定的 Path 不是一个精灵"
 
 #: libcore/vm/ASHandlers.cpp:1157
 #, c-format
 msgid "Path given to removeMovieClip(%s) doesn't point to a DisplayObject"
-msgstr ""
+msgstr "removeMovieClip(%s) 所给定的 Path 不指向一个 DisplayObject"
 
 #: libcore/vm/ASHandlers.cpp:1167
 #, c-format
 msgid "Path given to removeMovieClip(%s) is not a sprite"
-msgstr ""
+msgstr "removeMovieClip(%s) 所给定的 Path 不是一个精灵"
 
 #: libcore/vm/ASHandlers.cpp:1205
 #, c-format
 msgid "startDrag: unknown target '%s'"
-msgstr ""
+msgstr "startDrag: 未知目标'%s'"
 
 #: libcore/vm/ASHandlers.cpp:1225
 msgid "Y values in ActionStartDrag swapped, fixing"
-msgstr ""
+msgstr "ActionStartDrag 中 Y 值已交换, 修复中"
 
 #: libcore/vm/ASHandlers.cpp:1232
 msgid "X values in ActionStartDrag swapped, fixing"
-msgstr ""
+msgstr "ActionStartDrag 中 X 值已交换, 修复中"
 
 #: libcore/vm/ASHandlers.cpp:1296
 #, c-format
 msgid "-- %s cast_to %s (invalid args?)"
-msgstr ""
+msgstr "-- %s cast_to %s (不合法参数?)"
 
 #: libcore/vm/ASHandlers.cpp:1335
 #, c-format
 msgid "Stack value on IMPLEMENTSOP is not an object: %s."
-msgstr ""
+msgstr "IMPLEMENTSOP 上堆值不是一个对象: %s。"
 
 #: libcore/vm/ASHandlers.cpp:1344
 msgid "Target object for IMPLEMENTSOP has no prototype."
-msgstr ""
+msgstr "IMPLEMENTSOP 的目标对象没有原型。"
 
 #: libcore/vm/ASHandlers.cpp:1351
 #, c-format
 msgid "IMPLEMENTSOP target object's prototype is not an object (%s)"
-msgstr ""
+msgstr "IMPLEMENTSOP 目标对象的原型不是一个对象 (%s)"
 
 #: libcore/vm/ASHandlers.cpp:1359
 #, c-format
 msgid "Invalid interfaces count (%d) on IMPLEMENTSOP"
-msgstr ""
+msgstr "IMPLEMENTSOP 上不合法的接口数(%d) "
 
 #: libcore/vm/ASHandlers.cpp:1370
 #, c-format
 msgid "class found on stack on IMPLEMENTSOP is not an object: %s"
-msgstr ""
+msgstr "class found on stack on IMPLEMENTSOP 堆上找到的类不是一个对象: %s"
 
 #: libcore/vm/ASHandlers.cpp:1377
 msgid "Interface object for IMPLEMENTSOP has no prototype."
-msgstr ""
+msgstr "IMPLEMENTSOP 的接口对象没有原型"
 
 #: libcore/vm/ASHandlers.cpp:1385
 #, c-format
 msgid "Prototype of interface object for IMPLEMENTSOP is not an object (%s)."
-msgstr ""
+msgstr "IMPLEMENTSOP 接口对象的原型不是一个对象 (%s)。"
 
 #: libcore/vm/ASHandlers.cpp:1392
 #, c-format
 msgid "%s (with .prototype %p) implements %s (with .prototype %p)"
-msgstr ""
+msgstr "%s (with .prototype %p) 实现 %s (with .prototype %p)"
 
 #: libcore/vm/ASHandlers.cpp:1427
 #, c-format
 msgid "fscommand2:%s"
-msgstr ""
+msgstr "fscommand2:%s"
 
 #: libcore/vm/ASHandlers.cpp:1558
 #, c-format
 msgid " ActionMbSubString(%s, %d, %d)"
-msgstr ""
+msgstr "ActionMbSubString(%s, %d, %d)"
 
 #: libcore/vm/ASHandlers.cpp:1580
 msgid "Base is less then 1 in ActionMbSubString, setting to 1."
-msgstr ""
+msgstr "ActionMbSubString中 Base 少于1,设置为1。"
 
 #: libcore/vm/ASHandlers.cpp:1587
 msgid ""
 "base goes beyond input string in ActionMbSubString, returning the empty "
 "string."
-msgstr ""
+msgstr "ActionMbSubString中 base超出输入的字符串,返回空字符串。"
 
 #: libcore/vm/ASHandlers.cpp:1599
 #, c-format
@@ -5670,55 +6208,57 @@ msgid ""
 "base+size goes beyond input string in ActionMbSubString, adjusting size "
 "based on length:%d and start:%d"
 msgstr ""
+"ActionMbSubString中,base+size 超出输入的字符串,基于length:%d and start:%d "
+"调整size值"
 
 #: libcore/vm/ASHandlers.cpp:1623 libcore/vm/ASHandlers.cpp:1648
 msgid "Not properly implemented for SWF5"
-msgstr ""
+msgstr "不正确的SWF5实现"
 
 #: libcore/vm/ASHandlers.cpp:1674
 msgid "ActionStrictMode set to %1%"
-msgstr ""
+msgstr "ActionStrictMode 设置为 %1%"
 
 #: libcore/vm/ASHandlers.cpp:1703
 #, c-format
 msgid ""
 "Frame spec found on stack at ActionWaitForFrame doesn't evaluate to a valid "
 "frame: %s"
-msgstr ""
+msgstr "ActionWaitForFrame堆上发现的帧规格计算结果不是一个合法帧:%s"
 
 #: libcore/vm/ASHandlers.cpp:1728
 msgid "Unknown constant '%1%' (no pool registered with VM)"
-msgstr ""
+msgstr "未知常数 '%1%' (没有VM注册池)"
 
 #: libcore/vm/ASHandlers.cpp:1736
 msgid "Unknown constant '%1%' (registered pool has %2% entries)"
-msgstr ""
+msgstr "未知常数 '%1%' (注册池有 %2% 条目)"
 
 #: libcore/vm/ASHandlers.cpp:1793
 #, c-format
 msgid ""
 "Unknown push type %d. Execution will continue but it is likely to fail due "
 "to lost sync."
-msgstr ""
+msgstr "未知推类型 %d。将继续执行,但它可能会失败,引起丢失同步。"
 
 #: libcore/vm/ASHandlers.cpp:1835
 #, c-format
 msgid "Invalid register %d in ActionPush"
-msgstr ""
+msgstr "ActionPush中不合法寄存器 %d"
 
 #: libcore/vm/ASHandlers.cpp:1886
 #, c-format
 msgid "\t%d) type=%s, value=%s"
-msgstr ""
+msgstr "\t%d) 类型=%s, 值=%s"
 
 #: libcore/vm/ASHandlers.cpp:1917
 msgid "Undefined GetUrl2 URL on stack, skipping"
-msgstr ""
+msgstr "堆上未定义的 GetUrl2 URL,略过"
 
 #: libcore/vm/ASHandlers.cpp:1949
 #, c-format
 msgid "branch to offset %d  --  this section only runs to %d"
-msgstr ""
+msgstr "偏移为 %d 的分支 -- 本部分只运行到 %d"
 
 #: libcore/vm/ASHandlers.cpp:1983
 #, c-format
@@ -5726,297 +6266,297 @@ msgid ""
 "Couldn't find target_sprite \"%s\" in ActionCallFrame! target frame actions "
 "will not be called..."
 msgstr ""
+"ActionCallFrame中不能找到target_sprite \"%s\"!目标帧动作将不会被调用..."
 
 #: libcore/vm/ASHandlers.cpp:2034
 #, c-format
 msgid ""
 "Frame spec found on stack at ActionGotoExpression doesn't evaluate to a "
 "valid frame: %s"
-msgstr ""
+msgstr "ActionGotoExpression 堆上发现的帧规格计算结果不是一个合法的帧: %s"
 
 #: libcore/vm/ASHandlers.cpp:2046
 #, c-format
 msgid ""
 "Couldn't find target sprite \"%s\" in ActionGotoExpression. Will not go to "
 "target frame..."
-msgstr ""
+msgstr "ActionGotoExpression中无法找到目标精灵 \"%s\"。将不会转到目标帧..."
 
 #: libcore/vm/ASHandlers.cpp:2125
 #, c-format
 msgid "delete %s.%s: no object found to delete"
-msgstr ""
+msgstr "删除 %s.%s: 没有发现对象要删除"
 
 #: libcore/vm/ASHandlers.cpp:2165
 msgid "delete2 called with a path that does not resolve to an object"
-msgstr ""
+msgstr "delete2 调用时带有一个不能解析成一个对象的路径"
 
 #: libcore/vm/ASHandlers.cpp:2191
 #, c-format
 msgid "-- set local var: %s = %s"
-msgstr ""
+msgstr "-- 设置局部变量: %s = %s"
 
 #: libcore/vm/ASHandlers.cpp:2224
 #, c-format
 msgid "ActionCallFunction: %s is not an object"
-msgstr ""
+msgstr "ActionCallFunction: %s 不是一个对象"
 
 #: libcore/vm/ASHandlers.cpp:2241
 #, c-format
 msgid ""
 "Attempt to call a function with %u arguments while only %u are available on "
 "the stack."
-msgstr ""
+msgstr "试图调用一个函数带有 %u 个参数,但栈上只有 %u 个可用。"
 
 #: libcore/vm/ASHandlers.cpp:2303
 #, c-format
 msgid "---new object: %s"
-msgstr ""
+msgstr "---新建对象: %s"
 
 #: libcore/vm/ASHandlers.cpp:2313
 #, c-format
 msgid "ActionNew: '%s' is not a constructor"
-msgstr ""
+msgstr "ActionNew: '%s' 不是一个构造函数"
 
 #: libcore/vm/ASHandlers.cpp:2351
 msgid "The 'var whatever' syntax in timeline context is a no-op."
-msgstr ""
+msgstr "该 'var whatever' 语法在时间线上下文中不执行任何操作。"
 
 #: libcore/vm/ASHandlers.cpp:2439
 #, c-format
 msgid "Argument to TargetPath(%s) doesn't cast to a DisplayObject"
-msgstr ""
+msgstr "TargetPath(%s) 参数不能转换为一个 DisplayObject"
 
 #: libcore/vm/ASHandlers.cpp:2474
 #, c-format
 msgid ""
 "Top of stack doesn't evaluate to an object (%s) at ActionEnumerate execution"
-msgstr ""
+msgstr "在ActionEnumerate执行时栈顶计算结果不是一个对象(%s)"
 
 #: libcore/vm/ASHandlers.cpp:2581
 #, c-format
 msgid "getMember called against a value that does not cast to an as_object: %s"
-msgstr ""
+msgstr "对不能转换为一个 as_object 的值调用getMember:%s"
 
 #: libcore/vm/ASHandlers.cpp:2590
 #, c-format
 msgid " ActionGetMember: target: %s (object %p)"
-msgstr ""
+msgstr "ActionGetMember: 目标: %s (对象 %p)"
 
 #: libcore/vm/ASHandlers.cpp:2605
 #, c-format
 msgid "-- get_member %s.%s=%s"
-msgstr ""
+msgstr "-- get_member %s.%s=%s"
 
 #: libcore/vm/ASHandlers.cpp:2624
 #, c-format
 msgid ""
 "ActionSetMember: %s.%s=%s: member name evaluates to invalid (empty) string"
-msgstr ""
+msgstr "ActionSetMember: %s.%s=%s: 成员名计算结果是不合法(空)字符串"
 
 #: libcore/vm/ASHandlers.cpp:2633
 #, c-format
 msgid "-- set_member %s.%s=%s"
-msgstr ""
+msgstr "-- set_member %s.%s=%s"
 
 #: libcore/vm/ASHandlers.cpp:2645
 #, c-format
 msgid "-- set_member %s.%s=%s on invalid object!"
-msgstr ""
+msgstr "-- 在不合法对象上 set_member %s.%s=%s!"
 
 #: libcore/vm/ASHandlers.cpp:2706
 #, c-format
 msgid ""
 "Attempt to call a method with %u arguments while only %u are available on "
 "the stack."
-msgstr ""
+msgstr "试图调用一个方法时带 %u 个参数,但栈上只有 %u 可用。"
 
 #: libcore/vm/ASHandlers.cpp:2714
 #, c-format
 msgid " method name: %s"
-msgstr ""
+msgstr "方法名: %s"
 
 #: libcore/vm/ASHandlers.cpp:2715
 #, c-format
 msgid " method object/func: %s"
-msgstr ""
+msgstr "方法对象/函数: %s"
 
 #: libcore/vm/ASHandlers.cpp:2716
 #, c-format
 msgid " method nargs: %d"
-msgstr ""
+msgstr "方法参数: %d"
 
 #: libcore/vm/ASHandlers.cpp:2724
 #, c-format
 msgid "ActionCallMethod invoked with non-object object/func (%s)"
-msgstr ""
+msgstr "ActionCallMethod 调用时带非对象的对象/函数 (%s)"
 
 #: libcore/vm/ASHandlers.cpp:2758
 #, c-format
 msgid "ActionCallMethod: Can't find method %s of object %s"
-msgstr ""
+msgstr "ActionCallMethod: 无法找到方法 %s 在对象 %s 中"
 
 #: libcore/vm/ASHandlers.cpp:2770
 #, c-format
 msgid "ActionCallMethod: property %d of object %d is not callable (%s)"
-msgstr ""
+msgstr "ActionCallMethod: 属性 %d 在对象 %d 中是不可调用的 (%s)"
 
 #: libcore/vm/ASHandlers.cpp:2843
 #, c-format
 msgid ""
 "Attempt to call a constructor with %u arguments while only %u are available "
 "on the stack."
-msgstr ""
+msgstr "试图调用一个构造函数带 %u 个参数,但在堆上只有 %u 个可用。"
 
 #: libcore/vm/ASHandlers.cpp:2855
 msgid "On ActionNewMethod: no object found on stack on ActionMethod"
-msgstr ""
+msgstr "在 ActionNewMethod: ActionMethod的堆上没有找到对象"
 
 #: libcore/vm/ASHandlers.cpp:2872
 #, c-format
 msgid "ActionNewMethod: can't find method %s of object %s"
-msgstr ""
+msgstr "ActionNewMethod: 无法找到方法 %s 在对象 %s 中"
 
 #: libcore/vm/ASHandlers.cpp:2884
 msgid "ActionNewMethod: method name is undefined and object is not a function"
-msgstr ""
+msgstr "ActionNewMethod: 方法名未定义且对象不是一个函数"
 
 #: libcore/vm/ASHandlers.cpp:2923
 #, c-format
 msgid "-- %s instanceof %s (invalid args?)"
-msgstr ""
+msgstr "-- %s instanceof %s (不合法参数?)"
 
 #: libcore/vm/ASHandlers.cpp:2952
 #, c-format
 msgid "Top of stack not an object %s at ActionEnum2 execution"
-msgstr ""
+msgstr "在 ActionEnum2 运行时堆顶部不是一个对象 %s"
 
-#: libcore/vm/ASHandlers.cpp:3086
+#: libcore/vm/ASHandlers.cpp:3089
 #, c-format
 msgid "ActionExtends: Super is not an object (%s)"
-msgstr ""
+msgstr "ActionExtends: Super 不是一个对象 (%s)"
 
-#: libcore/vm/ASHandlers.cpp:3090
+#: libcore/vm/ASHandlers.cpp:3093
 #, c-format
 msgid "ActionExtends: Sub is not a function (%s)"
-msgstr ""
+msgstr "ActionExtends: Sub 不是一个函数 (%s)"
 
-#: libcore/vm/ASHandlers.cpp:3191
+#: libcore/vm/ASHandlers.cpp:3194
 #, c-format
 msgid ""
 "function2 code len (%u) overflows DOACTION tag boundaries (DOACTION tag len="
 "%d, function2 code offset=%d). Forcing code len to eat the whole buffer "
 "(would this work?)."
 msgstr ""
+"function2 代码长度 (%u) 超出 DOACTION 标签边界 (DOACTION tag len=%d, "
+"function2 code offset=%d)。 强制代码长度包括整个缓冲区 (将会工作吗?)。"
 
-#: libcore/vm/ASHandlers.cpp:3213
+#: libcore/vm/ASHandlers.cpp:3216
 #, c-format
 msgid "DefineFunction2: named function '%s' starts at PC %d"
-msgstr ""
+msgstr "DefineFunction2: 命名函数 '%s' 开始于 PC %d"
 
-#: libcore/vm/ASHandlers.cpp:3223
+#: libcore/vm/ASHandlers.cpp:3226
 #, c-format
 msgid "DefineFunction2: anonymous function starts at PC %d"
-msgstr ""
+msgstr "DefineFunction2: 匿名函数开始于 PC %d"
 
-#: libcore/vm/ASHandlers.cpp:3275
+#: libcore/vm/ASHandlers.cpp:3278
 #, c-format
 msgid ""
 "ActionTry: reserved:%x doFinally:%d doCatch:%d trySize:%u catchSize:%u "
 "finallySize:%u catchName:%s catchRegister:%u"
 msgstr ""
+"ActionTry: reserved:%x doFinally:%d doCatch:%d trySize:%u catchSize:%u "
+"finallySize:%u catchName:%s catchRegister:%u"
 
-#: libcore/vm/ASHandlers.cpp:3304
+#: libcore/vm/ASHandlers.cpp:3307
 msgid "ActionWith tag length != 2; skipping"
-msgstr ""
+msgstr "ActionWith 标签长度 != 2; 忽略"
 
-#: libcore/vm/ASHandlers.cpp:3314
+#: libcore/vm/ASHandlers.cpp:3317
 msgid "Empty with() block..."
-msgstr ""
+msgstr "空 with() 区块..."
 
-#: libcore/vm/ASHandlers.cpp:3325
+#: libcore/vm/ASHandlers.cpp:3328
 #, c-format
 msgid "with(%s) : first argument doesn't cast to an object!"
-msgstr ""
+msgstr "with(%s) : 第一个参数不能转换为一个对象!"
 
-#: libcore/vm/ASHandlers.cpp:3440
+#: libcore/vm/ASHandlers.cpp:3443
 #, c-format
 msgid "Unsupported action handler invoked, code at pc is %#x"
-msgstr ""
+msgstr "不支持的操作处理程序被调用,pc处代码是 %#x"
 
-#: libcore/vm/ASHandlers.cpp:3500
+#: libcore/vm/ASHandlers.cpp:3503
 msgid "Bogus empty GetUrl URL in SWF file, skipping"
-msgstr ""
+msgstr "假空白 GetUrl URL 在 SWF 文件中, 忽略"
 
-#: libcore/vm/ASHandlers.cpp:3512
+#: libcore/vm/ASHandlers.cpp:3515
 msgid ""
 "Bogus GetUrl2 send vars method in SWF file (both GET and POST requested). "
 "Using GET"
-msgstr ""
+msgstr "在SWF文件中假的 GetUrl2 发送变量方法 (有GET和POST请求)。使用GET"
 
-#: libcore/vm/ASHandlers.cpp:3571
+#: libcore/vm/ASHandlers.cpp:3574
 #, c-format
 msgid "getURL: target %s not found"
-msgstr ""
+msgstr "getURL: 目标 %s 未找到"
 
-#: libcore/vm/ASHandlers.cpp:3577
+#: libcore/vm/ASHandlers.cpp:3580
 #, c-format
 msgid "getURL: target %s is not a sprite"
-msgstr ""
+msgstr "getURL: 目标 %s 不是一个精灵"
 
-#: libcore/vm/ASHandlers.cpp:3596
+#: libcore/vm/ASHandlers.cpp:3599
 msgid "commonGetURL: current target is undefined"
-msgstr ""
+msgstr "commonGetURL: 当前目标未定义"
 
-#: libcore/vm/ASHandlers.cpp:3616
+#: libcore/vm/ASHandlers.cpp:3619
 #, c-format
 msgid "Unknown loadMovie target: %s"
-msgstr ""
+msgstr "未知的 loadMovie 目标: %s"
 
-#: libcore/vm/ASHandlers.cpp:3630
-#, c-format
+#: libcore/vm/ASHandlers.cpp:3633
+#, fuzzy, c-format
 msgid "get URL: target %s is not a sprite"
-msgstr ""
+msgstr "getURL: 目标 %s 不是一个精灵"
 
-#: libcore/vm/ASHandlers.cpp:3695
+#: libcore/vm/ASHandlers.cpp:3698
 #, c-format
 msgid "Couldn't find movie \"%s\" to set target to! Setting target to NULL..."
-msgstr ""
-
-#: libcore/vm/CallStack.cpp:64
-#, c-format
-msgid "-------------- local register[%d] = '%s'"
-msgstr ""
+msgstr "无法找到设置的目标电影 \"%s\" ! 设置目标为空..."
 
 #: libcore/vm/Machine.cpp:895
 #, c-format
 msgid "Can't push a null value onto the scope stack (%s)."
-msgstr ""
+msgstr "不能推入一个空值到该范围的栈上 (%s)。"
 
 #: libcore/vm/Machine.cpp:1438
 #, c-format
 msgid ""
 "CALLPROP: Can't call a method of a value that doesn't cast to an object (%s)."
-msgstr ""
+msgstr "CALLPROP: 不能调用一个不能转换为对象的值的方法(%s)。"
 
 #: libcore/vm/Machine.cpp:1455
 #, c-format
 msgid "CALLPROP: Property '%s' of object '%s' is '%s', cannot call as method"
-msgstr ""
+msgstr "CALLPROP: 属性 '%s' 在对象 '%s' 上 是 '%s', 不能作为一个方法调用"
 
 #: libcore/vm/Machine.cpp:1983
 #, c-format
 msgid "GETPROPERTY: Looking for property %s of object %s"
-msgstr ""
+msgstr "GETPROPERTY: 查找属性 %s 在对象 %s 上"
 
 #: libcore/vm/Machine.cpp:1987
 #, c-format
 msgid "GETPROPERTY: expecting object on stack, got %s."
-msgstr ""
+msgstr "GETPROPERTY: 预计对象在栈上,实际是 %s。"
 
 #: libcore/vm/Machine.cpp:2122
 #, c-format
 msgid "ABC_ACTION_SETSLOT: unexpected non-object stack value %s"
-msgstr ""
+msgstr "ABC_ACTION_SETSLOT: 意外的非对象栈值 %s"
 
 #: libcore/vm/ActionExec.cpp:147
 #, c-format
@@ -6024,45 +6564,50 @@ msgid ""
 "at ActionExec operator() start, pc=%d, stop_pc=%d, code.size=%d, func=%d, "
 "codeVersion=%d"
 msgstr ""
+"在 ActionExec operator() 的开始, pc=%d, stop_pc=%d, code.size=%d, func=%d, "
+"codeVersion=%d"
 
 #: libcore/vm/ActionExec.cpp:152 libcore/vm/ActionExec.cpp:285
 #: libcore/vm/ActionExec.cpp:296
 #, c-format
 msgid "%s"
-msgstr ""
+msgstr "%s"
 
 #: libcore/vm/ActionExec.cpp:222
 #, c-format
 msgid "PC:%d - EX: %s"
-msgstr ""
+msgstr "PC:%d - EX: %s"
 
 #: libcore/vm/ActionExec.cpp:239
 #, c-format
 msgid ""
 "Length %u (%d) of action tag id %u at pc %d overflows actions buffer size %d"
-msgstr ""
+msgstr "长度 %u (%d) 在操作标签 id %u 中位于 pc %d 处超出操作缓冲区大小 %d"
 
 #: libcore/vm/ActionExec.cpp:292
 #, c-format
 msgid "After execution: PC %d, next PC %d, stack follows"
-msgstr ""
+msgstr "执行后: PC %d, 下一条 PC %d, 栈如下"
 
 #: libcore/vm/ActionExec.cpp:306
 msgid ""
 "Time exceeded (%4% secs) while executing code in %1% between pc %2% and %3%. "
 "Disable scripts?"
 msgstr ""
+"时间超出 (%4% secs) 当在 %1% 中执行代码(位于 pc %2% 和 %3% 之间)。禁用脚本"
+"吗?"
 
 #: libcore/vm/ActionExec.cpp:541
 msgid ""
 "Stack smashed (ActionScript compiler bug, or obfuscated SWF). Taking no "
 "action to fix (as expected)."
 msgstr ""
+"堆栈被毁坏(ActionScript编译器错误或混淆后的SWF)。不会修复(如预期)。"
 
 #: libcore/vm/ActionExec.cpp:545
 #, c-format
 msgid "%d elements left on the stack after block execution."
-msgstr ""
+msgstr "代码块执行后 %d 的元素留在栈上。"
 
 #: libcore/vm/ActionExec.cpp:564
 #, c-format
@@ -6070,1912 +6615,1450 @@ msgid ""
 "End of DoAction block hit while skipping %d action tags (pc:%d, stop_pc:%d) "
 "(WaitForFrame, probably)"
 msgstr ""
+"到达DoAction结束代码块,忽略 %d 操作标签 (pc:%d, stop_pc:%d) (也许是"
+"WaitForFrame)"
 
 #: libcore/vm/ActionExec.cpp:674
 #, c-format
 msgid "Jump outside DoAction tag requested (offset %d before tag start)"
-msgstr ""
+msgstr "跳出已请求的DoAction标签(标签开始前偏移 %d )"
 
-#: libcore/vm/VM.cpp:222
+#: libcore/MovieLoader.cpp:260
 #, c-format
-msgid "-------------- global register[%d] = '%s'"
-msgstr ""
+msgid "Can't create Movie instance for definition loaded from %s"
+msgstr "无法为从 %s 加载的定义创建电影实例"
 
-#: libcore/vm/VM.cpp:250
+#: libcore/ClassHierarchy.cpp:85
 #, c-format
-msgid "Recursion limit reached (%u)"
-msgstr ""
+msgid "Native class %s is not an object after initialization (%s)"
+msgstr "初始化后原生类 %s 不是一个对象(%s)"
 
-#: libcore/Button.cpp:477
+#: libcore/ClassHierarchy.cpp:92
 #, c-format
-msgid "Unhandled button event %s"
-msgstr ""
+msgid "Native class %s is not found after initialization"
+msgstr "初始化后未发现原生类 %s "
 
-#: libcore/Button.cpp:788
-msgid "Button placed with an init object. This will be ignored."
-msgstr ""
+#: libcore/RGBA.cpp:47
+msgid "Failed to convert string to RGBA value! This is a Gnash bug"
+msgstr "转换字符串为RGBA值失败!这是一个Gnash的错误"
 
-#: libcore/Button.cpp:956
-msgid "Enabled"
-msgstr ""
+#: libcore/SWFStream.cpp:475
+msgid "Attempt to seek past the end of an opened tag"
+msgstr "试图定位到一个打开标签的结束之后"
 
-#: libcore/Button.cpp:961
-msgid "Button state"
-msgstr ""
+#: libcore/SWFStream.cpp:483
+msgid "Attempt to seek before start of an opened tag"
+msgstr "试图定位到一个打开标签的开始之前"
 
-#: libcore/Button.cpp:965
-msgid "Action characters"
-msgstr ""
+#: libcore/SWFStream.cpp:496
+msgid "Unexpected end of stream"
+msgstr "流意外结束"
 
-#: libcore/Button.cpp:994
-msgid "Button.blendMode"
+#: libcore/SWFStream.cpp:564
+#, c-format
+msgid ""
+"Tag %d starting at offset %d is advertised to end at offset %d, which is "
+"after end of previously opened tag starting at offset %d and ending at "
+"offset %d. Making it end where container tag ends."
 msgstr ""
+"标签 %d 的开始偏移量 %d 标明距离结束偏移 %d, 它在前一个开始偏移为 %d,结束偏"
+"移为 %d 的打开标签结束后。在包含标签结束处让它结束。"
 
-#: libcore/Button.cpp:1003
-msgid "Button.cacheAsBitmap"
-msgstr ""
+#: libcore/SWFStream.cpp:581
+#, c-format
+msgid "SWF[%lu]: tag type = %d, tag length = %d, end tag = %lu"
+msgstr "SWF[%lu]: 标签类型 = %d, 标签长度 = %d, 结束标签 = %lu"
 
-#: libcore/Button.cpp:1012
-msgid "Button.filters"
-msgstr ""
+#: libcore/SWFStream.cpp:602
+msgid "Could not seek to reported end of tag"
+msgstr "无法定位到标签结束"
 
-#: libcore/Button.cpp:1021
-msgid "Button.scale9Grid"
-msgstr ""
+#: libcore/SWFStream.cpp:617
+#, c-format
+msgid "SWFStream::consumeInput: underlying stream couldn't go_to_end: %s"
+msgstr "SWFStream::consumeInput: 相关的流不能到结束: %s"
 
-#: libcore/Button.cpp:1030
-msgid "Button.getTabIndex"
-msgstr ""
+#: libcore/DisplayObject.cpp:124
+#, c-format
+msgid "loadMovie against a %s DisplayObject"
+msgstr "loadMovie 邻近的一个 %s DisplayObject"
 
-#: libcore/Button.cpp:1039
-msgid "Button.setTabIndex"
-msgstr ""
+#: libcore/DisplayObject.cpp:261
+msgid "blendMode"
+msgstr "blendMode"
 
-#: libcore/as_environment.cpp:182
+#: libcore/DisplayObject.cpp:371
 #, c-format
-msgid "invalid path '%s' (p=next_slash=%s)"
-msgstr ""
+msgid "Setting _height=%g of DisplayObject %s (%s)"
+msgstr "设置 _height=%g 在 DisplayObject %s (%s) 上"
 
-#: libcore/as_environment.cpp:193
-#, c-format
-msgid "invalid path '%s' (dot not allowed after having seen a slash)"
-msgstr ""
+#: libcore/DisplayObject.cpp:799
+msgid "yes"
+msgstr "是"
 
-#: libcore/as_environment.cpp:332
-#, c-format
-msgid "-------------- %s = %s"
-msgstr ""
+#: libcore/DisplayObject.cpp:800
+msgid "no"
+msgstr "否"
 
-#: libcore/as_environment.cpp:346
-#, c-format
-msgid "Path target '%s' not found while setting %s=%s"
-msgstr ""
+#: libcore/DisplayObject.cpp:806
+msgid "Depth"
+msgstr "深度"
 
-#: libcore/as_environment.cpp:445
-#, c-format
-msgid "Won't set invalid raw variable name: %s"
-msgstr ""
+#: libcore/DisplayObject.cpp:812
+msgid "Ratio"
+msgstr "比率"
 
-#: libcore/as_environment.cpp:474
-#, c-format
-msgid ""
-"as_environment::setVariableRaw(%s, %s): neither current target nor original "
-"target are defined, can't set the variable"
-msgstr ""
+#: libcore/DisplayObject.cpp:822
+msgid "Clipping depth"
+msgstr "裁剪深度"
 
-#: libcore/as_environment.cpp:486
-#, c-format
-msgid "Won't get invalid raw variable name: %s"
-msgstr ""
+#: libcore/DisplayObject.cpp:827
+msgid "Dimensions"
+msgstr "尺寸"
 
-#: libcore/as_environment.cpp:567
-#, c-format
-msgid "reference to non-existent variable '%s'"
-msgstr ""
+#: libcore/DisplayObject.cpp:829
+msgid "Dynamic"
+msgstr "动态"
 
-#: libcore/MovieClip.cpp:621
-#, c-format
-msgid "call_frame('%s') -- invalid frame"
-msgstr ""
+#: libcore/DisplayObject.cpp:830
+msgid "Mask"
+msgstr "面罩"
 
-#: libcore/MovieClip.cpp:667
-msgid "Can't clone root of the movie"
-msgstr ""
+#: libcore/DisplayObject.cpp:831
+msgid "Destroyed"
+msgstr "销毁"
 
-#: libcore/MovieClip.cpp:675
-#, c-format
-msgid "%s parent is not a movieclip, can't clone"
-msgstr ""
+#: libcore/DisplayObject.cpp:833
+msgid "Unloaded"
+msgstr "卸载"
 
-#: libcore/MovieClip.cpp:852
-msgid "MovieClip.unloadMovie()"
-msgstr ""
+#: libcore/DisplayObject.cpp:837
+msgid "Blend mode"
+msgstr "混合模式"
 
-#: libcore/MovieClip.cpp:885
-#, c-format
-msgid "advance_movieclip: no frames loaded for movieclip/movie %s"
-msgstr ""
+#: libcore/DisplayObject.cpp:840
+msgid "Invalidated"
+msgstr "失效"
 
-#: libcore/MovieClip.cpp:935
-msgid ""
-"Flushing orphaned tags in movieclip %1%. _currentFrame:%2%, _hasLooped:%3%, "
-"frame_count:%4%"
-msgstr ""
+#: libcore/DisplayObject.cpp:842
+msgid "Child invalidated"
+msgstr "子节点失效"
 
-#: libcore/MovieClip.cpp:1046
+#: libcore/DisplayObject.cpp:863 libcore/DisplayObject.cpp:1567
 #, c-format
-msgid "Executing %d tags in frame %d/%d of movieclip %s"
-msgstr ""
+msgid "Attempt to set property to %s, refused"
+msgstr "试图设置属性为 %s,被拒绝"
 
-#: libcore/MovieClip.cpp:1084 libcore/MovieClip.cpp:1125
+#: libcore/DisplayObject.cpp:1098
 #, c-format
-msgid ""
-"Target frame of a gotoFrame(%d) was never loaded, although frame count in "
-"header (%d) said we should have found it"
-msgstr ""
+msgid "Attempt to set %s._y to %s (evaluating to number %g) refused"
+msgstr "试图设置 %s._y 为 %s (计算结果为数字 %g) 被拒绝"
 
-#: libcore/MovieClip.cpp:1116
+#: libcore/DisplayObject.cpp:1129
 #, c-format
-msgid ""
-"GotoFrame(%d) targets a yet to be loaded frame (%d). We'll wait for it but a "
-"more correct form is explicitly using WaitForFrame instead"
-msgstr ""
+msgid "Attempt to set %s._x to %s (evaluating to number %g) refused"
+msgstr "试图设置 %s._x 为 %s (计算结果为数字 %g) 被拒绝"
 
-#: libcore/MovieClip.cpp:1189
+#: libcore/DisplayObject.cpp:1158
 #, c-format
-msgid "MovieClip::goto_labeled_frame('%s') unknown label"
-msgstr ""
+msgid "Attempt to set %s._xscale to %s (evaluating to number %g) refused"
+msgstr "试图设置 %s. _xscale 为 %s (计算结果为数字 %g) 被拒绝"
 
-#: libcore/MovieClip.cpp:1248
+#: libcore/DisplayObject.cpp:1184
 #, c-format
-msgid "MovieClip::add_display_object(): unknown cid = %d"
-msgstr ""
+msgid "Attempt to set %s._yscale to %s (evaluating to number %g) refused"
+msgstr "试图设置 %s. _yscale 为 %s (计算结果为数字 %g) 被拒绝"
 
-#: libcore/MovieClip.cpp:1318
+#: libcore/DisplayObject.cpp:1220
 #, c-format
-msgid "movieclip::replace_display_object(): unknown cid = %d"
-msgstr ""
+msgid "Attempt to set %s._visible to %s (evaluating to number %g) refused"
+msgstr "试图设置 %s. _visible 为 %s (计算结果为数字 %g) 被拒绝"
 
-#: libcore/MovieClip.cpp:1327
+#: libcore/DisplayObject.cpp:1249
 #, c-format
-msgid ""
-"MovieClip::replace_display_object: could not find any DisplayObject at depth "
-"%d"
-msgstr ""
+msgid "Attempt to set %s._alpha to %s (evaluating to number %g) refused"
+msgstr "试图设置 %s. _alpha 为 %s (计算结果为数字 %g) 被拒绝"
 
-#: libcore/MovieClip.cpp:1905
+#: libcore/DisplayObject.cpp:1315
 #, c-format
-msgid "Could not load variables from %s"
-msgstr ""
+msgid "Attempt to set %s._rotation to %s (evaluating to number %g) refused"
+msgstr "试图设置 %s. _rotation 为 %s (计算结果为数字 %g) 被拒绝"
 
-#: libcore/MovieClip.cpp:1958
-#, c-format
-msgid ""
-"removeMovieClip(%s): movieclip depth (%d) out of the 'dynamic' zone "
-"[0..1048575], won't remove"
-msgstr ""
+#: libcore/DisplayObject.cpp:1355
+msgid "_soundbuftime setting"
+msgstr "_soundbuftime 设置"
 
-#: libcore/parser/TypesParser.cpp:145
+#: libcore/DisplayObject.cpp:1379
 #, c-format
-msgid "Invalid rectangle: minx=%g maxx=%g miny=%g maxy=%g"
-msgstr ""
+msgid "Setting _width=%g of DisplayObject %s (%s)"
+msgstr "设置 _width=%g 在 DisplayObject %s (%s) 中"
 
-#: libcore/parser/TypesParser.cpp:161
-#, c-format
-msgid "  FillStyle read type = 0x%X"
-msgstr ""
-
-#: libcore/parser/TypesParser.cpp:207
-#, c-format
-msgid "  gradients count: %d"
-msgstr ""
-
-#: libcore/parser/TypesParser.cpp:212
-msgid "No gradients!"
-msgstr ""
-
-#: libcore/parser/TypesParser.cpp:266
-msgid "Illegal spread mode in gradient definition."
-msgstr ""
-
-#: libcore/parser/TypesParser.cpp:283
-msgid "Illegal interpolation mode in gradient definition."
-msgstr ""
-
-#: libcore/parser/TypesParser.cpp:408
-#, c-format
-msgid "  color: %s"
-msgstr ""
+#: libcore/DisplayObject.cpp:1389 libcore/DisplayObject.cpp:1407
+msgid "_focusrect"
+msgstr "_focusrect"
 
-#: libcore/parser/sprite_definition.cpp:64
-#, c-format
-msgid "  frames = %d"
-msgstr ""
+#: libcore/AMFConverter.cpp:98
+msgid "Problems serializing an object's member"
+msgstr "序列化一个对象的成员出错"
 
-#: libcore/parser/sprite_definition.cpp:77
+#: libcore/AMFConverter.cpp:212
 #, c-format
-msgid ""
-"%d frames advertised in header, but only %d SHOWFRAME tags found in define "
-"sprite."
-msgstr ""
+msgid "Problems serializing strict array member %d=%s"
+msgstr "序列化限制数据的成员 %d=%s 出错"
 
-#: libcore/parser/sprite_definition.cpp:87
-msgid "  -- sprite END --"
-msgstr ""
+#: libcore/AMFConverter.cpp:242
+msgid "Could not serialize object"
+msgstr "无法序列化对象"
 
-#: libcore/parser/filter_factory.cpp:54
+#: libcore/AMFConverter.cpp:319
 #, c-format
-msgid "   number of filters: %d"
-msgstr ""
+msgid "Unknown AMF type %s! Cannot proceed"
+msgstr "未知的 AMF 类型 %s! 不能处理"
 
-#: libcore/parser/filter_factory.cpp:92
+#: libcore/AMFConverter.cpp:376
 #, c-format
-msgid "Invalid filter type %d."
-msgstr ""
+msgid "AMF parsing error: %s"
+msgstr "AMF 解析错误: %s"
 
-#: libcore/parser/filter_factory.cpp:102
-#, c-format
-msgid "Filter %d could not read."
-msgstr ""
+#: libcore/AMFConverter.cpp:407
+msgid "Read past _end of buffer for strict array length"
+msgstr "读取传入的限制数组长度的缓冲区结束"
 
-#: libcore/parser/filter_factory.cpp:134
-#, c-format
-msgid "   DropShadowFilter: blurX=%f blurY=%f"
-msgstr ""
+#: libcore/AMFConverter.cpp:425
+msgid "Unable to read array elements"
+msgstr "不能读取数组元素"
 
-#: libcore/parser/filter_factory.cpp:153
-#, c-format
-msgid "   BlurFilter: blurX=%f blurY=%f quality=%d"
-msgstr ""
+#: libcore/AMFConverter.cpp:442
+msgid "Read past _end of buffer for array length"
+msgstr "读取传入的数组长度的缓冲区结束"
 
-#: libcore/parser/filter_factory.cpp:180
-msgid "   GlowFilter "
-msgstr ""
+#: libcore/AMFConverter.cpp:468 libcore/AMFConverter.cpp:489
+msgid "MALFORMED AMF: premature _end of ECMA_ARRAY block"
+msgstr "错误格式的AMF:过早的 ECMA_ARRAY 块的结束符"
 
-#: libcore/parser/filter_factory.cpp:218
-msgid "   BevelFilter "
-msgstr ""
+#: libcore/AMFConverter.cpp:480
+msgid "MALFORMED AMF: empty member name not followed by OBJECT_END_AMF0 byte"
+msgstr "错误格式的AMF: 空成员名后没有 OBJECT_END_AMF0 字节"
 
-#: libcore/parser/filter_factory.cpp:265
-msgid "   GradientGlowFilter "
-msgstr ""
+#: libcore/AMFConverter.cpp:504
+msgid "Unable to read array element"
+msgstr "不能读取数组元素"
 
-#: libcore/parser/filter_factory.cpp:301
-msgid "   ConvolutionFilter "
-msgstr ""
+#: libcore/AMFConverter.cpp:528
+msgid "Could not read object property name"
+msgstr "无法读取对象属性名称"
 
-#: libcore/parser/filter_factory.cpp:318
-msgid "   ColorMatrixFilter: "
-msgstr ""
+#: libcore/AMFConverter.cpp:539
+msgid "AMF buffer terminated just before object _end byte. continuing anyway."
+msgstr "AMF缓冲在结束字节之前终止。继续下去。"
 
-#: libcore/parser/filter_factory.cpp:319 libcore/parser/filter_factory.cpp:322
-#: libcore/parser/filter_factory.cpp:325 libcore/parser/filter_factory.cpp:328
+#: libcore/AMFConverter.cpp:566
 #, c-format
-msgid "     %g, %g, %g, %g, %g"
-msgstr ""
+msgid "readAMF0: invalid reference to object %d (%d known objects)"
+msgstr "readAMF0: 不合法的对象%d引用(%d 已知对象) "
 
-#: libcore/parser/filter_factory.cpp:375
-msgid "   GradientBevelFilter "
-msgstr ""
+#: libcore/AMFConverter.cpp:597
+msgid ""
+"Date type encoded timezone info %1%, even though this field should not be "
+"used."
+msgstr "日期型编码的时区信息%1%,虽然这一字段不应该使用。"
 
-#: libcore/parser/action_buffer.cpp:57
+#: libcore/as_value.cpp:768
 #, c-format
-msgid "Empty action buffer starting at offset %lu"
-msgstr ""
+msgid "serialization of as_value of type %d"
+msgstr "类型 %d 的 as_value 序列化"
 
-#: libcore/parser/action_buffer.cpp:94
+#: libcore/DisplayList.cpp:305
 #, c-format
-msgid "Action buffer starting at offset %lu doesn't end with an END tag"
-msgstr ""
+msgid "moveDisplayObject() -- can't find object at depth %d"
+msgstr "moveDisplayObject() -- 不能在深度 %d 找到对象"
 
-#: libcore/parser/action_buffer.cpp:132
-msgid "action buffer dict length exceeded"
-msgstr ""
+#: libcore/DisplayList.cpp:312
+msgid "Request to move an unloaded DisplayObject"
+msgstr "请求移动一个已卸载的 DisplayObject"
 
-#: libcore/parser/action_buffer.cpp:614
-msgid "Native double floating point format not recognised"
-msgstr ""
+#: libcore/DisplayList.cpp:380
+#, c-format
+msgid "%s.swapDepth(%d) : ignored call with target depth less then %d"
+msgstr "%s.swapDepth(%d) : 忽略带有深度小于 %d 目标的调用"
 
-#: libcore/parser/SWFParser.cpp:90
-msgid "SHOWFRAME tag"
+#: libcore/DisplayList.cpp:404
+msgid ""
+"First argument to DisplayList::swapDepth() is NOT a DisplayObject in the "
+"list. Call ignored."
 msgstr ""
+"DisplayList::swapDepth() 的第一个参数不是一个列表中的DisplayObject。调用被忽"
+"略。"
 
-#: libcore/parser/SWFParser.cpp:100
+#: libcore/DisplayList.cpp:875
 #, c-format
 msgid ""
-"Encountered unknown tag %d. These usually store creation tool data and do "
-"not affect playback"
+"mergeDisplayList: DisplayObject %s (%s at depth %d [%d]) about to be "
+"discarded in given display list is not marked as unloaded and not found in "
+"the merged current displaylist"
 msgstr ""
+"mergeDisplayList: 在给定的显示列表中被丢弃的 DisplayObject %s (%s 在深度 %d "
+"[%d]) 未标记为卸载,并且没有在合并后的当前显示列表中被找到"
 
-#: libcore/parser/SWFParser.cpp:105
-#, c-format
-msgid "tag dump follows: %s"
-msgstr ""
+#: libcore/LoadVariablesThread.cpp:75
+#, fuzzy, c-format
+msgid "%s to UTF8 conversion in MovieClip.loadVariables input parsing"
+msgstr "MovieClip中 %s 到UTF8的转换。loadVariables输入解析"
 
-#: libcore/parser/SWFParser.cpp:113
+#: libcore/LoadVariablesThread.cpp:124
 #, c-format
-msgid "Parsing exception: %s"
-msgstr ""
+msgid "Stream couldn't seek to end: %s"
+msgstr "无法定位到流结束:%s"
 
-#: libcore/parser/SWFMovieDefinition.cpp:255
+#: libcore/LoadVariablesThread.cpp:129
 #, c-format
-msgid "Add sound sample %d assigning id %d"
-msgstr ""
-
-#: libcore/parser/SWFMovieDefinition.cpp:284
 msgid ""
-"gnash::SWFMovieDefinition::read() -- file does not start with a SWF header"
-msgstr ""
+"Size of 'variables' stream advertised to be %d bytes, but turned out to be "
+"%d bytes."
+msgstr "“可变”流的大小标明是 %d 字节,但实际上是 %d 字节。"
 
-#: libcore/parser/SWFMovieDefinition.cpp:291
+#: libcore/Button.cpp:477
 #, c-format
-msgid "version: %d, file_length: %d"
-msgstr ""
+msgid "Unhandled button event %s"
+msgstr "未处理的按钮事件 %s"
 
-#: libcore/parser/SWFMovieDefinition.cpp:296
-msgid ""
-"SWFMovieDefinition::read(): unable to read zipped SWF data; gnash was "
-"compiled without zlib support"
-msgstr ""
+#: libcore/Button.cpp:789
+msgid "Button placed with an init object. This will be ignored."
+msgstr "用一个初始化的对象来放置按钮。将被忽略。"
 
-#: libcore/parser/SWFMovieDefinition.cpp:301
-msgid "file is compressed"
-msgstr ""
+#: libcore/Button.cpp:957
+msgid "Enabled"
+msgstr "启用"
 
-#: libcore/parser/SWFMovieDefinition.cpp:320
-msgid "non-finite movie bounds"
-msgstr ""
+#: libcore/Button.cpp:962
+msgid "Button state"
+msgstr "按钮状态"
 
-#: libcore/parser/SWFMovieDefinition.cpp:336
-#, c-format
-msgid "frame size = %s, frame rate = %f, frames = %d"
-msgstr ""
+#: libcore/Button.cpp:966
+msgid "Action characters"
+msgstr "动作人物"
 
-#: libcore/parser/SWFMovieDefinition.cpp:360
-msgid "Could not start loading thread"
-msgstr ""
+#: libcore/Button.cpp:995
+msgid "Button.blendMode"
+msgstr "Button.blendMode"
 
-#: libcore/parser/SWFMovieDefinition.cpp:431
-#, c-format
-msgid "Could not find char %d, dump is: %s"
-msgstr ""
+#: libcore/Button.cpp:1004
+msgid "Button.cacheAsBitmap"
+msgstr "Button.cacheAsBitmap"
 
-#: libcore/parser/SWFMovieDefinition.cpp:490
-msgid "Error while parsing SWF stream."
-msgstr ""
+#: libcore/Button.cpp:1013
+msgid "Button.filters"
+msgstr "Button.filters"
 
-#: libcore/parser/SWFMovieDefinition.cpp:502
-#, c-format
-msgid "%d control tags are NOT followed by a SHOWFRAME tag"
-msgstr ""
+#: libcore/Button.cpp:1022
+msgid "Button.scale9Grid"
+msgstr "Button.scale9Grid"
 
-#: libcore/parser/SWFMovieDefinition.cpp:510
-#, c-format
-msgid ""
-"%d frames advertised in header, but only %d SHOWFRAME tags found in stream. "
-"Pretending we loaded all advertised frames"
-msgstr ""
+#: libcore/Button.cpp:1031
+msgid "Button.getTabIndex"
+msgstr "Button.getTabIndex"
 
-#: libcore/parser/SWFMovieDefinition.cpp:538
-#, c-format
-msgid ""
-"number of SHOWFRAME tags in SWF stream '%s' (%d) exceeds the advertised "
-"number in header (%d)."
-msgstr ""
+#: libcore/Button.cpp:1040
+msgid "Button.setTabIndex"
+msgstr "Button.setTabIndex"
 
-#: libcore/parser/SWFMovieDefinition.cpp:605
-msgid "More than one JPEGTABLES tag found: not resetting JPEG loader"
-msgstr ""
+#: libcore/DisplayObjectContainer.cpp:74
+msgid "Children"
+msgstr "孩子们"
 
-#: libcore/parser/SWFMovieDefinition.cpp:745
+#: libcore/PropertyList.cpp:274
 #, c-format
-msgid "import error: could not find resource '%s' in movie '%s'"
-msgstr ""
+msgid "Property %s already exists, can't addDestructiveGetter"
+msgstr "属性 %s 已经存在,不能 addDestructiveGetter"
 
-#: libcore/Video.cpp:57
-msgid "No Media handler registered, won't be able to decode embedded video"
-msgstr ""
+#: libdevice/rawfb/RawFBDevice.cpp:63
+msgid "Couldn't initialize RAWFB device!"
+msgstr "无法初始化 RAWFB 设备!"
 
-#: libcore/Video.cpp:69
-#, c-format
-msgid "Could not create Video Decoder: %s"
-msgstr ""
+#: libdevice/rawfb/RawFBDevice.cpp:95
+msgid "Freeing framebuffer memory"
+msgstr "释放帧缓冲内存"
 
-#: libcore/Video.cpp:138
-msgid "No Video info in video definition"
-msgstr ""
+#: libdevice/rawfb/RawFBDevice.cpp:100
+msgid "Freeing offscreen buffer"
+msgstr "释放离屏缓冲"
 
-#: libcore/as_function.cpp:94
+#: libdevice/rawfb/RawFBDevice.cpp:119
 #, c-format
-msgid "Native function called as constructor threw exception: %s"
-msgstr ""
+msgid "WARNING: Using %s as a fake framebuffer!"
+msgstr "警告:正在使用假的帧缓冲  %s!"
 
-#: libcore/movie_root.cpp:238
+#: libdevice/rawfb/RawFBDevice.cpp:138
 #, c-format
-msgid "ActionParserException thrown during setRootMovie: %s"
-msgstr ""
+msgid "Could not open framebuffer device: %s"
+msgstr "无法打开帧缓冲设备:%s"
 
-#: libcore/movie_root.cpp:253
+#: libdevice/rawfb/RawFBDevice.cpp:141
 #, c-format
-msgid "No user interface registered, assuming 'Yes' answer to question: %s"
-msgstr ""
+msgid "Opened framebuffer device: %s"
+msgstr "已打开的帧缓冲设备: %s"
 
-#: libcore/movie_root.cpp:402 libcore/movie_root.cpp:412
+#: libdevice/rawfb/RawFBDevice.cpp:177
+msgid "LUT8: Setting up colormap"
+msgstr "LUT8:设置色彩对照表"
+
+#: libdevice/rawfb/RawFBDevice.cpp:202
 #, c-format
-msgid ""
-"%s.swapDepth(%d): movie has a depth (%d) below static depth zone (%d), won't "
-"swap its depth"
-msgstr ""
+msgid "LUT8: Error setting colormap: %s"
+msgstr "LUT8:设置色彩对照表错误: %s"
 
-#: libcore/movie_root.cpp:470
-msgid ""
-"movie_root::dropLevel called against a movie not found in the levels "
-"container"
-msgstr ""
+#: libdevice/rawfb/RawFBDevice.cpp:407
+msgid "Couldn't write to the fake cmap!"
+msgstr "无法写入假的色彩对照表!"
 
-#: libcore/movie_root.cpp:477
-msgid "Original root movie can't be removed"
-msgstr ""
+#: libdevice/rawfb/RawFBDevice.cpp:411
+msgid "Couldn't write to the fake cmap, unknown type!"
+msgstr "无法写入假的色彩对照表,未知类型!"
 
-#: libcore/movie_root.cpp:496
-#, c-format
-msgid ""
-"TESTME: loadMovie called on level %d which is not available at load time, "
-"skipped placement for now"
-msgstr ""
+#: libdevice/rawfb/RawFBDevice.cpp:425
+msgid "Signaled fbe to reload it's colormap."
+msgstr "通知 fbe 重新加载它的色彩对照表。"
 
-#: libcore/movie_root.cpp:627
+#: libdevice/rawfb/RawFBDevice.cpp:432
 #, c-format
-msgid "ActionLimits hit notifying key listeners: %s."
-msgstr ""
-
-#: libcore/movie_root.cpp:864
-msgid ""
-"movie_root tracking a streaming sound, but the sound handler is not "
-"streaming!"
-msgstr ""
-
-#: libcore/movie_root.cpp:896
-msgid ""
-"Time exceeded (%1% secs) while attempting to catch up to streaming sound. "
-"Give up on synchronization?"
-msgstr ""
+msgid "fakefb_ioctl(%d)"
+msgstr "fakefb_ioctl(%d)"
 
-#: libcore/movie_root.cpp:948
+#: libdevice/vaapi/VaapiImage.cpp:38
 #, c-format
-msgid "Buffer overread during advance: %s"
-msgstr ""
+msgid "VaapiImage::VaapiImage(): format '%s'\n"
+msgstr "VaapiImage::VaapiImage(): format '%s'\n"
 
-#: libcore/movie_root.cpp:1066
+#: libdevice/vaapi/VaapiImage.cpp:82
 #, c-format
-msgid "ActionLimits hit notifying mouse events: %s."
-msgstr ""
+msgid "  image 0x%08x, format '%s'\n"
+msgstr "图像 0x%08x, 格式 '%s'\n"
 
-#: libcore/movie_root.cpp:1558
+#: libdevice/vaapi/VaapiSurfaceGLX.cpp:205
 #, c-format
-msgid "Couldn't process ExternalInterface Call %s"
-msgstr ""
-
-#: libcore/movie_root.cpp:1603
-msgid "ExternalInterface::GotoFrame()"
-msgstr ""
-
-#: libcore/movie_root.cpp:1611
-msgid "ExternalInterface::LoadMovie()"
-msgstr ""
+msgid "  -> surface %p\n"
+msgstr "-> surface %p\n"
 
-#: libcore/movie_root.cpp:1676 gui/Player.cpp:713
+#: libdevice/vaapi/VaapiSurfaceGLX.cpp:212
 #, c-format
-msgid "Could not write to user-provided host requests fd %d: %s"
-msgstr "无法写入用户提供的主机请求文件描述符 %d:%s"
+msgid "VaapiSurface::~VaapiSurface(): surface %p\n"
+msgstr "VaapiSurface::~VaapiSurface(): surface %p\n"
 
-#: libcore/movie_root.cpp:1837 libcore/movie_root.cpp:1869
-#: libcore/movie_root.cpp:1925
+#: libdevice/vaapi/VaapiSurfaceGLX.cpp:266
 #, c-format
-msgid "Could not write to browser fd #%d: %s"
-msgstr ""
+msgid "VaapiSurfaceGLX::update(): from surface 0x%08x\n"
+msgstr "VaapiSurfaceGLX::update(): from surface 0x%08x\n"
 
-#: libcore/movie_root.cpp:2155
+#: libdevice/vaapi/VaapiSurface.cpp:77
 #, c-format
-msgid "Fork failed launching URL opener '%s'"
-msgstr ""
+msgid "VaapiSurface::~VaapiSurface(): surface 0x%08x\n"
+msgstr "VaapiSurface::~VaapiSurface(): surface 0x%08x\n"
 
-#: libcore/movie_root.cpp:2202
+#: libdevice/vaapi/VaapiSubpicture.cpp:35
 #, c-format
-msgid "Could only write %d bytes to fd #%d"
-msgstr ""
-
-#: libcore/movie_root.cpp:2290
-msgid "Live MovieClips"
-msgstr ""
+msgid "VaapiSubpicture::VaapiSubpicture(): format '%s'\n"
+msgstr "VaapiSubpicture::VaapiSubpicture(): format '%s'\n"
 
-#: libcore/movie_root.cpp:2419
+#: libdevice/vaapi/VaapiSurfaceProxy.cpp:31
 #, c-format
-msgid "%s to UTF8 conversion in LoadableObject input parsing"
-msgstr ""
+msgid "VaapiSurfaceProxy::VaapiSurfaceProxy(): surface 0x%08x\n"
+msgstr "VaapiSurfaceProxy::VaapiSurfaceProxy(): surface 0x%08x\n"
 
-#: libcore/movie_root.cpp:2442
+#: libdevice/vaapi/VaapiSurfaceProxy.cpp:36
 #, c-format
-msgid ""
-"Hosting application registered no callback for events/queries, can't call %s"
-"(%s)"
-msgstr ""
+msgid "VaapiSurfaceProxy::~VaapiSurfaceProxy(): surface 0x%08x\n"
+msgstr "VaapiSurfaceProxy::~VaapiSurfaceProxy(): surface 0x%08x\n"
 
-#: libcore/abc/AbcBlock.cpp:65 libcore/abc/AbcBlock.cpp:133
-msgid "ABC: Finalizing trait yielded bad type for slot."
-msgstr ""
+#: libdevice/x11/X11Device.cpp:88 libdevice/x11/X11Device.cpp:106
+msgid "Couldn't initialize X11 device!"
+msgstr "无法初始化 X11 设备!"
 
-#: libcore/abc/AbcBlock.cpp:188
-msgid "ABC: Bad name for trait."
-msgstr ""
+#: libdevice/x11/X11Device.cpp:142
+msgid "couldn't open X11 display!"
+msgstr "无法打开 X11 显示!"
 
-#: libcore/abc/AbcBlock.cpp:193
-msgid "ABC: Trait name must be fully qualified."
-msgstr ""
+#: libdevice/x11/X11Device.cpp:162
+msgid "Error: couldn't get X visual\n"
+msgstr "错误: 无法获取 X 可视化\n"
 
-#: libcore/abc/AbcBlock.cpp:240 libcore/abc/AbcBlock.cpp:266
-msgid "Bad method id in trait."
-msgstr ""
+#: libdevice/x11/X11Device.cpp:199
+msgid "The default Display is not set!"
+msgstr "缺省显示未设置!"
 
-#: libcore/abc/AbcBlock.cpp:256
-msgid "Bad Class id in trait."
-msgstr ""
+#: libdevice/x11/X11Device.cpp:212
+msgid "No Display device set!"
+msgstr "没有设置显示设备!"
 
-#: libcore/abc/AbcBlock.cpp:274
-msgid "ABC: Unknown type of trait."
-msgstr ""
+#: libdevice/x11/X11Device.cpp:217
+msgid "No drawable window set!"
+msgstr "没有设置可绘制窗口!"
 
-#: libcore/abc/AbcBlock.cpp:468
+#: libdevice/egl/eglDevice.cpp:86 libdevice/egl/eglDevice.cpp:108
+msgid "Couldn't initialize EGL device!"
+msgstr "无法初始化 EGL 设备!"
+
+#: libdevice/egl/eglDevice.cpp:111
 #, c-format
-msgid "Abc Version: %d.%d"
-msgstr ""
+msgid "Couldn't bind client to type %d!"
+msgstr "无法绑定客户端到类型 %d!"
 
-#: libcore/abc/AbcBlock.cpp:567
-msgid "ABC: Bad string given for namespace."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:181
+#, c-format
+msgid "eglGetDisplay() failed (error 0x%x)"
+msgstr "eglGetDisplay() 失败 (错误 0x%x)"
 
-#: libcore/abc/AbcBlock.cpp:609
-msgid "ABC: Bad namespace for namespace set."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:187
+#, c-format
+msgid "eglInitialize() failed (error %s)"
+msgstr "eglInitialize() 失败 (错误 %s)"
 
-#: libcore/abc/AbcBlock.cpp:679
+#: libdevice/egl/eglDevice.cpp:197
 #, c-format
-msgid "Action Block: Unknown multiname type (%d)."
-msgstr ""
+msgid "EGL_CLIENT_APIS = %s"
+msgstr "EGL_CLIENT_APIS = %s"
 
-#: libcore/abc/AbcBlock.cpp:712 libcore/abc/AbcBlock.cpp:722
-#: libcore/abc/AbcBlock.cpp:732 libcore/abc/AbcBlock.cpp:742
-msgid "Action Block: Bad index in optional argument."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:198
+#, c-format
+msgid "EGL_EXTENSIONS = %s"
+msgstr "EGL_EXTENSIONS = %s"
 
-#: libcore/abc/AbcBlock.cpp:752
-msgid "ABC: Bad index in optional argument, namespaces."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:199
+#, c-format
+msgid "EGL_VERSION = %s, EGL_VENDOR = %s"
+msgstr "EGL_VERSION = %s, EGL_VENDOR = %s"
 
-#: libcore/abc/AbcBlock.cpp:774
+#: libdevice/egl/eglDevice.cpp:208 libdevice/egl/eglDevice.cpp:547
+#: gui/gtk/gtk_glue_ovg.cpp:383
 #, c-format
-msgid "ABC: Bad default value type (%X), but continuing."
-msgstr ""
+msgid "eglGetConfigs() failed to retrieve the number of configs (error %s)"
+msgstr "eglGetConfigs() 无法取回配置数目(错误 %s)"
 
-#: libcore/abc/AbcBlock.cpp:812
-msgid "ABC: Bad return type for method info."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:213 libdevice/egl/eglDevice.cpp:552
+#: gui/gtk/gtk_glue_ovg.cpp:388
+msgid "No EGLconfigs found\n"
+msgstr "未找到 EGLconfigs\n"
 
-#: libcore/abc/AbcBlock.cpp:825
-msgid "ABC: Unknown return type."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:216 libdevice/egl/eglDevice.cpp:555
+#, c-format
+msgid "Max number of EGL Configs is %d"
+msgstr "EGL配置的最大数量是 %d"
 
-#: libcore/abc/AbcBlock.cpp:842
-msgid "ABC: Bad parameter type in method."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:231
+msgid "Using the 32bpp, low quality configuration"
+msgstr "使用 32bpp, 低品质配置"
 
-#: libcore/abc/AbcBlock.cpp:851
-msgid "ABC: Unknown parameter type."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:233
+msgid "eglChooseConfig(32-low) failed"
+msgstr "eglChooseConfig(32-low) 失败"
 
-#: libcore/abc/AbcBlock.cpp:940
-msgid "ABC: Out of bounds instance name."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:237
+msgid "Using the 16bpp, low quality configuration"
+msgstr "使用 16bpp, 低品质配置"
 
-#: libcore/abc/AbcBlock.cpp:948
-msgid "ABC: QName required for instance."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:239
+msgid "eglChooseConfig(16-low) failed"
+msgstr "eglChooseConfig(16-low) 失败"
 
-#: libcore/abc/AbcBlock.cpp:953
-msgid "ABC: No namespace to use for storing class."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:248
+msgid "Using the 32bpp, medium quality configuration"
+msgstr "使用 32bpp, 中等品质配置"
 
-#: libcore/abc/AbcBlock.cpp:968
-msgid "Duplicate class registration."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:250
+msgid "eglChooseConfig(32-medium) failed"
+msgstr "eglChooseConfig(32-medium) 失败"
 
-#: libcore/abc/AbcBlock.cpp:984
-msgid "ABC: Bad super type."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:254 libdevice/egl/eglDevice.cpp:271
+msgid "Using the 16bpp, medium quality configuration"
+msgstr "使用 16bpp, 中等品质配置"
 
-#: libcore/abc/AbcBlock.cpp:995
-#, c-format
-msgid "ABC: Super type not found (%s)"
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:256
+msgid "eglChooseConfig(16-medium) failed"
+msgstr "eglChooseConfig(16-medium) 失败"
 
-#: libcore/abc/AbcBlock.cpp:1002
-msgid "ABC: Can't extend a class which is final."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:265
+msgid "Using the 32bpp, high quality configuration"
+msgstr "使用 32bpp, 高品质配置"
 
-#: libcore/abc/AbcBlock.cpp:1008
-msgid "ABC: Can't extend an interface type."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:267
+msgid "eglChooseConfig(32-high) failed"
+msgstr "eglChooseConfig(32-high) 失败"
 
-#: libcore/abc/AbcBlock.cpp:1014
-msgid "ABC: Class cannot be its own supertype."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:273
+msgid "eglChooseConfig(16-high) failed"
+msgstr "eglChooseConfig(16-high) 失败"
 
-#: libcore/abc/AbcBlock.cpp:1035
-msgid "ABC: Bad namespace for protected."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:283
+msgid "EGL configuration doesn't match!"
+msgstr "EGL 配置不匹配!"
 
-#: libcore/abc/AbcBlock.cpp:1054
-msgid "ABC: Bad name for interface."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:319
+#, c-format
+msgid "eglGetConfigAttrib() failed (error %s)"
+msgstr "eglGetConfigAttrib() 失败 (错误 %s)"
 
-#: libcore/abc/AbcBlock.cpp:1061
-msgid "ABC: Can't implement a non-interface type."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:323
+#, c-format
+msgid "EGL native visual is: %d"
+msgstr "EGL 原生视觉为: %d"
 
-#: libcore/abc/AbcBlock.cpp:1073
-msgid "ABC: Out of bounds method for initializer."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:339
+msgid "Initializing EGL for OpenGLES2"
+msgstr "初始化 OpenGLES2 的 EGL"
 
-#: libcore/abc/AbcBlock.cpp:1108
-msgid "ABC: Out of bound static constructor for class."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:341 libdevice/egl/eglDevice.cpp:361
+#, c-format
+msgid "eglBindAPI() failed to retrieve the number of configs (error %s)"
+msgstr "eglBindAPI() 无法获取配置的数量 (错误 %s)"
 
-#: libcore/abc/AbcBlock.cpp:1147
-msgid "ABC: Out of bounds method for script."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:349
+msgid "Initializing EGL for OpenGLES1"
+msgstr "初始化 OpenGLES1 的 EGL"
 
-#: libcore/abc/AbcBlock.cpp:1183
-msgid "ABC: Out of bounds for method body."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:351
+#, c-format
+msgid "eglBindAPI() failed to retrive the number of configs (error %s)"
+msgstr "eglBindAPI() 无法获取配置的数量 (错误 %s)"
 
-#: libcore/abc/AbcBlock.cpp:1190
-msgid "ABC: Only one body per method."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:359
+msgid "Initializing EGL for OpenVG"
+msgstr "初始化 OpenVG 的 EGL"
 
-#: libcore/abc/AbcBlock.cpp:1236
-msgid "ABC: Out of bound type for exception."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:394
+msgid "Initializing EGL Surface"
+msgstr "初始化 EGL 表面"
 
-#: libcore/abc/AbcBlock.cpp:1246
+#: libdevice/egl/eglDevice.cpp:401
 #, c-format
-msgid "ABC: Unknown type of object to catch. (%s)"
-msgstr ""
+msgid "eglCreateWindowSurface failed (error %s)"
+msgstr "eglCreateWindowSurface 失败 (错误 %s)"
 
-#: libcore/abc/AbcBlock.cpp:1264
-msgid "ABC: Out of bound name for caught exception."
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:415
+#, c-format
+msgid "eglCreateContext failed (error %s)"
+msgstr "eglCreateContext 失败 (错误 %s)"
 
-#: libcore/MovieFactory.cpp:79
-msgid ""
-"Requested to keep from completely loading a movie, but the movie in question "
-"is an image, for which we don't yet have the concept of a 'loading thread'"
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:427
+#, c-format
+msgid "eglMakeCurrent failed (error %s)"
+msgstr "eglMakeCurrent 失败 (错误 %s)"
 
-#: libcore/MovieFactory.cpp:94
-msgid "FLV can't be loaded directly as a movie"
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:559 gui/gtk/gtk_glue_ovg.cpp:395
+msgid "Out of memory\n"
+msgstr "内存不足\n"
 
-#: libcore/MovieFactory.cpp:98
-msgid "Unknown file type"
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:564
+#, fuzzy, c-format
+msgid "eglGetConfigs() failed to retrieve the configs (error %s)"
+msgstr "eglGetConfigs() 无法取回配置(配置 %s)"
 
-#: libcore/MovieFactory.cpp:133
+#: libdevice/egl/eglDevice.cpp:777
 #, c-format
-msgid "Couldn't load library movie '%s'"
-msgstr ""
+msgid "eglCreatePbufferSurface() failed (error 0x%x)"
+msgstr "eglCreatePbufferSurface() 失败 (错误 0x%x)"
 
-#: libcore/MovieFactory.cpp:173
-msgid "Can't read file header"
-msgstr ""
+#: libdevice/egl/eglDevice.cpp:797 libdevice/egl/eglDevice.cpp:818
+#, c-format
+msgid "eglCreatePbufferFromClientBuffer() failed (error 0x%x)"
+msgstr "eglCreatePbufferFromClientBuffer() 失败 (错误 0x%x)"
 
-#: libcore/MovieFactory.cpp:212
-msgid "Can't read 3 bytes after an MZ (.exe) header"
-msgstr ""
+#: libdevice/events/UinputDevice.cpp:46
+msgid "ioctl(UI_DEV_DESTROY)"
+msgstr "ioctl(UI_DEV_DESTROY)"
 
-#: libcore/MovieFactory.cpp:222
-msgid "Could not find SWF inside an .exe file"
-msgstr ""
+#: libdevice/events/UinputDevice.cpp:77 libdevice/events/MouseDevice.cpp:94
+#: libdevice/events/TouchDevice.cpp:312 libdevice/events/EventDevice.cpp:703
+#, c-format
+msgid "You don't have the proper permissions to open %s"
+msgstr "您没有适当的权限来打开  %s"
 
-#: libcore/MovieFactory.cpp:231
+#: libdevice/events/UinputDevice.cpp:82
 #, c-format
-msgid "unknown file type, buffer is %c%c%c"
-msgstr ""
+msgid "Found a User mode input device at %s"
+msgstr "在 %s 找到一个用户模式的输入设备"
 
-#: libcore/MovieFactory.cpp:273
+#: libdevice/events/UinputDevice.cpp:98
+msgid "User Mode Input device not initialized yet!"
+msgstr "用户模式输入设备尚未初始化!"
+
+#: libdevice/events/UinputDevice.cpp:103
+msgid "ioctl(UI_SET_EVBIT, EV_KEY)"
+msgstr "ioctl(UI_SET_EVBIT, EV_KEY)"
+
+#: libdevice/events/UinputDevice.cpp:109
+msgid "ioctl(UI_SET_EVBIT, EV_REL)"
+msgstr "ioctl(UI_SET_EVBIT, EV_REL)"
+
+#: libdevice/events/UinputDevice.cpp:113
+msgid "ioctl(UI_SET_RELBIT, REL_X)"
+msgstr "ioctl(UI_SET_RELBIT, REL_X)"
+
+#: libdevice/events/UinputDevice.cpp:117
+msgid "ioctl( UI_SET_RELBIT, REL_Y)"
+msgstr "ioctl(UI_SET_RELBIT, REL_X)"
+
+#: libdevice/events/UinputDevice.cpp:142
+msgid "write uidev"
+msgstr "写入 uidev"
+
+#: libdevice/events/UinputDevice.cpp:147
 #, c-format
-msgid "Can't read image file from %s"
-msgstr ""
+msgid "ioctl(UI_SET_EVBIT, EV_ABS): %s"
+msgstr "ioctl(UI_SET_EVBIT, EV_ABS): %s"
 
-#: libcore/MovieFactory.cpp:283
+#: libdevice/events/UinputDevice.cpp:151
 #, c-format
-msgid "Parsing error: %s"
-msgstr ""
+msgid "ioctl(UI_SET_ABSBIT,ABS_X): %s"
+msgstr "ioctl(UI_SET_ABSBIT,ABS_X): %s"
 
-#: libcore/MovieFactory.cpp:309
+#: libdevice/events/UinputDevice.cpp:155
 #, c-format
-msgid "failed to open '%s'; can't create movie"
-msgstr ""
+msgid "ioctl(UI_SET_ABSBIT, ABS_Y): %s"
+msgstr "ioctl(UI_SET_ABSBIT, ABS_Y): %s"
 
-#: libcore/MovieFactory.cpp:314
+#: libdevice/events/UinputDevice.cpp:161
 #, c-format
-msgid "streamProvider opener can't open '%s'"
-msgstr ""
+msgid "ioctl(UI_SET_KEYBIT, BTN_LEFT)): %s"
+msgstr "ioctl(UI_SET_KEYBIT, BTN_LEFT)): %s"
 
-#: libcore/PropertyList.cpp:274
+#: libdevice/events/UinputDevice.cpp:165
 #, c-format
-msgid "Property %s already exists, can't addDestructiveGetter"
-msgstr ""
+msgid "ioctl(UI_SET_KEYBIT, BTN_RIGHT): %s"
+msgstr "ioctl(UI_SET_KEYBIT, BTN_RIGHT): %s"
 
-#: libcore/as_object.cpp:439
+#: libdevice/events/UinputDevice.cpp:169
 #, c-format
-msgid "Caught exception: %s"
-msgstr ""
+msgid "ioctl(UI_SET_EVBIT, ABS_PRESSURE): %s"
+msgstr "ioctl(UI_SET_EVBIT, ABS_PRESSURE): %s"
 
-#: libcore/as_object.cpp:627
+#: libdevice/events/UinputDevice.cpp:177
 #, c-format
-msgid "Attempt to set read-only property '%s'"
-msgstr ""
+msgid "ioctl(UI_SET_KEYBIT, BTN_MOUSE): %s"
+msgstr "ioctl(UI_SET_KEYBIT, BTN_MOUSE): %s"
 
-#: libcore/as_object.cpp:639
+#: libdevice/events/UinputDevice.cpp:182
+msgid "ioctl(UI_DEV_CREATED) failed!"
+msgstr "ioctl(UI_DEV_CREATED) 失败!"
+
+#: libdevice/events/MouseDevice.cpp:99
 #, c-format
-msgid "%s: %s"
-msgstr ""
+msgid "Found a %s device for mouse input using %s"
+msgstr "找到一个鼠标输入的 %s 设备正在使用 %s"
 
-#: libcore/as_object.cpp:654
+#: libdevice/events/MouseDevice.cpp:145 libdevice/events/EventDevice.cpp:74
 #, c-format
-msgid "Unknown failure in setting property '%s' on object '%p'"
-msgstr ""
+msgid "Could not open %s: %s"
+msgstr "无法打开 %s: %s"
 
-#: libcore/as_object.cpp:683
+#: libdevice/events/MouseDevice.cpp:151
 #, c-format
-msgid "Attempt to initialize read-only property '%s' on object '%p' twice"
-msgstr ""
+msgid "Could not set non-blocking mode for mouse device: %s"
+msgstr "无法为鼠标设备设置非阻塞模式:%s"
 
-#: libcore/as_object.cpp:845
-msgid "Circular inheritance chain detected during isPrototypeOf call"
-msgstr ""
+#: libdevice/events/MouseDevice.cpp:170
+msgid "Mouse reset failed"
+msgstr "鼠标复位失败"
 
-#: libdevice/egl/eglDevice.cpp:86 libdevice/egl/eglDevice.cpp:108
-msgid "Couldn't initialize EGL device!"
-msgstr ""
+#: libdevice/events/MouseDevice.cpp:180
+msgid "WARNING: Could not detect mouse device ID"
+msgstr "警告:无法检测到鼠标设备ID"
 
-#: libdevice/egl/eglDevice.cpp:111
+#: libdevice/events/MouseDevice.cpp:184
 #, c-format
-msgid "Couldn't bind client to type %d!"
-msgstr ""
+msgid "WARNING: Non-standard mouse device ID %d"
+msgstr "警告:非标准的鼠标设备ID %d"
 
-#: libdevice/egl/eglDevice.cpp:181
+#: libdevice/events/MouseDevice.cpp:189
+msgid "Could not activate Data Reporting mode for mouse"
+msgstr "无法激活鼠标的数据报告模式"
+
+#: libdevice/events/MouseDevice.cpp:197
 #, c-format
-msgid "eglGetDisplay() failed (error 0x%x)"
-msgstr ""
+msgid "Mouse enabled for %s on fd #%d"
+msgstr "启用鼠标 %s 在文件描述符 #%d"
 
-#: libdevice/egl/eglDevice.cpp:187
+#: libdevice/events/MouseDevice.cpp:257
+msgid "No sync in first byte!"
+msgstr "没有在第一个字节同步!"
+
+#: libdevice/events/MouseDevice.cpp:311
+msgid "Vertical mouse movement overflow bit set"
+msgstr "垂直鼠标移动 overflow 位设置"
+
+#: libdevice/events/MouseDevice.cpp:314
+msgid "Horizontal mouse movement overflow bit set"
+msgstr "水平鼠标移动 overflow 位设置"
+
+#: libdevice/events/MouseDevice.cpp:320
+msgid "Horizontal mouse movement negative bit set"
+msgstr "水平移动鼠标 negative 位设置"
+
+#: libdevice/events/MouseDevice.cpp:325
+msgid "Vertical mouse movement negative bit set"
+msgstr "垂直移动鼠标 negative 位设置"
+
+#: libdevice/events/MouseDevice.cpp:330
 #, c-format
-msgid "eglInitialize() failed (error %s)"
-msgstr ""
+msgid "PS/2 Mouse: Xmove=%d, Ymove=%d,  Button %d"
+msgstr "PS/2 鼠标: Xmove=%d, Ymove=%d, 按钮 %d"
 
-#: libdevice/egl/eglDevice.cpp:197
+#: libdevice/events/MouseDevice.cpp:347
 #, c-format
-msgid "EGL_CLIENT_APIS = %s"
-msgstr ""
+msgid "convert: Xin=%d, Yin=%d, Xout=%d, Yout=%d"
+msgstr "转换: Xin=%d, Yin=%d, Xout=%d, Yout=%d"
 
-#: libdevice/egl/eglDevice.cpp:198
+#: libdevice/events/MouseDevice.cpp:354
 #, c-format
-msgid "EGL_EXTENSIONS = %s"
-msgstr ""
+msgid "read mouse: X=%d, Y=%d, Btn: btn %d"
+msgstr "读取鼠标: X=%d, Y=%d, Btn: btn %d"
 
-#: libdevice/egl/eglDevice.cpp:199
+#: libdevice/events/MouseDevice.cpp:362
 #, c-format
-msgid "EGL_VERSION = %s, EGL_VENDOR = %s"
-msgstr ""
+msgid "mouse click! %d"
+msgstr "鼠标点击! %d"
 
-#: libdevice/egl/eglDevice.cpp:208 libdevice/egl/eglDevice.cpp:543
-#: gui/gtk/gtk_glue_ovg.cpp:383
+#: libdevice/events/MouseDevice.cpp:380
 #, c-format
-msgid "eglGetConfigs() failed to retrieve the number of configs (error %s)"
-msgstr "eglGetConfigs() 无法取回配置数目(错误 %s)"
+msgid "mouse_command: discarded %d bytes from input buffer"
+msgstr "mouse_command:从输入缓冲区丢弃 %d 字节"
 
-#: libdevice/egl/eglDevice.cpp:213 libdevice/egl/eglDevice.cpp:548
-#: gui/gtk/gtk_glue_ovg.cpp:388
-msgid "No EGLconfigs found\n"
-msgstr "未找到 EGLconfigs\n"
+#: libdevice/events/TouchDevice.cpp:83
+msgid "No filespec specified for the touchscreen device."
+msgstr "没有触摸屏设备指定的文件规格。"
 
-#: libdevice/egl/eglDevice.cpp:216 libdevice/egl/eglDevice.cpp:551
+#: libdevice/events/TouchDevice.cpp:89
 #, c-format
-msgid "Max number of EGL Configs is %d"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:231
-msgid "Using the 32bpp, low quality configuration"
-msgstr ""
+msgid "Could not open touchscreen %s: %s"
+msgstr "无法打开触摸屏 %s: %s"
 
-#: libdevice/egl/eglDevice.cpp:233
-msgid "eglChooseConfig(32-low) failed"
-msgstr ""
+#: libdevice/events/TouchDevice.cpp:96
+#, c-format
+msgid "Could not get touchscreen fd %s: %s"
+msgstr "无法得到触摸屏文件描述符 %s: %s"
 
-#: libdevice/egl/eglDevice.cpp:237
-msgid "Using the 16bpp, low quality configuration"
-msgstr ""
+#: libdevice/events/TouchDevice.cpp:103
+#, c-format
+msgid "Using TSLIB on %s"
+msgstr "在 %s 上使用 TSLIB"
 
-#: libdevice/egl/eglDevice.cpp:239
-msgid "eglChooseConfig(16-low) failed"
-msgstr ""
+#: libdevice/events/TouchDevice.cpp:134
+#, c-format
+msgid "Touched x: %d, y: %d"
+msgstr "触摸点 x: %d, y: %d"
 
-#: libdevice/egl/eglDevice.cpp:248
-msgid "Using the 32bpp, medium quality configuration"
-msgstr ""
+#: libdevice/events/TouchDevice.cpp:138
+#, c-format
+msgid "lifted x: %d y: %d"
+msgstr "抬起点 x: %d y: %d"
 
-#: libdevice/egl/eglDevice.cpp:250
-msgid "eglChooseConfig(32-medium) failed"
-msgstr ""
+#: libdevice/events/TouchDevice.cpp:244
+msgid "WARNING: Error parsing calibration data!"
+msgstr "警告:错误解析校准数据!"
 
-#: libdevice/egl/eglDevice.cpp:254 libdevice/egl/eglDevice.cpp:271
-msgid "Using the 16bpp, medium quality configuration"
-msgstr ""
+#: libdevice/events/TouchDevice.cpp:246
+#, c-format
+msgid ""
+"Using touchscreen calibration data: %.0f / %.0f / %.0f / %.0f / %.0f / %.0f"
+msgstr "使用触摸屏校准数据: %.0f / %.0f / %.0f / %.0f / %.0f / %.0f"
 
-#: libdevice/egl/eglDevice.cpp:256
-msgid "eglChooseConfig(16-medium) failed"
+#: libdevice/events/TouchDevice.cpp:249
+msgid ""
+"WARNING: No touchscreen calibration settings found. The mouse pointer most "
+"probably won't work precisely. Set TSCALIB environment variable with correct "
+"values for better results"
 msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:265
-msgid "Using the 32bpp, high quality configuration"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:267
-msgid "eglChooseConfig(32-high) failed"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:273
-msgid "eglChooseConfig(16-high) failed"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:283
-msgid "EGL configuration doesn't match!"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:319
-#, c-format
-msgid "eglGetConfigAttrib() failed (error %s)"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:323
-#, c-format
-msgid "EGL native visual is: %d"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:339
-msgid "Initializing EGL for OpenGLES2"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:341 libdevice/egl/eglDevice.cpp:361
-#, fuzzy, c-format
-msgid "eglBindAPI() failed to retrieve the number of configs (error %s)"
-msgstr "eglGetConfigs() 无法取回配置数目(错误 %s)"
-
-#: libdevice/egl/eglDevice.cpp:349
-msgid "Initializing EGL for OpenGLES1"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:351
-#, fuzzy, c-format
-msgid "eglBindAPI() failed to retrive the number of configs (error %s)"
-msgstr "eglGetConfigs() 无法取回配置数目(错误 %s)"
-
-#: libdevice/egl/eglDevice.cpp:359
-msgid "Initializing EGL for OpenVG"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:390
-msgid "Initializing EGL Surface"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:397
-#, c-format
-msgid "eglCreateWindowSurface failed (error %s)"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:411
-#, c-format
-msgid "eglCreateContext failed (error %s)"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:423
-#, c-format
-msgid "eglMakeCurrent failed (error %s)"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:555 gui/gtk/gtk_glue_ovg.cpp:395
-msgid "Out of memory\n"
-msgstr "内存不足\n"
-
-#: libdevice/egl/eglDevice.cpp:560
-#, fuzzy, c-format
-msgid "eglGetConfigs() failed to retrieve the configs (error %s)"
-msgstr "eglGetConfigs() 无法取回配置(配置 %s)"
-
-#: libdevice/egl/eglDevice.cpp:773
-#, c-format
-msgid "eglCreatePbufferSurface() failed (error 0x%x)"
-msgstr ""
-
-#: libdevice/egl/eglDevice.cpp:793 libdevice/egl/eglDevice.cpp:814
-#, c-format
-msgid "eglCreatePbufferFromClientBuffer() failed (error 0x%x)"
-msgstr ""
-
-#: libdevice/vaapi/VaapiSurfaceProxy.cpp:31
-#, c-format
-msgid "VaapiSurfaceProxy::VaapiSurfaceProxy(): surface 0x%08x\n"
-msgstr ""
-
-#: libdevice/vaapi/VaapiSurfaceProxy.cpp:36
-#, c-format
-msgid "VaapiSurfaceProxy::~VaapiSurfaceProxy(): surface 0x%08x\n"
-msgstr ""
-
-#: libdevice/vaapi/VaapiSubpicture.cpp:35
-#, c-format
-msgid "VaapiSubpicture::VaapiSubpicture(): format '%s'\n"
-msgstr ""
-
-#: libdevice/vaapi/VaapiSurface.cpp:77
-#, c-format
-msgid "VaapiSurface::~VaapiSurface(): surface 0x%08x\n"
-msgstr ""
-
-#: libdevice/vaapi/VaapiSurfaceGLX.cpp:205
-#, c-format
-msgid "  -> surface %p\n"
-msgstr ""
-
-#: libdevice/vaapi/VaapiSurfaceGLX.cpp:212
-#, c-format
-msgid "VaapiSurface::~VaapiSurface(): surface %p\n"
-msgstr ""
-
-#: libdevice/vaapi/VaapiSurfaceGLX.cpp:266
-#, c-format
-msgid "VaapiSurfaceGLX::update(): from surface 0x%08x\n"
-msgstr ""
-
-#: libdevice/vaapi/VaapiImage.cpp:38
-#, c-format
-msgid "VaapiImage::VaapiImage(): format '%s'\n"
-msgstr ""
-
-#: libdevice/vaapi/VaapiImage.cpp:82
-#, c-format
-msgid "  image 0x%08x, format '%s'\n"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:94 libdevice/events/EventDevice.cpp:699
-#: libdevice/events/TouchDevice.cpp:312 libdevice/events/UinputDevice.cpp:77
-#, c-format
-msgid "You don't have the proper permissions to open %s"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:99
-#, c-format
-msgid "Found a %s device for mouse input using %s"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:145 libdevice/events/EventDevice.cpp:74
-#, fuzzy, c-format
-msgid "Could not open %s: %s"
-msgstr "无法打开 %s"
-
-#: libdevice/events/MouseDevice.cpp:151
-#, c-format
-msgid "Could not set non-blocking mode for mouse device: %s"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:170
-msgid "Mouse reset failed"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:180
-msgid "WARNING: Could not detect mouse device ID"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:184
-#, c-format
-msgid "WARNING: Non-standard mouse device ID %d"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:189
-msgid "Could not activate Data Reporting mode for mouse"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:197
-#, c-format
-msgid "Mouse enabled for %s on fd #%d"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:257
-msgid "No sync in first byte!"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:311
-msgid "Vertical mouse movement overflow bit set"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:314
-msgid "Horizontal mouse movement overflow bit set"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:320
-msgid "Horizontal mouse movement negative bit set"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:325
-msgid "Vertical mouse movement negative bit set"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:330
-#, c-format
-msgid "PS/2 Mouse: Xmove=%d, Ymove=%d,  Button %d"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:347
-#, c-format
-msgid "convert: Xin=%d, Yin=%d, Xout=%d, Yout=%d"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:354
-#, c-format
-msgid "read mouse: X=%d, Y=%d, Btn: btn %d"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:362
-#, c-format
-msgid "mouse click! %d"
-msgstr ""
-
-#: libdevice/events/MouseDevice.cpp:380
-#, c-format
-msgid "mouse_command: discarded %d bytes from input buffer"
-msgstr ""
-
-#: libdevice/events/InputDevice.cpp:136
-#, c-format
-msgid "The device has this error: %s"
-msgstr ""
-
-#: libdevice/events/InputDevice.cpp:211
-#, fuzzy
-msgid ""
-"WARNING: PS/2 Mouse support disabled as it conflicts with the input event "
-"support."
-msgstr "警告:鼠标支持可能与输入事件支持冲突。"
+"警告:没有发现触摸屏校准设置。鼠标指针很可能不精确。要取得更好的结果请设置"
+"TSCALIB的环境变量为正确的值"
 
 #: libdevice/events/EventDevice.cpp:80
 #, c-format
 msgid "Could not set non-blocking mode for pointing device: %s"
-msgstr ""
+msgstr "无法设置为点设备非阻塞模式:%s"
 
 #: libdevice/events/EventDevice.cpp:93
 msgid "ioctl (EVIOCGVERSION)"
-msgstr ""
+msgstr "ioctl (EVIOCGVERSION)"
 
 #: libdevice/events/EventDevice.cpp:96
 #, c-format
 msgid "evdev driver version is %d.%d.%d"
-msgstr ""
+msgstr "evdev 驱动版本为 %d.%d.%d"
 
-#: libdevice/events/EventDevice.cpp:102 libdevice/events/EventDevice.cpp:720
+#: libdevice/events/EventDevice.cpp:102 libdevice/events/EventDevice.cpp:724
 #, c-format
 msgid "ioctl (EVIOCGID): %s"
-msgstr ""
+msgstr "ioctl (EVIOCGID): %s"
 
-#: libdevice/events/EventDevice.cpp:107 libdevice/events/EventDevice.cpp:714
+#: libdevice/events/EventDevice.cpp:107 libdevice/events/EventDevice.cpp:718
 #, c-format
 msgid "ioctl (EVIOCGNAME): %s"
-msgstr ""
+msgstr "ioctl (EVIOCGNAME): %s"
 
-#: libdevice/events/EventDevice.cpp:109 libdevice/events/EventDevice.cpp:716
+#: libdevice/events/EventDevice.cpp:109 libdevice/events/EventDevice.cpp:720
 #, c-format
 msgid "The device on %s says its name is %s"
-msgstr ""
+msgstr "%s 上的设备其名称为 %s"
 
-#: libdevice/events/EventDevice.cpp:115 libdevice/events/EventDevice.cpp:722
+#: libdevice/events/EventDevice.cpp:115 libdevice/events/EventDevice.cpp:726
 #, c-format
 msgid "vendor %04hx product %04hx version %04hx"
-msgstr ""
+msgstr "厂商 %04hx 产品 %04hx 版本 %04hx"
 
 #: libdevice/events/EventDevice.cpp:120
 msgid "is a PCI bus type"
-msgstr ""
+msgstr "是一个 PCI 总线类型"
 
 #: libdevice/events/EventDevice.cpp:123
 msgid "is a PNP bus type"
-msgstr ""
+msgstr "是一个 PNP 总线类型"
 
 #: libdevice/events/EventDevice.cpp:128
 msgid "is on a Universal Serial Bus"
-msgstr ""
+msgstr "是在USB上"
 
 #: libdevice/events/EventDevice.cpp:150
 msgid "is a HIL bus type"
-msgstr ""
+msgstr "是一个 HIL 总线类型"
 
 #: libdevice/events/EventDevice.cpp:153
 msgid "is Bluetooth bus type "
-msgstr ""
+msgstr "是蓝牙总线类型"
 
 #: libdevice/events/EventDevice.cpp:157
 msgid "is a Virtual bus type "
-msgstr ""
+msgstr "是一个虚拟总线类型"
 
 #: libdevice/events/EventDevice.cpp:161
 msgid "is an ISA bus type"
-msgstr ""
+msgstr "是一个 ISA 总线类型"
 
 #: libdevice/events/EventDevice.cpp:165
 msgid "is an I8042 bus type"
-msgstr ""
+msgstr "是一个 I8042 总线类型"
 
 #: libdevice/events/EventDevice.cpp:175
 msgid "is an XTKBD bus type"
-msgstr ""
+msgstr "是一个 XTKBD 总线类型"
 
 #: libdevice/events/EventDevice.cpp:178
 msgid "is a serial port bus type"
-msgstr ""
+msgstr "是一个串口总线类型"
 
 #: libdevice/events/EventDevice.cpp:181
 msgid "is a gameport bus type"
-msgstr ""
+msgstr "是一个 gameport 总线类型"
 
 #: libdevice/events/EventDevice.cpp:184
 msgid "is a parallel port bus type"
-msgstr ""
+msgstr "是一个并口总线类型"
 
 #: libdevice/events/EventDevice.cpp:187
 msgid "is an Amiga bus type"
-msgstr ""
+msgstr "是一个 Amiga 总线类型"
 
 #: libdevice/events/EventDevice.cpp:190
 msgid "is an AOB bus type"
-msgstr ""
+msgstr "是一个 AOB 总线类型"
 
 #: libdevice/events/EventDevice.cpp:193
 msgid "is an i2C bus type "
-msgstr ""
+msgstr "是一个 i2C 总线类型"
 
 #: libdevice/events/EventDevice.cpp:199
 msgid "Babbage Touchscreen found!"
-msgstr ""
+msgstr "发现 Babbage 触摸屏!"
 
 #: libdevice/events/EventDevice.cpp:203
 msgid "Babbage Power Button found!"
-msgstr ""
+msgstr "发现 Babbage 电源按钮!"
 
 #: libdevice/events/EventDevice.cpp:208
 msgid "is a GSC bus type"
-msgstr ""
+msgstr "是一个 GSC 总线类型"
 
 #: libdevice/events/EventDevice.cpp:212
 msgid "is an Atari bus type"
-msgstr ""
+msgstr "是一个 Atari 总线类型"
 
 #: libdevice/events/EventDevice.cpp:216
 #, c-format
 msgid "Unknown bus type %d!"
-msgstr ""
+msgstr "未知总线类型 %d!"
 
 #: libdevice/events/EventDevice.cpp:219
 #, c-format
 msgid "Event enabled for %s on fd #%d"
-msgstr ""
+msgstr "事件启用 %s 在文件描述符 #%d"
 
 #: libdevice/events/EventDevice.cpp:228
 #, c-format
 msgid "ioctl (EVIOCGABS(ABS_X)): %s"
-msgstr ""
+msgstr "ioctl (EVIOCGABS(ABS_X)): %s"
 
 #: libdevice/events/EventDevice.cpp:238
 #, c-format
 msgid "ioctl (EVIOCSABS(ABS_X)): %s"
-msgstr ""
+msgstr "ioctl (EVIOCSABS(ABS_X)): %s"
 
 #: libdevice/events/EventDevice.cpp:241
 #, c-format
 msgid "ioctl (EVIOCGABS(ABS_Y)): %s"
-msgstr ""
+msgstr "ioctl (EVIOCGABS(ABS_Y)): %s"
 
 #: libdevice/events/EventDevice.cpp:245
 #, c-format
 msgid "ioctl (EVIOCSABS(ABS_Y)): %s"
-msgstr ""
+msgstr "ioctl (EVIOCSABS(ABS_Y)): %s"
 
 #: libdevice/events/EventDevice.cpp:307
-#, c-format
+#, fuzzy, c-format
 msgid "Type is: %s(%hd), Code is: %hd, Val is: %d"
-msgstr ""
+msgstr "类型: %s(%hd), 代码: %hd, Val us: %d"
 
 #: libdevice/events/EventDevice.cpp:388
 #, c-format
 msgid "REL_X: %d"
-msgstr ""
+msgstr "REL_X: %d"
 
 #: libdevice/events/EventDevice.cpp:392
 #, c-format
 msgid "REL_Y: %d"
-msgstr ""
+msgstr "REL_Y: %d"
 
 #: libdevice/events/EventDevice.cpp:396
 #, c-format
 msgid "REL_Z: %d"
-msgstr ""
+msgstr "REL_Z: %d"
 
 #: libdevice/events/EventDevice.cpp:400
 #, c-format
 msgid "REL_RX: %d"
-msgstr ""
+msgstr "REL_RX: %d"
 
 #: libdevice/events/EventDevice.cpp:404
 #, c-format
 msgid "REL_RY: %d"
-msgstr ""
+msgstr "REL_RY: %d"
 
 #: libdevice/events/EventDevice.cpp:408
 #, c-format
 msgid "REL_RZ: %d"
-msgstr ""
+msgstr "REL_RZ: %d"
 
 #: libdevice/events/EventDevice.cpp:412
 #, c-format
 msgid "REL_HWHEEL: %d"
-msgstr ""
+msgstr "REL_HWHEEL: %d"
 
-#: libdevice/events/EventDevice.cpp:414
+#: libdevice/events/EventDevice.cpp:415
 #, c-format
 msgid "REL_DIAL: %d"
-msgstr ""
+msgstr "REL_DIAL: %d"
 
-#: libdevice/events/EventDevice.cpp:416
+#: libdevice/events/EventDevice.cpp:418
 #, c-format
 msgid "REL_WHEEL: %d"
-msgstr ""
+msgstr "REL_WHEEL: %d"
 
-#: libdevice/events/EventDevice.cpp:418
+#: libdevice/events/EventDevice.cpp:421
 #, c-format
 msgid "REL_MISC: %d"
-msgstr ""
+msgstr "REL_MISC: %d"
 
-#: libdevice/events/EventDevice.cpp:420
+#: libdevice/events/EventDevice.cpp:424
 #, c-format
 msgid "Relative move event %d from Input Event Device"
-msgstr ""
+msgstr "来自输入事件设备的相对移动事件 %d"
 
-#: libdevice/events/EventDevice.cpp:443
+#: libdevice/events/EventDevice.cpp:447
 #, c-format
 msgid "ABS_Z: %d"
-msgstr ""
+msgstr "ABS_Z: %d"
 
-#: libdevice/events/EventDevice.cpp:450
+#: libdevice/events/EventDevice.cpp:454
 #, c-format
 msgid "ABS_VOLUME: %d"
-msgstr ""
+msgstr "ABS_VOLUME: %d"
 
-#: libdevice/events/EventDevice.cpp:454
+#: libdevice/events/EventDevice.cpp:458
 #, c-format
 msgid "ABS_DISTANCE: %d"
-msgstr ""
+msgstr "ABS_DISTANCE: %d"
 
-#: libdevice/events/EventDevice.cpp:458
+#: libdevice/events/EventDevice.cpp:462
 #, c-format
 msgid "ABS_RX: %d"
-msgstr ""
+msgstr "ABS_RX: %d"
 
-#: libdevice/events/EventDevice.cpp:462
+#: libdevice/events/EventDevice.cpp:466
 #, c-format
 msgid "ABS_RY: %d"
-msgstr ""
+msgstr "ABS_RY: %d"
 
-#: libdevice/events/EventDevice.cpp:466
+#: libdevice/events/EventDevice.cpp:470
 #, c-format
 msgid "ABS_RZ: %d"
-msgstr ""
+msgstr "ABS_RZ: %d"
 
-#: libdevice/events/EventDevice.cpp:470
+#: libdevice/events/EventDevice.cpp:474
 #, c-format
 msgid "ABS_THROTTLE: %d"
-msgstr ""
+msgstr "ABS_THROTTLE: %d"
 
-#: libdevice/events/EventDevice.cpp:474
+#: libdevice/events/EventDevice.cpp:478
 #, c-format
 msgid "ABS_RUDDER: %d"
-msgstr ""
+msgstr "ABS_RUDDER: %d"
 
-#: libdevice/events/EventDevice.cpp:478
+#: libdevice/events/EventDevice.cpp:482
 #, c-format
 msgid "ABS_GAS: %d"
-msgstr ""
+msgstr "ABS_GAS: %d"
 
-#: libdevice/events/EventDevice.cpp:482
+#: libdevice/events/EventDevice.cpp:486
 #, c-format
 msgid "ABS_BRAKE: %d"
-msgstr ""
+msgstr "ABS_BRAKE: %d"
 
-#: libdevice/events/EventDevice.cpp:486
+#: libdevice/events/EventDevice.cpp:490
 #, c-format
 msgid "ABS_TILT_X: %d"
-msgstr ""
+msgstr "ABS_TILT_X: %d"
 
-#: libdevice/events/EventDevice.cpp:490
+#: libdevice/events/EventDevice.cpp:494
 #, c-format
 msgid "ABS_TILT_Y: %d"
-msgstr ""
+msgstr "ABS_TILT_Y: %d"
 
-#: libdevice/events/EventDevice.cpp:505 libdevice/events/EventDevice.cpp:529
+#: libdevice/events/EventDevice.cpp:509 libdevice/events/EventDevice.cpp:533
 msgid "Misc event from Input Event Device"
-msgstr ""
+msgstr "来自输入事件设备的杂项事件"
 
-#: libdevice/events/EventDevice.cpp:533
+#: libdevice/events/EventDevice.cpp:537
 msgid "LED event from Input Event Device"
-msgstr ""
+msgstr "来自输入事件设备的LED事件"
 
-#: libdevice/events/EventDevice.cpp:536
+#: libdevice/events/EventDevice.cpp:540
 msgid "Sound event from Input Event Device"
-msgstr ""
+msgstr "来自输入事件设备的声音事件"
 
-#: libdevice/events/EventDevice.cpp:539
+#: libdevice/events/EventDevice.cpp:543
 msgid "Key autorepeat event from Input Event Device"
-msgstr ""
+msgstr "来自输入事件设备的按键自动重复事件"
 
-#: libdevice/events/EventDevice.cpp:542
+#: libdevice/events/EventDevice.cpp:546
 msgid "Force Feedback event from Input Event Device"
-msgstr ""
+msgstr "来自输入事件设备的力反馈事件"
 
-#: libdevice/events/EventDevice.cpp:545
+#: libdevice/events/EventDevice.cpp:549
 msgid "Force Feedback status event from Input Event Device"
-msgstr ""
+msgstr "来自输入事件设备的力反馈状态事件"
 
-#: libdevice/events/EventDevice.cpp:548
+#: libdevice/events/EventDevice.cpp:552
 msgid "Power event from Input Event Device"
-msgstr ""
+msgstr "来自输入事件设备的电源事件"
 
-#: libdevice/events/EventDevice.cpp:736
+#: libdevice/events/EventDevice.cpp:740
 #, c-format
 msgid "Enabling USB device: %s"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:83
-msgid "No filespec specified for the touchscreen device."
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:89
-#, c-format
-msgid "Could not open touchscreen %s: %s"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:96
-#, c-format
-msgid "Could not get touchscreen fd %s: %s"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:103
-#, c-format
-msgid "Using TSLIB on %s"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:134
-#, c-format
-msgid "Touched x: %d, y: %d"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:138
-#, c-format
-msgid "lifted x: %d y: %d"
-msgstr ""
-
-#: libdevice/events/TouchDevice.cpp:244
-msgid "WARNING: Error parsing calibration data!"
-msgstr ""
+msgstr "启动USB设备: %s"
 
-#: libdevice/events/TouchDevice.cpp:246
+#: libdevice/events/InputDevice.cpp:136
 #, c-format
-msgid ""
-"Using touchscreen calibration data: %.0f / %.0f / %.0f / %.0f / %.0f / %.0f"
-msgstr ""
+msgid "The device has this error: %s"
+msgstr "该设备发生错误: %s"
 
-#: libdevice/events/TouchDevice.cpp:249
+#: libdevice/events/InputDevice.cpp:211
 msgid ""
-"WARNING: No touchscreen calibration settings found. The mouse pointer most "
-"probably won't work precisely. Set TSCALIB environment variable with correct "
-"values for better results"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:46
-msgid "ioctl(UI_DEV_DESTROY)"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:82
-#, c-format
-msgid "Found a User mode input device at %s"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:98
-msgid "User Mode Input device not initialized yet!"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:103
-msgid "ioctl(UI_SET_EVBIT, EV_KEY)"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:109
-msgid "ioctl(UI_SET_EVBIT, EV_REL)"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:113
-msgid "ioctl(UI_SET_RELBIT, REL_X)"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:117
-msgid "ioctl( UI_SET_RELBIT, REL_Y)"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:142
-msgid "write uidev"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:147
-#, c-format
-msgid "ioctl(UI_SET_EVBIT, EV_ABS): %s"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:151
-#, c-format
-msgid "ioctl(UI_SET_ABSBIT,ABS_X): %s"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:155
-#, c-format
-msgid "ioctl(UI_SET_ABSBIT, ABS_Y): %s"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:161
-#, c-format
-msgid "ioctl(UI_SET_KEYBIT, BTN_LEFT)): %s"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:165
-#, c-format
-msgid "ioctl(UI_SET_KEYBIT, BTN_RIGHT): %s"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:169
-#, c-format
-msgid "ioctl(UI_SET_EVBIT, ABS_PRESSURE): %s"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:177
-#, c-format
-msgid "ioctl(UI_SET_KEYBIT, BTN_MOUSE): %s"
-msgstr ""
-
-#: libdevice/events/UinputDevice.cpp:182
-msgid "ioctl(UI_DEV_CREATED) failed!"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:63
-msgid "Couldn't initialize RAWFB device!"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:94
-msgid "Freeing framebuffer memory"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:99
-msgid "Freeing offscreen buffer"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:118
-#, c-format
-msgid "WARNING: Using %s as a fake framebuffer!"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:133
-#, c-format
-msgid "Could not open framebuffer device: %s"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:136
-#, c-format
-msgid "Opened framebuffer device: %s"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:147
-#, c-format
-msgid "Framebuffer device uses %d bytes of memory."
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:149
-#, c-format
-msgid "Video mode: %dx%d with %d bits per pixel."
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:153
-#, c-format
-msgid "Framebuffer stride is: %d."
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:167
-msgid "LUT8: Setting up colormap"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:192
-#, c-format
-msgid "LUT8: Error setting colormap: %s"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:376
-msgid "Couldn't write to the fake cmap!"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:380
-msgid "Couldn't write to the fake cmap, unknown type!"
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:394
-msgid "Signaled fbe to reload it's colormap."
-msgstr ""
-
-#: libdevice/rawfb/RawFBDevice.cpp:401
-#, c-format
-msgid "fakefb_ioctl(%d)"
-msgstr ""
+"WARNING: PS/2 Mouse support disabled as it conflicts with the input event "
+"support."
+msgstr "警告:PS/2鼠标支持与输入事件支持冲突时被禁用。"
 
 #: libdevice/directfb/DirectFBDevice.cpp:78
 msgid "Couldn't initialize DirectFB device!"
-msgstr ""
+msgstr "无法初始化 DirectFB 设备!"
 
 #: libdevice/directfb/DirectFBDevice.cpp:114
 #, c-format
 msgid "DirectFBInit(): %s"
-msgstr ""
+msgstr "DirectFBInit(): %s"
 
 #: libdevice/directfb/DirectFBDevice.cpp:119
 #, c-format
 msgid "DirectFBCreate(): %s"
-msgstr ""
+msgstr "DirectFBCreate(): %s"
 
 #: libdevice/directfb/DirectFBDevice.cpp:146
 #, c-format
 msgid "CreateSurface(): %s"
-msgstr ""
+msgstr "CreateSurface(): %s"
 
 #: libdevice/directfb/DirectFBDevice.cpp:158
 #, c-format
 msgid "CreateFont(): %s"
-msgstr ""
+msgstr "CreateFont(): %s"
 
 #: libdevice/directfb/DirectFBDevice.cpp:165
 #, c-format
 msgid "CreateImageProvider(): %s"
-msgstr ""
+msgstr "CreateImageProvider(): %s"
 
 #: libdevice/directfb/DirectFBDevice.cpp:171
 #, c-format
 msgid "GetDisplayLayer(): %s"
-msgstr ""
+msgstr "GetDisplayLayer(): %s"
 
 #: libdevice/directfb/DirectFBDevice.cpp:175
 #, c-format
 msgid "GetScreen(): %s"
-msgstr ""
+msgstr "GetScreen(): %s"
 
 #: libdevice/directfb/DirectFBDevice.cpp:512
 #, c-format
 msgid "GetDescription(): %s"
-msgstr ""
+msgstr "GetDescription(): %s"
 
 #: libdevice/directfb/DirectFBDevice.cpp:901
 msgid "iDirectFB data not set!"
-msgstr ""
+msgstr "iDirectFB 数据未设置!"
 
-#: libdevice/x11/X11Device.cpp:88 libdevice/x11/X11Device.cpp:106
-msgid "Couldn't initialize X11 device!"
-msgstr ""
-
-#: libdevice/x11/X11Device.cpp:142
-msgid "couldn't open X11 display!"
-msgstr ""
+#: libsound/aos4/sound_handler_ahi.cpp:125
+msgid "AOS4: Spawn Audio Process."
+msgstr "AOS4: 衍生音频进程。"
 
-#: libdevice/x11/X11Device.cpp:162
-msgid "Error: couldn't get X visual\n"
-msgstr ""
+#: libsound/aos4/sound_handler_ahi.cpp:136
+msgid "Unable to create Death Message for child!!"
+msgstr "无法为儿童创建死亡消息!!"
 
-#: libdevice/x11/X11Device.cpp:199
-msgid "The default Display is not set!"
-msgstr ""
+#: libsound/aos4/sound_handler_ahi.cpp:162
+msgid "AOS4: Audio Process spawned."
+msgstr "AOS4: 音频进程已衍生。"
 
-#: libdevice/x11/X11Device.cpp:212
-msgid "No Display device set!"
-msgstr ""
-
-#: libdevice/x11/X11Device.cpp:217
-msgid "No drawable window set!"
-msgstr ""
-
-#: libsound/WAVWriter.cpp:65
-#, fuzzy
-msgid "Unable to write file %1%"
-msgstr "无法写文件“%s”"
-
-#: libsound/mkit/sound_handler_mkit.cpp:75
-msgid "Unable to open audio"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:339
-msgid "Mkit: Mkit_sound_handler::pause"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:343
-msgid "Mkit: paused"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:351
-msgid "Mkit: Mkit_sound_handler::unpause"
-msgstr ""
-
-#: libsound/mkit/sound_handler_mkit.cpp:355
-msgid "Mkit: unpaused"
-msgstr ""
-
-#: libsound/aos4/sound_handler_ahi.cpp:125
-msgid "AOS4: Spawn Audio Process."
-msgstr ""
-
-#: libsound/aos4/sound_handler_ahi.cpp:136
-msgid "Unable to create Death Message for child!!"
-msgstr ""
-
-#: libsound/aos4/sound_handler_ahi.cpp:162
-msgid "AOS4: Audio Process spawned."
-msgstr ""
-
-#: libsound/aos4/sound_handler_ahi.cpp:167
-msgid "Unable to create Audio Process!!"
-msgstr ""
+#: libsound/aos4/sound_handler_ahi.cpp:167
+msgid "Unable to create Audio Process!!"
+msgstr "无法创建音频进程!!"
 
 #: libsound/aos4/sound_handler_ahi.cpp:438
 msgid "AOS4: AOS4_sound_handler::pause"
-msgstr ""
+msgstr "AOS4: AOS4_sound_handler::pause"
 
 #: libsound/aos4/sound_handler_ahi.cpp:440
 msgid "AOS4: paused"
-msgstr ""
+msgstr "AOS4: 已暂停"
 
 #: libsound/aos4/sound_handler_ahi.cpp:450
 msgid "AOS4: AOS4_sound_handler::unpause"
-msgstr ""
+msgstr "AOS4: AOS4_sound_handler::unpause"
 
 #: libsound/aos4/sound_handler_ahi.cpp:452
 msgid "AOS4: unpaused"
-msgstr ""
+msgstr "AOS4: 暂停已取消"
 
 #: libsound/aos4/sound_handler_ahi.cpp:542
 msgid "AOS4: Unable to allocate memory for audio buffer!"
-msgstr ""
+msgstr "AOS4: 无法为音频缓冲分配内存!"
 
 #: libsound/aos4/sound_handler_ahi.cpp:562
 msgid "AOS4: Unable to open AHI Device!"
-msgstr ""
+msgstr "AOS4: 无法打开 AHI 设备!"
 
 #: libsound/aos4/sound_handler_ahi.cpp:572
 msgid "AOS4: Unable to CreateIORequest!"
-msgstr ""
+msgstr "AOS4: 无法 CreateIORequest!"
 
 #: libsound/aos4/sound_handler_ahi.cpp:580
 msgid "AOS4: Unable to CreateMsgPort for AHI Device!"
-msgstr ""
+msgstr "AOS4: 无法为 AHI 设备 CreateMsgPort for!"
 
 #: libsound/aos4/sound_handler_ahi.cpp:591
 msgid "AOS4: Not enough memory for AHIiocopy!"
-msgstr ""
+msgstr "AOS4: 没有足够的 AHIiocopy 所需内存!"
 
 #: libsound/aos4/sound_handler_ahi.cpp:607
+#, fuzzy
 msgid "AOS4: audioTask:Initialize timer."
-msgstr ""
+msgstr "AOS4: audioTask:初始化定时器.."
 
 #: libsound/aos4/sound_handler_ahi.cpp:610
+#, fuzzy
 msgid "AOS4: audioTask:Starting Timer."
-msgstr ""
+msgstr "AOS4: audioTask:启动定时器.."
 
 #: libsound/aos4/sound_handler_ahi.cpp:621
+#, fuzzy
 msgid "AOS4: Closing Audio Thread."
-msgstr ""
+msgstr "AOS4: 关闭音频线程.."
 
 #: libsound/aos4/sound_handler_ahi.cpp:641
+#, fuzzy
 msgid "AOS4: Cleaning Audio Stuff."
-msgstr ""
+msgstr "AOS4: 清除音频素材.."
 
 #: libsound/aos4/sound_handler_ahi.cpp:675
+#, fuzzy
 msgid "AOS4: Exit Audio Thread."
-msgstr ""
+msgstr "AOS4: 退出音频线程.."
 
 #: libsound/aos4/sound_handler_ahi.cpp:677
+#, fuzzy
 msgid "AOS4: audioTask:Close timer."
-msgstr ""
+msgstr "AOS4: audioTask:关闭定时器.."
+
+#: libsound/mkit/sound_handler_mkit.cpp:75
+msgid "Unable to open audio"
+msgstr "无法打开音频"
+
+#: libsound/mkit/sound_handler_mkit.cpp:339
+msgid "Mkit: Mkit_sound_handler::pause"
+msgstr "Mkit: Mkit_sound_handler::pause"
+
+#: libsound/mkit/sound_handler_mkit.cpp:343
+msgid "Mkit: paused"
+msgstr "Mkit: 暂停"
+
+#: libsound/mkit/sound_handler_mkit.cpp:351
+msgid "Mkit: Mkit_sound_handler::unpause"
+msgstr "Mkit: Mkit_sound_handler::unpause"
+
+#: libsound/mkit/sound_handler_mkit.cpp:355
+msgid "Mkit: unpaused"
+msgstr "Mkit: 取消暂停"
 
 #: libsound/sdl/sound_handler_sdl.cpp:91
 #, c-format
 msgid "Couldn't open SDL audio: %s"
-msgstr ""
+msgstr "无法打开 SDL 音频: %s"
 
 #: libsound/sdl/sound_handler_sdl.cpp:261
 #, c-format
 msgid "Negative buffer length in sdl_audio_callback (%d)"
-msgstr ""
+msgstr "sdl_audio_callback 中缓冲区长度为负数 (%d)"
 
 #: libsound/sdl/sound_handler_sdl.cpp:267
 msgid "Zero buffer length in sdl_audio_callback"
-msgstr ""
+msgstr " sdl_audio_callback 中缓冲区长度为 0"
 
-#: libsound/sound_handler.cpp:70
+#: libsound/sound_handler.cpp:71
 msgid ""
 "Sound data creator didn't appropriately pad buffer. We'll do so now, but "
 "will cost memory copies."
-msgstr ""
+msgstr "声音数据创建者没有相应的填补缓冲。所以现在我们会做,将花费内存拷贝。"
 
-#: libsound/sound_handler.cpp:83
+#: libsound/sound_handler.cpp:84
 #, c-format
 msgid "Invalid (%d) handle passed to fill_stream_data, doing nothing"
-msgstr ""
+msgstr "无效(%d)句柄传递给 fill_stream_data,略过"
 
-#: libsound/sound_handler.cpp:90
+#: libsound/sound_handler.cpp:91
 #, c-format
 msgid "handle passed to fill_stream_data (%d) was deleted"
-msgstr ""
+msgstr "传给 fill_stream_data (%d) 的句柄被删除"
 
-#: libsound/sound_handler.cpp:141
+#: libsound/sound_handler.cpp:142
 #, c-format
 msgid "Invalid (%d) handle passed to delete_sound, doing nothing"
-msgstr ""
+msgstr "无效(%d)句柄传递给 delete_sound,略过"
 
-#: libsound/sound_handler.cpp:152
+#: libsound/sound_handler.cpp:153
 #, c-format
 msgid "handle passed to delete_sound (%d) already deleted"
-msgstr ""
+msgstr "传给 delete_sound (%d) 的句柄已经被删除"
 
-#: libsound/sound_handler.cpp:236
+#: libsound/sound_handler.cpp:237
 #, c-format
 msgid "stop_sound(%d): sound was deleted"
-msgstr ""
+msgstr "stop_sound(%d): 声音被删除"
 
-#: libsound/sound_handler.cpp:324
+#: libsound/sound_handler.cpp:325
 #, c-format
 msgid "SDL_sound_handler::unplugInputStream: Aux streamer %p not found. "
-msgstr ""
+msgstr "SDL_sound_handler::unplugInputStream: 未找到辅助流 %p。"
 
-#: libsound/sound_handler.cpp:454
+#: libsound/sound_handler.cpp:455
 #, c-format
 msgid "Could not start streaming sound: %s"
-msgstr ""
+msgstr "无法启动的声音流:%s"
 
-#: libsound/sound_handler.cpp:465
+#: libsound/sound_handler.cpp:466
 #, c-format
 msgid "Invalid (%d) sound_handle passed to startSound, doing nothing"
-msgstr ""
+msgstr "无效(%d) sound_handle传递给 startSound,略过"
 
-#: libsound/sound_handler.cpp:531
+#: libsound/sound_handler.cpp:532
 msgid "Trying to play sound with size 0"
-msgstr ""
+msgstr "尝试播放大小为0的声音"
 
-#: libsound/sound_handler.cpp:545
+#: libsound/sound_handler.cpp:546
 #, c-format
 msgid "Could not start event sound: %s"
-msgstr ""
+msgstr "无法启动事件声音:%s"
 
-#: libsound/sound_handler.cpp:559
+#: libsound/sound_handler.cpp:560
 #, c-format
 msgid "_inputStreams container still has a pointer to deleted InputStream %p!"
-msgstr ""
+msgstr "_inputStreams 容器仍有一个指针指向已删除的 InputStream %p!"
 
-#: libsound/sound_handler.cpp:704
+#: libsound/sound_handler.cpp:705
 #, c-format
 msgid "Expected 1 InputStream element, found %d"
-msgstr ""
+msgstr "预计 1 个 InputStream 元素,找到 %d 个"
 
-#: utilities/soldumper.cpp:72
-msgid "This program dumps the internal data of a .sol file"
-msgstr ""
-
-#: utilities/soldumper.cpp:74
-msgid "Usage: soldumper [h] filename"
-msgstr ""
+#: libsound/WAVWriter.cpp:64
+msgid "Unable to write file %1%"
+msgstr "无法写文件 %1%"
 
-#: utilities/soldumper.cpp:75 utilities/dumpshm.cpp:344
-#: utilities/flvdumper.cpp:305
-msgid "-h\tHelp"
-msgstr ""
+#: utilities/processor.cpp:151
+#, c-format
+msgid "fs_callback(%p): %s %s"
+msgstr "fs_callback(%p): %s %s"
 
-#: utilities/soldumper.cpp:76
-msgid "-f\tForce local directory access"
-msgstr ""
+#: utilities/processor.cpp:169
+#, c-format
+msgid "eventCallback: %s %s"
+msgstr "eventCallback: %s %s"
 
-#: utilities/soldumper.cpp:77
-msgid "-l\tList all .sol files in default dir"
-msgstr ""
+#: utilities/processor.cpp:205
+msgid "gprocessor does not handle %1% message"
+msgstr "gprocessor 不处理 %1% 消息"
 
-#: utilities/soldumper.cpp:105
+#: utilities/processor.cpp:240 cygnal/cvm.cpp:227
 #, c-format
-msgid "Gnash soldumper version: %s, Gnash version: %s\n"
-msgstr ""
+msgid "Gnash gprocessor version: %s, Gnash version: %s\n"
+msgstr "Gnash gprocessor 版本: %s, Gnash 版本: %s\n"
 
-#: utilities/soldumper.cpp:121 utilities/processor.cpp:276
-#: utilities/flvdumper.cpp:154 cygnal/cygnal.cpp:476
-#: cygnal/cgi-bin/echo/echo.cpp:144 cygnal/cgi-bin/echo/gateway.cpp:119
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:149
+#: utilities/processor.cpp:279 utilities/flvdumper.cpp:154
+#: utilities/soldumper.cpp:121 cygnal/cygnal.cpp:482
 #: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:216
-#: cygnal/testsuite/libnet.all/test_handler.cpp:103
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:95
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:149
+#: cygnal/cgi-bin/echo/gateway.cpp:119 cygnal/cgi-bin/echo/echo.cpp:144
 #: cygnal/testsuite/libnet.all/test_rtmp.cpp:110
 #: cygnal/testsuite/libnet.all/test_diskstream.cpp:91
+#: cygnal/testsuite/libnet.all/test_handler.cpp:103
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:95
 #: cygnal/testsuite/libnet.all/test_cache.cpp:94
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:103
-#: cygnal/testsuite/libamf.all/test_sol.cpp:103
-#: cygnal/testsuite/libamf.all/test_flv.cpp:92
 #: cygnal/testsuite/libamf.all/test_el.cpp:91
 #: cygnal/testsuite/libamf.all/test_buffer.cpp:108
+#: cygnal/testsuite/libamf.all/test_flv.cpp:92
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:103
+#: cygnal/testsuite/libamf.all/test_sol.cpp:103
 #: cygnal/testsuite/libamf.all/test_amf.cpp:109
 msgid "Verbose output turned on"
-msgstr ""
-
-#: utilities/soldumper.cpp:125
-msgid "forcing local directory access only"
-msgstr ""
-
-#: utilities/soldumper.cpp:130
-msgid "List .sol files in the default directory"
-msgstr ""
-
-#: utilities/processor.cpp:148
-#, c-format
-msgid "fs_callback(%p): %s %s"
-msgstr ""
-
-#: utilities/processor.cpp:166
-#, c-format
-msgid "eventCallback: %s %s"
-msgstr ""
-
-#: utilities/processor.cpp:202
-msgid "gprocessor does not handle %1% message"
-msgstr ""
-
-#: utilities/processor.cpp:237 cygnal/cvm.cpp:227
-#, c-format
-msgid "Gnash gprocessor version: %s, Gnash version: %s\n"
-msgstr ""
+msgstr "打开详细输出"
 
-#: utilities/processor.cpp:285 cygnal/cvm.cpp:282
+#: utilities/processor.cpp:288 cygnal/cvm.cpp:282
 msgid "Verbose actions disabled at compile time"
-msgstr ""
+msgstr "在编译时禁用详细的动作"
 
-#: utilities/processor.cpp:292 cygnal/cvm.cpp:289
+#: utilities/processor.cpp:295 cygnal/cvm.cpp:289
 msgid "Verbose parsing disabled at compile time"
-msgstr ""
+msgstr "在编译时禁用详细的解析"
 
-#: utilities/processor.cpp:456 utilities/processor.cpp:459
+#: utilities/processor.cpp:466 utilities/processor.cpp:469
 #: gui/pythonmod/gnash-view.cpp:438 gui/pythonmod/gnash-view.cpp:441
 #, c-format
 msgid "%s appended to local sandboxes"
 msgstr "%s 已附加到本地沙盒"
 
-#: utilities/processor.cpp:631
+#: utilities/processor.cpp:641
 #, c-format
 msgid ""
 "gprocessor -- an SWF processor for Gnash.\n"
@@ -7986,8 +8069,15 @@ msgid ""
 "\n"
 "%s%s%s%s"
 msgstr ""
+"gprocessor -- 一个  Gnash 的 SWF 处理程序。\n"
+"\n"
+"用法: %s [options] <file>\n"
+"\n"
+"处理指定的 SWF 影片文件。\n"
+"\n"
+"%s%s%s%s"
 
-#: utilities/processor.cpp:638
+#: utilities/processor.cpp:648
 msgid ""
 "options:\n"
 "\n"
@@ -7995,16 +8085,21 @@ msgid ""
 "  --version   Print the version numbers.\n"
 "  -v          Be verbose; i.e. print log messages to stdout\n"
 msgstr ""
+"选项:\n"
+"\n"
+"--help(-h) 打印本信息。\n"
+"--version 打印版本号。\n"
+"-v 详细日志;例如打印日志消息到标准输出\n"
 
-#: utilities/processor.cpp:645
+#: utilities/processor.cpp:655
 msgid "  -vp         Be verbose about movie parsing\n"
-msgstr ""
+msgstr "-vp 影片解析的详细日志\n"
 
-#: utilities/processor.cpp:650
+#: utilities/processor.cpp:660
 msgid "  -va         Be verbose about ActionScript\n"
-msgstr ""
+msgstr "-va ActionScript的详细日志\n"
 
-#: utilities/processor.cpp:655
+#: utilities/processor.cpp:665
 msgid ""
 "  -d [<ms>]\n"
 "              Milliseconds delay between advances (0 by default).\n"
@@ -8017,3471 +8112,3528 @@ msgid ""
 "              Keep advancing untill any other stop condition\n"
 "              is encountered if set to 0 (default).\n"
 msgstr ""
+"-d [<ms>]\n"
+"帧进间的毫秒延迟(默认为0)。\n"
+"如果为 '-1',将从FPS计算延迟。\n"
+"-r <times> 允许给定的完全运行的数量。\n"
+"如果设置为0, 无限循环。\n"
+"缺省为1 (到达最后一帧时马上结束)。\n"
+"-f <frames> \n"
+"允许给定数量的帧进。\n"
+"如果设置为0(默认),不断前进,直到任何别的停止条件满足。\n"
+
+#: utilities/flvdumper.cpp:172 cygnal/testsuite/libnet.all/test_rtmp.cpp:120
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:100
+#: cygnal/testsuite/libnet.all/test_handler.cpp:112
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:111
+#: cygnal/testsuite/libnet.all/test_cache.cpp:103
+#: cygnal/testsuite/libamf.all/test_el.cpp:107
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:123
+#: cygnal/testsuite/libamf.all/test_flv.cpp:103
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:119
+#: cygnal/testsuite/libamf.all/test_sol.cpp:113
+#: cygnal/testsuite/libamf.all/test_amf.cpp:125
+msgid "Error parsing command line options: "
+msgstr "解析命令行选项错误:"
+
+#: utilities/flvdumper.cpp:173
+msgid "This is a Gnash flvdumper bug."
+msgstr "这是一个 Gnash flvdumper 的错误。"
+
+#: utilities/flvdumper.cpp:178
+msgid "Error: no input file was specified. Exiting."
+msgstr "错误:未指定输入文件。退出。"
+
+#: utilities/flvdumper.cpp:302
+msgid "This program dumps the internal data of an FLV video file"
+msgstr "该程序会转储一个 FLV 视频文件的内部数据"
+
+#: utilities/flvdumper.cpp:304
+msgid "Usage: flvdumper [-h] [-m] [-a] filename"
+msgstr "用法: flvdumper [-h] [-m] [-a] filename"
+
+#: utilities/flvdumper.cpp:305 utilities/dumpshm.cpp:344
+#: utilities/soldumper.cpp:75
+msgid "-h\tHelp"
+msgstr "-h\t帮助"
+
+#: utilities/flvdumper.cpp:306
+msgid "-m\tPrint only Meta tags (default)"
+msgstr "-m\t只打印 Meta 标签 (缺省)"
+
+#: utilities/flvdumper.cpp:307
+msgid "-a\tPrint all tags."
+msgstr "-a\t打印所有标签。"
+
+#: utilities/rtmpget.cpp:445
+msgid "Error parsing command line: "
+msgstr "错误解析命令行:"
 
 #: utilities/dumpshm.cpp:136
 #, c-format
 msgid "Gnash dumpshm version: %s, Gnash version: %s\n"
-msgstr ""
+msgstr "Gnash dumpshm 版本: %s, Gnash 版本: %s\n"
 
 #: utilities/dumpshm.cpp:214
 #, c-format
 msgid "Will use \"%s\" for memory segment file"
-msgstr ""
+msgstr "将使用内存段文件  \"%s\""
 
 #: utilities/dumpshm.cpp:230
 msgid "No LcShmKey set in ~/.gnashrc, trying to find it ourselves"
-msgstr ""
+msgstr " ~/.gnashrc 中没有设置 LcShmKey, 试图自己找到它"
 
 #: utilities/dumpshm.cpp:239
 msgid "No shared memory segments found!"
-msgstr ""
+msgstr "没有发现共享内存段!"
 
 #: utilities/dumpshm.cpp:243
 #, c-format
 msgid "Existing SHM Key is: %s, Size is: %s"
-msgstr ""
+msgstr "现有 SHM Key 是: %s, 大小: %s"
 
 #: utilities/dumpshm.cpp:258
 msgid "Writing memory segment to disk: \"segment.raw\""
-msgstr ""
+msgstr "写入内存段到磁盘:\"segment.raw\""
 
 #: utilities/dumpshm.cpp:263
 #, c-format
 msgid "The data is: 0x%s"
-msgstr ""
+msgstr "数据是: 0x%s"
 
 #: utilities/dumpshm.cpp:303
 msgid "kernel not configured for shared memory"
-msgstr ""
+msgstr "内核没有配置共享内存"
 
 #: utilities/dumpshm.cpp:318
 #, c-format
 msgid "Found it! \"set LCShmKey %s\" in your ~/.gnashrc"
-msgstr ""
+msgstr "找到了!在你的 ~/.gnashrc中 \"设置 LCShmKey %s\" "
 
 #: utilities/dumpshm.cpp:321
 #, c-format
 msgid "Last changed on: %s"
-msgstr ""
+msgstr "最后修改: %s"
 
 #: utilities/dumpshm.cpp:322
 #, c-format
 msgid "Last attached on: %s"
-msgstr ""
+msgstr "最后连接: %s"
 
 #: utilities/dumpshm.cpp:323
 #, c-format
 msgid "Last detached on: %s"
-msgstr ""
+msgstr "最后分离: %s"
 
 #: utilities/dumpshm.cpp:341
 msgid "This program dumps the internal data of a shared memory segment"
-msgstr ""
+msgstr "该程序会转储一个共享内存段的内部数据"
 
 #: utilities/dumpshm.cpp:343
 msgid "Usage: dumpshm [hdsanlif] filename"
-msgstr ""
+msgstr "用法: dumpshm [hdsanlif] filename"
 
 #: utilities/dumpshm.cpp:345
 msgid "-i\tList segments"
-msgstr ""
+msgstr "-i\t列举分段"
 
 #: utilities/dumpshm.cpp:346
 msgid "-r\tDump SYSV segments"
-msgstr ""
+msgstr "-r\t转储 SYSV 段"
 
 #: utilities/dumpshm.cpp:347
 msgid "-c\tDump SYSV segments to disk"
-msgstr ""
+msgstr "-c\t转储 SYSV 段到磁盘"
 
 #: utilities/dumpshm.cpp:348
 msgid "-v\tVerbose output"
-msgstr ""
+msgstr "-v\t详细输出"
 
 #: utilities/dumpshm.cpp:360
 msgid "\tBase address of this segment: "
-msgstr ""
+msgstr "\t该段的基址:"
 
 #: utilities/dumpshm.cpp:362
 msgid "\tFilespec: "
-msgstr ""
+msgstr "\t文件说明:"
 
 #: utilities/dumpshm.cpp:363
 msgid "\t# Bytes allocated: "
-msgstr ""
+msgstr "\t分配字节数:"
 
 #: utilities/dumpshm.cpp:364
 msgid "\tTotal # of bytes: "
-msgstr ""
+msgstr "\t总计字节数:"
 
-#: utilities/flvdumper.cpp:172
-#: cygnal/testsuite/libnet.all/test_handler.cpp:112
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:111
-#: cygnal/testsuite/libnet.all/test_rtmp.cpp:120
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:100
-#: cygnal/testsuite/libnet.all/test_cache.cpp:103
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:119
-#: cygnal/testsuite/libamf.all/test_sol.cpp:113
-#: cygnal/testsuite/libamf.all/test_flv.cpp:103
-#: cygnal/testsuite/libamf.all/test_el.cpp:107
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:123
-#: cygnal/testsuite/libamf.all/test_amf.cpp:125
-msgid "Error parsing command line options: "
-msgstr ""
+#: utilities/soldumper.cpp:72
+msgid "This program dumps the internal data of a .sol file"
+msgstr "该程序将存放一个 .sol 文件的内部数据"
 
-#: utilities/flvdumper.cpp:173
-msgid "This is a Gnash flvdumper bug."
-msgstr ""
+#: utilities/soldumper.cpp:74
+msgid "Usage: soldumper [h] filename"
+msgstr "用法: soldumper [h] filename"
 
-#: utilities/flvdumper.cpp:178
-msgid "Error: no input file was specified. Exiting."
-msgstr "错误:未指定输入文件。退出。"
+#: utilities/soldumper.cpp:76
+msgid "-f\tForce local directory access"
+msgstr "-f\t强制本地目录访问"
 
-#: utilities/flvdumper.cpp:302
-msgid "This program dumps the internal data of an FLV video file"
-msgstr ""
+#: utilities/soldumper.cpp:77
+msgid "-l\tList all .sol files in default dir"
+msgstr "-l\t在缺省目录中列举所有的 .sol 文件"
 
-#: utilities/flvdumper.cpp:304
-msgid "Usage: flvdumper [-h] [-m] [-a] filename"
-msgstr ""
-
-#: utilities/flvdumper.cpp:306
-msgid "-m\tPrint only Meta tags (default)"
-msgstr ""
+#: utilities/soldumper.cpp:105
+#, c-format
+msgid "Gnash soldumper version: %s, Gnash version: %s\n"
+msgstr "Gnash soldumper 版本: %s, Gnash 版本: %s\n"
 
-#: utilities/flvdumper.cpp:307
-msgid "-a\tPrint all tags."
-msgstr ""
+#: utilities/soldumper.cpp:125
+msgid "forcing local directory access only"
+msgstr "只强制本地目录访问"
 
-#: utilities/rtmpget.cpp:445
-msgid "Error parsing command line: "
-msgstr ""
+#: utilities/soldumper.cpp:130
+msgid "List .sol files in the default directory"
+msgstr "列举默认目录中的 .sol文件"
 
-#: plugin/win32/plugin.cpp:590 plugin/aos4/plugin.cpp:593
+#: plugin/aos4/plugin.cpp:593 plugin/win32/plugin.cpp:590
 #, c-format
 msgid "FSCommand_callback(%p): %s %s"
-msgstr ""
-
-#: cygnal/libamf/flv.cpp:94
-msgid "Bad magic number for FLV file!"
-msgstr ""
+msgstr "FSCommand_callback(%p): %s %s"
 
-#: cygnal/libamf/flv.cpp:101
-#, c-format
-msgid "Bad version in FLV header! %d"
-msgstr ""
+#: cygnal/rtmp_server.cpp:124
+msgid "Failed to read the handshake from the client."
+msgstr "无法读取来自客户端的握手。"
 
-#: cygnal/libamf/flv.cpp:110
-#, c-format
-msgid "Bad FLV file Type: %d"
-msgstr ""
+#: cygnal/rtmp_server.cpp:139
+msgid "failed to read the handshake from the client."
+msgstr "无法读取来自客户端的握手。"
 
-#: cygnal/libamf/flv.cpp:123
-#, c-format
-msgid "Bad header size in FLV header! %d"
-msgstr ""
+#: cygnal/rtmp_server.cpp:149
+msgid "Didn't receive any data in handshake!"
+msgstr "不接收握手中的任何数据!"
 
-#: cygnal/libamf/flv.cpp:156
-#, c-format
-msgid "%d bytes for a string is over the safe limit of %d"
-msgstr ""
+#: cygnal/rtmp_server.cpp:160
+msgid "RTMP header had parsing error!"
+msgstr "RTMP 头部有解析错误!"
 
-#: cygnal/libamf/flv.cpp:186
+#: cygnal/rtmp_server.cpp:168
 #, c-format
-msgid "Bad FLV Audio Sound Type: %x"
-msgstr ""
+msgid "NetConnection unusually large! %d"
+msgstr "NetConnection 超常大! %d"
 
-#: cygnal/libamf/flv.cpp:195
-#, c-format
-msgid "Bad FLV Audio Sound size: %d"
-msgstr ""
+#: cygnal/rtmp_server.cpp:202
+msgid "failed to read the body of the handshake data from the client."
+msgstr "无法读取来自客户端握手数据的主体。"
 
-#: cygnal/libamf/flv.cpp:209
-#, c-format
-msgid "Bad FLV Audio Sound Rate: %d"
-msgstr ""
+#: cygnal/rtmp_server.cpp:210
+msgid "Didn't receive NetConnection object in handshake!"
+msgstr "没有接收握手中的 NetConnection 对象!"
 
-#: cygnal/libamf/flv.cpp:226
-#, c-format
-msgid "Bad FLV Audio Sound format: %d"
-msgstr ""
+#: cygnal/rtmp_server.cpp:234
+msgid "Couldn't send onBWDone to client!"
+msgstr "无法发送 onBWDone 到客户端!"
 
-#: cygnal/libamf/flv.cpp:257
-#, c-format
-msgid "Bad FLV Video Codec CodecID: 0x%x"
-msgstr ""
+#: cygnal/rtmp_server.cpp:261 cygnal/rtmp_server.cpp:1704
+msgid "Couldn't send Ping to client!"
+msgstr "无法发送 Ping 到客户端!"
 
-#: cygnal/libamf/flv.cpp:267
-#, c-format
-msgid "Bad FLV Video Frame CodecID: 0x%x"
-msgstr ""
+#: cygnal/rtmp_server.cpp:275
+msgid "Couldn't send response to client!"
+msgstr "无法发送响应到客户端!"
 
-#: cygnal/libamf/flv.cpp:340 cygnal/libamf/flv.cpp:342
-#: cygnal/libamf/flv.cpp:344
+#: cygnal/rtmp_server.cpp:338
 #, c-format
-msgid "FLV MetaData: %s: %s"
-msgstr ""
+msgid "Couldn't sent RTMP Handshake response at %d!"
+msgstr "无法发送 在 %d 的 RTMP 握手响应!"
 
-#: cygnal/libamf/lcshm.cpp:372
-msgid "No data pointer to parse!"
-msgstr ""
+#: cygnal/rtmp_server.cpp:355
+msgid "No data in original handshake buffer."
+msgstr "在原来的握手缓冲区中没有数据。"
 
-#: cygnal/libamf/lcshm.cpp:391
-msgid "Didn't extract an element from the byte stream!"
-msgstr ""
+#: cygnal/rtmp_server.cpp:359
+msgid "No data in response handshake buffer."
+msgstr "在响应握手缓冲区中没有数据。"
 
-#: cygnal/libamf/lcshm.cpp:503
+#: cygnal/rtmp_server.cpp:387
 #, c-format
-msgid " The size of %s is %d "
-msgstr ""
+msgid "Handshake Finish Data didn't match by %d bytes"
+msgstr "握手完成数据有 %d 字节不匹配"
 
-#: cygnal/libamf/lcshm.cpp:520
-#, c-format
-msgid "Failed to open shared memory segment: \"%s\""
-msgstr ""
+#: cygnal/rtmp_server.cpp:555
+msgid "Route"
+msgstr "路由"
 
-#: cygnal/libamf/lcshm.cpp:561
-#, c-format
-msgid "Failed to open shared memory segment: 0x%x"
-msgstr ""
+#: cygnal/rtmp_server.cpp:567
+msgid "AMF3 Notify"
+msgstr "AMF3 通知"
 
-#: cygnal/libamf/lcshm.cpp:660
-#, c-format
-msgid " ***** The size of the data is %s *****"
-msgstr ""
+#: cygnal/rtmp_server.cpp:573
+msgid "AMF3 Invoke"
+msgstr "AMF3 调用"
 
-#: cygnal/libamf/element.cpp:175
-msgid "Can't create remote function calls yet"
-msgstr ""
+#: cygnal/rtmp_server.cpp:582
+msgid "FLV Dat"
+msgstr "FLV Dat"
 
-#: cygnal/libamf/element.cpp:479
+#: cygnal/rtmp_server.cpp:585
 #, c-format
-msgid "Size of Element \"%s\" is: %d"
-msgstr ""
+msgid "ERROR: Unidentified RTMP message content type 0x%x"
+msgstr "错误: 未标识的 RTMP 消息内容类型 0x%x"
 
-#: cygnal/libamf/element.cpp:1534
-msgid "FIXME: got AMF3 data!"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1105
+msgid "Couldn't reliably extract the echo data!"
+msgstr "无法可靠地提取回应数据!"
 
-#: cygnal/libamf/sol.cpp:230
+#: cygnal/rtmp_server.cpp:1402
 #, c-format
-msgid ""
-"%s: SOL file header is: \n"
-"%s"
-msgstr ""
+msgid "No stream for client %d"
+msgstr "没有客户端 %d 的流"
 
-#: cygnal/libamf/sol.cpp:250
-#, c-format
-msgid "Failed opening file '%s' in binary mode"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1444
+msgid "Stream Start"
+msgstr "流开始"
 
-#: cygnal/libamf/sol.cpp:337
-#, c-format
-msgid "Error writing %d bytes of header to output file %s"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1447
+msgid "Stream EOF"
+msgstr "流结束"
 
-#: cygnal/libamf/sol.cpp:344
-#, c-format
-msgid "Error writing %d bytes of body to output file %s"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1450
+msgid "Stream No Data"
+msgstr "流没有数据"
 
-#: cygnal/libamf/sol.cpp:404
+#: cygnal/rtmp_server.cpp:1453
 #, c-format
-msgid "%s is an SOL file"
-msgstr ""
+msgid "Stream Set Buffer: %d"
+msgstr "流设置缓冲区: %d"
 
-#: cygnal/libamf/sol.cpp:407
-#, c-format
-msgid ""
-"%s looks like an SOL file, but the length is wrong. Should be %d, got %d"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1467
+msgid "Stream Pong"
+msgstr "流 Pong"
 
-#: cygnal/libamf/sol.cpp:413
-#, c-format
-msgid "%s isn't an SOL file"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1486
+msgid "Set Chunk Size"
+msgstr "设置块大小"
 
-#: cygnal/libamf/sol.cpp:455
-#, c-format
-msgid "Reading SharedObject %s: %s"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1489
+msgid "Bytes Read"
+msgstr "读出的字节"
 
-#: cygnal/libamf/amf_msg.cpp:178
-msgid "AMF Message 'target' field missing!"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1497
+msgid "Set Window Size"
+msgstr "设置窗口大小"
 
-#: cygnal/libamf/amf_msg.cpp:181
-msgid "AMF Message 'reply' field missing!"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1500
+msgid "Set Bandwidth"
+msgstr "设置带宽"
 
-#: cygnal/libamf/amf_msg.cpp:184
-msgid "AMF Message 'size' field missing!"
-msgstr ""
+#: cygnal/rtmp_server.cpp:1511 cygnal/rtmp_server.cpp:1514
+#: cygnal/rtmp_server.cpp:1517 cygnal/rtmp_server.cpp:1520
+#: cygnal/rtmp_server.cpp:1667
+#, c-format
+msgid "RTMP type %d"
+msgstr "RTMP 类型 %d"
 
-#: cygnal/libamf/amf_msg.cpp:231
+#: cygnal/rtmp_server.cpp:1526
 #, c-format
-msgid ""
-"Error parsing the AMF packet: \n"
-"\t%s"
-msgstr ""
+msgid "Error INVOKING method \"%s\"!"
+msgstr "错误调用方法 \"%s\"!"
 
-#: cygnal/libamf/amf.cpp:180
+#: cygnal/rtmp_server.cpp:1650
+msgid "Received an _error message from the client!"
+msgstr "从客户端接收到一个 _error 消息!"
+
+#: cygnal/rtmp_server.cpp:1670
 #, c-format
-msgid "Encoded data size has %d properties"
-msgstr ""
+msgid "ERROR: Unidentified AMF header data type 0x%x"
+msgstr "错误: 未标识的 AMF 头部数据类型 0x%x"
 
-#: cygnal/libamf/amf.cpp:300
-msgid "XML AMF objects not supported yet"
-msgstr ""
+#: cygnal/cygnal.cpp:190
+msgid "cygnal -- a streaming media server."
+msgstr "cygnal -- 一个流媒体服务器。"
 
-#: cygnal/libamf/amf.cpp:404
-msgid "Movie Clip AMF objects not supported yet"
-msgstr ""
+#: cygnal/cygnal.cpp:192
+msgid "Usage: cygnal [options...]"
+msgstr "用法: cygnal [options...]"
 
-#: cygnal/libamf/amf.cpp:495
-msgid "Long String AMF objects not supported yet"
-msgstr ""
+#: cygnal/cygnal.cpp:193 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:596
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:321
+#: cygnal/cgi-bin/echo/gateway.cpp:406 cygnal/cgi-bin/echo/echo.cpp:316
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:269
+#: cygnal/testsuite/libnet.all/test_handler.cpp:281
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:300
+#: cygnal/testsuite/libnet.all/test_cache.cpp:391
+#: cygnal/testsuite/libamf.all/test_el.cpp:491
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:721
+#: cygnal/testsuite/libamf.all/test_flv.cpp:282
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:247
+#: cygnal/testsuite/libamf.all/test_amf.cpp:422
+msgid "  -h,  --help          Print this help and exit"
+msgstr "-h, --help 打印本帮助后退出"
 
-#: cygnal/libamf/amf.cpp:512
-msgid "Reecord Set AMF objects not supported yet"
-msgstr ""
+#: cygnal/cygnal.cpp:194
+msgid "  -V,  --version       Print version information and exit"
+msgstr "-V, --version 打印版本信息后退出"
 
-#: cygnal/libamf/amf.cpp:561
-msgid "Encoding a strict array as an ecma array"
-msgstr ""
+#: cygnal/cygnal.cpp:195 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:597
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:322
+#: cygnal/cgi-bin/echo/gateway.cpp:407 cygnal/cgi-bin/echo/echo.cpp:317
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:270
+#: cygnal/testsuite/libnet.all/test_handler.cpp:282
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:301
+#: cygnal/testsuite/libnet.all/test_cache.cpp:392
+#: cygnal/testsuite/libamf.all/test_el.cpp:492
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:722
+#: cygnal/testsuite/libamf.all/test_flv.cpp:283
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:248
+#: cygnal/testsuite/libamf.all/test_amf.cpp:423
+msgid "  -v,  --verbose       Output verbose debug info"
+msgstr "-v, --verbose 输出详细调试信息"
 
-#: cygnal/libamf/amf.cpp:784
-msgid "FIXME: got AMF3 data type"
-msgstr ""
+#: cygnal/cygnal.cpp:196
+msgid "  -s,  --singlethread  Disable Multi Threading"
+msgstr "-s, --singlethread 禁用多线程"
 
-#: cygnal/libamf/amf.cpp:913
-msgid "AMF body input data is NULL"
-msgstr ""
+#: cygnal/cygnal.cpp:197 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:598
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:323
+#: cygnal/cgi-bin/echo/gateway.cpp:408 cygnal/cgi-bin/echo/echo.cpp:318
+msgid "  -n,  --netdebug      Turn on net debugging messages"
+msgstr "-n, --netdebug 打开网络调试信息"
 
-#: cygnal/libamf/amf.cpp:937
-msgid "AMF data too short to contain type field"
-msgstr ""
+#: cygnal/cygnal.cpp:198
+msgid "  -o   --only-port     Only use port for debugging"
+msgstr "-o --only-port 仅使用端口进行调试"
 
-#: cygnal/libamf/amf.cpp:948
-msgid "Element has no type!"
-msgstr ""
+#: cygnal/cygnal.cpp:199
+msgid "  -p   --port-offset   Port offset for debugging"
+msgstr "-p --port-offset 调试端口偏移"
 
-#: cygnal/libamf/amf.cpp:958
-msgid "AMF data segment too short to containtype NUMBER"
-msgstr ""
+#: cygnal/cygnal.cpp:200
+msgid "  -t,  --testing       Turn on special Gnash testing support"
+msgstr "-t, --testing 打开特殊 Gnash 的测试支持"
 
-#: cygnal/libamf/amf.cpp:978
+#: cygnal/cygnal.cpp:201
+msgid "  -a,  --admin         Enable the administration thread"
+msgstr "-a, --admin 启用管理线程"
+
+#: cygnal/cygnal.cpp:202
+msgid "  -r,  --root          Document root for all files"
+msgstr "-r, --root 所有文件的文档根路径"
+
+#: cygnal/cygnal.cpp:203
+#, fuzzy
+msgid "  -m,  --machine       Hostname for this machine"
+msgstr "该机器的主机名是 %s"
+
+#: cygnal/cygnal.cpp:266
+msgid ": couldn't open file: "
+msgstr ": 无法打开文件:"
+
+#: cygnal/cygnal.cpp:343
 #, c-format
-msgid "%d bytes for a string is over the safe limit of %d, line %d"
-msgstr ""
+msgid "Couldn't connect to %s"
+msgstr "无法连接到 %s"
 
-#: cygnal/libamf/amf.cpp:1021
-msgid "AMF0 MovieClip frame"
-msgstr ""
+#: cygnal/cygnal.cpp:363
+#, c-format
+msgid "%s is active on fd #%d."
+msgstr "%s 在文件描述符 #%d 上是活动的。"
 
-#: cygnal/libamf/amf.cpp:1151
-msgid "Found object terminator byte"
-msgstr ""
+#: cygnal/cygnal.cpp:509
+#, c-format
+msgid "Extraneous argument: %s"
+msgstr "多余的参数: %s"
 
-#: cygnal/libamf/amf.cpp:1169
+#: cygnal/cygnal.cpp:513 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:441
 #, c-format
-msgid "%s: type %d"
-msgstr ""
+msgid "Document Root for media files is: %s"
+msgstr "媒体文件的文档根路径是: %s"
 
-#: cygnal/libamf/amf.cpp:1262
+#: cygnal/cygnal.cpp:597
+msgid "Cygnal done..."
+msgstr "Cygnal 完成..."
+
+#: cygnal/cygnal.cpp:610
 #, c-format
-msgid "No data associated with Property \"%s\""
+msgid "Got a %d interrupt"
+msgstr "遇到一个 %d 中断"
+
+#: cygnal/cygnal.cpp:630
+#, fuzzy
+msgid ""
+"Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\n"
+"Cygnal comes with NO WARRANTY, to the extent permitted by law.\n"
+"You may redistribute copies of Cygnal under the terms of the GNU General\n"
+"Public License V3 or later. For more information, see the file named "
+"COPYING.\n"
 msgstr ""
+"版权所有 (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 自由软件基金会, Inc。\n"
+"Cygnal 在法律允许的限度内不作任何担保。\n"
+"您可以在遵守 GNU General\n"
+"Public License V3 条款的前提下分发 Cygnal 的副本。更多信息请参见名为 COPYING "
+"的文件。\n"
+"\n"
 
-#: cygnal/libamf/buffer.cpp:179
+#: cygnal/cygnal.cpp:652
 #, c-format
-msgid "Buffer %x (%d) stayed in queue for %f seconds"
-msgstr ""
+msgid "Starting Admin Handler for port %d"
+msgstr "开始端口 %d 的管理处理程序"
 
-#: cygnal/libamf/buffer.cpp:711
+#: cygnal/cygnal.cpp:658
+msgid "Got an incoming Admin request"
+msgstr "有一个传入的管理请求"
+
+#: cygnal/cygnal.cpp:666
+msgid "no more admin data, exiting...\n"
+msgstr "没有更多的管理数据,正在退出...\n"
+
+#: cygnal/cygnal.cpp:751
+msgid "admin_handler: Done...!\n"
+msgstr "admin_handler: 完成...!\n"
+
+#: cygnal/cygnal.cpp:780
 #, c-format
-msgid "cygnal::Buffer::resize(%d): Truncating data (%d bytes) while resizing!"
-msgstr ""
+msgid "Can't start %s Connection Handler for fd #%d, port %hd"
+msgstr "无法开始 %s 连接处理程序,文件描述符 #%d, 端口 %hd"
 
-#: cygnal/libamf/buffer.cpp:766
+#: cygnal/cygnal.cpp:784
 #, c-format
-msgid "Creating %d errors in the buffer"
-msgstr ""
+msgid "Starting %s Connection Handler for fd #%d, port %hd"
+msgstr "开始 %s 连接处理程序,文件描述符 #%d, 端口 %hd"
 
-#: cygnal/handler.cpp:128
+#: cygnal/cygnal.cpp:795
 #, c-format
-msgid "Protocol %d for Handler::AddClient()"
-msgstr ""
+msgid "This system has %d cpus."
+msgstr "本系统有 %d 个中央处理器。"
 
-#: cygnal/handler.cpp:171 cygnal/handler.cpp:196
-msgid "HTTP key couldn't be read!"
-msgstr ""
+#: cygnal/cygnal.cpp:832
+#, c-format
+msgid "No new %s network connections"
+msgstr "没有新的 %s 网络连接"
 
-#: cygnal/handler.cpp:214 cygnal/handler.cpp:244
+#: cygnal/cygnal.cpp:836
 #, c-format
-msgid "FD #%d has no protocol handler registered"
-msgstr ""
+msgid "*** New %s network connection for thread ID #%d, fd #%d ***"
+msgstr "*** 新的 %s 网络连接,线程 ID #%d, 文件描述符 #%d ***"
 
-#: cygnal/handler.cpp:319
+#: cygnal/cygnal.cpp:882
 #, c-format
-msgid "No %s symbol in plugin"
-msgstr ""
+msgid "Creating new %s Handler for %s using fd #%d"
+msgstr "正在创建新的 %s 处理程序,%s 正在使用文件描述符 #%d"
 
-#: cygnal/handler.cpp:322
+#: cygnal/cygnal.cpp:900
+#, fuzzy, c-format
+msgid "Reusing %s Handler for %s using fd #%d"
+msgstr "恢复使用 %s 处理程序,%s 正在使用文件描述符 #%d"
+
+#: cygnal/cygnal.cpp:926
 #, c-format
-msgid "Initialized Plugin: \"%s\": %s"
-msgstr ""
+msgid "Creating new %s Handler for: %s for fd %#d"
+msgstr "正在创建新的 %s 处理程序: %s,文件描述符 %#d"
 
-#: cygnal/handler.cpp:335 cygnal/handler.cpp:350
+#: cygnal/cygnal.cpp:950
 #, c-format
-msgid "Couldn't get %s symbol"
-msgstr ""
+msgid "Cygnal Plugin paths are: %s"
+msgstr "Cygnal 插件路径是: %s"
 
-#: cygnal/cvm.cpp:276
-msgid "The debugger has been disabled at configuration time"
-msgstr ""
+#: cygnal/cygnal.cpp:971
+#, c-format
+msgid "Couldn't load plugin for %s"
+msgstr "无法加载 %s 的插件"
 
-#: cygnal/http_server.cpp:154 cygnal/http_server.cpp:211
+#: cygnal/cygnal.cpp:982
 #, c-format
-msgid "New filestream %s"
-msgstr ""
+msgid "Number of active Threads is %d"
+msgstr "活动的线程数是 %d"
 
-#: cygnal/http_server.cpp:213
+#: cygnal/cygnal.cpp:985
 #, c-format
-msgid "Reusing filestream %s"
-msgstr ""
+msgid "Restarting loop for next connection for port %d..."
+msgstr "重新开始端口 %d 下次连接的循环..."
 
-#: cygnal/http_server.cpp:306
-msgid "couldn't read data!"
-msgstr ""
+#: cygnal/cygnal.cpp:1043
+#, c-format
+msgid "%d active disk streams"
+msgstr "%d 个活动的磁盘流"
 
-#: cygnal/http_server.cpp:373 cygnal/libnet/http.cpp:592
-msgid "PUT request"
-msgstr ""
+#: cygnal/cygnal.cpp:1083
+#, c-format
+msgid "Got a hit for fd #%d, protocol %s"
+msgstr "命中一个文件描述符 #%d, 协议 %s"
 
-#: cygnal/http_server.cpp:383 cygnal/libnet/http.cpp:601
-msgid "DELETE request"
-msgstr ""
+#: cygnal/cygnal.cpp:1087
+msgid "No protocol specified!"
+msgstr "没有指定协议!"
 
-#: cygnal/http_server.cpp:393 cygnal/libnet/http.cpp:609
-msgid "CONNECT request"
-msgstr ""
+#: cygnal/cygnal.cpp:1095 cygnal/cygnal.cpp:1120 cygnal/cygnal.cpp:1131
+#, c-format
+msgid "Done with HTTP connection for fd #%d, CGI %s"
+msgstr "完成文件描述符 #%d 的HTTP连接, CGI %s"
 
-#: cygnal/http_server.cpp:403 cygnal/libnet/http.cpp:617
-msgid "OPTIONS request"
-msgstr ""
+#: cygnal/cygnal.cpp:1100
+#, c-format
+msgid "Not Done with HTTP connection for fd #%d, it's a persistent connection."
+msgstr "未完成文件描述符 #%d 的HTTP连接,这是一个持久的连接。"
 
-#: cygnal/http_server.cpp:413 cygnal/libnet/http.cpp:625
-msgid "HEAD request"
-msgstr ""
+#: cygnal/cygnal.cpp:1109
+#, c-format
+msgid "Done with RTMP connection for fd #%d, CGI "
+msgstr "文件描述符 #%d 的 RTMP 连接完成,CGI"
 
-#: cygnal/http_server.cpp:423 cygnal/libnet/http.cpp:633
-msgid "TRACE request"
-msgstr ""
+#: cygnal/cygnal.cpp:1143
+#, c-format
+msgid "Unsupported network protocol for fd #%d, %d"
+msgstr "未支持的网络协议,文件描述符 #%d,%d"
 
-#: cygnal/http_server.cpp:1013
+#: cygnal/cygnal.cpp:1163
 #, c-format
-msgid "Processing HTTP data for fd #%d"
-msgstr ""
+msgid "Got no hits, %d retries"
+msgstr "没有命中, %d 次重试"
 
-#: cygnal/http_server.cpp:1022
-msgid "FIXME: Existing data in packet!"
-msgstr ""
+#: cygnal/cvm.cpp:276
+msgid "The debugger has been disabled at configuration time"
+msgstr "调试器在配置时已被禁止"
 
-#: cygnal/http_server.cpp:1024
-msgid "FIXME: No existing data in packet!"
-msgstr ""
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:233
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:166
+#: cygnal/cgi-bin/echo/gateway.cpp:139 cygnal/cgi-bin/echo/echo.cpp:161
+#, c-format
+msgid "Error parsing command line options: %s"
+msgstr "解析命令行选项错误: %s"
 
-#: cygnal/libnet/cache.cpp:62
-msgid "using this constructor is only allowed for testing purposes."
-msgstr ""
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:309
+#, c-format
+msgid "Scanning directory \"%s\" for %s files"
+msgstr "扫描目录 \"%s\", %s 文件"
 
-#: cygnal/libnet/cache.cpp:105
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:340
 #, c-format
-msgid "Adding file %s to cache."
-msgstr ""
+msgid "Gnash media file name: %s"
+msgstr "Gnash媒体文件名: %s"
 
-#: cygnal/libnet/cache.cpp:148
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:595
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:320
+#: cygnal/cgi-bin/echo/gateway.cpp:405 cygnal/cgi-bin/echo/echo.cpp:315
+#: cygnal/testsuite/libamf.all/test_flv.cpp:281
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:246
+#: cygnal/testsuite/libamf.all/test_amf.cpp:421
+msgid "Usage: test_amf [options...]"
+msgstr "用法:test_amf [options...]"
+
+#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:599
+#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:324 cygnal/cgi-bin/echo/echo.cpp:319
+msgid "  -p,  --netdebug      port for network"
+msgstr "-p, --netdebug  网络端口"
+
+#: cygnal/crc.cpp:145
 #, c-format
-msgid "Trying to find %s in the cache."
-msgstr ""
+msgid "Couldn't open file: %s"
+msgstr "无法打开文件:%s"
+
+#: cygnal/libnet/statistics.cpp:113
+#, c-format
+msgid "Stream type is: %s"
+msgstr "流类型是:%s"
+
+#: cygnal/libnet/statistics.cpp:119
+#, fuzzy, c-format
+msgid "%d bytes were transferred in %s seconds"
+msgstr "%d 字节在 %s 秒被传输"
 
 #: cygnal/libnet/rtmp.cpp:184
 #, c-format
 msgid "AMF Header size bits (0x%X) out of range"
-msgstr ""
+msgstr "AMF 头部大小位 (0x%X) 超出范围"
 
 #: cygnal/libnet/rtmp.cpp:283
 #, c-format
 msgid "RTMP Header size can't be more then %d bytes!!"
-msgstr ""
+msgstr "RTMP 头部大小不能超过 %d 字节!!"
 
 #: cygnal/libnet/rtmp.cpp:288
 msgid "RTMP Header size can't be zero!"
-msgstr ""
+msgstr "RTMP 头部大小不能为0!"
 
 #: cygnal/libnet/rtmp.cpp:308
 #, c-format
 msgid "The body size is: %d"
-msgstr ""
+msgstr "主体大小是:%d"
 
 #: cygnal/libnet/rtmp.cpp:315
 #, c-format
 msgid "Using previous body size of %d for channel %d"
-msgstr ""
+msgstr "正在使用 %d 的前主体大小,通道 %d"
 
 #: cygnal/libnet/rtmp.cpp:318
 #, c-format
 msgid "Previous body size for channel %d is zero!"
-msgstr ""
+msgstr "通道 %d 的前主体大小为0!"
 
 #: cygnal/libnet/rtmp.cpp:328
 #, c-format
 msgid "Suspicious large RTMP packet body size! %d"
-msgstr ""
+msgstr "可疑的超大 RTMP 包主体大小!%d"
 
 #: cygnal/libnet/rtmp.cpp:341
 #, c-format
 msgid "The type is: %s"
-msgstr ""
+msgstr "类型为:%s"
 
 #: cygnal/libnet/rtmp.cpp:343
 #, c-format
 msgid "The type is: 0x%x"
-msgstr ""
+msgstr "类型为:0x%x"
 
 #: cygnal/libnet/rtmp.cpp:348
 #, c-format
 msgid "Using previous type of %d for channel %d"
-msgstr ""
+msgstr "正在使用 %d 的前一类型,通道 %d"
 
 #: cygnal/libnet/rtmp.cpp:360
 #, c-format
 msgid "RTMP %s: channel: %d, head size %d, body size: %d"
-msgstr ""
+msgstr "RTMP %s: 通道: %d, 头部大小 %d, 主体大小:%d"
 
 #: cygnal/libnet/rtmp.cpp:482
 #, c-format
 msgid "The Header size is: %d"
-msgstr ""
+msgstr "头部大小为:%d"
 
 #: cygnal/libnet/rtmp.cpp:483
 #, c-format
 msgid "The AMF index is: 0x%x"
-msgstr ""
+msgstr "AMF 索引为: 0x%x"
 
 #: cygnal/libnet/rtmp.cpp:499
 #, c-format
 msgid "END is %x"
-msgstr ""
+msgstr "END 为 %x"
 
 #: cygnal/libnet/rtmp.cpp:510
 msgid "Reading AMF packets till we're done..."
-msgstr ""
+msgstr "读取AMF数据包直到完成..."
 
 #: cygnal/libnet/rtmp.cpp:519
 #, c-format
 msgid "Total size in header is %d, buffer size is: %d"
-msgstr ""
+msgstr "头部总大小为 %d, 缓冲区大小为:%d"
 
 #: cygnal/libnet/rtmp.cpp:523
 msgid "FIXME: MERGING"
-msgstr ""
+msgstr "FIXME: 合并"
 
 #: cygnal/libnet/rtmp.cpp:539
 #, c-format
 msgid "SWF file %s"
-msgstr ""
+msgstr "SWF 文件 %s"
 
 #: cygnal/libnet/rtmp.cpp:542
 #, c-format
 msgid "is Loading video %s"
-msgstr ""
+msgstr "正在加载视频 %s"
 
 #: cygnal/libnet/rtmp.cpp:545
 #, c-format
 msgid "is file name is %s"
-msgstr ""
+msgstr "文件名称为 %s"
 
 #: cygnal/libnet/rtmp.cpp:674
 #, c-format
 msgid "Unknown User Control message %d!"
-msgstr ""
+msgstr "未知的用户控制消息 %d!"
 
 #: cygnal/libnet/rtmp.cpp:746
 msgid "Name field of RTMP Message corrupted!"
-msgstr ""
+msgstr "RTMP 消息的 Name 字段损坏!"
 
 #: cygnal/libnet/rtmp.cpp:762
 msgid "Stream ID field of RTMP Message corrupted!"
-msgstr ""
+msgstr "RTMP 消息的 Stream ID 字段损坏!"
 
 #: cygnal/libnet/rtmp.cpp:991
 #, c-format
 msgid "Bogus size parameter in %s!"
-msgstr ""
+msgstr "%s 中虚假的大小参数!"
 
 #: cygnal/libnet/rtmp.cpp:1028
 msgid "Couldn't write the full 12 byte RTMP header!"
-msgstr ""
+msgstr "无法写入完整的12字节RTMP头!"
 
 #: cygnal/libnet/rtmp.cpp:1031
 msgid "Wrote the full 12 byte RTMP header."
-msgstr ""
+msgstr "写入完整的12字节RTMP头。"
 
 #: cygnal/libnet/rtmp.cpp:1051
 msgid "Couldn't write the full 1 byte RTMP continuation header!"
-msgstr ""
+msgstr "无法写入完整的1字节RTMP扩展头!"
 
 #: cygnal/libnet/rtmp.cpp:1054
 msgid "Wrote the full 1 byte RTMP continuation header"
-msgstr ""
+msgstr "写入完整的1字节RTMP扩展头。"
 
 #: cygnal/libnet/rtmp.cpp:1066
 msgid "Couldn't write the RTMP body!"
-msgstr ""
+msgstr "无法写入RTMP主体!"
 
 #: cygnal/libnet/rtmp.cpp:1069
 #, c-format
 msgid "Wrote %d bytes of the RTMP body, %d bytes left."
-msgstr ""
+msgstr "写入 RTMP主体的 %d 字节,剩余 %d 字节。"
 
 #: cygnal/libnet/rtmp.cpp:1086
 msgid "Couldn't write the RTMP packet!"
-msgstr ""
+msgstr "无法写入RTMP包!"
 
 #: cygnal/libnet/rtmp.cpp:1089
 msgid "Wrote the RTMP packet."
-msgstr ""
+msgstr "写入RTMP包。"
 
 #: cygnal/libnet/rtmp.cpp:1135 cygnal/libnet/rtmp.cpp:1137
 #, c-format
 msgid "Response header: %s"
-msgstr ""
+msgstr "响应头部: %s"
 
 #: cygnal/libnet/rtmp.cpp:1141
 #, c-format
 msgid "Processing message of type %s!"
-msgstr ""
+msgstr "正在处理类型 %s的消息!"
 
 #: cygnal/libnet/rtmp.cpp:1147
 msgid "Got CHUNK_SIZE packet!!!"
-msgstr ""
+msgstr "得到 CHUNK_SIZE 包!!!"
 
 #: cygnal/libnet/rtmp.cpp:1149
 #, c-format
 msgid "Setting packet chunk size to %d."
-msgstr ""
+msgstr "设置包分组大小到 %d。"
 
 #: cygnal/libnet/rtmp.cpp:1159
 #, c-format
 msgid "FIXME: Ping type is: %d, ignored for now"
-msgstr ""
+msgstr "FIXME: Ping 类型是:%d,现在已忽略"
 
 #: cygnal/libnet/rtmp.cpp:1181
 msgid "Got SERVER packet!!!"
-msgstr ""
+msgstr "得到 SERVER 包!!!"
 
 #: cygnal/libnet/rtmp.cpp:1189
 msgid "Got CLIENT packet!!!"
-msgstr ""
+msgstr "得到 CLIENT 包!!!"
 
 #: cygnal/libnet/rtmp.cpp:1197
 msgid "Got VIDEO packets!!!"
-msgstr ""
+msgstr "得到 VIDEO 包!!!"
 
 #: cygnal/libnet/rtmp.cpp:1213
 msgid "Got Shared Object packet!!!"
-msgstr ""
+msgstr "得到 Shared Object 包!!!"
 
 #: cygnal/libnet/rtmp.cpp:1220
 #, c-format
 msgid "%s: Msg status is: %d: %s, name is %s, size is %d"
-msgstr ""
+msgstr "%s:消息状态为:%d:%s,名称为%s,大小为 %d"
 
 #: cygnal/libnet/rtmp.cpp:1224
 msgid "Got onBWDone packet!!!"
-msgstr ""
+msgstr "得到 onBWDone 包!!!"
 
 #: cygnal/libnet/rtmp.cpp:1229
 #, c-format
 msgid "Couldn't decode message body for type %s!"
-msgstr ""
+msgstr "无法解码类型为 %s 的消息体!"
 
 #: cygnal/libnet/rtmp.cpp:1283
 #, c-format
 msgid "no data for fd #%d, done reading this packet, read %d bytes..."
-msgstr ""
+msgstr "没有文件描述符 #%d 的数据,读取包已结束,读取 %d 字节..."
 
 #: cygnal/libnet/rtmp.cpp:1289
 #, c-format
 msgid "Got an empty packet from the server at line %d"
-msgstr ""
+msgstr "在 %d 行从服务器得到一个空白包"
 
 #: cygnal/libnet/rtmp.cpp:1298 cygnal/libnet/http.cpp:1518
 #, c-format
 msgid "socket for fd #%d was closed..."
-msgstr ""
+msgstr "已关闭文件描述符 #%d 的套接字..."
 
 #: cygnal/libnet/rtmp.cpp:1329
 msgid "Buffer pointer is invalid."
-msgstr ""
+msgstr "缓冲区指针非法。"
 
 #: cygnal/libnet/rtmp.cpp:1355
 msgid "Got a message on the system channel!"
-msgstr ""
+msgstr "在系统通道上得到一个消息。"
 
 #: cygnal/libnet/rtmp.cpp:1459
 #, c-format
 msgid "Packet size out of range! %d, %d"
-msgstr ""
+msgstr "包大小超出范围!%d, %d"
 
 #: cygnal/libnet/rtmp.cpp:1470
 #, c-format
 msgid "RTMP packet size is out of range! %d, %d"
-msgstr ""
+msgstr "RTMP 包大小超出范围!%d, %d"
 
 #: cygnal/libnet/rtmp.cpp:1475
 #, c-format
 msgid "RTMP header size is out of range! %d"
-msgstr ""
+msgstr "RTMP 头部大小超出范围!%d"
 
-#: cygnal/libnet/sshserver.cpp:145
+#: cygnal/libnet/rtmp_client.cpp:152
 #, c-format
-msgid "User %s wants to auth with pass %s\n"
-msgstr ""
+msgid "URL is %s"
+msgstr "网址是 %s"
 
-#: cygnal/libnet/sshserver.cpp:200 cygnal/libnet/sshclient.cpp:459
-msgid "==== The SSH header breaks down as follows: ===="
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:153
+#, c-format
+msgid "Protocol is %s"
+msgstr "协议是 %s"
 
-#: cygnal/libnet/network.cpp:114
-msgid "Could not find a usable WinSock DLL"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:154
+#, c-format
+msgid "Host is %s"
+msgstr "主机是 %s"
 
-#: cygnal/libnet/network.cpp:162
+#: cygnal/libnet/rtmp_client.cpp:155
 #, c-format
-msgid "already connected to port %hd"
-msgstr ""
+msgid "Port is %s"
+msgstr "端口是 %s"
 
-#: cygnal/libnet/network.cpp:184
+#: cygnal/libnet/rtmp_client.cpp:156
 #, c-format
-msgid "unable to get protocol entry for %s"
-msgstr ""
+msgid "Path is %s"
+msgstr "路径是 %s"
 
-#: cygnal/libnet/network.cpp:201 cygnal/libnet/network.cpp:425
-#: cygnal/libnet/network.cpp:583
+#: cygnal/libnet/rtmp_client.cpp:157
 #, c-format
-msgid "unable to create socket: %s"
-msgstr ""
+msgid "Filename is %s"
+msgstr "文件名是 %s"
 
-#: cygnal/libnet/network.cpp:208
-msgid "setsockopt SO_REUSEADDR failed"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:158
+#, c-format
+msgid "App is %s"
+msgstr "应用是 %s"
 
-#: cygnal/libnet/network.cpp:219
+#: cygnal/libnet/rtmp_client.cpp:159
 #, c-format
-msgid "unable to bind to port %hd: %s"
-msgstr ""
+msgid "Query is %s"
+msgstr "Query是 %s"
 
-#: cygnal/libnet/network.cpp:229
+#: cygnal/libnet/rtmp_client.cpp:160
 #, c-format
-msgid "Server bound to service on %s, port %hd, using fd #%d"
-msgstr ""
+msgid "tcUrl is %s"
+msgstr "tcUrl 是 %s"
 
-#: cygnal/libnet/network.cpp:235
+#: cygnal/libnet/rtmp_client.cpp:161
 #, c-format
-msgid "unable to listen on port: %hd: %s "
-msgstr ""
+msgid "swfUrl is %s"
+msgstr "swfUrl 是 %s"
 
-#: cygnal/libnet/network.cpp:291
+#: cygnal/libnet/rtmp_client.cpp:162
 #, c-format
-msgid "Waiting to accept net traffic on fd #%d for port %d"
-msgstr ""
+msgid "pageUrl is %s"
+msgstr "pageUrl 是 %s"
 
-#: cygnal/libnet/network.cpp:351
-msgid "There is a new network connection request."
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:313
+msgid "RTMP handshake request failed"
+msgstr "RTMP 握手请求失败"
 
-#: cygnal/libnet/network.cpp:358
-#, c-format
-msgid "The accept() socket for fd #%d was interrupted by a system call"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:336
+msgid "RTMP handshake completion failed!"
+msgstr "RTMP 握手完成失败!"
 
-#: cygnal/libnet/network.cpp:382
-#, c-format
-msgid "unable to accept: %s"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:350
+msgid "Sent NetConnection Connect message successfully"
+msgstr "成功发送 NetConnection 连接消息"
 
-#: cygnal/libnet/network.cpp:387
-#, c-format
-msgid "Accepting TCP/IP connection on fd #%d for port %d"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:353
+msgid "Couldn't send NetConnection Connect message,"
+msgstr "无法发送 NetConnection 连接消息,"
+
+#: cygnal/libnet/rtmp_client.cpp:622
+msgid "Couldn't read data block in handshake!"
+msgstr "无法读取握手的数据块!"
 
-#: cygnal/libnet/network.cpp:446 cygnal/libnet/network.cpp:604
+#: cygnal/libnet/rtmp_client.cpp:635
 #, c-format
-msgid "The connect() socket for fd %d was interrupted by a system call"
-msgstr ""
+msgid "Read data block in handshake, got %d bytes."
+msgstr "读取握手的数据块, 得到 %d 字节。"
 
-#: cygnal/libnet/network.cpp:452 cygnal/libnet/network.cpp:477
-#: cygnal/libnet/network.cpp:610 cygnal/libnet/network.cpp:650
+#: cygnal/libnet/rtmp_client.cpp:638
 #, c-format
-msgid "The connect() socket for fd %d never was available for writing"
-msgstr ""
+msgid "Couldn't read data block in handshake, read %d bytes!"
+msgstr "无法读取握手的数据块, 读取 %d 字节!"
 
-#: cygnal/libnet/network.cpp:463 cygnal/libnet/network.cpp:628
+#: cygnal/libnet/rtmp_client.cpp:645
 #, c-format
-msgid "The connect() socket for fd %d timed out waiting to write"
-msgstr ""
+msgid "RTMP Handshake header: Uptime: %u"
+msgstr "RTMP 握手头部: 正常运行时间: %u"
 
-#: cygnal/libnet/network.cpp:471
+#: cygnal/libnet/rtmp_client.cpp:688
 #, c-format
-msgid "\tsocket name %s for fd %d"
-msgstr ""
+msgid "About to write %d bytes, data is: %d bytes."
+msgstr "写入关于 %d 字节, 数据是: %d 字节。"
 
-#: cygnal/libnet/network.cpp:553
+#: cygnal/libnet/rtmp_client.cpp:691
 #, c-format
-msgid "%s: to host %s at port %d"
-msgstr ""
+msgid "Client response header for handshake 2: %s"
+msgstr "握手2的客户端响应头部: %s"
 
-#: cygnal/libnet/network.cpp:559
+#: cygnal/libnet/rtmp_client.cpp:693
 #, c-format
-msgid "The hostname for this machine is %s"
-msgstr ""
+msgid "Data in response for handshake 2: %s"
+msgstr "握手2的响应数据: %s"
 
-#: cygnal/libnet/network.cpp:561
-msgid "Couldn't get the hostname for this machine"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:702
+msgid "Couldn't write the second handshake packet!"
+msgstr "无法写入第二个握手数据包!"
 
-#: cygnal/libnet/network.cpp:576
-#, c-format
-msgid "The IP address for this client socket is %s"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:729
+msgid "Got no response from the RTMP server"
+msgstr "没有得到来自 RTMP 服务器的响应"
 
-#: cygnal/libnet/network.cpp:643
-#, c-format
-msgid "\tport %d at IP %s for fd %d"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:737
+msgid "Got empty packet in buffer."
+msgstr "在缓冲区中得到空包。"
 
-#: cygnal/libnet/network.cpp:730
-#, c-format
-msgid "Unable to close the socket for fd #%d: %s"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:748
+msgid "No response from INVOKE of NetConnection connect"
+msgstr "NetConnection 连接的 INVOKE 没有响应"
 
-#: cygnal/libnet/network.cpp:738
+#: cygnal/libnet/rtmp_client.cpp:755
 #, c-format
-msgid "Closed the socket on fd #%d"
-msgstr ""
+msgid ""
+"%s: There are %d channel queues in the RTMP input queue, %d messages in "
+"front queue"
+msgstr "%s: 在 RTMP 输入队列中有 %d 通道队列, 前面队列中有 %d 消息"
 
-#: cygnal/libnet/network.cpp:767
-#, c-format
-msgid "%s: Closed fd #%d"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:768
+msgid "Couldn't decode RTMP message header"
+msgstr "无法解码 RTMP 消息头"
 
-#: cygnal/libnet/network.cpp:879
-#, c-format
-msgid "Trying to read %d bytes from fd #%d"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:773
+msgid "RTMP packet can't be of none type!"
+msgstr "RTMP 包不能是没有类型的!"
 
-#: cygnal/libnet/network.cpp:943 cygnal/libnet/network.cpp:1117
-#, c-format
-msgid "The socket for fd #%d was interrupted by a system call"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:777
+msgid "Server message data packet"
+msgstr "服务器消息数据包"
 
-#: cygnal/libnet/network.cpp:947
-#, c-format
-msgid "The socket for fd #%d was never available for reading"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:781
+msgid "Abort packet"
+msgstr "中止数据包"
 
-#: cygnal/libnet/network.cpp:953
-#, c-format
-msgid "The socket for #fd %d timed out waiting to read"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:784
+msgid "Bytes Read data packet"
+msgstr "读取数据包字节"
 
-#: cygnal/libnet/network.cpp:970
+#: cygnal/libnet/rtmp_client.cpp:789
 #, c-format
-msgid "The socket for fd #%d was never available for reading data"
-msgstr ""
+msgid "Got a Ping type %s"
+msgstr "得到一个 Ping 类型 %s"
 
-#: cygnal/libnet/network.cpp:976
-#, c-format
-msgid "The socket for #fd %d timed out waiting to read data"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:793
+msgid "Set Window Size message data packet"
+msgstr "设置窗口大小 消息数据包"
 
-#: cygnal/libnet/network.cpp:982
-#, c-format
-msgid "read %d bytes from fd #%d from port %d"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:796
+msgid "Set Bandwidthmessage data packet"
+msgstr "设置带宽 消息数据包"
 
-#: cygnal/libnet/network.cpp:986
-#, c-format
-msgid ""
-"%s: Read packet data from fd #%d (%d bytes): \n"
-"%s"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:799
+msgid "Route from other server packet"
+msgstr "自其他服务器包的路由"
 
-#: cygnal/libnet/network.cpp:1121
-#, c-format
-msgid "The socket for fd #%d was never available for writing"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:818
+msgid "AMF0 Shared Object data packet message"
+msgstr "AMF0 共享对象数据包消息"
 
-#: cygnal/libnet/network.cpp:1125
-#, c-format
-msgid "The socket for fd #%d timed out waiting to write"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:821
+msgid "AMF3 Notify data packet message"
+msgstr "AMF3 通知数据包消息"
 
-#: cygnal/libnet/network.cpp:1139
-#, c-format
-msgid "Wrote zero out of %d bytes to fd #%d: %s"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:824
+msgid "AMF3 Shared Object data packet message"
+msgstr "AMF3 共享对象数据包消息"
 
-#: cygnal/libnet/network.cpp:1144
-#, c-format
-msgid "Couldn't write %d bytes to fd #%d: %s"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:827
+msgid "AMF0 Invoke packet message"
+msgstr "AMF0 调用包消息"
 
-#: cygnal/libnet/network.cpp:1152
-#, c-format
-msgid "wrote %d bytes to fd #%d, expected %d"
-msgstr ""
+#: cygnal/libnet/rtmp_client.cpp:830
+msgid "AMF0 Notify data packet message"
+msgstr "AMF0 通知数据包消息"
+
+#: cygnal/libnet/rtmp_client.cpp:841
+#, fuzzy
+msgid "FLV data packet message"
+msgstr "Flv 数据包消息"
+
+#: cygnal/libnet/rtmp_client.cpp:844
+msgid "Couldn't decode RTMP message Body"
+msgstr "无法解码 RTMP 消息主体"
+
+#: cygnal/libnet/cque.cpp:71
+msgid "CQue::wait(win32)"
+msgstr "CQue::wait(win32)"
 
-#: cygnal/libnet/network.cpp:1157
+#: cygnal/libnet/cque.cpp:83
+msgid "CQue::notify(win32)"
+msgstr "CQue::notify(win32)"
+
+#: cygnal/libnet/http.cpp:176
 #, c-format
-msgid "wrote %d bytes to fd #%d for port %d"
-msgstr ""
+msgid "Setting Content Length to %d"
+msgstr "设置内容长度为 %d"
 
-#: cygnal/libnet/network.cpp:1165
+#: cygnal/libnet/http.cpp:189
 #, c-format
-msgid ""
-"%s: Wrote packet data to fd #%d: \n"
-"%s"
-msgstr ""
+msgid "Setting Content Type to %d"
+msgstr "设置内容类型为 %d"
 
-#: cygnal/libnet/network.cpp:1179
+#: cygnal/libnet/http.cpp:199
 #, c-format
-msgid "took %d usec to write (%d bytes)"
-msgstr ""
+msgid "Got a request, parsing \"%s\""
+msgstr "得到一个请求, 正在解析 \"%s\""
 
-#: cygnal/libnet/network.cpp:1194 cygnal/libnet/network.cpp:1205
+#: cygnal/libnet/http.cpp:216 cygnal/libnet/http.cpp:1295
 #, c-format
-msgid "%s: adding fd #%d to pollfds"
-msgstr ""
+msgid "Parameters for file: \"%s\""
+msgstr "文件的参数: \"%s\""
 
-#: cygnal/libnet/network.cpp:1231
+#: cygnal/libnet/http.cpp:220
 #, c-format
-msgid "%s: erasing fd #%d from pollfds"
-msgstr ""
+msgid "Requesting file: \"%s\""
+msgstr "正在请求文件: \"%s\""
+
+#: cygnal/libnet/http.cpp:225
+msgid "Enabling Keep Alive by default for HTTP > 1.0"
+msgstr "HTTP > 1.0默认启用保持连线"
 
-#: cygnal/libnet/network.cpp:1279
+#: cygnal/libnet/http.cpp:422 cygnal/libnet/http.cpp:521
 #, c-format
-msgid "%s: waiting for %d fds"
-msgstr ""
+msgid "Que empty, net connection dropped for fd #%d"
+msgstr "Que 为空, 网络连接断掉文件描述符 #%d"
 
-#: cygnal/libnet/network.cpp:1318
+#: cygnal/libnet/http.cpp:433
+msgid "FIXME: found file in cache!"
+msgstr "FIXME: 在缓存中找到的文件!"
+
+#: cygnal/libnet/http.cpp:499
 #, c-format
-msgid "Poll returned: %d, timeout is: %d"
-msgstr ""
+msgid "http_handler all done transferring requested file \"%s\"."
+msgstr "http_handler 传输请求的文件 \"%s\" 全部完成。"
 
-#: cygnal/libnet/network.cpp:1449
-msgid "Waiting for data was interrupted by a system call"
-msgstr ""
+#: cygnal/libnet/http.cpp:542
+msgid "Got file data in POST"
+msgstr "POST 中得到文件数据"
 
-#: cygnal/libnet/network.cpp:1453
-msgid "Waiting for data for fdset, was never available for reading"
-msgstr ""
+#: cygnal/libnet/http.cpp:549
+msgid "Got AMF data in POST"
+msgstr "POST中得到 AMF 数据"
 
-#: cygnal/libnet/network.cpp:1467
-#, c-format
-msgid "select() got an error: %s."
-msgstr ""
+#: cygnal/libnet/http.cpp:564
+msgid "Got CGI echo request in POST"
+msgstr "POST得到CGI回应请求"
 
-#: cygnal/libnet/network.cpp:1471
-#, c-format
-msgid "select() saw activity on %d file descriptors."
-msgstr ""
+#: cygnal/libnet/http.cpp:592 cygnal/http_server.cpp:375
+msgid "PUT request"
+msgstr "PUT 请求"
 
-#: cygnal/libnet/network.cpp:1547
-#, c-format
-msgid "Can't connect to server %s"
-msgstr ""
+#: cygnal/libnet/http.cpp:601 cygnal/http_server.cpp:385
+msgid "DELETE request"
+msgstr "DELETE 请求"
 
-#: cygnal/libnet/network.cpp:1559
-#, c-format
-msgid "Using default hostname: \"%s\""
-msgstr ""
+#: cygnal/libnet/http.cpp:609 cygnal/http_server.cpp:395
+msgid "CONNECT request"
+msgstr "CONNECT 请求"
 
-#: cygnal/libnet/network.cpp:1564
-#, c-format
-msgid "Using default keyfile: \"%s\""
-msgstr ""
+#: cygnal/libnet/http.cpp:617 cygnal/http_server.cpp:405
+msgid "OPTIONS request"
+msgstr "OPTIONS 请求"
 
-#: cygnal/libnet/network.cpp:1569
+#: cygnal/libnet/http.cpp:625 cygnal/http_server.cpp:415
+msgid "HEAD request"
+msgstr "HEAD 请求"
+
+#: cygnal/libnet/http.cpp:633 cygnal/http_server.cpp:425
+msgid "TRACE request"
+msgstr "TRACE 请求"
+
+#: cygnal/libnet/http.cpp:1385
 #, c-format
-msgid "Using default CA List: \"%s\""
-msgstr ""
+msgid "%s: Total size for first chunk is: %d, data size %d (%d)"
+msgstr "%s: 第一块的总大小为: %d, 数据大小为 %d (%d)"
 
-#: cygnal/libnet/network.cpp:1575
+#: cygnal/libnet/http.cpp:1419 cygnal/libnet/http.cpp:1512
 #, c-format
-msgid "Using default Password: \"%s\""
-msgstr ""
+msgid "no data yet for fd #%d, continuing..."
+msgstr "文件描述符 #%d 暂时还没有数据,继续..."
 
-#: cygnal/libnet/network.cpp:1580
+#: cygnal/libnet/http.cpp:1436
 #, c-format
-msgid "Using default Root Path to PEM files: \"%s\""
-msgstr ""
+msgid "%s: end of chunks!"
+msgstr "%s: 块结束!"
 
-#: cygnal/libnet/network.cpp:1585
-msgid "Connected to SSL server"
-msgstr ""
+#: cygnal/libnet/http.cpp:1502
+#, c-format
+msgid "Starting to wait for data in net for fd #%d"
+msgstr "开始等待文件描述符 #%d 的网络数据"
 
-#: cygnal/libnet/network.cpp:1587
-msgid "Couldn't connect to SSL server"
-msgstr ""
+#: cygnal/libnet/http.cpp:1538
+#, c-format
+msgid "no more data for fd #%d, exiting..."
+msgstr "文件描述符 #%d 没有更多的数据, 正在退出..."
 
-#: cygnal/libnet/network.cpp:1620
+#: cygnal/libnet/http.cpp:1542
 #, c-format
-msgid "#%d bytes waiting in kernel network buffer."
-msgstr ""
+msgid "Handler done for fd #%d, can't read any data..."
+msgstr "文件描述符 #%d 处理程序完成, 无法读取任何数据..."
 
-#: cygnal/libnet/network.cpp:1631
+#: cygnal/libnet/http.cpp:1548
 #, c-format
-msgid "Got an %d interrupt while blocked on pselect()"
-msgstr ""
+msgid "Done receiving data for fd #%d..."
+msgstr "文件描述符 #%d 接收数据完成..."
 
-#: cygnal/libnet/statistics.cpp:113
+#: cygnal/libnet/http.cpp:1560
+msgid "==== The HTTP header breaks down as follows: ===="
+msgstr "==== HTTP头部分解如下:===="
+
+#: cygnal/libnet/http.cpp:1561
 #, c-format
-msgid "Stream type is: %s"
-msgstr ""
+msgid "Filespec: %s"
+msgstr "文件说明: %s"
 
-#: cygnal/libnet/statistics.cpp:119
+#: cygnal/libnet/http.cpp:1562
 #, c-format
-msgid "%d bytes were transferred in %s seconds"
-msgstr ""
+msgid "Version: %d.%d"
+msgstr "版本: %d.%d"
 
-#: cygnal/libnet/rtmp_client.cpp:152
+#: cygnal/libnet/http.cpp:1566
 #, c-format
-msgid "URL is %s"
-msgstr ""
+msgid "Field: \"%s\" = \"%s\""
+msgstr "字段: \"%s\" = \"%s\""
 
-#: cygnal/libnet/rtmp_client.cpp:153
+#: cygnal/libnet/http.cpp:1570
+msgid "RTMPT optional index is: "
+msgstr "RTMPT 可选序号是:"
+
+#: cygnal/libnet/http.cpp:1571
+msgid "RTMPT optional client ID is: "
+msgstr "RTMPT 可选客户ID是:"
+
+#: cygnal/libnet/http.cpp:1572
+msgid "==== ==== ===="
+msgstr "==== ==== ===="
+
+#: cygnal/libnet/network.cpp:113
+msgid "Could not find a usable WinSock DLL"
+msgstr "无法找到一个可用的 WinSock DLL "
+
+#: cygnal/libnet/network.cpp:165
 #, c-format
-msgid "Protocol is %s"
-msgstr ""
+msgid "already connected to port %hd"
+msgstr "已连接到端口 %hd"
 
-#: cygnal/libnet/rtmp_client.cpp:154
+#: cygnal/libnet/network.cpp:182 cygnal/libnet/network.cpp:580
 #, c-format
-msgid "Host is %s"
+msgid "getaddrinfo() failed with code: #%d - %s\n"
 msgstr ""
 
-#: cygnal/libnet/rtmp_client.cpp:155
+#: cygnal/libnet/network.cpp:231 cygnal/libnet/network.cpp:446
 #, c-format
-msgid "Port is %s"
-msgstr ""
+msgid "unable to create socket: %s"
+msgstr "无法创建套接字:%s"
 
-#: cygnal/libnet/rtmp_client.cpp:156
+#: cygnal/libnet/network.cpp:238
+msgid "setsockopt SO_REUSEADDR failed"
+msgstr "setsockopt SO_REUSEADDR 失败"
+
+#: cygnal/libnet/network.cpp:246
 #, c-format
-msgid "Path is %s"
-msgstr ""
+msgid "unable to bind to port %hd: %s"
+msgstr "无法绑定到端口 %hd: %s"
 
-#: cygnal/libnet/rtmp_client.cpp:157
+#: cygnal/libnet/network.cpp:253
 #, c-format
-msgid "Filename is %s"
-msgstr ""
+msgid "unable to listen on port: %hd: %s "
+msgstr "无法监听在端口:%hd: %s"
 
-#: cygnal/libnet/rtmp_client.cpp:158
+#: cygnal/libnet/network.cpp:312
 #, c-format
-msgid "App is %s"
-msgstr ""
+msgid "Waiting to accept net traffic on fd #%d for port %d"
+msgstr "等待接受网络流量在文件描述符 #%d,端口 %d"
 
-#: cygnal/libnet/rtmp_client.cpp:159
+#: cygnal/libnet/network.cpp:372
+msgid "There is a new network connection request."
+msgstr "有一个新的网络连接请求。"
+
+#: cygnal/libnet/network.cpp:379
 #, c-format
-msgid "Query is %s"
-msgstr ""
+msgid "The accept() socket for fd #%d was interrupted by a system call"
+msgstr "文件描述符 #%d 的 accept() 套接字被系统调用中断"
 
-#: cygnal/libnet/rtmp_client.cpp:160
+#: cygnal/libnet/network.cpp:403
 #, c-format
-msgid "tcUrl is %s"
-msgstr ""
+msgid "unable to accept: %s"
+msgstr "无法接受:%s"
 
-#: cygnal/libnet/rtmp_client.cpp:161
+#: cygnal/libnet/network.cpp:408
 #, c-format
-msgid "swfUrl is %s"
-msgstr ""
+msgid "Accepting TCP/IP connection on fd #%d for port %d"
+msgstr "接受 TCP/IP 连接在文件描述符 #%d,端口 %d"
 
-#: cygnal/libnet/rtmp_client.cpp:162
+#: cygnal/libnet/network.cpp:467 cygnal/libnet/network.cpp:661
 #, c-format
-msgid "pageUrl is %s"
-msgstr ""
+msgid "The connect() socket for fd %d was interrupted by a system call"
+msgstr "文件描述符 #%d 的 connect() 套接字被系统调用中断"
 
-#: cygnal/libnet/rtmp_client.cpp:313
-msgid "RTMP handshake request failed"
-msgstr ""
+#: cygnal/libnet/network.cpp:473 cygnal/libnet/network.cpp:498
+#: cygnal/libnet/network.cpp:667 cygnal/libnet/network.cpp:702
+#, c-format
+msgid "The connect() socket for fd %d never was available for writing"
+msgstr "文件描述符 #%d 的 connect() 套接字将不可写"
 
-#: cygnal/libnet/rtmp_client.cpp:336
-msgid "RTMP handshake completion failed!"
-msgstr ""
+#: cygnal/libnet/network.cpp:484 cygnal/libnet/network.cpp:685
+#, c-format
+msgid "The connect() socket for fd %d timed out waiting to write"
+msgstr "文件描述符 #%d 的 connect() 套接字等待写入超时"
 
-#: cygnal/libnet/rtmp_client.cpp:350
-msgid "Sent NetConnection Connect message successfully"
-msgstr ""
+#: cygnal/libnet/network.cpp:492
+#, c-format
+msgid "\tsocket name %s for fd %d"
+msgstr "\t套接字名称 %s,文件描述符 %d"
 
-#: cygnal/libnet/rtmp_client.cpp:353
-msgid "Couldn't send NetConnection Connect message,"
-msgstr ""
+#: cygnal/libnet/network.cpp:571
+#, c-format
+msgid "%s: to host %s at port %d"
+msgstr "%s: 主机 %s,端口 %d"
 
-#: cygnal/libnet/rtmp_client.cpp:622
-msgid "Couldn't read data block in handshake!"
-msgstr ""
+#: cygnal/libnet/network.cpp:695
+#, c-format
+msgid "\tport %d at IP %s for fd %d"
+msgstr "\t端口 %d,IP %s,文件描述符 %d"
 
-#: cygnal/libnet/rtmp_client.cpp:635
+#: cygnal/libnet/network.cpp:780
 #, c-format
-msgid "Read data block in handshake, got %d bytes."
-msgstr ""
+msgid "Unable to close the socket for fd #%d: %s"
+msgstr "无法关闭文件描述符 #%d 的套接字:%s"
 
-#: cygnal/libnet/rtmp_client.cpp:638
+#: cygnal/libnet/network.cpp:788
 #, c-format
-msgid "Couldn't read data block in handshake, read %d bytes!"
-msgstr ""
+msgid "Closed the socket on fd #%d"
+msgstr "关闭文件描述符 #%d 的套接字"
 
-#: cygnal/libnet/rtmp_client.cpp:645
+#: cygnal/libnet/network.cpp:817
 #, c-format
-msgid "RTMP Handshake header: Uptime: %u"
-msgstr ""
+msgid "%s: Closed fd #%d"
+msgstr "%s: 已关闭文件描述符 #%d"
 
-#: cygnal/libnet/rtmp_client.cpp:688
+#: cygnal/libnet/network.cpp:929
 #, c-format
-msgid "About to write %d bytes, data is: %d bytes."
-msgstr ""
+msgid "Trying to read %d bytes from fd #%d"
+msgstr "试图读取 %d 字节从文件描述符 #%d"
 
-#: cygnal/libnet/rtmp_client.cpp:691
+#: cygnal/libnet/network.cpp:993 cygnal/libnet/network.cpp:1167
 #, c-format
-msgid "Client response header for handshake 2: %s"
-msgstr ""
+msgid "The socket for fd #%d was interrupted by a system call"
+msgstr "文件描述符 #%d 的套接字被系统调用中断"
 
-#: cygnal/libnet/rtmp_client.cpp:693
+#: cygnal/libnet/network.cpp:997
 #, c-format
-msgid "Data in response for handshake 2: %s"
-msgstr ""
+msgid "The socket for fd #%d was never available for reading"
+msgstr "文件描述符 #%d 的套接字不可用于读取"
 
-#: cygnal/libnet/rtmp_client.cpp:702
-msgid "Couldn't write the second handshake packet!"
-msgstr ""
+#: cygnal/libnet/network.cpp:1003
+#, c-format
+msgid "The socket for #fd %d timed out waiting to read"
+msgstr "文件描述符 #%d 的套接字等待读取超时"
 
-#: cygnal/libnet/rtmp_client.cpp:729
-msgid "Got no response from the RTMP server"
-msgstr ""
+#: cygnal/libnet/network.cpp:1020
+#, c-format
+msgid "The socket for fd #%d was never available for reading data"
+msgstr "文件描述符 #%d 的套接字不可用于读取数据"
 
-#: cygnal/libnet/rtmp_client.cpp:737
-msgid "Got empty packet in buffer."
-msgstr ""
+#: cygnal/libnet/network.cpp:1026
+#, c-format
+msgid "The socket for #fd %d timed out waiting to read data"
+msgstr "文件描述符 #%d 的套接字等待读取数据超时"
 
-#: cygnal/libnet/rtmp_client.cpp:748
-msgid "No response from INVOKE of NetConnection connect"
-msgstr ""
+#: cygnal/libnet/network.cpp:1032
+#, c-format
+msgid "read %d bytes from fd #%d from port %d"
+msgstr "读取 %d 字节从文件描述符 #%d,端口 %d"
 
-#: cygnal/libnet/rtmp_client.cpp:755
+#: cygnal/libnet/network.cpp:1036
 #, c-format
 msgid ""
-"%s: There are %d channel queues in the RTMP input queue, %d messages in "
-"front queue"
+"%s: Read packet data from fd #%d (%d bytes): \n"
+"%s"
 msgstr ""
+"%s: 读取包数据从文件描述符 #%d (%d 字节): \n"
+"%s"
 
-#: cygnal/libnet/rtmp_client.cpp:768
-msgid "Couldn't decode RTMP message header"
-msgstr ""
+#: cygnal/libnet/network.cpp:1171
+#, c-format
+msgid "The socket for fd #%d was never available for writing"
+msgstr "文件描述符 #%d 的套接字不可用于写入"
 
-#: cygnal/libnet/rtmp_client.cpp:773
-msgid "RTMP packet can't be of none type!"
-msgstr ""
+#: cygnal/libnet/network.cpp:1175
+#, c-format
+msgid "The socket for fd #%d timed out waiting to write"
+msgstr "文件描述符 #%d 的套接字等待写入数据超时"
 
-#: cygnal/libnet/rtmp_client.cpp:777
-msgid "Server message data packet"
-msgstr ""
+#: cygnal/libnet/network.cpp:1189
+#, c-format
+msgid "Wrote zero out of %d bytes to fd #%d: %s"
+msgstr "已写入 0/%d 字节到文件描述符 #%d: %s"
 
-#: cygnal/libnet/rtmp_client.cpp:781
-msgid "Abort packet"
-msgstr ""
+#: cygnal/libnet/network.cpp:1194
+#, c-format
+msgid "Couldn't write %d bytes to fd #%d: %s"
+msgstr "无法写入 %d 字节到文件描述符 #%d: %s"
 
-#: cygnal/libnet/rtmp_client.cpp:784
-msgid "Bytes Read data packet"
-msgstr ""
+#: cygnal/libnet/network.cpp:1202
+#, c-format
+msgid "wrote %d bytes to fd #%d, expected %d"
+msgstr "已写入 %d 字节到文件描述符 #%d, 预计为 %d"
 
-#: cygnal/libnet/rtmp_client.cpp:789
+#: cygnal/libnet/network.cpp:1207
 #, c-format
-msgid "Got a Ping type %s"
-msgstr ""
+msgid "wrote %d bytes to fd #%d for port %d"
+msgstr "已写入 %d 字节到文件描述符 #%d,端口 %d"
 
-#: cygnal/libnet/rtmp_client.cpp:793
-msgid "Set Window Size message data packet"
+#: cygnal/libnet/network.cpp:1215
+#, c-format
+msgid ""
+"%s: Wrote packet data to fd #%d: \n"
+"%s"
 msgstr ""
+"%s: 写入包数据到文件描述符 #%d: \n"
+"%s"
 
-#: cygnal/libnet/rtmp_client.cpp:796
-msgid "Set Bandwidthmessage data packet"
-msgstr ""
+#: cygnal/libnet/network.cpp:1229
+#, c-format
+msgid "took %d usec to write (%d bytes)"
+msgstr "花费 %d 微妙来写入(%d 字节)"
 
-#: cygnal/libnet/rtmp_client.cpp:799
-msgid "Route from other server packet"
-msgstr ""
+#: cygnal/libnet/network.cpp:1244 cygnal/libnet/network.cpp:1255
+#, c-format
+msgid "%s: adding fd #%d to pollfds"
+msgstr "%s: 添加文件描述符 #%d 到 pollfds"
 
-#: cygnal/libnet/rtmp_client.cpp:818
-msgid "AMF0 Shared Object data packet message"
-msgstr ""
+#: cygnal/libnet/network.cpp:1281
+#, c-format
+msgid "%s: erasing fd #%d from pollfds"
+msgstr "%s: 从 pollfds 删除文件描述符 #%d "
 
-#: cygnal/libnet/rtmp_client.cpp:821
-msgid "AMF3 Notify data packet message"
-msgstr ""
+#: cygnal/libnet/network.cpp:1329
+#, c-format
+msgid "%s: waiting for %d fds"
+msgstr "%s: 等待 %d fds"
 
-#: cygnal/libnet/rtmp_client.cpp:824
-msgid "AMF3 Shared Object data packet message"
-msgstr ""
+#: cygnal/libnet/network.cpp:1368
+#, c-format
+msgid "Poll returned: %d, timeout is: %d"
+msgstr "Poll 返回: %d, 超时为: %d"
 
-#: cygnal/libnet/rtmp_client.cpp:827
-msgid "AMF0 Invoke packet message"
-msgstr ""
+#: cygnal/libnet/network.cpp:1499
+msgid "Waiting for data was interrupted by a system call"
+msgstr "正在等待数据被系统调用中断"
 
-#: cygnal/libnet/rtmp_client.cpp:830
-msgid "AMF0 Notify data packet message"
-msgstr ""
+#: cygnal/libnet/network.cpp:1503
+msgid "Waiting for data for fdset, was never available for reading"
+msgstr "等待 fdset 数据,不可用于读取"
 
-#: cygnal/libnet/rtmp_client.cpp:841
-msgid "FLV data packet message"
-msgstr ""
+#: cygnal/libnet/network.cpp:1517
+#, c-format
+msgid "select() got an error: %s."
+msgstr "select() 遇到一个错误:%s."
 
-#: cygnal/libnet/rtmp_client.cpp:844
-msgid "Couldn't decode RTMP message Body"
-msgstr ""
+#: cygnal/libnet/network.cpp:1521
+#, c-format
+msgid "select() saw activity on %d file descriptors."
+msgstr "select() 发现 %d 文件描述符上的活动。"
 
-#: cygnal/libnet/sslserver.cpp:136
-msgid "SSL!!"
-msgstr ""
+#: cygnal/libnet/network.cpp:1597
+#, c-format
+msgid "Can't connect to server %s"
+msgstr "无法连接到服务器 %s"
 
-#: cygnal/libnet/sslserver.cpp:159
-msgid "Got an incoming SSL connection request"
-msgstr ""
+#: cygnal/libnet/network.cpp:1609
+#, c-format
+msgid "Using default hostname: \"%s\""
+msgstr "正在使用缺省主机名: \"%s\""
 
-#: cygnal/libnet/sslserver.cpp:169 cygnal/libnet/sslclient.cpp:137
-#: cygnal/libnet/sslclient.cpp:161 cygnal/libnet/sslclient.cpp:212
-#: cygnal/libnet/sslclient.cpp:236 cygnal/libnet/sslclient.cpp:314
+#: cygnal/libnet/network.cpp:1614
 #, c-format
-msgid "Error was: \"%s\"!"
-msgstr ""
+msgid "Using default keyfile: \"%s\""
+msgstr "使用缺省的密钥文件:\"%s\""
 
-#: cygnal/libnet/sslserver.cpp:182 cygnal/libnet/sslclient.cpp:386
-msgid "==== The SSL header breaks down as follows: ===="
-msgstr ""
+#: cygnal/libnet/network.cpp:1619
+#, c-format
+msgid "Using default CA List: \"%s\""
+msgstr "正在使用缺省 CA 列表:\"%s\""
 
-#: cygnal/libnet/cque.cpp:71
-msgid "CQue::wait(win32)"
-msgstr ""
+#: cygnal/libnet/network.cpp:1625
+#, c-format
+msgid "Using default Password: \"%s\""
+msgstr "正在使用缺省密码:\"%s\""
 
-#: cygnal/libnet/cque.cpp:83
-msgid "CQue::notify(win32)"
+#: cygnal/libnet/network.cpp:1630
+#, c-format
+msgid "Using default Root Path to PEM files: \"%s\""
+msgstr "正在使用PEM文件的缺省路径:\"%s\""
+
+#: cygnal/libnet/network.cpp:1635
+msgid "Connected to SSL server"
+msgstr "连接到SSL服务器"
+
+#: cygnal/libnet/network.cpp:1637
+msgid "Couldn't connect to SSL server"
+msgstr "无法连接SSL服务器"
+
+#: cygnal/libnet/network.cpp:1670
+#, c-format
+msgid "#%d bytes waiting in kernel network buffer."
+msgstr "内核网络缓冲区#%d 字节在等待。"
+
+#: cygnal/libnet/network.cpp:1692
+msgid "no IP address in addrinfo!"
 msgstr ""
 
+#: cygnal/libnet/network.cpp:1704
+#, c-format
+msgid "Got an %d interrupt while blocked on pselect()"
+msgstr "遇到一个 %d 中断同时阻塞 pselect() "
+
+#: cygnal/libnet/sslclient.cpp:137 cygnal/libnet/sslclient.cpp:161
+#: cygnal/libnet/sslclient.cpp:212 cygnal/libnet/sslclient.cpp:236
+#: cygnal/libnet/sslclient.cpp:314 cygnal/libnet/sslserver.cpp:169
+#, c-format
+msgid "Error was: \"%s\"!"
+msgstr "错误是: \"%s\"!"
+
 #: cygnal/libnet/sslclient.cpp:211
 #, c-format
 msgid "Can't read CA list from \"%s\"!"
-msgstr ""
+msgstr "无法从 \"%s\" 读取 CA 列表!"
 
 #: cygnal/libnet/sslclient.cpp:216
 #, c-format
 msgid "Read CA list from \"%s\""
-msgstr ""
+msgstr "从 \"%s\" 读取 CA 列表 "
 
 #: cygnal/libnet/sslclient.cpp:222
 #, c-format
 msgid "Can't read certificate file \"%s\"!"
-msgstr ""
+msgstr "无法读取证书文件 \"%s\"!"
 
 #: cygnal/libnet/sslclient.cpp:225
 #, c-format
 msgid "Read certificate file \"%s\"."
-msgstr ""
+msgstr "读取证书文件 \"%s\"。"
 
 #: cygnal/libnet/sslclient.cpp:235
 #, c-format
 msgid "Can't read CERT file \"%s\"!"
-msgstr ""
+msgstr "无法读取 CERT 文件 \"%s\"!"
 
 #: cygnal/libnet/sslclient.cpp:240
 #, c-format
 msgid "Read key file \"%s\"."
-msgstr ""
+msgstr "读取秘钥文件 \"%s\"。"
 
 #: cygnal/libnet/sslclient.cpp:301
 #, c-format
 msgid "PORT is: %d"
-msgstr ""
+msgstr "端口是: %d"
 
 #: cygnal/libnet/sslclient.cpp:304
 #, c-format
 msgid "Error connecting to remote machine: %s"
-msgstr ""
+msgstr "错误连接到远程机器: %s"
 
 #: cygnal/libnet/sslclient.cpp:313
 #, c-format
 msgid "Can't connect to SSL server %s"
-msgstr ""
+msgstr "无法连接到 SSL 服务器 %s"
 
 #: cygnal/libnet/sslclient.cpp:318
 #, c-format
 msgid "Connected to SSL server %s"
-msgstr ""
+msgstr "已连接到 SSL 服务器 %s"
 
 #: cygnal/libnet/sslclient.cpp:351
 msgid "Certificate doesn't verify"
-msgstr ""
+msgstr "不验证证书"
 
 #: cygnal/libnet/sslclient.cpp:354
 msgid "Certificate verified."
-msgstr ""
+msgstr "证书已验证"
 
 #: cygnal/libnet/sslclient.cpp:363
 msgid "Couldn't get Peer certificate!"
-msgstr ""
+msgstr "无法得到端证书!"
 
 #: cygnal/libnet/sslclient.cpp:366
 msgid "Got Peer certificate."
-msgstr ""
+msgstr "得到端证书。"
 
 #: cygnal/libnet/sslclient.cpp:374
 msgid "Common name doesn't match host name"
-msgstr ""
+msgstr "通用名称和主机名不匹配"
+
+#: cygnal/libnet/sslclient.cpp:386 cygnal/libnet/sslserver.cpp:182
+msgid "==== The SSL header breaks down as follows: ===="
+msgstr "==== 该 SSL 头部分解如下:===="
 
 #: cygnal/libnet/sslclient.cpp:409
 #, c-format
 msgid "Callback executed to set the SSL password, size is: %d"
-msgstr ""
+msgstr "设置SSL密码需要回调运行,大小为:%d"
 
 #: cygnal/libnet/sslclient.cpp:413
 #, c-format
 msgid "The buffer for the password needs to be %d bytes larger"
-msgstr ""
+msgstr "密码缓冲区需要 %d 字节或较大"
 
 #: cygnal/libnet/sslclient.cpp:439
 #, c-format
 msgid "-Error with certificate at depth: %i\n"
-msgstr ""
+msgstr "证书错误位于深度: %i\n"
 
 #: cygnal/libnet/sslclient.cpp:441
 #, c-format
 msgid "  issuer   = %s\n"
-msgstr ""
+msgstr "发行人 = %s\n"
 
 #: cygnal/libnet/sslclient.cpp:443
 #, c-format
 msgid "  subject  = %s\n"
-msgstr ""
+msgstr "主题 = %s\n"
 
 #: cygnal/libnet/sslclient.cpp:444
 #, c-format
 msgid "err %i:%s\n"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:176
-#, c-format
-msgid "Setting Content Length to %d"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:189
-#, c-format
-msgid "Setting Content Type to %d"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:199
-#, c-format
-msgid "Got a request, parsing \"%s\""
-msgstr ""
-
-#: cygnal/libnet/http.cpp:216 cygnal/libnet/http.cpp:1295
-#, c-format
-msgid "Parameters for file: \"%s\""
-msgstr ""
-
-#: cygnal/libnet/http.cpp:220
-#, c-format
-msgid "Requesting file: \"%s\""
-msgstr ""
-
-#: cygnal/libnet/http.cpp:225
-msgid "Enabling Keep Alive by default for HTTP > 1.0"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:422 cygnal/libnet/http.cpp:521
-#, c-format
-msgid "Que empty, net connection dropped for fd #%d"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:433
-msgid "FIXME: found file in cache!"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:499
-#, c-format
-msgid "http_handler all done transferring requested file \"%s\"."
-msgstr ""
-
-#: cygnal/libnet/http.cpp:542
-msgid "Got file data in POST"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:549
-msgid "Got AMF data in POST"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:564
-msgid "Got CGI echo request in POST"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1385
-#, c-format
-msgid "%s: Total size for first chunk is: %d, data size %d (%d)"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1419 cygnal/libnet/http.cpp:1512
-#, c-format
-msgid "no data yet for fd #%d, continuing..."
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1436
-#, c-format
-msgid "%s: end of chunks!"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1502
-#, c-format
-msgid "Starting to wait for data in net for fd #%d"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1538
-#, c-format
-msgid "no more data for fd #%d, exiting..."
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1542
-#, c-format
-msgid "Handler done for fd #%d, can't read any data..."
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1548
-#, c-format
-msgid "Done receiving data for fd #%d..."
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1560
-msgid "==== The HTTP header breaks down as follows: ===="
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1561
-#, c-format
-msgid "Filespec: %s"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1562
-#, c-format
-msgid "Version: %d.%d"
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1566
-#, c-format
-msgid "Field: \"%s\" = \"%s\""
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1570
-msgid "RTMPT optional index is: "
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1571
-msgid "RTMPT optional client ID is: "
-msgstr ""
-
-#: cygnal/libnet/http.cpp:1572
-msgid "==== ==== ===="
-msgstr ""
+msgstr "错误 %i:%s\n"
 
 #: cygnal/libnet/diskstream.cpp:307
 #, c-format
 msgid "Deleting %s on fd #%d"
-msgstr ""
+msgstr "正在删除 %s 在文件描述符 #%d"
 
 #: cygnal/libnet/diskstream.cpp:351
 #, c-format
 msgid "Closing %s on fd #%d"
-msgstr ""
+msgstr "正在关闭 %s 在文件描述符 #%d"
 
 #: cygnal/libnet/diskstream.cpp:405
 #, c-format
 msgid "%s: offset is: %d"
-msgstr ""
+msgstr "%s: 偏移是: %d"
 
 #: cygnal/libnet/diskstream.cpp:419
 #, c-format
 msgid "Adjusting offset from %d to %d so it's page aligned."
-msgstr ""
+msgstr "调整偏移从 %d 到 %d 来对齐页面。"
 
 #: cygnal/libnet/diskstream.cpp:422
 msgid "Offset is page aligned already"
-msgstr ""
+msgstr "偏移是页面已对齐"
 
 #: cygnal/libnet/diskstream.cpp:429
 #, c-format
 msgid "Loading entire file of %d bytes into memory segment"
-msgstr ""
+msgstr "正在加载 %d 字节的整个文件到内存段"
 
 #: cygnal/libnet/diskstream.cpp:433
 #, c-format
 msgid "Loading partial file of %d bytes into memory segment"
-msgstr ""
+msgstr "正在加载 %d 字节的部分文件到内存段"
 
 #: cygnal/libnet/diskstream.cpp:442
 msgid "Using existing Buffer for file"
-msgstr ""
+msgstr "正在使用文件已有的缓冲区"
 
 #: cygnal/libnet/diskstream.cpp:493
 #, c-format
 msgid "Couldn't load file %s"
-msgstr ""
+msgstr "无法加载文件 %s"
 
 #: cygnal/libnet/diskstream.cpp:498
 #, c-format
 msgid "Couldn't map file %s into memory: %s"
-msgstr ""
+msgstr "无法映射文件 %s 到内存: %s"
 
 #: cygnal/libnet/diskstream.cpp:502
 #, c-format
 msgid "File %s a offset %d mapped to: %p"
-msgstr ""
+msgstr "文件 %s 偏移 %d 映射到: %p"
 
 #: cygnal/libnet/diskstream.cpp:586
 #, c-format
 msgid "Writing data (%d bytes) to disk: \"%s\""
-msgstr ""
+msgstr "正在写入数据 (%d 字节) 到磁盘: \"%s\""
 
-#: cygnal/libnet/diskstream.cpp:660
+#: cygnal/libnet/diskstream.cpp:662
 #, c-format
 msgid "Trying to open %s"
-msgstr ""
+msgstr "试图打开文件 %s"
 
-#: cygnal/libnet/diskstream.cpp:665
+#: cygnal/libnet/diskstream.cpp:667
 #, c-format
 msgid "Opening file %s (fd #%d), %lld bytes in size."
-msgstr ""
+msgstr "正在打开文件 %s (文件描述符 #%d), %lld 字节大小。"
 
-#: cygnal/libnet/diskstream.cpp:672
+#: cygnal/libnet/diskstream.cpp:674
 #, c-format
 msgid "File %s doesn't exist"
-msgstr ""
+msgstr "文件 %s 不存在"
 
-#: cygnal/libnet/diskstream.cpp:727
+#: cygnal/libnet/diskstream.cpp:729
 #, c-format
 msgid "No Diskstream open %s for net fd #%d"
-msgstr ""
+msgstr "打开 %s,网络描述符 #%d 时没有磁盘流"
 
-#: cygnal/libnet/diskstream.cpp:733
+#: cygnal/libnet/diskstream.cpp:735
 #, c-format
 msgid "Diskstream %s is closed on net fd #%d."
-msgstr ""
+msgstr "已关闭磁盘流 %s,网络描述符 #%d。"
 
-#: cygnal/libnet/diskstream.cpp:753
+#: cygnal/libnet/diskstream.cpp:755
 #, c-format
 msgid "In %s(%d): couldn't write %d bytes to net fd #%d! %s"
-msgstr ""
+msgstr "在 %s(%d) 中: 无法写入 %d 字节到网络描述符 #%d! %s"
 
-#: cygnal/libnet/diskstream.cpp:758
+#: cygnal/libnet/diskstream.cpp:760
 #, c-format
 msgid "Done playing file %s, size was: %d"
-msgstr ""
+msgstr "完成播放文件 %s, 大小是: %d"
 
-#: cygnal/libnet/diskstream.cpp:771
+#: cygnal/libnet/diskstream.cpp:773
 #, c-format
 msgid "In %s(%d): couldn't write %d of bytes of data to net fd #%d! Got %d, %s"
-msgstr ""
+msgstr "在 %s(%d) 中: 无法写入 %d 字节数据到网络描述符 #%d! 得到 %d, %s"
 
-#: cygnal/libnet/diskstream.cpp:803
+#: cygnal/libnet/diskstream.cpp:805
 msgid "Restarting Disk Stream from the beginning"
-msgstr ""
+msgstr "重新启动从开始的磁盘流"
 
-#: cygnal/libnet/diskstream.cpp:956
+#: cygnal/libnet/diskstream.cpp:958
 #, c-format
 msgid "%s is a directory, appending index.html"
-msgstr ""
+msgstr "%s 是一个目录, 添加 index.html"
 
 #: cygnal/libnet/sshclient.cpp:120
 #, c-format
 msgid "SSH read error was: \"%s\"!"
-msgstr ""
+msgstr "SSH 读取错误是: \"%s\"!"
 
 #: cygnal/libnet/sshclient.cpp:142
 #, c-format
 msgid "SSH write error was: \"%s\"!"
-msgstr ""
+msgstr "SSH 写入错误是: \"%s\"!"
 
 #: cygnal/libnet/sshclient.cpp:180
 msgid "Couldn't set hostname option"
-msgstr ""
+msgstr "无法设置主机名选项"
 
 #: cygnal/libnet/sshclient.cpp:187
 msgid "Couldn't set user name option"
-msgstr ""
+msgstr "无法设置用户名选项"
 
 #: cygnal/libnet/sshclient.cpp:195
 #, c-format
 msgid "Connection failed : %s\n"
-msgstr ""
+msgstr "连接失败 : %s\n"
 
 #: cygnal/libnet/sshclient.cpp:210
 #, c-format
 msgid "SSH Server is currently known: %d"
-msgstr ""
+msgstr "已知当前 SSH 服务器: %d"
 
 #: cygnal/libnet/sshclient.cpp:213
 msgid "Host key for server changed : server's one is now: "
-msgstr ""
+msgstr "服务器主秘钥已改变:现在服务器之一是:"
 
 #: cygnal/libnet/sshclient.cpp:214
 msgid "Public key hash"
-msgstr ""
+msgstr "公共密钥散列"
 
 #: cygnal/libnet/sshclient.cpp:216
 msgid "For security reason, connection will be stopped"
-msgstr ""
+msgstr "出于安全原因,被停止连接"
 
 #: cygnal/libnet/sshclient.cpp:220
 msgid ""
 "The host key for this server was not found but an other type of key exists."
-msgstr ""
+msgstr "未发现该服务器的主秘钥,但存在其他类型秘钥。"
 
 #: cygnal/libnet/sshclient.cpp:221
+#, fuzzy
 msgid ""
 "An attacker might change the default server key to confuse your client into "
 "thinking the key does not existWe advise you to rerun the client with -d or -"
 "r for more safety."
 msgstr ""
+"一个攻击者也许会改变缺省服务器秘钥,从而让你的客户端认为秘钥不存在\n"
+"为了安全,我们建议你重新运行客户端。"
 
 #: cygnal/libnet/sshclient.cpp:232
 msgid "The server is unknown. Do you trust the host key ? (yes,no)"
-msgstr ""
+msgstr "该服务器未知。你信任该服务器秘钥吗?(是,否)"
 
 #: cygnal/libnet/sshclient.cpp:233
 #, c-format
 msgid "Public key hash: %s"
-msgstr ""
+msgstr "公共秘钥散列: %s"
 
 #: cygnal/libnet/sshclient.cpp:240
 msgid ""
 "This new key will be written on disk for further usage. do you agree? (yes,"
 "no) "
-msgstr ""
+msgstr "新的秘钥会被写入到磁盘,便于将来使用。你同意吗?(是,否)"
 
 #: cygnal/libnet/sshclient.cpp:266
 msgid "supported auth methods: "
-msgstr ""
+msgstr "已支持的认证方法:"
 
 #: cygnal/libnet/sshclient.cpp:268
 msgid "\tpublickey"
-msgstr ""
+msgstr "\t公共秘钥"
 
 #: cygnal/libnet/sshclient.cpp:271
 msgid "\tkeyboard-interactive"
-msgstr ""
+msgstr "\t键盘交互"
 
 #: cygnal/libnet/sshclient.cpp:277
 #, c-format
 msgid "Authenticating with pubkey: %s"
-msgstr ""
+msgstr "验证使用公共秘钥: %s"
 
 #: cygnal/libnet/sshclient.cpp:289
 #, c-format
 msgid "authenticating with keyb-interactive: %s"
-msgstr ""
+msgstr "验证使用键盘交互: %s"
 
 #: cygnal/libnet/sshclient.cpp:298
 #, c-format
 msgid "Authentication failed: %s"
-msgstr ""
+msgstr "验证失败: %s"
 
 #: cygnal/libnet/sshclient.cpp:393
 msgid "Can't open the SSH channel!"
-msgstr ""
+msgstr "无法打开SSH通道"
 
 #: cygnal/libnet/sshclient.cpp:396
 msgid "Can't allocate memory for new SSH channel!"
-msgstr ""
+msgstr "无法为新的SSH通道分配内存!"
 
 #: cygnal/libnet/sshclient.cpp:412
+#, fuzzy
 msgid "Can't read from a non-existent channel!"
-msgstr ""
+msgstr "无法读取一个不存在的通道!"
 
 #: cygnal/libnet/sshclient.cpp:427
+#, fuzzy
 msgid "Can't write to a non-existent channel!"
-msgstr ""
+msgstr "无法写入一个不存在的通道!"
 
-#: cygnal/crc.cpp:145
-#, c-format
-msgid "Couldn't open file: %s"
-msgstr ""
+#: cygnal/libnet/sshclient.cpp:459 cygnal/libnet/sshserver.cpp:200
+msgid "==== The SSH header breaks down as follows: ===="
+msgstr "==== 该 SSH 头部分解如下:===="
 
-#: cygnal/cygnal.cpp:190
-msgid "cygnal -- a streaming media server."
+#: cygnal/libnet/sslserver.cpp:136
+msgid "SSL!!"
 msgstr ""
 
-#: cygnal/cygnal.cpp:192
-msgid "Usage: cygnal [options...]"
-msgstr ""
+#: cygnal/libnet/sslserver.cpp:159
+msgid "Got an incoming SSL connection request"
+msgstr "有一个传入的SSL连接请求"
 
-#: cygnal/cygnal.cpp:193 cygnal/cgi-bin/echo/echo.cpp:316
-#: cygnal/cgi-bin/echo/gateway.cpp:406
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:321
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:596
-#: cygnal/testsuite/libnet.all/test_handler.cpp:281
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:300
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:269
-#: cygnal/testsuite/libnet.all/test_cache.cpp:391
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:247
-#: cygnal/testsuite/libamf.all/test_flv.cpp:282
-#: cygnal/testsuite/libamf.all/test_el.cpp:491
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:721
-#: cygnal/testsuite/libamf.all/test_amf.cpp:422
-msgid "  -h,  --help          Print this help and exit"
-msgstr ""
+#: cygnal/libnet/cache.cpp:62
+msgid "using this constructor is only allowed for testing purposes."
+msgstr "用于测试目的只允许使用此构造函数。"
 
-#: cygnal/cygnal.cpp:194
-msgid "  -V,  --version       Print version information and exit"
-msgstr ""
+#: cygnal/libnet/cache.cpp:105
+#, c-format
+msgid "Adding file %s to cache."
+msgstr "添加文件 %s 到缓存。"
 
-#: cygnal/cygnal.cpp:195 cygnal/cgi-bin/echo/echo.cpp:317
-#: cygnal/cgi-bin/echo/gateway.cpp:407
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:322
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:597
-#: cygnal/testsuite/libnet.all/test_handler.cpp:282
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:301
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:270
-#: cygnal/testsuite/libnet.all/test_cache.cpp:392
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:248
-#: cygnal/testsuite/libamf.all/test_flv.cpp:283
-#: cygnal/testsuite/libamf.all/test_el.cpp:492
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:722
-#: cygnal/testsuite/libamf.all/test_amf.cpp:423
-msgid "  -v,  --verbose       Output verbose debug info"
-msgstr ""
+#: cygnal/libnet/cache.cpp:148
+#, c-format
+msgid "Trying to find %s in the cache."
+msgstr "试图在缓冲中找到 %s "
 
-#: cygnal/cygnal.cpp:196
-msgid "  -s,  --singlethread  Disable Multi Threading"
-msgstr ""
+#: cygnal/libnet/sshserver.cpp:145
+#, c-format
+msgid "User %s wants to auth with pass %s\n"
+msgstr "用户 %s 希望使用密码 %s 进行认证\n"
 
-#: cygnal/cygnal.cpp:197 cygnal/cgi-bin/echo/echo.cpp:318
-#: cygnal/cgi-bin/echo/gateway.cpp:408
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:323
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:598
-msgid "  -n,  --netdebug      Turn on net debugging messages"
-msgstr ""
+#: cygnal/testsuite/libnet.all/test_rtmp.cpp:113
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:99
+#: cygnal/testsuite/libamf.all/test_el.cpp:95
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:111
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:107
+#: cygnal/testsuite/libamf.all/test_sol.cpp:106
+#: cygnal/testsuite/libamf.all/test_amf.cpp:113
+msgid "Enabling memory statistics"
+msgstr "启用内存统计"
 
-#: cygnal/cygnal.cpp:198
-msgid "  -o   --only-port     Only use port for debugging"
-msgstr ""
+#: cygnal/testsuite/libnet.all/test_rtmp.cpp:121
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:101
+#: cygnal/testsuite/libnet.all/test_handler.cpp:113
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:112
+#: cygnal/testsuite/libnet.all/test_cache.cpp:104
+#: cygnal/testsuite/libamf.all/test_el.cpp:108
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:124
+#: cygnal/testsuite/libamf.all/test_flv.cpp:104
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:120
+#: cygnal/testsuite/libamf.all/test_sol.cpp:114
+#: cygnal/testsuite/libamf.all/test_amf.cpp:126
+msgid "This is a Gnash bug."
+msgstr "这是一个 Gnash 错误。"
 
-#: cygnal/cygnal.cpp:199
-msgid "  -p   --port-offset   Port offset for debugging"
-msgstr ""
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:268
+#: cygnal/testsuite/libnet.all/test_handler.cpp:280
+#: cygnal/testsuite/libnet.all/test_cache.cpp:390
+msgid "Usage: test_diskstream [options...]"
+msgstr "用法: test_diskstream [options...]"
 
-#: cygnal/cygnal.cpp:200
-msgid "  -t,  --testing       Turn on special Gnash testing support"
-msgstr ""
+#: cygnal/testsuite/libnet.all/test_diskstream.cpp:271
+#: cygnal/testsuite/libnet.all/test_handler.cpp:283
+#: cygnal/testsuite/libnet.all/test_cache.cpp:393
+msgid "  -d,  --dump          Dump data structures"
+msgstr "-d, --dump 转储数据结构"
 
-#: cygnal/cygnal.cpp:201
-msgid "  -a,  --admin         Enable the administration thread"
-msgstr ""
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:104
+#: cygnal/testsuite/libamf.all/test_el.cpp:100
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:116
+#: cygnal/testsuite/libamf.all/test_flv.cpp:96
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:112
+#: cygnal/testsuite/libamf.all/test_amf.cpp:118
+msgid "Logging to disk enabled"
+msgstr "已启用记录日志到磁盘"
 
-#: cygnal/cygnal.cpp:202
-msgid "  -r,  --root          Document root for all files"
-msgstr ""
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:299
+#: cygnal/testsuite/libamf.all/test_el.cpp:490
+msgid "Usage: test_el [options...]"
+msgstr "用法: test_el [options...]"
 
-#: cygnal/cygnal.cpp:265
-msgid ": couldn't open file: "
-msgstr ""
+#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:302
+#: cygnal/testsuite/libamf.all/test_el.cpp:493
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:723
+#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:249
+#: cygnal/testsuite/libamf.all/test_amf.cpp:424
+msgid "  -m,  --memdebug      Output memory statistics"
+msgstr "-m, --memdebug 输出内存统计"
 
-#: cygnal/cygnal.cpp:342
-#, c-format
-msgid "Couldn't connect to %s"
-msgstr ""
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:718
+msgid "test_buffer - test Buffer class"
+msgstr "test_buffer - 测试缓冲区类"
 
-#: cygnal/cygnal.cpp:362
-#, c-format
-msgid "%s is active on fd #%d."
-msgstr ""
+#: cygnal/testsuite/libamf.all/test_buffer.cpp:720
+msgid "Usage: test_buffer [options...]"
+msgstr "用法: test_buffer [options...]"
 
-#: cygnal/cygnal.cpp:500
-#, c-format
-msgid "Extraneous argument: %s"
-msgstr ""
+#: cygnal/libamf/amf_msg.cpp:178
+msgid "AMF Message 'target' field missing!"
+msgstr "AMF 消息 'target' 字段缺失!"
 
-#: cygnal/cygnal.cpp:504 cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:441
-#, c-format
-msgid "Document Root for media files is: %s"
-msgstr ""
+#: cygnal/libamf/amf_msg.cpp:181
+msgid "AMF Message 'reply' field missing!"
+msgstr "AMF 消息 'reply' 字段缺失!"
 
-#: cygnal/cygnal.cpp:586
-msgid "Cygnal done..."
-msgstr ""
+#: cygnal/libamf/amf_msg.cpp:184
+msgid "AMF Message 'size' field missing!"
+msgstr "AMF 消息 'size' 字段缺失!"
 
-#: cygnal/cygnal.cpp:599
+#: cygnal/libamf/amf_msg.cpp:231
 #, c-format
-msgid "Got a %d interrupt"
+msgid ""
+"Error parsing the AMF packet: \n"
+"\t%s"
 msgstr ""
+"解析该 AMF 包错误: \n"
+"\t%s"
 
-#: cygnal/cygnal.cpp:619
-#, fuzzy
+#: cygnal/libamf/sol.cpp:212
+#, c-format
 msgid ""
-"Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.\n"
-"Cygnal comes with NO WARRANTY, to the extent permitted by law.\n"
-"You may redistribute copies of Cygnal under the terms of the GNU General\n"
-"Public License V3. For more information, see the file named COPYING.\n"
+"%s: SOL file header is: \n"
+"%s"
 msgstr ""
-"版权所有 (C) 2007, 2008, 2009, 2010 自由软件基金会, Inc.\n"
-"Cygnal 在法律允许的限度内不作任何担保。\n"
-"您可以在遵守 GNU 通用公共许可证条款的前提下分发 Cygnal 的副本。更多信息请参见"
-"名为 COPYING 的文件。\n"
+"%s: SOL 文件头部是: \n"
+"%s"
 
-#: cygnal/cygnal.cpp:641
+#: cygnal/libamf/sol.cpp:232
 #, c-format
-msgid "Starting Admin Handler for port %d"
-msgstr ""
+msgid "Failed opening file '%s' in binary mode"
+msgstr "无法用二进制模式打开文件 '%s'"
 
-#: cygnal/cygnal.cpp:643
-msgid "Got an incoming Admin request"
-msgstr ""
+#: cygnal/libamf/sol.cpp:319
+#, c-format
+msgid "Error writing %d bytes of header to output file %s"
+msgstr "写入头部的 %d 字节到输出文件 %s 出错"
 
-#: cygnal/cygnal.cpp:651
-msgid "no more admin data, exiting...\n"
-msgstr ""
+#: cygnal/libamf/sol.cpp:326
+#, c-format
+msgid "Error writing %d bytes of body to output file %s"
+msgstr "写入主体的 %d 字节到输出文件 %s 出错"
 
-#: cygnal/cygnal.cpp:736
-msgid "admin_handler: Done...!\n"
-msgstr ""
+#: cygnal/libamf/sol.cpp:386
+#, c-format
+msgid "%s is an SOL file"
+msgstr "%s 是一个 SOL 文件"
 
-#: cygnal/cygnal.cpp:765
+#: cygnal/libamf/sol.cpp:389
 #, c-format
-msgid "Can't start %s Connection Handler for fd #%d, port %hd"
-msgstr ""
+msgid ""
+"%s looks like an SOL file, but the length is wrong. Should be %d, got %d"
+msgstr "%s 看上去是一个 SOL 文件,但文件长度错误。应该是 %d,但得到 %d"
 
-#: cygnal/cygnal.cpp:769
+#: cygnal/libamf/sol.cpp:395
 #, c-format
-msgid "Starting %s Connection Handler for fd #%d, port %hd"
-msgstr ""
+msgid "%s isn't an SOL file"
+msgstr "%s 不是一个 SOL 文件"
 
-#: cygnal/cygnal.cpp:780
+#: cygnal/libamf/sol.cpp:437
 #, c-format
-msgid "This system has %d cpus."
-msgstr ""
+msgid "Reading SharedObject %s: %s"
+msgstr "读取 SharedObject %s: %s"
 
-#: cygnal/cygnal.cpp:817
+#: cygnal/libamf/flv.cpp:94
+msgid "Bad magic number for FLV file!"
+msgstr " FLV 文件中错误的魔法数字!"
+
+#: cygnal/libamf/flv.cpp:101
 #, c-format
-msgid "No new %s network connections"
-msgstr ""
+msgid "Bad version in FLV header! %d"
+msgstr "FLV 头部中错误版本号!%d"
 
-#: cygnal/cygnal.cpp:821
+#: cygnal/libamf/flv.cpp:110
 #, c-format
-msgid "*** New %s network connection for thread ID #%d, fd #%d ***"
-msgstr ""
+msgid "Bad FLV file Type: %d"
+msgstr "错误的 FLV 文件类型:%d"
 
-#: cygnal/cygnal.cpp:867
+#: cygnal/libamf/flv.cpp:123
 #, c-format
-msgid "Creating new %s Handler for %s using fd #%d"
-msgstr ""
+msgid "Bad header size in FLV header! %d"
+msgstr "FLV 头部中错误的头部大小!%d"
 
-#: cygnal/cygnal.cpp:885
+#: cygnal/libamf/flv.cpp:156
 #, c-format
-msgid "Reusing %s Handler for %s using fd #%d"
-msgstr ""
+msgid "%d bytes for a string is over the safe limit of %d"
+msgstr "一个字符串的字节数 %d 超过了安全限制 %d"
 
-#: cygnal/cygnal.cpp:911
+#: cygnal/libamf/flv.cpp:186
 #, c-format
-msgid "Creating new %s Handler for: %s for fd %#d"
-msgstr ""
+msgid "Bad FLV Audio Sound Type: %x"
+msgstr "错误的 FLV 音频声音类型:%x"
 
-#: cygnal/cygnal.cpp:935
+#: cygnal/libamf/flv.cpp:195
 #, c-format
-msgid "Cygnal Plugin paths are: %s"
-msgstr ""
+msgid "Bad FLV Audio Sound size: %d"
+msgstr "错误的 FLV 音频声音大小:%d"
 
-#: cygnal/cygnal.cpp:956
+#: cygnal/libamf/flv.cpp:209
 #, c-format
-msgid "Couldn't load plugin for %s"
-msgstr ""
+msgid "Bad FLV Audio Sound Rate: %d"
+msgstr "错误的 FLV 音频声音速率:%d"
 
-#: cygnal/cygnal.cpp:967
+#: cygnal/libamf/flv.cpp:226
 #, c-format
-msgid "Number of active Threads is %d"
-msgstr ""
+msgid "Bad FLV Audio Sound format: %d"
+msgstr "错误的 FLV 音频声音格式:%d"
 
-#: cygnal/cygnal.cpp:970
+#: cygnal/libamf/flv.cpp:257
 #, c-format
-msgid "Restarting loop for next connection for port %d..."
-msgstr ""
+msgid "Bad FLV Video Codec CodecID: 0x%x"
+msgstr "错误的 FLV 视频编码 CodecID: 0x%x"
 
-#: cygnal/cygnal.cpp:1028
+#: cygnal/libamf/flv.cpp:267
 #, c-format
-msgid "%d active disk streams"
-msgstr ""
+msgid "Bad FLV Video Frame CodecID: 0x%x"
+msgstr "错误的 FLV 视频帧 CodecID: 0x%x"
 
-#: cygnal/cygnal.cpp:1068
+#: cygnal/libamf/flv.cpp:340 cygnal/libamf/flv.cpp:342
+#: cygnal/libamf/flv.cpp:344
 #, c-format
-msgid "Got a hit for fd #%d, protocol %s"
-msgstr ""
+msgid "FLV MetaData: %s: %s"
+msgstr "FLV MetaData: %s: %s"
 
-#: cygnal/cygnal.cpp:1072
-msgid "No protocol specified!"
-msgstr ""
+#: cygnal/libamf/element.cpp:175
+msgid "Can't create remote function calls yet"
+msgstr "当前无法创建远程函数调用"
 
-#: cygnal/cygnal.cpp:1080 cygnal/cygnal.cpp:1105 cygnal/cygnal.cpp:1116
+#: cygnal/libamf/element.cpp:479
 #, c-format
-msgid "Done with HTTP connection for fd #%d, CGI %s"
-msgstr ""
+msgid "Size of Element \"%s\" is: %d"
+msgstr "元素 \"%s\" 大小为: %d"
 
-#: cygnal/cygnal.cpp:1085
-#, c-format
-msgid "Not Done with HTTP connection for fd #%d, it's a persistent connection."
-msgstr ""
+#: cygnal/libamf/element.cpp:1534
+msgid "FIXME: got AMF3 data!"
+msgstr "FIXME: 得到 AMF3 数据!"
+
+#: cygnal/libamf/lcshm.cpp:372
+msgid "No data pointer to parse!"
+msgstr "没有要解析的数据指针!"
 
-#: cygnal/cygnal.cpp:1094
+#: cygnal/libamf/lcshm.cpp:391
+msgid "Didn't extract an element from the byte stream!"
+msgstr "没有从字节流中提取一个元素!"
+
+#: cygnal/libamf/lcshm.cpp:503
 #, c-format
-msgid "Done with RTMP connection for fd #%d, CGI "
-msgstr ""
+msgid " The size of %s is %d "
+msgstr "%s 的大小是 %d"
 
-#: cygnal/cygnal.cpp:1128
+#: cygnal/libamf/lcshm.cpp:520
 #, c-format
-msgid "Unsupported network protocol for fd #%d, %d"
-msgstr ""
+msgid "Failed to open shared memory segment: \"%s\""
+msgstr "无法打开共享内存段:\"%s\""
 
-#: cygnal/cygnal.cpp:1148
+#: cygnal/libamf/lcshm.cpp:561
 #, c-format
-msgid "Got no hits, %d retries"
-msgstr ""
+msgid "Failed to open shared memory segment: 0x%x"
+msgstr "无法打开共享内存段:0x%x"
 
-#: cygnal/cgi-bin/echo/echo.cpp:161 cygnal/cgi-bin/echo/gateway.cpp:139
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:166
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:233
+#: cygnal/libamf/lcshm.cpp:660
 #, c-format
-msgid "Error parsing command line options: %s"
-msgstr ""
+msgid " ***** The size of the data is %s *****"
+msgstr "***** 该数据大小是 %s *****"
 
-#: cygnal/cgi-bin/echo/echo.cpp:315 cygnal/cgi-bin/echo/gateway.cpp:405
-#: cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:320
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:595
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:246
-#: cygnal/testsuite/libamf.all/test_flv.cpp:281
-#: cygnal/testsuite/libamf.all/test_amf.cpp:421
-msgid "Usage: test_amf [options...]"
-msgstr ""
+#: cygnal/libamf/buffer.cpp:179
+#, c-format
+msgid "Buffer %x (%d) stayed in queue for %f seconds"
+msgstr "缓冲区 %x (%d) 在队列中保留 %f 秒"
 
-#: cygnal/cgi-bin/echo/echo.cpp:319 cygnal/cgi-bin/fitcDemo/fitcDemo.cpp:324
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:599
-msgid "  -p,  --netdebug      port for network"
-msgstr ""
+#: cygnal/libamf/buffer.cpp:711
+#, c-format
+msgid "cygnal::Buffer::resize(%d): Truncating data (%d bytes) while resizing!"
+msgstr "cygnal::Buffer::resize(%d): 调整大小同时截断数据(%d字节)!"
 
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:309
+#: cygnal/libamf/buffer.cpp:766
 #, c-format
-msgid "Scanning directory \"%s\" for %s files"
-msgstr ""
+msgid "Creating %d errors in the buffer"
+msgstr "在缓冲区中穿件 %d 错误"
 
-#: cygnal/cgi-bin/oflaDemo/oflaDemo.cpp:340
+#: cygnal/libamf/amf.cpp:180
 #, c-format
-msgid "Gnash media file name: %s"
-msgstr ""
+msgid "Encoded data size has %d properties"
+msgstr "编码后的数据大小有 %d 属性"
 
-#: cygnal/rtmp_server.cpp:124
-msgid "Failed to read the handshake from the client."
-msgstr ""
+#: cygnal/libamf/amf.cpp:300
+msgid "XML AMF objects not supported yet"
+msgstr "XML AMF 对象还不支持"
 
-#: cygnal/rtmp_server.cpp:139
-msgid "failed to read the handshake from the client."
-msgstr ""
+#: cygnal/libamf/amf.cpp:404
+msgid "Movie Clip AMF objects not supported yet"
+msgstr "影片剪辑 AMF 对象还不支持"
 
-#: cygnal/rtmp_server.cpp:149
-msgid "Didn't receive any data in handshake!"
-msgstr ""
+#: cygnal/libamf/amf.cpp:495
+msgid "Long String AMF objects not supported yet"
+msgstr "长字符串 AMF 对象还不支持"
 
-#: cygnal/rtmp_server.cpp:160
-msgid "RTMP header had parsing error!"
-msgstr ""
+#: cygnal/libamf/amf.cpp:512
+msgid "Reecord Set AMF objects not supported yet"
+msgstr "记录集 AMF 对象还不支持"
 
-#: cygnal/rtmp_server.cpp:168
-#, c-format
-msgid "NetConnection unusually large! %d"
-msgstr ""
+#: cygnal/libamf/amf.cpp:561
+msgid "Encoding a strict array as an ecma array"
+msgstr "编码一个限制数组为 ecma 数组"
 
-#: cygnal/rtmp_server.cpp:202
-msgid "failed to read the body of the handshake data from the client."
-msgstr ""
+#: cygnal/libamf/amf.cpp:784
+msgid "FIXME: got AMF3 data type"
+msgstr "FIXME: 得到 AMF3 数据类型"
 
-#: cygnal/rtmp_server.cpp:210
-msgid "Didn't receive NetConnection object in handshake!"
-msgstr ""
+#: cygnal/libamf/amf.cpp:913
+msgid "AMF body input data is NULL"
+msgstr "AMF 主体输入数据为 NULL"
 
-#: cygnal/rtmp_server.cpp:234
-msgid "Couldn't send onBWDone to client!"
-msgstr ""
+#: cygnal/libamf/amf.cpp:937
+msgid "AMF data too short to contain type field"
+msgstr "AMF 数据太短而不能包含类型字段"
 
-#: cygnal/rtmp_server.cpp:261 cygnal/rtmp_server.cpp:1702
-msgid "Couldn't send Ping to client!"
-msgstr ""
+#: cygnal/libamf/amf.cpp:948
+msgid "Element has no type!"
+msgstr "元素没有类型!"
 
-#: cygnal/rtmp_server.cpp:275
-msgid "Couldn't send response to client!"
-msgstr ""
+#: cygnal/libamf/amf.cpp:958
+msgid "AMF data segment too short to containtype NUMBER"
+msgstr "AMF 数据段太短而不能包含 NUMBER 类型 "
 
-#: cygnal/rtmp_server.cpp:338
+#: cygnal/libamf/amf.cpp:978
 #, c-format
-msgid "Couldn't sent RTMP Handshake response at %d!"
-msgstr ""
+msgid "%d bytes for a string is over the safe limit of %d, line %d"
+msgstr "一个 %d 字节的字符串,超过了安全限制 %d,%d行"
 
-#: cygnal/rtmp_server.cpp:355
-msgid "No data in original handshake buffer."
-msgstr ""
+#: cygnal/libamf/amf.cpp:1021
+msgid "AMF0 MovieClip frame"
+msgstr "AMF0 影片片段帧"
 
-#: cygnal/rtmp_server.cpp:359
-msgid "No data in response handshake buffer."
-msgstr ""
+#: cygnal/libamf/amf.cpp:1151
+msgid "Found object terminator byte"
+msgstr "发现对象终止字节"
 
-#: cygnal/rtmp_server.cpp:387
+#: cygnal/libamf/amf.cpp:1169
 #, c-format
-msgid "Handshake Finish Data didn't match by %d bytes"
-msgstr ""
+msgid "%s: type %d"
+msgstr "%s: 类型 %d"
 
-#: cygnal/rtmp_server.cpp:555
-msgid "Route"
-msgstr ""
+#: cygnal/libamf/amf.cpp:1262
+#, c-format
+msgid "No data associated with Property \"%s\""
+msgstr "没有属性 \"%s\" 相关的数据"
 
-#: cygnal/rtmp_server.cpp:567
-msgid "AMF3 Notify"
-msgstr ""
+#: cygnal/http_server.cpp:154 cygnal/http_server.cpp:211
+#, c-format
+msgid "New filestream %s"
+msgstr "新建文件流 %s"
 
-#: cygnal/rtmp_server.cpp:573
-msgid "AMF3 Invoke"
-msgstr ""
+#: cygnal/http_server.cpp:213
+#, c-format
+msgid "Reusing filestream %s"
+msgstr "重用文件流 %s"
 
-#: cygnal/rtmp_server.cpp:582
-msgid "FLV Dat"
-msgstr ""
+#: cygnal/http_server.cpp:308
+msgid "couldn't read data!"
+msgstr "无法读取数据!"
 
-#: cygnal/rtmp_server.cpp:585
+#: cygnal/http_server.cpp:1015
 #, c-format
-msgid "ERROR: Unidentified RTMP message content type 0x%x"
-msgstr ""
+msgid "Processing HTTP data for fd #%d"
+msgstr "正在为文件描述符 #%d 处理 HTTP 数据"
 
-#: cygnal/rtmp_server.cpp:1105
-msgid "Couldn't reliably extract the echo data!"
-msgstr ""
+#: cygnal/http_server.cpp:1024
+msgid "FIXME: Existing data in packet!"
+msgstr "FIXME: 在包中存在数据!"
 
-#: cygnal/rtmp_server.cpp:1400
+#: cygnal/http_server.cpp:1026
+msgid "FIXME: No existing data in packet!"
+msgstr "FIXME: 在包中不存在数据!"
+
+#: cygnal/handler.cpp:128
 #, c-format
-msgid "No stream for client %d"
-msgstr ""
+msgid "Protocol %d for Handler::AddClient()"
+msgstr "Handler::AddClient()的协议 %d"
 
-#: cygnal/rtmp_server.cpp:1442
-msgid "Stream Start"
-msgstr ""
+#: cygnal/handler.cpp:171 cygnal/handler.cpp:196
+msgid "HTTP key couldn't be read!"
+msgstr "无法读取 HTTP 键值!"
 
-#: cygnal/rtmp_server.cpp:1445
-msgid "Stream EOF"
-msgstr ""
+#: cygnal/handler.cpp:214 cygnal/handler.cpp:244
+#, c-format
+msgid "FD #%d has no protocol handler registered"
+msgstr "文件描述符 #%d 没有注册协议处理程序"
 
-#: cygnal/rtmp_server.cpp:1448
-msgid "Stream No Data"
-msgstr ""
+#: cygnal/handler.cpp:319
+#, c-format
+msgid "No %s symbol in plugin"
+msgstr "插件中没有 %s 符号"
 
-#: cygnal/rtmp_server.cpp:1451
+#: cygnal/handler.cpp:322
 #, c-format
-msgid "Stream Set Buffer: %d"
-msgstr ""
+msgid "Initialized Plugin: \"%s\": %s"
+msgstr "已初始化插件:\"%s\": %s"
 
-#: cygnal/rtmp_server.cpp:1465
-msgid "Stream Pong"
-msgstr ""
+#: cygnal/handler.cpp:335 cygnal/handler.cpp:350
+#, c-format
+msgid "Couldn't get %s symbol"
+msgstr "无法得到 %s 符号"
 
-#: cygnal/rtmp_server.cpp:1484
-msgid "Set Chunk Size"
-msgstr ""
+#: cygnal/proc.cpp:119
+#, c-format
+msgid "Invalid filespec for CGI: \"%s\""
+msgstr "CGI文件规范无效: \"%s\""
 
-#: cygnal/rtmp_server.cpp:1487
-msgid "Bytes Read"
-msgstr ""
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:163
+msgid "WARNING: failed to create VA-API display."
+msgstr "警告:创建 VA-API 显示失败。"
 
-#: cygnal/rtmp_server.cpp:1495
-msgid "Set Window Size"
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:204
+#, c-format
+msgid ""
+"GTK-AGG: Unknown RGB format %s reported by VA-API.Please report this to the "
+"gnash-dev mailing list."
 msgstr ""
+"GTK-AGG:VA-API 报告了未知的 RGB 格式 %s。请向 gnash-dev 邮件列表报告这一问"
+"题。"
 
-#: cygnal/rtmp_server.cpp:1498
-msgid "Set Bandwidth"
-msgstr ""
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:231 gui/gtk/gtk_glue_agg_vaapi.cpp:289
+msgid "failed to map VA-API image."
+msgstr "映射 VA-API 图像失败。"
 
-#: cygnal/rtmp_server.cpp:1509 cygnal/rtmp_server.cpp:1512
-#: cygnal/rtmp_server.cpp:1515 cygnal/rtmp_server.cpp:1518
-#: cygnal/rtmp_server.cpp:1665
-#, c-format
-msgid "RTMP type %d"
-msgstr ""
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:237
+msgid "failed to associate VA-API subpicture."
+msgstr "关联 VA-API 子图(subpicture)失败。"
 
-#: cygnal/rtmp_server.cpp:1524
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:371
 #, c-format
-msgid "Error INVOKING method \"%s\"!"
-msgstr ""
-
-#: cygnal/rtmp_server.cpp:1648
-msgid "Received an _error message from the client!"
-msgstr ""
+msgid "failed to setup video window for surface 0x%08x."
+msgstr "无法为表面 0x%08x 设置视频窗口。"
 
-#: cygnal/rtmp_server.cpp:1668
+#: gui/gtk/gtk_glue_agg_vaapi.cpp:378
 #, c-format
-msgid "ERROR: Unidentified AMF header data type 0x%x"
-msgstr ""
+msgid "failed to associate subpicture to surface 0x%08x."
+msgstr "无法将子图(subpicture)关联到表面 0x%08x。"
 
-#: cygnal/testsuite/libnet.all/test_handler.cpp:113
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:112
-#: cygnal/testsuite/libnet.all/test_rtmp.cpp:121
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:101
-#: cygnal/testsuite/libnet.all/test_cache.cpp:104
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:120
-#: cygnal/testsuite/libamf.all/test_sol.cpp:114
-#: cygnal/testsuite/libamf.all/test_flv.cpp:104
-#: cygnal/testsuite/libamf.all/test_el.cpp:108
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:124
-#: cygnal/testsuite/libamf.all/test_amf.cpp:126
-msgid "This is a Gnash bug."
+#: gui/gtk/gtk_glue_gtkglext.cpp:72
+msgid ""
+"Cannot find the double-buffered visual.\n"
+"Trying single-buffered visual."
 msgstr ""
+"找不到双缓冲的视图。\n"
+"请尝试单缓冲视图。"
 
-#: cygnal/testsuite/libnet.all/test_handler.cpp:280
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:268
-#: cygnal/testsuite/libnet.all/test_cache.cpp:390
-msgid "Usage: test_diskstream [options...]"
-msgstr ""
+#: gui/gtk/gtk_glue_gtkglext.cpp:78
+msgid "No appropriate OpenGL-capable visual found."
+msgstr "未找到合适的能 OpenGL 渲染的视图。"
 
-#: cygnal/testsuite/libnet.all/test_handler.cpp:283
-#: cygnal/testsuite/libnet.all/test_diskstream.cpp:271
-#: cygnal/testsuite/libnet.all/test_cache.cpp:393
-msgid "  -d,  --dump          Dump data structures"
-msgstr ""
+#: gui/gtk/gtk_glue_agg.cpp:96 gui/haiku/haiku_agg_glue.cpp:297
+#, c-format
+msgid "Could not create AGG renderer with pixelformat %s"
+msgstr "无法创建像素格式为 %s 的 AGG 渲染器"
 
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:99
-#: cygnal/testsuite/libnet.all/test_rtmp.cpp:113
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:107
-#: cygnal/testsuite/libamf.all/test_sol.cpp:106
-#: cygnal/testsuite/libamf.all/test_el.cpp:95
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:111
-#: cygnal/testsuite/libamf.all/test_amf.cpp:113
-msgid "Enabling memory statistics"
-msgstr ""
+#: gui/gtk/gtk_glue_ovg.cpp:88 gui/fb/fb_glue_ovg.cpp:73
+msgid "Probing found an EGL display device"
+msgstr "探测到一台 EGL 显示设备"
 
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:104
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:112
-#: cygnal/testsuite/libamf.all/test_flv.cpp:96
-#: cygnal/testsuite/libamf.all/test_el.cpp:100
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:116
-#: cygnal/testsuite/libamf.all/test_amf.cpp:118
-msgid "Logging to disk enabled"
-msgstr ""
+#: gui/gtk/gtk_glue_ovg.cpp:92 gui/fb/fb_glue_ovg.cpp:77
+msgid "Probing found a raw Framebuffer display device"
+msgstr "探测到一台原生帧缓存(Framebuffer)显示设备"
 
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:299
-#: cygnal/testsuite/libamf.all/test_el.cpp:490
-msgid "Usage: test_el [options...]"
-msgstr ""
+#: gui/gtk/gtk_glue_ovg.cpp:96 gui/fb/fb_glue_ovg.cpp:81
+msgid "Probing found an X11 display device"
+msgstr "探测到一台 X11 显示设备"
 
-#: cygnal/testsuite/libnet.all/generate_amfbins.cpp:302
-#: cygnal/testsuite/libamf.all/test_amfmsg.cpp:249
-#: cygnal/testsuite/libamf.all/test_el.cpp:493
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:723
-#: cygnal/testsuite/libamf.all/test_amf.cpp:424
-msgid "  -m,  --memdebug      Output memory statistics"
-msgstr ""
+#: gui/gtk/gtk_glue_ovg.cpp:100 gui/fb/fb_glue_ovg.cpp:85
+msgid "Probing found a DirectFB display device"
+msgstr "探测到一台 DirectFB 显示设备"
 
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:718
-msgid "test_buffer - test Buffer class"
-msgstr ""
+#: gui/gtk/gtk_glue_ovg.cpp:105 gui/fb/fb_glue_ovg.cpp:90
+msgid "No display devices found by probing!"
+msgstr "探测不到显示设备"
 
-#: cygnal/testsuite/libamf.all/test_buffer.cpp:720
-msgid "Usage: test_buffer [options...]"
-msgstr ""
+#: gui/gtk/gtk_glue_ovg.cpp:182
+msgid "Could not create OPENVG renderer"
+msgstr "无法创建 OPENVG 渲染器!"
 
-#: cygnal/proc.cpp:119
-#, c-format
-msgid "Invalid filespec for CGI: \"%s\""
-msgstr ""
-
-#: gui/fb/fb.cpp:229
-#, c-format
-msgid "No renderer! %s not supported."
-msgstr "无渲染器!%s 不被支持。"
-
-#: gui/fb/fb.cpp:240
-msgid "Found no accessible User mode input event device"
-msgstr "找不到可访问的用户模式输入事件设备"
-
-#: gui/fb/fb.cpp:249
-msgid "Found no accessible input event devices"
-msgstr "找不到可访问的输入事件设备"
-
-#: gui/fb/fb.cpp:262
-msgid "WARNING: Mouse support may conflict with the input event support."
-msgstr "警告:鼠标支持可能与输入事件支持冲突。"
-
-#: gui/fb/fb.cpp:276
-msgid "Enabling Touchscreen support."
-msgstr "启用触摸屏支持。"
-
-#: gui/fb/fb.cpp:281
-msgid "WARNING: Babbage Tablet support disabled as it conflicts with TSlib"
-msgstr "警告:Babbage 平板支持已禁用,与 TSlib 冲突"
-
-#: gui/fb/fb.cpp:283
-msgid "Enabling Babbage Touchscreen support"
-msgstr "启用 Babbage 触摸屏支持"
-
-#: gui/fb/fb.cpp:288
-msgid "Enabling Power Button support"
-msgstr "启用电源按键支持"
-
-#: gui/fb/fb.cpp:368
-#, c-format
-msgid "Movie Frame Rate is %d, adjusting delay to %dms"
-msgstr "影片帧率为 %d,将延迟调整为 %d毫秒"
-
-#: gui/fb/fb.cpp:462
-msgid "This GUI does not yet support menus"
-msgstr "此用户界面尚不支持菜单"
-
-#: gui/fb/fb.cpp:468
-msgid "This GUI does not yet support a mouse pointer"
-msgstr "此用户界面尚不支持鼠标指针"
-
-#: gui/fb/fb.cpp:539
-msgid "Could not detect controlling TTY"
-msgstr "无法检测控制终端(TTY)"
+#: gui/gtk/gtk_glue_ovg.cpp:265 gui/gtk/gtk_glue_ovg.cpp:282
+msgid "No off screen buffer!"
+msgstr "无幕后缓存!"
 
-#: gui/fb/fb.cpp:548 gui/fb/fb.cpp:585 gui/fb/fb.cpp:619 gui/fb/fb.cpp:670
+#: gui/gtk/gtk_glue_ovg.cpp:400
 #, c-format
-msgid "Could not open %s"
-msgstr "无法打开 %s"
-
-#: gui/fb/fb.cpp:554
-msgid "Could not get current VT state"
-msgstr "无法获得当前的 VT 状态"
+msgid "eglGetConfigs() failed to retrive the configs (error %s)"
+msgstr "eglGetConfigs() 无法取回配置(配置 %s)"
 
-#: gui/fb/fb.cpp:565
-msgid "Could not request a new VT"
-msgstr "无法请求新的 VT"
+#: gui/gtk/gtk_glue_cairo.cpp:223
+msgid "Cairo: failed to create a rendering buffer!"
+msgstr "Cairo:创建渲染缓存失败!"
 
-#: gui/fb/fb.cpp:579 gui/fb/fb.cpp:613 gui/fb/fb.cpp:664
-#, c-format
-msgid "Could not find device for VT number %d"
-msgstr "找不到对应 VT 号 %d 的设备"
+#: gui/gtk/gtk.cpp:155
+msgid "Failed to initialize X threading support\n"
+msgstr "初始化 X 线程支持失败\n"
 
-#: gui/fb/fb.cpp:590 gui/fb/fb.cpp:675
-#, c-format
-msgid "Could not activate VT number %d"
-msgstr "无法激活 VT 号 %d"
+#: gui/gtk/gtk.cpp:198
+msgid "This system lacks a hardware OpenGL driver!"
+msgstr "此系统缺少硬件 OpenGL 驱动!"
 
-#: gui/fb/fb.cpp:596 gui/fb/fb.cpp:681
-#, c-format
-msgid "Error waiting for VT %d becoming active"
-msgstr "等等 VT %d 激活时出错"
+#: gui/gtk/gtk.cpp:210
+msgid "Click to play"
+msgstr "点击播放"
 
-#: gui/fb/fb.cpp:627
+#: gui/gtk/gtk.cpp:599
 #, c-format
-msgid "Could not attach controlling terminal (%s)"
-msgstr "无法附加控制终端(%s)"
-
-#: gui/fb/fb.cpp:635
-msgid "Could not query current keyboard mode on VT"
-msgstr "无法请求 VT 上的当前键盘模式"
-
-#: gui/fb/fb.cpp:639
-msgid "Could not switch to graphics mode on new VT"
-msgstr "在新 VT 上无法切换到图形模式"
-
-#: gui/fb/fb.cpp:690
-msgid "Could not restore keyboard mode"
-msgstr "无法恢复键盘模式"
-
-#: gui/fb/fb_glue_ovg.cpp:73 gui/gtk/gtk_glue_ovg.cpp:88
-msgid "Probing found an EGL display device"
-msgstr "探测到一台 EGL 显示设备"
-
-#: gui/fb/fb_glue_ovg.cpp:77 gui/gtk/gtk_glue_ovg.cpp:92
-msgid "Probing found a raw Framebuffer display device"
-msgstr "探测到一台原生帧缓存(Framebuffer)显示设备"
+msgid "Advance interval timer set to %d ms (~ %d FPS)"
+msgstr "高级内部定时器设置为 %d 毫秒(约 %d FPS)"
 
-#: gui/fb/fb_glue_ovg.cpp:81 gui/gtk/gtk_glue_ovg.cpp:96
-msgid "Probing found an X11 display device"
-msgstr "探测到一台 X11 显示设备"
+#: gui/gtk/gtk.cpp:673
+msgid "Sound"
+msgstr "声音"
 
-#: gui/fb/fb_glue_ovg.cpp:85 gui/gtk/gtk_glue_ovg.cpp:100
-msgid "Probing found a DirectFB display device"
-msgstr "探测到一台 DirectFB 显示设备"
+#: gui/gtk/gtk.cpp:1226 gui/qt/Qt4Gui.cpp:771
+msgid "Gnash preferences"
+msgstr "Gnash 首选项"
 
-#: gui/fb/fb_glue_ovg.cpp:90 gui/gtk/gtk_glue_ovg.cpp:105
-msgid "No display devices found by probing!"
-msgstr "探测不到显示设备"
+#: gui/gtk/gtk.cpp:1261
+msgid "_Network"
+msgstr "网络(_N)"
 
-#: gui/fb/fb_glue_ovg.cpp:156
-msgid "Could not create OpenVG renderer"
-msgstr "无法创建 OpenVG 渲染器"
+#: gui/gtk/gtk.cpp:1265 gui/qt/Qt4Gui.cpp:888
+msgid "<b>Network preferences</b>"
+msgstr "<b>网络首选项</b>"
 
-#: gui/fb/fb_glue_ovg.cpp:168 gui/fb/fb_glue_agg.cpp:76
-msgid "No renderer set!"
-msgstr "未设置渲染器!"
+#: gui/gtk/gtk.cpp:1273
+msgid "Network timeout in seconds (0 for no timeout):"
+msgstr "网络超时秒数(0 为无超时):"
 
-#: gui/fb/fb_glue_gles1.cpp:98
-msgid "EGL: getDisplay ok"
-msgstr "EGL:getDisplay 正常"
+#: gui/gtk/gtk.cpp:1292
+msgid "_Logging"
+msgstr "日志记录(_L)"
 
-#: gui/fb/fb_glue_gles1.cpp:104
-msgid "EGL: initialize ok"
-msgstr "EGL:初始化 正常"
+#: gui/gtk/gtk.cpp:1297 gui/qt/Qt4Gui.cpp:789
+msgid "<b>Logging options</b>"
+msgstr "<b>日志选项</b>"
 
-#: gui/fb/fb_glue_gles1.cpp:111
-msgid "EGL: config ok"
-msgstr "EGL:配置 正常"
+#: gui/gtk/gtk.cpp:1301
+msgid "Verbosity level:"
+msgstr "详尽程度:"
 
-#: gui/fb/fb_glue_gles1.cpp:118
-msgid "EGL: surface ok"
-msgstr "EGL:表面 正常"
+#: gui/gtk/gtk.cpp:1314
+msgid "Log to _file"
+msgstr "记录到文件(_F)"
 
-#: gui/fb/fb_glue_gles1.cpp:124
-msgid "EGL: context ok"
-msgstr "EGL:上下文 正常"
+#: gui/gtk/gtk.cpp:1320
+msgid "Logfile name:"
+msgstr "日志文件名:"
 
-#: gui/fb/fb_glue_gles1.cpp:130
-msgid "EGL: current ok"
-msgstr "EGL:当前 正常"
+#: gui/gtk/gtk.cpp:1333
+msgid "Log _parser output"
+msgstr "记录解析器输出(_P)"
 
-#: gui/fb/fb_glue_agg.cpp:87
-#, c-format
-msgid "No renderer set in %s!"
-msgstr "%s 中没有设置渲染器!"
+#: gui/gtk/gtk.cpp:1341
+msgid "Log SWF _actions"
+msgstr "记录 SWF 操作(_A)"
 
-#: gui/fb/fb_glue_agg.cpp:130
-msgid "failed to create a render handler for AGG!"
-msgstr "无法创建针对 AGG 的渲染处理器!"
+#: gui/gtk/gtk.cpp:1349
+msgid "Log malformed SWF _errors"
+msgstr "记录损坏的 SWF 错误(_E)"
 
-#: gui/fb/fb_glue_agg.cpp:151
-msgid "No Device layer initialized yet!"
-msgstr "尚未初始化任何设备层!"
+#: gui/gtk/gtk.cpp:1357
+msgid "Log ActionScript _coding errors"
+msgstr "记录 ActionScript 代码错误(_C)"
 
-#: gui/fb/fb_glue_agg.cpp:182
-msgid "The pixel format of your framebuffer could not be detected."
-msgstr "尚未检测您的帧缓存的像素格式。"
+#: gui/gtk/gtk.cpp:1373
+msgid "_Security"
+msgstr "安全(_S)"
 
-#: gui/fb/fb_glue_agg.cpp:191
-msgid "Double buffering disabled"
-msgstr "双缓冲已禁用"
+#: gui/gtk/gtk.cpp:1380 gui/qt/Qt4Gui.cpp:840
+msgid "<b>Network connections</b>"
+msgstr "<b>网络连接</b>"
 
-#: gui/fb/fb_glue_agg.cpp:194
-msgid "Double buffering enabled"
-msgstr "双缓冲已启用"
+#: gui/gtk/gtk.cpp:1386
+msgid "Connect only to local _host"
+msgstr "只连接本地主机(_H)"
 
-#: gui/fb/fb_glue_agg.cpp:221
-#, c-format
-msgid "No Drawbounds set in %s!"
-msgstr "%s 中未设置绘制边界!"
+#: gui/gtk/gtk.cpp:1393
+msgid "Connect only to local _domain"
+msgstr "只连接本地域(_D)"
 
-#: gui/gnash.cpp:125
-#, c-format
-msgid "Error parsing options: %s\n"
-msgstr "解析命令出错:%s\n"
+#: gui/gtk/gtk.cpp:1400
+msgid "Disable SSL _verification"
+msgstr "禁用 SSL 验证(_V)"
 
-#: gui/gnash.cpp:166
-msgid "Error: no input file was specified. Exiting.\n"
-msgstr "错误:未指定输入文件。退出。\n"
+#: gui/gtk/gtk.cpp:1407
+msgid "_Whitelist"
+msgstr "白名单(_W)"
 
-#: gui/gnash.cpp:212
-msgid "Invalid host communication filedescriptor %1%\n"
-msgstr "无效的主机通信文件描述符 %1%\n"
+#: gui/gtk/gtk.cpp:1416
+msgid "_Blacklist"
+msgstr "黑名单(_B)"
 
-#: gui/gnash.cpp:219
-msgid "Invalid control communication filedescriptor %1%\n"
-msgstr "无效的控制通信文件描述符 %1%\n"
+#: gui/gtk/gtk.cpp:1425 gui/qt/Qt4Gui.cpp:858
+msgid "<b>Privacy</b>"
+msgstr "<b>隐私</b>"
 
-#: gui/gnash.cpp:251
-msgid "ERROR: -r must be followed by 0, 1, 2 or 3 "
-msgstr "错误:-r 后必须跟 0、1、2 或 3 "
+#: gui/gtk/gtk.cpp:1429 gui/qt/Qt4Gui.cpp:861
+msgid "Shared objects directory:"
+msgstr "共享对象目录:"
 
-#: gui/gnash.cpp:267
-msgid "Debugging options"
-msgstr "调试选项"
+#: gui/gtk/gtk.cpp:1441
+msgid "Do _not write Shared Object files"
+msgstr "不写共享对象文件(_N)"
 
-#: gui/gnash.cpp:273
-msgid "Produce verbose output"
-msgstr "产生详尽的输出"
+#: gui/gtk/gtk.cpp:1448
+msgid "Only _access local Shared Object files"
+msgstr "只访问本地的共享对象文件(_A)"
 
-#: gui/gnash.cpp:280
-msgid "Produce the disk based debug log"
-msgstr "产生基于磁盘的调试日志"
+#: gui/gtk/gtk.cpp:1455
+msgid "Disable Local _Connection object"
+msgstr "禁用本地连接对象(_C)"
 
-#: gui/gnash.cpp:285
-msgid "Be (very) verbose about action execution"
-msgstr "(很)详尽的输出操作执行情况"
+#: gui/gtk/gtk.cpp:1469
+msgid "_Media"
+msgstr "媒体(_M)"
 
-#: gui/gnash.cpp:291
-msgid "Be (very) verbose about parsing"
-msgstr "(很)详尽的输出解析情况"
+#: gui/gtk/gtk.cpp:1475 gui/qt/Qt4Gui.cpp:906
+msgid "<b>Sound</b>"
+msgstr "<b>声音</b>"
 
-#: gui/gnash.cpp:297
-msgid "Print FPS every num seconds"
-msgstr "每隔 num 秒打印帧率(FPS)"
+#: gui/gtk/gtk.cpp:1480
+msgid "Use sound _handler"
+msgstr "使用声音处理器(_H)"
 
-#: gui/gnash.cpp:320
-msgid "Options"
-msgstr "选项"
+#: gui/gtk/gtk.cpp:1488
+msgid "<b>Media Streams</b>"
+msgstr "<b>媒体流</b>"
 
-#: gui/gnash.cpp:325
-msgid "Print this help and exit"
-msgstr "打印此帮助并退出"
+#: gui/gtk/gtk.cpp:1494 gui/qt/Qt4Gui.cpp:913
+msgid "Save media streams to disk"
+msgstr "将媒体流保存到磁盘"
 
-#: gui/gnash.cpp:328
-msgid "Print version information and exit"
-msgstr "打印版本信息并退出"
+#: gui/gtk/gtk.cpp:1503 gui/qt/Qt4Gui.cpp:919
+msgid "Save dynamically loaded media to disk"
+msgstr "将动态加载的媒体保存到磁盘"
 
-#: gui/gnash.cpp:333
-msgid "Scale the movie by the specified factor"
-msgstr "按指定的系数拉伸影片"
+#: gui/gtk/gtk.cpp:1511 gui/qt/Qt4Gui.cpp:923
+msgid "Saved media directory:"
+msgstr "保存媒体的目录:"
 
-#: gui/gnash.cpp:337
-msgid "Number of milliseconds to delay in main loop"
-msgstr "主循环延迟的毫秒数"
+#: gui/gtk/gtk.cpp:1531
+msgid "_Player"
+msgstr "播放器(_P)"
 
-#: gui/gnash.cpp:341
-msgid "Audio dump file (wave format)"
-msgstr "音频转储文件(wave 格式)"
+#: gui/gtk/gtk.cpp:1537 gui/qt/Qt4Gui.cpp:935
+msgid "<b>Player description</b>"
+msgstr "<b>播放器描述</b>"
 
-#: gui/gnash.cpp:346
-msgid "Hardware Video Accelerator to use"
-msgstr "要使用的硬件视频加速"
+#: gui/gtk/gtk.cpp:1545 gui/qt/Qt4Gui.cpp:938
+msgid "Player version:"
+msgstr "播放器版本:"
 
-#: gui/gnash.cpp:351
-msgid "X11 Window ID for display"
-msgstr "显示用的 X11 窗口 ID"
+#: gui/gtk/gtk.cpp:1561 gui/qt/Qt4Gui.cpp:944
+msgid "Operating system:"
+msgstr "操作系统:"
 
-#: gui/gnash.cpp:355
-msgid "Set window width"
-msgstr "设置窗口宽度"
+#: gui/gtk/gtk.cpp:1571
+msgid "<i>If blank, Gnash will detect your OS</i>"
+msgstr "<i>如果不填,Gnash 会检测您的操作系统</i>"
 
-#: gui/gnash.cpp:359
-msgid "Set window height"
-msgstr "设置窗口高度"
+#: gui/gtk/gtk.cpp:1581 gui/qt/Qt4Gui.cpp:955
+msgid "URL opener:"
+msgstr "URL 打开程序:"
 
-#: gui/gnash.cpp:363
-msgid "Set window x position"
-msgstr "设置窗口水平位置"
+#: gui/gtk/gtk.cpp:1593 gui/qt/Qt4Gui.cpp:962
+msgid "<b>Performance</b>"
+msgstr "<b>性能</b>"
 
-#: gui/gnash.cpp:367
-msgid "Set window y position"
-msgstr "设置窗口竖直位置"
+#: gui/gtk/gtk.cpp:1607 gui/qt/Qt4Gui.cpp:965
+msgid "Max size of movie library:"
+msgstr "媒体库的最大尺寸:"
 
-#: gui/gnash.cpp:372
-msgid "Exit when/if movie reaches the last frame"
-msgstr "当影片到最后一帧时退出"
+#: gui/gtk/gtk.cpp:1624
+msgid "Max scripts execution time (in seconds):"
+msgstr "脚本执行最长时间(秒):"
 
-#: gui/gnash.cpp:378
-msgid "disable rendering and sound"
-msgstr "禁止渲染和声音"
+#: gui/gtk/gtk.cpp:1643
+msgid "Max scripts recursion limit (stack depth):"
+msgstr "脚本重入最大限制(栈深度):"
 
-#: gui/gnash.cpp:380
-msgid "enable rendering, disable sound"
-msgstr "启用渲染,禁用声音"
+#: gui/gtk/gtk.cpp:1659
+msgid "Lock script limits so that SWF tags can't override"
+msgstr "锁定脚本限制,以使 SWF 标记无法覆盖"
 
-#: gui/gnash.cpp:382
-msgid "enable sound, disable rendering"
-msgstr "启用声音,禁用渲染"
+#: gui/gtk/gtk.cpp:1671
+msgid "Start _Gnash in pause mode"
+msgstr "以暂停方式启动 _Gnash"
 
-#: gui/gnash.cpp:384
-msgid "enable rendering and sound"
-msgstr "启用渲染和声音"
+#: gui/gtk/gtk.cpp:1695 gui/qt/Qt4Gui.cpp:468
+msgid "Movie properties"
+msgstr "影片属性"
 
-#: gui/gnash.cpp:392
-msgid "The media handler to use"
-msgstr "要使用的媒体处理器"
+#: gui/gtk/gtk.cpp:1765 gui/qt/Qt4Gui.cpp:487
+msgid "Variable"
+msgstr "变量"
 
-#: gui/gnash.cpp:400
-msgid "The renderer to use"
-msgstr "要使用的渲染器"
+#: gui/gtk/gtk.cpp:1777 gui/qt/Qt4Gui.cpp:488
+msgid "Value"
+msgstr "值"
 
-#: gui/gnash.cpp:406
-msgid "Exit after the specified number of seconds"
-msgstr "在指定秒数后退出"
+#: gui/gtk/gtk.cpp:1830
+msgid ""
+"This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 3 of the License, or\n"
+"(at your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+"GNU General Public License for more details.\n"
+"You should have received a copy of the GNU General Public License\n"
+"along with this program; if not, write to the Free Software\n"
+"Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301\n"
+"USA or visit http://www.gnu.org/licenses/."
+msgstr ""
+"本程序是免费软件,您可以遵守由自由软件基金会发布的\n"
+"GNU通用公共许可协议(GPL v3或者更新版本)的条款下,\n"
+"重新发布和/或修改它。\n"
+"\n"
+"希望本程序发布后,是会有用处的,但没有任何担保;\n"
+"也没有针对用于销售或针对特定用途的适用性做隐含保证。\n"
+"详细信息请查看GNU通用公共许可协议。\n"
+"你会收到一个伴随本程序的GNU通用公共许可证的副本;\n"
+"如果没有,请写信给  Free Software\n"
+"Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, \n"
+"MA 02110-1301 USA\n"
+"或访问http://www.gnu.org/licenses/。"
+
+#: gui/gtk/gtk.cpp:1846
+msgid "Gnash is the GNU SWF Player based on GameSWF."
+msgstr "Gnash 是基于 GameSWF 的 GNU SWF 播放器。"
 
-#: gui/gnash.cpp:409
-msgid "Set \"real\" URL of the movie"
-msgstr "设置影片的“真实”URL"
+#: gui/gtk/gtk.cpp:1847
+msgid ""
+"\n"
+"Renderer: "
+msgstr ""
+"\n"
+"渲染器:"
 
-#: gui/gnash.cpp:413
-msgid "Set \"base\" URL for resolving relative URLs"
-msgstr "设置用于解析相对 URL 的“基”URL"
+#: gui/gtk/gtk.cpp:1849
+msgid ""
+"\n"
+"Hardware Acceleration: "
+msgstr ""
+"\n"
+"硬件加速:"
 
-#: gui/gnash.cpp:418
-msgid "Set parameter (e.g. \"FlashVars=A=1&b=2\")"
-msgstr "设置参数(如“FlashVars=A=1&b=2”)"
+#: gui/gtk/gtk.cpp:1851
+msgid ""
+"\n"
+"GUI: "
+msgstr ""
+"\n"
+"用户界面:"
 
-#: gui/gnash.cpp:422
-msgid "Filedescriptor to use for external communications"
-msgstr "用于外部通信的文件描述符"
+#: gui/gtk/gtk.cpp:1853
+msgid ""
+"\n"
+"Media: "
+msgstr ""
+"\n"
+"媒体:"
 
-#: gui/gnash.cpp:428
-msgid "Exit after specified number of frame advances"
-msgstr "前进指定帧数后退出"
+#: gui/gtk/gtk.cpp:1883
+msgid "translator-credits"
+msgstr "Wylmer Wang <wantinghard at gmail.com>"
 
-#: gui/gnash.cpp:432
-msgid "Start in fullscreen mode"
-msgstr "以全屏方式启动"
+#: gui/gtk/gtk.cpp:1910
+msgid "_File"
+msgstr "文件(_F)"
 
-#: gui/gnash.cpp:437
-msgid "Start without displaying the menu bar"
-msgstr "启动时不显示菜单栏"
+#: gui/gtk/gtk.cpp:1963
+msgid "_Edit"
+msgstr "编辑(_E)"
 
-#: gui/gnash.cpp:442
-msgid "List of frames to save as screenshots"
-msgstr "要保存截屏的帧列表"
+#: gui/gtk/gtk.cpp:1983
+msgid "_Help"
+msgstr "帮助(_H)"
 
-#: gui/gnash.cpp:446
-msgid "Filename pattern for screenshot images"
-msgstr "截屏图像的文件名模式"
+#: gui/gtk/gtk.cpp:2003
+msgid "_View"
+msgstr "查看(_V)"
 
-#: gui/gnash.cpp:450
-msgid "Quality for screenshot output (not all formats)"
-msgstr "截屏输出的质量(并非所有格式)"
+#: gui/gtk/gtk.cpp:2011
+msgid "Redraw"
+msgstr "重绘"
 
-#: gui/gnash.cpp:453
-msgid "Input files"
-msgstr "输入文件"
+#: gui/gtk/gtk.cpp:2021 gui/gtk/gtk.cpp:2026
+msgid "Toggle fullscreen"
+msgstr "切换全屏"
 
-#: gui/gnash.cpp:464
-msgid "Dump options"
-msgstr "转储选项"
+#: gui/gtk/gtk.cpp:2035
+msgid "Show updated ranges"
+msgstr "显示已更新的范围"
 
-#: gui/gnash.cpp:469
-msgid "Video dump file (raw format) and optional video FPS (@<num>)"
-msgstr "视频转储文件(原生格式)和可选的视频帧率(@<num>)"
+#: gui/gtk/gtk.cpp:2054
+msgid "_Quality"
+msgstr "质量(_Q)"
 
-#: gui/gnash.cpp:471
-msgid "Number of milliseconds to sleep between advances"
-msgstr "前进前睡眠的毫秒数"
+#: gui/gtk/gtk.cpp:2064
+msgid "Low"
+msgstr "低"
 
-#: gui/gnash.cpp:473
-msgid "Trigger expression to start dumping"
-msgstr "开始转储的触发表达式"
+#: gui/gtk/gtk.cpp:2070
+msgid "Medium"
+msgstr "中"
 
-#: gui/gnash.cpp:485
-msgid "Keys:\n"
-msgstr "键:\n"
+#: gui/gtk/gtk.cpp:2076
+msgid "High"
+msgstr "高"
 
-#: gui/gnash.cpp:487
-msgid "Quit\n"
-msgstr "退出\n"
+#: gui/gtk/gtk.cpp:2082
+msgid "Best"
+msgstr "最佳"
 
-#: gui/gnash.cpp:489
-msgid "Toggle fullscreen\n"
-msgstr "切换全屏\n"
+#: gui/gtk/gtk.cpp:2095
+msgid "Movie _Control"
+msgstr "影片控制(_C)"
 
-#: gui/gnash.cpp:491
-msgid "Toggle pause\n"
-msgstr "切换暂停\n"
+#: gui/gtk/gtk.cpp:2106 gui/qt/Qt4Gui.cpp:605
+msgid "Play"
+msgstr "播放"
 
-#: gui/gnash.cpp:493
-msgid "Restart the movie\n"
-msgstr "重启影片\n"
+#: gui/gtk/gtk.cpp:2117 gui/qt/Qt4Gui.cpp:609
+msgid "Pause"
+msgstr "暂停"
 
-#: gui/gnash.cpp:495
-msgid "Take a screenshot\n"
-msgstr "截屏\n"
+#: gui/gtk/gtk.cpp:2127 gui/qt/Qt4Gui.cpp:613
+msgid "Stop"
+msgstr "停止"
 
-#: gui/gnash.cpp:497
-msgid "Force immediate redraw\n"
-msgstr "强制立即重绘\n"
+#: gui/gtk/gtk.cpp:2139 gui/qt/kde.cpp:416
+msgid "Restart Movie"
+msgstr "重新开始影片"
 
-#: gui/gnash.cpp:503
-msgid "Usage: gnash [options] movie_file.swf\n"
-msgstr "用法:gnash [选项] 影片文件.swf\n"
+#: gui/gtk/gtk.cpp:2262 gui/gtk/gtk.cpp:2263
+#, c-format
+msgid "Couldn't find pixmap file: %s"
+msgstr "找不到像素映射(pixmap)文件:%s"
 
-#: gui/gnash.cpp:504
-msgid "Plays a SWF (Shockwave Flash) movie\n"
-msgstr "播放 SWF (Shockwave Flash) 影片\n"
+#: gui/gtk/gtk.cpp:2269
+#, c-format
+msgid "Failed to load pixbuf file: %s: %s"
+msgstr "加载 pixbuf 文件失败:%s:%s"
 
-#: gui/gnash.cpp:521
+#: gui/gtk/gtk.cpp:2578 gui/aos4/aos4.cpp:266
+#, c-format
 msgid ""
-"Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software "
-"Foundation, Inc.\n"
-"Gnash comes with NO WARRANTY, to the extent permitted by law.\n"
-"You may redistribute copies of Gnash under the terms of the GNU General\n"
-"Public License.  For more information, see the file named COPYING.\n"
-"\n"
+"Attempting to open file %s.\n"
+"NOTE: the file open functionality is not yet implemented!"
 msgstr ""
-"版权所有 (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 自由软件基金会, Inc.\n"
-"Gnash 在法律允许的限度内不作任何担保。\n"
-"您可以在遵守 GNU 通用公共许可证条款的前提下分发 Gnash 的副本。更多信息请参见"
-"名为 COPYING 的文件。\n"
-"\n"
+"尝试打开文件 %s。\n"
+"注意:打开文件功能尚未实现!"
 
-#: gui/gnash.cpp:532
-msgid "Build options "
-msgstr "构建选项 "
+#: gui/gtk/gtk.cpp:2595 gui/gtk/gtk.cpp:2608
+msgid "Open file"
+msgstr "打开文件"
 
-#: gui/gnash.cpp:533
-msgid "   Renderers: "
-msgstr "   渲染器:"
+#: gui/Player.cpp:132
+msgid "GUI ExternalInterface.Pan event"
+msgstr "用户界面 ExternalInterface.Pan 事件"
 
-#: gui/gnash.cpp:534
-msgid "   Hardware Acceleration: "
-msgstr "   硬件加速:"
+#: gui/Player.cpp:144
+msgid "GUI ExternalInterface.SetZoomRect event"
+msgstr "用户界面 ExternalInterface.SetZoomRect 事件"
 
-#: gui/gnash.cpp:535
-msgid "   GUI: "
-msgstr "   界面:"
+#: gui/Player.cpp:152
+msgid "GUI ExternalInterface.Zoom event"
+msgstr "用户界面 ExternalInterface.Zoom 事件"
 
-#: gui/gnash.cpp:536
-msgid "   Media handlers: "
-msgstr "   媒体处理器:"
+#: gui/Player.cpp:170
+#, c-format
+msgid "Unhandled callback %s with arguments %s"
+msgstr "未处理的回调 %s,参数 %s"
 
-#: gui/gnash.cpp:538
-msgid "   Configured with: "
-msgstr "   配置情况:"
+#: gui/Player.cpp:284 gui/pythonmod/gnash-view.cpp:223
+msgid "Sound requested but no sound support compiled in"
+msgstr "请求声音,但未编译声音支持"
 
-#: gui/gnash.cpp:539
-msgid "   CXXFLAGS: "
-msgstr "   CXXFLAGS:"
+#: gui/Player.cpp:289 gui/pythonmod/gnash-view.cpp:220
+#, c-format
+msgid "Could not create sound handler: %s. Will continue without sound."
+msgstr "无法创建声音处理器:%s。将继续,没有声音。"
 
-#: gui/fltk/fltk_glue_agg.cpp:50
-msgid "Could not create AGG renderer with pixelformat RGB24"
-msgstr "无法用像素格式 RGB24 创建 AGG 渲染器"
+#: gui/Player.cpp:437
+msgid "Non-existent media handler %1% specified"
+msgstr "指定了不存在的媒体处理器 %1%"
 
-#: gui/dump/dump.cpp:117
-msgid "Ignoring request to display in X11 window"
-msgstr "忽略显示在 X11 窗口的请求"
+#: gui/Player.cpp:685
+msgid "Got unexpected argument type for message %1%"
+msgstr "消息 %1% 的参数类型异常"
 
-#: gui/dump/dump.cpp:128 gui/haiku/haiku.cpp:384
-msgid "# FATAL:  No filename given with -D argument."
-msgstr "# 致命错误:-D 参数没有给定文件名。"
+#: gui/Player.cpp:720
+#, c-format
+msgid ""
+"Could only write %d bytes over %d required to user-provided host requests fd "
+"%d"
+msgstr ""
+"只能向用户提供的主机请求文件描述符 %3$d 写入 %1$d 个字节,而非要求的 %2$d 个"
 
-#: gui/dump/dump.cpp:144
-msgid "# FATAL:  No sleep ms value given with -S argument."
-msgstr "# 致使错误:-S 参数没有给定睡眠的毫秒值。"
+#: gui/Player.cpp:776
+#, c-format
+msgid "FsCommand exec called with argument %s"
+msgstr "进行了 FsCommand exec 调用,参数 %s"
 
-#: gui/dump/dump.cpp:155
-msgid "# FATAL:  No trigger value given with -T argument.\n"
-msgstr "# 致使错误:-T 参数没有给定触发值。\n"
+#: gui/Player.cpp:793
+#, c-format
+msgid "FsCommand trapallkeys called with argument %s"
+msgstr "进行了 FsCommand trapallkeys 调用,参数 %s"
 
-#: gui/dump/dump.cpp:352
+#: gui/Player.cpp:799
 #, c-format
-msgid "Unable to write file '%s'."
-msgstr "无法写文件“%s”"
+msgid "FsCommand '%s(%s)' not handled internally"
+msgstr "FsCommand“%s(%s)”未进行内部处理"
 
-#: gui/ScreenShotter.cpp:99
+#: gui/aos4/aos4_agg_glue.cpp:116 gui/sdl/sdl_agg_glue.cpp:78
+#: gui/haiku/haiku_agg_glue.cpp:290
 #, c-format
-msgid "Failed to open screenshot file \"%s\"!"
-msgstr "无法打开截屏文件“%s”!"
+msgid "AGG's bit depth must be 16, 24 or 32 bits, not %d."
+msgstr "AGG 的位深度必须为 16、24 或 32 位,而非 %d。"
 
-#: gui/haiku/haiku.cpp:141
-msgid "spawn_thread failed"
-msgstr "spawn_thread 失败"
+#: gui/aos4/aos4_agg_glue.cpp:216 gui/aos4/aos4_cairo_glue.cpp:212
+msgid "Cannot layout Menu!!\n"
+msgstr "无法布局菜单!!\n"
 
-#: gui/haiku/haiku.cpp:144
-msgid "resume_thread failed"
-msgstr "resume_thread 失败"
+#: gui/aos4/aos4_agg_glue.cpp:220 gui/aos4/aos4_cairo_glue.cpp:216
+msgid "Cannot create Menu!!\n"
+msgstr "无法创建菜单!!\n"
 
-#: gui/haiku/haiku.cpp:157
-#, c-format
-msgid "pulses thread returned %d"
-msgstr "脉冲(pulses)线程返回 %d"
+#: gui/aos4/aos4_agg_glue.cpp:223 gui/aos4/aos4_cairo_glue.cpp:219
+msgid "Cannot get Visual Info!!\n"
+msgstr "无法获得可视信息!!\n"
 
-#: gui/haiku/haiku.cpp:248
-msgid "send_data failed"
-msgstr "send_data 失败"
+#: gui/aos4/aos4_agg_glue.cpp:226 gui/aos4/aos4_cairo_glue.cpp:222
+msgid "Cannot get WB Screen pointer!!\n"
+msgstr "无法获得 WB 屏幕指针!!\n"
 
-#: gui/haiku/haiku_agg_glue.cpp:290 gui/aos4/aos4_agg_glue.cpp:116
-#: gui/sdl/sdl_agg_glue.cpp:78
-#, c-format
-msgid "AGG's bit depth must be 16, 24 or 32 bits, not %d."
-msgstr "AGG 的位深度必须为 16、24 或 32 位,而非 %d。"
+#: gui/aos4/aos4_agg_glue.cpp:264 gui/aos4/aos4_cairo_glue.cpp:259
+msgid "prepDrawingArea() failed.\n"
+msgstr "prepDrawingArea() 失败。\n"
 
-#: gui/haiku/haiku_agg_glue.cpp:297 gui/gtk/gtk_glue_agg.cpp:96
+#: gui/aos4/aos4_agg_glue.cpp:277
 #, c-format
-msgid "Could not create AGG renderer with pixelformat %s"
-msgstr "无法创建像素格式为 %s 的 AGG 渲染器"
+msgid "AOS4-AGG: %i byte offscreen buffer allocated"
+msgstr "AOS4-AGG:已分配 %i 字节的幕后缓存"
 
-#: gui/haiku/haiku_agg_glue.cpp:416 gui/sdl/sdl_agg_glue.cpp:132
+#: gui/aos4/aos4.cpp:70
 #, c-format
-msgid "SDL-AGG: %i byte offscreen buffer allocated"
-msgstr "SDL-AGG:分配了 %i 个字节的幕后缓存"
+msgid "Exception: %s on file %s line %d"
+msgstr "异常:%s,在文件 %s 的第 %d 行"
 
-#: gui/qt/Qt4Gui.cpp:120
-msgid "Cairo renderer not supported!"
-msgstr "不支持 Cairo 渲染器!"
+#: gui/aos4/aos4.cpp:274
+msgid "Cannot open File Requester!\n"
+msgstr "无法打开文件请求程序!\n"
 
-#: gui/qt/Qt4Gui.cpp:128
-msgid "OpenGL renderer not supported!"
-msgstr "不支持 OpenGL 渲染器!"
+#: gui/aos4/aos4.cpp:609
+msgid "error creating RenderHandler!\n"
+msgstr "创建渲染处理器出错!\n"
 
-#: gui/qt/Qt4Gui.cpp:136
-msgid "AGG renderer not supported!"
-msgstr "不支持 AGG 渲染器!"
+#: gui/aos4/aos4_cairo_glue.cpp:124
+#, c-format
+msgid "Cairo's bit depth must be 16, 24 or 32 bits, not %d."
+msgstr "Cairo 的位深度必须为 16、24 或 32 位,而非 %d。"
 
-#: gui/qt/Qt4Gui.cpp:467 gui/gtk/gtk.cpp:1708
-msgid "Movie properties"
-msgstr "影片属性"
+#: gui/gnash.cpp:127
+#, c-format
+msgid "Error parsing options: %s\n"
+msgstr "解析命令出错:%s\n"
 
-#: gui/qt/Qt4Gui.cpp:486 gui/gtk/gtk.cpp:1778
-msgid "Variable"
-msgstr "变量"
+#: gui/gnash.cpp:168
+msgid "Error: no input file was specified. Exiting.\n"
+msgstr "错误:未指定输入文件。退出。\n"
 
-#: gui/qt/Qt4Gui.cpp:487 gui/gtk/gtk.cpp:1790
-msgid "Value"
-msgstr "值"
+#: gui/gnash.cpp:214
+msgid "Invalid host communication filedescriptor %1%\n"
+msgstr "无效的主机通信文件描述符 %1%\n"
 
-#: gui/qt/Qt4Gui.cpp:588
-msgid "Properties"
-msgstr "属性"
+#: gui/gnash.cpp:221
+msgid "Invalid control communication filedescriptor %1%\n"
+msgstr "无效的控制通信文件描述符 %1%\n"
 
-#: gui/qt/Qt4Gui.cpp:592 gui/qt/kde.cpp:424
-msgid "Quit Gnash"
-msgstr "退出 Gnash"
+#: gui/gnash.cpp:233
+#, c-format
+msgid "Cookiefile %s does not exist or is not a regular file\n"
+msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:599
-msgid "Preferences"
-msgstr "首选项"
+#: gui/gnash.cpp:265
+msgid "ERROR: -r must be followed by 0, 1, 2 or 3 "
+msgstr "错误:-r 后必须跟 0、1、2 或 3 "
 
-#: gui/qt/Qt4Gui.cpp:604 gui/gtk/gtk.cpp:2119
-msgid "Play"
-msgstr "播放"
+#: gui/gnash.cpp:281
+msgid "Debugging options"
+msgstr "调试选项"
 
-#: gui/qt/Qt4Gui.cpp:608 gui/gtk/gtk.cpp:2130
-msgid "Pause"
-msgstr "暂停"
+#: gui/gnash.cpp:287
+msgid "Produce verbose output"
+msgstr "产生详尽的输出"
 
-#: gui/qt/Qt4Gui.cpp:612 gui/gtk/gtk.cpp:2140
-msgid "Stop"
-msgstr "停止"
+#: gui/gnash.cpp:294
+msgid "Produce the disk based debug log"
+msgstr "产生基于磁盘的调试日志"
 
-#: gui/qt/Qt4Gui.cpp:616
-msgid "Restart"
-msgstr "重新开始"
+#: gui/gnash.cpp:299
+msgid "Be (very) verbose about action execution"
+msgstr "(很)详尽的输出操作执行情况"
 
-#: gui/qt/Qt4Gui.cpp:621 gui/qt/kde.cpp:423
-msgid "Refresh"
-msgstr "刷新"
+#: gui/gnash.cpp:305
+msgid "Be (very) verbose about parsing"
+msgstr "(很)详尽的输出解析情况"
 
-#: gui/qt/Qt4Gui.cpp:625
-msgid "Fullscreen"
-msgstr "全屏"
+#: gui/gnash.cpp:311
+msgid "Print FPS every num seconds"
+msgstr "每隔 num 秒打印帧率(FPS)"
 
-#: gui/qt/Qt4Gui.cpp:640
-msgid "File"
-msgstr "文件"
+#: gui/gnash.cpp:335
+msgid "Options"
+msgstr "选项"
 
-#: gui/qt/Qt4Gui.cpp:645
-msgid "Edit"
-msgstr "编辑"
+#: gui/gnash.cpp:340
+msgid "Print this help and exit"
+msgstr "打印此帮助并退出"
 
-#: gui/qt/Qt4Gui.cpp:649
-msgid "Movie Control"
-msgstr "媒体控制"
+#: gui/gnash.cpp:343
+msgid "Print version information and exit"
+msgstr "打印版本信息并退出"
 
-#: gui/qt/Qt4Gui.cpp:656
-msgid "View"
-msgstr "查看"
+#: gui/gnash.cpp:348
+msgid "Scale the movie by the specified factor"
+msgstr "按指定的系数拉伸影片"
 
-#: gui/qt/Qt4Gui.cpp:738
-msgid "Click to Play"
-msgstr "点击播放"
+#: gui/gnash.cpp:352
+msgid "Number of milliseconds to delay in main loop"
+msgstr "主循环延迟的毫秒数"
 
-#: gui/qt/Qt4Gui.cpp:770 gui/gtk/gtk.cpp:1239
-msgid "Gnash preferences"
-msgstr "Gnash 首选项"
+#: gui/gnash.cpp:356
+msgid "Audio dump file (wave format)"
+msgstr "音频转储文件(wave 格式)"
 
-#: gui/qt/Qt4Gui.cpp:785
-msgid "Logging"
-msgstr "日志记录"
+#: gui/gnash.cpp:361
+msgid "Hardware Video Accelerator to use"
+msgstr "要使用的硬件视频加速"
 
-#: gui/qt/Qt4Gui.cpp:788 gui/gtk/gtk.cpp:1310
-msgid "<b>Logging options</b>"
-msgstr "<b>日志选项</b>"
+#: gui/gnash.cpp:366
+msgid "X11 Window ID for display"
+msgstr "显示用的 X11 窗口 ID"
 
-#: gui/qt/Qt4Gui.cpp:791
-msgid "Verbosity level"
-msgstr "详尽程度"
+#: gui/gnash.cpp:370
+msgid "Set window width"
+msgstr "设置窗口宽度"
 
-#: gui/qt/Qt4Gui.cpp:809
-msgid "Log to file"
-msgstr "记录到文件"
+#: gui/gnash.cpp:374
+msgid "Set window height"
+msgstr "设置窗口高度"
 
-#: gui/qt/Qt4Gui.cpp:816
-msgid "Log parser output"
-msgstr "记录解析器输出"
+#: gui/gnash.cpp:378
+msgid "Set window x position"
+msgstr "设置窗口水平位置"
 
-#: gui/qt/Qt4Gui.cpp:820
-msgid "Log SWF actions"
-msgstr "记录 SWF 操作"
+#: gui/gnash.cpp:382
+msgid "Set window y position"
+msgstr "设置窗口竖直位置"
 
-#: gui/qt/Qt4Gui.cpp:824
-msgid "Log malformed SWF errors"
-msgstr "记录损坏的 SWF 错误"
+#: gui/gnash.cpp:387
+msgid "Exit when/if movie reaches the last frame"
+msgstr "当影片到最后一帧时退出"
 
-#: gui/qt/Qt4Gui.cpp:829
-msgid "Log ActionScript coding errors"
-msgstr "记录 ActionScript 代码错误"
+#: gui/gnash.cpp:393
+msgid "disable rendering and sound"
+msgstr "禁止渲染和声音"
 
-#: gui/qt/Qt4Gui.cpp:836
-msgid "Security"
-msgstr "安全"
+#: gui/gnash.cpp:395
+msgid "enable rendering, disable sound"
+msgstr "启用渲染,禁用声音"
 
-#: gui/qt/Qt4Gui.cpp:839 gui/gtk/gtk.cpp:1393
-msgid "<b>Network connections</b>"
-msgstr "<b>网络连接</b>"
+#: gui/gnash.cpp:397
+msgid "enable sound, disable rendering"
+msgstr "启用声音,禁用渲染"
 
-#: gui/qt/Qt4Gui.cpp:842
-msgid "Connect only to local host"
-msgstr "只连接本地主机"
+#: gui/gnash.cpp:399
+msgid "enable rendering and sound"
+msgstr "启用渲染和声音"
 
-#: gui/qt/Qt4Gui.cpp:847
-msgid "Connect only to local domain"
-msgstr "只连接本地域"
+#: gui/gnash.cpp:407
+msgid "The media handler to use"
+msgstr "要使用的媒体处理器"
 
-#: gui/qt/Qt4Gui.cpp:852
-msgid "Disable SSL verification"
-msgstr "禁用 SSL 验证"
+#: gui/gnash.cpp:415
+msgid "The renderer to use"
+msgstr "要使用的渲染器"
 
-#: gui/qt/Qt4Gui.cpp:857 gui/gtk/gtk.cpp:1438
-msgid "<b>Privacy</b>"
-msgstr "<b>隐私</b>"
+#: gui/gnash.cpp:421
+msgid "Exit after the specified number of seconds"
+msgstr "在指定秒数后退出"
 
-#: gui/qt/Qt4Gui.cpp:860 gui/gtk/gtk.cpp:1442
-msgid "Shared objects directory:"
-msgstr "共享对象目录:"
+#: gui/gnash.cpp:424
+msgid "Set \"real\" URL of the movie"
+msgstr "设置影片的“真实”URL"
 
-#: gui/qt/Qt4Gui.cpp:866
-msgid "Do not write Shared Object files"
-msgstr "不写共享对象文件"
+#: gui/gnash.cpp:428
+msgid "Set \"base\" URL for resolving relative URLs"
+msgstr "设置用于解析相对 URL 的“基”URL"
 
-#: gui/qt/Qt4Gui.cpp:872
-msgid "Only access local Shared Object files"
-msgstr "只访问本地的共享对象文件"
+#: gui/gnash.cpp:433
+msgid "Set parameter (e.g. \"FlashVars=A=1&b=2\")"
+msgstr "设置参数(如“FlashVars=A=1&b=2”)"
 
-#: gui/qt/Qt4Gui.cpp:877
-msgid "Disable Local Connection object"
-msgstr "禁用本地连接对象"
+#: gui/gnash.cpp:437
+msgid "Filedescriptor to use for external communications"
+msgstr "用于外部通信的文件描述符"
 
-#: gui/qt/Qt4Gui.cpp:884
-msgid "Network"
-msgstr "网络"
+#: gui/gnash.cpp:443
+msgid "Cookiefile to use"
+msgstr ""
 
-#: gui/qt/Qt4Gui.cpp:887 gui/gtk/gtk.cpp:1278
-msgid "<b>Network preferences</b>"
-msgstr "<b>网络首选项</b>"
+#: gui/gnash.cpp:447
+msgid "Exit after specified number of frame advances"
+msgstr "前进指定帧数后退出"
 
-#: gui/qt/Qt4Gui.cpp:890
-msgid "Network timeout in seconds"
-msgstr "网络超时的秒数"
+#: gui/gnash.cpp:451
+msgid "Start in fullscreen mode"
+msgstr "以全屏方式启动"
 
-#: gui/qt/Qt4Gui.cpp:902
-msgid "Media"
-msgstr "媒体"
+#: gui/gnash.cpp:456
+msgid "Start without displaying the menu bar"
+msgstr "启动时不显示菜单栏"
 
-#: gui/qt/Qt4Gui.cpp:905 gui/gtk/gtk.cpp:1488
-msgid "<b>Sound</b>"
-msgstr "<b>声音</b>"
+#: gui/gnash.cpp:461
+msgid "List of frames to save as screenshots"
+msgstr "要保存截屏的帧列表"
 
-#: gui/qt/Qt4Gui.cpp:908
-msgid "Use sound handler"
-msgstr "使用声音处理器"
+#: gui/gnash.cpp:465
+msgid "Filename pattern for screenshot images"
+msgstr "截屏图像的文件名模式"
 
-#: gui/qt/Qt4Gui.cpp:912 gui/gtk/gtk.cpp:1507
-msgid "Save media streams to disk"
-msgstr "将媒体流保存到磁盘"
+#: gui/gnash.cpp:469
+msgid "Quality for screenshot output (not all formats)"
+msgstr "截屏输出的质量(并非所有格式)"
 
-#: gui/qt/Qt4Gui.cpp:918 gui/gtk/gtk.cpp:1516
-msgid "Save dynamically loaded media to disk"
-msgstr "将动态加载的媒体保存到磁盘"
+#: gui/gnash.cpp:472
+msgid "Input files"
+msgstr "输入文件"
 
-#: gui/qt/Qt4Gui.cpp:922 gui/gtk/gtk.cpp:1524
-msgid "Saved media directory:"
-msgstr "保存媒体的目录:"
+#: gui/gnash.cpp:483
+msgid "Dump options"
+msgstr "转储选项"
 
-#: gui/qt/Qt4Gui.cpp:931
-msgid "Player"
-msgstr "播放器"
+#: gui/gnash.cpp:488
+msgid "Video dump file (raw format) and optional video FPS (@<num>)"
+msgstr "视频转储文件(原生格式)和可选的视频帧率(@<num>)"
 
-#: gui/qt/Qt4Gui.cpp:934 gui/gtk/gtk.cpp:1550
-msgid "<b>Player description</b>"
-msgstr "<b>播放器描述</b>"
+#: gui/gnash.cpp:490
+msgid "Number of milliseconds to sleep between advances"
+msgstr "前进前睡眠的毫秒数"
 
-#: gui/qt/Qt4Gui.cpp:937 gui/gtk/gtk.cpp:1558
-msgid "Player version:"
-msgstr "播放器版本:"
+#: gui/gnash.cpp:492
+msgid "Trigger expression to start dumping"
+msgstr "开始转储的触发表达式"
 
-#: gui/qt/Qt4Gui.cpp:943 gui/gtk/gtk.cpp:1574
-msgid "Operating system:"
-msgstr "操作系统:"
+#: gui/gnash.cpp:504
+msgid "Keys:\n"
+msgstr "键:\n"
 
-#: gui/qt/Qt4Gui.cpp:948 gui/qt/Qt4Gui.cpp:1021
-msgid "<Autodetect>"
-msgstr "<自动检测>"
+#: gui/gnash.cpp:506
+msgid "Quit\n"
+msgstr "退出\n"
 
-#: gui/qt/Qt4Gui.cpp:954 gui/gtk/gtk.cpp:1594
-msgid "URL opener:"
-msgstr "URL 打开程序:"
+#: gui/gnash.cpp:508
+msgid "Toggle fullscreen\n"
+msgstr "切换全屏\n"
 
-#: gui/qt/Qt4Gui.cpp:961 gui/gtk/gtk.cpp:1606
-msgid "<b>Performance</b>"
-msgstr "<b>性能</b>"
+#: gui/gnash.cpp:510
+msgid "Toggle pause\n"
+msgstr "切换暂停\n"
 
-#: gui/qt/Qt4Gui.cpp:964 gui/gtk/gtk.cpp:1620
-msgid "Max size of movie library:"
-msgstr "媒体库的最大尺寸:"
+#: gui/gnash.cpp:512
+msgid "Restart the movie\n"
+msgstr "重启影片\n"
 
-#: gui/qt/Qt4Gui.cpp:973
-msgid "Start Gnash in pause mode"
-msgstr "以暂停方式启动 Gnash"
+#: gui/gnash.cpp:514
+msgid "Take a screenshot\n"
+msgstr "截屏\n"
 
-#: gui/qt/Qt4GlueAgg.cpp:115
-msgid "Could not create AGG renderer with pixelformat ABGR32"
-msgstr "无法以像素格式 ABGR32 创建 AGG 渲染器"
+#: gui/gnash.cpp:516
+msgid "Force immediate redraw\n"
+msgstr "强制立即重绘\n"
 
-#: gui/qt/kde_glue_agg.cpp:156
-msgid "Could not create AGG renderer with pixelformat BGRA32"
-msgstr "无法以像素格式 BGRA32 创建 AGG 渲染器"
+#: gui/gnash.cpp:522
+msgid "Usage: gnash [options] movie_file.swf\n"
+msgstr "用法:gnash [选项] 影片文件.swf\n"
 
-#: gui/qt/kde.cpp:413
-msgid "Play Movie"
-msgstr "播放影片"
+#: gui/gnash.cpp:523
+msgid "Plays a SWF (Shockwave Flash) movie\n"
+msgstr "播放 SWF (Shockwave Flash) 影片\n"
 
-#: gui/qt/kde.cpp:414
-msgid "Pause Movie"
-msgstr "暂停影片"
+#: gui/gnash.cpp:540
+#, fuzzy
+msgid ""
+"Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free "
+"Software Foundation, Inc.\n"
+"Gnash comes with NO WARRANTY, to the extent permitted by law.\n"
+"You may redistribute copies of Gnash under the terms of the GNU General\n"
+"Public License.  For more information, see the file named COPYING.\n"
+"\n"
+msgstr ""
+"版权所有 (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 自由软件基金会, Inc.\n"
+"Gnash 在法律允许的限度内不作任何担保。\n"
+"您可以在遵守 GNU 通用公共许可证条款的前提下分发 Gnash 的副本。更多信息请参见"
+"名为 COPYING 的文件。\n"
+"\n"
 
-#: gui/qt/kde.cpp:415
-msgid "Stop Movie"
-msgstr "停止影片"
+#: gui/gnash.cpp:551
+msgid "Build options "
+msgstr "构建选项 "
 
-#: gui/qt/kde.cpp:416 gui/gtk/gtk.cpp:2152
-msgid "Restart Movie"
-msgstr "重新开始影片"
+#: gui/gnash.cpp:552
+msgid "   Renderers: "
+msgstr "   渲染器:"
 
-#: gui/qt/kde.cpp:418
-msgid "Step Forward"
-msgstr "步进"
+#: gui/gnash.cpp:553
+msgid "   Hardware Acceleration: "
+msgstr "   硬件加速:"
 
-#: gui/qt/kde.cpp:419
-msgid "Step Backward"
-msgstr "步退"
+#: gui/gnash.cpp:554
+msgid "   GUI: "
+msgstr "   界面:"
 
-#: gui/qt/kde.cpp:420
-msgid "Jump Forward"
-msgstr "前跳"
+#: gui/gnash.cpp:555
+msgid "   Media handlers: "
+msgstr "   媒体处理器:"
 
-#: gui/qt/kde.cpp:421
-msgid "Jump Backward"
-msgstr "回跳"
+#: gui/gnash.cpp:557
+msgid "   Configured with: "
+msgstr "   配置情况:"
 
-#: gui/pythonmod/gnash-view.cpp:220 gui/Player.cpp:288
-#, c-format
-msgid "Could not create sound handler: %s. Will continue without sound."
-msgstr "无法创建声音处理器:%s。将继续,没有声音。"
+#: gui/gnash.cpp:558
+msgid "   CXXFLAGS: "
+msgstr "   CXXFLAGS:"
 
-#: gui/pythonmod/gnash-view.cpp:223 gui/Player.cpp:283
-msgid "Sound requested but no sound support compiled in"
-msgstr "请求声音,但未编译声音支持"
+#: gui/sdl/sdl_agg_glue.cpp:95
+msgid "SDL_SetVideoMode() failed for SdlAggGlue."
+msgstr "对 SdlAggGlue 的 SDL_SetVideoMode() 失败。"
 
-#: gui/aos4/aos4.cpp:70
+#: gui/sdl/sdl_agg_glue.cpp:132 gui/haiku/haiku_agg_glue.cpp:416
 #, c-format
-msgid "Exception: %s on file %s line %d"
-msgstr "异常:%s,在文件 %s 的第 %d 行"
+msgid "SDL-AGG: %i byte offscreen buffer allocated"
+msgstr "SDL-AGG:分配了 %i 个字节的幕后缓存"
 
-#: gui/aos4/aos4.cpp:266 gui/gtk/gtk.cpp:2591
-#, c-format
-msgid ""
-"Attempting to open file %s.\n"
-"NOTE: the file open functionality is not yet implemented!"
-msgstr ""
-"尝试打开文件 %s。\n"
-"注意:打开文件功能尚未实现!"
+#: gui/fltk/fltk_glue_agg.cpp:50
+msgid "Could not create AGG renderer with pixelformat RGB24"
+msgstr "无法用像素格式 RGB24 创建 AGG 渲染器"
 
-#: gui/aos4/aos4.cpp:274
-msgid "Cannot open File Requester!\n"
-msgstr "无法打开文件请求程序!\n"
+#: gui/fb/fb_glue_ovg.cpp:160
+msgid "Could not create OpenVG renderer"
+msgstr "无法创建 OpenVG 渲染器"
 
-#: gui/aos4/aos4.cpp:609
-msgid "error creating RenderHandler!\n"
-msgstr "创建渲染处理器出错!\n"
+#: gui/fb/fb_glue_ovg.cpp:172 gui/fb/fb_glue_agg.cpp:76
+msgid "No renderer set!"
+msgstr "未设置渲染器!"
 
-#: gui/aos4/aos4_cairo_glue.cpp:124
+#: gui/fb/fb_glue_agg.cpp:87
 #, c-format
-msgid "Cairo's bit depth must be 16, 24 or 32 bits, not %d."
-msgstr "Cairo 的位深度必须为 16、24 或 32 位,而非 %d。"
+msgid "No renderer set in %s!"
+msgstr "%s 中没有设置渲染器!"
 
-#: gui/aos4/aos4_cairo_glue.cpp:212 gui/aos4/aos4_agg_glue.cpp:216
-msgid "Cannot layout Menu!!\n"
-msgstr "无法布局菜单!!\n"
+#: gui/fb/fb_glue_agg.cpp:130
+msgid "failed to create a render handler for AGG!"
+msgstr "无法创建针对 AGG 的渲染处理器!"
 
-#: gui/aos4/aos4_cairo_glue.cpp:216 gui/aos4/aos4_agg_glue.cpp:220
-msgid "Cannot create Menu!!\n"
-msgstr "无法创建菜单!!\n"
+#: gui/fb/fb_glue_agg.cpp:151
+msgid "No Device layer initialized yet!"
+msgstr "尚未初始化任何设备层!"
 
-#: gui/aos4/aos4_cairo_glue.cpp:219 gui/aos4/aos4_agg_glue.cpp:223
-msgid "Cannot get Visual Info!!\n"
-msgstr "无法获得可视信息!!\n"
+#: gui/fb/fb_glue_agg.cpp:182
+msgid "The pixel format of your framebuffer could not be detected."
+msgstr "尚未检测您的帧缓存的像素格式。"
 
-#: gui/aos4/aos4_cairo_glue.cpp:222 gui/aos4/aos4_agg_glue.cpp:226
-msgid "Cannot get WB Screen pointer!!\n"
-msgstr "无法获得 WB 屏幕指针!!\n"
+#: gui/fb/fb_glue_agg.cpp:191
+msgid "Double buffering disabled"
+msgstr "双缓冲已禁用"
 
-#: gui/aos4/aos4_cairo_glue.cpp:259 gui/aos4/aos4_agg_glue.cpp:264
-msgid "prepDrawingArea() failed.\n"
-msgstr "prepDrawingArea() 失败。\n"
+#: gui/fb/fb_glue_agg.cpp:194
+msgid "Double buffering enabled"
+msgstr "双缓冲已启用"
 
-#: gui/aos4/aos4_agg_glue.cpp:277
+#: gui/fb/fb_glue_agg.cpp:221
 #, c-format
-msgid "AOS4-AGG: %i byte offscreen buffer allocated"
-msgstr "AOS4-AGG:已分配 %i 字节的幕后缓存"
-
-#: gui/sdl/sdl_agg_glue.cpp:95
-msgid "SDL_SetVideoMode() failed for SdlAggGlue."
-msgstr "对 SdlAggGlue 的 SDL_SetVideoMode() 失败。"
-
-#: gui/gui.cpp:193
-msgid "Clipboard not yet supported in this GUI"
-msgstr "此用户界面尚未实现剪贴板支持"
+msgid "No Drawbounds set in %s!"
+msgstr "%s 中未设置绘制边界!"
 
-#: gui/gui.cpp:199 gui/gui.cpp:211
-msgid "Fullscreen not yet supported in this GUI"
-msgstr "此用户界面尚未实现全屏支持"
+#: gui/fb/fb_glue_gles1.cpp:98
+msgid "EGL: getDisplay ok"
+msgstr "EGL:getDisplay 正常"
 
-#: gui/gui.cpp:205
-msgid "Window resize not yet supported in this GUI"
-msgstr "此用户界面尚未实现对调整窗口大小的支持"
+#: gui/fb/fb_glue_gles1.cpp:104
+msgid "EGL: initialize ok"
+msgstr "EGL:初始化 正常"
 
-#: gui/gui.cpp:229 gui/gui.cpp:242
-msgid "Menu show/hide not yet supported in this GUI"
-msgstr "此用户界面尚未实现对菜单显示/隐藏的支持"
+#: gui/fb/fb_glue_gles1.cpp:112
+msgid "EGL: config ok"
+msgstr "EGL:配置 正常"
 
-#: gui/gui.cpp:235
-msgid "Mouse show/hide not yet supported in this GUI"
-msgstr "此用户界面尚未实现对鼠标显示/隐藏的支持"
+#: gui/fb/fb_glue_gles1.cpp:121
+msgid "EGL: surface ok"
+msgstr "EGL:表面 正常"
 
-#: gui/gui.cpp:282
-msgid "Can't update stage matrix till VM is initialized"
-msgstr ""
+#: gui/fb/fb_glue_gles1.cpp:129
+msgid "EGL: context ok"
+msgstr "EGL:上下文 正常"
 
-#: gui/gui.cpp:334
-#, c-format
-msgid "Invalid scaleMode %d"
-msgstr "无效的 scaleMode %d"
+#: gui/fb/fb_glue_gles1.cpp:137
+msgid "EGL: current ok"
+msgstr "EGL:当前 正常"
 
-#: gui/gui.cpp:374
+#: gui/fb/fb.cpp:257
 #, c-format
-msgid "Invalid horizontal align %d"
-msgstr "无效的水平对齐 %d"
+msgid "No renderer! %s not supported."
+msgstr "无渲染器!%s 不被支持。"
 
-#: gui/gui.cpp:405
-#, c-format
-msgid "Invalid vertical align %d"
-msgstr "无效的竖直对齐 %d"
+#: gui/fb/fb.cpp:269
+msgid "Found no accessible User mode input event device"
+msgstr "找不到可访问的用户模式输入事件设备"
 
-#: gui/gui.cpp:900
-#, fuzzy
-msgid "GUI is in stop mode, won't start application"
-msgstr "用户界面在停止模式,不会启动应用程序"
+#: gui/fb/fb.cpp:279
+msgid "Found no accessible input event devices"
+msgstr "找不到可访问的输入事件设备"
 
-#: gui/gui.cpp:1261
-#, c-format
-msgid "This gui didn't override 'yesno', assuming 'yes' answer to question: %s"
-msgstr ""
+#: gui/fb/fb.cpp:292
+msgid "WARNING: Mouse support may conflict with the input event support."
+msgstr "警告:鼠标支持可能与输入事件支持冲突。"
 
-#: gui/gui.cpp:1270
-msgid "Gui::setQuality called before a movie_root was available"
-msgstr "在 movie_root 可用前调用了 Gui::setQuality"
+#: gui/fb/fb.cpp:306
+msgid "Enabling Touchscreen support."
+msgstr "启用触摸屏支持。"
 
-#: gui/gui.cpp:1280
-msgid "Gui::getQuality called before a movie_root was available"
-msgstr "在 movie_root 可用前调用了 Gui::getQuality"
+#: gui/fb/fb.cpp:311
+msgid "WARNING: Babbage Tablet support disabled as it conflicts with TSlib"
+msgstr "警告:Babbage 平板支持已禁用,与 TSlib 冲突"
 
-#: gui/Player.cpp:131
-msgid "GUI ExternalInterface.Pan event"
-msgstr "用户界面 ExternalInterface.Pan 事件"
+#: gui/fb/fb.cpp:313
+msgid "Enabling Babbage Touchscreen support"
+msgstr "启用 Babbage 触摸屏支持"
 
-#: gui/Player.cpp:143
-msgid "GUI ExternalInterface.SetZoomRect event"
-msgstr "用户界面 ExternalInterface.SetZoomRect 事件"
+#: gui/fb/fb.cpp:318
+msgid "Enabling Power Button support"
+msgstr "启用电源按键支持"
 
-#: gui/Player.cpp:151
-msgid "GUI ExternalInterface.Zoom event"
-msgstr "用户界面 ExternalInterface.Zoom 事件"
+#: gui/fb/fb.cpp:492
+msgid "This GUI does not yet support menus"
+msgstr "此用户界面尚不支持菜单"
 
-#: gui/Player.cpp:169
-#, c-format
-msgid "Unhandled callback %s with arguments %s"
-msgstr "未处理的回调 %s,参数 %s"
+#: gui/fb/fb.cpp:498
+msgid "This GUI does not yet support a mouse pointer"
+msgstr "此用户界面尚不支持鼠标指针"
 
-#: gui/Player.cpp:434
-msgid "Non-existent media handler %1% specified"
-msgstr "指定了不存在的媒体处理器 %1%"
+#: gui/fb/fb.cpp:571
+msgid "Could not detect controlling TTY"
+msgstr "无法检测控制终端(TTY)"
 
-#: gui/Player.cpp:545
+#: gui/fb/fb.cpp:580 gui/fb/fb.cpp:619 gui/fb/fb.cpp:653 gui/fb/fb.cpp:706
 #, c-format
-msgid "Movie Frame Rate is %d, adjusting delay"
-msgstr "影片帧率为 %d,调整延迟"
+msgid "Could not open %s"
+msgstr "无法打开 %s"
 
-#: gui/Player.cpp:682
-msgid "Got unexpected argument type for message %1%"
-msgstr "消息 %1% 的参数类型异常"
+#: gui/fb/fb.cpp:586
+msgid "Could not get current VT state"
+msgstr "无法获得当前的 VT 状态"
 
-#: gui/Player.cpp:717
-#, c-format
-msgid ""
-"Could only write %d bytes over %d required to user-provided host requests fd "
-"%d"
-msgstr ""
-"只能向用户提供的主机请求文件描述符 %3$d 写入 %1$d 个字节,而非要求的 %2$d 个"
+#: gui/fb/fb.cpp:599
+msgid "Could not request a new VT"
+msgstr "无法请求新的 VT"
 
-#: gui/Player.cpp:773
+#: gui/fb/fb.cpp:613 gui/fb/fb.cpp:647 gui/fb/fb.cpp:700
 #, c-format
-msgid "FsCommand exec called with argument %s"
-msgstr "进行了 FsCommand exec 调用,参数 %s"
+msgid "Could not find device for VT number %d"
+msgstr "找不到对应 VT 号 %d 的设备"
 
-#: gui/Player.cpp:790
+#: gui/fb/fb.cpp:624 gui/fb/fb.cpp:711
 #, c-format
-msgid "FsCommand trapallkeys called with argument %s"
-msgstr "进行了 FsCommand trapallkeys 调用,参数 %s"
+msgid "Could not activate VT number %d"
+msgstr "无法激活 VT 号 %d"
 
-#: gui/Player.cpp:796
+#: gui/fb/fb.cpp:630 gui/fb/fb.cpp:719
 #, c-format
-msgid "FsCommand '%s(%s)' not handled internally"
-msgstr "FsCommand“%s(%s)”未进行内部处理"
+msgid "Error waiting for VT %d becoming active"
+msgstr "等等 VT %d 激活时出错"
 
-#: gui/gtk/gtk_glue_cairo.cpp:223
-msgid "Cairo: failed to create a rendering buffer!"
-msgstr "Cairo:创建渲染缓存失败!"
+#: gui/fb/fb.cpp:661
+#, c-format
+msgid "Could not attach controlling terminal (%s)"
+msgstr "无法附加控制终端(%s)"
 
-#: gui/gtk/gtk_glue_ovg.cpp:182
-msgid "Could not create OPENVG renderer"
-msgstr "无法创建 OPENVG 渲染器!"
+#: gui/fb/fb.cpp:669
+msgid "Could not query current keyboard mode on VT"
+msgstr "无法请求 VT 上的当前键盘模式"
 
-#: gui/gtk/gtk_glue_ovg.cpp:265 gui/gtk/gtk_glue_ovg.cpp:282
-msgid "No off screen buffer!"
-msgstr "无幕后缓存!"
+#: gui/fb/fb.cpp:673
+msgid "Could not switch to graphics mode on new VT"
+msgstr "在新 VT 上无法切换到图形模式"
 
-#: gui/gtk/gtk_glue_ovg.cpp:400
-#, c-format
-msgid "eglGetConfigs() failed to retrive the configs (error %s)"
-msgstr "eglGetConfigs() 无法取回配置(配置 %s)"
+#: gui/fb/fb.cpp:728
+msgid "Could not restore keyboard mode"
+msgstr "无法恢复键盘模式"
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:163
-msgid "WARNING: failed to create VA-API display."
-msgstr "警告:创建 VA-API 显示失败。"
+#: gui/dump/dump.cpp:118
+msgid "Ignoring request to display in X11 window"
+msgstr "忽略显示在 X11 窗口的请求"
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:204
-#, c-format
-msgid ""
-"GTK-AGG: Unknown RGB format %s reported by VA-API.Please report this to the "
-"gnash-dev mailing list."
-msgstr ""
-"GTK-AGG:VA-API 报告了未知的 RGB 格式 %s。请向 gnash-dev 邮件列表报告这一问"
-"题。"
+#: gui/dump/dump.cpp:129 gui/haiku/haiku.cpp:384
+msgid "# FATAL:  No filename given with -D argument."
+msgstr "# 致命错误:-D 参数没有给定文件名。"
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:231 gui/gtk/gtk_glue_agg_vaapi.cpp:289
-msgid "failed to map VA-API image."
-msgstr "映射 VA-API 图像失败。"
+#: gui/dump/dump.cpp:145
+msgid "# FATAL:  No sleep ms value given with -S argument."
+msgstr "# 致使错误:-S 参数没有给定睡眠的毫秒值。"
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:237
-msgid "failed to associate VA-API subpicture."
-msgstr "关联 VA-API 子图(subpicture)失败。"
+#: gui/dump/dump.cpp:156
+msgid "# FATAL:  No trigger value given with -T argument.\n"
+msgstr "# 致使错误:-T 参数没有给定触发值。\n"
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:371
+#: gui/dump/dump.cpp:353
 #, c-format
-msgid "failed to setup video window for surface 0x%08x."
-msgstr "无法为表面 0x%08x 设置视频窗口。"
+msgid "Unable to write file '%s'."
+msgstr "无法写文件“%s”"
 
-#: gui/gtk/gtk_glue_agg_vaapi.cpp:378
+#: gui/ScreenShotter.cpp:99
 #, c-format
-msgid "failed to associate subpicture to surface 0x%08x."
-msgstr "无法将子图(subpicture)关联到表面 0x%08x。"
-
-#: gui/gtk/gtk.cpp:159
-msgid "Failed to initialize X threading support\n"
-msgstr "初始化 X 线程支持失败\n"
-
-#: gui/gtk/gtk.cpp:202
-msgid "This system lacks a hardware OpenGL driver!"
-msgstr "此系统缺少硬件 OpenGL 驱动!"
+msgid "Failed to open screenshot file \"%s\"!"
+msgstr "无法打开截屏文件“%s”!"
 
-#: gui/gtk/gtk.cpp:223
-msgid "Click to play"
-msgstr "点击播放"
+#: gui/qt/Qt4GlueAgg.cpp:115
+msgid "Could not create AGG renderer with pixelformat ABGR32"
+msgstr "无法以像素格式 ABGR32 创建 AGG 渲染器"
 
-#: gui/gtk/gtk.cpp:612
-#, c-format
-msgid "Advance interval timer set to %d ms (~ %d FPS)"
-msgstr "高级内部定时器设置为 %d 毫秒(约 %d FPS)"
+#: gui/qt/kde.cpp:413
+msgid "Play Movie"
+msgstr "播放影片"
 
-#: gui/gtk/gtk.cpp:686
-msgid "Sound"
-msgstr "声音"
+#: gui/qt/kde.cpp:414
+msgid "Pause Movie"
+msgstr "暂停影片"
 
-#: gui/gtk/gtk.cpp:1274
-msgid "_Network"
-msgstr "网络(_N)"
+#: gui/qt/kde.cpp:415
+msgid "Stop Movie"
+msgstr "停止影片"
 
-#: gui/gtk/gtk.cpp:1286
-msgid "Network timeout in seconds (0 for no timeout):"
-msgstr "网络超时秒数(0 为无超时):"
+#: gui/qt/kde.cpp:418
+msgid "Step Forward"
+msgstr "步进"
 
-#: gui/gtk/gtk.cpp:1305
-msgid "_Logging"
-msgstr "日志记录(_L)"
+#: gui/qt/kde.cpp:419
+msgid "Step Backward"
+msgstr "步退"
 
-#: gui/gtk/gtk.cpp:1314
-msgid "Verbosity level:"
-msgstr "详尽程度:"
+#: gui/qt/kde.cpp:420
+msgid "Jump Forward"
+msgstr "前跳"
 
-#: gui/gtk/gtk.cpp:1327
-msgid "Log to _file"
-msgstr "记录到文件(_F)"
+#: gui/qt/kde.cpp:421
+msgid "Jump Backward"
+msgstr "回跳"
 
-#: gui/gtk/gtk.cpp:1333
-msgid "Logfile name:"
-msgstr "日志文件名:"
+#: gui/qt/kde.cpp:423 gui/qt/Qt4Gui.cpp:622
+msgid "Refresh"
+msgstr "刷新"
 
-#: gui/gtk/gtk.cpp:1346
-msgid "Log _parser output"
-msgstr "记录解析器输出(_P)"
+#: gui/qt/kde.cpp:424 gui/qt/Qt4Gui.cpp:593
+msgid "Quit Gnash"
+msgstr "退出 Gnash"
 
-#: gui/gtk/gtk.cpp:1354
-msgid "Log SWF _actions"
-msgstr "记录 SWF 操作(_A)"
+#: gui/qt/kde_glue_agg.cpp:156
+msgid "Could not create AGG renderer with pixelformat BGRA32"
+msgstr "无法以像素格式 BGRA32 创建 AGG 渲染器"
 
-#: gui/gtk/gtk.cpp:1362
-msgid "Log malformed SWF _errors"
-msgstr "记录损坏的 SWF 错误(_E)"
+#: gui/qt/Qt4Gui.cpp:121
+msgid "Cairo renderer not supported!"
+msgstr "不支持 Cairo 渲染器!"
 
-#: gui/gtk/gtk.cpp:1370
-msgid "Log ActionScript _coding errors"
-msgstr "记录 ActionScript 代码错误(_C)"
+#: gui/qt/Qt4Gui.cpp:129
+msgid "OpenGL renderer not supported!"
+msgstr "不支持 OpenGL 渲染器!"
 
-#: gui/gtk/gtk.cpp:1386
-msgid "_Security"
-msgstr "安全(_S)"
+#: gui/qt/Qt4Gui.cpp:137
+msgid "AGG renderer not supported!"
+msgstr "不支持 AGG 渲染器!"
 
-#: gui/gtk/gtk.cpp:1399
-msgid "Connect only to local _host"
-msgstr "只连接本地主机(_H)"
+#: gui/qt/Qt4Gui.cpp:589
+msgid "Properties"
+msgstr "属性"
 
-#: gui/gtk/gtk.cpp:1406
-msgid "Connect only to local _domain"
-msgstr "只连接本地域(_D)"
+#: gui/qt/Qt4Gui.cpp:600
+msgid "Preferences"
+msgstr "首选项"
 
-#: gui/gtk/gtk.cpp:1413
-msgid "Disable SSL _verification"
-msgstr "禁用 SSL 验证(_V)"
+#: gui/qt/Qt4Gui.cpp:617
+msgid "Restart"
+msgstr "重新开始"
 
-#: gui/gtk/gtk.cpp:1420
-msgid "_Whitelist"
-msgstr "白名单(_W)"
+#: gui/qt/Qt4Gui.cpp:626
+msgid "Fullscreen"
+msgstr "全屏"
 
-#: gui/gtk/gtk.cpp:1429
-msgid "_Blacklist"
-msgstr "黑名单(_B)"
+#: gui/qt/Qt4Gui.cpp:641
+msgid "File"
+msgstr "文件"
 
-#: gui/gtk/gtk.cpp:1454
-msgid "Do _not write Shared Object files"
-msgstr "不写共享对象文件(_N)"
+#: gui/qt/Qt4Gui.cpp:646
+msgid "Edit"
+msgstr "编辑"
 
-#: gui/gtk/gtk.cpp:1461
-msgid "Only _access local Shared Object files"
-msgstr "只访问本地的共享对象文件(_A)"
+#: gui/qt/Qt4Gui.cpp:650
+msgid "Movie Control"
+msgstr "媒体控制"
 
-#: gui/gtk/gtk.cpp:1468
-msgid "Disable Local _Connection object"
-msgstr "禁用本地连接对象(_C)"
+#: gui/qt/Qt4Gui.cpp:657
+msgid "View"
+msgstr "查看"
 
-#: gui/gtk/gtk.cpp:1482
-msgid "_Media"
-msgstr "媒体(_M)"
+#: gui/qt/Qt4Gui.cpp:739
+msgid "Click to Play"
+msgstr "点击播放"
 
-#: gui/gtk/gtk.cpp:1493
-msgid "Use sound _handler"
-msgstr "使用声音处理器(_H)"
+#: gui/qt/Qt4Gui.cpp:786
+msgid "Logging"
+msgstr "日志记录"
 
-#: gui/gtk/gtk.cpp:1501
-msgid "<b>Media Streams</b>"
-msgstr "<b>媒体流</b>"
+#: gui/qt/Qt4Gui.cpp:792
+msgid "Verbosity level"
+msgstr "详尽程度"
 
-#: gui/gtk/gtk.cpp:1544
-msgid "_Player"
-msgstr "播放器(_P)"
+#: gui/qt/Qt4Gui.cpp:810
+msgid "Log to file"
+msgstr "记录到文件"
 
-#: gui/gtk/gtk.cpp:1584
-msgid "<i>If blank, Gnash will detect your OS</i>"
-msgstr "<i>如果不填,Gnash 会检测您的操作系统</i>"
+#: gui/qt/Qt4Gui.cpp:817
+msgid "Log parser output"
+msgstr "记录解析器输出"
 
-#: gui/gtk/gtk.cpp:1637
-msgid "Max scripts execution time (in seconds):"
-msgstr "脚本执行最长时间(秒):"
+#: gui/qt/Qt4Gui.cpp:821
+msgid "Log SWF actions"
+msgstr "记录 SWF 操作"
 
-#: gui/gtk/gtk.cpp:1656
-msgid "Max scripts recursion limit (stack depth):"
-msgstr "脚本重入最大限制(栈深度):"
+#: gui/qt/Qt4Gui.cpp:825
+msgid "Log malformed SWF errors"
+msgstr "记录损坏的 SWF 错误"
 
-#: gui/gtk/gtk.cpp:1672
-msgid "Lock script limits so that SWF tags can't override"
-msgstr "锁定脚本限制,以使 SWF 标记无法覆盖"
+#: gui/qt/Qt4Gui.cpp:830
+msgid "Log ActionScript coding errors"
+msgstr "记录 ActionScript 代码错误"
 
-#: gui/gtk/gtk.cpp:1684
-msgid "Start _Gnash in pause mode"
-msgstr "以暂停方式启动 _Gnash"
+#: gui/qt/Qt4Gui.cpp:837
+msgid "Security"
+msgstr "安全"
 
-#: gui/gtk/gtk.cpp:1843
-msgid ""
-"This program is free software; you can redistribute it and/or modify\n"
-"it under the terms of the GNU General Public License as published by\n"
-"the Free Software Foundation; either version 3 of the License, or\n"
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful,\n"
-"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-"GNU General Public License for more details.\n"
-"You should have received a copy of the GNU General Public License\n"
-"along with this program; if not, write to the Free Software\n"
-"Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301\n"
-"USA or visit http://www.gnu.org/licenses/."
-msgstr ""
+#: gui/qt/Qt4Gui.cpp:843
+msgid "Connect only to local host"
+msgstr "只连接本地主机"
 
-#: gui/gtk/gtk.cpp:1859
-msgid "Gnash is the GNU SWF Player based on GameSWF."
-msgstr "Gnash 是基于 GameSWF 的 GNU SWF 播放器。"
+#: gui/qt/Qt4Gui.cpp:848
+msgid "Connect only to local domain"
+msgstr "只连接本地域"
 
-#: gui/gtk/gtk.cpp:1860
-msgid ""
-"\n"
-"Renderer: "
-msgstr ""
-"\n"
-"渲染器:"
+#: gui/qt/Qt4Gui.cpp:853
+msgid "Disable SSL verification"
+msgstr "禁用 SSL 验证"
 
-#: gui/gtk/gtk.cpp:1862
-msgid ""
-"\n"
-"Hardware Acceleration: "
-msgstr ""
-"\n"
-"硬件加速:"
+#: gui/qt/Qt4Gui.cpp:867
+msgid "Do not write Shared Object files"
+msgstr "不写共享对象文件"
 
-#: gui/gtk/gtk.cpp:1864
-msgid ""
-"\n"
-"GUI: "
-msgstr ""
-"\n"
-"用户界面:"
+#: gui/qt/Qt4Gui.cpp:873
+msgid "Only access local Shared Object files"
+msgstr "只访问本地的共享对象文件"
 
-#: gui/gtk/gtk.cpp:1866
-msgid ""
-"\n"
-"Media: "
-msgstr ""
-"\n"
-"媒体:"
+#: gui/qt/Qt4Gui.cpp:878
+msgid "Disable Local Connection object"
+msgstr "禁用本地连接对象"
 
-#: gui/gtk/gtk.cpp:1896
-msgid "translator-credits"
-msgstr "Wylmer Wang <wantinghard at gmail.com>"
+#: gui/qt/Qt4Gui.cpp:885
+msgid "Network"
+msgstr "网络"
 
-#: gui/gtk/gtk.cpp:1923
-msgid "_File"
-msgstr "文件(_F)"
+#: gui/qt/Qt4Gui.cpp:891
+msgid "Network timeout in seconds"
+msgstr "网络超时的秒数"
 
-#: gui/gtk/gtk.cpp:1976
-msgid "_Edit"
-msgstr "编辑(_E)"
+#: gui/qt/Qt4Gui.cpp:903
+msgid "Media"
+msgstr "媒体"
 
-#: gui/gtk/gtk.cpp:1996
-msgid "_Help"
-msgstr "帮助(_H)"
+#: gui/qt/Qt4Gui.cpp:909
+msgid "Use sound handler"
+msgstr "使用声音处理器"
 
-#: gui/gtk/gtk.cpp:2016
-msgid "_View"
-msgstr "查看(_V)"
+#: gui/qt/Qt4Gui.cpp:932
+msgid "Player"
+msgstr "播放器"
 
-#: gui/gtk/gtk.cpp:2024
-msgid "Redraw"
-msgstr "重绘"
+#: gui/qt/Qt4Gui.cpp:949 gui/qt/Qt4Gui.cpp:1022
+msgid "<Autodetect>"
+msgstr "<自动检测>"
 
-#: gui/gtk/gtk.cpp:2034 gui/gtk/gtk.cpp:2039
-msgid "Toggle fullscreen"
-msgstr "切换全屏"
+#: gui/qt/Qt4Gui.cpp:974
+msgid "Start Gnash in pause mode"
+msgstr "以暂停方式启动 Gnash"
 
-#: gui/gtk/gtk.cpp:2048
-msgid "Show updated ranges"
-msgstr "显示已更新的范围"
+#: gui/gui.cpp:194
+msgid "Clipboard not yet supported in this GUI"
+msgstr "此用户界面尚未实现剪贴板支持"
 
-#: gui/gtk/gtk.cpp:2067
-msgid "_Quality"
-msgstr "质量(_Q)"
+#: gui/gui.cpp:200 gui/gui.cpp:212
+msgid "Fullscreen not yet supported in this GUI"
+msgstr "此用户界面尚未实现全屏支持"
 
-#: gui/gtk/gtk.cpp:2077
-msgid "Low"
-msgstr "低"
+#: gui/gui.cpp:206
+msgid "Window resize not yet supported in this GUI"
+msgstr "此用户界面尚未实现对调整窗口大小的支持"
 
-#: gui/gtk/gtk.cpp:2083
-msgid "Medium"
-msgstr "中"
+#: gui/gui.cpp:230 gui/gui.cpp:243
+msgid "Menu show/hide not yet supported in this GUI"
+msgstr "此用户界面尚未实现对菜单显示/隐藏的支持"
 
-#: gui/gtk/gtk.cpp:2089
-msgid "High"
-msgstr "高"
+#: gui/gui.cpp:236
+msgid "Mouse show/hide not yet supported in this GUI"
+msgstr "此用户界面尚未实现对鼠标显示/隐藏的支持"
 
-#: gui/gtk/gtk.cpp:2095
-msgid "Best"
-msgstr "最佳"
+#: gui/gui.cpp:283
+msgid "Can't update stage matrix till VM is initialized"
+msgstr "无法更新层级矩阵,直到虚拟机初始化完成"
 
-#: gui/gtk/gtk.cpp:2108
-msgid "Movie _Control"
-msgstr "影片控制(_C)"
+#: gui/gui.cpp:335
+#, c-format
+msgid "Invalid scaleMode %d"
+msgstr "无效的 scaleMode %d"
 
-#: gui/gtk/gtk.cpp:2275 gui/gtk/gtk.cpp:2276
+#: gui/gui.cpp:375
 #, c-format
-msgid "Couldn't find pixmap file: %s"
-msgstr "找不到像素映射(pixmap)文件:%s"
+msgid "Invalid horizontal align %d"
+msgstr "无效的水平对齐 %d"
 
-#: gui/gtk/gtk.cpp:2282
+#: gui/gui.cpp:406
 #, c-format
-msgid "Failed to load pixbuf file: %s: %s"
-msgstr "加载 pixbuf 文件失败:%s:%s"
+msgid "Invalid vertical align %d"
+msgstr "无效的竖直对齐 %d"
 
-#: gui/gtk/gtk.cpp:2608 gui/gtk/gtk.cpp:2621
-msgid "Open file"
-msgstr "打开文件"
+#: gui/gui.cpp:903
+#, fuzzy
+msgid "GUI is in stop mode, won't start application"
+msgstr "用户界面在停止模式,不会启动应用程序"
 
-#: gui/gtk/gtk_glue_gtkglext.cpp:72
-msgid ""
-"Cannot find the double-buffered visual.\n"
-"Trying single-buffered visual."
-msgstr ""
-"找不到双缓冲的视图。\n"
-"请尝试单缓冲视图。"
+#: gui/gui.cpp:1266
+#, fuzzy, c-format
+msgid "This GUI didn't override 'yesno', assuming 'yes' answer to question: %s"
+msgstr "该用户界面不能重写 'yesno', 问题的答案假设为 'yes': %s"
 
-#: gui/gtk/gtk_glue_gtkglext.cpp:78
-msgid "No appropriate OpenGL-capable visual found."
-msgstr "未找到合适的能 OpenGL 渲染的视图。"
+#: gui/gui.cpp:1275
+msgid "Gui::setQuality called before a movie_root was available"
+msgstr "在 movie_root 可用前调用了 Gui::setQuality"
+
+#: gui/gui.cpp:1285
+msgid "Gui::getQuality called before a movie_root was available"
+msgstr "在 movie_root 可用前调用了 Gui::getQuality"
+
+#: gui/haiku/haiku.cpp:141
+msgid "spawn_thread failed"
+msgstr "spawn_thread 失败"
+
+#: gui/haiku/haiku.cpp:144
+msgid "resume_thread failed"
+msgstr "resume_thread 失败"
+
+#: gui/haiku/haiku.cpp:157
+#, c-format
+msgid "pulses thread returned %d"
+msgstr "脉冲(pulses)线程返回 %d"
+
+#: gui/haiku/haiku.cpp:248
+msgid "send_data failed"
+msgstr "send_data 失败"
 
 #: extensions/mysql/mysql_db.cpp:186
 msgid "Couldn't initialize database"
-msgstr ""
+msgstr "无法初始化数据库"
 
 #: extensions/mysql/mysql_db.cpp:191
 msgid "Couldn't connect to database"
-msgstr ""
+msgstr "无法连接到数据库"
 
 #: extensions/mysql/mysql_db.cpp:217 extensions/mysql/mysql_db.cpp:245
 #, c-format
 msgid "MySQL connection error: %s"
-msgstr ""
+msgstr "MySQL 连接错误: %s"
 
 #: extensions/mysql/mysql_db.cpp:224 extensions/mysql/mysql_db.cpp:252
 #, c-format
@@ -11490,8 +11642,95 @@ msgid ""
 "\t%s\n"
 "Query was: %s"
 msgstr ""
+"MySQL 查询错误:\n"
+"\t%s\n"
+"查询是: %s"
 
 #: extensions/mysql/mysql_db.cpp:266
 #, c-format
 msgid "Field name is: %s: "
-msgstr ""
+msgstr "字段名是: %s:"
+
+#~ msgid "Need semaphore value of 1 for locking. Cannot attach shared memory!"
+#~ msgstr "锁定需要信号量的值为1。不能连接共享内存连接!"
+
+#~ msgid ""
+#~ "AudioDecoderFfmpeg: could not find a complete frame in the last %d bytes "
+#~ "of input (malformed SWF or FLV?)"
+#~ msgstr ""
+#~ "AudioDecoderFfmpeg:在输入的最后%d字节中无法找到一个完全帧(SWF或FLV异常?)"
+
+#~ msgid ""
+#~ "avcodec_decode_audio returned %d. Upgrading ffmpeg/libavcodec might fix "
+#~ "this issue."
+#~ msgstr "avcodec_decode_audio返回%d。升级ffmpeg/libavcodec也许会解决该问题。"
+
+#~ msgid "Needed %d dead iterations to detect audio type."
+#~ msgstr "检测音频类型需要 %d 个完全循环。"
+
+#~ msgid "MediaParserGst failed to detect any stream types."
+#~ msgstr "MediaParserGst没有检测到任何流类型。"
+
+#~ msgid ""
+#~ "Invalid fill style %d in fillStyle0Change record for font tag (0 or 1 "
+#~ "valid). Set to 0."
+#~ msgstr ""
+#~ "无效的填充样式 %d 在字体标签的fillStyle0Change记录中(0或1有效)。设置为"
+#~ "0。"
+
+#~ msgid ""
+#~ "Invalid fill style %d in fillStyle0Change record - %d defined. Set to 0."
+#~ msgstr "无效的填充样式 %d 在fillStyle0Change记录中 - %d 已定义。设置为0。"
+
+#~ msgid ""
+#~ "Invalid fill style %d in fillStyle1Change record for font tag (0 or 1 "
+#~ "valid). Set to 0."
+#~ msgstr ""
+#~ "无效的填充样式 %d 在字体标签的fillStyle1Change记录中(0或1有效)。设置为"
+#~ "0。"
+
+#~ msgid ""
+#~ "Invalid fill style %d in fillStyle1Change record - %d defined. Set to 0."
+#~ msgstr "无效的填充样式 %d 在fillStyle1Change记录中 - %d 已定义。设置为0。"
+
+#~ msgid ""
+#~ "Invalid line style %d in lineStyleChange record for font tag (0 or 1 "
+#~ "valid). Set to 0."
+#~ msgstr ""
+#~ "无效的填充样式 %d 在字体标签的lineStyleChange记录中(0或1有效)。设置为0。"
+
+#~ msgid "get url: target %s is not a sprite"
+#~ msgstr "取得url: 目标 %s 不是一个精灵"
+
+#~ msgid "Found a %s device for touchscreen input using %s"
+#~ msgstr "找到一个 %s 设备, 其使用 %s 触摸屏输入"
+
+#~ msgid "Framebuffer device uses %d bytes of memory."
+#~ msgstr "帧缓冲设备使用 %d 字节内存。"
+
+#~ msgid "Video mode: %dx%d with %d bits per pixel."
+#~ msgstr "视频模式: %dx%d,每像素比特数 %d。"
+
+#~ msgid "Framebuffer stride is: %d."
+#~ msgstr "帧缓冲步幅为:%d。"
+
+#~ msgid "unable to get protocol entry for %s"
+#~ msgstr "无法得到 %s 的协议项"
+
+#~ msgid "Server bound to service on %s, port %hd, using fd #%d"
+#~ msgstr "服务器绑定服务在 %s,端口 %hd,正在使用文件描述符 #%d"
+
+#~ msgid "Couldn't get the hostname for this machine"
+#~ msgstr "无法得到该机器的主机名"
+
+#~ msgid "The IP address for this client socket is %s"
+#~ msgstr "该客户端套接字的IP地址是 %s"
+
+#~ msgid "ssl!!"
+#~ msgstr "ssl!!"
+
+#~ msgid "Movie Frame Rate is %d, adjusting delay to %dms"
+#~ msgstr "影片帧率为 %d,将延迟调整为 %d毫秒"
+
+#~ msgid "Movie Frame Rate is %d, adjusting delay"
+#~ msgstr "影片帧率为 %d,调整延迟"
diff --git a/revno.h b/revno.h
index 2180e9f..b99e4c0 100644
--- a/revno.h
+++ b/revno.h
@@ -1,3 +1,3 @@
 #define BRANCH_REVNO "2"
 #define BRANCH_NICK "master"
-#define COMMIT_ID "070912d"
+#define COMMIT_ID "935df16"
diff --git a/testsuite/DummyCharacter.h b/testsuite/DummyCharacter.h
index 1cb9213..d7ace95 100644
--- a/testsuite/DummyCharacter.h
+++ b/testsuite/DummyCharacter.h
@@ -24,7 +24,7 @@
 #include "Movie.h" // for createMovie
 #include "snappingrange.h" // for InvalidatedRanges typedef (don't like it)
 
-#include <memory> // for auto_ptr
+#include <memory> // for unique_ptr
 
 // Forward declarations
 namespace gnash {
@@ -59,7 +59,7 @@ public:
 
     virtual void mouseEvent(const event_id&) {}
 
-    InteractiveObject* topmostMouseEntity(boost::int32_t, boost::int32_t)
+    InteractiveObject* topmostMouseEntity(std::int32_t, std::int32_t)
     {
         return 0;
     }
diff --git a/testsuite/DummyMovieDefinition.h b/testsuite/DummyMovieDefinition.h
index b4e51ae..4d92ec5 100644
--- a/testsuite/DummyMovieDefinition.h
+++ b/testsuite/DummyMovieDefinition.h
@@ -27,7 +27,7 @@
 
 #include <vector>
 #include <string>
-#include <memory> // for auto_ptr
+#include <memory> // for unique_ptr
 
 
 namespace gnash
diff --git a/testsuite/FuzzyPixel.h b/testsuite/FuzzyPixel.h
index d5f1b68..d5dfe32 100644
--- a/testsuite/FuzzyPixel.h
+++ b/testsuite/FuzzyPixel.h
@@ -97,7 +97,7 @@ public:
 	/// @param a
 	///	The alpha value.
 	///
-	FuzzyPixel(boost::uint8_t r, boost::uint8_t g, boost::uint8_t b, boost::uint8_t a)
+	FuzzyPixel(std::uint8_t r, std::uint8_t g, std::uint8_t b, std::uint8_t a)
 		:
 		_col(r, g, b, a),
 		_tol(0)
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index 3ffc115..6ee3dd8 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -161,6 +161,7 @@ libtestsuite_la_CXXFLAGS = \
 	-I$(top_srcdir)/libcore/parser  \
 	-I$(top_srcdir)/libcore/vm  \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	$(CAIRO_CFLAGS) \
 	$(CROSS_CXXFLAGS) \
 	$(NULL)
diff --git a/testsuite/MovieTester.cpp b/testsuite/MovieTester.cpp
index 5066983..1da2a0b 100644
--- a/testsuite/MovieTester.cpp
+++ b/testsuite/MovieTester.cpp
@@ -35,8 +35,10 @@
 #include "Renderer.h"
 #include "ManualClock.h" // for use by advance
 #include "StreamProvider.h" // for passing to RunResources
+#include "IOChannel.h"
 #include "swf/TagLoadersTable.h"
 #include "swf/DefaultTagLoaders.h"
+#include "GnashFactory.h"
 
 #ifdef RENDERER_CAIRO
 # include "Renderer_cairo.h"
@@ -52,10 +54,9 @@
 
 #include <cstdio>
 #include <string>
-#include <memory> // for auto_ptr
+#include <memory> // for unique_ptr
 #include <cmath> // for ceil
 #include <iostream>
-#include <boost/shared_ptr.hpp>
 
 //#define SHOW_INVALIDATED_BOUNDS_ON_ADVANCE 1
 
@@ -86,6 +87,8 @@ namespace {
 
 MovieTester::MovieTester(const std::string& url)
     :
+    _x(0),
+    _y(0),
     _forceRedraw(true),
     _samplesFetched(0)
 {
@@ -95,30 +98,29 @@ MovieTester::MovieTester(const std::string& url)
     initTestingMediaHandlers();
 #endif
     
-    _runResources.reset(new RunResources());
 #ifdef USE_SOUND
     // Initialize the sound handler(s)
     initTestingSoundHandlers();
-    _runResources->setSoundHandler(_sound_handler);
+    _runResources.setSoundHandler(_sound_handler);
 #endif
 #ifdef USE_MEDIA
-    _runResources->setMediaHandler(_mediaHandler);
+    _runResources.setMediaHandler(_mediaHandler);
 #endif
     
-    boost::shared_ptr<SWF::TagLoadersTable> loaders(new SWF::TagLoadersTable());
+    std::shared_ptr<SWF::TagLoadersTable> loaders(new SWF::TagLoadersTable());
     addDefaultLoaders(*loaders);
     
-    _runResources->setTagLoaders(loaders);
+    _runResources.setTagLoaders(loaders);
     
-    boost::shared_ptr<StreamProvider> sp(new StreamProvider(url, url));
+    std::shared_ptr<StreamProvider> sp(new StreamProvider(url, url));
 
-    _runResources->setStreamProvider(sp);
+    _runResources.setStreamProvider(sp);
 
     if ( url == "-" ) {
-	std::auto_ptr<IOChannel> in (
+	std::unique_ptr<IOChannel> in (
 		noseek_fd_adapter::make_stream(fileno(stdin))
 				     );
-		_movie_def = MovieFactory::makeMovie(in, url, *_runResources, false);
+		_movie_def = MovieFactory::makeMovie(std::move(in), url, _runResources, false);
 	} else {
 	URL urlObj(url);
 	if ( urlObj.protocol() == "file" ) {
@@ -135,7 +137,7 @@ MovieTester::MovieTester(const std::string& url)
 #endif
 	}
 	// _url should be always set at this point...
-	_movie_def = MovieFactory::makeMovie(urlObj, *_runResources,
+	_movie_def = MovieFactory::makeMovie(urlObj, _runResources,
 					     NULL, false);
     }
     
@@ -143,7 +145,7 @@ MovieTester::MovieTester(const std::string& url)
 	throw GnashException("Could not load movie from "+url);
     }
     
-    _movie_root = new movie_root(_clock, *_runResources);
+    _movie_root.reset(new movie_root(_clock, _runResources));
     
     // Initialize viewport size with the one advertised in the header
     _width = unsigned(_movie_def->get_width_pixels());
@@ -168,16 +170,21 @@ MovieTester::MovieTester(const std::string& url)
     // ... and render it
     render();
 }
+
+MovieTester::~MovieTester()
+{
+    MovieFactory::clear();
+}
     
 void
-MovieTester::render(boost::shared_ptr<Renderer> h,
+MovieTester::render(std::shared_ptr<Renderer> h,
 		    InvalidatedRanges& invalidated_regions) 
 {
     
     // This is a bit dangerous, as there isn't really support for swapping
     // renderers during runtime; though the only problem is likely to be
     // that CachedBitmaps are missing.
-    _runResources->setRenderer(h);
+    _runResources.setRenderer(h);
     
     h->set_invalidated_regions(invalidated_regions);
     
@@ -280,10 +287,10 @@ MovieTester::advanceClock(unsigned long ms_current)
 	
         log_debug("advanceClock(%d) needs to fetch %d samples", ms, toFetch);
 	
-        boost::int16_t samples[1024];
+        std::int16_t samples[1024];
         while (toFetch) {
             unsigned int n = std::min(toFetch, 1024u);
-            _sound_handler->fetchSamples((boost::int16_t*)&samples, n);
+            _sound_handler->fetchSamples((std::int16_t*)&samples, n);
             toFetch -= n;
         }
     }
@@ -536,7 +543,7 @@ MovieTester::soundsStopped()
 void
 MovieTester::initTestingRenderers()
 {
-    boost::shared_ptr<Renderer> handler;
+    std::shared_ptr<Renderer> handler;
     
     // TODO: add support for testing multiple renderers
     // This is tricky as requires changes in the core lib
@@ -579,7 +586,7 @@ MovieTester::initTestingRenderers()
 }
 
 void
-MovieTester::addTestingRenderer(boost::shared_ptr<Renderer> h,
+MovieTester::addTestingRenderer(std::shared_ptr<Renderer> h,
         const std::string& name)
 {
     if ( ! h->initTestBuffer(_width, _height) )	{
@@ -604,7 +611,7 @@ MovieTester::addTestingRenderer(boost::shared_ptr<Renderer> h,
     
     // this will be needed till we allow run-time swapping of renderers,
     // see above UNTESTED message...
-    _runResources->setRenderer(_testingRenderers.back().getRenderer());
+    _runResources.setRenderer(_testingRenderers.back().getRenderer());
 }
     
 bool
@@ -634,7 +641,7 @@ MovieTester::initTestingSoundHandlers()
 void
 MovieTester::initTestingMediaHandlers()
 {
-#ifdef USE_SOUND
+#ifdef USE_MEDIA
     // TODO: allow selection.
     _mediaHandler.reset(media::MediaFactory::instance().get(""));
 #endif
diff --git a/testsuite/MovieTester.h b/testsuite/MovieTester.h
index 2584003..8d86a07 100644
--- a/testsuite/MovieTester.h
+++ b/testsuite/MovieTester.h
@@ -29,7 +29,7 @@
 #include "Range2d.h"
 #include "GnashKey.h"
 #include "sound_handler.h" // for creating the "test" sound handlers
-#include "Renderer.h" // for dtor visibility by auto_ptr
+#include "Renderer.h" // for dtor visibility by unique_ptr
 #include "Movie.h" 
 #include "ManualClock.h" // for composition
 #include "RunResources.h" // For initialization.
@@ -37,9 +37,8 @@
 
 #include <boost/intrusive_ptr.hpp>
 #include <vector>
-#include <memory> // for auto_ptr
+#include <memory> // for unique_ptr
 #include <string> 
-#include <boost/shared_ptr.hpp>
 #include <cmath>
 
 #define check_pixel(x, y, radius, color, tolerance) \
@@ -77,7 +76,7 @@ class TestingRenderer
 
 public:
 
-	TestingRenderer(boost::shared_ptr<Renderer> renderer,
+	TestingRenderer(std::shared_ptr<Renderer> renderer,
             const std::string& name)
 		:
 		_name(name),
@@ -87,12 +86,12 @@ public:
 	const std::string& getName() const { return _name; }
 
 	/// Return the underlying render handler
-    boost::shared_ptr<Renderer> getRenderer() const { return _renderer; }
+    std::shared_ptr<Renderer> getRenderer() const { return _renderer; }
 
 private:
 
 	std::string _name;
-    boost::shared_ptr<Renderer> _renderer;
+    std::shared_ptr<Renderer> _renderer;
 };
 
 /// An utility class for testing movie playback
@@ -115,6 +114,8 @@ public:
 	///
 	MovieTester(const std::string& filespec);
 
+	~MovieTester();
+
 	/// Advance the movie by one frame
 	//
     /// Note that the default testing behaviour does not mirror actual
@@ -348,23 +349,24 @@ private:
 	/// @param invalidated
 	///	The invalidated ranges as computed by the core lib.
 	///
-	void render(boost::shared_ptr<Renderer> renderer,
+	void render(std::shared_ptr<Renderer> renderer,
             InvalidatedRanges& invalidated);
 
 	/// Add a testing renderer to the list, initializing it with current
     //viewport size
-	void addTestingRenderer(boost::shared_ptr<Renderer> h,
+	void addTestingRenderer(std::shared_ptr<Renderer> h,
             const std::string& name);
 
-	gnash::movie_root* _movie_root;
+    RunResources _runResources;
+
+    std::shared_ptr<sound::sound_handler> _sound_handler;
 
-	boost::intrusive_ptr<gnash::movie_definition> _movie_def;
+    boost::intrusive_ptr<gnash::movie_definition> _movie_def;
 
-    boost::shared_ptr<sound::sound_handler> _sound_handler;
+    std::shared_ptr<media::MediaHandler> _mediaHandler;
 
-    boost::shared_ptr<media::MediaHandler> _mediaHandler;
+    std::unique_ptr<gnash::movie_root> _movie_root;
 
-    std::auto_ptr<RunResources> _runResources;
 	/// Current pointer position - X ordinate
 	int _x;
 
diff --git a/testsuite/actionscript.all/BitmapData.as b/testsuite/actionscript.all/BitmapData.as
index f7ca139..29756de 100644
--- a/testsuite/actionscript.all/BitmapData.as
+++ b/testsuite/actionscript.all/BitmapData.as
@@ -637,6 +637,14 @@ dest.copyPixels(source, new Rect(-50, -50, 100, 100), new Point(0, 0));
  check_equals(dest.getPixel(52, 10), 0xff0000);
  check_equals(dest.getPixel(10, 52), 0xff0000);
 
+// null copypixel argument: should be the same as Point(0,0)
+dest = new flash.display.BitmapData(100, 100, false, 0xff0000);
+dest.copyPixels(source, new Rect(-50, -50, 100, 100), null);
+ check_equals(dest.getPixel(10, 10), 0xff0000);
+ check_equals(dest.getPixel(52, 52), 0x0000ff);
+ check_equals(dest.getPixel(52, 10), 0xff0000);
+ check_equals(dest.getPixel(10, 52), 0xff0000);
+
 dest = new flash.display.BitmapData(100, 100, false, 0xff0000);
 dest.copyPixels(source, new Rect(0, 0, 100, 100), new Point(50, 50));
  check_equals(dest.getPixel(10, 10), 0xff0000);
@@ -1146,6 +1154,6 @@ flash.display.BitmapData.prototype = e;
 // END OF TEST
 //-------------------------------------------------------------
 
-totals(406);
+totals(410);
 
 #endif // OUTPUT_VERSION >= 8
diff --git a/testsuite/actionscript.all/Date.as b/testsuite/actionscript.all/Date.as
index 19acf00..174599d 100644
--- a/testsuite/actionscript.all/Date.as
+++ b/testsuite/actionscript.all/Date.as
@@ -692,8 +692,21 @@ check_equals(typeof(foo), 'string');
  check_equals(foo.substring(0, 7), 'foo 950');
 #endif
 
+{
+    var o = new Date();
+    o.setUTCMilliseconds(); // sets o's date to NaN
+
+    ASSetPropFlags(o.__proto__, null, 0, 1);
+    for (prop in o) {
+        if (prop.substr(0, 3) == "set" && prop != "setTime") {
+            o[prop](1,2,3,4);
+            check_equals(o.valueOf().toString(), "NaN");
+        }
+    }
+}
+
 #if OUTPUT_VERSION == 5
-totals(292);
+totals(307);
 #else
-totals (334);
+totals (349);
 #endif
diff --git a/testsuite/actionscript.all/Makefile.am b/testsuite/actionscript.all/Makefile.am
index 94ef849..5bc4e46 100644
--- a/testsuite/actionscript.all/Makefile.am
+++ b/testsuite/actionscript.all/Makefile.am
@@ -110,7 +110,6 @@ ASTESTS =			\
 	Random.as		\
 	Selection.as		\
 	SharedObject.as		\
-	Sound.as		\
 	Stage.as		\
 	String.as		\
 	System.as		\
@@ -129,7 +128,6 @@ ASTESTS =			\
 	XMLSocket.as	\
 	rtmp.as 		\
 	XMLNode.as		\
-	LocalConnection.as	\
 	enumerate.as	\
 	case.as			\
 	caseconv.as			\
@@ -139,6 +137,14 @@ ASTESTS =			\
 	argstest.as		\
 	$(NULL)
 
+if BUILD_LIBSOUND
+ASTESTS += Sound.as
+endif
+
+if HAVE_SEMGET
+ASTESTS += LocalConnection.as
+endif
+
 if HAVE_PERL
 if ENABLE_HAXE
 HAXETESTS = \
diff --git a/testsuite/actionscript.all/MovieClipLoader.as b/testsuite/actionscript.all/MovieClipLoader.as
index c683b31..3753a3b 100644
--- a/testsuite/actionscript.all/MovieClipLoader.as
+++ b/testsuite/actionscript.all/MovieClipLoader.as
@@ -394,12 +394,8 @@ function test3()
 
 }
 
-// Due to a bug in Gnash we must stop() before calling test1.
-// This is because Gnash's version of loadClip is blocking !!
-// TODO: fix it !
-stop();
-
 test1();
+stop();
 
 #else // OUTPUT_VERSION < 7
 
diff --git a/testsuite/actionscript.all/XMLNode.as b/testsuite/actionscript.all/XMLNode.as
index 33d28de..dd92e21 100644
--- a/testsuite/actionscript.all/XMLNode.as
+++ b/testsuite/actionscript.all/XMLNode.as
@@ -422,4 +422,51 @@ xl2 = new XML('<t></t>');
 xl1.appendChild(xl2);
 xl2.appendChild(xl1);
 
-check_totals(182);
+check_equals(xl2.parentNode, xl1);
+check_equals(xl1.parentNode, null); // Nothing happened.
+
+doc = new XML('<t></t>');
+parent = doc.createElement("parent");
+child = doc.createElement("child");
+parent.appendChild(child);
+doc.appendChild(parent);
+
+check_equals(doc.toString(), "<t /><parent><child /></parent>");
+
+child.appendChild(parent);
+check_equals(doc.toString(), "<t /><parent><child /></parent>");
+check_equals(child.hasChildNodes(), false);
+
+sibling = doc.createElement("sibling");
+parent.insertBefore(sibling, child);
+check_equals(doc.toString(), "<t /><parent><sibling /><child /></parent>");
+doc.insertBefore(sibling, parent); // Should move sibling
+check_equals(doc.toString(), "<t /><sibling /><parent><child /></parent>");
+parent.appendChild(sibling);
+check_equals(doc.toString(), "<t /><parent><child /><sibling /></parent>");
+parent.appendChild(parent);
+check_equals(doc.toString(), "<t /><parent><child /><sibling /></parent>");
+child.appendChild(parent);
+check_equals(doc.toString(), "<t /><parent><child /><sibling /></parent>");
+grandchild = doc.createElement("grandchild");
+child.appendChild(grandchild);
+check_equals(doc.toString(), "<t /><parent><child><grandchild /></child><sibling /></parent>");
+child.appendChild(parent);
+check_equals(doc.toString(), "<t /><parent><child><grandchild /></child><sibling /></parent>");
+child.insertBefore(child, parent);
+check_equals(doc.toString(), "<t /><parent><child><grandchild /></child><sibling /></parent>");
+grandchild.appendChild(parent);
+check_equals(doc.toString(), "<t /><parent><child><grandchild /></child><sibling /></parent>");
+grandchild.insertBefore(grandchild, parent);
+check_equals(doc.toString(), "<t /><parent><child><grandchild /></child><sibling /></parent>");
+grandchild.insertBefore(grandchild, child);
+check_equals(doc.toString(), "<t /><parent><child><grandchild /></child><sibling /></parent>");
+
+doc1 = new XML("<t />");
+doc1.appendChild(parent);
+check_equals(doc1.toString(), "<t /><parent><child><grandchild /></child><sibling /></parent>");
+check_equals(doc.toString(), "<t />");
+doc1.appendChild(child);
+check_equals(doc1.toString(), "<t /><parent><sibling /></parent><child><grandchild /></child>");
+
+check_totals(201);
diff --git a/testsuite/analyse-results.sh b/testsuite/analyse-results.sh
index fcba838..82cc53e 100755
--- a/testsuite/analyse-results.sh
+++ b/testsuite/analyse-results.sh
@@ -1,12 +1,6 @@
 #!/bin/sh
 
-
-# case "$1" in
-#     totals)
-# 	totals ;;
-#     *)
-# 	exit ;;
-# esac
+mode=$1
 
 total_fail=0;
 total_pass=0;
@@ -98,14 +92,16 @@ echo
 # For now, return a failure if any XPASS or FAIL occurred
 if test ${total_fail} -gt 0 || test ${total_xpass} -gt 0; then
 
+	rc=1
 	timing=$(dirname $0)/timingissues
-	> ${timing}.tmp
+	> ${timing}.tmp || have_tmpfile=false # distcheck builddir is read-only
 
 	if test ${total_fail} -gt 0; then
 		echo "Unexpected failures follow:"
 		for s in ${suitefail}; do
 			echo " --=[ ${s} ]=-- "
-			grep -w FAIL ${s}/testrun.sum | tee -a ${timing}.tmp
+			grep -w FAIL ${s}/testrun.sum | \
+				($have_tmpfile && tee -a ${timing}.tmp)
 		done
 		echo
 	fi
@@ -119,13 +115,16 @@ if test ${total_fail} -gt 0 || test ${total_xpass} -gt 0; then
 		echo
 	fi
 
+	if test "$have_tmpfile" = "false"; then
+		exit $rc
+	fi
+
 	if test `grep -cf $timing ${timing}.tmp` -gt 0; then
 		if test `grep -cvf $timing ${timing}.tmp` -eq 0; then
 			echo "All failures are time-related. Exiting 0."
 			echo "See http://wiki.gnashdev.org/PredictableLoading"
 			echo
-			rm -f ${timing}.tmp
-			exit 0
+			rc=0
 		else
 			echo "Time-related failures follow:"
 			grep -f $timing ${timing}.tmp
@@ -137,8 +136,32 @@ if test ${total_fail} -gt 0 || test ${total_xpass} -gt 0; then
 			echo
 		fi
 	fi
+
+	if [ "$mode" = "verbose" ]; then
+		if test ${total_fail} -gt 0; then
+			echo "Verbose mode enabled. Displaying following files:"
+			echo
+			swfdecfail=$(sed -n 's/^.*in \(.*.trace-gnash\).*in \(.*.log\).*$/\1\n\2/p' ${timing}.tmp)
+			for log in $swfdecfail; do
+				echo " testsuite/swfdec/$log"
+				logfiles="${logfiles} testsuite/swfdec/$log"
+			done
+			for s in ${suitefail}; do
+				echo " ${s}/testrun.log"
+				logfiles="${logfiles} ${s}/testrun.log"
+			done
+			echo
+			for logfile in ${logfiles}; do
+				echo "= = = = = = = [ ${logfile} file - BEGIN ] = = = = = = ="
+				cat ${logfile}
+				echo "= = = = = = = [ ${logfile} file - END   ] = = = = = = ="
+				echo
+			done
+		fi
+	fi
+
 	rm -f ${timing}.tmp
-	exit 1
+	exit $rc
 else
 	exit 0
 fi
diff --git a/testsuite/check.h b/testsuite/check.h
index 81698db..eb4571d 100644
--- a/testsuite/check.h
+++ b/testsuite/check.h
@@ -117,4 +117,15 @@ TestState _runtest;
 		} \
 	}
 
+int trymain(int argc, char *argv[]);
+#define TRYMAIN(runtest) \
+int main(int argc, char *argv[]) { \
+  try { \
+      return trymain(argc, argv);  \
+  } catch (std::exception const&  ex) { \
+    (runtest).fail(std::string("caught unexpected exception: ") + ex.what()); \
+    return 1; \
+  } \
+}
+
 #endif // _CHECK_H_
diff --git a/testsuite/dejagnu.h b/testsuite/dejagnu.h
index 6742ffd..50903c4 100644
--- a/testsuite/dejagnu.h
+++ b/testsuite/dejagnu.h
@@ -192,6 +192,7 @@ class TestState {
       xpassed = 0;
       xfailed = 0;
       unresolve = 0;
+      laststate = FAILED;
     }
 
   ~TestState (void) { totals(); }
diff --git a/testsuite/generic-testrunner.sh b/testsuite/generic-testrunner.sh
index 4cf362f..99949b1 100755
--- a/testsuite/generic-testrunner.sh
+++ b/testsuite/generic-testrunner.sh
@@ -62,7 +62,7 @@ for t in ${testfiles}; do
 	outlog=${top_builddir}/testoutlog.\$$
 	echo "NOTE: Running test \${t}"
 	( 
-		exec > \${outlog}
+		exec > \${outlog} 2>&1
 		${top_builddir}/utilities/gprocessor -d${delay} -r${runs} -f${advances} -v \${t} || echo "FAILED: gprocessor returned an error while playing '\${t}'"
 	)
 	cat \${outlog}
diff --git a/testsuite/libbase.all/CurlStreamTest.cpp b/testsuite/libbase.all/CurlStreamTest.cpp
index 4f15b6a..03b5e9f 100644
--- a/testsuite/libbase.all/CurlStreamTest.cpp
+++ b/testsuite/libbase.all/CurlStreamTest.cpp
@@ -24,7 +24,7 @@
 #include "tu_file.h"
 #include "IOChannel.h"
 
-#include <memory>               // for auto_ptr
+#include <memory>               // for unique_ptr
 #include <cstdio>
 #include <iostream>
 #include <cassert>
@@ -38,7 +38,7 @@ const char* post = NULL;
 static void
 dump_curl(const char* url, ostream& os)
 {
-	std::auto_ptr<gnash::IOChannel> reader;
+	std::unique_ptr<gnash::IOChannel> reader;
 	if ( post )
 	{
 		reader.reset( gnash::NetworkAdapter::make_stream(url, post) );
@@ -64,7 +64,7 @@ dump_curl(const char* url, ostream& os)
 static void
 dump_tu_file(const char* url, ostream& os)
 {
-    std::auto_ptr<IOChannel> reader = makeFileChannel(url, true);
+    std::unique_ptr<IOChannel> reader = makeFileChannel(url, true);
 	assert(reader);
 	if (reader->bad()) return;
 
diff --git a/testsuite/libbase.all/IntTypesTest.cpp b/testsuite/libbase.all/IntTypesTest.cpp
index 3f23166..7669fea 100644
--- a/testsuite/libbase.all/IntTypesTest.cpp
+++ b/testsuite/libbase.all/IntTypesTest.cpp
@@ -25,7 +25,7 @@
 #include <iostream>
 #include <sstream>
 #include <cassert>
-#include <boost/cstdint.hpp>
+#include <cstdint>
 
 using namespace std;
 
@@ -34,14 +34,15 @@ main(int /*argc*/, char** /*argv*/)
 {
 
 	// Check typedef sizes.
-	check_equals (sizeof(boost::uint8_t), 1);
-	check_equals (sizeof(boost::uint16_t), 2);
-	check_equals (sizeof(boost::uint32_t), 4);
-	check_equals (sizeof(boost::uint64_t), 8);
-	check_equals (sizeof(boost::int8_t), 1);
-	check_equals (sizeof(boost::int16_t), 2);
-	check_equals (sizeof(boost::int32_t), 4);
-	check_equals (sizeof(boost::int64_t), 8);
-
+	check_equals (sizeof(std::uint8_t), 1);
+	check_equals (sizeof(std::uint16_t), 2);
+	check_equals (sizeof(std::uint32_t), 4);
+	check_equals (sizeof(std::uint64_t), 8);
+	check_equals (sizeof(std::int8_t), 1);
+	check_equals (sizeof(std::int16_t), 2);
+	check_equals (sizeof(std::int32_t), 4);
+	check_equals (sizeof(std::int64_t), 8);
+
+	return 0;
 }
 
diff --git a/testsuite/libbase.all/Makefile.am b/testsuite/libbase.all/Makefile.am
index 911f7ff..de3eb2f 100644
--- a/testsuite/libbase.all/Makefile.am
+++ b/testsuite/libbase.all/Makefile.am
@@ -22,6 +22,8 @@ AUTOMAKE_OPTIONS = dejagnu
 LDADD = \
 	$(top_builddir)/libbase/libgnashbase.la \
 	$(top_builddir)/librender/libgnashrender.la \
+	$(CROSS_LDFLAGS) \
+	$(BOOST_LIBS) \
 	$(LIBINTL) \
 	$(AGG_LIBS) \
 	$(OPENVG_LIBS) \
@@ -83,12 +85,12 @@ NoSeekFileTest_LDADD = $(LDADD)
 URLTest_SOURCES = URLTest.cpp
 URLTest_CPPFLAGS =  $(AM_CPPFLAGS) \
 	'-DBUILDDIR="$(abs_builddir)"'
-URLTest_LDADD = $(LDADD) -lboost_system
+URLTest_LDADD = $(LDADD)
 
 RcTest_SOURCES = RcTest.cpp
 RcTest_CPPFLAGS =  $(AM_CPPFLAGS) \
 	-DSRCDIR="$(srcdir)"
-RcTest_LDADD = $(LDADD) -lboost_system
+RcTest_LDADD = $(LDADD)
 
 IntTypesTest_SOURCES = IntTypesTest.cpp
 IntTypesTest_CPPFLAGS =  $(AM_CPPFLAGS) \
diff --git a/testsuite/libbase.all/NoSeekFileTest.cpp b/testsuite/libbase.all/NoSeekFileTest.cpp
index 418a59b..c617c67 100644
--- a/testsuite/libbase.all/NoSeekFileTest.cpp
+++ b/testsuite/libbase.all/NoSeekFileTest.cpp
@@ -22,9 +22,8 @@
 
 #ifdef HAVE_DEJAGNU_H
 #include "dejagnu.h"
-#else
-#include "check.h"
 #endif
+#include "check.h"
 
 #include "noseek_fd_adapter.h"
 #include "IOChannel.h"
@@ -50,10 +49,10 @@ using namespace std;
 TestState runtest;
 
 static void
-dump_buffer(const char* label, char* buf, size_t size, ostream& os)
+dump_buffer(const char* label, char* buf, ssize_t size, ostream& os)
 {
 	os << label << ":" << endl;
-	for (size_t i=0; i<size; i++) {
+	for (ssize_t i=0; i<size; i++) {
 		os << '[' << buf[i] << ']';
 	}
 
@@ -73,8 +72,8 @@ compare_reads(gnash::IOChannel* reader, int fd, const char* first, const char* s
 
 	for(;;)
 	{
-		size_t sz1 = reader->read(buf, CHUNK_SIZE);
-		size_t sz2 = read(fd, buf2, CHUNK_SIZE);
+		ssize_t sz1 = reader->read(buf, CHUNK_SIZE);
+		ssize_t sz2 = read(fd, buf2, CHUNK_SIZE);
 
 		if ( sz1 != sz2 )
 		{
@@ -87,7 +86,7 @@ compare_reads(gnash::IOChannel* reader, int fd, const char* first, const char* s
 			return false;
 		}
 
-		if ( sz1 == 0 ) {
+		if ( sz1 <= 0 ) {
 			break;
 		}
 
@@ -128,8 +127,9 @@ compare_reads(gnash::IOChannel* reader, int fd, const char* first, const char* s
 
 }
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	const char* input = INPUT; // Should be the path to this file
 	const char* cachename = "NoSeekFileTestCache";
@@ -137,22 +137,28 @@ main(int /*argc*/, char** /*argv*/)
 	int fd = open(input, O_RDONLY);
 	int raw = open(input, O_RDONLY);
 
+	if (fd < 0 || raw < 0) {
+	    runtest.fail("Unable to open input file");
+	}
+
 	dup2(fd, 0);
+	close(fd);
 
-	gnash::IOChannel* reader = gnash::noseek_fd_adapter::make_stream(0, cachename);
+	std::unique_ptr<gnash::IOChannel> reader(gnash::noseek_fd_adapter::make_stream(0, cachename));
 	assert(reader);
 
-	compare_reads(reader, raw, "wrapped", "raw");
+	compare_reads(reader.get(), raw, "wrapped", "raw");
 
 	lseek(raw, 0, SEEK_SET);
 	reader->seek(0);
-	compare_reads(reader, raw, "wrapped-rewind", "raw-rewind");
+	compare_reads(reader.get(), raw, "wrapped-rewind", "raw-rewind");
 
 
     FILE* f = std::fopen(cachename, "r");
-    std::auto_ptr<gnash::IOChannel> orig = gnash::makeFileChannel(f, false);
+    std::unique_ptr<gnash::IOChannel> orig = gnash::makeFileChannel(f, false);
 	lseek(raw, 0, SEEK_SET);
 	compare_reads(orig.get(), raw, "cache", "raw");
+	close(raw);
 
 
     if (sizeof(size_t) != sizeof(std::streamoff)) {
diff --git a/testsuite/libbase.all/Point2dTest.cpp b/testsuite/libbase.all/Point2dTest.cpp
index 819d434..8260539 100644
--- a/testsuite/libbase.all/Point2dTest.cpp
+++ b/testsuite/libbase.all/Point2dTest.cpp
@@ -49,7 +49,7 @@ main(int /*argc*/, char** /*argv*/)
     check_equals(p.x, 999999);
     check_equals(p.y, 1000000);
 
-    boost::int64_t square_dist = 0;
+    std::int64_t square_dist = 0;
     
     square_dist = Point2d::squareDistance(p1, p2);
     check_equals(square_dist, 10 * 10);
@@ -64,9 +64,10 @@ main(int /*argc*/, char** /*argv*/)
     square_dist = p1.squareDistance(p2);
     check_equals(square_dist, 1.0 * 0x8000000 * 0x8000000);
 
-    boost::int32_t  dist = 0;
+    std::int32_t  dist = 0;
     dist = p1.distance(p2);
     check_equals(dist, 0x8000000);
+    return 0;
 }
 
 
diff --git a/testsuite/libbase.all/Range2dTest.cpp b/testsuite/libbase.all/Range2dTest.cpp
index b3bc53a..71e2fc6 100644
--- a/testsuite/libbase.all/Range2dTest.cpp
+++ b/testsuite/libbase.all/Range2dTest.cpp
@@ -333,6 +333,6 @@ main(int /*argc*/, char** /*argv*/)
 	check( ! fIntRange1.contains(Range2d<int>(8, 8, 10, 11)) );
 	check( ! fIntRange1.contains(Range2d<int>(8, 8, 11, 11)) );
 	
-
+	return 0;
 }
 
diff --git a/testsuite/libbase.all/RcTest.cpp b/testsuite/libbase.all/RcTest.cpp
index 19ec4ca..4b06569 100644
--- a/testsuite/libbase.all/RcTest.cpp
+++ b/testsuite/libbase.all/RcTest.cpp
@@ -42,9 +42,8 @@
 
 #ifdef HAVE_DEJAGNU_H
 #include "dejagnu.h"
-#else
-#include "check.h"
 #endif
+#include "check.h"
 
 using namespace std;
 using namespace gnash;
@@ -62,8 +61,9 @@ bool nodelay = false;           // FIXME: this flag gets set based on
 
 TestState runtest;
 
+TRYMAIN(runtest);
 int
-main (int /*argc*/, char** /*argv*/) {
+trymain (int /*argc*/, char** /*argv*/) {
     RcInitFile& rc = RcInitFile::getDefaultInstance();
 
     gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
@@ -213,7 +213,7 @@ main (int /*argc*/, char** /*argv*/) {
         runtest.fail ("rc.getWhiteList() doesn't have elements");        
     }
 
-    if (rc.getLCShmKey() == 0xdd3adabd) {
+    if (rc.getLCShmKey() == static_cast<key_t>(0xdd3adabd)) {
         runtest.pass ("rc.getLCShmKey() == 0xabcd1234");
     } else {
         runtest.fail ("rc.getLCShmKey() != 0xabcd1234");
@@ -378,5 +378,6 @@ main (int /*argc*/, char** /*argv*/) {
         }
 
     }
+    return 0;
 }
 
diff --git a/testsuite/libbase.all/URLTest.cpp b/testsuite/libbase.all/URLTest.cpp
index 105bb34..18a8b89 100644
--- a/testsuite/libbase.all/URLTest.cpp
+++ b/testsuite/libbase.all/URLTest.cpp
@@ -30,8 +30,9 @@
 using namespace std;
 using namespace gnash;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	//gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	//dbglogfile.setVerbosity(2);
@@ -340,5 +341,7 @@ main(int /*argc*/, char** /*argv*/)
     check_equals (v66.anchor(), "");
     
 	// TODO: Samba paths
+
+    return 0;
 }
 
diff --git a/testsuite/libbase.all/memtest.cpp b/testsuite/libbase.all/memtest.cpp
index 4563da4..c864aab 100644
--- a/testsuite/libbase.all/memtest.cpp
+++ b/testsuite/libbase.all/memtest.cpp
@@ -174,6 +174,7 @@ main (int /*argc*/, char** /*argv*/) {
 #else
     runtest.untested("No support for mallinfo()");
 #endif // end of HAVE_MALLINFO
+    return 0;
 }
 
 // Allocate memory and forget to clean it up.
diff --git a/testsuite/libbase.all/snappingrangetest.cpp b/testsuite/libbase.all/snappingrangetest.cpp
index d062331..45ef354 100644
--- a/testsuite/libbase.all/snappingrangetest.cpp
+++ b/testsuite/libbase.all/snappingrangetest.cpp
@@ -225,5 +225,6 @@ main(int /*argc*/, char** /*argv*/)
 	finSnap4.add(Range2d<int>(40,273, 108,287));
 
 	check(finSnap3.contains(finSnap4));
+	return 0;
 }
 
diff --git a/testsuite/libbase.all/string_tableTest.cpp b/testsuite/libbase.all/string_tableTest.cpp
index b517a17..ca537d5 100644
--- a/testsuite/libbase.all/string_tableTest.cpp
+++ b/testsuite/libbase.all/string_tableTest.cpp
@@ -33,8 +33,10 @@
 
 #include "utility.h"
 using namespace gnash;
+
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string_table st;
 	
@@ -57,5 +59,5 @@ main(int /*argc*/, char** /*argv*/)
     check(!equal(st, st.find("AbAb"), st.find("abaB"), false));
     check(!equal(st, st.find("AbAb"), st.find("ABAB"), false));
 
-
+    return 0;
 }
diff --git a/testsuite/libcore.all/AsValueTest.cpp b/testsuite/libcore.all/AsValueTest.cpp
index 40f80a2..56e5f40 100644
--- a/testsuite/libcore.all/AsValueTest.cpp
+++ b/testsuite/libcore.all/AsValueTest.cpp
@@ -39,7 +39,6 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <iostream>
-#include <boost/shared_ptr.hpp>
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -48,6 +47,8 @@
 #include <iostream>
 #include <string>
 
+#include "check.h"
+
 using namespace gnash;
 using namespace std;
 
@@ -60,8 +61,9 @@ TestState runtest;
 LogFile& dbglogfile = LogFile::getDefaultInstance();
 RcInitFile& rcfile = RcInitFile::getDefaultInstance();
 
+TRYMAIN(_runtest);
 int
-main(int argc, char *argv[])
+trymain(int argc, char *argv[])
 {    const Arg_parser::Option opts[] =
         {
             { 'h', "help",          Arg_parser::no  },
@@ -102,7 +104,7 @@ main(int argc, char *argv[])
 
     const URL url("");
     runResources.setStreamProvider(
-            boost::shared_ptr<StreamProvider>(new StreamProvider(url, url)));
+            std::shared_ptr<StreamProvider>(new StreamProvider(url, url)));
 
     // Create a bogus movie with swf version 7 support
     movie_definition* md = new DummyMovieDefinition(runResources, 7);
@@ -118,6 +120,7 @@ main(int argc, char *argv[])
     test_isnan();
     test_conversion();
    
+    return 0;
 }
 
 void
diff --git a/testsuite/libcore.all/BitsReaderTest.cpp b/testsuite/libcore.all/BitsReaderTest.cpp
index 7def689..162e178 100644
--- a/testsuite/libcore.all/BitsReaderTest.cpp
+++ b/testsuite/libcore.all/BitsReaderTest.cpp
@@ -40,7 +40,6 @@
 #include <fcntl.h>
 #include <string.h>
 #include <sstream>
-#include <boost/scoped_array.hpp>
 
 using namespace std;
 using namespace gnash;
@@ -75,12 +74,13 @@ struct ByteReader
 
 };
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	ByteReader in(0xAA);
 
-	boost::scoped_array<unsigned char> buf(new unsigned char[1024]);
+	std::unique_ptr<unsigned char[]> buf(new unsigned char[1024]);
 
 	in.read(buf.get(), 1024);
 
@@ -245,10 +245,10 @@ main(int /*argc*/, char** /*argv*/)
 
 	/// bits: 10011001 10011001 (0x999999)
 
-	boost::int16_t s16 = s.read_s16(); check_equals(s16, (boost::int16_t)0x9999);
-	boost::uint16_t u16 = s.read_u16(); check_equals(u16, (boost::uint16_t)0x9999);
-	boost::int32_t s32 = s.read_s32(); check_equals(s32, (boost::int32_t)0x99999999);
-	boost::uint32_t u32 = s.read_u32(); check_equals(u32, (boost::uint32_t)0x99999999);
+	std::int16_t s16 = s.read_s16(); check_equals(s16, (std::int16_t)0x9999);
+	std::uint16_t u16 = s.read_u16(); check_equals(u16, (std::uint16_t)0x9999);
+	std::int32_t s32 = s.read_s32(); check_equals(s32, (std::int32_t)0x99999999);
+	std::uint32_t u32 = s.read_u32(); check_equals(u32, (std::uint32_t)0x99999999);
 
 	/// bits: 10011001 10011001 10011001 10011001 (0x99999999)
 	///       -
diff --git a/testsuite/libcore.all/ClassSizes.cpp b/testsuite/libcore.all/ClassSizes.cpp
index f86fe28..3cfed76 100644
--- a/testsuite/libcore.all/ClassSizes.cpp
+++ b/testsuite/libcore.all/ClassSizes.cpp
@@ -56,7 +56,6 @@
 #include <cmath>
 #include <string>
 #include <memory>
-#include <boost/scoped_ptr.hpp>
 
 #include "check.h"
 
@@ -73,8 +72,8 @@ using namespace gnash::SWF;
 // Add types in brackets to this macro to have their size printed.
 #define TYPES \
 (int) (float) (long) (double) \
-(Property*) (auto_ptr<Property>) (scoped_ptr<Property>) \
-(shared_ptr<Property>) (intrusive_ptr<as_object>) (GcResource) \
+(Property*) (unique_ptr<Property>) \
+(std::shared_ptr<Property>) (intrusive_ptr<as_object>) (GcResource) \
 (rgba) (SWFMatrix) (SWFRect) (LineStyle) (FillStyle) (SWFCxForm) \
 (as_value) \
 (DynamicShape)(ShapeRecord)(TextRecord) \
@@ -90,5 +89,6 @@ main(int /*argc*/, char** /*argv*/)
 {
     std::cout << "Gnash class sizes:\n";
     BOOST_PP_SEQ_FOR_EACH(SIZE, _, TYPES)
+    return 0;
 }
 
diff --git a/testsuite/libcore.all/CodeStreamTest.cpp b/testsuite/libcore.all/CodeStreamTest.cpp
index 461b37f..485d616 100644
--- a/testsuite/libcore.all/CodeStreamTest.cpp
+++ b/testsuite/libcore.all/CodeStreamTest.cpp
@@ -45,7 +45,7 @@ main(int /*argc*/, char** /*argv*/)
 	CodeStream* stream = new CodeStream(std::string(data,10));
 	
 	//Test read_as30p()
-	boost::uint8_t opcode;
+	std::uint8_t opcode;
 	int i = 0;
 	while(opcode = stream->read_as3op()){
 		check_equals(opcode,data[i]);
@@ -80,14 +80,14 @@ main(int /*argc*/, char** /*argv*/)
 	char newData[6] = {0x5,0xC5,0x0,0x0,0x1,0x2}; 
 	CodeStream* streamA = new CodeStream(std::string(newData,6));
 	
-	boost::uint8_t byteA = streamA->read_u8(); 
+	std::uint8_t byteA = streamA->read_u8();
 	check_equals(byteA,newData[0]);
 	
 	//Test read_S24.
-	boost::int32_t byteB = streamA->read_S24();
+	std::int32_t byteB = streamA->read_S24();
 	check_equals(byteB,197);
 
 	
 	
-
+	return 0;
 }
diff --git a/testsuite/libcore.all/CxFormTest.cpp b/testsuite/libcore.all/CxFormTest.cpp
index 045c27c..4c71fbf 100644
--- a/testsuite/libcore.all/CxFormTest.cpp
+++ b/testsuite/libcore.all/CxFormTest.cpp
@@ -46,10 +46,10 @@ int main()
     check_equals(c.gb, 0);
     check_equals(c.ab, 0);
     
-    boost::uint8_t r = 0;
-    boost::uint8_t b = 0;
-    boost::uint8_t g = 0;
-    boost::uint8_t a = 0;
+    std::uint8_t r = 0;
+    std::uint8_t b = 0;
+    std::uint8_t g = 0;
+    std::uint8_t a = 0;
 
     c.transform(r, b, g, a);
     check_equals(r, 0);
@@ -95,4 +95,5 @@ int main()
     check_equals(+b, 0);
     check_equals(+g, 117);
     check_equals(+a, 0);
+    return 0;
 }
diff --git a/testsuite/libcore.all/DisplayListTest.cpp b/testsuite/libcore.all/DisplayListTest.cpp
index 1bc8c68..dcc6328 100644
--- a/testsuite/libcore.all/DisplayListTest.cpp
+++ b/testsuite/libcore.all/DisplayListTest.cpp
@@ -43,8 +43,9 @@
 using namespace std;
 using namespace gnash;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
     gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
     dbglogfile.setVerbosity();
@@ -54,7 +55,7 @@ main(int /*argc*/, char** /*argv*/)
     RunResources ri;
     const URL url("");
     ri.setStreamProvider(
-            boost::shared_ptr<StreamProvider>(new StreamProvider(url, url)));
+            std::shared_ptr<StreamProvider>(new StreamProvider(url, url)));
     
     // Initialize a VM
     boost::intrusive_ptr<movie_definition> md5(new DummyMovieDefinition(ri, 5));
@@ -91,6 +92,6 @@ main(int /*argc*/, char** /*argv*/)
     dlist2.placeDisplayObject(ch2, 1);
     dlist2.placeDisplayObject(ch1, 2);
     
-    
+    return 0;
 }
 
diff --git a/testsuite/libcore.all/EdgeTest.cpp b/testsuite/libcore.all/EdgeTest.cpp
index 6f5048b..a44ae6a 100644
--- a/testsuite/libcore.all/EdgeTest.cpp
+++ b/testsuite/libcore.all/EdgeTest.cpp
@@ -103,5 +103,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_equals(Edge::pointOnCurve(A, C, B, 0.5), point(27.5, 10));
 	check_equals(std::sqrt((float)Edge::squareDistancePtCurve(A, C, B, B, 1)), 0);
 	check_equals(std::sqrt((float)Edge::squareDistancePtCurve(A, C, B, A, 0)), 0);
+	return 0;
 }
 
diff --git a/testsuite/libcore.all/Makefile.am b/testsuite/libcore.all/Makefile.am
index 537959e..589656e 100644
--- a/testsuite/libcore.all/Makefile.am
+++ b/testsuite/libcore.all/Makefile.am
@@ -34,12 +34,12 @@ AM_CPPFLAGS = \
         -I$(top_srcdir)/libcore/vm  \
 	$(FFMPEG_CFLAGS) \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	$(NULL)
 
 check_PROGRAMS = \
 	StreamTest \
 	BitsReaderTest \
-	PointTest \
 	MatrixTest \
 	EdgeTest \
 	PropertyListTest \
@@ -92,9 +92,6 @@ StreamTest_LDADD = $(LDADD)
 MatrixTest_SOURCES = MatrixTest.cpp
 MatrixTest_LDADD = $(LDADD)
 
-PointTest_SOURCES = PointTest.cpp
-PointTest_LDADD = $(LDADD)
-
 EdgeTest_SOURCES = EdgeTest.cpp
 EdgeTest_LDADD = $(LDADD)
 
diff --git a/testsuite/libcore.all/MatrixTest.cpp b/testsuite/libcore.all/MatrixTest.cpp
index f77da41..9b6a5a3 100644
--- a/testsuite/libcore.all/MatrixTest.cpp
+++ b/testsuite/libcore.all/MatrixTest.cpp
@@ -64,14 +64,14 @@ main(int /*argc*/, char** /*argv*/)
     // Note: If any of the following tests fails, your boost library
     // is bogus or hasn't been installed properly.
     // 
-    check_equals(sizeof(boost::int8_t),   1);
-    check_equals(sizeof(boost::uint8_t),  1);
-    check_equals(sizeof(boost::int16_t),  2);
-    check_equals(sizeof(boost::uint16_t), 2);
-    check_equals(sizeof(boost::int32_t),  4);
-    check_equals(sizeof(boost::uint32_t), 4);
-    check_equals(sizeof(boost::int64_t),  8);
-    check_equals(sizeof(boost::uint64_t), 8);
+    check_equals(sizeof(std::int8_t),   1);
+    check_equals(sizeof(std::uint8_t),  1);
+    check_equals(sizeof(std::int16_t),  2);
+    check_equals(sizeof(std::uint16_t), 2);
+    check_equals(sizeof(std::int32_t),  4);
+    check_equals(sizeof(std::uint32_t), 4);
+    check_equals(sizeof(std::int64_t),  8);
+    check_equals(sizeof(std::uint64_t), 8);
 
     // 
     //  Test identity SWFMatrix.
@@ -278,5 +278,6 @@ main(int /*argc*/, char** /*argv*/)
     m1_inverse.concatenate(m1);
     // the result is expected to be an identity SWFMatrix. 
     check_equals(m1_inverse, identity);
+    return 0;
 }
 
diff --git a/testsuite/libcore.all/PointTest.cpp b/testsuite/libcore.all/PointTest.cpp
deleted file mode 100644
index 48b5651..0000000
--- a/testsuite/libcore.all/PointTest.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-
-int
-main(int /*argc*/, char** /*argv*/)
-{
-
-}
-
diff --git a/testsuite/libcore.all/PropFlagsTest.cpp b/testsuite/libcore.all/PropFlagsTest.cpp
index bf1acf4..1b62349 100644
--- a/testsuite/libcore.all/PropFlagsTest.cpp
+++ b/testsuite/libcore.all/PropFlagsTest.cpp
@@ -99,5 +99,6 @@ main(int /*argc*/, char** /*argv*/)
     check(i3.get_visible(7));
     check(i3.get_visible(8));
     check(i3.get_visible(9));
+    return 0;
 }
 
diff --git a/testsuite/libcore.all/PropertyListTest.cpp b/testsuite/libcore.all/PropertyListTest.cpp
index 6ff9473..641dcf6 100644
--- a/testsuite/libcore.all/PropertyListTest.cpp
+++ b/testsuite/libcore.all/PropertyListTest.cpp
@@ -55,8 +55,9 @@ getVal(PropertyList& p, const ObjectURI& k, as_value& val, as_object& obj)
     return false;
 }
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	cout << "sizeof(Property): " << sizeof(Property) << endl;
 	cout << "sizeof(PropertyList): " << sizeof(PropertyList) << endl;
@@ -68,7 +69,7 @@ main(int /*argc*/, char** /*argv*/)
     RunResources runResources;
     const URL url("");
     runResources.setStreamProvider(
-            boost::shared_ptr<StreamProvider>(new StreamProvider(url, url)));
+            std::shared_ptr<StreamProvider>(new StreamProvider(url, url)));
 	
     boost::intrusive_ptr<movie_definition> md5(
             new DummyMovieDefinition(runResources, 5));
@@ -202,5 +203,6 @@ main(int /*argc*/, char** /*argv*/)
 		check_equals(props.size(), 3);
 
 	}
+	return 0;
 }
 
diff --git a/testsuite/libcore.all/SafeStackTest.cpp b/testsuite/libcore.all/SafeStackTest.cpp
index 9524949..9af81fb 100644
--- a/testsuite/libcore.all/SafeStackTest.cpp
+++ b/testsuite/libcore.all/SafeStackTest.cpp
@@ -37,8 +37,9 @@ using namespace gnash;
 using std::cout;
 using std::endl;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	SafeStack<int> st;
 
@@ -120,5 +121,6 @@ main(int /*argc*/, char** /*argv*/)
 	st.push(100);
 	check_equals(st.value(0), 100);
 	check_equals(st.top(0), 100);
+	return 0;
 }
 
diff --git a/testsuite/libcore.all/StreamTest.cpp b/testsuite/libcore.all/StreamTest.cpp
index 1dd818f..d58cc5d 100644
--- a/testsuite/libcore.all/StreamTest.cpp
+++ b/testsuite/libcore.all/StreamTest.cpp
@@ -28,8 +28,6 @@
 #include "check.h"
 #endif
 
-#include <boost/thread/mutex.hpp>
-
 #include "IOChannel.h"
 #include "SWFStream.h"
 #include "log.h"
@@ -106,8 +104,9 @@ struct ByteReader : public IOChannel
 	
 };
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	dbglogfile.setVerbosity(1);
@@ -386,13 +385,13 @@ main(int /*argc*/, char** /*argv*/)
 
 	/// bits: 10011001 10011001 (0x999999)
 
-	boost::int16_t s16 = s.read_s16(); check_equals(s16, (boost::int16_t)0x9999);
+	std::int16_t s16 = s.read_s16(); check_equals(s16, (std::int16_t)0x9999);
 	check_equals(s.tell(), 30);
-	boost::uint16_t u16 = s.read_u16(); check_equals(u16, (boost::uint16_t)0x9999);
+	std::uint16_t u16 = s.read_u16(); check_equals(u16, (std::uint16_t)0x9999);
 	check_equals(s.tell(), 32);
-	boost::int32_t s32 = s.read_s32(); check_equals(s32, (boost::int32_t)0x99999999);
+	std::int32_t s32 = s.read_s32(); check_equals(s32, (std::int32_t)0x99999999);
 	check_equals(s.tell(), 36);
-	boost::uint32_t u32 = s.read_u32(); check_equals(u32, (boost::uint32_t)0x99999999);
+	std::uint32_t u32 = s.read_u32(); check_equals(u32, (std::uint32_t)0x99999999);
 	check_equals(s.tell(), 40);
 
 	/// bits: 10011001 10011001 10011001 10011001 (0x99999999)
diff --git a/testsuite/libdevice.all/test_dfb.cpp b/testsuite/libdevice.all/test_dfb.cpp
index 41be446..339cf43 100644
--- a/testsuite/libdevice.all/test_dfb.cpp
+++ b/testsuite/libdevice.all/test_dfb.cpp
@@ -139,6 +139,7 @@ main(int argc, char *argv[])
     std::cerr << "----------------------" << std::endl;
 #endif
 
+    return 0;
 }
 
 // Local Variables:
diff --git a/testsuite/libdevice.all/test_egl.cpp b/testsuite/libdevice.all/test_egl.cpp
index cf25a07..d0df635 100644
--- a/testsuite/libdevice.all/test_egl.cpp
+++ b/testsuite/libdevice.all/test_egl.cpp
@@ -91,6 +91,7 @@ main(int argc, char *argv[])
 #endif
     
 #endif
+    return 0;
 }
 
 void
diff --git a/testsuite/libdevice.all/test_events.cpp b/testsuite/libdevice.all/test_events.cpp
index b23ae7b..8fa350a 100644
--- a/testsuite/libdevice.all/test_events.cpp
+++ b/testsuite/libdevice.all/test_events.cpp
@@ -67,7 +67,7 @@ main(int argc, char *argv[])
     sigaction (SIGALRM, &act, NULL);
 
     bool loop = false;
-    std::vector<boost::shared_ptr<InputDevice> > inputs
+    std::vector<std::shared_ptr<InputDevice> > inputs
         = InputDevice::scanForDevices();
     cerr << "Found " << inputs.size() << " input devices" << endl;
     if (inputs.empty()) {
@@ -77,11 +77,11 @@ main(int argc, char *argv[])
         loop = true;
     }    
     
-    std::vector<boost::shared_ptr<InputDevice> >::iterator it;
+    std::vector<std::shared_ptr<InputDevice> >::iterator it;
     
     // check input devices
     for (it = inputs.begin(); it != inputs.end(); ++it) {
-        boost::shared_ptr<InputDevice> id = *it;
+        std::shared_ptr<InputDevice> id = *it;
         cerr << "Found " << id->id() << " device" << endl;
         if (id->init()) {
             runtest.pass("InputDevice::init()");
@@ -96,20 +96,20 @@ main(int argc, char *argv[])
     
     // This loops endlessly at the frame rate
     while (loop) {  
-        std::vector<boost::shared_ptr<InputDevice> >::iterator it;
+        std::vector<std::shared_ptr<InputDevice> >::iterator it;
         // // check input devices
         for (it = inputs.begin(); it != inputs.end(); ++it) {
-            boost::shared_ptr<InputDevice> id = *it;
+            std::shared_ptr<InputDevice> id = *it;
             if (id->check()) {
                 // FIXME: process the input data
-                boost::shared_ptr<InputDevice::input_data_t> ie = id->popData();
+                std::shared_ptr<InputDevice::input_data_t> ie = id->popData();
 #if 0
                 if (ie) {
                     cerr << "Got data: " << ie->pressed;
                     cerr << ", " << ie->key << ", " << ie->modifier;
                     cerr << ", " << ie->x << ", " << ie->y << endl;
                     // Range check and convert the position
-                    boost::shared_array<int> coords =
+                    std::unique_ptr<int[]> coords =
                         MouseDevice::convertCoordinates(ie->x, ie->y, 1024, 768);
                     cerr << "X = " << coords[0] << endl;
                     cerr << "Y = " << coords[1] << endl;
@@ -126,6 +126,7 @@ main(int argc, char *argv[])
     }
     
     std::cerr << std::endl;
+    return 0;
 }
 
 // Local Variables:
diff --git a/testsuite/libdevice.all/test_rawfb.cpp b/testsuite/libdevice.all/test_rawfb.cpp
index 93d4614..cfff6e4 100644
--- a/testsuite/libdevice.all/test_rawfb.cpp
+++ b/testsuite/libdevice.all/test_rawfb.cpp
@@ -163,7 +163,7 @@ main(int argc, char *argv[])
     long location = 0;
     int line_length = rfb.getStride();
 
-    boost::uint8_t *fbp = 0;
+    std::uint8_t *fbp = 0;
     fbp = rfb.getFBMemory();
 
     if (fbp > 0) {
@@ -184,6 +184,7 @@ main(int argc, char *argv[])
         *(fbp + location + 2) = 200; /* A lot of red */
         *(fbp + location + 3) = 0; /* No transparency */
     }
+    return 0;
 }
 
 // Local Variables:
diff --git a/testsuite/libdevice.all/test_vaapi.cpp b/testsuite/libdevice.all/test_vaapi.cpp
index 290ac54..2544b2f 100644
--- a/testsuite/libdevice.all/test_vaapi.cpp
+++ b/testsuite/libdevice.all/test_vaapi.cpp
@@ -121,6 +121,7 @@ main(int argc, char *argv[])
         runtest.fail("VaapiDevice::getDepth()");
     }    
     
+    return 0;    
 }
 
 // Local Variables:
diff --git a/testsuite/libdevice.all/test_x11.cpp b/testsuite/libdevice.all/test_x11.cpp
index 1adaadd..2fb9322 100644
--- a/testsuite/libdevice.all/test_x11.cpp
+++ b/testsuite/libdevice.all/test_x11.cpp
@@ -119,6 +119,7 @@ main(int argc, char *argv[])
         runtest.fail("X11Device::getBlueSize()");
     }    
 #endif
+    return 0;    
 }
 
 // Local Variables:
diff --git a/testsuite/libmedia.all/Makefile.am b/testsuite/libmedia.all/Makefile.am
index b651342..ea2bf0d 100644
--- a/testsuite/libmedia.all/Makefile.am
+++ b/testsuite/libmedia.all/Makefile.am
@@ -21,8 +21,6 @@
 
 AUTOMAKE_OPTIONS = dejagnu
 
-AM_CPPFLAGS = # -Wall
-
 AM_LDFLAGS = \
 	$(top_builddir)/libbase/libgnashbase.la \
 	$(top_builddir)/libmedia/libgnashmedia.la \
@@ -39,7 +37,7 @@ endif	# ANDROID
 
 localedir = $(datadir)/locale
 
-INCLUDES = \
+AM_CPPFLAGS = \
 	-I$(top_srcdir)/testsuite \
 	-I$(top_srcdir)/libbase \
 	-I$(top_srcdir)/libmedia \
diff --git a/testsuite/misc-haxe.all/classes.all/media/media.am b/testsuite/misc-haxe.all/classes.all/media/media.am
index 322f86e..9e5558c 100644
--- a/testsuite/misc-haxe.all/classes.all/media/media.am
+++ b/testsuite/misc-haxe.all/classes.all/media/media.am
@@ -37,7 +37,9 @@ MEDIA_TESTS_V9 += media/SoundMixer_as.swf
 
 MEDIA_TESTS_V9 += media/SoundTransform_as.swf
 
+if BUILD_LIBSOUND
 MEDIA_TESTS_V6 += media/Sound_as.swf
+endif
 
 MEDIA_TESTS_V6 += media/Video_as.swf
 
@@ -51,5 +53,8 @@ EXTRA_DIST += media/Camera_as.hx \
 	media/SoundLoaderContext_as.hx \
 	media/SoundMixer_as.hx \
 	media/SoundTransform_as.hx \
-	media/Sound_as.hx \
 	media/Video_as.hx
+
+if BUILD_LIBSOUND
+EXTRA_DIST += media/Sound_as.hx
+endif
diff --git a/testsuite/misc-haxe.all/classes.all/net/net.am b/testsuite/misc-haxe.all/classes.all/net/net.am
index bc10622..e0f8b42 100644
--- a/testsuite/misc-haxe.all/classes.all/net/net.am
+++ b/testsuite/misc-haxe.all/classes.all/net/net.am
@@ -35,7 +35,9 @@ NET_TESTS_V9 += net/IDynamicPropertyOutput_as.swf
 
 NET_TESTS_V9 += net/IDynamicPropertyWriter_as.swf
 
+if HAVE_SEMGET
 NET_TESTS_V6 += net/LocalConnection_as.swf
+endif
 
 NET_TESTS_V7 += net/NetConnection_as.swf
 
diff --git a/testsuite/misc-ming.all/BeginBitmapFillRunner.cpp b/testsuite/misc-ming.all/BeginBitmapFillRunner.cpp
index 12f13a8..7890e17 100644
--- a/testsuite/misc-ming.all/BeginBitmapFillRunner.cpp
+++ b/testsuite/misc-ming.all/BeginBitmapFillRunner.cpp
@@ -34,8 +34,9 @@ using namespace gnash;
 using namespace gnash::geometry;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
     string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
     MovieTester tester(filename);
@@ -167,5 +168,6 @@ main(int /*argc*/, char** /*argv*/)
     check_pixel(500, 460, 1, white, 2);
     check_pixel(460, 500, 1, white, 2);
 
+    return 0;
 }
 
diff --git a/testsuite/misc-ming.all/BitmapDataTestRunner.cpp b/testsuite/misc-ming.all/BitmapDataTestRunner.cpp
index 5c6cb5e..8ecfa6a 100644
--- a/testsuite/misc-ming.all/BitmapDataTestRunner.cpp
+++ b/testsuite/misc-ming.all/BitmapDataTestRunner.cpp
@@ -34,8 +34,9 @@ using namespace gnash;
 using namespace gnash::geometry;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
     string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
     MovieTester tester(filename);
@@ -195,5 +196,6 @@ main(int /*argc*/, char** /*argv*/)
     tester.click();
     tester.advance();
 
+    return 0;
 }
 
diff --git a/testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp b/testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp
index d489847..70b41fa 100644
--- a/testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp
+++ b/testsuite/misc-ming.all/ButtonEventsTest-Runner.cpp
@@ -225,8 +225,9 @@ test_mouse_activity(MovieTester& tester, const TextField* text, const TextField*
 	}
 }
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	//string filename = INPUT_FILENAME;
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
@@ -323,5 +324,6 @@ main(int /*argc*/, char** /*argv*/)
         check_equals(root->getPlayState(), MovieClip::PLAYSTATE_STOP);
 	check_equals(root->get_current_frame(), 6);
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/ButtonPropertiesTestRunner.cpp b/testsuite/misc-ming.all/ButtonPropertiesTestRunner.cpp
index 3ce61fe..8fc48b0 100644
--- a/testsuite/misc-ming.all/ButtonPropertiesTestRunner.cpp
+++ b/testsuite/misc-ming.all/ButtonPropertiesTestRunner.cpp
@@ -35,8 +35,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -63,5 +64,6 @@ main(int /*argc*/, char** /*argv*/)
     tester.click();
     tester.click();
     tester.click();
+    return 0;
 }
 
diff --git a/testsuite/misc-ming.all/DefineEditTextTest-Runner.cpp b/testsuite/misc-ming.all/DefineEditTextTest-Runner.cpp
index bc96461..614b3eb 100644
--- a/testsuite/misc-ming.all/DefineEditTextTest-Runner.cpp
+++ b/testsuite/misc-ming.all/DefineEditTextTest-Runner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -54,5 +55,6 @@ main(int /*argc*/, char** /*argv*/)
 		tester.advance();
 
 	// TODO: use check_pixel for checking bacground colors
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/DefineEditTextVariableNameTest-Runner.cpp b/testsuite/misc-ming.all/DefineEditTextVariableNameTest-Runner.cpp
index 7cb915c..b76862a 100644
--- a/testsuite/misc-ming.all/DefineEditTextVariableNameTest-Runner.cpp
+++ b/testsuite/misc-ming.all/DefineEditTextVariableNameTest-Runner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = INPUT_FILENAME;
 	MovieTester tester(filename);
@@ -68,5 +69,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_equals(root->getPlayState(), MovieClip::PLAYSTATE_STOP);
 	check_equals(root->get_current_frame(), root->get_frame_count()-1);
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/DefineTextTest-Runner.cpp b/testsuite/misc-ming.all/DefineTextTest-Runner.cpp
index 17a0452..0793095 100644
--- a/testsuite/misc-ming.all/DefineTextTest-Runner.cpp
+++ b/testsuite/misc-ming.all/DefineTextTest-Runner.cpp
@@ -36,8 +36,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -122,5 +123,7 @@ main(int /*argc*/, char** /*argv*/)
 	check(eot.to_bool(8));
 
 	// TODO: use check_pixel for checking bacground colors
+
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/DragDropTestRunner.cpp b/testsuite/misc-ming.all/DragDropTestRunner.cpp
index 2cee7a6..f6140b5 100644
--- a/testsuite/misc-ming.all/DragDropTestRunner.cpp
+++ b/testsuite/misc-ming.all/DragDropTestRunner.cpp
@@ -41,8 +41,9 @@ using namespace gnash;
 using namespace gnash::geometry;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
diff --git a/testsuite/misc-ming.all/DrawingApiTestRunner.cpp b/testsuite/misc-ming.all/DrawingApiTestRunner.cpp
index d5254f9..d4b9554 100644
--- a/testsuite/misc-ming.all/DrawingApiTestRunner.cpp
+++ b/testsuite/misc-ming.all/DrawingApiTestRunner.cpp
@@ -68,8 +68,9 @@ inscribedRect(int x, int y, int radius)
 	return ret;
 }
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
     std::string filename = 
         std::string(TGTDIR) + "/" + std::string(INPUT_FILENAME);
@@ -1052,5 +1053,6 @@ main(int /*argc*/, char** /*argv*/)
 	//
 
 
+    return 0;
 }
 
diff --git a/testsuite/misc-ming.all/KeyEventOrderRunner.cpp b/testsuite/misc-ming.all/KeyEventOrderRunner.cpp
index 8b791d0..db8e76f 100644
--- a/testsuite/misc-ming.all/KeyEventOrderRunner.cpp
+++ b/testsuite/misc-ming.all/KeyEventOrderRunner.cpp
@@ -35,8 +35,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
   string filename =  string(INPUT_FILENAME);
   MovieTester tester(filename);
@@ -78,4 +79,5 @@ main(int /*argc*/, char** /*argv*/)
   tester.advance();
   check_equals(root->get_current_frame(), 5);
   
+  return 0;
 }
diff --git a/testsuite/misc-ming.all/Makefile.am b/testsuite/misc-ming.all/Makefile.am
index e9db815..dd7e72e 100644
--- a/testsuite/misc-ming.all/Makefile.am
+++ b/testsuite/misc-ming.all/Makefile.am
@@ -32,7 +32,11 @@ CLEANFILES =  \
 DISTCLEANFILES = XMLSocketTester
 
 SUBDIRS = . loop loading displaylist_depths action_order register_class \
-          init_action sound
+          init_action
+
+if BUILD_LIBSOUND
+SUBDIRS += sound
+endif
 
 EXTRA_DIST = \
 	DragDropTest.as \
@@ -82,6 +86,7 @@ AM_CPPFLAGS = \
 	$(MING_CFLAGS) \
 	$(OPENGL_CFLAGS) \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	-DMING_VERSION_CODE=$(MING_VERSION_CODE) \
 	$(NULL)
 
@@ -220,7 +225,6 @@ check_SCRIPTS = \
 	EmbeddedFontTestRunner \
 	TextSnapshotTest-Runner \
 	XMLSocketTester \
-	LCTestRunner \
 	timeline_var_test-Runner \
 	place_object_testrunner \
 	place_object_test2runner \
@@ -296,6 +300,9 @@ check_PROGRAMS += \
 	$(NULL)
 endif
 
+if HAVE_SEMGET
+check_SCRIPTS += LCTestRunner
+endif
 
 # This is so check.as finds revno.h
 MAKESWF_FLAGS = -I$(top_builddir)
@@ -1550,7 +1557,6 @@ TEST_CASES = \
 	consecutive_goto_frame_testrunner \
 	multi_doactions_and_goto_frame_testrunner \
 	XMLSocketTester \
-	LCTestRunner \
 	DrawingApiTestRunner \
 	TextSnapshotTest-Runner \
 	reverse_execute_PlaceObject2_test1runner \
@@ -1632,6 +1638,10 @@ TEST_CASES += \
 	$(NULL)
 endif
 
+if HAVE_SEMGET
+TEST_CASES += LCTestRunner
+endif
+
 TEST_ENV = GNASH_GC_TRIGGER_THRESHOLD=0
 TEST_ENV += GNASHRC=../gnashrc
 TEST_ENV += GST_INSTALL_PLUGINS_HELPER=$(top_srcdir)/testsuite/gst_install_plugins_helper.sh
diff --git a/testsuite/misc-ming.all/NetStream-SquareTestRunner.cpp b/testsuite/misc-ming.all/NetStream-SquareTestRunner.cpp
index 2c943ef..a222053 100644
--- a/testsuite/misc-ming.all/NetStream-SquareTestRunner.cpp
+++ b/testsuite/misc-ming.all/NetStream-SquareTestRunner.cpp
@@ -38,8 +38,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -101,5 +102,6 @@ main(int /*argc*/, char** /*argv*/)
 		&eot);
 	check(endOfTestFound);
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/PrototypeEventListenersTestRunner.cpp b/testsuite/misc-ming.all/PrototypeEventListenersTestRunner.cpp
index 1d9ebe1..0d53ff9 100644
--- a/testsuite/misc-ming.all/PrototypeEventListenersTestRunner.cpp
+++ b/testsuite/misc-ming.all/PrototypeEventListenersTestRunner.cpp
@@ -39,8 +39,9 @@ using namespace gnash;
 using namespace gnash::geometry;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
diff --git a/testsuite/misc-ming.all/ResolveEventsTest-Runner.cpp b/testsuite/misc-ming.all/ResolveEventsTest-Runner.cpp
index 5d57648..657ed72 100644
--- a/testsuite/misc-ming.all/ResolveEventsTest-Runner.cpp
+++ b/testsuite/misc-ming.all/ResolveEventsTest-Runner.cpp
@@ -35,8 +35,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	//string filename = INPUT_FILENAME;
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
@@ -79,5 +80,6 @@ main(int /*argc*/, char** /*argv*/)
     check_equals(root->getPlayState(), MovieClip::PLAYSTATE_STOP);
 	check_equals(root->get_current_frame(), 6);
 
+    return 0;
 }
 
diff --git a/testsuite/misc-ming.all/RollOverOutTest-Runner.cpp b/testsuite/misc-ming.all/RollOverOutTest-Runner.cpp
index 160f93e..6c42d4a 100644
--- a/testsuite/misc-ming.all/RollOverOutTest-Runner.cpp
+++ b/testsuite/misc-ming.all/RollOverOutTest-Runner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -98,6 +99,7 @@ main(int /*argc*/, char** /*argv*/)
 	tester.click();
 	//tester.advance(); // mouse event handler should drive the movie
 	check_equals(root->get_current_frame(), 3);
+	return 0;
 }
 
 
diff --git a/testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp b/testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp
index e641aca..d082acd 100644
--- a/testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp
+++ b/testsuite/misc-ming.all/SpriteButtonEventsTest-Runner.cpp
@@ -197,8 +197,9 @@ test_mouse_activity(MovieTester& tester, const TextField* text, const TextField*
 	}
 }
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	//string filename = INPUT_FILENAME;
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
@@ -288,5 +289,6 @@ main(int /*argc*/, char** /*argv*/)
     check_equals(root->getPlayState(), MovieClip::PLAYSTATE_STOP);
 	check_equals(root->get_current_frame(), 4);
 
+    return 0;
 }
 
diff --git a/testsuite/misc-ming.all/Video-EmbedSquareTestRunner.cpp b/testsuite/misc-ming.all/Video-EmbedSquareTestRunner.cpp
index 93a9c08..1a948a7 100644
--- a/testsuite/misc-ming.all/Video-EmbedSquareTestRunner.cpp
+++ b/testsuite/misc-ming.all/Video-EmbedSquareTestRunner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -135,5 +136,6 @@ main(int /*argc*/, char** /*argv*/)
 
 	}
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/attachMovieLoopingTestRunner.cpp b/testsuite/misc-ming.all/attachMovieLoopingTestRunner.cpp
index b051456..b4acf5c 100644
--- a/testsuite/misc-ming.all/attachMovieLoopingTestRunner.cpp
+++ b/testsuite/misc-ming.all/attachMovieLoopingTestRunner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -106,5 +107,6 @@ main(int /*argc*/, char** /*argv*/)
 
 	tester.movePointerTo(240, 5);
 	check(tester.isMouseOverMouseEntity());
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/attachMovieTestRunner.cpp b/testsuite/misc-ming.all/attachMovieTestRunner.cpp
index e11bb2d..d4356b9 100644
--- a/testsuite/misc-ming.all/attachMovieTestRunner.cpp
+++ b/testsuite/misc-ming.all/attachMovieTestRunner.cpp
@@ -35,8 +35,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -160,5 +161,6 @@ main(int /*argc*/, char** /*argv*/)
 	getObject(root)->get_member(mousedown, &tmp);
 	check_equals(toNumber(tmp, vm), 5);
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/intervalTestRunner.cpp b/testsuite/misc-ming.all/intervalTestRunner.cpp
index e4af995..5f7ed98 100644
--- a/testsuite/misc-ming.all/intervalTestRunner.cpp
+++ b/testsuite/misc-ming.all/intervalTestRunner.cpp
@@ -36,8 +36,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -139,5 +140,6 @@ main(int /*argc*/, char** /*argv*/)
 	getObject(root)->get_member(testCompleted, &tmp);
 	check_equals(toNumber(tmp, vm), 1);
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/key_event_testrunner.cpp b/testsuite/misc-ming.all/key_event_testrunner.cpp
index 0024d27..9860c4e 100644
--- a/testsuite/misc-ming.all/key_event_testrunner.cpp
+++ b/testsuite/misc-ming.all/key_event_testrunner.cpp
@@ -35,8 +35,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
   string filename =  string(INPUT_FILENAME);
   MovieTester tester(filename);
@@ -191,4 +192,5 @@ main(int /*argc*/, char** /*argv*/)
 
   // reached frame23, test finished
   check_equals(root->get_current_frame(), 23);
+  return 0;
 }
diff --git a/testsuite/misc-ming.all/loading/Makefile.am b/testsuite/misc-ming.all/loading/Makefile.am
index 2507622..cc9661d 100644
--- a/testsuite/misc-ming.all/loading/Makefile.am
+++ b/testsuite/misc-ming.all/loading/Makefile.am
@@ -48,6 +48,7 @@ AM_CPPFLAGS = \
 	$(MING_CFLAGS) \
 	$(OPENGL_CFLAGS) \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	-DMING_VERSION_CODE=$(MING_VERSION_CODE) \
 	$(NULL)
 
diff --git a/testsuite/misc-ming.all/loading/loadMovieTestRunner.cpp b/testsuite/misc-ming.all/loading/loadMovieTestRunner.cpp
index 25d5fdb..5e0494a 100644
--- a/testsuite/misc-ming.all/loading/loadMovieTestRunner.cpp
+++ b/testsuite/misc-ming.all/loading/loadMovieTestRunner.cpp
@@ -37,7 +37,7 @@
 using namespace gnash;
 using namespace std;
 
-std::auto_ptr<MovieTester> tester;
+std::unique_ptr<MovieTester> tester;
 MovieClip* root;
 
 MovieClip*
@@ -165,8 +165,9 @@ clickCycle(MovieClip* coverart)
 	tester->click(); tester->advance();
 }
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	dbglogfile.setVerbosity(1);
@@ -213,5 +214,6 @@ main(int /*argc*/, char** /*argv*/)
 		check_equals(eot.to_bool(8), true);
 	}
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/loop/Makefile.am b/testsuite/misc-ming.all/loop/Makefile.am
index 623611a..efb728f 100644
--- a/testsuite/misc-ming.all/loop/Makefile.am
+++ b/testsuite/misc-ming.all/loop/Makefile.am
@@ -47,6 +47,7 @@ AM_CPPFLAGS = \
 	$(MING_CFLAGS) \
 	$(OPENGL_CFLAGS) \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	-DMING_VERSION_CODE=$(MING_VERSION_CODE) \
 	$(NULL)
 
diff --git a/testsuite/misc-ming.all/loop/loop_test-Runner.cpp b/testsuite/misc-ming.all/loop/loop_test-Runner.cpp
index 29e4e0e..42f5d4e 100644
--- a/testsuite/misc-ming.all/loop/loop_test-Runner.cpp
+++ b/testsuite/misc-ming.all/loop/loop_test-Runner.cpp
@@ -38,11 +38,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
-	auto_ptr<MovieTester> t;
+	unique_ptr<MovieTester> t;
 
 	try
 	{
@@ -135,5 +136,6 @@ main(int /*argc*/, char** /*argv*/)
 
 	}
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/loop/loop_test2runner.cpp b/testsuite/misc-ming.all/loop/loop_test2runner.cpp
index bb16499..0b30b4a 100644
--- a/testsuite/misc-ming.all/loop/loop_test2runner.cpp
+++ b/testsuite/misc-ming.all/loop/loop_test2runner.cpp
@@ -34,8 +34,9 @@ using namespace gnash;
 using namespace std;
 using namespace gnash::geometry;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	typedef gnash::geometry::SnappingRanges2d<int> Ranges;
 	typedef gnash::geometry::Range2d<int> Bounds;
@@ -134,5 +135,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_pixel(x_int, y, 2, red, 2);  // black is *behind* red square
 	check_pixel(x_black, y, 2, black, 2);  
 	check_pixel(x_right, y, 2, white, 2);  
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/loop/simple_loop_testrunner.cpp b/testsuite/misc-ming.all/loop/simple_loop_testrunner.cpp
index eee50d3..0b43131 100644
--- a/testsuite/misc-ming.all/loop/simple_loop_testrunner.cpp
+++ b/testsuite/misc-ming.all/loop/simple_loop_testrunner.cpp
@@ -38,8 +38,9 @@ using namespace std;
 
 void testAll(MovieTester& tester);
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -51,6 +52,7 @@ main(int /*argc*/, char** /*argv*/)
 	tester.restart();
 	testAll(tester);
 
+	return 0;
 }
 
 
diff --git a/testsuite/misc-ming.all/masks_test2runner.cpp b/testsuite/misc-ming.all/masks_test2runner.cpp
index 028e442..98ab777 100644
--- a/testsuite/misc-ming.all/masks_test2runner.cpp
+++ b/testsuite/misc-ming.all/masks_test2runner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
   //string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
   string filename = string(INPUT_FILENAME);
@@ -72,4 +73,5 @@ main(int /*argc*/, char** /*argv*/)
   tester.advance(); 
   check_pixel(105, 105, 210, red, 2); 
   check_pixel(220, 220, 10, white, 2); 
+  return 0;
 }
diff --git a/testsuite/misc-ming.all/masks_testrunner.cpp b/testsuite/misc-ming.all/masks_testrunner.cpp
index bd8751d..ccd647d 100644
--- a/testsuite/misc-ming.all/masks_testrunner.cpp
+++ b/testsuite/misc-ming.all/masks_testrunner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	typedef gnash::geometry::SnappingRanges2d<int> Ranges;
 	typedef gnash::geometry::Range2d<int> Bounds;
@@ -381,5 +382,6 @@ main(int /*argc*/, char** /*argv*/)
 	check( invalidated.contains(248, 331) );
 	check_pixel(248,331, 2, dark_green, 2);
 	check( tester.isMouseOverMouseEntity() ) // mask still sensible to mouse
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/morph_test1runner.cpp b/testsuite/misc-ming.all/morph_test1runner.cpp
index b7b265e..4c8185c 100644
--- a/testsuite/misc-ming.all/morph_test1runner.cpp
+++ b/testsuite/misc-ming.all/morph_test1runner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
   //string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
   string filename = string(INPUT_FILENAME);
@@ -83,5 +84,10 @@ main(int /*argc*/, char** /*argv*/)
   tester.advance(); 
   // fill color: 0.0*red + 1.0*green
   check_pixel(750, 550, 50, rgba(0,255,0,255), 2); // morph ratio = 1.0
+
+  // Frame 8
+  tester.advance();
+  // #39989. Nothing to check: empty morph shape.
+  return 0;
 }
 
diff --git a/testsuite/misc-ming.all/register_class/Makefile.am b/testsuite/misc-ming.all/register_class/Makefile.am
index 2de6d1a..689fd34 100644
--- a/testsuite/misc-ming.all/register_class/Makefile.am
+++ b/testsuite/misc-ming.all/register_class/Makefile.am
@@ -46,6 +46,7 @@ AM_CPPFLAGS = \
 	$(MING_CFLAGS) \
 	$(OPENGL_CFLAGS) \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	-DMING_VERSION_CODE=$(MING_VERSION_CODE) \
 	$(NULL)
 
diff --git a/testsuite/misc-ming.all/register_class/registerClassTestRunner.cpp b/testsuite/misc-ming.all/register_class/registerClassTestRunner.cpp
index a964af5..8687f7d 100644
--- a/testsuite/misc-ming.all/register_class/registerClassTestRunner.cpp
+++ b/testsuite/misc-ming.all/register_class/registerClassTestRunner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -109,5 +110,6 @@ main(int /*argc*/, char** /*argv*/)
 
 	tester.advance();
 	check_equals(root->get_current_frame(), 5); // we should be in stop mode
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/replace_buttons1test_runner.cpp b/testsuite/misc-ming.all/replace_buttons1test_runner.cpp
index 0a852bf..3da3a57 100644
--- a/testsuite/misc-ming.all/replace_buttons1test_runner.cpp
+++ b/testsuite/misc-ming.all/replace_buttons1test_runner.cpp
@@ -35,8 +35,9 @@ using namespace gnash;
 using namespace std;
 using namespace gnash::geometry;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	typedef gnash::geometry::SnappingRanges2d<int> Ranges;
 	typedef gnash::geometry::Range2d<int> Bounds;
@@ -144,5 +145,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_pixel(130, 296, 2, white, 2); // Top
 	check_pixel(130, 364, 2, white, 2); // Bottom
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/replace_shapes1test_runner.cpp b/testsuite/misc-ming.all/replace_shapes1test_runner.cpp
index 11207da..fce1f36 100644
--- a/testsuite/misc-ming.all/replace_shapes1test_runner.cpp
+++ b/testsuite/misc-ming.all/replace_shapes1test_runner.cpp
@@ -35,8 +35,9 @@ using namespace gnash;
 using namespace std;
 using namespace gnash::geometry;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	typedef gnash::geometry::SnappingRanges2d<int> Ranges;
 	typedef gnash::geometry::Range2d<int> Bounds;
@@ -143,5 +144,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_pixel(130, 296, 2, white, 2); // Top
 	check_pixel(130, 364, 2, white, 2); // Bottom
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/replace_sprites1test_runner.cpp b/testsuite/misc-ming.all/replace_sprites1test_runner.cpp
index 1799b35..73c9f2f 100644
--- a/testsuite/misc-ming.all/replace_sprites1test_runner.cpp
+++ b/testsuite/misc-ming.all/replace_sprites1test_runner.cpp
@@ -35,8 +35,9 @@ using namespace gnash;
 using namespace std;
 using namespace gnash::geometry;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	typedef gnash::geometry::SnappingRanges2d<int> Ranges;
 	typedef gnash::geometry::Range2d<int> Bounds;
@@ -150,5 +151,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_pixel(130, 296, 2, white, 2); // Top
 	check_pixel(130, 364, 2, white, 2); // Bottom
 
+	return 0;
 }
 
diff --git a/testsuite/misc-ming.all/root_stop_testrunner.cpp b/testsuite/misc-ming.all/root_stop_testrunner.cpp
index c7dcb55..c9248b4 100644
--- a/testsuite/misc-ming.all/root_stop_testrunner.cpp
+++ b/testsuite/misc-ming.all/root_stop_testrunner.cpp
@@ -36,8 +36,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
diff --git a/testsuite/misc-ming.all/sound/EmbeddedSoundTest-Runner.cpp b/testsuite/misc-ming.all/sound/EmbeddedSoundTest-Runner.cpp
index b31d731..614ec7f 100644
--- a/testsuite/misc-ming.all/sound/EmbeddedSoundTest-Runner.cpp
+++ b/testsuite/misc-ming.all/sound/EmbeddedSoundTest-Runner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -62,6 +63,6 @@ main(int /*argc*/, char** /*argv*/)
     }
     as_value eot;
     xcheck(getObject(root)->get_member(getURI(vm, "finished"), &eot));
-
+    return 0;
 }
 
diff --git a/testsuite/misc-ming.all/sound/Makefile.am b/testsuite/misc-ming.all/sound/Makefile.am
index 9e1bc61..10a09b5 100644
--- a/testsuite/misc-ming.all/sound/Makefile.am
+++ b/testsuite/misc-ming.all/sound/Makefile.am
@@ -47,6 +47,7 @@ AM_CPPFLAGS = \
 	$(MING_CFLAGS) \
 	$(OPENGL_CFLAGS) \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	-DMING_VERSION_CODE=$(MING_VERSION_CODE) \
 	$(NULL)
 
diff --git a/testsuite/misc-ming.all/sound/StreamSoundTestRunner.cpp b/testsuite/misc-ming.all/sound/StreamSoundTestRunner.cpp
index 3a8c08d..5ad036b 100644
--- a/testsuite/misc-ming.all/sound/StreamSoundTestRunner.cpp
+++ b/testsuite/misc-ming.all/sound/StreamSoundTestRunner.cpp
@@ -34,8 +34,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -66,6 +67,6 @@ main(int /*argc*/, char** /*argv*/)
         tester.advance();
         check_equals(tester.streamingSound(), true);
     }
-
+    return 0;
 }
 
diff --git a/testsuite/misc-ming.all/sound/eventSoundTest1-Runner.cpp b/testsuite/misc-ming.all/sound/eventSoundTest1-Runner.cpp
index 3f69e96..a484553 100644
--- a/testsuite/misc-ming.all/sound/eventSoundTest1-Runner.cpp
+++ b/testsuite/misc-ming.all/sound/eventSoundTest1-Runner.cpp
@@ -38,11 +38,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
-	auto_ptr<MovieTester> t;
+	unique_ptr<MovieTester> t;
 
 	try
 	{
@@ -132,5 +133,6 @@ main(int /*argc*/, char** /*argv*/)
         getObject(root)->get_member(getURI(vm, "endoftest"), &eot);
     check(endOfTestFound);
 
+    return EXIT_SUCCESS;
 }
 
diff --git a/testsuite/misc-ming.all/sound/streamingSoundTest1-Runner.cpp b/testsuite/misc-ming.all/sound/streamingSoundTest1-Runner.cpp
index c92531e..4dd1639 100644
--- a/testsuite/misc-ming.all/sound/streamingSoundTest1-Runner.cpp
+++ b/testsuite/misc-ming.all/sound/streamingSoundTest1-Runner.cpp
@@ -38,8 +38,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
     string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 
@@ -87,5 +88,6 @@ main(int /*argc*/, char** /*argv*/)
         check_equals(tester.soundsStopped(), 1);
     }
 
+    return EXIT_SUCCESS;
 }
 
diff --git a/testsuite/misc-ming.all/sound/streamingSoundTest2-Runner.cpp b/testsuite/misc-ming.all/sound/streamingSoundTest2-Runner.cpp
index d14062a..2bd498d 100644
--- a/testsuite/misc-ming.all/sound/streamingSoundTest2-Runner.cpp
+++ b/testsuite/misc-ming.all/sound/streamingSoundTest2-Runner.cpp
@@ -38,8 +38,9 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
     string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
 
@@ -74,5 +75,6 @@ main(int /*argc*/, char** /*argv*/)
         check_equals(tester.streamingSound(), true);
     }
 
+    return EXIT_SUCCESS;
 }
 
diff --git a/testsuite/misc-swfc.all/Makefile.am b/testsuite/misc-swfc.all/Makefile.am
index ba3a0c3..df8e76d 100644
--- a/testsuite/misc-swfc.all/Makefile.am
+++ b/testsuite/misc-swfc.all/Makefile.am
@@ -22,7 +22,6 @@ AUTOMAKE_OPTIONS = dejagnu
 # These will get executed and parsed for test output
 SANE_SCTESTS = \
 	hello.sc \
-	sound.sc \
 	soft_reference_test1.sc \
 	movieclip_destruction_test1.sc \
 	movieclip_destruction_test2.sc \
@@ -42,6 +41,10 @@ SANE_SCTESTS = \
 	stackscope.sc \
 	$(NULL)
 
+if BUILD_LIBSOUND
+SANE_SCTESTS += sound.sc
+endif
+
 # These ones are the ones for which consistency check fail 
 BOGO_SCTESTS = \
 	$(NULL)
@@ -50,9 +53,12 @@ BOGO_SCTESTS = \
 INTERACTIVE_SCTESTS = \
 	button_test1.sc \
 	button_test2.sc  \
-	sound_stop.sc  \
 	$(NULL)
 
+if BUILD_LIBSOUND
+INTERACTIVE_SCTESTS += sound_stop.sc
+endif
+
 AM_CPPFLAGS = -I.. \
         -I$(top_srcdir)		\
         -I$(top_srcdir)/libbase \
@@ -66,6 +72,7 @@ AM_CPPFLAGS = -I.. \
         -I$(top_srcdir)/libcore/parser  \
         -I$(top_srcdir)/testsuite \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	$(NULL)
 
 GNASH_LIBS = \
@@ -81,10 +88,11 @@ AUXMOVIES = \
 
 EXTRA_DIST = $(SANE_SCTESTS) $(BOGO_SCTESTS) $(AUXMOVIES) $(INTERACTIVE_SCTESTS) check.sc Dejagnu.sc hello.sc
 
-check_PROGRAMS = \
-	button_test1runner \
-	sound_stop_runner \
-	$(NULL)
+check_PROGRAMS = button_test1runner
+
+if BUILD_LIBSOUND
+check_PROGRAMS += sound_stop_runner
+endif
 
 abs_mediadir = $(abs_top_srcdir)/testsuite/media 
 
diff --git a/testsuite/misc-swfc.all/button_test1runner.cpp b/testsuite/misc-swfc.all/button_test1runner.cpp
index 4e28765..301a0b8 100644
--- a/testsuite/misc-swfc.all/button_test1runner.cpp
+++ b/testsuite/misc-swfc.all/button_test1runner.cpp
@@ -38,11 +38,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(BUILDDIR) + string("/") + string(INPUT_FILENAME);
-	auto_ptr<MovieTester> t;
+	unique_ptr<MovieTester> t;
 
 	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	dbglogfile.setVerbosity(1);
@@ -161,5 +162,6 @@ main(int /*argc*/, char** /*argv*/)
         
 	//cerr << "EOT is " << eot.to_debug_string() << endl;
 	check(eot.to_bool(8));
+	return 0;
 }
 
diff --git a/testsuite/misc-swfc.all/sound_stop_runner.cpp b/testsuite/misc-swfc.all/sound_stop_runner.cpp
index a23a271..aa896db 100644
--- a/testsuite/misc-swfc.all/sound_stop_runner.cpp
+++ b/testsuite/misc-swfc.all/sound_stop_runner.cpp
@@ -32,11 +32,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
     string filename = string(BUILDDIR) + string("/") + string(INPUT_FILENAME);
-    auto_ptr<MovieTester> t;
+    unique_ptr<MovieTester> t;
 
     gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
     dbglogfile.setVerbosity(2);
@@ -62,5 +63,6 @@ main(int /*argc*/, char** /*argv*/)
     check_equals(tester.soundsStarted(), 3);
     check_equals(tester.soundsStopped(), 3);
 
+    return 0;
 }
 
diff --git a/testsuite/misc-swfmill.all/Makefile.am b/testsuite/misc-swfmill.all/Makefile.am
index ca59e2e..ff20be9 100644
--- a/testsuite/misc-swfmill.all/Makefile.am
+++ b/testsuite/misc-swfmill.all/Makefile.am
@@ -83,6 +83,7 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/libcore/asobj \
 	-I$(top_srcdir)/testsuite \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	$(NULL)
 
 AM_LDFLAGS = \
diff --git a/testsuite/misc-swfmill.all/backgroundTestRunner.cpp b/testsuite/misc-swfmill.all/backgroundTestRunner.cpp
index 9b75ba6..662c5e1 100644
--- a/testsuite/misc-swfmill.all/backgroundTestRunner.cpp
+++ b/testsuite/misc-swfmill.all/backgroundTestRunner.cpp
@@ -35,11 +35,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
-	auto_ptr<MovieTester> t;
+	unique_ptr<MovieTester> t;
 
 	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	dbglogfile.setVerbosity(1);
@@ -85,5 +86,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_pixel(600, 400, 50, red, tol);
 	check_pixel(600, 60, 50, red, tol);
 	check_pixel(320, 240, 50, red, tol);
+	return 0;
 }
 
diff --git a/testsuite/misc-swfmill.all/missing_bitmapTestRunner.cpp b/testsuite/misc-swfmill.all/missing_bitmapTestRunner.cpp
index eb5807b..fc4fe20 100644
--- a/testsuite/misc-swfmill.all/missing_bitmapTestRunner.cpp
+++ b/testsuite/misc-swfmill.all/missing_bitmapTestRunner.cpp
@@ -35,11 +35,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(TGTDIR) + string("/") + string(INPUT_FILENAME);
-	auto_ptr<MovieTester> t;
+	unique_ptr<MovieTester> t;
 
 	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	dbglogfile.setVerbosity(1);
@@ -70,5 +71,6 @@ main(int /*argc*/, char** /*argv*/)
 
 	tester.advance();
 
+	return 0;
 }
 
diff --git a/testsuite/movies.all/Makefile.am b/testsuite/movies.all/Makefile.am
index 4968a72..046706b 100644
--- a/testsuite/movies.all/Makefile.am
+++ b/testsuite/movies.all/Makefile.am
@@ -46,6 +46,7 @@ AM_CPPFLAGS = \
 	-I$(top_srcdir)/libcore/asobj \
         -I$(top_srcdir)/testsuite \
 	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
 	$(OPENGL_CFLAGS) \
 	$(NULL)
 
diff --git a/testsuite/movies.all/gravity_embedded-TestRunner.cpp b/testsuite/movies.all/gravity_embedded-TestRunner.cpp
index ec864c9..11ba038 100644
--- a/testsuite/movies.all/gravity_embedded-TestRunner.cpp
+++ b/testsuite/movies.all/gravity_embedded-TestRunner.cpp
@@ -39,8 +39,9 @@ using namespace gnash;
 using std::string;
 using ::round;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(SRCDIR) + string("/") + string(INPUT_FILENAME);
 	MovieTester tester(filename);
@@ -153,5 +154,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_equals(round(toNumber(tmp, vm)), 52);
 
 
+	return 0;
 }
 
diff --git a/testsuite/movies.all/tic_tac2-TestRunner.cpp b/testsuite/movies.all/tic_tac2-TestRunner.cpp
index 281a73b..7013d81 100644
--- a/testsuite/movies.all/tic_tac2-TestRunner.cpp
+++ b/testsuite/movies.all/tic_tac2-TestRunner.cpp
@@ -38,71 +38,75 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
-	string filename = string(SRCDIR) + string("/") + string(INPUT_FILENAME);
-	MovieTester tester(filename);
+    string filename = string(SRCDIR) + string("/") + string(INPUT_FILENAME);
+    MovieTester tester(filename);
 
-	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
-	dbglogfile.setVerbosity(1);
+    gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
+    dbglogfile.setVerbosity(1);
 
-	const MovieClip* root = tester.getRootMovie();
-	assert(root);
+    const MovieClip* root = tester.getRootMovie();
+    assert(root);
 
-	check_equals(root->get_frame_count(), 10);
-	check_equals(root->get_current_frame(), 0);
+    check_equals(root->get_frame_count(), 10);
+    check_equals(root->get_current_frame(), 0);
 
-	const MovieClip* slides = dynamic_cast<const MovieClip*>(
-		tester.findDisplayItemByTarget("_level0.slides"));
-	check(slides);
+    const MovieClip* slides = dynamic_cast<const MovieClip*>(
+        tester.findDisplayItemByTarget("_level0.slides"));
+    check(slides);
 
-	const Button* button = dynamic_cast<const Button*>(
-		tester.findDisplayItemByTarget("_level0.b1"));
-	check(button);
+    const Button* button = dynamic_cast<const Button*>(
+        tester.findDisplayItemByTarget("_level0.b1"));
+    check(button);
 
-	tester.advance(); 
-	check_equals(root->get_current_frame(), 1);
-	check_equals(slides->get_current_frame(), 0);
+    tester.advance();
+    check_equals(root->get_current_frame(), 1);
+    check_equals(slides->get_current_frame(), 0);
 
-	// Not much happens w/out clicking on the play button
-	for (int i=0; i<10; ++i) tester.advance(); 
-	check_equals(root->get_current_frame(), 1);
-	check_equals(slides->get_current_frame(), 0);
+    // Not much happens w/out clicking on the play button
+    for (int i=0; i<10; ++i) tester.advance();
+    check_equals(root->get_current_frame(), 1);
+    check_equals(slides->get_current_frame(), 0);
 
-	// Should start now
-	tester.movePointerTo(395, 301); tester.click();
-	check_equals(root->get_current_frame(), 1);
-	check_equals(slides->get_current_frame(), 0);
+    // Should start now
+    tester.movePointerTo(395, 301); tester.click();
+    check_equals(root->get_current_frame(), 1);
+    check_equals(slides->get_current_frame(), 0);
 
-	for (unsigned int i=0; i<3; ++i) {
-		std::stringstream s; s << "iteration " << i;
-		tester.advance(); 
-		check_equals_label(s.str(), root->get_current_frame(), 2+i);
-		check_equals_label(s.str(), slides->get_current_frame(), 0);
-	}
+    for (unsigned int i=0; i<3; ++i) {
+        std::stringstream s; s << "iteration " << i;
+        tester.advance();
+        check_equals_label(s.str(), root->get_current_frame(), 2+i);
+        check_equals_label(s.str(), slides->get_current_frame(), 0);
+    }
 
+#if USE_SOUND
     // Tweak initial offset (dunno based on what really)
     tester.advanceClock(1000);
-    tester.advance(false); 
-	check_equals(root->get_current_frame(), 4);
-	check_equals(slides->get_current_frame(), 0);
+    tester.advance(false);
+    check_equals(root->get_current_frame(), 4);
+    check_equals(slides->get_current_frame(), 0);
 
-	for (unsigned int i=0; i<12; ++i) {
+    for (unsigned int i=0; i<12; ++i) {
         tester.advanceClock(1000);
-        tester.advance(false); 
-		std::stringstream s; s << "i" << i;
-	    check_equals_label(s.str(), slides->get_current_frame(), i);
+        tester.advance(false);
+        std::stringstream s; s << "i" << i;
+        check_equals_label(s.str(), slides->get_current_frame(), i);
         // TODO: check invalidated bounds!
     }
 
-	check_equals(slides->get_current_frame(), 11);
-	check_equals(root->get_current_frame(), 4);
+    check_equals(slides->get_current_frame(), 11);
+    check_equals(root->get_current_frame(), 4);
 
     // It's stuck there
-	for (int i=0; i<10; ++i) tester.advance(); 
-	check_equals(slides->get_current_frame(), 11);
-	check_equals(root->get_current_frame(), 4);
+    for (int i=0; i<10; ++i) tester.advance();
+    check_equals(slides->get_current_frame(), 11);
+    check_equals(root->get_current_frame(), 4);
+#endif // USE_SOUND
 
+    return 0;
 }
 
diff --git a/testsuite/network.all/test_ssh.cpp b/testsuite/network.all/test_ssh.cpp
index 1a0d358..b43b263 100644
--- a/testsuite/network.all/test_ssh.cpp
+++ b/testsuite/network.all/test_ssh.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>
@@ -169,6 +168,7 @@ main(int argc, char *argv[])
     }
 
     test_channels();
+    return 0;
 }
 
 static void test_client()
diff --git a/testsuite/network.all/test_ssl.cpp b/testsuite/network.all/test_ssl.cpp
index e1a0b2f..6d1f0a4 100644
--- a/testsuite/network.all/test_ssl.cpp
+++ b/testsuite/network.all/test_ssl.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>
@@ -172,6 +171,7 @@ main(int argc, char *argv[])
 	test_client();
     }
 #endif
+    return 0;
 }
 
 #ifdef USE_SSL
diff --git a/testsuite/samples/Makefile.am b/testsuite/samples/Makefile.am
index 5c59ef8..d0449a8 100644
--- a/testsuite/samples/Makefile.am
+++ b/testsuite/samples/Makefile.am
@@ -38,6 +38,7 @@ AM_CPPFLAGS = \
         -I$(top_srcdir)/testsuite \
         $(OPENGL_CFLAGS) \
         $(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS) \
         $(FFMPEG_CFLAGS) \
         $(NULL)
 
diff --git a/testsuite/samples/clip_as_button2-TestRunner.cpp b/testsuite/samples/clip_as_button2-TestRunner.cpp
index a9ee635..be76352 100644
--- a/testsuite/samples/clip_as_button2-TestRunner.cpp
+++ b/testsuite/samples/clip_as_button2-TestRunner.cpp
@@ -36,11 +36,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(SRCDIR) + string("/") + string(INPUT_FILENAME);
-	auto_ptr<MovieTester> t;
+	unique_ptr<MovieTester> t;
 
 	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	dbglogfile.setVerbosity(1);
@@ -233,5 +234,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_pixel(434, 291, 2, yellow, 1);
 	check_equals(string(text->get_text_value()), msg_empty);
 
+	return 0;
 }
 
diff --git a/testsuite/samples/gotoFrameOnKeyEvent-TestRunner.cpp b/testsuite/samples/gotoFrameOnKeyEvent-TestRunner.cpp
index 20e1647..036e9d9 100644
--- a/testsuite/samples/gotoFrameOnKeyEvent-TestRunner.cpp
+++ b/testsuite/samples/gotoFrameOnKeyEvent-TestRunner.cpp
@@ -35,11 +35,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
   string filename = string(SRCDIR) + string("/") + string(INPUT_FILENAME);
-  auto_ptr<MovieTester> t;
+  unique_ptr<MovieTester> t;
 
   gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
   dbglogfile.setVerbosity(1);
@@ -138,5 +139,6 @@ main(int /*argc*/, char** /*argv*/)
     tester.advance();
     check_equals(root->get_current_frame(), i-1);
   }
+  return 0;
 }
 
diff --git a/testsuite/samples/subshapes-TestRunner.cpp b/testsuite/samples/subshapes-TestRunner.cpp
index 96ae7ee..4cd90ed 100644
--- a/testsuite/samples/subshapes-TestRunner.cpp
+++ b/testsuite/samples/subshapes-TestRunner.cpp
@@ -35,11 +35,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(SRCDIR) + string("/") + string(INPUT_FILENAME);
-	auto_ptr<MovieTester> t;
+	unique_ptr<MovieTester> t;
 
 	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	dbglogfile.setVerbosity(1);
@@ -115,5 +116,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_pixel(bbExtT.x, bbExtT.y, 2, white, 1);
 	check_pixel(bbExtL.x, bbExtL.y, 2, white, 1);
 
+	return 0;
 }
 
diff --git a/testsuite/samples/test_15bpp_bitmap-TestRunner.cpp b/testsuite/samples/test_15bpp_bitmap-TestRunner.cpp
index 898a4e0..973b4ae 100644
--- a/testsuite/samples/test_15bpp_bitmap-TestRunner.cpp
+++ b/testsuite/samples/test_15bpp_bitmap-TestRunner.cpp
@@ -33,11 +33,12 @@
 using namespace gnash;
 using namespace std;
 
+TRYMAIN(_runtest);
 int
-main(int /*argc*/, char** /*argv*/)
+trymain(int /*argc*/, char** /*argv*/)
 {
 	string filename = string(SRCDIR) + string("/") + string(INPUT_FILENAME);
-	auto_ptr<MovieTester> t;
+	unique_ptr<MovieTester> t;
 
 	gnash::LogFile& dbglogfile = gnash::LogFile::getDefaultInstance();
 	dbglogfile.setVerbosity(1);
@@ -137,5 +138,6 @@ main(int /*argc*/, char** /*argv*/)
 	check_pixel(lr6.x, lr7.y, 8, white, 1);
 
 
+	return 0;
 }
 
diff --git a/testsuite/simultaneous-testrunner.sh b/testsuite/simultaneous-testrunner.sh
index dc089c1..51950e1 100755
--- a/testsuite/simultaneous-testrunner.sh
+++ b/testsuite/simultaneous-testrunner.sh
@@ -18,19 +18,19 @@
 # 
 
 while getopts c:C: name; do
-	case $name in
-		c) endtagpat="$OPTARG" ;;
-		C) endtagpat="$OPTARG"; endtagexp=X ;;
-		?)
-		   {
-		   echo "Usage: $0 [-r <runs>] [-f <advances>] [-c <string>]  <swf> ..." 
-		   echo "   -c <pattern>    : verify that the test ends with a trace "
-           echo "                     matching <pattern>, or print a failure" 
-		   echo "   -C <pattern>    : same as -c <pattern> but a failure is "
-           echo "                     expected" 
-		   } >&2
-		   exit 1;;
-	esac
+  case $name in
+    c) endtagpat="$OPTARG" ;;
+    C) endtagpat="$OPTARG"; endtagexp=X ;;
+    ?)
+      {
+      echo "Usage: $0 [-r <runs>] [-f <advances>] [-c <string>]  <swf> ..."
+      echo "   -c <pattern>    : verify that the test ends with a trace "
+      echo "                     matching <pattern>, or print a failure"
+      echo "   -C <pattern>    : same as -c <pattern> but a failure is "
+      echo "                     expected"
+      } >&2
+      exit 1;;
+  esac
 done
 shift $(($OPTIND - 1))
 
@@ -47,7 +47,7 @@ echo
 
 echo "# Environment"
 env | grep GNASH | while read REPLY; do
-	echo "export ${REPLY}"
+  echo "export ${REPLY}"
 done
 
 timeout=40
@@ -55,32 +55,22 @@ cat << EOF
 
 outlog1=${top_builddir}/testoutlog.\$$
 outlog2=${top_builddir}/testoutlog2.\$$
-(
-    echo "Running first process"
-    ${top_builddir}/gui/gnash -v -r0 ${t1} -t ${timeout} > \${outlog1}
-    cat \${outlog1}
-	if test "x${endtagpat}" != x; then
-		lasttrace=\`grep TRACE \${outlog1} | tail -1 | sed 's/.*TRACE: //'\`
-		if ! expr "\${lasttrace}" : '${endtagpat}' > /dev/null; then
-			echo "${endtagexp}FAILED: consistency check: last trace from run of test \${t} (\${lasttrace}) doesn't match pattern (${endtagpat})"
-		else
-			echo "${endtagexp}PASSED: consistency check: last trace from run of test \${t} (\${lasttrace}) matches pattern (${endtagpat})"
-		fi
-	fi
-    rm \${outlog1}
-) &
-(
-    echo "Running second process"
-    ${top_builddir}/gui/gnash -v -r0 ${t2} -t ${timeout} > \${outlog2}
-    cat \${outlog2}
-	if test "x${endtagpat}" != x; then
-		lasttrace=\`grep TRACE \${outlog2} | tail -1 | sed 's/.*TRACE: //'\`
-		if ! expr "\${lasttrace}" : '${endtagpat}' > /dev/null; then
-			echo "${endtagexp}FAILED: consistency check: last trace from run of test \${t} (\${lasttrace}) doesn't match pattern (${endtagpat})"
-		else
-			echo "${endtagexp}PASSED: consistency check: last trace from run of test \${t} (\${lasttrace}) matches pattern (${endtagpat})"
-		fi
-	fi
-    rm \${outlog2}
-)
+
+echo "Running first process"
+${top_builddir}/gui/gnash -vvv -r0 ${t1} -t ${timeout} | tee \${outlog1} &
+echo "Running second process"
+${top_builddir}/gui/gnash -vvv -r0 ${t2} -t ${timeout} | tee \${outlog2} &
+wait
+
+for log in \${outlog1} \${outlog2}; do
+  if test "x${endtagpat}" != x; then
+    lasttrace=\`grep TRACE \$log | tail -1 | sed 's/.*TRACE: //'\`
+    if ! expr "\${lasttrace}" : '${endtagpat}' > /dev/null; then
+      echo "${endtagexp}FAILED: consistency check: last trace from run of test \${t} (\${lasttrace}) doesn't match pattern (${endtagpat})"
+    else
+      echo "${endtagexp}PASSED: consistency check: last trace from run of test \${t} (\${lasttrace}) matches pattern (${endtagpat})"
+    fi
+  fi
+  rm \$log
+done
 EOF
diff --git a/testsuite/timingissues b/testsuite/timingissues
index 65305db..307c4c0 100644
--- a/testsuite/timingissues
+++ b/testsuite/timingissues
@@ -4,11 +4,14 @@ FAIL: loadMovieTestRunner: expected: \(red.swf\|blue.swf\|green.jpg\) , obtained
 ### misc-ming.all - network tests
 FAIL: XMLSocketTester: consistency check: last trace from run of test  (.*) doesn't match pattern (ENDOFTEST)
 FAIL: rtmpytest-runner: consistency check: last trace from run of test rtmpytest.swf (Connecting to rtmp://www.gnashdev.org:9984/rtmpyecho) doesn't match pattern (ENDOFTEST)
-FAIL: oflaDemo-runner: Tests run 34 (expected 17) [undefined]
+FAIL: oflaDemo-runner: Tests run 34 (expected 17) \[undefined\]
 ## FAIL: LCTestRunner: consistency check: last trace from run of test  (.*) doesn't match pattern (ENDOFTEST)
-### misc-mtasc.all/level87.as:72
-FAIL: sanetests-runner: expected: "1" , obtained: ""  \[level87.as:[0-9]*\]
+### misc-mtasc.all
+FAIL: sanetests-runner: expected: "undefined" , obtained: "movieclip"  \[level87.as:59\]
+FAIL: sanetests-runner: expected: "1" , obtained: ""  \[level87.as:75\]
+FAIL: sanetests-runner: expected: "1" , obtained: ""  \[level87.as:72\]
 ### swfdec
 FAIL: run_swfdec_testsuite_g: gotolabel-multiple.swf:[0-9a-f]* (traces in gotolabel-multiple.swf.trace-gnash, log in gotolabel-multiple.swf.log)
 FAIL: run_swfdec_testsuite_m: movieclip-lockroot-loadmovie-[678].swf:[0-9a-f]* (traces in movieclip-lockroot-loadmovie-[678].swf.trace-gnash, log in movieclip-lockroot-loadmovie-[678].swf.log)
 FAIL: run_swfdec_testsuite_m: movieclip-version-[678].swf:[0-9a-f]* (traces in movieclip-version-[678].swf.trace-gnash, log in movieclip-version-[678].swf.log)
+FAIL: run_swfdec_testsuite_s: string-extract-[678].swf:[0-9a-f]* (traces in string-extract-[678].swf.trace-gnash, log in string-extract-[678].swf.log)
diff --git a/utilities/findmicrophones.cpp b/utilities/findmicrophones.cpp
index 4849f2d..ff12763 100644
--- a/utilities/findmicrophones.cpp
+++ b/utilities/findmicrophones.cpp
@@ -48,8 +48,8 @@ class data {
 };
 
 data::data() {
-    deviceName = NULL;
-    deviceType = NULL;
+    deviceName = nullptr;
+    deviceType = nullptr;
 };
 
 gint findAudioDevs(std::vector<data*>& audioVect) {
@@ -59,8 +59,8 @@ gint findAudioDevs(std::vector<data*>& audioVect) {
     GstElement *element;
     element = gst_element_factory_make ("audiotestsrc", "audiotestsrc");
     
-    if (element == NULL) {
-        audioVect.push_back(NULL);
+    if (element == nullptr) {
+        audioVect.push_back(nullptr);
         numdevs += 1;
     } else {
         audioVect.push_back(new data);
@@ -72,14 +72,14 @@ gint findAudioDevs(std::vector<data*>& audioVect) {
     //pulseaudio src
     GstPropertyProbe *probe;
     GValueArray *devarr;
-    element = NULL;
+    element = nullptr;
     
     element = gst_element_factory_make ("pulsesrc", "pulsesrc");
     probe = GST_PROPERTY_PROBE (element);
     devarr = gst_property_probe_probe_and_get_values_name (probe, "device");
-    for (size_t i = 0; devarr != NULL && i < devarr->n_values; ++i) {
+    for (size_t i = 0; devarr != nullptr && i < devarr->n_values; ++i) {
         GValue *val;
-        gchar *dev_name = NULL;
+        gchar *dev_name = nullptr;
         
         val = g_value_array_get_nth (devarr, i);
         g_object_set (element, "device", g_value_get_string (val), NULL);
@@ -89,7 +89,7 @@ gint findAudioDevs(std::vector<data*>& audioVect) {
         if (strcmp(dev_name, "null") == 0) {
             g_print("no pulse audio sources found\n");
         }
-        else if ((strstr(dev_name, "Monitor") != NULL)) {
+        else if ((strstr(dev_name, "Monitor") != nullptr)) {
             g_print("ignoring monitor (audio output)");
         }
         else { 
@@ -107,7 +107,7 @@ gint findAudioDevs(std::vector<data*>& audioVect) {
 
 int main () {
     //initialize gstreamer to probe for devs
-    gst_init(NULL, NULL);
+    gst_init(nullptr, nullptr);
     gint numdevs = 0;
     std::vector<data*> audioVector;
     gint i;
@@ -120,9 +120,9 @@ int main () {
         g_print("\nFound %d audio input devices: \n\n", numdevs);
         for (i = 0; i < numdevs; ++i)
         {
-            if (i == 0 && (audioVector[i] != 0)) {
+            if (i == 0 && (audioVector[i] != nullptr)) {
                 g_print("%d. device[%d] = Audio Test Source (audiotestsrc)\n", i, i);
-            } else if (i == 0 && (audioVector[i] == 0)) {
+            } else if (i == 0 && (audioVector[i] == nullptr)) {
                 g_print("no test audio device available\n");
             } else {
                 g_print("%d. device[%d] = %s (%s)\n", i, i, audioVector[i]->deviceName,
diff --git a/utilities/findwebcams.cpp b/utilities/findwebcams.cpp
index f3ba993..e3bcf63 100644
--- a/utilities/findwebcams.cpp
+++ b/utilities/findwebcams.cpp
@@ -45,8 +45,8 @@ class data {
 };
 
 data::data() {
-    deviceName = NULL;
-    deviceType = NULL;
+    deviceName = nullptr;
+    deviceType = nullptr;
     deviceNumber = -1;
     duplicate = false;
 };
@@ -60,8 +60,8 @@ size_t findVidDevs(std::vector<data*>& vidVect) {
     GstElement *element;
     element = gst_element_factory_make ("videotestsrc", "vidtestsrc");
     
-    if (element == NULL) {
-        vidVect.push_back(NULL);
+    if (element == nullptr) {
+        vidVect.push_back(nullptr);
         numdevs += 1;
     } else {
         vidVect.push_back(new data);
@@ -74,14 +74,14 @@ size_t findVidDevs(std::vector<data*>& vidVect) {
     //video4linux source
     GstPropertyProbe *probe;
     GValueArray *devarr;
-    element = NULL;
+    element = nullptr;
     
     element = gst_element_factory_make ("v4lsrc", "v4lvidsrc");
     probe = GST_PROPERTY_PROBE (element);
     devarr = gst_property_probe_probe_and_get_values_name (probe, "device");
-    for (size_t i = 0; devarr != NULL && i < devarr->n_values; ++i) {
+    for (size_t i = 0; devarr != nullptr && i < devarr->n_values; ++i) {
         GValue *val;
-        gchar *dev_name = NULL;
+        gchar *dev_name = nullptr;
         
         val = g_value_array_get_nth (devarr, i);
         g_object_set (element, "device", g_value_get_string (val), NULL);
@@ -105,16 +105,16 @@ size_t findVidDevs(std::vector<data*>& vidVect) {
     
     
     //video4linux2 source
-    probe = NULL;
-    element = NULL;
-    devarr = NULL;
+    probe = nullptr;
+    element = nullptr;
+    devarr = nullptr;
     
     element = gst_element_factory_make ("v4l2src", "v4l2vidsrc");
     probe = GST_PROPERTY_PROBE (element);
     devarr = gst_property_probe_probe_and_get_values_name (probe, "device");
-    for (size_t i = 0; devarr != NULL && i < devarr->n_values; ++i) {
+    for (size_t i = 0; devarr != nullptr && i < devarr->n_values; ++i) {
         GValue *val;
-        gchar *dev_name = NULL;
+        gchar *dev_name = nullptr;
         
         val = g_value_array_get_nth (devarr, i);
         g_object_set (element, "device", g_value_get_string (val), NULL);
@@ -149,7 +149,7 @@ size_t findVidDevs(std::vector<data*>& vidVect) {
 
 int main () {
     //initialize gstreamer to probe for devs
-    gst_init(NULL, NULL);
+    gst_init(nullptr, nullptr);
     size_t numdevs = 0;
     std::vector<data*> vidVector;
     
@@ -177,11 +177,11 @@ int main () {
         gint counter = 0;
         for (size_t i = 0; i < numdevs; ++i)
         {
-            if (i == 0 && (vidVector[i] != 0)) {
+            if (i == 0 && (vidVector[i] != nullptr)) {
                 std::cout << "    " << i
                      << ". Video Test Source (videotestsrc)" << std::endl;
                 counter++;
-            } else if (i == 0 && (vidVector[i] == 0)) {
+            } else if (i == 0 && (vidVector[i] == nullptr)) {
                 std::cout << "no test video device available";
             } else {
                 if (vidVector[i]->duplicate != true) {
diff --git a/utilities/flvdumper.cpp b/utilities/flvdumper.cpp
index e211f34..e941b43 100644
--- a/utilities/flvdumper.cpp
+++ b/utilities/flvdumper.cpp
@@ -1,5 +1,5 @@
 // 
-//   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+//   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014
 //   Free Software Foundation, Inc
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -23,7 +23,6 @@
 #include "GnashFileUtilities.h"
 #include "GnashSystemNetHeaders.h"
 
-#include <boost/shared_ptr.hpp>
 #include <dirent.h>
 #include <iostream>
 #include <cstdarg>
@@ -123,7 +122,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
@@ -186,20 +185,20 @@ main(int argc, char *argv[])
     Flv flv; 
     struct stat st;
 
-//    boost::shared_ptr<Flv::flv_header_t> head;
+//    std::shared_ptr<Flv::flv_header_t> head;
     Flv::previous_size_t   previous = 0;
-    boost::shared_ptr<Flv::flv_tag_t> tag;
+    std::shared_ptr<Flv::flv_tag_t> tag;
     
     // Make sure it's an FLV file
     if (stat(filespec.c_str(), &st) == 0) {
 	try {
             // Open the binary file
 	    ifstream ifs(filespec.c_str(), ios::binary);
-	    boost::shared_ptr<cygnal::Buffer> buf(new Buffer);
+	    std::shared_ptr<cygnal::Buffer> buf(new Buffer);
             // Read just the initial 9 byte header
 	    ifs.read(reinterpret_cast<char *>(buf->reference()), sizeof(Flv::flv_header_t));
 	    log_debug("header is: %s",  hexify(buf->reference(), 9, false));
-	    boost::shared_ptr<Flv::flv_header_t> head = flv.decodeHeader(buf);
+	    std::shared_ptr<Flv::flv_header_t> head = flv.decodeHeader(buf);
 	    if (head == 0) {
 		log_error("Couldn't decode the header! %s",  hexify(buf->reference(), 9, false));
 		exit(EXIT_FAILURE);
@@ -213,7 +212,7 @@ main(int argc, char *argv[])
 	    }
 	    
 	    cout << "FLV Version: " << int(head->version) << " (should always be 1)" << endl;
-	    boost::uint32_t headsize = flv.convert24(head->head_size);
+	    std::uint32_t headsize = flv.convert24(head->head_size);
 	    if (all) {
 		cout << "FLV Header size: " << headsize << " (should always be 9)" << endl;
 	    }
@@ -259,7 +258,7 @@ main(int argc, char *argv[])
 		   {
 		       if (all) {
 			   cerr << "FLV Tag type is: Audio" << endl;
- 			   boost::shared_ptr<Flv::flv_audio_t> data = flv.decodeAudioData(*(buf->reference() + sizeof(Flv::flv_tag_t)));
+ 			   std::shared_ptr<Flv::flv_audio_t> data = flv.decodeAudioData(*(buf->reference() + sizeof(Flv::flv_tag_t)));
  			   cout << "\tSound Type is: "   << type_strs[data->type] << endl;
  			   cout << "\tSound Size is: "   << size_strs[data->size] << endl;
  			   cout << "\tSound Rate is: "   << rate_strs[data->rate] << endl;
@@ -271,7 +270,7 @@ main(int argc, char *argv[])
 		   {
 		       if (all) {
 			   cout << "FLV Tag type is: Video" << endl;
- 			   boost::shared_ptr<Flv::flv_video_t> data = flv.decodeVideoData(*(buf->reference() + sizeof(Flv::flv_tag_t)));
+ 			   std::shared_ptr<Flv::flv_video_t> data = flv.decodeVideoData(*(buf->reference() + sizeof(Flv::flv_tag_t)));
  			   cout << "\tCodec ID is: "   << codec_strs[data->codecID] << endl;
  			   cout << "\tFrame Type is: " << frame_strs[data->type] << endl;
 		       }
@@ -281,7 +280,7 @@ main(int argc, char *argv[])
  		       if (meta || all) {
  			   cout << "FLV Tag type is: MetaData" << endl;
  		       }
-		       boost::shared_ptr<cygnal::Element> metadata = flv.decodeMetaData(buf->reference(), bodysize);
+		       std::shared_ptr<cygnal::Element> metadata = flv.decodeMetaData(buf->reference(), bodysize);
 		       if (meta && metadata) {
 			   metadata->dump();
 		       }
diff --git a/utilities/processor.cpp b/utilities/processor.cpp
index c671a39..7ab5ec9 100644
--- a/utilities/processor.cpp
+++ b/utilities/processor.cpp
@@ -1,6 +1,6 @@
 // processor.cpp:  Flash movie processor (gprocessor command), for Gnash.
 // 
-//   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+//   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014
 //   Free Software Foundation, Inc
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -51,6 +51,8 @@
 #include "StringPredicates.h"
 #include "IOChannel.h" // for proper dtor call
 #include "GnashSleep.h" // for usleep compatibility.
+#include "GnashFactory.h"
+#include "MediaHandler.h"
 #include "StreamProvider.h"
 #include "RunResources.h"
 #include "HostInterface.h"
@@ -224,7 +226,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
@@ -332,33 +334,28 @@ main(int argc, char *argv[])
     }
 
 #ifdef USE_MEDIA
-    boost::shared_ptr<gnash::media::MediaHandler> mediaHandler;
+    std::shared_ptr<gnash::media::MediaHandler> mediaHandler;
     std::string mh = rcfile.getMediaHandler();
     mediaHandler.reset(media::MediaFactory::instance().get(mh));
 #endif
 #if defined(USE_SOUND) && defined(USE_MEDIA)
-    boost::shared_ptr<sound::sound_handler> soundHandler;
+    std::shared_ptr<sound::sound_handler> soundHandler;
     soundHandler.reset(new sound::NullSoundHandler(mediaHandler.get()));
 #endif
 
-    boost::shared_ptr<SWF::TagLoadersTable> loaders(new SWF::TagLoadersTable());
+    std::shared_ptr<SWF::TagLoadersTable> loaders(
+        std::make_shared<SWF::TagLoadersTable>());
     addDefaultLoaders(*loaders);
 
 #ifdef RENDERER_AGG
-    boost::shared_ptr<Renderer_agg_base> r(create_Renderer_agg("RGBA32"));
+    unsigned char buf[8] = {};
+    std::shared_ptr<Renderer_agg_base> r(create_Renderer_agg("RGBA32"));
 
-    // Yes, this leaks. On some systems (e.g. Debian Lenny) the data is
-    // evidently accessed after main() returns. Rather than bothering to
-    // work out why, we let this byte leak, as it's returned to the system on
-    // exit anyway.
-    unsigned char* buf = new unsigned char[8];
     r->init_buffer(buf, 1, 1, 1, 1);
 #endif
 
     // Play through all the movies.
-    for (std::vector<std::string>::const_iterator i = infiles.begin(), 
-            e = infiles.end(); i != e; ++i)
-    {
+    for (const std::string& file : infiles) {
 
         RunResources runResources;
 #if defined(USE_SOUND) && defined(USE_MEDIA)
@@ -368,18 +365,19 @@ main(int argc, char *argv[])
         runResources.setMediaHandler(mediaHandler);
 #endif
         runResources.setTagLoaders(loaders);
-        boost::shared_ptr<StreamProvider> sp(new StreamProvider(*i, *i));
+        std::shared_ptr<StreamProvider> sp =
+            std::make_shared<StreamProvider>(file, file);
         runResources.setStreamProvider(sp);
 
 #ifdef RENDERER_AGG
         runResources.setRenderer(r);
 #endif
 
-	    bool success = play_movie(*i, runResources);
+	    bool success = play_movie(file, runResources);
 	    if (!success) {
 	        if (s_stop_on_errors) {
 		    // Fail.
-                std::cerr << "error playing through movie " << *i << std::endl;
+                std::cerr << "error playing through movie " << file << std::endl;
 		        return EXIT_FAILURE;
 	        }
         }
@@ -419,7 +417,7 @@ struct SamplesFetcher {
 
         //log_debug("SamplesFetcher::fetch(%d) fetching %d samples", ms, toFetch);
 
-        boost::int16_t samples[1024];
+        std::int16_t samples[1024];
         while (toFetch) {
             unsigned int n = std::min(toFetch, 1024u);
             _sh.fetchSamples(samples, n);
@@ -436,9 +434,11 @@ bool
 play_movie(const std::string& filename, const RunResources& runResources)
 {
 
+#if USE_SOUND
     sound::sound_handler* sh = runResources.soundHandler();
     sh->reset();
     SamplesFetcher sFetcher(*sh);
+#endif
 
     boost::intrusive_ptr<gnash::movie_definition> md;
 
@@ -450,9 +450,9 @@ play_movie(const std::string& filename, const RunResources& runResources)
     {
       if (filename == "-")
       {
-         std::auto_ptr<IOChannel> in (
+         std::unique_ptr<IOChannel> in (
                  noseek_fd_adapter::make_stream(fileno(stdin)) );
-         md = MovieFactory::makeMovie(in, filename, runResources, false);
+         md = MovieFactory::makeMovie(std::move(in), filename, runResources, false);
       }
       else
       {
@@ -530,7 +530,9 @@ play_movie(const std::string& filename, const RunResources& runResources)
             //printf("advancing clock by %lu\n", clockAdvance);
             cl.advance(clockAdvance);
             m.advance();
+#if USE_SOUND
             sFetcher.fetch(cl.elapsed());
+#endif
 
             if ( quitrequested ) 
             {
diff --git a/utilities/rtmpget.cpp b/utilities/rtmpget.cpp
index 985ea2f..08b8845 100644
--- a/utilities/rtmpget.cpp
+++ b/utilities/rtmpget.cpp
@@ -27,7 +27,7 @@
 #include "GnashSleep.h"
 #include "URL.h"
 
-#include <boost/cstdint.hpp>
+#include <cstdint>
 #include <iomanip>
 #include <map>
 #include <algorithm>
@@ -182,8 +182,8 @@ writeFLVHeader(std::ostream& o)
 }
 
 
-bool handleInvoke(rtmp::RTMP& r, FakeNC& nc, const boost::uint8_t* payload,
-        const boost::uint8_t* end);
+bool handleInvoke(rtmp::RTMP& r, FakeNC& nc, const std::uint8_t* payload,
+        const std::uint8_t* end);
 
 /// These functions create an RTMP call buffer and send it. They mimic
 /// NetConnection.call() methods and replies to server calls.
@@ -514,7 +514,7 @@ main(int argc, char** argv)
         }
 
         /// Retrieve messages.
-        boost::shared_ptr<SimpleBuffer> b = r.getMessage();
+        std::shared_ptr<SimpleBuffer> b = r.getMessage();
         while (b.get()) {
             handleInvoke(r, nc, b->data() + rtmp::RTMPHeader::headerSize,
                     b->data() + b->size());
@@ -522,7 +522,7 @@ main(int argc, char** argv)
         }
 
         /// Retrieve video packets.
-        boost::shared_ptr<SimpleBuffer> f = r.getFLVFrame();
+        std::shared_ptr<SimpleBuffer> f = r.getFLVFrame();
         while (f.get()) {
             if (flv) {
                 const char* start = reinterpret_cast<const char*>(
@@ -538,8 +538,8 @@ main(int argc, char** argv)
 }
 
 bool
-handleInvoke(rtmp::RTMP& r, FakeNC& nc, const boost::uint8_t* payload,
-        const boost::uint8_t* end)
+handleInvoke(rtmp::RTMP& r, FakeNC& nc, const std::uint8_t* payload,
+        const std::uint8_t* end)
 {
     assert(payload != end);
 
diff --git a/utilities/soldumper.cpp b/utilities/soldumper.cpp
index 68f12f0..cace760 100644
--- a/utilities/soldumper.cpp
+++ b/utilities/soldumper.cpp
@@ -1,5 +1,5 @@
 // 
-//   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+//   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2014
 //   Free Software Foundation, Inc
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -91,7 +91,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
@@ -163,19 +163,19 @@ main(int argc, char *argv[])
         } else {
             dirname = rcfile.getSOLSafeDir().c_str();
         }
-        DIR *library_dir = NULL;
+        DIR *library_dir = nullptr;
         library_dir = opendir (dirname);
-        if (library_dir != NULL) {
+        if (library_dir != nullptr) {
             // By convention, the first two entries in each directory are
             // for . and .. (``dot'' and ``dot dot''), so we ignore those. The
             // next directory read will get a real file, if any exists.
             entry = readdir(library_dir);
             entry = readdir(library_dir);
         }
-        if (library_dir != NULL) {
+        if (library_dir != nullptr) {
             for (i=0; entry>static_cast<struct dirent *>(0); i++) {
                 entry = readdir(library_dir);
-                if (entry != NULL) {
+                if (entry != nullptr) {
                     //string::size_type pos;
                     if (strstr(entry->d_name, ".sol")) {
                         cout << "Found SOL: " << entry->d_name << endl;


hooks/post-receive
-- 
GNU Shockwave Flash (SWF) player



More information about the pkg-flash-devel mailing list