Hi Vita. I guess I want to make a different point. The COM object that I have represents a graphic with an internal binary representation that is specifc to my application. I want to export this graphic to JPEG into a stream (or a number of other formats). The JPEG representation is not enough to recreate my graphics, so it is not equivalent to persisting my object, I just want to export it to a stream (not to a file), e.g. to pipe it into another filter stream or to return it as a response to an http request. Somewhat like this (pseudocode): IUnknown* pMyObject = ... IStream* pOut = ... // E.g. via SHCreateStreamOnFile(...) IExport* pExport; pMyObject->QueryInterface(IID_IExport, (LPVOID*) &pExport); LPCWSTR mimeType = L"image/jpeg"; IBindCtx* pJpegOptions = ... IPersistStream* pPersStream; pExport->get_Persister(&pPersStream, mimeType, pJpegOptions); pPersStream->Save(pOut, FALSE); // export the same instance into a different format mimeType = L"application/postscript"; IBindCtx* pPostscriptOptions = ... pExport->get_Persister(&pPersStream, mimeType, pPostscriptOptions ); pPersStream->Save(pOut, FALSE); I wonder if this is the right programming pattern to export an object and if yes, is there a standard interface that corresponds to the IExport in my pseudocode? I considered using IPersistMoniker like this: IUnknown* pMyObject = ... IPersistMoniker* pPersMon; pMyObject->QueryInterface(IID_IPersistMoniker, (LPVOID*) &pPersMon); IMoniker* pOutMon; CreateFileMoniker(L"test.jpg", &pOutMon); IBindCtx* pJpegOptions = ... pPersMon->Save(pOutMon, pJpegOptions, FALSE) Is this the right pattern?