You are not bothering me, I like to help. Anyways, here are some segments of code from a control that I wrote. First declare the property get_ and put_ functions in idl. [ object, uuid(...), dual, helpstring("IHTMLInfoCtl Interface"), pointer_default(unique) ] interface IHTMLInfoCtl : IDispatch { **[propput, id(0)] HRESULT URL([in]BSTR pVal); [propget, id(0)] HRESULT URL([out,retval]BSTR* newVal);** }; Next implement these functions in your class interface. The key to tying the data together is deriving your ATL object from the IPersistStream interface, then providing one of the IPersist implementations. I used IPersistePropertyBagImpl and it works fine. I am not sure, but I think that One of the IPersistxxx classes that I have declared may not need to be declared, but this code works for me. class ATL_NO_VTABLE CHTMLInfoCtl : public CComObjectRootEx, public CComCoClass, ... **public IPersistStreamInitImpl, public IPersistStorageImpl,** ... **public IPersistPropertyBagImpl,** ... { public: CHTMLInfoCtl(); ~CHTMLInfoCtl(); ... One final thing, add the IPersist entries to your COM map here. BEGIN_COM_MAP(CHTMLInfoCtl) COM_INTERFACE_ENTRY(IHTMLInfoCtl) ... **COM_INTERFACE_ENTRY(IPersistStorage) COM_INTERFACE_ENTRY(IPersistStreamInit) COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit) COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersistPropertyBag) COM_INTERFACE_ENTRY(IPersistPropertyBag)** END_COM_MAP() **BEGIN_PROP_MAP(CHTMLInfoCtl) PROP_ENTRY("URL", 0, CLSID_NULL) END_PROP_MAP()** // IHTMLInfoCtl public: STDMETHOD(get_URL)(BSTR *pVal); STDMETHOD(put_URL)(BSTR newURL); private: CComBSTR m_bstrURL; }; let me know if you have other questions.