--- sd/inc/app.hrc	2004-12-07 18:49:43.000000000 +0530
+++ sd/inc/app.hrc	2004-12-22 13:45:04.000000000 +0530
@@ -487,4 +487,7 @@
 #define SID_RENAME_MASTER_PAGE              (SID_SD_START+433)
 #define SID_CLOSE_MASTER_VIEW               (SID_SD_START+434)
 
+// FIXME get an official SID
+#define SID_SAVE_GRAPHIC               (SID_SD_START+450)
+
 #endif
--- sd/sdi/_drvwsh.sdi	2004-12-07 18:50:08.000000000 +0530
+++ sd/sdi/_drvwsh.sdi	2004-12-22 13:46:11.000000000 +0530
@@ -115,6 +115,11 @@ interface DrawView : Object
         ExecMethod = FuTemporary ;
         StateMethod = GetMenuState ;
     ]
+    SID_SAVE_GRAPHIC // ole : yes, status : ?
+    [
+        ExecMethod = FuTemporary ;
+        StateMethod = GetMenuState ;
+    ]
     SID_CUT // ole : no, status : ?
     [
         ExecMethod = FuSupport ;
--- sd/sdi/sdraw.sdi	2004-12-07 18:50:09.000000000 +0530
+++ sd/sdi/sdraw.sdi	2004-12-22 13:49:14.000000000 +0530
@@ -4818,6 +4818,31 @@ SfxVoidItem OriginalSize SID_ORIGINAL_SI
 ]
 
 //--------------------------------------------------------------------------
+SfxVoidItem SaveGraphic SID_SAVE_GRAPHIC
+()
+[
+	/* flags: */  
+	AutoUpdate = FALSE, 
+	Cachable = Cachable, 
+	FastCall = FALSE, 
+	HasCoreId = FALSE, 
+	HasDialog = FALSE, 
+	ReadOnlyDoc = TRUE, 
+	Toggle = FALSE, 
+	Container = FALSE, 
+	RecordAbsolute = FALSE, 
+	RecordPerSet;
+	Synchron;
+
+	/* config: */ 
+	AccelConfig = FALSE, 
+	MenuConfig = FALSE, 
+	StatusBarConfig = FALSE, 
+	ToolBoxConfig = FALSE, 
+	GroupId = GID_MODIFY;
+]
+
+//--------------------------------------------------------------------------
 SfxBoolItem OutlineMode SID_OUTLINEMODE
 
 [
--- sd/source/ui/app/localize.sdf	2004-12-07 18:50:16.000000000 +0530
+++ sd/source/ui/app/localize.sdf	2004-12-23 12:32:43.725777285 +0530
@@ -1384,6 +1384,34 @@ sd	source\ui\app\menuids_tmpl.src	0	menu
 sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_COLORRESOLUTION	DUMMY+4			0	sv	~Färgupplösning				2004-11-23 13:33:26.78
 sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_COLORRESOLUTION	DUMMY+4			0	zh-CN	彩色分辨率(~C)				2004-11-23 13:33:26.78
 sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_COLORRESOLUTION	DUMMY+4			0	zh-TW	顏色解析度(~C)				2004-11-23 13:33:26.78
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	ar	...حفظ الصورة				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	ca	Desa ~imatge...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	cs	Uložit obrázek				2003-10-21 15:24:56.263
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	cz	Uložit obrázek				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	da	Gem grafik...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	el	Αποθήκευση ~γραφικού...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	es	Guardar ~imagen...				2004-10-06 18:01:49.373
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	et	Save Graphics...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	fi	Tallenna grafiikka...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	fr	Enregistrer l'~image...				2004-10-06 18:01:49.373
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	he	~Grafik speichern...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	hi-IN	सुचित्रों को संचित करो...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	hu	Kép mentése...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	it	~Salva immagine...				2004-10-06 18:01:49.373
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	ja	図の保存...				2004-10-06 18:01:49.373
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	ko	그래픽 저장...				2004-10-06 18:01:49.373
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	nl	Afbeelding ops~laan...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	pl	Zapisz grafikę...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	pt	~Guardar imagem...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	pt-BR	Salvar figura...				2004-10-06 18:01:49.373
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	ru	Сохранить графический объект...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	sk	Uložiť obrázok				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	sl	Shrani grafiko...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	sv	~Spara grafik...				2004-10-06 18:01:49.373
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	th	บันทึกกราฟิค...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	tr	Grafiği kaydet...				20040507 14:26:28
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	zh-CN	存盘图形...				2004-10-06 18:01:49.373
+sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_SAVE_GRAPHIC		SID_SAVE_GRAPHIC	SID_SAVE_GRAPHIC	0	zh-TW	儲存圖形...				2004-10-06 18:01:49.373
 sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_COMBINE	SID_COMBINE	SID_COMBINE		0	es	Com~binar	Combina los objetos seleccionados			2004-11-23 13:33:26.78
 sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_COMBINE	SID_COMBINE	SID_COMBINE		0	fr	Combiner	Associe les objets sélectionnés			2004-11-23 13:33:26.78
 sd	source\ui\app\menuids_tmpl.src	0	menuitem	MN_COMBINE	SID_COMBINE	SID_COMBINE		0	it	Com~bina	Combina gli oggetti selezionati			2004-11-23 13:33:26.78
--- sd/source/ui/app/menuids_tmpl.src	2004-11-04 21:34:05.000000000 +0530
+++ sd/source/ui/app/menuids_tmpl.src	2004-12-23 11:57:32.982925950 +0530
@@ -1357,6 +1357,16 @@
 		Text [ x-comment ] = " ";\
 	};
 
+#define MN_SAVE_GRAPHIC\
+    MenuItem\
+    {\
+        Identifier = SID_SAVE_GRAPHIC ; \
+	HelpID = SID_SAVE_GRAPHIC ; \
+	Text [ de ] = "~Grafik speichern..." ; \
+	Text [ en-US ] = "Save ~Graphic..." ; \
+		Text [ x-comment ] = " "; \
+	};
+
 #define MN_COLORRESOLUTION \
     MenuItem\
     {\
--- sd/source/ui/app/popup2_tmpl.src	2004-12-07 18:50:16.000000000 +0530
+++ sd/source/ui/app/popup2_tmpl.src	2004-12-23 11:49:14.865785320 +0530
@@ -570,6 +570,15 @@
 		MN_STARIMAGE
 		MN_COLORRESOLUTION
 		SEPARATOR
+		MenuItem\
+		{\
+		        Identifier = SID_SAVE_GRAPHIC ; \
+			HelpID = SID_SAVE_GRAPHIC ; \
+			Text [ de ] = "~Grafik speichern..." ; \
+			Text [ en-US ] = "Save ~Graphic..." ; \
+			Text [ x-comment ] = " "; \
+		};
+		SEPARATOR
 		MN_CHAR_PARAGRAPH
 		SEPARATOR
 		MN_POSITION
--- sd/source/ui/inc/DrawViewShell.hxx	2004-12-07 18:50:23.000000000 +0530
+++ sd/source/ui/inc/DrawViewShell.hxx	2004-12-22 14:00:43.000000000 +0530
@@ -490,6 +490,9 @@ private:
         PageKind ePageKind,
         SdPage* pPage);
 
+        /** Saves the selected graphic to a user-specified file */
+        void SaveGraphic( );
+
 	::com::sun::star::uno::Reference< ::com::sun::star::scanner::XScannerManager >	mxScannerManager;
 	::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >		mxScannerListener;
 	TransferableClipboardListener*                                                  pClipEvtLstnr;
--- sd/source/ui/view/drviews2.cxx	2004-12-07 18:50:29.000000000 +0530
+++ sd/source/ui/view/drviews2.cxx	2004-12-22 15:44:30.000000000 +0530
@@ -112,6 +112,35 @@
 #include <basic/sbstar.hxx>
 #endif
 
+#ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX
+#include <svtools/pathoptions.hxx>
+#endif
+#ifndef _COM_SUN_STAR_UI_DIALOGS_XFILEPICKER_HPP_
+#include <com/sun/star/ui/dialogs/XFilePicker.hpp>
+#endif
+#ifndef _COM_SUN_STAR_UI_DIALOGS_XFILTERMANAGER_HPP_
+#include <com/sun/star/ui/dialogs/XFilterManager.hpp>
+#endif
+#ifndef  _COM_SUN_STAR_UI_DIALOGS_TEMPLATEDESCRIPTION_HPP_
+#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
+#endif
+#ifndef _FILEDLGHELPER_HXX
+#include <sfx2/filedlghelper.hxx>
+#endif
+#ifndef _URLOBJ_HXX
+#include <tools/urlobj.hxx>
+#endif
+#ifndef _FILTER_HXX
+#include <svtools/filter.hxx>
+#endif
+#ifndef _SVX_IMPGRF_HXX
+#include <svx/impgrf.hxx>
+#endif
+#ifndef _XOUTBMP_HXX
+#include <svx/xoutbmp.hxx>
+#endif
+
+
 #define ITEMID_FIELD	EE_FEATURE_FIELD
 #ifndef _SVX_FLDITEM_HXX //autogen
 #include <svx/flditem.hxx>
@@ -1256,6 +1285,12 @@ void DrawViewShell::FuTemporary(SfxReque
 			rReq.Done();
 		break;
 
+		case SID_SAVE_GRAPHIC:
+			SaveGraphic();
+			Cancel();
+			rReq.Ignore();
+			break;
+
 		case SID_DRAW_FONTWORK:
 		case SID_DRAW_FONTWORK_VERTICAL:
 		{
@@ -1306,4 +1341,88 @@ SdPage* DrawViewShell::CreateOrDuplicate
     return pNewPage;
 }
 
+
+// From sw/source/ui/docvw/romenu.cxx
+void lcl_GetPreferedExtension( String &rExt, const Graphic &rGrf )
+{
+	// dann ggfs. ueber die native-Info der Grafik den "besten"
+	// Filter vorschlagen
+	const sal_Char* pExt = "png";
+	switch( ((Graphic *)&rGrf)->GetLink().GetType() )
+	{
+		case GFX_LINK_TYPE_NATIVE_GIF:      pExt = "gif"; break;
+		case GFX_LINK_TYPE_NATIVE_TIF:      pExt = "tif"; break;
+		case GFX_LINK_TYPE_NATIVE_WMF:      pExt = "wmf"; break;
+		case GFX_LINK_TYPE_NATIVE_MET:      pExt = "met"; break;
+		case GFX_LINK_TYPE_NATIVE_PCT:		pExt = "pct"; break;
+		case GFX_LINK_TYPE_NATIVE_JPG:		pExt = "jpg"; break;
+	}
+	rExt.AssignAscii( pExt );
+}
+
+
+void DrawViewShell::SaveGraphic()
+{
+	using namespace com::sun::star::uno;
+	using namespace com::sun::star::ui::dialogs;
+	using namespace ::sfx2;
+
+	SvtPathOptions aPathOpt;
+	String sGrfPath( aPathOpt.GetGraphicPath() );
+
+	FileDialogHelper aDlgHelper( TemplateDescription::FILESAVE_SIMPLE, 0 );
+	Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker();
+
+	INetURLObject aPath;
+	aPath.SetSmartURL( sGrfPath);
+
+	SdrGrafObj *pGrafObj = PTR_CAST( SdrGrafObj, pDrView->GetMarkedObjectList().GetMark( 0 )->GetObj() );
+	if (0 == pGrafObj )
+		return;
+
+	const Graphic &rGraphic = pGrafObj->GetGraphic();
+
+	String aExt;
+	lcl_GetPreferedExtension( aExt, rGraphic );
+	aExt.ToLowerAscii();
+	int nDfltFilter = INT_MAX;
+
+	xFP->setDisplayDirectory( aPath.GetMainURL(INetURLObject::DECODE_TO_IURI) );
+
+	GraphicFilter& rGF = *GetGrfFilter();
+	const USHORT nCount = rGF.GetExportFormatCount();
+
+	Reference<XFilterManager> xFltMgr(xFP, UNO_QUERY);
+
+	for ( int i = 0; i < nCount; i++ )
+	{
+	    xFltMgr->appendFilter( rGF.GetExportFormatName( i ), rGF.GetExportWildcard( i ) );
+	    if ( COMPARE_EQUAL == aExt.CompareIgnoreCaseToAscii(rGF.GetExportFormatShortName( i ).ToLowerAscii() ))
+			nDfltFilter = i;
+	}
+
+	if( INT_MAX == nDfltFilter )
+		return;
+	
+	xFltMgr->setCurrentFilter( rGF.GetExportFormatName( nDfltFilter ) );
+
+	if( aDlgHelper.Execute() == ERRCODE_NONE )
+	{
+		String sPath( xFP->getFiles().getConstArray()[0] );
+		//verwendeten Pfad merken - bitte nicht wieder wegoptimieren!
+		aPath.SetSmartURL( sPath);
+		sGrfPath = aPath.GetPath();
+		
+		int nFilter;
+		if ( xFltMgr->getCurrentFilter().getLength() && rGF.GetExportFormatCount() )
+			nFilter = rGF.GetExportFormatNumber( xFltMgr->getCurrentFilter() );
+		else
+			nFilter = GRFILTER_FORMAT_DONTKNOW;
+		String aFilter( rGF.GetExportFormatShortName( nFilter ) );
+		XOutBitmap::WriteGraphic( rGraphic, sPath, aFilter,
+								  XOUTBMP_DONT_EXPAND_FILENAME );
+		return;
+	}
+}
+
 } // end of namespace sd
--- sd/source/ui/view/drviewsj.cxx	2004-10-15 16:06:30.000000000 +0530
+++ sd/source/ui/view/drviewsj.cxx	2004-12-22 14:11:09.000000000 +0530
@@ -193,7 +193,8 @@ void DrawViewShell::GetMenuStateSel( Sfx
 			SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_BEFORE_OBJ ) ||
 			SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_BEHIND_OBJ ) ||
 			SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_REVERSE_ORDER ) ||
-			SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ORIGINAL_SIZE ) )
+			SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ORIGINAL_SIZE ) ||
+			SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_SAVE_GRAPHIC ) )
 		{
 			const SdrObject* pObj = rMarkList.GetMark(0)->GetObj();
 			UINT32 nInv = pObj->GetObjInventor();
@@ -211,6 +212,11 @@ void DrawViewShell::GetMenuStateSel( Sfx
 					rSet.DisableItem(SID_ORIGINAL_SIZE);
             }
 
+                        if( !( pObj->ISA( SdrGrafObj ) ) )
+			{
+				rSet.DisableItem( SID_SAVE_GRAPHIC );
+			}
+
 			// Wenn es sich um kein Gruppenobjekt oder 3D-Objekt handelt
 			// wird "Gruppe betreten" disabled
 			if( !( ( pObj->ISA( SdrObjGroup ) && nInv == SdrInventor ) ||
