diff -rup slideshow-orig/source/engine/soundplayer.cxx slideshow/source/engine/soundplayer.cxx
--- slideshow-orig/source/engine/soundplayer.cxx	2006-08-17 16:15:39.000000000 +0200
+++ slideshow/source/engine/soundplayer.cxx	2006-08-17 16:17:17.000000000 +0200
@@ -57,12 +57,15 @@ using namespace ::com::sun::star;
 // TODO(Q3): This breaks encapsulation. Either export
 // these strings from avmedia, or provide an XManager
 // factory there
+#ifdef GSTREAMER
+#	define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_GStreamer"
+#else
 #ifdef WNT
 #	define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_DirectX"
 #else
 #	define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_Java"
 #endif 
-
+#endif
 
 namespace presentation
 {
diff -rup slideshow-orig/source/engine/viewmediashape.cxx slideshow/source/engine/viewmediashape.cxx
--- slideshow-orig/source/engine/viewmediashape.cxx	2006-08-17 16:15:39.000000000 +0200
+++ slideshow/source/engine/viewmediashape.cxx	2006-08-17 17:26:09.000000000 +0200
@@ -107,11 +107,22 @@
 #include <com/sun/star/lang/XComponent.hdl>
 #endif
 
+#ifdef GSTREAMER
+#ifndef _SV_SYSDATA_HXX
+#include <vcl/sysdata.hxx>
+#endif
+
+// TODO(Q3): This breaks encapsulation. Either export
+// these strings from avmedia, or provide an XManager
+// factory there
+#define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_GStreamer"
+#else
 #ifdef WNT
 #define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_DirectX"
 #else
 #define AVMEDIA_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_Java"
 #endif
+#endif
 
 using namespace ::com::sun::star;
 
@@ -182,7 +193,11 @@ namespace presentation
 				mxPlayerWindow.clear();
 			}
 
+#ifdef GSTREAMER
+            mpMediaWindow = ::std::auto_ptr< SystemChildWindow >();
+#else
             mpMediaWindow = ::std::auto_ptr< JavaChildWindow >();
+#endif
             			
 			// shutdown player
 			if( mxPlayer.is() )
@@ -311,7 +326,8 @@ namespace presentation
 							aDeviceParams[ 0 ] >>= aImplName;
 						
 							if( aImplName.matchIgnoreAsciiCaseAsciiL( 
-                                    RTL_CONSTASCII_STRINGPARAM("VCLCanvas") ))
+                                    RTL_CONSTASCII_STRINGPARAM("VCLCanvas") ) || aImplName.matchIgnoreAsciiCaseAsciiL( 
+                                    RTL_CONSTASCII_STRINGPARAM("CairoCanvas") ) )
                             {
 								implInitializeVCLBasedPlayerWindow( rBounds, aDeviceParams );
                             }
@@ -424,6 +440,7 @@ namespace presentation
 		bool ViewMediaShape::implInitializeVCLBasedPlayerWindow( const ::basegfx::B2DRectangle& rBounds,
 																 const uno::Sequence< uno::Any >& rVCLDeviceParams)
 		{
+                    OSL_TRACE( "ViewMediaShape::implInitializeVCLBasedPlayerWindow" );
 			if( !mpMediaWindow.get() && !rBounds.isEmpty() )
 			{
 				try
@@ -443,13 +460,18 @@ namespace presentation
 																	
 						if( !aRangePix.isEmpty() )
 						{
-							uno::Sequence< uno::Any > 	aArgs( 2 );
+							uno::Sequence< uno::Any > 	aArgs( 3 );
 							awt::Rectangle				aAWTRect( FRound( aRangePix.getMinX() ),
 																  FRound( aRangePix.getMinY() ),
 														  		  FRound( aRangePix.getMaxX() - aRangePix.getMinX() ),
 														  		  FRound( aRangePix.getMaxY() - aRangePix.getMinY() ) );
 
+#ifdef GSTREAMER
+                                                        OSL_TRACE( "created sys child window for viewmediashape" );
+							mpMediaWindow = ::std::auto_ptr< SystemChildWindow >( new SystemChildWindow( pWindow, WB_CLIPCHILDREN ) );
+#else
 							mpMediaWindow = ::std::auto_ptr< JavaChildWindow >( new JavaChildWindow( pWindow, WB_CLIPCHILDREN ) );
+#endif
 							mpMediaWindow->SetBackground( Color( COL_BLACK ) );
 							mpMediaWindow->SetPosSizePixel( Point( aAWTRect.X, aAWTRect.Y ),
 															Size( aAWTRect.Width, aAWTRect.Height ) );
@@ -457,10 +479,18 @@ namespace presentation
 							
 							if( mxPlayer.is() )
 							{
+#ifndef GSTREAMER
 								aArgs[ 0 ] = uno::makeAny( (sal_Int32) mpMediaWindow->getParentWindowHandleForJava() );
-								
+#else
+                                                                aArgs[ 0 ] = uno::makeAny ( (sal_Int32) 0 );
+#endif
 								aAWTRect.X = aAWTRect.Y = 0;
 								aArgs[ 1 ] = uno::makeAny( aAWTRect );
+#ifdef GSTREAMER
+                                                                const SystemEnvData *pSystemData = mpMediaWindow->GetSystemData();
+                                                                OSL_TRACE( "xwindow id: %ld", pSystemData->aWindow );
+								aArgs[ 2 ] = uno::makeAny( pSystemData->aWindow );
+#endif
 								
 								mxPlayerWindow.set( mxPlayer->createPlayerWindow( aArgs ) );
 								
diff -rup slideshow/source/inc-orig/viewmediashape.hxx slideshow/source/inc/viewmediashape.hxx
--- slideshow/source/inc-orig/viewmediashape.hxx	2006-08-18 13:45:47.000000000 +0200
+++ slideshow/source/inc/viewmediashape.hxx	2006-08-18 13:48:13.000000000 +0200
@@ -49,6 +49,7 @@
 #include <viewlayer.hxx>
 
 class JavaChildWindow;
+class SystemChildWindow;
 
 namespace com 
 { 
@@ -164,7 +165,11 @@ namespace presentation
     		::basegfx::B2DRectangle& implGetAdjustedBoundRect( ::basegfx::B2DRectangle& rBounds ) const;
 			
 			ViewLayerSharedPtr					mpViewLayer;
+#ifdef GSTREAMER
+			::std::auto_ptr< SystemChildWindow >	mpMediaWindow;
+#else
 			::std::auto_ptr< JavaChildWindow >	mpMediaWindow;
+#endif
 			::com::sun::star::awt::Point        maWindowOffset;
 			MediaShape&							mrMediaShape;
         
