diff --git a/scripts/Python/python-extensions.swig b/scripts/Python/python-extensions.swig
index aa45cee..f9e5a13 100644
--- a/scripts/Python/python-extensions.swig
+++ b/scripts/Python/python-extensions.swig
@@ -539,15 +539,13 @@
         # Allow array access if this value has children...
         if type(key) is int:
             return value(self.sbvalue.GetValueForExpressionPath("[%i]" % key))
-        if type(key) is value:
-            return value(self.sbvalue.GetValueForExpressionPath("[%i]" % int(key))
-        raise TypeError("No array item of type %s" % str(type(key)))
+        raise TypeError
 
     def __getattr__(self, name):
         child_sbvalue = self.sbvalue.GetChildMemberWithName (name)
         if child_sbvalue:
             return value(child_sbvalue)
-        raise AttributeError("Attribute '%s' is not defined" % name)
+        raise AttributeError
 
     def __add__(self, other):
         return int(self) + int(other)
@@ -692,22 +690,15 @@
         return '0x%x' % self.sbvalue.GetValueAsUnsigned()
 
     def __eq__(self, other):
-        if type(other) is int:
-            return int(self) == other
-        elif type(other) is str:
-            return str(self) == other
-        elif type(other) is value:
-                self_err = SBError()
-                other_err = SBError()
-                self_val = self.sbvalue.GetValueAsUnsigned(self_err)
-                if self_err.fail:
-                        raise ValueError("unable to extract value of self")
-                other_val = other.sbvalue.GetValueAsUnsigned(other_err)
-                if other_err.fail:
-                        raise ValueError("unable to extract value of other")
-                return self_val == other_val
-        raise TypeError("Unknown type %s, No equality operation defined." % str(type(other)))
-
+        self_err = SBError()
+        other_err = SBError()
+        self_val = self.sbvalue.GetValueAsUnsigned(self_err)
+        if self_err.fail:
+                raise ValueError("unable to extract value of self")
+        other_val = other.sbvalue.GetValueAsUnsigned(other_err)
+        if other_err.fail:
+                raise ValueError("unable to extract value of other")
+        return self_val == other_val
                                                                     
     def __neq__(self, other):
         return not self.__eq__(other)
