--- sc/source/ui/vba//vbachartobject.cxx	
+++ sc/source/ui/vba//vbachartobject.cxx
@@ -36,73 +36,182 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/document/XEmbeddedObjectSupplier.hpp>
 #include <com/sun/star/container/XNamed.hpp>
-
+#include <com/sun/star/script/BasicErrorException.hpp>
+#include <basic/sberrors.hxx>
 #include "vbachartobject.hxx"
+#include "vbachartobjects.hxx"
 
 using namespace ::com::sun::star;
 using namespace ::org::openoffice;
 
 const rtl::OUString CHART_NAME( RTL_CONSTASCII_USTRINGPARAM("Name") );
+const rtl::OUString PERSIST_NAME( RTL_CONSTASCII_USTRINGPARAM("PersistName") );
 
-::rtl::OUString SAL_CALL 
-ScVbaChartObject::getName() throw (css::uno::RuntimeException)
+ScVbaChartObject::ScVbaChartObject( const css::uno::Reference< oo::vba::XHelperInterface >& _xParent, const css::uno::Reference< css::uno::XComponentContext >& _xContext, const css::uno::Reference< css::table::XTableChart >& _xTableChart, const css::uno::Reference< css::drawing::XDrawPageSupplier >& _xDrawPageSupplier ) : ChartObjectImpl_BASE( _xParent, _xContext ), xTableChart( _xTableChart ), xDrawPageSupplier( _xDrawPageSupplier )
 {
-	rtl::OUString sName;
-	uno::Reference< container::XNamed > xNamed( m_xTableChart, uno::UNO_QUERY );
-	if ( xNamed.is() )
-		sName = xNamed->getName();
-	return sName;
+        xDrawPage = xDrawPageSupplier->getDrawPage();        
+        xEmbeddedObjectSupplier.set( xTableChart, uno::UNO_QUERY_THROW );
+        xNamed.set( xTableChart, uno::UNO_QUERY_THROW );
+        sPersistName = getPersistName();
+        xShape = setShape();
+        setName(sPersistName);
+        oShapeHelper.reset(new ShapeHelper(xShape));
 }
 
+rtl::OUString ScVbaChartObject::getPersistName()
+{
+	if ( !sPersistName.getLength() )
+		sPersistName = xNamed->getName();
+	return sPersistName;
+}
 
+uno::Reference< drawing::XShape > 
+ScVbaChartObject::setShape() throw ( script::BasicErrorException )
+{
+	try
+	{
+		sal_Int32 nItems = xDrawPage->getCount();
+		for (int i = 0; i < nItems; i++)
+		{
+			xShape.set( xDrawPage->getByIndex(i), uno::UNO_QUERY_THROW );
+			if (xShape->getShapeType().compareToAscii("com.sun.star.drawing.OLE2Shape") == 0 )
+			{
+				uno::Reference< beans::XPropertySet > xShapePropertySet(xShape, uno::UNO_QUERY_THROW );
+				rtl::OUString sName;
+				xShapePropertySet->getPropertyValue(PERSIST_NAME ) >>=sName;
+				if ( sName.equals(sPersistName))
+				{
+					xNamedShape.set( xShape, uno::UNO_QUERY_THROW );
+					return xShape;
+				}
+			}
+		}
+	}
+	catch (uno::Exception& e)
+	{
+		throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString() );
+	}
+	return NULL;
+}
 
-uno::Reference< excel::XChart > SAL_CALL 
-ScVbaChartObject::getChart() throw (css::uno::RuntimeException)
+void SAL_CALL 
+ScVbaChartObject::setName( const rtl::OUString& sName ) throw (css::uno::RuntimeException)
 {
-	uno::Reference< document::XEmbeddedObjectSupplier > xEmbed( m_xTableChart, uno::UNO_QUERY_THROW );
-	uno::Reference< chart::XChartDocument > xChart( xEmbed->getEmbeddedObject(), uno::UNO_QUERY_THROW );
+	xNamedShape->setName(sName);
+}
+
+
+::rtl::OUString SAL_CALL 
+ScVbaChartObject::getName() throw (css::uno::RuntimeException)
+{
+	return xNamedShape->getName();
+}
 
-	// #TODO check with vba to see whether its valid to return a 
-	// null object for the Chart property. atm, we throw ( i.e. if in
-	// doubt... throw ) 
-	
-	return new ScVbaChart( m_xContext, xChart );
-}
-/*
-#include<cppuhelper/implbase1.hxx>
-#include<org/openoffice/vba/XChartObject.hpp>
-#include"vbacollectionimpl.hxx"
-
-typedef ::cppu::ImplInheritanceHelper1< ScVbaCollectionBaseImpl, oo::vba::XChartObject > XSeriesCollectionBase;
-class MyCollectionImpl : public XSeriesCollectionBase
-{
-public:
-	//MyCollectionImpl( css::uno::Reference< css::uno::XComponentContext >& xContext ) : ScVbaCollectionBaseImpl( xContext ) {}
-	MyCollectionImpl( css::uno::Reference< css::uno::XComponentContext >& xContext ) : XSeriesCollectionBase( xContext ) {}
-        virtual ::rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException)
+void SAL_CALL
+ScVbaChartObject::Delete() throw ( css::script::BasicErrorException )
+{
+	// parent of this object is sheet
+	uno::Reference< excel::XWorksheet > xParent( getParent(), uno::UNO_QUERY_THROW );
+	uno::Reference< excel::XChartObjects > xColl( xParent->ChartObjects( uno::Any() ), uno::UNO_QUERY_THROW );
+	ScVbaChartObjects* pChartObjectsImpl = static_cast< ScVbaChartObjects* >( xColl.get() );
+	if (pChartObjectsImpl) 
+		pChartObjectsImpl->removeByName( getPersistName() );
+	else 
+		throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Parent is not ChartObjects" ) ) );
+}
+    
+void 
+ScVbaChartObject::Activate() throw ( script::BasicErrorException )
+{
+	try
 	{
-		OSL_TRACE("**** In Get Name for mangled object");
-		rtl::OUString dummy;
-		return dummy;
+		// #TODO #FIXME should be ThisWorkbook or equivelant
+		// XModel
+		//uno::Reference< view::XSelectionSupplier > xSelectionSupplier( getXModel().getCurrentController());
+		uno::Reference< view::XSelectionSupplier > xSelectionSupplier( getCurrentDocument()->getCurrentController(), uno::UNO_QUERY_THROW );
+		xSelectionSupplier->select(uno::makeAny(xShape));
 	}
-        virtual css::uno::Any test() throw (css::uno::RuntimeException)
+	catch (uno::Exception& e)
 	{
-		OSL_TRACE("**** In test  for mangled object");
-		return uno::Any();
+		throw script::BasicErrorException( rtl::OUString(), uno::Reference< uno::XInterface >(), SbERR_METHOD_FAILED, rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ChartObject Activate internal error" ) ) );
 	}
-	virtual css::uno::Reference< oo::vba::XChart > SAL_CALL getChart() throw (css::uno::RuntimeException)
+}
+
+uno::Reference< excel::XChart > SAL_CALL 
+ScVbaChartObject::getChart() throw (css::uno::RuntimeException)
+{
+	return new ScVbaChart( this, mxContext, xEmbeddedObjectSupplier->getEmbeddedObject(), xTableChart );
+}
+
+rtl::OUString& 
+ScVbaChartObject::getServiceImplName()
+{
+	static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaChartObject") );
+	return sImplName;
+}
+
+uno::Sequence< rtl::OUString > 
+ScVbaChartObject::getServiceNames()
+{
+	static uno::Sequence< rtl::OUString > aServiceNames;
+	if ( aServiceNames.getLength() == 0 )
 	{
-		OSL_TRACE("**** In getChart  for mangled object");
-		return css::uno::Reference< oo::vba::XChart >();
+		aServiceNames.realloc( 1 );
+		aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("org.openoffice.excel.ChartObject" ) );
 	}
+	return aServiceNames;
+}
+
+double 
+ScVbaChartObject::getHeight()
+{
+	return oShapeHelper->getHeight();
+}
+
+void 
+ScVbaChartObject::setHeight(double _fheight) throw ( script::BasicErrorException )
+{
+	oShapeHelper->setHeight(_fheight);
+}
+    
+double 
+ScVbaChartObject::getWidth()
+{
+        return oShapeHelper->getWidth();
+}
 
-};
-*/
+void 
+ScVbaChartObject::setWidth(double _fWidth) throw ( script::BasicErrorException )
+{
+	oShapeHelper->setWidth(_fWidth);
+}
+    
+double 
+ScVbaChartObject::getLeft()
+{
+        return oShapeHelper->getLeft();
+}
 
-uno::Any SAL_CALL
-ScVbaChartObject::test()throw (css::uno::RuntimeException)
+void 
+ScVbaChartObject::setLeft(double _fLeft)
 {
-	return uno::Any();
+	oShapeHelper->setLeft(_fLeft);
 }
+    
+double 
+ScVbaChartObject::getTop()
+{
+        return oShapeHelper->getTop();
+}    
 
+void 
+ScVbaChartObject::setTop(double _fTop)
+{
+	oShapeHelper->setTop(_fTop);
+}
 
+uno::Reference< uno::XInterface > 
+ScVbaChartObject::getUnoObject() throw (script::BasicErrorException) 
+{
+	return xShape;
+}
