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

Gabriele Giacone gg0-guest at moszumanska.debian.org
Tue Jan 21 19:44:51 UTC 2014


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

The branch, upstream has been updated
       via  ca4f36fd5502a06907f1de7d9ae5d640cb9ec2fe (commit)
      from  0af75cb171859bfaea434f84e5641f4b9f09a99b (commit)

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

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

Summary of changes:
 .gitignore                                         |  13 ++
 NEWS                                               |   3 +
 README                                             |   2 +-
 configure.ac                                       |  50 +++---
 cygnal/cgi-bin/echo/Makefile.am                    |   3 +-
 cygnal/cgi-bin/oflaDemo/Makefile.am                |   3 +-
 cygnal/http_server.cpp                             |   2 +
 cygnal/libamf/amf.cpp                              |   8 +-
 cygnal/libamf/amf_msg.cpp                          |   4 +-
 cygnal/libamf/element.cpp                          |   6 +-
 cygnal/libamf/flv.cpp                              |   4 +-
 cygnal/libamf/lcshm.cpp                            |   8 +-
 cygnal/libamf/sol.cpp                              |  10 +-
 cygnal/libnet/cache.cpp                            |   8 +-
 cygnal/libnet/cque.cpp                             |   6 +-
 cygnal/libnet/network.cpp                          |   2 +-
 cygnal/libnet/rtmp.cpp                             |   2 +-
 cygnal/libnet/rtmp_msg.cpp                         |   8 +-
 cygnal/libnet/statistics.cpp                       |   4 +-
 cygnal/rtmp_server.cpp                             |   4 +-
 cygnal/testsuite/libamf.all/test_lc.cpp            |   6 +-
 cygnal/testsuite/libnet.all/test_http.cpp          |   4 +-
 desktop/gnash-splash.swf                           | Bin 12799 -> 0 bytes
 doc/C/gnash.man-xml                                |  14 +-
 doc/C/preformatted/gnash.1.in                      |   5 +
 doc/C/preformatted/gnashuser.html.in               |   6 +
 doc/C/usermanual/usage.xml                         |  10 ++
 extensions/fileio/test.as                          |   9 +-
 extensions/gtk2/gtkext.cpp                         |   2 +-
 extensions/lirc/Makefile.am                        |   1 +
 extensions/mysql/Makefile.am                       |   1 +
 gui/Player.h                                       |   5 +
 gui/fb/fb.cpp                                      |   6 +-
 gui/fb/fb_glue_ovg.cpp                             |   4 +-
 gui/fb/fbsup.h                                     |   6 +-
 gui/gnash.cpp                                      |  18 +++
 gui/gtk/gtk_glue_ovg.cpp                           |   4 +-
 gui/pythonmod/gnash-view.cpp                       |   4 +-
 gui/qt/Qt4Gui.cpp                                  |   2 +-
 libbase/Makefile.am                                |   2 +-
 libbase/{curl_adapter.cpp => NetworkAdapter.cpp}   |  27 +++-
 libbase/NetworkAdapter.h                           |  19 +++
 libbase/RTMP.cpp                                   |   4 +
 libbase/extension.cpp                              |  34 ++--
 libbase/tree.hh                                    | 171 +++++++++++++++------
 libcore/DisplayObjectContainer.cpp                 |   1 -
 libcore/ExternalInterface.cpp                      |   4 +
 libcore/MovieLoader.cpp                            |   1 +
 libcore/Video.cpp                                  |   2 +-
 libcore/as_value.cpp                               |   5 +-
 libcore/asobj/Date_as.cpp                          |   2 +
 libcore/asobj/MovieClip_as.cpp                     |   1 +
 libcore/asobj/NetConnection_as.cpp                 | 109 ++++++++++---
 libcore/asobj/NetConnection_as.h                   |   4 +
 libcore/asobj/TextFormat_as.cpp                    |   1 +
 libcore/asobj/XMLNode_as.cpp                       |  18 ++-
 libcore/asobj/XMLNode_as.h                         |  19 +++
 libcore/parser/SWFParser.cpp                       |   2 +
 libcore/swf/DefineBitsTag.cpp                      |   6 -
 libcore/swf/RemoveObjectTag.h                      |   3 +-
 libcore/swf/SWF.cpp                                |   6 +-
 libcore/swf/SoundInfoRecord.h                      |   6 +
 libdevice/DeviceGlue.h                             |   4 +-
 libdevice/GnashDevice.h                            |   2 +-
 libmedia/SoundInfo.h                               |   2 +-
 libmedia/ffmpeg/AudioDecoderFfmpeg.cpp             |  53 ++-----
 libmedia/gst/MediaHandlerGst.cpp                   |   6 +-
 libmedia/gst/swfdec_codec_gst.c                    |   2 +
 librender/agg/Renderer_agg.h                       |  14 +-
 librender/opengl/Renderer_ogl.cpp                  |   2 +-
 librender/testr.cpp                                |   2 +-
 libsound/EmbedSoundInst.cpp                        |  10 +-
 libsound/sound_handler.h                           |   4 +-
 macros/boost.m4                                    |  44 +++---
 macros/curl.m4                                     |   5 +
 plugin/aos4/plugin.cpp                             |   2 +-
 plugin/npapi/plugin.cpp                            |  56 +++++--
 plugin/npapi/test.cpp                              |   4 +-
 plugin/win32/plugin.cpp                            |   2 +-
 po/cs.po                                           |   2 +-
 po/da.po                                           |   2 +-
 po/de.po                                           |   2 +-
 po/el.po                                           |   2 +-
 po/en_GB.po                                        |   4 +-
 po/es.po                                           |   2 +-
 po/fi.po                                           |   2 +-
 po/fr.po                                           |   2 +-
 po/gnash.pot                                       |   2 +-
 po/it.po                                           |   2 +-
 po/ja.po                                           |   2 +-
 po/km.po                                           |   2 +-
 po/ne.po                                           |   2 +-
 po/ru.po                                           |   2 +-
 po/zh_TW.po                                        |   2 +-
 revno.h                                            |   2 +-
 testsuite/Makefile.am                              |   1 +
 testsuite/actionscript.all/XMLNode.as              |   7 +
 testsuite/analyse-results.sh                       |  29 +++-
 testsuite/libbase.all/Makefile.am                  |   4 +-
 testsuite/media/blue.swf                           | Bin 3227 -> 0 bytes
 testsuite/media/green.swf                          | Bin 3621 -> 0 bytes
 testsuite/media/red.swf                            | Bin 3467 -> 0 bytes
 testsuite/misc-ming.all/Makefile.am                |  14 +-
 .../misc-ming.all/loading/loadMovieTestRunner.cpp  |   2 +
 testsuite/misc-ming.all/ming_utils.c               |   1 +
 testsuite/misc-ming.all/oflaDemo.as                | 100 ++++++++++++
 testsuite/misc-mtasc.all/level5.as                 |  92 +++++------
 testsuite/misc-mtasc.all/level87.as                |  81 +++++-----
 testsuite/misc-mtasc.all/levels.as                 |  38 ++---
 testsuite/movies.all/gravity-embedded.swf          | Bin 2742 -> 0 bytes
 testsuite/movies.all/gravity.swf                   | Bin 1049 -> 0 bytes
 testsuite/movies.all/tic_tac2.swf                  | Bin 13041 -> 0 bytes
 testsuite/movies.all/vnc2swf.swf                   | Bin 74100 -> 0 bytes
 testsuite/movies.all/zoomhenge.swf                 | Bin 238061 -> 0 bytes
 testsuite/samples/GotoAndPlayTest.swf              | Bin 513 -> 0 bytes
 testsuite/samples/TestFunction2.swf                | Bin 613 -> 0 bytes
 testsuite/samples/car_smash.swf                    | Bin 18744 -> 0 bytes
 testsuite/samples/clip_as_button.swf               | Bin 3808 -> 0 bytes
 testsuite/samples/clip_as_button2.swf              | Bin 3783 -> 0 bytes
 testsuite/samples/counter.swf                      | Bin 1428 -> 0 bytes
 testsuite/samples/display_list_test.swf            | Bin 3731 -> 0 bytes
 testsuite/samples/dlist_test1.swf                  | Bin 277 -> 0 bytes
 testsuite/samples/event-test1.swf                  | Bin 39443 -> 0 bytes
 testsuite/samples/extended_clipping_test_1.swf     | Bin 236 -> 0 bytes
 testsuite/samples/gotoFrameOnKeyEvent.swf          | Bin 4990 -> 0 bytes
 testsuite/samples/gradient-tests.swf               | Bin 62050 -> 0 bytes
 testsuite/samples/input-fields.swf                 | Bin 11314 -> 0 bytes
 testsuite/samples/money3.swf                       | Bin 18601 -> 0 bytes
 testsuite/samples/movieclip_test.swf               | Bin 32429 -> 0 bytes
 testsuite/samples/player.swf                       | Bin 15074 -> 0 bytes
 testsuite/samples/shared-fonts.swf                 | Bin 111647 -> 0 bytes
 testsuite/samples/slider.swf                       | Bin 6890 -> 0 bytes
 testsuite/samples/sound1.swf                       | Bin 36746 -> 0 bytes
 testsuite/samples/sr2_title.swf                    | Bin 2258 -> 0 bytes
 testsuite/samples/subshapes.swf                    | Bin 153 -> 0 bytes
 testsuite/samples/test.swf                         | Bin 36809 -> 0 bytes
 testsuite/samples/test_15bpp_bitmap.swf            | Bin 499 -> 0 bytes
 testsuite/samples/test_action_order.swf            | Bin 1227 -> 0 bytes
 testsuite/samples/test_action_order2.swf           | Bin 71 -> 0 bytes
 testsuite/samples/test_basic_types.swf             | Bin 264 -> 0 bytes
 testsuite/samples/test_button_functions.swf        | Bin 43044 -> 0 bytes
 testsuite/samples/test_cascaded_clipbuttons.swf    | Bin 983 -> 0 bytes
 testsuite/samples/test_clipping_layer.swf          | Bin 47681 -> 0 bytes
 testsuite/samples/test_colour_tweening.swf         | Bin 250 -> 0 bytes
 testsuite/samples/test_forin_array.swf             | Bin 622 -> 0 bytes
 testsuite/samples/test_frame1.swf                  | Bin 1541 -> 0 bytes
 testsuite/samples/test_frame2.swf                  | Bin 115 -> 0 bytes
 testsuite/samples/test_function2.swf               | Bin 146 -> 0 bytes
 testsuite/samples/test_goto_frame.swf              | Bin 289 -> 0 bytes
 testsuite/samples/test_goto_play.swf               | Bin 162 -> 0 bytes
 testsuite/samples/test_goto_stop.swf               | Bin 159 -> 0 bytes
 testsuite/samples/test_gradient_tweening.swf       | Bin 606 -> 0 bytes
 testsuite/samples/test_gradients_alpha.swf         | Bin 365 -> 0 bytes
 testsuite/samples/test_gradients_no_alpha.swf      | Bin 353 -> 0 bytes
 testsuite/samples/test_lastopcode_v6.swf           | Bin 34 -> 0 bytes
 testsuite/samples/test_long_static_text.swf        | Bin 5096 -> 0 bytes
 testsuite/samples/test_rotation.swf                | Bin 7828 -> 0 bytes
 testsuite/samples/test_rotation2.swf               | Bin 4862 -> 0 bytes
 testsuite/samples/test_rotation_shear.swf          | Bin 671 -> 0 bytes
 testsuite/samples/test_shape_tweening-2.swf        | Bin 1159 -> 0 bytes
 testsuite/samples/test_shape_tweening.swf          | Bin 310 -> 0 bytes
 testsuite/samples/test_string.swf                  | Bin 391 -> 0 bytes
 testsuite/samples/test_undefined_v6.swf            | Bin 9587 -> 0 bytes
 testsuite/samples/test_undefined_v7.swf            | Bin 9587 -> 0 bytes
 testsuite/samples/text-test.swf                    | Bin 116 -> 0 bytes
 testsuite/samples/text-test2.swf                   | Bin 15581 -> 0 bytes
 testsuite/samples/text_formatting.swf              | Bin 24097 -> 0 bytes
 testsuite/samples/text_sizes.swf                   | Bin 9442 -> 0 bytes
 testsuite/samples/visible_and_transparency.swf     | Bin 7137 -> 0 bytes
 testsuite/swfdec/gen_run_swfdec_testsuite.sh       |   3 +
 testsuite/timingissues                             |  14 ++
 utilities/processor.cpp                            |   2 +-
 172 files changed, 925 insertions(+), 415 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8c62240..9921a3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,9 @@ testsuite/misc-ming.all/*/*est[0-9][0-9]
 plugin/npapi/test
 desktop/gnash-gtk-launcher
 desktop/gnash-qt-launcher
+desktop/gnash.schemas
+desktop/gnash-thumbnailer
+desktop/gnashthumbnailrc
 .configline
 .deps
 .lastmod
@@ -44,6 +47,14 @@ cygnal/testsuite/cygnal.all/cygnalrc
 deb-copy-stamp
 doc/C/*.html
 doc/C/*.info
+doc/C/cygnal.1
+doc/C/findmicrophones.1
+doc/C/findwebcams.1
+doc/C/flvdumper.1
+doc/C/gnash.1
+doc/C/gprocessor.1
+doc/C/rtmpget.1
+doc/C/soldumper.1
 doc/Doxyfile
 gnashconfig.h
 gnashconfig.h.in
@@ -125,6 +136,7 @@ testsuite/misc-ming.all/static_vs_dynamic1
 testsuite/misc-ming.all/static_vs_dynamic2
 testsuite/misc-ming.all/*.swf
 testsuite/misc-ming.all/XMLSocketTester
+testsuite/misc-ming.all/sound/*.swf
 testsuite/misc-mtasc.all/pp_*.as
 testsuite/misc-mtasc.all/*.swf
 testsuite/misc-swfc.all/pp_*.sc
@@ -144,4 +156,5 @@ utilities/flvdumper
 utilities/gprocessor
 utilities/rtmpget
 utilities/soldumper
+extensions/fileio/test
 extensions/fileio/test.swf
diff --git a/NEWS b/NEWS
index fbc6d1c..5b15f03 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,9 @@ Improvements since 0.8.10 release are:
  * Fix build against recent Boost and FFMPEG.
  * Fix support for GIFLIB-5.0 (#39482)
  * Fix regression in dynamic sound loading (#33760).
+ * Fix infinite loop in GC mark phase for XML object (#40440)
+ * Fix segfault on exit when using XML (#40439)
+ * Incremental decoding of embedded sounds (#24638, #25456)
 
 Gnash 0.8.10
 2012/02/04
diff --git a/README b/README
index b617635..5b3dcb5 100644
--- a/README
+++ b/README
@@ -185,7 +185,7 @@ lists are stored at http://mail.gnu.org/pipermail/:
       announced here. To subscribe, go to
       http://mail.gnu.org/mailman/listinfo/gnash and register. Volume is
       typically very low.
-    * gnash-commit at gnu.org is where summaries of changes commited to
+    * gnash-commit at gnu.org is where summaries of changes committed to
       the git repository are automatically posted. Register at
       http://mail.gnu.org/mailman/listinfo/gnash-commit to be informed of
       these changes as they happen. Volume may be high.
diff --git a/configure.ac b/configure.ac
index 2d9b3b0..8a2706e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -811,7 +811,7 @@ if test x${build_media_none} != xyes; then
   AC_DEFINE(USE_MEDIA, [1], [Build any media code])
 fi
 
-dnl If no render is selected, and media handling isn't disabled, them enable gst
+dnl If no media is selected, and media handling isn't disabled, then enable gst
 if test x${build_media_none} = xno -a x${build_media_gst} = xno -a x${build_media_ffmpeg} = xno; then
   build_media_gst=yes
 fi
@@ -2303,6 +2303,8 @@ dnl Find freetype and fontconfig
 GNASH_PATH_FREETYPE2
 GNASH_PKG_FIND(fontconfig, [fontconfig/fontconfig.h], [fontconfig library], FcFontMatch)
 
+GNASH_PATH_CURL
+
 if test x$cross_compiling = xno; then
   AC_PATH_MING
 fi
@@ -2350,10 +2352,9 @@ AM_CONDITIONAL(ENABLE_SWFDEC_TESTSUITE, [ test x"$SWFDEC_TESTSUITE" != x ])
 
 if test x$cross_compiling = xno; then
   AC_ARG_ENABLE([http_testsuite],
-      dnl # TODO: find out how to add [quotes] around '=<baseurl>'
-	  AC_HELP_STRING([--enable-http-testsuite=<baseurl>],
-		  [Enable http based testsuite (default url is http://www.gnashdev.org/testcases)]),
-	      [case "${enableval}" in
+      AC_HELP_STRING([--enable-http-testsuite@<:@=URL@:>@],
+          [Enable http based testsuite (default url is http://www.gnashdev.org/testcases)]),
+          [case "${enableval}" in
              no) HTTP_TESTSUITE="" ;;
             yes) HTTP_TESTSUITE="http://www.gnashdev.org/testcases" ;;
               *) HTTP_TESTSUITE="${enableval}";;
@@ -2364,24 +2365,25 @@ AM_CONDITIONAL(ENABLE_HTTP_TESTSUITE, [ test x"$HTTP_TESTSUITE" != x ])
 
 if test x$cross_compiling = xno; then
   AC_ARG_ENABLE([red5_testing],
-      dnl # TODO: find out how to add [quotes] around '=<baseurl>'
-	  AC_HELP_STRING([--enable-red5-testing=<host>],
-		  [Enable red5 based testing (default host is www.gnashdev.org)]),
-	      [case "${enableval}" in
+      AC_HELP_STRING([--enable-red5-testing@<:@=HOST@:>@],
+          [Enable red5 based testing (default host is www.gnashdev.org)]),
+          [case "${enableval}" in
              no) RED5_HOST="" ;;
             yes) RED5_HOST="www.gnashdev.org" ;;
               *) RED5_HOST="${enableval}";;
-           esac])
+           esac
+               if test x"$RED5_HOST" != x -a x"$curl_rtmp_support" != x; then
+                 RED5_TESTING=yes
+             fi])
   AC_SUBST(RED5_HOST)
 fi
-AM_CONDITIONAL(ENABLE_RED5_TESTING, [ test x"$RED5_HOST" != x ])
+AM_CONDITIONAL(ENABLE_RED5_TESTING, [ test x"$RED5_TESTING" != x ])
 
 if test x$cross_compiling = xno; then
   AC_ARG_ENABLE([rtmpy_testing],
-      dnl # TODO: find out how to add [quotes] around '=<baseurl>'
-	  AC_HELP_STRING([--enable-rtmpy-testing=<host>],
-		  [Enable rtmpy based testing (default host is www.gnashdev.org)]),
-	      [case "${enableval}" in
+      AC_HELP_STRING([--enable-rtmpy-testing@<:@=HOST@:>@],
+          [Enable rtmpy based testing (default host is www.gnashdev.org)]),
+          [case "${enableval}" in
              no) RTMPY_HOST="" ;;
             yes) RTMPY_HOST="www.gnashdev.org" ;;
               *) RTMPY_HOST="${enableval}";;
@@ -2677,8 +2679,6 @@ AM_CONDITIONAL(ENABLE_XMLTEX, [ test x"$PDFXMLTEX" != x -a x"$XSLTPROC" != x -a
 AM_CONDITIONAL(ENABLE_MAN, [ test x"$DB2X_MAN" != x -o x"$DB2X_MANXML" != x ])
 AM_CONDITIONAL(HAVE_AGG, [test x"${AGG_LIBS}" != x])
 
-GNASH_PATH_CURL
-
 dnl Define winsock if we're on windows. We could do something complicated,
 dnl but since AC_EXEEXT does it for us, we'll do this the easy way.
 if test x"$EXEEXT" = "exe"; then
@@ -3701,7 +3701,11 @@ if test x"$CURL_LIBS" != x; then
   else
     echo "        CURL flags are: default include path"
   fi
-    echo "        CURL libs are: $CURL_LIBS"
+  echo "        CURL libs are: $CURL_LIBS"
+  if test -z "$curl_rtmp_support"; then
+    PKG_REC([CURL library present but built without RTMP protocol support.])
+    PKG_SUGGEST([If you install it with RTMP protocol support, Gnash will be able to play RTMP streaming.])
+  fi
 else
   PKG_REC([If you install the CURL library, Gnash will be able to display remote content (streaming from URLs) using CURL.])
   PKG_SUGGEST([Install libcurl from http://curl.haxx.se/libcurl])
@@ -3910,7 +3914,7 @@ if test x"$testsuite" = x"yes"; then
       echo "        HTTP testsuite dir is $HTTP_TESTSUITE"
     fi
 
-    if test x"$RED5_HOST" != x; then
+    if test x"$RED5_TESTING" != x; then
       echo "        RED5 testing host is $RED5_HOST"
     fi
   fi
@@ -4044,6 +4048,7 @@ if test x"$npapi" = xyes; then
     DEB_INSTALL([xulrunner-dev])
     DEB_ALTERNATIVE([firefox-dev])
     RPM_INSTALL([xulrunner-devel])
+    PKG_ALTERNATIVE([or specify --disable-npapi])
   fi
 else
   echo "        NPAPI plugin is disabled"
@@ -4074,6 +4079,13 @@ else
     RPM_INSTALL([libtool-ltdl-devel])
   fi
 fi
+
+if test x"$enable_visibility" != xno; then
+  if test x"${extensions_support}" != xno; then
+    PKG_ERR([Extensions not supported with ELF visibility activated.])
+    PKG_SUGGEST([Use --disable-extensions or --disable-visibility.])
+  fi
+fi
  
 if test x"$python" = x"yes"; then
   if test x"$has_python" = x"yes"; then
diff --git a/cygnal/cgi-bin/echo/Makefile.am b/cygnal/cgi-bin/echo/Makefile.am
index f8f0327..841a203 100644
--- a/cygnal/cgi-bin/echo/Makefile.am
+++ b/cygnal/cgi-bin/echo/Makefile.am
@@ -38,7 +38,8 @@ INCLUDES = \
 	-I$(top_srcdir)/cygnal \
         -I$(top_srcdir)/cygnal/libamf \
 	-I$(top_srcdir)/cygnal/libnet \
-	$(BOOST_CFLAGS)
+	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS)
 
 echo_la_SOURCES = echo.cpp echo.h
 echo_la_LDFLAGS = -module -avoid-version -no-undefined
diff --git a/cygnal/cgi-bin/oflaDemo/Makefile.am b/cygnal/cgi-bin/oflaDemo/Makefile.am
index 32d202f..e24a9fe 100644
--- a/cygnal/cgi-bin/oflaDemo/Makefile.am
+++ b/cygnal/cgi-bin/oflaDemo/Makefile.am
@@ -38,7 +38,8 @@ INCLUDES = \
 	-I$(top_srcdir)/cygnal \
         -I$(top_srcdir)/cygnal/libamf \
 	-I$(top_srcdir)/cygnal/libnet \
-	$(BOOST_CFLAGS)
+	$(BOOST_CFLAGS) \
+	$(PTHREAD_CFLAGS)
 
 oflaDemo_la_SOURCES = oflaDemo.cpp oflaDemo.h
 oflaDemo_la_LDFLAGS = -module -avoid-version -no-undefined
diff --git a/cygnal/http_server.cpp b/cygnal/http_server.cpp
index b8ae848..fde1cb8 100644
--- a/cygnal/http_server.cpp
+++ b/cygnal/http_server.cpp
@@ -257,9 +257,11 @@ HTTPServer::processGetRequest(Handler *hand, int fd, cygnal::Buffer *buf)
 	struct timespec end;
 	clock_gettime (CLOCK_REALTIME, &end);
 	double time = (end.tv_sec - start.tv_sec) + ((end.tv_nsec - start.tv_nsec)/1e9);
+	ios::fmtflags f(cerr.flags());
 	cerr << "File " << _filespec
 	     << " transferred " << filesize << " bytes in: " << fixed
 	     << time << " seconds for net fd #" << fd << endl;
+	cerr.flags(f);
 #endif
     }
     
diff --git a/cygnal/libamf/amf.cpp b/cygnal/libamf/amf.cpp
index 8b6aa2f..a49e645 100644
--- a/cygnal/libamf/amf.cpp
+++ b/cygnal/libamf/amf.cpp
@@ -189,7 +189,7 @@ AMF::encodeObject(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();
-	for (ait = props.begin(); ait != props.end(); ait++) {
+	for (ait = props.begin(); ait != props.end(); ++ait) {
 	    boost::shared_ptr<cygnal::Element> el = (*(ait));
 	    boost::shared_ptr<cygnal::Buffer> item = AMF::encodeElement(el);
 	    if (item) {
@@ -348,7 +348,7 @@ 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();
-	for (ait = props.begin(); ait != props.end(); ait++) {
+	for (ait = props.begin(); ait != props.end(); ++ait) {
 	    boost::shared_ptr<cygnal::Element> el = (*(ait));
 	    boost::shared_ptr<cygnal::Buffer> item = AMF::encodeElement(el);
 	    if (item) {
@@ -442,7 +442,7 @@ AMF::encodeECMAArray(const cygnal::Element &data)
 	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();
-	for (ait = props.begin(); ait != props.end(); ait++) {
+	for (ait = props.begin(); ait != props.end(); ++ait) {
 	    boost::shared_ptr<cygnal::Element> el = (*(ait));
 	    if (sparse) {
 		sparse = false;
@@ -548,7 +548,7 @@ AMF::encodeStrictArray(const cygnal::Element &data)
 	std::vector<boost::shared_ptr<cygnal::Element> > props = data.getProperties();
 	bool sparse = false;
 	size_t counter = 0;
-	for (ait = props.begin(); ait != props.end(); ait++) {
+	for (ait = props.begin(); ait != props.end(); ++ait) {
 	    counter++;
 	    boost::shared_ptr<cygnal::Element> el = (*(ait));
 #if 0
diff --git a/cygnal/libamf/amf_msg.cpp b/cygnal/libamf/amf_msg.cpp
index df1b785..f18c4ff 100644
--- a/cygnal/libamf/amf_msg.cpp
+++ b/cygnal/libamf/amf_msg.cpp
@@ -256,7 +256,7 @@ AMF_msg::encodeAMFPacket()
     // Now encode all the messages
 
     std::vector<boost::shared_ptr<AMF_msg::amf_message_t> >::iterator it;
-    for (it = _messages.begin(); it != _messages.end(); it++) {
+    for (it = _messages.begin(); it != _messages.end(); ++it) {
         boost::shared_ptr<AMF_msg::amf_message_t> msg = (*(it));
 
         boost::shared_ptr<cygnal::Buffer> buf2 = encodeMsgHeader(msg->header.target,
@@ -323,7 +323,7 @@ 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;
-    for (it = _messages.begin(); it != _messages.end(); it++) {
+    for (it = _messages.begin(); it != _messages.end(); ++it) {
         boost::shared_ptr<AMF_msg::amf_message_t> msg = (*(it));
         AMF_msg::dump(msg->header);
         msg->data->dump();
diff --git a/cygnal/libamf/element.cpp b/cygnal/libamf/element.cpp
index 81d131d..f87d452 100644
--- a/cygnal/libamf/element.cpp
+++ b/cygnal/libamf/element.cpp
@@ -968,7 +968,7 @@ Element::makeObject(std::vector<boost::shared_ptr<Element> > &data)
 //    GNASH_REPORT_FUNCTION;
     _type = Element::OBJECT_AMF0;
     std::vector<boost::shared_ptr<Element> >::const_iterator ait;
-    for (ait = data.begin(); ait != data.end(); ait++) {
+    for (ait = data.begin(); ait != data.end(); ++ait) {
 	boost::shared_ptr<Element> el = (*(ait));
 	addProperty(el);
 //	el->dump(os);
@@ -1556,7 +1556,7 @@ Element::dump(std::ostream& os) const
     if (_properties.size() > 0) {
 	std::vector<boost::shared_ptr<Element> >::const_iterator ait;
 	os << "# of Properties in object: " << _properties.size() << std::endl;
-	for (ait = _properties.begin(); ait != _properties.end(); ait++) {
+	for (ait = _properties.begin(); ait != _properties.end(); ++ait) {
 	    const boost::shared_ptr<Element> el = (*(ait));
 	    el->dump(os);
 	}
@@ -1575,7 +1575,7 @@ Element::findProperty(const std::string &name)
     if (_properties.size() > 0) {
 	std::vector<boost::shared_ptr<Element> >::iterator ait;
 //	cerr << "# of Properties in object: " << _properties.size() << endl;
-	for (ait = _properties.begin(); ait != _properties.end(); ait++) {
+	for (ait = _properties.begin(); ait != _properties.end(); ++ait) {
 	    boost::shared_ptr<Element> el = (*(ait));
 	    if (el->getName() == name) {
 		return el;
diff --git a/cygnal/libamf/flv.cpp b/cygnal/libamf/flv.cpp
index 1e8024e..0f8a206 100644
--- a/cygnal/libamf/flv.cpp
+++ b/cygnal/libamf/flv.cpp
@@ -312,7 +312,7 @@ Flv::findProperty(const std::string &name)
     if (_properties.size() > 0) {
 	std::vector<boost::shared_ptr<cygnal::Element> >::iterator ait;
 //	cerr << "# of Properties in object: " << _properties.size() << endl;
-	for (ait = _properties.begin(); ait != _properties.end(); ait++) {
+	for (ait = _properties.begin(); ait != _properties.end(); ++ait) {
 	    boost::shared_ptr<cygnal::Element> el = (*(ait));
 	    if (el->getName() == name) {
 		return el;
@@ -332,7 +332,7 @@ Flv::dump()
 	std::vector<boost::shared_ptr<cygnal::Element> >::iterator ait;
 	std::cerr << "# of Properties in object: " << _properties.size()
 	          << std::endl;
-	for (ait = _properties.begin(); ait != _properties.end(); ait++) {
+	for (ait = _properties.begin(); ait != _properties.end(); ++ait) {
 	    boost::shared_ptr<cygnal::Element> el = (*(ait));
             // an onMetaData packet of an FLV stream only contains number or
             // boolean bydefault
diff --git a/cygnal/libamf/lcshm.cpp b/cygnal/libamf/lcshm.cpp
index 70558d6..0a5d6f8 100644
--- a/cygnal/libamf/lcshm.cpp
+++ b/cygnal/libamf/lcshm.cpp
@@ -615,7 +615,7 @@ LcShm::send(const string&  name , const string&  domainname ,
 // Put this value into the header if necessary.
       int message_size=0;
       if (data.size()!=0){	
-		   for(iter = data.begin(); iter != data.end(); iter++){
+		   for(iter = data.begin(); iter != data.end(); ++iter){
 			    boost::shared_ptr<Buffer> buf = AMF::encodeElement(*iter);									
 				message_size+=buf->size();
 			}
@@ -659,7 +659,7 @@ LcShm::send(const string&  name , const string&  domainname ,
 
   	log_debug(_(" ***** The size of the data is %s *****"),data.size() ); 
       if (data.size()==0){	    	  
-		   for(iter = data.begin(); iter != data.end(); iter++){
+		   for(iter = data.begin(); iter != data.end(); ++iter){
 				// temporary buf for element
 				boost::shared_ptr<Buffer> buf = AMF::encodeElement(*iter);		
 				memcpy(ptr, buf->begin(), buf->size() );
@@ -789,7 +789,7 @@ LcShm::dump()
     cerr << "Domain Allowed:\t\t" << ((_object.domain) ? "true" : "false") << endl;
     vector<boost::shared_ptr<Element> >::iterator ait;
     cerr << "# of Elements in file: " << _amfobjs.size() << endl;
-    for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ait++) {
+    for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ++ait) {
 	boost::shared_ptr<Element> el = (*(ait));
         el->dump();
     }
@@ -797,7 +797,7 @@ LcShm::dump()
     vector<string>::const_iterator lit;
     auto_ptr< vector<string> > listeners ( listListeners() );
     cerr << "# of Listeners in file: " << listeners->size() << endl;
-    for (lit=listeners->begin(); lit!=listeners->end(); lit++) {
+    for (lit=listeners->begin(); lit!=listeners->end(); ++lit) {
         string str = *lit;
         if (str[0] != ':') {
             cerr << "Listeners:\t" << str << endl;
diff --git a/cygnal/libamf/sol.cpp b/cygnal/libamf/sol.cpp
index 0963dcd..e591de8 100644
--- a/cygnal/libamf/sol.cpp
+++ b/cygnal/libamf/sol.cpp
@@ -243,7 +243,7 @@ SOL::writeFile(const std::string &filespec, const std::string &name)
 	return false;
     }
 
-    for (ita = _amfobjs.begin(); ita != _amfobjs.end(); ita++) {
+    for (ita = _amfobjs.begin(); ita != _amfobjs.end(); ++ita) {
         boost::shared_ptr<cygnal::Element> el = (*(ita));
 	size += el->getNameSize() + el->getDataSize() + 7;
     }
@@ -254,7 +254,7 @@ SOL::writeFile(const std::string &filespec, const std::string &name)
     ptr = body.get();
     char* endPtr = ptr+size+20; // that's the amount we allocated..
 
-    for (ita = _amfobjs.begin(); ita != _amfobjs.end(); ita++) {
+    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); 
@@ -310,7 +310,7 @@ SOL::writeFile(const std::string &filespec, const std::string &name)
     memset(head.get(), 0, len);
     ptr = head.get();
     formatHeader(name);
-    for (it = _header.begin(); it != _header.end(); it++) {
+    for (it = _header.begin(); it != _header.end(); ++it) {
         *ptr++ = (*(it));
     }
     
@@ -445,7 +445,7 @@ SOL::updateSO(boost::shared_ptr<cygnal::Element> &newel)
 {
 //    GNASH_REPORT_FUNCTION;
     vector<boost::shared_ptr<cygnal::Element> >::iterator ita; 
-    for (ita = _amfobjs.begin(); ita != _amfobjs.end(); ita++) {
+    for (ita = _amfobjs.begin(); ita != _amfobjs.end(); ++ita) {
         boost::shared_ptr<cygnal::Element> oldel = (*(ita));
 	if (oldel == newel) {
 	    oldel = newel;
@@ -475,7 +475,7 @@ SOL::dump()
     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++) {
+    for (it = _amfobjs.begin(); it != _amfobjs.end(); ++it) {
 	boost::shared_ptr<cygnal::Element> el = (*(it));
         cerr << el->getName() << ": ";
         if (el->getType() == Element::STRING_AMF0) {
diff --git a/cygnal/libnet/cache.cpp b/cygnal/libnet/cache.cpp
index ffc9755..2a273ab 100644
--- a/cygnal/libnet/cache.cpp
+++ b/cygnal/libnet/cache.cpp
@@ -227,7 +227,7 @@ Cache::stats(bool xml) const
     }
     
     map<std::string, boost::shared_ptr<DiskStream> >::const_iterator data;
-    for (data = _files.begin(); data != _files.end(); 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));
 	if (xml) {
@@ -261,20 +261,20 @@ Cache::dump(std::ostream& os) const
     // Dump all the pathnames
     os << "Pathname cache has " << _pathnames.size() << " files." << endl;
     map<string, string>::const_iterator name;
-    for (name = _pathnames.begin(); name != _pathnames.end(); name++) {
+    for (name = _pathnames.begin(); name != _pathnames.end(); ++name) {
         os << "Full path for \"" << name->first << "\" is: " << name->second << endl;
     }
 
     // Dump the responses
     os << "Responses cache has " << _responses.size() << " files." << endl;
-    for (name = _responses.begin(); name != _responses.end(); name++) {
+    for (name = _responses.begin(); name != _responses.end(); ++name) {
         os << "Response for \"" << name->first << "\" is: " << name->second << endl;
     }
     
     os << "DiskStream cache has " << _files.size() << " files." << endl;
     
     map<std::string, boost::shared_ptr<DiskStream> >::const_iterator data;
-    for (data = _files.begin(); data != _files.end(); data++) {
+    for (data = _files.begin(); data != _files.end(); ++data) {
         boost::shared_ptr<DiskStream> filedata = data->second;
         os << "file info for \"" << data->first << "\" is: " << endl;
         filedata->dump();
diff --git a/cygnal/libnet/cque.cpp b/cygnal/libnet/cque.cpp
index 26b1750..baba956 100644
--- a/cygnal/libnet/cque.cpp
+++ b/cygnal/libnet/cque.cpp
@@ -165,7 +165,7 @@ CQue::remove(boost::shared_ptr<cygnal::Buffer> begin, boost::shared_ptr<cygnal::
     deque<boost::shared_ptr<cygnal::Buffer> >::iterator stop;
     boost::mutex::scoped_lock lock(_mutex);
     boost::shared_ptr<cygnal::Buffer> ptr;
-    for (it = _que.begin(); it != _que.end(); it++) {
+    for (it = _que.begin(); it != _que.end(); ++it) {
 	ptr = *(it);
 	if (ptr->reference() == begin->reference()) {
 	    start = it;
@@ -190,7 +190,7 @@ CQue::remove(boost::shared_ptr<cygnal::Buffer> element)
 	if (ptr->reference() == element->reference()) {
 	    it = _que.erase(it);
 	} else {
-	    it++;
+	    ++it;
 	}
     }
 }
@@ -265,7 +265,7 @@ CQue::dump()
     boost::mutex::scoped_lock lock(_mutex);
     std::cerr << std::endl << "CQue \"" << _name << "\" has "<< _que.size()
               << " buffers." << std::endl;
-    for (it = _que.begin(); it != _que.end(); it++) {
+    for (it = _que.begin(); it != _que.end(); ++it) {
 	boost::shared_ptr<cygnal::Buffer> ptr = *(it);
         ptr->dump();
     }
diff --git a/cygnal/libnet/network.cpp b/cygnal/libnet/network.cpp
index 0c1fc49..e6cb1d9 100644
--- a/cygnal/libnet/network.cpp
+++ b/cygnal/libnet/network.cpp
@@ -1282,7 +1282,7 @@ Network::erasePollFD(int fd)
     boost::mutex::scoped_lock lock(_poll_mutex);
     if (_pollfds.size() > 0) {
 	vector<struct pollfd>::iterator it;
-	for (it=_pollfds.begin(); it<_pollfds.end(); it++) {
+	for (it=_pollfds.begin(); it<_pollfds.end(); ++it) {
 	    if ((*it).fd == fd) {
 		_pollfds.erase(it);
 		break;
diff --git a/cygnal/libnet/rtmp.cpp b/cygnal/libnet/rtmp.cpp
index 11db3f3..aa29b1d 100644
--- a/cygnal/libnet/rtmp.cpp
+++ b/cygnal/libnet/rtmp.cpp
@@ -555,7 +555,7 @@ RTMP::dump()
     cerr << "RTMP packet contains " << _properties.size() << " variables." 
          << std::endl;
     AMFProperties::iterator it;
-    for (it = _properties.begin(); it != _properties.end(); it++) {
+    for (it = _properties.begin(); it != _properties.end(); ++it) {
 //	const char *name = it->first;
 	cygnal::Element el = it->second;
 	el.dump();
diff --git a/cygnal/libnet/rtmp_msg.cpp b/cygnal/libnet/rtmp_msg.cpp
index a606137..5ed624c 100644
--- a/cygnal/libnet/rtmp_msg.cpp
+++ b/cygnal/libnet/rtmp_msg.cpp
@@ -129,13 +129,13 @@ RTMPMsg::checkStatus(boost::shared_ptr<cygnal::Element>  /* el */)
 	vector<boost::shared_ptr<cygnal::Element> >::iterator pit;
 	vector<boost::shared_ptr<cygnal::Element> >::iterator cit;
 //	cerr << "# of Properties in object" << _amfobjs.size() << endl;
-	for (pit = _amfobjs.begin(); pit != _amfobjs.end(); pit++) {
+	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();
 //  	    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++) {
+		for (cit = props.begin(); cit != props.end(); ++cit) {
 		    boost::shared_ptr<cygnal::Element> child = (*(cit));
 //		    child->dump();
 		    std::string name = child->getName();
@@ -189,7 +189,7 @@ RTMPMsg::findProperty(const std::string &name)
     if (_amfobjs.size() > 0) {
 	vector<boost::shared_ptr<Element> >::iterator ait;
 //	cerr << "# of Properties in object: " << _properties.size() << endl;
-	for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ait++) {
+	for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ++ait) {
 	    boost::shared_ptr<cygnal::Element> el = (*(ait));
 	    boost::shared_ptr<cygnal::Element> prop = el->findProperty(name);
 	    if (prop) {
@@ -217,7 +217,7 @@ RTMPMsg::dump()
 
     vector<boost::shared_ptr<cygnal::Element> >::iterator ait;
     cerr << "# of Elements in file: " << _amfobjs.size() << endl;
-    for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ait++) {
+    for (ait = _amfobjs.begin(); ait != _amfobjs.end(); ++ait) {
 	boost::shared_ptr<cygnal::Element> el = (*(ait));
         el->dump();
     }
diff --git a/cygnal/libnet/statistics.cpp b/cygnal/libnet/statistics.cpp
index 4ef7263..58b6a94 100644
--- a/cygnal/libnet/statistics.cpp
+++ b/cygnal/libnet/statistics.cpp
@@ -107,7 +107,7 @@ Statistics::dump() {
     boost::mutex::scoped_lock lock(io_mutex);
     std::list<NetStats *>::iterator it;
 
-    for (it = _netstats.begin(); it != _netstats.end(); it++) {
+    for (it = _netstats.begin(); it != _netstats.end(); ++it) {
         NetStats *stats = (*it);
         if (stats->getFileType() <= VIDEO) {
             log_debug (_("Stream type is: %s"), filetype_names[stats->getFileType()]);
@@ -116,7 +116,7 @@ Statistics::dump() {
 //             stats->getCodec() <= VP7) {
 //             log_debug (_("Stream codec is: %s"), codec_names[stats->getCodec()]);
 //         }
-        log_debug (_("%d bytes were transfered in %s seconds"),
+        log_debug (_("%d bytes were transferred in %s seconds"),
 		 stats->getBytes(),
                  to_simple_string(stats->getTimeSpan()).c_str());
     }
diff --git a/cygnal/rtmp_server.cpp b/cygnal/rtmp_server.cpp
index 88d742d..553dcd8 100644
--- a/cygnal/rtmp_server.cpp
+++ b/cygnal/rtmp_server.cpp
@@ -1310,9 +1310,11 @@ RTMPServer::sendFile(int fd, const std::string &filespec)
 	struct timespec end;
 	clock_gettime (CLOCK_REALTIME, &end);
 	double time = (end.tv_sec - start.tv_sec) + ((end.tv_nsec - start.tv_nsec)/1e9);
+	ios::fmtflags f(cerr.flags());
 	cerr << "File " << _filespec
 	     << " transferred " << filesize << " bytes in: " << fixed
 	     << time << " seconds for net fd #" << fd << endl;
+	cerr.flags(f);
 #endif
     }    
 
@@ -1334,7 +1336,7 @@ RTMPServer::sendToClient(std::vector<int> &fds, boost::uint8_t *data,
     size_t ret = 0;
     
     std::vector<int>::iterator it;
-    for (it=fds.begin(); it< fds.end(); it++) {
+    for (it=fds.begin(); it< fds.end(); ++it) {
 	ret = writeNet(data, size);
     }
     
diff --git a/cygnal/testsuite/libamf.all/test_lc.cpp b/cygnal/testsuite/libamf.all/test_lc.cpp
index 52b72f0..8079bc9 100644
--- a/cygnal/testsuite/libamf.all/test_lc.cpp
+++ b/cygnal/testsuite/libamf.all/test_lc.cpp
@@ -191,7 +191,7 @@ test_listen()
     if (listeners->size() == 0) {
         cout << "Nobody is listening" << endl;
     } else {
-        for (it=listeners->begin(); it!=listeners->end(); it++) {
+        for (it=listeners->begin(); it!=listeners->end(); ++it) {
             string str = *it;
 	    if ((str[0] != ':') || (dbglogfile.getVerbosity() > 0)) {
 		cout << " Listeners: " << str << endl;
@@ -333,7 +333,7 @@ test_read()
     if (listeners->size() == 0) {
         cout << "Nobody is listening" << endl;
     } else {
-        for (it=listeners->begin(); it!=listeners->end(); it++) {
+        for (it=listeners->begin(); it!=listeners->end(); ++it) {
             string str = *it;
 	    if ((str[0] != ':') || (dbglogfile.getVerbosity() > 0)) {
 		cout << " Listeners: " << str << endl;
@@ -355,7 +355,7 @@ test_read()
     if (listeners->empty()) {
         cout << "Nobody is listening" << endl;
     } else {
-        for (it=listeners->begin(); it!=listeners->end(); it++) {
+        for (it=listeners->begin(); it!=listeners->end(); ++it) {
             string str = *it;
 	    if ((str[0] != ':') || (dbglogfile.getVerbosity() > 0)) {
 		cout << " Listeners: " << str << endl;
diff --git a/cygnal/testsuite/libnet.all/test_http.cpp b/cygnal/testsuite/libnet.all/test_http.cpp
index b6a7d29..1735269 100644
--- a/cygnal/testsuite/libnet.all/test_http.cpp
+++ b/cygnal/testsuite/libnet.all/test_http.cpp
@@ -151,7 +151,7 @@ tests()
     const char *data = "Keep-Alive";
     http.formatConnection(data);
 //    cerr << "FIXME: " << http.getHeader() << endl;
-    regcomp (&regex_pat, "Connection: [A-za-z-]*",
+    regcomp (&regex_pat, "Connection: [A-Za-z-]*",
              REG_NOSUB|REG_NEWLINE);
     if (regexec (&regex_pat, reinterpret_cast<const char*>(http.getHeader()), 0, (regmatch_t *)0, 0)) {
         runtest.fail ("HTTP::formatConnection()");
@@ -179,7 +179,7 @@ tests()
     data = "localhost:4080";
     http.formatHost(data);
 //    cerr << "FIXME: " << http.getHeader() << endl;
-    regcomp (&regex_pat, "Host: [A-za-z-]*:[0-9]*.*$",
+    regcomp (&regex_pat, "Host: [A-Za-z-]*:[0-9]*.*$",
              REG_NOSUB|REG_NEWLINE);
     if (regexec (&regex_pat, reinterpret_cast<const char*>(http.getHeader()), 0, (regmatch_t *)0, 0)) {
         runtest.fail ("HTTP::formatHost()");
diff --git a/desktop/gnash-splash.swf b/desktop/gnash-splash.swf
deleted file mode 100644
index 52a4c17..0000000
Binary files a/desktop/gnash-splash.swf and /dev/null differ
diff --git a/doc/C/gnash.man-xml b/doc/C/gnash.man-xml
index 49cc3f0..02cc158 100644
--- a/doc/C/gnash.man-xml
+++ b/doc/C/gnash.man-xml
@@ -312,13 +312,25 @@ gnash [option]... [URL]
     <listitem>
       <para>
 	Set file descriptors to use for external communications. x is
-	use by the player to send commands to the plugin, y is used
+	used by the player to send commands to the plugin, y is used
 	by the plugin to send commands to the standalone player.
       </para>
     </listitem>
   </varlistentry>
 
   <varlistentry>
+    <term>-C file</term>
+    <term>--cookie-file file</term>
+    <listitem>
+      <para>
+        Set cookiefile path. Cookiefile contains HTTP cookies to send to
+        the server. Primary use for this switch is for the NPAPI plugin
+        to pass received HTTP cookies to the standalone player.
+      </para>
+    </listitem>
+  </varlistentry>
+
+  <varlistentry>
     <term>--max-advances num</term>
     <listitem>
       <para>
diff --git a/doc/C/preformatted/gnash.1.in b/doc/C/preformatted/gnash.1.in
index 8f5d92d..a66c05d 100644
--- a/doc/C/preformatted/gnash.1.in
+++ b/doc/C/preformatted/gnash.1.in
@@ -113,6 +113,11 @@ Set file descriptors to use for external communications. x is
 use by the player to send commands to the plugin, y is used
 by the plugin to send commands to the standalone player.
 .TP 
+-C file, --cookie-file file
+Set cookiefile path. Cookiefile contains HTTP cookies to send to
+the server. Primary use for this switch is for the NPAPI plugin
+to pass received HTTP cookies to the standalone player.
+.TP
 --max-advances num
 Exit after specified number of frame advances.
 .TP 
diff --git a/doc/C/preformatted/gnashuser.html.in b/doc/C/preformatted/gnashuser.html.in
index dfd94a4..d7b24fe 100644
--- a/doc/C/preformatted/gnashuser.html.in
+++ b/doc/C/preformatted/gnashuser.html.in
@@ -253,6 +253,12 @@
 	      Primary use for this switch is for the NPAPI plugin to properly
 	      support javascript and target windows in geturl requests.
 	    </td></tr><tr><td align="left">
+	      <code class="option">-C, --cookie-file</code> <em class="replaceable"><code><file></code></em>
+	    </td><td align="left">
+              Set cookiefile path. Cookiefile contains HTTP cookies to send to
+              the server. Primary use for this switch is for the NPAPI plugin
+              to pass received HTTP cookies to the standalone player.
+	    </td></tr><tr><td align="left">
 	      <code class="option">--max-advances</code> <em class="replaceable"><code><num></code></em>
 	    </td><td align="left">
           Exit after the specified number of frame advances.
diff --git a/doc/C/usermanual/usage.xml b/doc/C/usermanual/usage.xml
index f90055c..6278b60 100644
--- a/doc/C/usermanual/usage.xml
+++ b/doc/C/usermanual/usage.xml
@@ -320,6 +320,16 @@
 	  </row>
 	  <row>
 	    <entry>
+	      <option>-C, --cookie-file</option> <replaceable><file></replaceable>
+	    </entry>
+	    <entry>
+              Set cookiefile path. Cookiefile contains HTTP cookies to send to
+              the server. Primary use for this switch is for the NPAPI plugin
+              to pass received HTTP cookies to the standalone player.
+	    </entry>
+	  </row>
+	  <row>
+	    <entry>
 	      <option>--max-advances</option> <replaceable><num></replaceable>
 	    </entry>
 	    <entry>
diff --git a/extensions/fileio/test.as b/extensions/fileio/test.as
index e4db955..770b623 100644
--- a/extensions/fileio/test.as
+++ b/extensions/fileio/test.as
@@ -24,8 +24,9 @@ file = new FileIO();
 // test stdio first
 
 buf = "Hello World!\n";
+fname = "/tmp/gnash_fileio_ext_test";
 
-if (file.fopen("/tmp/x", "w+")) {
+if (file.fopen(fname, "w+")) {
     pass("FileIO::open()");
 } else {
     fail("FileIO::open()");
@@ -111,5 +112,11 @@ if (file.puts(buf)) {
 // }
 //trace(b);
 
+var ret = file.unlink(fname);
+if ( true === ret ) {
+  pass("FileIO::unlink()");
+} else {
+  fail("FileIO::unlink(" + fname + ") returned " + ret);
+}
 
 totals();
diff --git a/extensions/gtk2/gtkext.cpp b/extensions/gtk2/gtkext.cpp
index c77a2e3..9e251b5 100644
--- a/extensions/gtk2/gtkext.cpp
+++ b/extensions/gtk2/gtkext.cpp
@@ -67,7 +67,7 @@ void dump_callbacks(map<string, as_value> &calls)
 //    GNASH_REPORT_FUNCTION;
     map<string, as_value>::const_iterator it;
     dbglogfile << "# of callbacks is: " << calls.size() << endl;
-    for (it=calls.begin(); it != calls.end(); it++) {
+    for (it=calls.begin(); it != calls.end(); ++it) {
 	string name = (*it).first;
 	as_value as = (*it).second;
 	dbglogfile << "Event \"" << name.c_str() << "\" has AS function" << as.to_string() << endl;
diff --git a/extensions/lirc/Makefile.am b/extensions/lirc/Makefile.am
index 0169a35..c2dd1f8 100644
--- a/extensions/lirc/Makefile.am
+++ b/extensions/lirc/Makefile.am
@@ -32,6 +32,7 @@ AM_CPPFLAGS = \
 	    -I$(top_srcdir)/libcore/asobj \
 	    -I$(top_srcdir)/cygnal/libnet \
 	    $(BOOST_CFLAGS) \
+	    $(PTHREAD_CFLAGS) \
 	    $(NULL)
 
 lirc_la_SOURCES = lirc_ext.cpp lirc_ext.h
diff --git a/extensions/mysql/Makefile.am b/extensions/mysql/Makefile.am
index 8956870..58c19de 100644
--- a/extensions/mysql/Makefile.am
+++ b/extensions/mysql/Makefile.am
@@ -31,6 +31,7 @@ AM_CPPFLAGS = \
             -I$(top_srcdir)/libcore/vm \
             -I$(top_srcdir)/libcore/asobj \
             $(BOOST_CFLAGS) \
+            $(PTHREAD_CFLAGS) \
             $(MYSQL_CFLAGS) \
 	    $(NULL)
 
diff --git a/gui/Player.h b/gui/Player.h
index d11f0f1..3763e2d 100644
--- a/gui/Player.h
+++ b/gui/Player.h
@@ -27,6 +27,7 @@
 #include "HostInterface.h"              // for HostInterface, FsCallback, etc
 #include "StringPredicates.h"           // for StringNoCaseLessThan
 #include "movie_definition.h"
+#include "NetworkAdapter.h"             // for setCookiesIn
 
 #include <boost/intrusive_ptr.hpp>
 #include <string>
@@ -160,6 +161,10 @@ public:
         return _controlfd;
     }
 
+    void setCookiesIn(const std::string& filename) {
+        NetworkAdapter::setCookiesIn(filename);
+    }
+
     void setStartFullscreen(bool x) {
         _startFullscreen = x;
     }
diff --git a/gui/fb/fb.cpp b/gui/fb/fb.cpp
index 41153d8..cdbeef5 100644
--- a/gui/fb/fb.cpp
+++ b/gui/fb/fb.cpp
@@ -393,7 +393,7 @@ FBGui::run()
         delay = static_cast<int>(100000/fps);
     } else {
         // 10ms per heart beat
-        delay = 10000;
+        delay = 1000;
     }
     // log_debug(_("Movie Frame Rate is %d, adjusting delay to %dms"), fps,
     //           _interval * delay);
@@ -402,7 +402,7 @@ FBGui::run()
     while (!terminate_request) {  
         // wait the "heartbeat" inteval. _interval is in milliseconds,
         // but gnashSleep() wants nanoseconds, so adjust by 1000.
-        gnashSleep(_interval * 1000);
+        gnashSleep(_interval * delay);
         // TODO: Do we need to check the real time slept or is it OK when we woke
         // up early because of some Linux signal sent to our process (and thus
         // "advance" faster than the "heartbeat" interval)? - Udo
@@ -585,6 +585,7 @@ FBGui::disable_terminal()
     if (ioctl(fd, VT_GETSTATE, &vts) == -1) {
         log_error(_("Could not get current VT state"));
         close(_fd);
+        _fd = -1;
         close(fd);
         return false;
     }
@@ -709,6 +710,7 @@ FBGui::enable_terminal()
     if (ioctl(fd, VT_ACTIVATE, _original_vt)) {
         log_error(_("Could not activate VT number %d"), _original_vt);
         close(_fd);
+        _fd = -1;
         close(fd);
         return false;
     }
diff --git a/gui/fb/fb_glue_ovg.cpp b/gui/fb/fb_glue_ovg.cpp
index 13e2175..42e1c0e 100644
--- a/gui/fb/fb_glue_ovg.cpp
+++ b/gui/fb/fb_glue_ovg.cpp
@@ -67,7 +67,7 @@ FBOvgGlue::init(int argc, char **argv[])
     boost::shared_array<renderer::GnashDevice::dtype_t> devs = probeDevices();
     if (devs) {
         int i = 0;
-        while (devs[i] != renderer::GnashDevice::NODEV) {
+        while (devs[i] != renderer::GnashDevice::GNASH_NODEV) {
             switch (devs[i++]) {
               case renderer::GnashDevice::EGL:
                   log_debug(_("Probing found an EGL display device"));
@@ -85,7 +85,7 @@ FBOvgGlue::init(int argc, char **argv[])
                   log_debug(_("Probing found a DirectFB display device"));
                   dfb = true;
                   break;
-              case renderer::GnashDevice::NODEV:
+              case renderer::GnashDevice::GNASH_NODEV:
               default:
                   log_error(_("No display devices found by probing!"));
                   break;
diff --git a/gui/fb/fbsup.h b/gui/fb/fbsup.h
index eeb5e8d..9e78908 100644
--- a/gui/fb/fbsup.h
+++ b/gui/fb/fbsup.h
@@ -151,11 +151,11 @@ public:
 
     // Information for System.capabilities to be reimplemented in
     // each gui.
-    double getPixelAspectRatio() { return 0; }
+    double getPixelAspectRatio() const { return 0; }
     int getScreenResX() { return 0; }
     int getScreenResY() { return 0; }
-    double getScreenDPI() { return 0; }
-    std::string getScreenColor() { return ""; }
+    double getScreenDPI() const { return 0; }
+    std::string getScreenColor() const { return ""; }
 
     // For the framebuffer, these are mostly just stubs.
 
diff --git a/gui/gnash.cpp b/gui/gnash.cpp
index f99ce50..94ed3b0 100644
--- a/gui/gnash.cpp
+++ b/gui/gnash.cpp
@@ -50,6 +50,7 @@
 #include "MediaHandler.h"
 #include "utility.h"
 #include "accumulator.h"
+#include "GnashFileUtilities.h"
 
 using std::endl;
 using std::cout;
@@ -75,6 +76,7 @@ namespace {
     void setupFlashVars(gnash::Player& p,
         const std::vector<std::string>& params);
     void setupFDs(gnash::Player& p, const std::string& fds);
+    void setupCookiesIn(gnash::Player& p, const std::string& cookiesIn);
 
     void usage_gui_keys(std::ostream& os);
     void usage(std::ostream& os, const po::options_description& opts);
@@ -224,6 +226,18 @@ setupFDs(gnash::Player& p, const std::string& fds)
 }
 
 void
+setupCookiesIn(gnash::Player& p, const std::string& cookiesIn) {
+    struct stat cstat;
+    if ((stat(cookiesIn.c_str(), &cstat) == -1) ||
+        ((cstat.st_mode & S_IFMT) != S_IFREG)) {
+        std::cerr << boost::format(_("Cookiefile %s does not exist or is not a"
+            " regular file\n")) % cookiesIn;
+        std::exit(EXIT_FAILURE);
+    }
+    p.setCookiesIn(cookiesIn);
+}
+
+void
 setupSoundAndRendering(gnash::Player& p, int i)
 {
     switch (i) {
@@ -424,6 +438,10 @@ getSupportedOptions(gnash::Player& p)
         + string(" <fd>:<fd>")
         ).c_str())
 
+    ("cookie-file,C", po::value<string>()
+        ->notifier(boost::bind(&setupCookiesIn, boost::ref(p), _1)),
+        _("Cookiefile to use"))
+
     ("max-advances", po::value<size_t>()
         ->notifier(boost::bind(&Player::setMaxAdvances, &p, _1)),
         _("Exit after specified number of frame advances"))
diff --git a/gui/gtk/gtk_glue_ovg.cpp b/gui/gtk/gtk_glue_ovg.cpp
index d2f2ba9..df4b4e1 100644
--- a/gui/gtk/gtk_glue_ovg.cpp
+++ b/gui/gtk/gtk_glue_ovg.cpp
@@ -82,7 +82,7 @@ GtkOvgGlue::init(int /*argc*/, char ** /*argv*/[])
     boost::shared_array<renderer::GnashDevice::dtype_t> devs = probeDevices();
     if (devs) {
         int i = 0;
-        while (devs[i] != renderer::GnashDevice::NODEV) {
+        while (devs[i] != renderer::GnashDevice::GNASH_NODEV) {
             switch (devs[i++]) {
               case renderer::GnashDevice::EGL:
                   log_debug(_("Probing found an EGL display device"));
@@ -100,7 +100,7 @@ GtkOvgGlue::init(int /*argc*/, char ** /*argv*/[])
                   log_debug(_("Probing found a DirectFB display device"));
                   dfb = true;
                   break;
-              case renderer::GnashDevice::NODEV:
+              case renderer::GnashDevice::GNASH_NODEV:
               default:
                   log_error(_("No display devices found by probing!"));
                   break;
diff --git a/gui/pythonmod/gnash-view.cpp b/gui/pythonmod/gnash-view.cpp
index 02dde2a..f1d23e5 100644
--- a/gui/pythonmod/gnash-view.cpp
+++ b/gui/pythonmod/gnash-view.cpp
@@ -90,7 +90,6 @@ static gboolean button_release_event_cb(GtkWidget *widget, GdkEventButton *event
 static gboolean motion_notify_event_cb(GtkWidget *widget, GdkEventMotion *event, gpointer data);
 
 static gnash::key::code gdk_to_gnash_key(guint key);
-static int gdk_to_gnash_modifier(int state);
 static gboolean gnash_view_advance_movie(GnashView *view);
 static void gnash_view_display(GnashView *view);
 static void gnash_view_load_movie(GnashView *view, const gchar *path);
@@ -583,6 +582,8 @@ gdk_to_gnash_key(guint key)
     return c;
 }
 
+#if 0 // UNUSED
+ static int gdk_to_gnash_modifier(int state); 
 static int
 gdk_to_gnash_modifier(int state)
 {
@@ -600,4 +601,5 @@ gdk_to_gnash_modifier(int state)
 
     return modifier;
 }
+#endif
 
diff --git a/gui/qt/Qt4Gui.cpp b/gui/qt/Qt4Gui.cpp
index 7b7af5e..b90dc4d 100644
--- a/gui/qt/Qt4Gui.cpp
+++ b/gui/qt/Qt4Gui.cpp
@@ -507,7 +507,7 @@ Qt4Gui::showProperties()
         if (newDepth == 0) {
             // Insert top level entries directly into the tree widget.
             items.append(item);
-            stack.empty();
+            stack.clear();
         } else {
             // The position to insert the new row.
             QTreeWidgetItem* parent = NULL;
diff --git a/libbase/Makefile.am b/libbase/Makefile.am
index 12b6a4c..92f168f 100644
--- a/libbase/Makefile.am
+++ b/libbase/Makefile.am
@@ -29,7 +29,6 @@ libgnashbase_la_SOURCES = \
 	BitsReader.h \
 	ClockTime.cpp \
 	ClockTime.h \
-	curl_adapter.cpp \
 	dsodefs.h \
 	GC.cpp \
 	GC.h \
@@ -58,6 +57,7 @@ libgnashbase_la_SOURCES = \
 	memory.cpp \
 	NamingPolicy.cpp \
 	NamingPolicy.h \
+	NetworkAdapter.cpp \
 	NetworkAdapter.h \
 	noseek_fd_adapter.cpp \
 	noseek_fd_adapter.h \
diff --git a/libbase/curl_adapter.cpp b/libbase/NetworkAdapter.cpp
similarity index 98%
rename from libbase/curl_adapter.cpp
rename to libbase/NetworkAdapter.cpp
index b5bdab4..881f4f4 100644
--- a/libbase/curl_adapter.cpp
+++ b/libbase/NetworkAdapter.cpp
@@ -35,6 +35,8 @@
 
 #include <iostream> // std::cerr
 
+std::string gnash::NetworkAdapter::CookiesIn;
+
 #ifndef USE_CURL
 
 namespace gnash {
@@ -181,16 +183,16 @@ private:
 
     /// Import cookies, if requested
     //
-    /// This method will lookup GNASH_COOKIES_IN
-    /// in the environment, and if existing, will
-    /// parse the file sending each line to a fake
-    /// easy handle created ad-hoc
+    /// This method will look up CookiesIn variable and will parse cookiefile
+    /// sending each line to a fake easy handle created ad-hoc.
+    /// For backward compatibility, GNASH_COOKIES_IN environment variable
+    /// will be looked up as well.
     ///
     void importCookies();
 
     /// Export cookies, if requested
     //
-    /// This method will lookup GNASH_COOKIES_OUT
+    /// This method will look up GNASH_COOKIES_OUT
     /// in the environment, and if existing, will
     /// create the file writing any cookie currently
     /// in the jar
@@ -1219,8 +1221,17 @@ CurlStreamFile::size() const
 void
 CurlSession::importCookies()
 {
-    const char* cookiesIn = std::getenv("GNASH_COOKIES_IN");
-    if ( ! cookiesIn ) return; // nothing to do
+    std::string cookiesIn = NetworkAdapter::getCookiesIn();
+
+    if (cookiesIn.empty()) {
+        // GNASH_COOKIES_IN envvar backward compatibility
+        const char* cookiesInEnv = std::getenv("GNASH_COOKIES_IN");
+        if (cookiesInEnv) {
+            cookiesIn = cookiesInEnv;
+        } else {
+            return; // nothing to do
+        }
+    }
 
     ////////////////////////////////////////////////////////////////
     //
@@ -1251,7 +1262,7 @@ CurlSession::importCookies()
     }
 
     // Configure the fake handle to read cookies from the specified file
-    ccode = curl_easy_setopt(fakeHandle, CURLOPT_COOKIEFILE, cookiesIn);
+    ccode = curl_easy_setopt(fakeHandle, CURLOPT_COOKIEFILE, cookiesIn.c_str());
     if ( ccode != CURLE_OK ) {
         throw GnashException(curl_easy_strerror(ccode));
     }
diff --git a/libbase/NetworkAdapter.h b/libbase/NetworkAdapter.h
index da4f287..5e83afb 100644
--- a/libbase/NetworkAdapter.h
+++ b/libbase/NetworkAdapter.h
@@ -89,7 +89,26 @@ public:
         return (names.find(headerName) == names.end());
     }
 
+    /// \brief
+    /// Set CookiesIn variable to cookiefile path.
+    //
+    /// @param cookiesin      Cookiefile path
+    static void setCookiesIn(const std::string& cookiesin) {
+        NetworkAdapter::CookiesIn = cookiesin;
+    }
+
+    /// \brief
+    /// Get CookiesIn variable, cookiefile path.
+    //
+    /// Returns the cookiefile path.
+    static const std::string& getCookiesIn() {
+        return NetworkAdapter::CookiesIn;
+    }
+
 private:
+    /// \brief
+    /// Variable to pass cookiefile path from command line to curl.
+    static std::string CookiesIn;
 
     static const ReservedNames& reservedNames();
 
diff --git a/libbase/RTMP.cpp b/libbase/RTMP.cpp
index cc5046f..068fc11 100644
--- a/libbase/RTMP.cpp
+++ b/libbase/RTMP.cpp
@@ -845,16 +845,20 @@ HandShaker::call()
         case 0:
             if (!stage0()) return;
             _stage = 1;
+            /* Fall through */
         case 1:
             if (!stage1()) return;
             _stage = 2;
+            /* Fall through */
         case 2:
             if (!stage2()) return;
             _stage = 3;
+            /* Fall through */
         case 3:
             if (!stage3()) return;
             log_debug("Handshake completed");
             _complete = true;
+	    break;
     }
 }
 
diff --git a/libbase/extension.cpp b/libbase/extension.cpp
index 45fab1d..3c2d70f 100644
--- a/libbase/extension.cpp
+++ b/libbase/extension.cpp
@@ -122,19 +122,16 @@ bool
 Extension::initModule(const std::string& module, as_object &where)
 {
 
-    SharedLib *sl;
-    std::string symbol(module);
-
-    log_security(_("Initializing module: \"%s\" from %s"), symbol, _pluginsdir);
+    log_security(_("Initializing module: \"%s\" from %s"), module, _pluginsdir);
     
-    if (_plugins[module] == 0) {
-        sl = new SharedLib(_pluginsdir + "/" + module);
-        sl->openLib();
-        _plugins[module] = sl;
-    } else {
-        sl = _plugins[module];
-    }
+    SharedLib *sl = _plugins[module];
+
+    if (sl == 0) {
+        sl = _plugins[module] = new SharedLib(_pluginsdir + "/" + module);
+        if ( ! sl->openLib() ) return false;
+    } 
     
+    std::string symbol(module);
     symbol.append("_class_init");
     
     SharedLib::initentry *symptr = sl->getInitEntry(symbol);
@@ -154,17 +151,14 @@ Extension::initModuleWithFunc(const std::string& module,
 {
 //    GNASH_REPORT_FUNCTION;
 
-    SharedLib *sl;
-
     log_security(_("Initializing module: \"%s\""), module);
 
-    if (_plugins[module] == 0) {
-        sl = new SharedLib(module);
-        sl->openLib();
-        _plugins[module] = sl;
-    } else {
-        sl = _plugins[module];
-    }
+    SharedLib *sl = _plugins[module];
+
+    if (sl == 0) {
+        sl = _plugins[module] = new SharedLib(module);
+        if ( ! sl->openLib() ) return false;
+    } 
 
     SharedLib::initentry *symptr = sl->getInitEntry(func);
 
diff --git a/libbase/tree.hh b/libbase/tree.hh
index 3b110bc..f0bdc9e 100644
--- a/libbase/tree.hh
+++ b/libbase/tree.hh
@@ -1,16 +1,20 @@
 
 //	STL-like templated tree class.
 //
-// Copyright (C) 2001-2009 Kasper Peeters <kasper.peeters at aei.mpg.de>
-// Distributed under the GNU General Public License version 3,
-// (eventually to be changed to the Boost Software License).
+// Copyright (C) 2001-2011 Kasper Peeters <kasper at phi-sci.com>
+// Distributed under the GNU General Public License version 3.
+//
+// When used together with the htmlcxx library to create 
+// HTML::Node template instances, the GNU Lesser General Public 
+// version 2 applies. Special permission to use tree.hh under
+// the LGPL for other projects can be requested from the author.
 
 /** \page tree.hh
     \author   Kasper Peeters
-    \version  2.65
-    \date     03-Apr-2009
-    \see      http://www.aei.mpg.de/~peekas/tree/
-    \see      http://www.aei.mpg.de/~peekas/tree/ChangeLog
+    \version  2.81
+    \date     23-Aug-2011
+    \see      http://tree.phi-sci.com/
+    \see      http://tree.phi-sci.com/ChangeLog
 
    The tree.hh library for C++ provides an STL-like container class
    for n-ary trees, templated over the data stored at the
@@ -31,42 +35,34 @@
 #include <set>
 #include <queue>
 #include <algorithm>
+#include <cstddef>
 
-// HP-style construct/destroy have gone from the standard,
-// so here is a copy.
-
-namespace kp {
-
-template <class T1, class T2>
-void constructor(T1* p, T2& val) 
-	{
-	new ((void *) p) T1(val);
-	}
-
-template <class T1>
-void constructor(T1* p) 
-	{
-	new ((void *) p) T1;
-	}
-
-template <class T1>
-void destructor(T1* p)
-	{
-	p->~T1();
-	}
-
-}
 
 /// A node in the tree, combining links to other nodes as well as the actual data.
 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> *parent;
 	   tree_node_<T> *first_child, *last_child;
 		tree_node_<T> *prev_sibling, *next_sibling;
 		T data;
 }; // __attribute__((packed));
 
+template<class T>
+tree_node_<T>::tree_node_()
+	: parent(0), first_child(0), last_child(0), prev_sibling(0), next_sibling(0)
+	{
+	}
+
+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)
+	{
+	}
+
 template <class T, class tree_node_allocator = std::allocator<tree_node_<T> > >
 class tree {
 	protected:
@@ -86,7 +82,7 @@ class tree {
 		tree(const iterator_base&);
 		tree(const tree<T, tree_node_allocator>&);
 		~tree();
-		void operator=(const tree<T, tree_node_allocator>&);
+		tree<T,tree_node_allocator>& operator=(const tree<T, tree_node_allocator>&);
 
       /// Base class for iterators, only pointers stored, no traversal logic.
 #ifdef __SGI_STL_PORT
@@ -390,6 +386,9 @@ class tree {
 									  const iterator_base& end) const;
 		/// Determine whether the iterator is an 'end' iterator and thus not actually pointing to a node.
 		bool     is_valid(const iterator_base&) const;
+		/// Find the lowest common ancestor of two nodes, that is, the deepest node such that
+		/// both nodes are descendants of it.
+		iterator lowest_common_ancestor(const iterator_base&, const iterator_base &) const;
 
 		/// Determine the index of a node in the range of siblings to which it belongs.
 		unsigned int index(sibling_iterator it) const;
@@ -398,6 +397,10 @@ class tree {
 		/// Return iterator to the sibling indicated by index
 		sibling_iterator sibling(const iterator_base& position, unsigned int);  				
 		
+		/// For debugging only: verify internal consistency by inspecting all pointers in the tree
+		/// (which will also trigger a valgrind error in case something got corrupted).
+		void debug_verify_consistency() const;
+		
 		/// Comparator class for iterators (compares pointer values; why doesn't this work automatically?)
 		class iterator_base_less {
 			public:
@@ -495,6 +498,8 @@ template <class T, class tree_node_allocator>
 tree<T, tree_node_allocator>::~tree()
 	{
 	clear();
+	alloc_.destroy(head);
+	alloc_.destroy(feet);
 	alloc_.deallocate(head,1);
 	alloc_.deallocate(feet,1);
 	}
@@ -504,6 +509,8 @@ 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);
+	alloc_.construct(head, tree_node_<T>());
+	alloc_.construct(feet, tree_node_<T>());
 
    head->parent=0;
    head->first_child=0;
@@ -519,9 +526,11 @@ void tree<T, tree_node_allocator>::head_initialise_()
    }
 
 template <class T, class tree_node_allocator>
-void tree<T, tree_node_allocator>::operator=(const tree<T, tree_node_allocator>& other)
+tree<T,tree_node_allocator>& tree<T, tree_node_allocator>::operator=(const tree<T, tree_node_allocator>& other)
 	{
-	copy_(other);
+	if(this != &other)
+		copy_(other);
+	return *this;
 	}
 
 template <class T, class tree_node_allocator>
@@ -573,7 +582,8 @@ void tree<T, tree_node_allocator>::erase_children(const iterator_base& it)
 		prev=cur;
 		cur=cur->next_sibling;
 		erase_children(pre_order_iterator(prev));
-		kp::destructor(&prev->data);
+//		kp::destructor(&prev->data);
+		alloc_.destroy(prev);
 		alloc_.deallocate(prev,1);
 		}
 	it.node->first_child=0;
@@ -604,7 +614,8 @@ iter tree<T, tree_node_allocator>::erase(iter it)
 		cur->next_sibling->prev_sibling=cur->prev_sibling;
 		}
 
-	kp::destructor(&cur->data);
+//	kp::destructor(&cur->data);
+	alloc_.destroy(cur);
    alloc_.deallocate(cur,1);
 	return ret;
 	}
@@ -827,10 +838,12 @@ template <typename iter>
 iter tree<T, tree_node_allocator>::append_child(iter position)
  	{
 	assert(position.node!=head);
+	assert(position.node!=feet);
 	assert(position.node);
 
 	tree_node *tmp=alloc_.allocate(1,0);
-	kp::constructor(&tmp->data);
+	alloc_.construct(tmp, tree_node_<T>());
+//	kp::constructor(&tmp->data);
 	tmp->first_child=0;
 	tmp->last_child=0;
 
@@ -852,10 +865,12 @@ template <typename iter>
 iter tree<T, tree_node_allocator>::prepend_child(iter position)
  	{
 	assert(position.node!=head);
+	assert(position.node!=feet);
 	assert(position.node);
 
 	tree_node *tmp=alloc_.allocate(1,0);
-	kp::constructor(&tmp->data);
+	alloc_.construct(tmp, tree_node_<T>());
+//	kp::constructor(&tmp->data);
 	tmp->first_child=0;
 	tmp->last_child=0;
 
@@ -881,10 +896,12 @@ iter tree<T, tree_node_allocator>::append_child(iter position, const T& x)
 	// using 'insert'. See the documentation for further information, and sorry about
 	// the API change.
 	assert(position.node!=head);
+	assert(position.node!=feet);
 	assert(position.node);
 
 	tree_node* tmp = alloc_.allocate(1,0);
-	kp::constructor(&tmp->data, x);
+	alloc_.construct(tmp, x);
+//	kp::constructor(&tmp->data, x);
 	tmp->first_child=0;
 	tmp->last_child=0;
 
@@ -906,10 +923,12 @@ template <class iter>
 iter tree<T, tree_node_allocator>::prepend_child(iter position, const T& x)
 	{
 	assert(position.node!=head);
+	assert(position.node!=feet);
 	assert(position.node);
 
 	tree_node* tmp = alloc_.allocate(1,0);
-	kp::constructor(&tmp->data, x);
+	alloc_.construct(tmp, x);
+//	kp::constructor(&tmp->data, x);
 	tmp->first_child=0;
 	tmp->last_child=0;
 
@@ -931,6 +950,7 @@ template <class iter>
 iter tree<T, tree_node_allocator>::append_child(iter position, iter other)
 	{
 	assert(position.node!=head);
+	assert(position.node!=feet);
 	assert(position.node);
 
 	sibling_iterator aargh=append_child(position, value_type());
@@ -942,6 +962,7 @@ template <class iter>
 iter tree<T, tree_node_allocator>::prepend_child(iter position, iter other)
 	{
 	assert(position.node!=head);
+	assert(position.node!=feet);
 	assert(position.node);
 
 	sibling_iterator aargh=prepend_child(position, value_type());
@@ -953,6 +974,7 @@ template <class iter>
 iter tree<T, tree_node_allocator>::append_children(iter position, sibling_iterator from, sibling_iterator to)
 	{
 	assert(position.node!=head);
+	assert(position.node!=feet);
 	assert(position.node);
 
 	iter ret=from;
@@ -969,6 +991,7 @@ template <class iter>
 iter tree<T, tree_node_allocator>::prepend_children(iter position, sibling_iterator from, sibling_iterator to)
 	{
 	assert(position.node!=head);
+	assert(position.node!=feet);
 	assert(position.node);
 
 	iter ret=from;
@@ -996,7 +1019,8 @@ iter tree<T, tree_node_allocator>::insert(iter position, const T& x)
 		                    // insert before the feet.
 		}
 	tree_node* tmp = alloc_.allocate(1,0);
-	kp::constructor(&tmp->data, x);
+	alloc_.construct(tmp, x);
+//	kp::constructor(&tmp->data, x);
 	tmp->first_child=0;
 	tmp->last_child=0;
 
@@ -1018,7 +1042,8 @@ template <class T, class tree_node_allocator>
 typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::insert(sibling_iterator position, const T& x)
 	{
 	tree_node* tmp = alloc_.allocate(1,0);
-	kp::constructor(&tmp->data, x);
+	alloc_.construct(tmp, x);
+//	kp::constructor(&tmp->data, x);
 	tmp->first_child=0;
 	tmp->last_child=0;
 
@@ -1048,7 +1073,8 @@ template <class iter>
 iter tree<T, tree_node_allocator>::insert_after(iter position, const T& x)
 	{
 	tree_node* tmp = alloc_.allocate(1,0);
-	kp::constructor(&tmp->data, x);
+	alloc_.construct(tmp, x);
+//	kp::constructor(&tmp->data, x);
 	tmp->first_child=0;
 	tmp->last_child=0;
 
@@ -1101,8 +1127,11 @@ template <class T, class tree_node_allocator>
 template <class iter>
 iter tree<T, tree_node_allocator>::replace(iter position, const T& x)
 	{
-	kp::destructor(&position.node->data);
-	kp::constructor(&position.node->data, x);
+//	kp::destructor(&position.node->data);
+//	kp::constructor(&position.node->data, x);
+	position.node->data=x;
+//	alloc_.destroy(position.node);
+//	alloc_.construct(position.node, x);
 	return position;
 	}
 
@@ -1120,7 +1149,8 @@ iter tree<T, tree_node_allocator>::replace(iter position, const iterator_base& f
 	erase_children(position);	
 //	std::cout << "no warning!" << std::endl;
 	tree_node* tmp = alloc_.allocate(1,0);
-	kp::constructor(&tmp->data, (*from));
+	alloc_.construct(tmp, (*from));
+//	kp::constructor(&tmp->data, (*from));
 	tmp->first_child=0;
 	tmp->last_child=0;
 	if(current_to->prev_sibling==0) {
@@ -1140,7 +1170,8 @@ iter tree<T, tree_node_allocator>::replace(iter position, const iterator_base& f
 		}
 	tmp->next_sibling=current_to->next_sibling;
 	tmp->parent=current_to->parent;
-	kp::destructor(&current_to->data);
+//	kp::destructor(&current_to->data);
+	alloc_.destroy(current_to);
 	alloc_.deallocate(current_to,1);
 	current_to=tmp;
 	
@@ -1417,6 +1448,10 @@ template <typename iter> iter tree<T, tree_node_allocator>::move_ontop(iter targ
 
 	if(dst==src) return source;
 
+//	if(dst==src->prev_sibling) {
+//
+//		}
+
 	// remember connection points
 	tree_node *b_prev_sibling=dst->prev_sibling;
 	tree_node *b_next_sibling=dst->next_sibling;
@@ -1822,6 +1857,29 @@ bool tree<T, tree_node_allocator>::is_valid(const iterator_base& it) const
 	}
 
 template <class T, class tree_node_allocator>
+typename tree<T, tree_node_allocator>::iterator tree<T, tree_node_allocator>::lowest_common_ancestor(
+	const iterator_base& one, const iterator_base& two) const
+	{
+	std::set<iterator, iterator_base_less> parents;
+
+	// Walk up from 'one' storing all parents.
+	iterator walk=one;
+	do {
+		walk=parent(walk);
+		parents.insert(walk);
+		} while( is_valid(parent(walk)) );
+
+	// Walk up from 'two' until we encounter a node in parents.
+	walk=two;
+	do {
+		walk=parent(walk);
+		if(parents.find(walk) != parents.end()) break;
+		} while( is_valid(parent(walk)) );
+
+	return walk;
+	}
+
+template <class T, class tree_node_allocator>
 unsigned int tree<T, tree_node_allocator>::index(sibling_iterator it) const
 	{
 	unsigned int ind=0;
@@ -1862,6 +1920,24 @@ typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_alloca
    return tmp;
    }
  
+template <class T, class tree_node_allocator>
+void tree<T, tree_node_allocator>::debug_verify_consistency() const
+	{
+	iterator it=begin();
+	while(it!=end()) {
+		if(it.node->parent!=0) {
+			if(it.node->prev_sibling==0) 
+				assert(it.node->parent->first_child==it.node);
+			else 
+				assert(it.node->prev_sibling->next_sibling==it.node);
+			if(it.node->next_sibling==0) 
+				assert(it.node->parent->last_child==it.node);
+			else
+				assert(it.node->next_sibling->prev_sibling==it.node);
+			}
+		++it;
+		}
+	}
 
 template <class T, class tree_node_allocator>
 typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::child(const iterator_base& it, unsigned int num) 
@@ -2704,4 +2780,3 @@ typename tree<T, tree_node_allocator>::leaf_iterator& tree<T, tree_node_allocato
    }
 
 #endif
-
diff --git a/libcore/DisplayObjectContainer.cpp b/libcore/DisplayObjectContainer.cpp
index 65ef7f9..64e8a7d 100644
--- a/libcore/DisplayObjectContainer.cpp
+++ b/libcore/DisplayObjectContainer.cpp
@@ -29,7 +29,6 @@
 #include "DisplayList.h" 
 #include "InteractiveObject.h"
 #include "log.h"
-#include "dsodefs.h" // for DSOEXPORT
 
 namespace gnash {
 
diff --git a/libcore/ExternalInterface.cpp b/libcore/ExternalInterface.cpp
index 212c07a..54b749f 100644
--- a/libcore/ExternalInterface.cpp
+++ b/libcore/ExternalInterface.cpp
@@ -28,6 +28,10 @@
 #include <boost/scoped_array.hpp>
 #include <algorithm>
 
+#ifdef SOLARIS_HOST
+# include <sys/filio.h> // for FIONREAD
+#endif
+
 #include "GnashSystemNetHeaders.h"
 #include "GnashSystemFDHeaders.h"
 
diff --git a/libcore/MovieLoader.cpp b/libcore/MovieLoader.cpp
index e9f816e..21234d9 100644
--- a/libcore/MovieLoader.cpp
+++ b/libcore/MovieLoader.cpp
@@ -45,6 +45,7 @@ namespace gnash {
 
 MovieLoader::MovieLoader(movie_root& mr)
     :
+    _killed(false),
     _movieRoot(mr),
     _thread(0),
     _barrier(2) // main and loader thread
diff --git a/libcore/Video.cpp b/libcore/Video.cpp
index 89c7262..7f992db 100644
--- a/libcore/Video.cpp
+++ b/libcore/Video.cpp
@@ -177,7 +177,7 @@ Video::getVideoFrame()
 		_lastDecodedVideoFrameNum = current_frame;
 
 #ifdef DEBUG_EMBEDDED_VIDEO_DECODING
-		log_debug("  decoding embedded frames from %d to %d"
+		log_debug("  decoding embedded frames from %d to %d "
                           "for Video object %s", from_frame,
                           current_frame, getTarget());
 #endif
diff --git a/libcore/as_value.cpp b/libcore/as_value.cpp
index 1a85c7b..98b347c 100644
--- a/libcore/as_value.cpp
+++ b/libcore/as_value.cpp
@@ -1043,7 +1043,10 @@ operator<<(std::ostream& o, const as_value& v)
             return o << "[null]";
         case as_value::BOOLEAN:
         {
-            return o << "[bool:" << std::boolalpha << v.getBool() << "]";
+            std::ios::fmtflags f(o.flags());
+            o << "[bool:" << std::boolalpha << v.getBool() << "]";
+            o.flags(f);
+            return o;
         }
         case as_value::OBJECT:
         {
diff --git a/libcore/asobj/Date_as.cpp b/libcore/asobj/Date_as.cpp
index 4b856e2..ee5d12b 100644
--- a/libcore/asobj/Date_as.cpp
+++ b/libcore/asobj/Date_as.cpp
@@ -463,6 +463,7 @@ date_new(const fn_call& fn)
                 log_aserror(_("Date constructor called with more than 7 "
                         "arguments"));
                 )
+                /* Fall through */
             case 7:
                 // fractions of milliseconds are ignored
                 gt.millisecond = toInt(fn.arg(6), getVM(fn));
@@ -1250,6 +1251,7 @@ date_UTC(const fn_call& fn) {
             IF_VERBOSE_ASCODING_ERRORS(
                 log_aserror(_("Date.UTC was called with more than 7 arguments"));
             )
+            /* Fall through */
         case 7:
             // millisecs is double, but fractions of millisecs are ignored.
             gt.millisecond = toInt(fn.arg(6), getVM(fn));
diff --git a/libcore/asobj/MovieClip_as.cpp b/libcore/asobj/MovieClip_as.cpp
index 087182a..3b8c0f4 100644
--- a/libcore/asobj/MovieClip_as.cpp
+++ b/libcore/asobj/MovieClip_as.cpp
@@ -1118,6 +1118,7 @@ movieclip_getURL(const fn_call& fn)
                     "dropped"), os.str());
             );
         }
+            /* Fall through */
         case 3:
             // This argument has already been handled.
         case 2:
diff --git a/libcore/asobj/NetConnection_as.cpp b/libcore/asobj/NetConnection_as.cpp
index 3d56a69..2c9a160 100644
--- a/libcore/asobj/NetConnection_as.cpp
+++ b/libcore/asobj/NetConnection_as.cpp
@@ -283,18 +283,33 @@ public:
     virtual void call(as_object* asCallback, const std::string& methodName,
             const std::vector<as_value>& args)
     {
-        SimpleBuffer buf;
-        amf::Writer aw(buf);
-        aw.writeString(methodName);
-        const size_t id = asCallback ? callNo() : 0;
-        aw.writeNumber(id);
-
-        for (size_t i = 0; i < args.size(); ++i) {
-            args[i].writeAMF0(aw);
+
+        if(methodName == "play") {
+            SimpleBuffer buf;
+            amf::Writer aw(buf);
+            aw.writeString("play");
+            aw.writeNumber(0);
+            aw.writeNull();
+            for (size_t i = 0; i < args.size(); ++i) {
+               args[i].writeAMF0(aw);
+            }
+           // TODO Use the play method and the streamId from createStream
+           _rtmp.call(buf);
         }
-        _rtmp.call(buf);
-        if (asCallback) {
-            pushCallback(id, asCallback);
+        else {
+            SimpleBuffer buf;
+            amf::Writer aw(buf);
+            aw.writeString(methodName);
+            const size_t id = asCallback ? callNo() : 0;
+            aw.writeNumber(id);
+
+            for (size_t i = 0; i < args.size(); ++i) {
+               args[i].writeAMF0(aw);
+            }
+           _rtmp.call(buf);
+            if (asCallback) {
+                pushCallback(id, asCallback);
+            }
         }
     }
 
@@ -476,6 +491,20 @@ NetConnection_as::connect()
 }
 
 
+bool 
+NetConnection_as::isRTMP () {
+
+    const RunResources& r = getRunResources(owner());
+    URL url(_uri, r.streamProvider().baseURL());
+    if (url.protocol() == "rtmp") {
+    
+         return true;
+    } else {
+     
+         return false;
+    }
+}
+
 bool
 NetConnection_as::connect(const std::string& uri)
 {
@@ -576,23 +605,59 @@ NetConnection_as::call(as_object* asCallback, const std::string& methodName,
     startAdvanceTimer();
 }
 
+void
+NetConnection_as::createStream(as_object* asCallback) {
+    
+    if (! this -> isRTMP()) {
+        return;
+    } 
+
+    if (!_currentConnection.get()) {
+        IF_VERBOSE_ASCODING_ERRORS(
+            log_aserror(_("NetConnection.call: can't call while not connected"));
+        );
+        return;
+    }
+   
+    std::string methodName = "createStream"; 
+    _currentConnection -> call(asCallback, methodName,
+		    std::vector<as_value>());
+
+    startAdvanceTimer();
+}
+
 std::auto_ptr<IOChannel>
 NetConnection_as::getStream(const std::string& name)
 {
     const RunResources& ri = getRunResources(owner());
 
     const StreamProvider& streamProvider = ri.streamProvider();
-
-    // Construct URL with base URL (assuming not connected to RTMP server..)
-    // TODO: For RTMP return the named stream from an existing RTMP connection.
-    // If name is a full or relative URL passed from NetStream.play(), it
-    // must be constructed against the base URL, not the NetConnection uri,
-    // which should always be null in this case.
+    
     const RcInitFile& rcfile = RcInitFile::getDefaultInstance();
-
-    URL url(name, streamProvider.baseURL());
-
-    return streamProvider.getStream(url, rcfile.saveStreamingMedia());
+    
+    if(isRTMP())
+    {
+        // Handling RTMP connections separately. Correcting the url
+        // TODO: For RTMP return the named stream from an existing RTMP connection.
+        as_object *obj = &owner(); // Use the callBack of the object to get the streamId
+        createStream(obj);//Create Stream called
+        // USe streamId in the call of play
+        std::vector<as_value> args;
+        args.push_back(name); // TODO Add args[1] to be the return from createStream 
+        _currentConnection->call(obj, "play", args);
+        std::string rtmpUrl = _uri + "/" + name;
+        URL url(rtmpUrl, streamProvider.baseURL());
+        return streamProvider.getStream(url, rcfile.saveStreamingMedia());
+    }
+    else 
+    { 
+        // Construct URL with base URL (assuming not connected to RTMP server..)
+        // If name is a full or relative URL passed from NetStream.play(), it
+        // must be constructed against the base URL, not the NetConnection uri,
+        // which should always be null in this case.
+        URL url(name, streamProvider.baseURL());
+        return streamProvider.getStream(url, rcfile.saveStreamingMedia());
+    }
 
 }
 
@@ -1216,7 +1281,7 @@ HTTPConnection::call(as_object* asCallback, const std::string& methodName,
         pushCallback(callID, asCallback);
     }
 }
-
+ 
 void
 RTMPConnection::handleInvoke(const boost::uint8_t* payload,
         const boost::uint8_t* end)
diff --git a/libcore/asobj/NetConnection_as.h b/libcore/asobj/NetConnection_as.h
index e0baadc..f053b7e 100644
--- a/libcore/asobj/NetConnection_as.h
+++ b/libcore/asobj/NetConnection_as.h
@@ -111,6 +111,10 @@ public:
 
 private:
 
+    bool isRTMP();
+
+    void createStream(as_object* asCallback);
+
     /// Extend the URL to be used for playing
     void addToURL(const std::string& url);
 
diff --git a/libcore/asobj/TextFormat_as.cpp b/libcore/asobj/TextFormat_as.cpp
index 7d1e60c..c09e5bb 100644
--- a/libcore/asobj/TextFormat_as.cpp
+++ b/libcore/asobj/TextFormat_as.cpp
@@ -406,6 +406,7 @@ textformat_new(const fn_call& fn)
 	{
 	    default:
 	        log_error(_("Too many args (%d) passed to TextFormat"), args);
+	        /* Fall through */
 	    case 13:
 	        tf->leadingSet(pixelsToTwips(toInt(fn.arg(12), getVM(fn))));
 	    case 12:
diff --git a/libcore/asobj/XMLNode_as.cpp b/libcore/asobj/XMLNode_as.cpp
index 2aee2da..9865783 100644
--- a/libcore/asobj/XMLNode_as.cpp
+++ b/libcore/asobj/XMLNode_as.cpp
@@ -83,7 +83,8 @@ XMLNode_as::XMLNode_as(Global_as& gl)
     _parent(0),
     _attributes(new as_object(gl)),
     _childNodes(0),
-    _type(Element)
+    _type(Element),
+    _gcMarkInProgress(false)
 {
 }
 
@@ -96,7 +97,8 @@ XMLNode_as::XMLNode_as(const XMLNode_as& tpl, bool deep)
     _childNodes(0),
     _name(tpl._name),
     _value(tpl._value),
-    _type(tpl._type)
+    _type(tpl._type),
+    _gcMarkInProgress(false)
 {
     // only clone children if in deep mode
     if (deep) {
@@ -113,7 +115,12 @@ XMLNode_as::~XMLNode_as()
     // In practice it is quite likely that the child will be garbage-collected
     // before the parent. See Savannah bug #39404.
     if (_parent ) {
-        _parent->removeChild(this);
+        // NOTE: do not removeChild as it makes too much
+        //       noise including calls to string_table
+        //       (due to updateChildNodes)
+        // See https://savannah.gnu.org/bugs/?40439
+        _parent->_children.remove(this);
+        _parent = 0; 
     }
 
     clearChildren();
@@ -475,6 +482,10 @@ 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
@@ -487,7 +498,6 @@ XMLNode_as::setReachable()
     if (_object) _object->setReachable();
 
     if (_childNodes) _childNodes->setReachable();
-
 }
 
 void
diff --git a/libcore/asobj/XMLNode_as.h b/libcore/asobj/XMLNode_as.h
index 030d537..45c7254 100644
--- a/libcore/asobj/XMLNode_as.h
+++ b/libcore/asobj/XMLNode_as.h
@@ -266,6 +266,25 @@ 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/parser/SWFParser.cpp b/libcore/parser/SWFParser.cpp
index f8bba02..d897efd 100644
--- a/libcore/parser/SWFParser.cpp
+++ b/libcore/parser/SWFParser.cpp
@@ -152,10 +152,12 @@ dumpTagBytes(SWFStream& in, std::ostream& os)
         }
         
         // Stream once as hex
+        std::ios::fmtflags f(os.flags());
         os << std::left << std::setw(3 * rowlength) << hexify(buf, got, false);
         
         // and once as ASCII
         os << "| " << hexify(buf, got, true) << std::endl;
+        os.flags(f);
 
         toRead -= got;
     }
diff --git a/libcore/swf/DefineBitsTag.cpp b/libcore/swf/DefineBitsTag.cpp
index b7cff44..9967921 100644
--- a/libcore/swf/DefineBitsTag.cpp
+++ b/libcore/swf/DefineBitsTag.cpp
@@ -297,10 +297,6 @@ readDefineBitsJpeg(SWFStream& /*in*/, movie_definition& m)
 FileType
 checkFileType(SWFStream& in)
 {
-#ifndef NDEBUG
-    const size_t start = in.tell();
-#endif
-
     const size_t bytes = 3;
     char buf[bytes];
 
@@ -322,8 +318,6 @@ checkFileType(SWFStream& in)
         return GNASH_FILETYPE_GIF;
     }
     return GNASH_FILETYPE_JPEG;  
-
-    assert(in.tell() == start);
 }
 
 
diff --git a/libcore/swf/RemoveObjectTag.h b/libcore/swf/RemoveObjectTag.h
index cc277a1..447aa73 100644
--- a/libcore/swf/RemoveObjectTag.h
+++ b/libcore/swf/RemoveObjectTag.h
@@ -46,7 +46,8 @@ public:
 
 	RemoveObjectTag()
 		:
-		DisplayListTag(-1)
+		DisplayListTag(-1),
+		_id(0)
 	{}
 
 	/// Read SWF::REMOVEOBJECT or SWF::REMOVEOBJECT2 
diff --git a/libcore/swf/SWF.cpp b/libcore/swf/SWF.cpp
index 6fcd071..fb65747 100644
--- a/libcore/swf/SWF.cpp
+++ b/libcore/swf/SWF.cpp
@@ -405,7 +405,11 @@ operator<<(std::ostream& os, const abc_action_type& opcode)
         case ABC_ACTION_SWEEP: return os << "SWEEP";
         case ABC_ACTION_CODEGENOP: return os << "CODEGENOP";
         case ABC_ACTION_VERIFYOP: return os << "VERIFYOP";
-        default: return os << "UNKNOWN " << std::hex << +opcode;
+        default:
+            std::ios::fmtflags f(os.flags());
+            os << "UNKNOWN " << std::hex << +opcode;
+            os.flags(f);
+            return os;
     }
 }
 
diff --git a/libcore/swf/SoundInfoRecord.h b/libcore/swf/SoundInfoRecord.h
index 3165788..4dfd2ba 100644
--- a/libcore/swf/SoundInfoRecord.h
+++ b/libcore/swf/SoundInfoRecord.h
@@ -39,7 +39,13 @@ struct SoundInfoRecord
     /// This SoundInfoRecord is not valid until read() has been called.
     SoundInfoRecord()
         :
+        noMultiple(false),
+        hasEnvelope(false),
+        hasLoops(false),
+        hasOutPoint(false),
+        hasInPoint(false),
         loopCount(0),
+        stopPlayback(false),
         inPoint(0),
         outPoint(std::numeric_limits<unsigned int>::max())
     {}
diff --git a/libdevice/DeviceGlue.h b/libdevice/DeviceGlue.h
index a855cf4..37c51cc 100644
--- a/libdevice/DeviceGlue.h
+++ b/libdevice/DeviceGlue.h
@@ -65,7 +65,7 @@ public:
         boost::shared_array<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::NODEV;
+        devs[--total] = renderer::GnashDevice::GNASH_NODEV;
 #ifdef BUILD_X11_DEVICE
         devs[--total] = renderer::GnashDevice::X11;
 #endif
@@ -90,7 +90,7 @@ public:
         if (_device) {
             return _device->getType();
         }
-        return renderer::GnashDevice::NODEV;
+        return renderer::GnashDevice::GNASH_NODEV;
     }
     
     /// Set the display device for later use. After this is called,
diff --git a/libdevice/GnashDevice.h b/libdevice/GnashDevice.h
index fe6ab63..24254e0 100644
--- a/libdevice/GnashDevice.h
+++ b/libdevice/GnashDevice.h
@@ -45,7 +45,7 @@ struct GnashDevice
     /// The list of supported renders that use devices
     typedef enum {OPENVG, OPENGL, OPENGLES1, OPENGLES2, XORG, VAAPI} rtype_t;
     /// The list of supported device types
-    typedef enum {NODEV, EGL, DIRECTFB, X11, RAWFB} dtype_t;
+    typedef enum {GNASH_NODEV, EGL, DIRECTFB, X11, RAWFB} dtype_t;
     
     GnashDevice(int argc, char *argv[]);
     GnashDevice() { };
diff --git a/libmedia/SoundInfo.h b/libmedia/SoundInfo.h
index f574e59..dcfad25 100644
--- a/libmedia/SoundInfo.h
+++ b/libmedia/SoundInfo.h
@@ -27,7 +27,7 @@ namespace media {
 /// Class containing information about an embedded sound definition
 //
 /// Is created by the parser while
-/// parsing, and ownership is then transfered to EmbeddedSound. When the parser is
+/// parsing, and ownership is then transferred to EmbeddedSound. When the parser is
 /// parsing streams, it will ask the soundhandler for this to know what properties
 /// the stream has.
 ///
diff --git a/libmedia/ffmpeg/AudioDecoderFfmpeg.cpp b/libmedia/ffmpeg/AudioDecoderFfmpeg.cpp
index b194f54..653e8a2 100644
--- a/libmedia/ffmpeg/AudioDecoderFfmpeg.cpp
+++ b/libmedia/ffmpeg/AudioDecoderFfmpeg.cpp
@@ -27,6 +27,7 @@
 #include "FLVParser.h"
 #include "SoundInfo.h"
 #include "MediaParser.h" // for AudioInfo
+#include "GnashScopedPtr.h"
 
 //#define GNASH_DEBUG_AUDIO_DECODING
 
@@ -391,35 +392,14 @@ AudioDecoderFfmpeg::decode(const boost::uint8_t* input,
 
         if ( ! framesize )
         {
-            // If nothing is consumed, this will fail. It can happen if a
-            // block is passed to the decoder when nothing can be 
-            // parsed from the block. This is probably a malformed SWF.
-            //assert(decodedBytes == inputSize);
-
-            // NOTE: If this happens the caller sent us
-            //       a block of data which is not composed
-            //       by complete audio frames.
-            //       Could be due to an error in the caller
-            //       code, or to a malformed SWF...
-            //       At time of writing this (2008-11-01)
-            //       it is most likely an error in caller
-            //       code (streaming sound/event sound)
-            //       so we log an ERROR rather then a
-            //       MALFORMED input. You can uncomment the
-            //       abort below to check who is the caller 
-            //       with gdb. When callers are checked,
-            //       we may turn this into a MALFORMED
-            //       kind of error (DEFINESOUND, SOUNDSTREAMBLOCK
-            //       or FLV AudioTag not containing full audio frames)
-            //
-
-            log_error(_("AudioDecoderFfmpeg: "
+            // See https://savannah.gnu.org/bugs/?25456
+            // for a live testcase
+            log_debug("AudioDecoderFfmpeg: "
                       "could not find a complete frame in "
-                      "the last %d bytes of input"
-                        " (malformed SWF or FLV?)"),
-                      consumed);
-            //abort();
-            continue;
+                      "the last %d bytes of a %d bytes block"
+                        " (nothing should be lost)",
+                      consumed, inputSize);
+            break; 
         }
 
 
@@ -498,13 +478,16 @@ 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)
-    boost::int16_t* outPtr = reinterpret_cast<boost::int16_t*>(av_malloc(outSize));
-    if (!outPtr) {
+    ScopedPtr<boost::int16_t> output( reinterpret_cast<boost::int16_t*>(av_malloc(outSize)), av_free );
+    if (!output.get()) {
         log_error(_("failed to allocate audio buffer."));
         outputSize = 0;
         return NULL;
     }
 
+    boost::int16_t* outPtr = output.get();
+
+
 #ifdef GNASH_DEBUG_AUDIO_DECODING
     log_debug("AudioDecoderFfmpeg: about to decode %d bytes; "
         "ctx->channels:%d, ctx->frame_size:%d",
@@ -517,12 +500,12 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
     av_init_packet(&pkt);
     pkt.data = const_cast<uint8_t*>(input);
     pkt.size = inputSize;
-    AVFrame *frm = avcodec_alloc_frame();
-    if (!frm) {
+    ScopedPtr<AVFrame> frm ( avcodec_alloc_frame(), av_free );
+    if (!frm.get()) {
         log_error(_("failed to allocate frame."));
         return NULL;
     }
-    int tmp = avcodec_decode_audio4(_audioCodecCtx, frm, &got_frm, &pkt);
+    int tmp = avcodec_decode_audio4(_audioCodecCtx, frm.get(), &got_frm, &pkt);
 
 #ifdef GNASH_DEBUG_AUDIO_DECODING
     const char* fmtname = av_get_sample_fmt_name(_audioCodecCtx->sample_fmt);
@@ -569,7 +552,6 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
                 "data."), outputSize, inputSize);
         log_error(_("Upgrading ffmpeg/libavcodec might fix this issue."));
         outputSize = 0;
-        av_freep(&frm);
         return NULL;
     }
 
@@ -612,8 +594,6 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
         log_debug("resampler returned %d samples ", outSamples);
 #endif
 
-        av_freep(&frm);
-
         if (expectedMaxOutSamples < outSamples) {
             log_error(_(" --- Computation of resampled samples (%d) < then the actual returned samples (%d)"),
                 expectedMaxOutSamples, outSamples);
@@ -641,7 +621,6 @@ AudioDecoderFfmpeg::decodeFrame(const boost::uint8_t* input,
         boost::uint8_t* newOutput = new boost::uint8_t[outSize];
         std::memcpy(newOutput, outPtr, outSize);
         outPtr = reinterpret_cast<boost::int16_t*>(newOutput);
-        av_freep(&frm);
     }
 
     outputSize = outSize;
diff --git a/libmedia/gst/MediaHandlerGst.cpp b/libmedia/gst/MediaHandlerGst.cpp
index 00b225d..3c888bb 100644
--- a/libmedia/gst/MediaHandlerGst.cpp
+++ b/libmedia/gst/MediaHandlerGst.cpp
@@ -86,12 +86,12 @@ MediaHandlerGst::createVideoDecoder(const VideoInfo& info)
 
         ExtraInfoGst* extrainfo = dynamic_cast<ExtraInfoGst*>(info.extra.get());
 
-	if (!extrainfo) {
+        if (!extrainfo) {
             log_error(_("Wrong arguments given to GST VideoDecoder"));
             return std::auto_ptr<VideoDecoder>();
         }
         return std::auto_ptr<VideoDecoder>(
-			new VideoDecoderGst(extrainfo->caps));
+            new VideoDecoderGst(extrainfo->caps));
     }
     videoCodecType format = static_cast<videoCodecType>(info.codec);
     int width = info.width;
@@ -103,7 +103,7 @@ MediaHandlerGst::createVideoDecoder(const VideoInfo& info)
     ExtraVideoInfoFlv* extrainfo = dynamic_cast<ExtraVideoInfoFlv*>(info.extra.get());
     if (extrainfo) {
         extradata = extrainfo->data.get();
-                datasize = extrainfo->size;
+        datasize = extrainfo->size;
     }
 
     std::auto_ptr<VideoDecoder> ret( new VideoDecoderGst(format, width, height, extradata, datasize) );
diff --git a/libmedia/gst/swfdec_codec_gst.c b/libmedia/gst/swfdec_codec_gst.c
index 8be6067..6a62345 100644
--- a/libmedia/gst/swfdec_codec_gst.c
+++ b/libmedia/gst/swfdec_codec_gst.c
@@ -308,11 +308,13 @@ swfdec_gst_decoder_init (SwfdecGstDecoder *dec, GstCaps *srccaps, GstCaps *sinkc
     GstElement *next = gst_element_factory_make (name, NULL);
     if (next == NULL) {
       SWFDEC_ERROR ("failed to create '%s' element", name);
+      va_end (args);
       return FALSE;
     }
     gst_bin_add (GST_BIN (dec->bin), next);
     if (!gst_element_link (decoder, next)) {
       SWFDEC_ERROR ("failed to link '%s' element to decoder", name);
+      va_end (args);
       return FALSE;
     }
     decoder = next;
diff --git a/librender/agg/Renderer_agg.h b/librender/agg/Renderer_agg.h
index f95c4ad..fd5fdb0 100644
--- a/librender/agg/Renderer_agg.h
+++ b/librender/agg/Renderer_agg.h
@@ -30,14 +30,16 @@ class Renderer_agg_base : public Renderer
 {
 private:
     
-    unsigned char *_testBuffer, *_testBufferTmp; // buffers used by initTestBuffer() only
+    unsigned char *_testBuffer; // used by initTestBuffer() for testing
     
 public:
     
     Renderer_agg_base() : _testBuffer(0) { }  
     
     // virtual classes should have virtual destructors
-    virtual ~Renderer_agg_base() {}
+    virtual ~Renderer_agg_base() {
+        if ( _testBuffer ) free(_testBuffer);
+    }
     
     // these methods need to be accessed from outside:
     virtual void init_buffer(unsigned char *mem, int size, int x, int y,
@@ -50,12 +52,12 @@ public:
     virtual bool initTestBuffer(unsigned width, unsigned height) {
         int size = width * height * getBytesPerPixel();
         
-        _testBufferTmp = static_cast<unsigned char *>(realloc(_testBuffer, size));
-        if (_testBufferTmp == NULL) {
+        unsigned char *tmp = static_cast<unsigned char *>(realloc(_testBuffer, size));
+        if (tmp == NULL) {
             log_error(_("Memory reallocation error"));
             return false;
         } else {
-            _testBuffer = _testBufferTmp;
+            _testBuffer = tmp;
         }
 
         memset(_testBuffer, 0, size);
@@ -64,7 +66,7 @@ public:
         init_buffer(_testBuffer, size, width, height, width * getBytesPerPixel());
         
         return true;
-    }    
+    }
 };
 
 /// Create a render handler 
diff --git a/librender/opengl/Renderer_ogl.cpp b/librender/opengl/Renderer_ogl.cpp
index 1d4102e..652ee6e 100644
--- a/librender/opengl/Renderer_ogl.cpp
+++ b/librender/opengl/Renderer_ogl.cpp
@@ -804,7 +804,7 @@ public:
 
       // Look for a texture with the same dimensions and type
       std::list< boost::shared_ptr<GnashTexture> >::iterator it;
-      for (it = _cached_textures.begin(); it != _cached_textures.end(); it++) {
+      for (it = _cached_textures.begin(); it != _cached_textures.end(); ++it) {
           if ((*it)->width() == frame->width() &&
               (*it)->height() == frame->height() &&
               (*it)->internal_format() == frameFormat.internal_format() &&
diff --git a/librender/testr.cpp b/librender/testr.cpp
index 18ec26e..986cb1e 100644
--- a/librender/testr.cpp
+++ b/librender/testr.cpp
@@ -321,7 +321,7 @@ test_device(Renderer *renderer, const std::string &type)
     }
     // Be default, there should be no device associated with this
     // renderer yet.
-    if (renderer->getDevice() == GnashDevice::NODEV) {
+    if (renderer->getDevice() == GnashDevice::GNASH_NODEV) {
         runtest.pass("Renderer::getDevice()");
     } else {
         runtest.fail("Renderer::getDevice()");
diff --git a/libsound/EmbedSoundInst.cpp b/libsound/EmbedSoundInst.cpp
index 4c7023c..cecfb52 100644
--- a/libsound/EmbedSoundInst.cpp
+++ b/libsound/EmbedSoundInst.cpp
@@ -91,7 +91,15 @@ EmbedSoundInst::decodeNextBlock()
 {
     assert(!decodingCompleted());
 
-    const boost::uint32_t inputSize = _soundDef.size() - decodingPosition;
+    // this value is arbitrary, things would also work
+    // with a smaller value, but 2^16 seems fast enough
+    // 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;
+
+    boost::uint32_t inputSize = _soundDef.size() - decodingPosition;
+    if ( inputSize > chunkSize ) inputSize = chunkSize;
 
 #ifdef GNASH_DEBUG_SOUNDS_DECODING
     log_debug("  decoding %d bytes", inputSize);
diff --git a/libsound/sound_handler.h b/libsound/sound_handler.h
index ddc6385..1486139 100644
--- a/libsound/sound_handler.h
+++ b/libsound/sound_handler.h
@@ -358,8 +358,8 @@ public:
     ///     callback.
     ///
     /// @return an InputStream pointer, for passing to unplugInputStream.
-    ///         Callers do not own the InputStream, and should NOT realy
-    ///         on it to be point to allocated memory! It is meant to be used
+    ///         Callers do not own the InputStream, and should NOT rely
+    ///         on it to point to allocated memory! It is meant to be used
     ///         as an identifier for the newly created mixer channel.
     ///
     /// @todo change to plugInputStream(InputStream* str),
diff --git a/macros/boost.m4 b/macros/boost.m4
index 8ab371d..a098607 100644
--- a/macros/boost.m4
+++ b/macros/boost.m4
@@ -80,28 +80,28 @@ AC_DEFUN([GNASH_PATH_BOOST],
     gnash_boost_topdir=/usr/include/boost
     dirs="`ls -dr $i/boost* 2>/dev/null | xargs`"
     for u in ${dirs}; do
-    	if test -n "$u" -a -d "$u" -a x"$u" != x"/usr/include/boost"; then
-      	gnash_boost_topdir="`(cd $u; pwd)`"
-      	gnash_boost_subdir="`dirname ${gnash_boost_topdir}`"
-      	gnash_boost_version="`echo ${gnash_boost_topdir} | sed -e 's:.*boost-::'`"
-      	dnl Fix for packaging systems not adding extra fluff to the path-name.
-     	  for k in ${boost_headers}; do
-       		if test ! -f ${gnash_boost_topdir}/boost/$k; then
-        	  if test ! -f ${gnash_boost_subdir}/boost/$k; then
-		    	    missing_headers="${missing_headers} $k"
-	        	else
-	  	      	gnash_boost_topdir=${gnash_boost_subdir}
-	        	fi
-        	fi
-      	done
-      if test x"${missing_headers}" = x ; then
-        ac_cv_path_boost_incl="-I${gnash_boost_topdir}"
-        AC_MSG_RESULT(${ac_cv_path_boost_incl})
-        break
-      else
-        AC_MSG_RESULT([headers missing])
-        AC_MSG_WARN([You need to install ${missing_headers}])
-      fi
+      if test -n "$u" -a -d "$u" -a x"$u" != x"/usr/include/boost"; then
+        gnash_boost_topdir="`(cd $u; pwd)`"
+        gnash_boost_subdir="`dirname ${gnash_boost_topdir}`"
+        gnash_boost_version="`echo ${gnash_boost_topdir} | sed -e 's:.*boost-::'`"
+        dnl Fix for packaging systems not adding extra fluff to the path-name.
+        for k in ${boost_headers}; do
+          if test ! -f ${gnash_boost_topdir}/boost/$k; then
+            if test ! -f ${gnash_boost_subdir}/boost/$k; then
+              missing_headers="${missing_headers} $k"
+            else
+              gnash_boost_topdir=${gnash_boost_subdir}
+            fi
+          fi
+        done
+        if test x"${missing_headers}" = x ; then
+          ac_cv_path_boost_incl="-I${gnash_boost_topdir}"
+          AC_MSG_RESULT(${ac_cv_path_boost_incl})
+          break
+        else
+          AC_MSG_RESULT([headers missing])
+          AC_MSG_WARN([You need to install ${missing_headers}])
+        fi
     fi
     done
   done
diff --git a/macros/curl.m4 b/macros/curl.m4
index b0ad815..a1aaed3 100644
--- a/macros/curl.m4
+++ b/macros/curl.m4
@@ -134,6 +134,11 @@ AC_DEFUN([GNASH_PATH_CURL],
 
   if test -n "$CURL_LIBS"; then
     AC_DEFINE(USE_CURL, [1], [Define this if you want to enable curl usage])
+    if test x"${curlconfig}" != "x"; then
+      if test x"`${curlconfig} --protocols|grep RTMP`" != x; then
+        curl_rtmp_support=yes
+      fi
+    fi
   fi
 
   AC_SUBST(CURL_CFLAGS)
diff --git a/plugin/aos4/plugin.cpp b/plugin/aos4/plugin.cpp
index 67a1069..4ee69f2 100644
--- a/plugin/aos4/plugin.cpp
+++ b/plugin/aos4/plugin.cpp
@@ -433,7 +433,7 @@ nsPluginInstance::threadMain(void)
 
     VariableMap vars;
     gnash::URL::parse_querystring(url.querystring(), vars);
-    for (VariableMap::iterator i = vars.begin(), ie = vars.end(); i != ie; i++) {
+    for (VariableMap::iterator i = vars.begin(), ie = vars.end(); i != ie; ++i) {
         _flashVars[i->first] = i->second;
     }
 
diff --git a/plugin/npapi/plugin.cpp b/plugin/npapi/plugin.cpp
index 0a270f4..cd0f7a3 100644
--- a/plugin/npapi/plugin.cpp
+++ b/plugin/npapi/plugin.cpp
@@ -125,6 +125,7 @@ extern NPPluginFuncs NPPFuncs;
 
 namespace gnash {
 NPBool plugInitialized = FALSE;
+std::string cookiefile;
 }
 
 /// \brief Return the MIME Type description for this plugin.
@@ -140,6 +141,8 @@ NPP_GetMIMEDescription(void)
 static bool waitforgdb = false;
 static bool createSaLauncher = false;
 
+static std::map<int, std::string> cookiemap;
+
 static const char* getPluginDescription();
 
 static const char*
@@ -518,6 +521,23 @@ nsPluginInstance::~nsPluginInstance()
         } else {
             gnash::log_debug("Child process exited with status %d", status);
         }
+
+        // Remove cookiefile if writelauncher not set
+        const char* options = std::getenv("GNASH_OPTIONS");
+        if ((!options || !strstr(options, "writelauncher")) &&
+            (!cookiefile.empty())) {
+            std::map<int, std::string>::iterator it = cookiemap.find(_childpid);
+            if (it != cookiemap.end()) {
+                if (remove(it->second.c_str())) {
+                    gnash::log_error("Cookiefile %s removal failed [pid %d]",
+                        it->second, _childpid);
+                } else {
+                    gnash::log_debug("Cookiefile %s removed [pid %d]",
+                        it->second, _childpid);
+                }
+                cookiemap.erase(it);
+            }
+        }
     }
     _childpid = 0;
 }
@@ -1009,14 +1029,14 @@ create_standalone_launcher(const std::string& page_url, const std::string& swf_u
     }
 
     saLauncher << "#!/bin/sh" << std::endl
-               << "export GNASH_COOKIES_IN="
-               << std::getenv("GNASH_COOKIES_IN") << std::endl
                << getGnashExecutable() << " ";
 
     if (!page_url.empty()) {
         saLauncher << "-U '" << page_url << "' ";
     }
-
+    if (!cookiefile.empty()) {
+        saLauncher << "-C " << cookiefile << " ";
+    }
     for (std::map<std::string,std::string>::const_iterator it = params.begin(),
         itEnd = params.end(); it != itEnd; ++it) {
         const std::string& nam = it->first; 
@@ -1129,20 +1149,22 @@ nsPluginInstance::setupCookies(const std::string& pageurl)
 
     if (ncookie.empty()) {
         gnash::log_debug("No stored Cookie for %s", url);
+        cookiefile.clear();
         return;
     }
 
     gnash::log_debug("The Cookie for %s is %s", url, ncookie);
-    char cookiename[] = "/tmp/gnash-cookies.XXXXXX";
-    boost::iostreams::file_descriptor_sink fdsink = getfdsink(cookiename);
+    char mkstemplate[] = "/tmp/gnash-cookie.XXXXXX";
+    boost::iostreams::file_descriptor_sink fdsink = getfdsink(mkstemplate);
 #if BOOST_VERSION >= 104400
     if (fdsink.handle() == -1) {
-        gnash::log_error("Failed to create sink: %s", cookiename);
+        gnash::log_error("Failed to create sink: %s", mkstemplate);
         return;
     }
 #endif
+    cookiefile = mkstemplate;
     boost::iostreams::stream<boost::iostreams::file_descriptor_sink>
-        cookiefile (fdsink);
+        cookiestream (fdsink);
 
     // Firefox provides cookies in the following format:
     //
@@ -1158,17 +1180,12 @@ nsPluginInstance::setupCookies(const std::string& pageurl)
     tokenizer tok(ncookie, char_sep(";"));
 
     for (tokenizer::iterator it=tok.begin(); it != tok.end(); ++it) {
-        cookiefile << "Set-Cookie: " << *it << std::endl;
+        cookiestream << "Set-Cookie: " << *it << std::endl;
     }
  
-    cookiefile.close();
+    cookiestream.close();
     fdsink.close();
-  
-    if (setenv("GNASH_COOKIES_IN", cookiename, 1) < 0) {
-        gnash::log_error(
-            "Couldn't set environment variable GNASH_COOKIES_IN to %s",
-            ncookie);
-    }
+    gnash::log_debug("Cookiefile is %s", cookiefile);
 }
 
 void
@@ -1261,6 +1278,9 @@ nsPluginInstance::getCmdLine(int hostfd, int controlfd)
         pars << " -F " << hostfd            // Socket to send commands to
              << ":"    << controlfd;        // Socket determining lifespan
     }
+    if (!cookiefile.empty()) {
+        pars << " -C " << cookiefile;
+    }
     std::string pars_str = pars.str();
     typedef boost::char_separator<char> char_sep;
     boost::tokenizer<char_sep> tok(pars_str, char_sep(" "));
@@ -1420,6 +1440,12 @@ nsPluginInstance::startProc()
                              _childpid);
         }
 
+        if (!cookiefile.empty()) {
+            cookiemap.insert(std::make_pair(_childpid, cookiefile));
+            gnash::log_debug("Pid %d associated with cookiefile %s",
+                _childpid, cookiefile);
+        }
+
         setupIOChannel(c2p_pipe[0], (GIOFunc)handlePlayerRequestsWrapper,
                                     (GIOCondition)(G_IO_IN|G_IO_HUP));
         
diff --git a/plugin/npapi/test.cpp b/plugin/npapi/test.cpp
index 5b57fe0..3498157 100644
--- a/plugin/npapi/test.cpp
+++ b/plugin/npapi/test.cpp
@@ -434,12 +434,12 @@ NPN_SetProperty(NPP, NPObject*, NPIdentifier name,
 
 bool
 NPN_GetProperty(NPP, NPObject* , NPIdentifier name,
-                     const NPVariant *value)
+                     NPVariant *value)
 {
     std::map<NPIdentifier, NPVariant *>::iterator it;
     it = _properties.find(name);
     if (it == _properties.end()) return false;
-    value = it->second;
+    *value = *(it->second);
     return true;
 }
 
diff --git a/plugin/win32/plugin.cpp b/plugin/win32/plugin.cpp
index 82ec505..771d6e7 100644
--- a/plugin/win32/plugin.cpp
+++ b/plugin/win32/plugin.cpp
@@ -431,7 +431,7 @@ nsPluginInstance::threadMain(void)
 
     VariableMap vars;
     gnash::URL::parse_querystring(url.querystring(), vars);
-    for (VariableMap::iterator i = vars.begin(), ie = vars.end(); i != ie; i++) {
+    for (VariableMap::iterator i = vars.begin(), ie = vars.end(); i != ie; ++i) {
         _flashVars[i->first] = i->second;
     }
 
diff --git a/po/cs.po b/po/cs.po
index 1c85aec..b9e61dc 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -9348,7 +9348,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/da.po b/po/da.po
index ae2d80c..fa18d5d 100644
--- a/po/da.po
+++ b/po/da.po
@@ -9406,7 +9406,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/de.po b/po/de.po
index a79997e..c8c805a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9080,7 +9080,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/el.po b/po/el.po
index 8d0842e..c5aadab 100644
--- a/po/el.po
+++ b/po/el.po
@@ -9402,7 +9402,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/en_GB.po b/po/en_GB.po
index ff5b786..95cf20b 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -9465,8 +9465,8 @@ msgstr "Stream type is: %s"
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
-msgstr "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
+msgstr "%d bytes were transferred in %s seconds"
 
 #: cygnal/libnet/rtmp_client.cpp:152
 #, c-format
diff --git a/po/es.po b/po/es.po
index ef2150e..e36b1c4 100644
--- a/po/es.po
+++ b/po/es.po
@@ -9467,7 +9467,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/fi.po b/po/fi.po
index a5b0127..9dba39c 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -9062,7 +9062,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/fr.po b/po/fr.po
index 67e32a4..5090a9a 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -9092,7 +9092,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/gnash.pot b/po/gnash.pot
index 40bc94f..5e4ad42 100644
--- a/po/gnash.pot
+++ b/po/gnash.pot
@@ -9053,7 +9053,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/it.po b/po/it.po
index 477389f..8670d35 100644
--- a/po/it.po
+++ b/po/it.po
@@ -9061,7 +9061,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/ja.po b/po/ja.po
index 01fc555..b5e3485 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -9056,7 +9056,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/km.po b/po/km.po
index db07dc2..310eff3 100644
--- a/po/km.po
+++ b/po/km.po
@@ -9055,7 +9055,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/ne.po b/po/ne.po
index 607a716..5591bc0 100644
--- a/po/ne.po
+++ b/po/ne.po
@@ -9313,7 +9313,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/ru.po b/po/ru.po
index f76eaee..a3b266b 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9062,7 +9062,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/po/zh_TW.po b/po/zh_TW.po
index a7a62ec..4b11f0a 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -9055,7 +9055,7 @@ msgstr ""
 
 #: cygnal/libnet/statistics.cpp:119
 #, c-format
-msgid "%d bytes were transfered in %s seconds"
+msgid "%d bytes were transferred in %s seconds"
 msgstr ""
 
 #: cygnal/libnet/rtmp_client.cpp:152
diff --git a/revno.h b/revno.h
index 8183638..8685d81 100644
--- a/revno.h
+++ b/revno.h
@@ -1,3 +1,3 @@
 #define BRANCH_REVNO "2"
 #define BRANCH_NICK "master"
-#define COMMIT_ID "0a5e717"
+#define COMMIT_ID "8a8759c"
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index 57b21aa..3ffc115 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -105,6 +105,7 @@ EXTRA_DIST = check.h \
 	generic-testrunner.sh \
 	gst_install_plugins_helper.sh \
 	simultaneous-testrunner.sh \
+	timingissues \
 	XmlSocketServer.pl \
 	dejagnu.h
 
diff --git a/testsuite/actionscript.all/XMLNode.as b/testsuite/actionscript.all/XMLNode.as
index bcc254b..33d28de 100644
--- a/testsuite/actionscript.all/XMLNode.as
+++ b/testsuite/actionscript.all/XMLNode.as
@@ -411,8 +411,15 @@ check_equals(xn.toString(), "");
 //       if the test was successful or not...
 x = new XML('<t></t>'); x.appendChild(new XML('<t></t>'));
 var x2 = new XML('<t></t>'); x2.appendChild(x); delete x2;
+
 // many allocations force GC run
 for (var i=0; i<256; ++i) x = {};
 
+// Test infinite loop: https://savannah.gnu.org/bugs/index.php?40440
+// will crash when affected
+xl1 = new XML('<t></t>');
+xl2 = new XML('<t></t>');
+xl1.appendChild(xl2);
+xl2.appendChild(xl1);
 
 check_totals(182);
diff --git a/testsuite/analyse-results.sh b/testsuite/analyse-results.sh
index ee3f4b5..10f1010 100755
--- a/testsuite/analyse-results.sh
+++ b/testsuite/analyse-results.sh
@@ -98,11 +98,14 @@ echo
 # For now, return a failure if any XPASS or FAIL occurred
 if test ${total_fail} -gt 0 || test ${total_xpass} -gt 0; then
 
+	timing=testsuite/timingissues
+	> ${timing}.tmp
+
 	if test ${total_fail} -gt 0; then
 		echo "Unexpected failures follow:"
 		for s in ${suitefail}; do
 			echo " --=[ ${s} ]=-- "
-			grep -w FAIL ${s}/testrun.sum;
+			grep -w FAIL ${s}/testrun.sum | tee -a ${timing}.tmp
 		done
 		echo
 	fi
@@ -110,11 +113,31 @@ if test ${total_fail} -gt 0 || test ${total_xpass} -gt 0; then
 	if test ${total_xpass} -gt 0; then
 		echo "Unexpected successes follow:"
 		for s in ${suitexpass}; do
-			echo "--=[ ${s} ]=--- "
-			grep -w XPASS ${s}/testrun.sum; done
+			echo " --=[ ${s} ]=-- "
+			grep -w XPASS ${s}/testrun.sum
+		done
 		echo
 	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
+		else
+			echo "Time-related failures follow:"
+			grep -f $timing ${timing}.tmp
+			echo
+			echo "See http://wiki.gnashdev.org/PredictableLoading"
+			echo
+			echo "Non time-related failures follow:"
+			grep -vf $timing ${timing}.tmp
+			echo
+		fi
+	fi
+	rm -f ${timing}.tmp
 	exit 1
 else
 	exit 0
diff --git a/testsuite/libbase.all/Makefile.am b/testsuite/libbase.all/Makefile.am
index 0f0015e..911f7ff 100644
--- a/testsuite/libbase.all/Makefile.am
+++ b/testsuite/libbase.all/Makefile.am
@@ -83,12 +83,12 @@ NoSeekFileTest_LDADD = $(LDADD)
 URLTest_SOURCES = URLTest.cpp
 URLTest_CPPFLAGS =  $(AM_CPPFLAGS) \
 	'-DBUILDDIR="$(abs_builddir)"'
-URLTest_LDADD = $(LDADD)
+URLTest_LDADD = $(LDADD) -lboost_system
 
 RcTest_SOURCES = RcTest.cpp
 RcTest_CPPFLAGS =  $(AM_CPPFLAGS) \
 	-DSRCDIR="$(srcdir)"
-RcTest_LDADD = $(LDADD)
+RcTest_LDADD = $(LDADD) -lboost_system
 
 IntTypesTest_SOURCES = IntTypesTest.cpp
 IntTypesTest_CPPFLAGS =  $(AM_CPPFLAGS) \
diff --git a/testsuite/media/blue.swf b/testsuite/media/blue.swf
deleted file mode 100644
index 519af49..0000000
Binary files a/testsuite/media/blue.swf and /dev/null differ
diff --git a/testsuite/media/green.swf b/testsuite/media/green.swf
deleted file mode 100644
index e67bf37..0000000
Binary files a/testsuite/media/green.swf and /dev/null differ
diff --git a/testsuite/media/red.swf b/testsuite/media/red.swf
deleted file mode 100644
index fab8701..0000000
Binary files a/testsuite/media/red.swf and /dev/null differ
diff --git a/testsuite/misc-ming.all/Makefile.am b/testsuite/misc-ming.all/Makefile.am
index 05e8d81..e9db815 100644
--- a/testsuite/misc-ming.all/Makefile.am
+++ b/testsuite/misc-ming.all/Makefile.am
@@ -57,6 +57,7 @@ EXTRA_DIST = \
 	gotoFrame2Test.as \
 	intervalTest.as \
 	red5test.as \
+	oflaDemo.as \
 	remoting.as \
 	rtmpytest.as \
 	widgets.as \
@@ -269,6 +270,7 @@ check_SCRIPTS += remotingTestRunner
 endif
 if ENABLE_RED5_TESTING
 check_SCRIPTS += red5test-runner
+check_SCRIPTS += oflaDemo-runner
 endif
 if ENABLE_RTMPY_TESTING
 check_SCRIPTS += rtmpytest-runner
@@ -1342,6 +1344,15 @@ red5test.swf: red5test.as Dejagnu.swf Makefile ../actionscript.all/check.as ../a
 		-DUSE_DEJAGNU_MODULE -DOUTPUT_VERSION=7 Dejagnu.swf $(srcdir)/red5test.as \
 		$(srcdir)/../actionscript.all/dejagnu_so_fini.as
 
+oflaDemo.swf: oflaDemo.as Dejagnu.swf Makefile ../actionscript.all/check.as ../actionscript.all/utils.as
+	$(MAKESWF) $(MAKESWF_FLAGS) -n network -r12 -o $@ -v7 -DRED5_HOST='\"$(RED5_HOST)\"' \
+		-DUSE_DEJAGNU_MODULE -DOUTPUT_VERSION=7 Dejagnu.swf $(srcdir)/oflaDemo.as \
+		$(srcdir)/../actionscript.all/dejagnu_so_fini.as
+
+oflaDemo-runner: $(srcdir)/../generic-testrunner.sh oflaDemo.swf
+	sh $(srcdir)/../generic-testrunner.sh -c "ENDOFTEST" $(top_builddir) oflaDemo.swf > $@
+	chmod 755 $@
+
 red5test-runner: $(srcdir)/../generic-testrunner.sh red5test.swf
 	sh $(srcdir)/../generic-testrunner.sh -c "ENDOFTEST" $(top_builddir) red5test.swf > $@
 	chmod 755 $@
@@ -1596,7 +1607,8 @@ if ENABLE_HTTP_TESTSUITE
 TEST_CASES += remotingTestRunner
 endif
 if ENABLE_RED5_TESTING
-TEST_CASES += red5test-runner
+TEST_CASES += red5test-runner 
+TEST_CASES += oflaDemo-runner 
 endif
 if ENABLE_RTMPY_TESTING
 TEST_CASES += rtmpytest-runner
diff --git a/testsuite/misc-ming.all/loading/loadMovieTestRunner.cpp b/testsuite/misc-ming.all/loading/loadMovieTestRunner.cpp
index f3981a0..25d5fdb 100644
--- a/testsuite/misc-ming.all/loading/loadMovieTestRunner.cpp
+++ b/testsuite/misc-ming.all/loading/loadMovieTestRunner.cpp
@@ -109,6 +109,8 @@ clickCycle(MovieClip* coverart)
 
 	tester->pressMouseButton();
 
+	// TODO: fix predictability
+	// see http://wiki.gnashdev.org/PredictableLoading
 	coverart = waitForLoad(coverart);
 	check_equals(coverart->get_root()->url(), redURL.str());
 
diff --git a/testsuite/misc-ming.all/ming_utils.c b/testsuite/misc-ming.all/ming_utils.c
index eb77e7c..235cb63 100644
--- a/testsuite/misc-ming.all/ming_utils.c
+++ b/testsuite/misc-ming.all/ming_utils.c
@@ -385,6 +385,7 @@ compile_actions(const char* fmt, ...)
 	tmp[BUFFER_SIZE-1] = '\0';
 
 	ac = compileSWFActionCode(tmp);
+	va_end (ap);
 	return ac;
 }
 
diff --git a/testsuite/misc-ming.all/oflaDemo.as b/testsuite/misc-ming.all/oflaDemo.as
new file mode 100644
index 0000000..7686f52
--- /dev/null
+++ b/testsuite/misc-ming.all/oflaDemo.as
@@ -0,0 +1,100 @@
+// This test relies on a default deploy of red5 on localhost
+//
+// Build with:
+//        makeswf -n network -o red5test.swf ../Dejagnu.swf red5test.as ../actionscript.all/dejagnu_so_fini.as
+// Run with:
+//        firefox red5test.swf
+// Or:
+//        gnash red5test.swf
+//
+//
+
+note("SWF" + OUTPUT_VERSION + " - " + System.capabilities.version + "\n");
+rcsid="red5test.as - <bzr revno here>";
+
+#define info _root.note
+#define note _root.note
+#define fail_check _root.fail
+#define pass_check  _root.pass
+#define xfail_check _root.xfail
+#define xpass_check _root.xpass
+
+#include "../actionscript.all/check.as"
+#include "../actionscript.all/utils.as"
+
+stop();
+
+endOfTest = function()
+{
+    totals(17);
+    trace("ENDOFTEST");
+    play();
+};
+
+// -P FlashVars='hostname=localhost,rtmptport5080=rtmpport=1935'
+hostname = RED5_HOST;
+funcId   = -1;
+
+if (rtmpport == undefined) {
+    rtmpport = 1935;
+    note("No RTMP port specified, defaulting to "+rtmpport);
+}
+
+function checkAfter (netStream) {
+    note("Time :" + netStream.time);
+    check(netStream.bufferLength > 0);
+    check_equals(netStream.bufferTime, '3');
+    xcheck(netStream.decodedFrames > 0);
+    check(netStream.time > 0);
+    check_equals(netStream.currentFps, '0' );
+    clearInterval(funcId);
+    endOfTest();
+};
+ 
+test1 = function(netStream) {
+    note ("Running test1");
+    check_equals(typeof(netStream), 'object');
+
+    // Checking for properties
+    xcheck_equals(typeof(netStream.audiocodec), 'number');
+    xcheck_equals(typeof(netStream.videocodec), 'number');
+    xcheck_equals(typeof(netStream.decodedFrames), 'number');
+    check_equals(typeof(netStream.bytesTotal), 'number');
+    check_equals(typeof(netStream.bytesLoaded), 'number');
+    xcheck_equals(typeof(netStream.liveDelay), 'number');
+    check_equals(typeof(netStream.bufferLength), 'number');
+    check_equals(typeof(netStream.bufferTime), 'number');
+    check_equals(typeof(netStream.currentFps), 'number');
+    check_equals(typeof(netStream.time), 'number');
+
+    netStream.play("square");
+    netStream.setBufferTime(3);
+    netStream.onMetaData = function(object) {
+        funcId = setInterval(checkAfter, 1000, netStream);
+    };
+};
+
+
+runtests = function(ns)
+{
+    note("Running tests for NetStream.");
+    test1(ns);
+};
+
+ncrtmp = new NetConnection();
+ncrtmp.statuses = new Array();
+ncrtmp.onStatus = function()
+{
+    this.statuses.push(arguments);
+    note('NetConnection.onStatus called with args: ' + dumpObject(arguments));
+    lastStatusArgs = ncrtmp.statuses[ncrtmp.statuses.length-1];
+    if((lastStatusArgs[0].level == "status") && (lastStatusArgs[0].code == "NetConnection.Connect.Success")) {
+        pass("RTMP connection - status Success");
+        netStream = new NetStream(this);
+        runtests(netStream);
+    }
+};
+
+rtmpuri = "rtmp://"+hostname+":"+rtmpport+"/oflaDemo";
+note("Connecting to "+rtmpuri);
+ncrtmp.connect(rtmpuri);
diff --git a/testsuite/misc-mtasc.all/level5.as b/testsuite/misc-mtasc.all/level5.as
index 2241fe5..2cc2ee7 100644
--- a/testsuite/misc-mtasc.all/level5.as
+++ b/testsuite/misc-mtasc.all/level5.as
@@ -25,62 +25,62 @@
 
 class Level5
 {
-	static function main(mc)
-	{
-                check_equals(mc._currentframe, 1);
+  static function main(mc)
+  {
+    check_equals(mc._currentframe, 1);
 
-                check(_level0.frameno >= 1);
+    check(_level0.frameno >= 1);
 
-                // Check our depth
-		check_equals(mc.getDepth(), -16379);
+    // Check our depth
+    check_equals(mc.getDepth(), -16379);
 
-                // The ""+ is there to force conversion to a string
-                check_equals(""+mc, "_level5");
+    // The ""+ is there to force conversion to a string
+    check_equals(""+mc, "_level5");
 
-                // Mc level is _level0 ? why ? 
-                check_equals(mc._level, _level0);
+    // Mc level is _level0 ? why ? 
+    check_equals(mc._level, _level0);
 
-                // check that we can acess back to _level0
-                check_equals(_level0.testvar, 1239);
+    // check that we can acess back to _level0
+    check_equals(_level0.testvar, 1239);
 
-                // check that we can modify vars on our own level
-                check_equals(_level5.testvar, undefined);
-                _level5.testvar = 6789;
-                check_equals(_level5.testvar, 6789);
+    // check that we can modify vars on our own level
+    check_equals(_level5.testvar, undefined);
+    _level5.testvar = 6789;
+    check_equals(_level5.testvar, 6789);
 
-                // check that we can modify vars on _level0
-                check_equals(_level0.testvar2, undefined);
-                _level0.testvar2 = true;
-                check_equals(_level0.testvar2, true);
+    // check that we can modify vars on _level0
+    check_equals(_level0.testvar2, undefined);
+    _level0.testvar2 = true;
+    check_equals(_level0.testvar2, true);
 
-		_level5.onUnload = function()
-		{
-			check(false); // should not be executed
-			note("Unloading "+this);
-		}
+    _level5.onUnload = function()
+    {
+      check(false); // should not be executed
+      note("Unloading "+this);
+    }
 
-		mc.createEmptyMovieClip("ch", 1);
-		with(mc.ch)
-		{
-			lineStyle(1, 0x00000);
-			beginFill(0xFF0000, 80);
-			var x=200;
-			var y=200;
-			var width=100;
-			var height=100;
-			moveTo(x, y);
-			lineTo(x+width, y);
-			lineTo(x+width, y+height);
-			lineTo(x, y+height);
-			lineTo(x, y);
-			endFill();
-		};
+    mc.createEmptyMovieClip("ch", 1);
+    with(mc.ch)
+    {
+      lineStyle(1, 0x00000);
+      beginFill(0xFF0000, 80);
+      var x=200;
+      var y=200;
+      var width=100;
+      var height=100;
+      moveTo(x, y);
+      lineTo(x+width, y);
+      lineTo(x+width, y+height);
+      lineTo(x, y+height);
+      lineTo(x, y);
+      endFill();
+    };
 
-                check_equals(mc.ch._target, "_level5/ch");
+    check_equals(mc.ch._target, "_level5/ch");
 
-                // load yet another swf
-                getURL("level99.swf","_level"+99);
+    // load yet another swf
+    getURL("level99.swf","_level"+99);
 
-		getURL("level87.swf", "_level87");
-	}
+    getURL("level87.swf", "_level87");
+  }
 }
diff --git a/testsuite/misc-mtasc.all/level87.as b/testsuite/misc-mtasc.all/level87.as
index 7e1aa0f..10902ba 100644
--- a/testsuite/misc-mtasc.all/level87.as
+++ b/testsuite/misc-mtasc.all/level87.as
@@ -25,52 +25,55 @@
 
 class Level87
 {
-	static function main(mc)
-	{
-		mc.createEmptyMovieClip("ch", 1);
-		with(mc.ch)
-		{
-			lineStyle(1, 0x00000);
-			beginFill(0xFFFF00, 80);
-			var x=220;
-			var y=170;
-			var width=100;
-			var height=100;
-			moveTo(x, y);
-			lineTo(x+width, y);
-			lineTo(x+width, y+height);
-			lineTo(x, y+height);
-			lineTo(x, y);
-			endFill();
-		};
+  static function main(mc)
+  {
+    mc.createEmptyMovieClip("ch", 1);
+    with(mc.ch)
+    {
+      lineStyle(1, 0x00000);
+      beginFill(0xFFFF00, 80);
+      var x=220;
+      var y=170;
+      var width=100;
+      var height=100;
+      moveTo(x, y);
+      lineTo(x+width, y);
+      lineTo(x+width, y+height);
+      lineTo(x, y+height);
+      lineTo(x, y);
+      endFill();
+    };
 
-                check_equals(mc._currentframe, 1);
+    check_equals(mc._currentframe, 1);
 
-                // Check our depth
-		check_equals(mc.getDepth(), -16297);
+    // Check our depth
+    check_equals(mc.getDepth(), -16297);
 
-                // The ""+ is there to force conversion to a string
-                check_equals(""+mc, "_level87");
+    // The ""+ is there to force conversion to a string
+    check_equals(""+mc, "_level87");
 
-		if (_level0.level87loaded )
-		{
-                	check(_level0.frameno >= 3);
+    if (_level0.level87loaded )
+    {
+      check(_level0.frameno >= 3);
 
-                	check_equals(typeof(_level5), 'undefined');
-			return;
-		}
+      check_equals(typeof(_level5), 'undefined');
+      return;
+    }
 
-		_level0.level87loaded = true;
+    _level0.level87loaded = true;
 
-               	check(_level0.frameno >= 2);
+    check(_level0.frameno >= 2);
 
-		// This one fails because gnash is executing code
-		// in level99 before code in the first load of level87,
-		// probably because it is *loading* level99 before level87,
-		// which is in the order loads are requested rather then
-		// reverse of it as it's common...
-                check_equals(_level5._currentframe, 1);
+    // TODO: fix predictability
+    // see http://wiki.gnashdev.org/PredictableLoading
+    //
+    // This one fails because gnash is executing code
+    // in level99 before code in the first load of level87,
+    // probably because it is *loading* level99 before level87,
+    // which is in the order loads are requested rather then
+    // reverse of it as it's common...
+    check_equals(_level5._currentframe, 1);
 
-		_level87.loadMovie("level87.swf");
-	}
+    _level87.loadMovie("level87.swf");
+  }
 }
diff --git a/testsuite/misc-mtasc.all/levels.as b/testsuite/misc-mtasc.all/levels.as
index f1a074d..6ea7d34 100644
--- a/testsuite/misc-mtasc.all/levels.as
+++ b/testsuite/misc-mtasc.all/levels.as
@@ -25,28 +25,28 @@
 
 class LevelsMain
 {
-	static function main(mc)
-	{
-                // create a var that other swfs can test
-                _level0.testvar = 1239;
+  static function main(mc)
+  {
+    // create a var that other swfs can test
+    _level0.testvar = 1239;
 
-                var test = new LevelsMain();
-                test.run();
+    var test = new LevelsMain();
+    test.run();
 
-                // Check our depth
-		check_equals(mc.getDepth(), -16384);
+    // Check our depth
+    check_equals(mc.getDepth(), -16384);
 
-                // The ""+ is there to force conversion to a string
-                check_equals(""+mc, "_level0");
+    // The ""+ is there to force conversion to a string
+    check_equals(""+mc, "_level0");
 
-		mc.onEnterFrame = function ()
-		{
-			this.frameno++;
-		}
-	}
+    mc.onEnterFrame = function ()
+    {
+      this.frameno++;
+    }
+  }
 
-        function run() {
-            trace("main class running");
-            getURL("level5.swf","_level"+5);
-        }
+  function run() {
+    trace("main class running");
+    getURL("level5.swf","_level"+5);
+  }
 }
diff --git a/testsuite/movies.all/gravity-embedded.swf b/testsuite/movies.all/gravity-embedded.swf
deleted file mode 100644
index 481e4f8..0000000
Binary files a/testsuite/movies.all/gravity-embedded.swf and /dev/null differ
diff --git a/testsuite/movies.all/gravity.swf b/testsuite/movies.all/gravity.swf
deleted file mode 100644
index 30bb204..0000000
Binary files a/testsuite/movies.all/gravity.swf and /dev/null differ
diff --git a/testsuite/movies.all/tic_tac2.swf b/testsuite/movies.all/tic_tac2.swf
deleted file mode 100644
index 0f067cf..0000000
Binary files a/testsuite/movies.all/tic_tac2.swf and /dev/null differ
diff --git a/testsuite/movies.all/vnc2swf.swf b/testsuite/movies.all/vnc2swf.swf
deleted file mode 100644
index ab929d8..0000000
Binary files a/testsuite/movies.all/vnc2swf.swf and /dev/null differ
diff --git a/testsuite/movies.all/zoomhenge.swf b/testsuite/movies.all/zoomhenge.swf
deleted file mode 100644
index cd0baa6..0000000
Binary files a/testsuite/movies.all/zoomhenge.swf and /dev/null differ
diff --git a/testsuite/samples/GotoAndPlayTest.swf b/testsuite/samples/GotoAndPlayTest.swf
deleted file mode 100644
index 121e649..0000000
Binary files a/testsuite/samples/GotoAndPlayTest.swf and /dev/null differ
diff --git a/testsuite/samples/TestFunction2.swf b/testsuite/samples/TestFunction2.swf
deleted file mode 100644
index d38b547..0000000
Binary files a/testsuite/samples/TestFunction2.swf and /dev/null differ
diff --git a/testsuite/samples/car_smash.swf b/testsuite/samples/car_smash.swf
deleted file mode 100644
index 9e7809e..0000000
Binary files a/testsuite/samples/car_smash.swf and /dev/null differ
diff --git a/testsuite/samples/clip_as_button.swf b/testsuite/samples/clip_as_button.swf
deleted file mode 100644
index 4915a83..0000000
Binary files a/testsuite/samples/clip_as_button.swf and /dev/null differ
diff --git a/testsuite/samples/clip_as_button2.swf b/testsuite/samples/clip_as_button2.swf
deleted file mode 100644
index 5a45a54..0000000
Binary files a/testsuite/samples/clip_as_button2.swf and /dev/null differ
diff --git a/testsuite/samples/counter.swf b/testsuite/samples/counter.swf
deleted file mode 100644
index ade224c..0000000
Binary files a/testsuite/samples/counter.swf and /dev/null differ
diff --git a/testsuite/samples/display_list_test.swf b/testsuite/samples/display_list_test.swf
deleted file mode 100644
index 3cdab12..0000000
Binary files a/testsuite/samples/display_list_test.swf and /dev/null differ
diff --git a/testsuite/samples/dlist_test1.swf b/testsuite/samples/dlist_test1.swf
deleted file mode 100644
index 20463f1..0000000
Binary files a/testsuite/samples/dlist_test1.swf and /dev/null differ
diff --git a/testsuite/samples/event-test1.swf b/testsuite/samples/event-test1.swf
deleted file mode 100644
index acc8f21..0000000
Binary files a/testsuite/samples/event-test1.swf and /dev/null differ
diff --git a/testsuite/samples/extended_clipping_test_1.swf b/testsuite/samples/extended_clipping_test_1.swf
deleted file mode 100644
index d73c331..0000000
Binary files a/testsuite/samples/extended_clipping_test_1.swf and /dev/null differ
diff --git a/testsuite/samples/gotoFrameOnKeyEvent.swf b/testsuite/samples/gotoFrameOnKeyEvent.swf
deleted file mode 100644
index 602d6a4..0000000
Binary files a/testsuite/samples/gotoFrameOnKeyEvent.swf and /dev/null differ
diff --git a/testsuite/samples/gradient-tests.swf b/testsuite/samples/gradient-tests.swf
deleted file mode 100644
index 0e776e5..0000000
Binary files a/testsuite/samples/gradient-tests.swf and /dev/null differ
diff --git a/testsuite/samples/input-fields.swf b/testsuite/samples/input-fields.swf
deleted file mode 100644
index 3294a05..0000000
Binary files a/testsuite/samples/input-fields.swf and /dev/null differ
diff --git a/testsuite/samples/money3.swf b/testsuite/samples/money3.swf
deleted file mode 100644
index fa787ce..0000000
Binary files a/testsuite/samples/money3.swf and /dev/null differ
diff --git a/testsuite/samples/movieclip_test.swf b/testsuite/samples/movieclip_test.swf
deleted file mode 100644
index 9acc026..0000000
Binary files a/testsuite/samples/movieclip_test.swf and /dev/null differ
diff --git a/testsuite/samples/player.swf b/testsuite/samples/player.swf
deleted file mode 100644
index 24043b3..0000000
Binary files a/testsuite/samples/player.swf and /dev/null differ
diff --git a/testsuite/samples/shared-fonts.swf b/testsuite/samples/shared-fonts.swf
deleted file mode 100644
index 20fd9be..0000000
Binary files a/testsuite/samples/shared-fonts.swf and /dev/null differ
diff --git a/testsuite/samples/slider.swf b/testsuite/samples/slider.swf
deleted file mode 100644
index b71f711..0000000
Binary files a/testsuite/samples/slider.swf and /dev/null differ
diff --git a/testsuite/samples/sound1.swf b/testsuite/samples/sound1.swf
deleted file mode 100644
index 1360efa..0000000
Binary files a/testsuite/samples/sound1.swf and /dev/null differ
diff --git a/testsuite/samples/sr2_title.swf b/testsuite/samples/sr2_title.swf
deleted file mode 100644
index 22b0db7..0000000
Binary files a/testsuite/samples/sr2_title.swf and /dev/null differ
diff --git a/testsuite/samples/subshapes.swf b/testsuite/samples/subshapes.swf
deleted file mode 100644
index 88c7e51..0000000
Binary files a/testsuite/samples/subshapes.swf and /dev/null differ
diff --git a/testsuite/samples/test.swf b/testsuite/samples/test.swf
deleted file mode 100644
index 321c2ce..0000000
Binary files a/testsuite/samples/test.swf and /dev/null differ
diff --git a/testsuite/samples/test_15bpp_bitmap.swf b/testsuite/samples/test_15bpp_bitmap.swf
deleted file mode 100644
index 2fa856a..0000000
Binary files a/testsuite/samples/test_15bpp_bitmap.swf and /dev/null differ
diff --git a/testsuite/samples/test_action_order.swf b/testsuite/samples/test_action_order.swf
deleted file mode 100644
index cbde870..0000000
Binary files a/testsuite/samples/test_action_order.swf and /dev/null differ
diff --git a/testsuite/samples/test_action_order2.swf b/testsuite/samples/test_action_order2.swf
deleted file mode 100644
index 07b1922..0000000
Binary files a/testsuite/samples/test_action_order2.swf and /dev/null differ
diff --git a/testsuite/samples/test_basic_types.swf b/testsuite/samples/test_basic_types.swf
deleted file mode 100644
index 7914c05..0000000
Binary files a/testsuite/samples/test_basic_types.swf and /dev/null differ
diff --git a/testsuite/samples/test_button_functions.swf b/testsuite/samples/test_button_functions.swf
deleted file mode 100644
index 10b0e46..0000000
Binary files a/testsuite/samples/test_button_functions.swf and /dev/null differ
diff --git a/testsuite/samples/test_cascaded_clipbuttons.swf b/testsuite/samples/test_cascaded_clipbuttons.swf
deleted file mode 100644
index a691212..0000000
Binary files a/testsuite/samples/test_cascaded_clipbuttons.swf and /dev/null differ
diff --git a/testsuite/samples/test_clipping_layer.swf b/testsuite/samples/test_clipping_layer.swf
deleted file mode 100644
index b54b62e..0000000
Binary files a/testsuite/samples/test_clipping_layer.swf and /dev/null differ
diff --git a/testsuite/samples/test_colour_tweening.swf b/testsuite/samples/test_colour_tweening.swf
deleted file mode 100644
index 994d1f1..0000000
Binary files a/testsuite/samples/test_colour_tweening.swf and /dev/null differ
diff --git a/testsuite/samples/test_forin_array.swf b/testsuite/samples/test_forin_array.swf
deleted file mode 100644
index 503070b..0000000
Binary files a/testsuite/samples/test_forin_array.swf and /dev/null differ
diff --git a/testsuite/samples/test_frame1.swf b/testsuite/samples/test_frame1.swf
deleted file mode 100644
index 2de506e..0000000
Binary files a/testsuite/samples/test_frame1.swf and /dev/null differ
diff --git a/testsuite/samples/test_frame2.swf b/testsuite/samples/test_frame2.swf
deleted file mode 100644
index e1cff04..0000000
Binary files a/testsuite/samples/test_frame2.swf and /dev/null differ
diff --git a/testsuite/samples/test_function2.swf b/testsuite/samples/test_function2.swf
deleted file mode 100644
index 15d9fb1..0000000
Binary files a/testsuite/samples/test_function2.swf and /dev/null differ
diff --git a/testsuite/samples/test_goto_frame.swf b/testsuite/samples/test_goto_frame.swf
deleted file mode 100644
index 6bf6689..0000000
Binary files a/testsuite/samples/test_goto_frame.swf and /dev/null differ
diff --git a/testsuite/samples/test_goto_play.swf b/testsuite/samples/test_goto_play.swf
deleted file mode 100644
index 76c1757..0000000
Binary files a/testsuite/samples/test_goto_play.swf and /dev/null differ
diff --git a/testsuite/samples/test_goto_stop.swf b/testsuite/samples/test_goto_stop.swf
deleted file mode 100644
index 8be930b..0000000
Binary files a/testsuite/samples/test_goto_stop.swf and /dev/null differ
diff --git a/testsuite/samples/test_gradient_tweening.swf b/testsuite/samples/test_gradient_tweening.swf
deleted file mode 100644
index 96db1d7..0000000
Binary files a/testsuite/samples/test_gradient_tweening.swf and /dev/null differ
diff --git a/testsuite/samples/test_gradients_alpha.swf b/testsuite/samples/test_gradients_alpha.swf
deleted file mode 100644
index 7b3d6fc..0000000
Binary files a/testsuite/samples/test_gradients_alpha.swf and /dev/null differ
diff --git a/testsuite/samples/test_gradients_no_alpha.swf b/testsuite/samples/test_gradients_no_alpha.swf
deleted file mode 100644
index 06c3049..0000000
Binary files a/testsuite/samples/test_gradients_no_alpha.swf and /dev/null differ
diff --git a/testsuite/samples/test_lastopcode_v6.swf b/testsuite/samples/test_lastopcode_v6.swf
deleted file mode 100644
index 3e262b8..0000000
Binary files a/testsuite/samples/test_lastopcode_v6.swf and /dev/null differ
diff --git a/testsuite/samples/test_long_static_text.swf b/testsuite/samples/test_long_static_text.swf
deleted file mode 100644
index 4a5958e..0000000
Binary files a/testsuite/samples/test_long_static_text.swf and /dev/null differ
diff --git a/testsuite/samples/test_rotation.swf b/testsuite/samples/test_rotation.swf
deleted file mode 100644
index 5ea4012..0000000
Binary files a/testsuite/samples/test_rotation.swf and /dev/null differ
diff --git a/testsuite/samples/test_rotation2.swf b/testsuite/samples/test_rotation2.swf
deleted file mode 100644
index 254b5b0..0000000
Binary files a/testsuite/samples/test_rotation2.swf and /dev/null differ
diff --git a/testsuite/samples/test_rotation_shear.swf b/testsuite/samples/test_rotation_shear.swf
deleted file mode 100644
index 18f53fe..0000000
Binary files a/testsuite/samples/test_rotation_shear.swf and /dev/null differ
diff --git a/testsuite/samples/test_shape_tweening-2.swf b/testsuite/samples/test_shape_tweening-2.swf
deleted file mode 100644
index 735d06b..0000000
Binary files a/testsuite/samples/test_shape_tweening-2.swf and /dev/null differ
diff --git a/testsuite/samples/test_shape_tweening.swf b/testsuite/samples/test_shape_tweening.swf
deleted file mode 100644
index dd9d52a..0000000
Binary files a/testsuite/samples/test_shape_tweening.swf and /dev/null differ
diff --git a/testsuite/samples/test_string.swf b/testsuite/samples/test_string.swf
deleted file mode 100644
index 9819a72..0000000
Binary files a/testsuite/samples/test_string.swf and /dev/null differ
diff --git a/testsuite/samples/test_undefined_v6.swf b/testsuite/samples/test_undefined_v6.swf
deleted file mode 100644
index 5fe0b7d..0000000
Binary files a/testsuite/samples/test_undefined_v6.swf and /dev/null differ
diff --git a/testsuite/samples/test_undefined_v7.swf b/testsuite/samples/test_undefined_v7.swf
deleted file mode 100644
index b7fa654..0000000
Binary files a/testsuite/samples/test_undefined_v7.swf and /dev/null differ
diff --git a/testsuite/samples/text-test.swf b/testsuite/samples/text-test.swf
deleted file mode 100644
index eef71d0..0000000
Binary files a/testsuite/samples/text-test.swf and /dev/null differ
diff --git a/testsuite/samples/text-test2.swf b/testsuite/samples/text-test2.swf
deleted file mode 100644
index 704373c..0000000
Binary files a/testsuite/samples/text-test2.swf and /dev/null differ
diff --git a/testsuite/samples/text_formatting.swf b/testsuite/samples/text_formatting.swf
deleted file mode 100644
index 4e6262e..0000000
Binary files a/testsuite/samples/text_formatting.swf and /dev/null differ
diff --git a/testsuite/samples/text_sizes.swf b/testsuite/samples/text_sizes.swf
deleted file mode 100644
index a8ef479..0000000
Binary files a/testsuite/samples/text_sizes.swf and /dev/null differ
diff --git a/testsuite/samples/visible_and_transparency.swf b/testsuite/samples/visible_and_transparency.swf
deleted file mode 100644
index a0e2b96..0000000
Binary files a/testsuite/samples/visible_and_transparency.swf and /dev/null differ
diff --git a/testsuite/swfdec/gen_run_swfdec_testsuite.sh b/testsuite/swfdec/gen_run_swfdec_testsuite.sh
index c3d5b19..8e49692 100644
--- a/testsuite/swfdec/gen_run_swfdec_testsuite.sh
+++ b/testsuite/swfdec/gen_run_swfdec_testsuite.sh
@@ -47,6 +47,9 @@ SWFDEC_GNASH_TESTER="${SRCDIR}/swfdec_gnash_tester"
 cat<<EOF 
 #!/bin/sh
 
+# TODO: fix predictability
+# see http://wiki.gnashdev.org/PredictableLoading
+
 # Generated by gen_run_swfdec_testsuite.sh on
 # $NOW
 
diff --git a/testsuite/timingissues b/testsuite/timingissues
new file mode 100644
index 0000000..9bec978
--- /dev/null
+++ b/testsuite/timingissues
@@ -0,0 +1,14 @@
+### misc-ming.all/loading/loadMovieTestRunner.cpp:113
+FAIL: loadMovieTestRunner: coverart->get_root()->url() == .* (expected: .*) \[loadMovieTestRunner.cpp:[0-9]*\]
+FAIL: loadMovieTestRunner: expected: \(red.swf\|blue.swf\|green.jpg\) , obtained: \(red.swf\|blue.swf\|green.jpg\) (loadMovieTest.c:[0-9]*)
+### 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: 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]*\]
+### 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-8.swf:[0-9a-f]* (traces in movieclip-version-8.swf.trace-gnash, log in movieclip-version-8.swf.log)
diff --git a/utilities/processor.cpp b/utilities/processor.cpp
index 95c1f94..c671a39 100644
--- a/utilities/processor.cpp
+++ b/utilities/processor.cpp
@@ -50,7 +50,7 @@
 #include "ManualClock.h"
 #include "StringPredicates.h"
 #include "IOChannel.h" // for proper dtor call
-#include "GnashSleep.h" // for usleep comptibility.
+#include "GnashSleep.h" // for usleep compatibility.
 #include "StreamProvider.h"
 #include "RunResources.h"
 #include "HostInterface.h"


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



More information about the pkg-flash-devel mailing list