diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c
index 9991f08f..42dad41 100644
--- a/dlls/jscript/global.c
+++ b/dlls/jscript/global.c
@@ -774,7 +774,7 @@
     if(FAILED(hres))
         return hres;
 
-    hres = create_regexp_constr(ctx, &ctx->regexp_constr);
+    hres = create_regexp_constr(ctx, object_prototype, &ctx->regexp_constr);
     if(FAILED(hres))
         return hres;
 
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 63654f7..4db58fc 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -231,7 +231,7 @@
 HRESULT init_error_constr(script_ctx_t*);
 HRESULT create_number_constr(script_ctx_t*,DispatchEx**);
 HRESULT create_object_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
-HRESULT create_regexp_constr(script_ctx_t*,DispatchEx**);
+HRESULT create_regexp_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
 HRESULT create_string_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
 
 typedef struct {
diff --git a/dlls/jscript/regexp.c b/dlls/jscript/regexp.c
index a4d640e..5fe99ab 100644
--- a/dlls/jscript/regexp.c
+++ b/dlls/jscript/regexp.c
@@ -90,11 +90,6 @@
 static const WCHAR multilineW[] = {'m','u','l','t','i','l','i','n','e',0};
 static const WCHAR lastIndexW[] = {'l','a','s','t','I','n','d','e','x',0};
 static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0};
-static const WCHAR toLocaleStringW[] = {'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
-static const WCHAR hasOwnPropertyW[] = {'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
-static const WCHAR propertyIsEnumerableW[] =
-    {'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
-static const WCHAR isPrototypeOfW[] = {'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
 static const WCHAR execW[] = {'e','x','e','c',0};
 static const WCHAR testW[] = {'t','e','s','t',0};
 
@@ -3471,34 +3466,6 @@
     return E_NOTIMPL;
 }
 
-static HRESULT RegExp_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
-        VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT RegExp_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
-        VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT RegExp_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
-        VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT RegExp_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
-        VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
 static HRESULT RegExp_exec(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
 {
@@ -3542,15 +3509,11 @@
 static const builtin_prop_t RegExp_props[] = {
     {execW,                  RegExp_exec,                  PROPF_METHOD},
     {globalW,                RegExp_global,                0},
-    {hasOwnPropertyW,        RegExp_hasOwnProperty,        PROPF_METHOD},
     {ignoreCaseW,            RegExp_ignoreCase,            0},
-    {isPrototypeOfW,         RegExp_isPrototypeOf,         PROPF_METHOD},
     {lastIndexW,             RegExp_lastIndex,             0},
     {multilineW,             RegExp_multiline,             0},
-    {propertyIsEnumerableW,  RegExp_propertyIsEnumerable,  PROPF_METHOD},
     {sourceW,                RegExp_source,                0},
     {testW,                  RegExp_test,                  PROPF_METHOD},
-    {toLocaleStringW,        RegExp_toLocaleString,        PROPF_METHOD},
     {toStringW,              RegExp_toString,              PROPF_METHOD}
 };
 
@@ -3563,7 +3526,7 @@
     NULL
 };
 
-static HRESULT alloc_regexp(script_ctx_t *ctx, BOOL use_constr, RegExpInstance **ret)
+static HRESULT alloc_regexp(script_ctx_t *ctx, DispatchEx *object_prototype, RegExpInstance **ret)
 {
     RegExpInstance *regexp;
     HRESULT hres;
@@ -3572,10 +3535,10 @@
     if(!regexp)
         return E_OUTOFMEMORY;
 
-    if(use_constr)
-        hres = init_dispex_from_constr(&regexp->dispex, ctx, &RegExp_info, ctx->regexp_constr);
+    if(object_prototype)
+        hres = init_dispex(&regexp->dispex, ctx, &RegExp_info, object_prototype);
     else
-        hres = init_dispex(&regexp->dispex, ctx, &RegExp_info, NULL);
+        hres = init_dispex_from_constr(&regexp->dispex, ctx, &RegExp_info, ctx->regexp_constr);
 
     if(FAILED(hres)) {
         heap_free(regexp);
@@ -3593,7 +3556,7 @@
 
     TRACE("%s %x\n", debugstr_w(exp), flags);
 
-    hres = alloc_regexp(ctx, TRUE, &regexp);
+    hres = alloc_regexp(ctx, NULL, &regexp);
     if(FAILED(hres))
         return hres;
 
@@ -3694,12 +3657,12 @@
     return S_OK;
 }
 
-HRESULT create_regexp_constr(script_ctx_t *ctx, DispatchEx **ret)
+HRESULT create_regexp_constr(script_ctx_t *ctx, DispatchEx *object_prototype, DispatchEx **ret)
 {
     RegExpInstance *regexp;
     HRESULT hres;
 
-    hres = alloc_regexp(ctx, FALSE, &regexp);
+    hres = alloc_regexp(ctx, object_prototype, &regexp);
     if(FAILED(hres))
         return hres;
 
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index 7cb1f56..8db2bc9 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -1374,10 +1374,11 @@
         ok(obj.valueOf != Object.prototype.valueOf,
            "obj.valueOf == Object.prototype.valueOf");
 
-    ok(obj.test === "test", "obj.test = " + obj.test);
+    ok(obj._test === "test", "obj.test = " + obj._test);
 }
 
-Object.prototype.test = "test";
+Object.prototype._test = "test";
 testObjectInherit(new String("test"), false, true, false);
+testObjectInherit(/test/g, false, true, true);
 
 reportSuccess();
