Given that you're inheriting from the Set, but not actually setting core_size and so on (so subset.core_size) won't work right now.  I wonder if this can be simplified by doing:

````python

diff --git a/pyop2/base.py b/pyop2/base.py
index 0d76eff..2877916 100644
--- a/pyop2/base.py
+++ b/pyop2/base.py
@@ -624,18 +624,18 @@ class Subset(Set):
         self._superset = superset
         self._indices = verify_reshape(indices, np.int32, (len(indices),))
 
-        self._sub_core_size = 0
-        self._sub_size = 0
-        self._sub_ieh_size = 0
-        self._sub_inh_size = 0
+        self._core_size = 0
+        self._size = 0
+        self._ieh_size = 0
+        self._inh_size = 0
         for idx in indices:
-            if idx < self._core_size:
-                self._sub_core_size += 1
-            if idx < self._size:
-                self._sub_size += 1
-            if idx < self._ieh_size:
-                self._sub_ieh_size += 1
-            self._sub_inh_size += 1
+            if idx < superset._core_size:
+                self._core_size += 1
+            if idx < superset._size:
+                self._size += 1
+            if idx < superset._ieh_size:
+                self._ieh_size += 1
+            self._inh_size += 1
 
     # Look up any unspecified attributes on the _set.
     def __getattr__(self, name):
@@ -651,23 +651,6 @@ class Subset(Set):
     def indices(self):
         return self._indices
 
-    # override superclass behavior
-    @property
-    def core_part(self):
-        return SetPartition(self, 0, self._sub_core_size)
-
-    @property
-    def owned_part(self):
-        return SetPartition(self, self._sub_core_size, self._sub_size - self._sub_core_size)
-
-    @property
-    def exec_part(self):
-        return SetPartition(self, self._sub_size, self._sub_exec_size - self._sub_size)
-
-    @property
-    def all_part(self):
-        return SetPartition(self, 0, self._sub_exec_size)
-
 
 class SetPartition(object):
     def __init__(self, set, offset, size):
````