--- desktop/source/splash/makefile.mk	2006-01-27 16:21:49.000000000 +0000
+++ desktop/source/splash/makefile.mk	2006-05-30 14:27:33.000000000 +0000
@@ -47,6 +47,8 @@ ENABLE_EXCEPTIONS=TRUE
 
 # --- Files --------------------------------------------------------
 
+CFLAGS += -DINTRO_BITMAP_NAMES=\"$(INTRO_BITMAP_NAMES)\"
+
 SLOFILES =	$(SLO)$/splash.obj \
             $(SLO)$/firststart.obj \
             $(SLO)$/services_spl.obj
--- desktop/source/splash/splash.cxx	2006-05-29 16:01:51.000000000 +0000
+++ desktop/source/splash/splash.cxx	2006-05-30 18:12:03.000000000 +0000
@@ -374,6 +374,51 @@ void SplashScreen::loadConfig()
     }
 }
 
+bool impl_loadBitmap( const rtl::OUString &rBmpFileName, const rtl::OUString &rExecutePath, Bitmap &rIntroBmp )
+{
+    if ( rBmpFileName.getLength() == 0 )
+        return false;
+
+    // First, try to use custom bitmap data.
+    rtl::OUString value;
+    rtl::Bootstrap::get(
+            rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CustomDataUrl" ) ), value );
+    if ( value.getLength() > 0 )
+    {
+        if ( value[ value.getLength() - 1 ] != sal_Unicode( '/' ) )
+            value += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/program" ) );
+        else
+            value += rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "program" ) );
+
+        INetURLObject aObj( value, INET_PROT_FILE );
+        aObj.insertName( rBmpFileName );
+
+        SvFileStream aStrm( aObj.PathToFileName(), STREAM_STD_READ );
+        if ( !aStrm.GetError() )
+        {
+            // Default case, we load the intro bitmap from a seperate file
+            // (e.g. staroffice_intro.bmp or starsuite_intro.bmp)
+            aStrm >> rIntroBmp;
+            return true;
+        }
+    }
+
+    // Then, try to use bitmap located in the same directory as the executable.
+    INetURLObject aObj( rExecutePath, INET_PROT_FILE );
+    aObj.insertName( rBmpFileName );
+
+    SvFileStream aStrm( aObj.PathToFileName(), STREAM_STD_READ );
+    if ( !aStrm.GetError() )
+    {
+        // Default case, we load the intro bitmap from a seperate file
+        // (e.g. staroffice_intro.bmp or starsuite_intro.bmp)
+        aStrm >> rIntroBmp;
+        return true;
+    }
+
+    return false;
+}
+
 void SplashScreen::initBitmap()
 {
     rtl::OUString aLogo( RTL_CONSTASCII_USTRINGPARAM( "1" ) );
@@ -438,16 +438,24 @@ void SplashScreen::initBitmap()
 	if ( bShowLogo )
 	{
         bool     haveBitmap = false;
+        rtl::OUString aIntros( RTL_CONSTASCII_USTRINGPARAM( INTRO_BITMAP_NAMES ) );
         OUString aBmpFileName( RTL_CONSTASCII_USTRINGPARAM( "intro.bmp" ));
         
         if ( _bFullScreenSplash )
         {
             haveBitmap = findScreenBitmap( _aIntroBmp );
             if ( haveBitmap )
                 _eBitmapMode = BM_FULLSCREEN;
             else
                 haveBitmap = findAppBitmap( _aIntroBmp );
         }
+        // Try all bitmaps in INTRO_BITMAP_NAMES
+        sal_Int32 nIndex = 0;
+        while ( !haveBitmap && ( nIndex >= 0 ) )
+        {
+            haveBitmap = findBitmap( aIntros.getToken( 0, ',', nIndex ),
+                                     _aIntroBmp );
+        }
         if ( !haveBitmap )
             haveBitmap = findBitmap( aBmpFileName, _aIntroBmp );
         
