diff -rup cppcanvas-orig/prj/build.lst cppcanvas/prj/build.lst
--- cppcanvas-orig/prj/build.lst	2007-08-06 12:08:27.000000000 +0200
+++ cppcanvas/prj/build.lst	2007-11-06 15:06:07.000000000 +0100
@@ -5,3 +5,4 @@ cx	cppcanvas\source\tools				nmake	-	all
 cx	cppcanvas\source\wrapper			nmake	-	all cx_wrapper cx_inc NULL
 cx	cppcanvas\source\mtfrenderer		nmake	-	all	cx_mtfrenderer cx_inc NULL
 cx	cppcanvas\util						nmake	-	all	cx_util cx_tools cx_wrapper cx_mtfrenderer NULL
+cx	cppcanvas\source\uno				nmake	-	all	cx_uno cx_tools cx_wrapper cx_mtfrenderer cx_util NULL
--- cppcanvas/prj/d.lst
+++ cppcanvas/prj/d.lst
@@ -1,4 +1,5 @@
 ..\%__SRC%\bin\cppcanvas*.dll %_DEST%\bin%_EXT%\cppcanvas*.dll
+..\%__SRC%\bin\mtfrenderer*.dll %_DEST%\bin%_EXT%\mtfrenderer*.dll
 ..\%__SRC%\lib\icppcanvas.lib %_DEST%\lib%_EXT%\icppcanvas.lib
 ..\%__SRC%\lib\lib*.* %_DEST%\lib%_EXT%\lib*.*
 
--- /dev/null	2007-10-08 22:21:59.000000000 +0200
+++ cppcanvas/source/uno/exports.dxp	2007-11-06 15:03:31.000000000 +0100
@@ -0,0 +1,3 @@
+component_getImplementationEnvironment
+component_writeInfo
+component_getFactory
--- /dev/null	2007-10-08 22:21:59.000000000 +0200
+++ cppcanvas/source/uno/exports.map	2007-11-06 15:03:38.000000000 +0100
@@ -0,0 +1,8 @@
+CAN_1_0 {
+	global:
+		component_getImplementationEnvironment;
+		component_writeInfo;
+		component_getFactory;
+	local:
+		*;
+};
--- /dev/null	2007-10-08 22:21:59.000000000 +0200
+++ cppcanvas/source/uno/makefile.mk	2007-11-06 15:09:24.000000000 +0100
@@ -0,0 +1,71 @@
+#*************************************************************************
+#
+#   OpenOffice.org - a multi-platform office productivity suite
+#
+#   $RCSfile: makefile.mk,v $
+#
+#   $Revision: 1.6 $
+#
+#   last change: $Author: hr $ $Date: 2006/06/20 05:14:24 $
+#
+#   The Contents of this file are made available subject to
+#   the terms of GNU Lesser General Public License Version 2.1.
+#
+#
+#     GNU Lesser General Public License Version 2.1
+#     =============================================
+#     Copyright 2005 by Sun Microsystems, Inc.
+#     901 San Antonio Road, Palo Alto, CA 94303, USA
+#
+#     This library is free software; you can redistribute it and/or
+#     modify it under the terms of the GNU Lesser General Public
+#     License version 2.1, as published by the Free Software Foundation.
+#
+#     This library is distributed in the hope that it will be useful,
+#     but WITHOUT ANY WARRANTY; without even the implied warranty of
+#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#     Lesser General Public License for more details.
+#
+#     You should have received a copy of the GNU Lesser General Public
+#     License along with this library; if not, write to the Free Software
+#     Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+#     MA  02111-1307  USA
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=cppcanvas
+TARGET=mtfrenderer
+ENABLE_EXCEPTIONS=TRUE
+
+
+# --- Settings -----------------------------------------------------------
+
+.INCLUDE :	settings.mk
+
+# --- Common ----------------------------------------------------------
+
+.IF "$(verbose)"!="" || "$(VERBOSE)"!=""
+CDEFS+= -DVERBOSE
+.ENDIF
+
+SLOFILES =	$(SLO)$/uno_mtfrenderer.obj
+
+SHL1TARGET=$(TARGET).uno
+
+SHL1STDLIBS= $(SALLIB) $(CPPULIB) $(CPPUHELPERLIB) $(COMPHELPERLIB) $(CPPCANVASLIB) $(BASEGFXLIB)
+
+SHL1IMPLIB=i$(TARGET)
+SHL1LIBS=$(SLB)$/$(TARGET).lib
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+
+SHL1VERSIONMAP=exports.map
+
+DEF1NAME=$(SHL1TARGET)
+DEF1EXPORTFILE=exports.dxp
+
+# ==========================================================================
+
+.INCLUDE :	target.mk
+
--- /dev/null	2007-10-08 22:21:59.000000000 +0200
+++ cppcanvas/source/uno/uno_mtfrenderer.cxx	2007-11-07 15:10:55.000000000 +0100
@@ -0,0 +1,53 @@
+#include "uno_mtfrenderer.hxx"
+#include <cppcanvas/vclfactory.hxx>
+#include <comphelper/servicedecl.hxx>
+#include <cppuhelper/factory.hxx>
+
+using namespace ::com::sun::star;
+
+void MtfRenderer::setMetafile (const uno::Sequence< sal_Int8 >& rMtf) throw (uno::RuntimeException)
+{
+        // printf ("MtfRenderer::setMetafile unimplemented, use fast property set or implement me\n");
+}
+
+void MtfRenderer::draw (double fScaleX, double fScaleY) throw (uno::RuntimeException)
+{
+    if (mpMetafile && mxCanvas.get()) {
+        cppcanvas::VCLFactory& factory = cppcanvas::VCLFactory::getInstance();
+        cppcanvas::BitmapCanvasSharedPtr canvas = factory.createCanvas (mxCanvas);
+        cppcanvas::RendererSharedPtr renderer = factory.createRenderer (canvas, *mpMetafile, cppcanvas::Renderer::Parameters ());
+        ::basegfx::B2DHomMatrix aMatrix;
+        aMatrix.scale( fScaleX, fScaleY );
+        canvas->setTransformation( aMatrix );
+        renderer->draw ();
+    }
+}
+
+void MtfRenderer::setFastPropertyValue( sal_Int32 nHandle, const uno::Any& aAny)  throw (uno::RuntimeException)
+{
+    if (nHandle == 0) {
+        mpMetafile = (GDIMetaFile*) *reinterpret_cast<const sal_Int64*>(aAny.getValue()); 
+    }
+}
+
+MtfRenderer::MtfRenderer (uno::Sequence<uno::Any> const& aArgs, uno::Reference<uno::XComponentContext> const&) : MtfRendererBase (m_aMutex), mpMetafile (NULL)
+{
+    if( aArgs.getLength() == 1 ) {
+        aArgs[0] >>= mxCanvas;
+    }
+}
+
+namespace sdecl = comphelper::service_decl;
+#if defined (__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ <= 3)
+ sdecl::class_<MtfRenderer, sdecl::with_args<true> > serviceImpl;
+ const sdecl::ServiceDecl MtfRendererDecl(
+     serviceImpl,
+#else
+ const sdecl::ServiceDecl MtfRendererDecl(
+     sdecl::class_<MtfRenderer, sdecl::with_args<true> >(),
+#endif
+    "com.sun.star.comp.rendering.MtfRenderer",
+    "com.sun.star.rendering.MtfRenderer" );
+
+// The C shared lib entry points
+COMPHELPER_SERVICEDECL_EXPORTS1(MtfRendererDecl)
--- /dev/null	2007-10-08 22:21:59.000000000 +0200
+++ cppcanvas/source/uno/uno_mtfrenderer.hxx	2007-11-07 14:49:15.000000000 +0100
@@ -0,0 +1,33 @@
+#ifndef _UNO_MTF_RENDERER_HXX_
+#define _UNO_MTF_RENDERER_HXX_
+#include <com/sun/star/rendering/MtfRenderer.hpp>
+#include <com/sun/star/rendering/XBitmapCanvas.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/beans/XFastPropertySet.hpp>
+#include <cppuhelper/compbase2.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <vcl/gdimtf.hxx>
+
+typedef cppu::WeakComponentImplHelper2<com::sun::star::rendering::XMtfRenderer, com::sun::star::beans::XFastPropertySet> MtfRendererBase;
+
+class MtfRenderer : private cppu::BaseMutex, public MtfRendererBase
+{
+public:
+    MtfRenderer (com::sun::star::uno::Sequence<com::sun::star::uno::Any> const& args,
+                 com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&);
+
+    // XMtfRenderer iface
+    void SAL_CALL setMetafile (const ::com::sun::star::uno::Sequence< sal_Int8 >& rMtf) throw (::com::sun::star::uno::RuntimeException);
+    void SAL_CALL draw (double fScaleX, double fScaleY) throw (::com::sun::star::uno::RuntimeException);
+
+    // XFastPropertySet
+    // setFastPropertyValue (0, GDIMetaFile*) is used to speedup the rendering
+    virtual ::com::sun::star::uno::Any SAL_CALL getFastPropertyValue(sal_Int32 nHandle)  throw (::com::sun::star::uno::RuntimeException) { return ::com::sun::star::uno::Any(); }
+    virtual void SAL_CALL setFastPropertyValue(sal_Int32 nHandle, const ::com::sun::star::uno::Any&)  throw (::com::sun::star::uno::RuntimeException);
+
+private:
+    GDIMetaFile* mpMetafile;
+    com::sun::star::uno::Reference<com::sun::star::rendering::XBitmapCanvas> mxCanvas;
+};
+
+#endif
