diff --git a/Source/bindings/v8/ExceptionState.h b/Source/bindings/v8/ExceptionState.h
index 5235318..fbe338f 100644
--- a/Source/bindings/v8/ExceptionState.h
+++ b/Source/bindings/v8/ExceptionState.h
@@ -50,17 +50,14 @@
         DeletionContext,
         GetterContext,
         SetterContext,
+        EnumerationContext,
+        QueryContext,
+        IndexedGetterContext,
+        IndexedSetterContext,
+        IndexedDeletionContext,
         UnknownContext, // FIXME: Remove this once we've flipped over to the new API.
     };
 
-    explicit ExceptionState(const v8::Handle<v8::Object>& creationContext, v8::Isolate* isolate)
-        : m_code(0)
-        , m_context(UnknownContext)
-        , m_propertyName(0)
-        , m_interfaceName(0)
-        , m_creationContext(creationContext)
-        , m_isolate(isolate) { }
-
     ExceptionState(Context context, const char* propertyName, const char* interfaceName, const v8::Handle<v8::Object>& creationContext, v8::Isolate* isolate)
         : m_code(0)
         , m_context(context)
@@ -75,26 +72,24 @@
         , m_propertyName(0)
         , m_interfaceName(interfaceName)
         , m_creationContext(creationContext)
-        , m_isolate(isolate) { ASSERT(m_context == ConstructionContext); }
+        , m_isolate(isolate) { ASSERT(m_context == ConstructionContext || m_context == EnumerationContext || m_context == IndexedSetterContext || m_context == IndexedGetterContext || m_context == IndexedDeletionContext); }
 
     virtual void throwDOMException(const ExceptionCode&, const String& message);
     virtual void throwTypeError(const String& message);
     virtual void throwSecurityError(const String& sanitizedMessage, const String& unsanitizedMessage = String());
 
-    // Please don't use these methods. Use ::throwDOMException and ::throwTypeError, and pass in a useful exception message.
-    virtual void throwUninformativeAndGenericDOMException(const ExceptionCode& ec) { throwDOMException(ec, String()); }
-
     bool hadException() const { return !m_exception.isEmpty() || m_code; }
     void clearException();
 
     ExceptionCode code() const { return m_code; }
+    const String& message() const { return m_message; }
 
     bool throwIfNeeded()
     {
         if (m_exception.isEmpty()) {
             if (!m_code)
                 return false;
-            throwUninformativeAndGenericDOMException(m_code);
+            throwDOMException(m_code, String()); // FIXME: Do we ever hit this? If so, where and why?
         }
 
         V8ThrowException::throwError(m_exception.newLocal(m_isolate), m_isolate);
@@ -113,6 +108,7 @@
 protected:
     ExceptionCode m_code;
     Context m_context;
+    String m_message;
     const char* m_propertyName;
     const char* m_interfaceName;
 
@@ -129,7 +125,7 @@
 // Used if exceptions can/should not be directly thrown.
 class NonThrowableExceptionState FINAL : public ExceptionState {
 public:
-    NonThrowableExceptionState(): ExceptionState(v8::Handle<v8::Object>(), v8::Isolate::GetCurrent()) { }
+    NonThrowableExceptionState(): ExceptionState(ExceptionState::UnknownContext, 0, 0, v8::Handle<v8::Object>(), v8::Isolate::GetCurrent()) { }
     virtual void throwDOMException(const ExceptionCode&, const String& message) OVERRIDE;
     virtual void throwTypeError(const String& message = String()) OVERRIDE;
     virtual void throwSecurityError(const String& sanitizedMessage, const String& unsanitizedMessage = String()) OVERRIDE;
@@ -138,7 +134,7 @@
 // Used if any exceptions thrown are ignorable.
 class TrackExceptionState FINAL : public ExceptionState {
 public:
-    TrackExceptionState(): ExceptionState(v8::Handle<v8::Object>(), v8::Isolate::GetCurrent()) { }
+    TrackExceptionState(): ExceptionState(ExceptionState::UnknownContext, 0, 0, v8::Handle<v8::Object>(), v8::Isolate::GetCurrent()) { }
     virtual void throwDOMException(const ExceptionCode&, const String& message) OVERRIDE;
     virtual void throwTypeError(const String& message = String()) OVERRIDE;
     virtual void throwSecurityError(const String& sanitizedMessage, const String& unsanitizedMessage = String()) OVERRIDE;
