diff --git a/dlls/jscript/error.c b/dlls/jscript/error.c
index 2465c77..593244d 100644
--- a/dlls/jscript/error.c
+++ b/dlls/jscript/error.c
@@ -29,7 +29,6 @@
 typedef struct {
     DispatchEx dispex;
 
-    VARIANT description;
     VARIANT message;
 } ErrorInstance;
 
@@ -49,24 +48,6 @@
     return is_vclass(jsthis, JSCLASS_ERROR) ? error_from_vdisp(jsthis) : NULL;
 }
 
-static HRESULT Error_description(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
-        DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
-    ErrorInstance *This = error_from_vdisp(jsthis);
-
-    TRACE("\n");
-
-    switch(flags) {
-    case DISPATCH_PROPERTYGET:
-        return VariantCopy(retv, &This->description);
-    case DISPATCH_PROPERTYPUT:
-        return VariantCopy(&This->description, get_arg(dp, 0));
-    default:
-        FIXME("unimplemented flags %x\n", flags);
-        return E_NOTIMPL;
-    }
-}
-
 /* ECMA-262 3rd Edition    15.11.4.3 */
 static HRESULT Error_message(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
         DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
@@ -184,13 +165,11 @@
 {
     ErrorInstance *This = (ErrorInstance*)dispex;
 
-    VariantClear(&This->description);
     VariantClear(&This->message);
     heap_free(This);
 }
 
 static const builtin_prop_t Error_props[] = {
-    {descriptionW,              Error_description,                  0},
     {messageW,                  Error_message,                      0},
     {toStringW,                 Error_toString,                     PROPF_METHOD}
 };
@@ -205,7 +184,6 @@
 };
 
 static const builtin_prop_t ErrorInst_props[] = {
-    {descriptionW,              Error_description,                  0},
     {messageW,                  Error_message,                      0},
 };
 
@@ -264,14 +242,17 @@
     V_VT(&err->message) = VT_BSTR;
     if(msg) V_BSTR(&err->message) = SysAllocString(msg);
     else V_BSTR(&err->message) = SysAllocStringLen(NULL, 0);
-
-    VariantCopy(&err->description, &err->message);
-
     if(!V_BSTR(&err->message)) {
         heap_free(err);
         return E_OUTOFMEMORY;
     }
 
+    hres = jsdisp_propput_name(&err->dispex, descriptionW, &err->message, NULL/*FIXME*/, NULL/*FIXME*/);
+    if(FAILED(hres)) {
+        jsdisp_release(&err->dispex);
+        return hres;
+    }
+
     *ret = &err->dispex;
     return S_OK;
 }
