Seprate longOffset from ExtSubTable
diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py
index 51f7199..adf4fc6 100644
--- a/Lib/fontTools/ttLib/tables/otBase.py
+++ b/Lib/fontTools/ttLib/tables/otBase.py
@@ -217,13 +217,9 @@
 	def getDataLength(self):
 		"""Return the length of this table in bytes, without subtables."""
 		l = 0
-		if hasattr(self, "Extension"):
-			longOffset = 1
-		else:
-			longOffset = 0
 		for item in self.items:
 			if hasattr(item, "getData") or hasattr(item, "getCountData"):
-				if longOffset:
+				if self.longOffset:
 					l = l + 4  # sizeof(ULong)
 				else:
 					l = l + 2  # sizeof(UShort)
@@ -234,17 +230,13 @@
 	def getData(self):
 		"""Assemble the data for this writer/table, without subtables."""
 		items = list(self.items)  # make a shallow copy
-		if hasattr(self,"Extension"):
-			longOffset = 1
-		else:
-			longOffset = 0
 		pos = self.pos
 		numItems = len(items)
 		for i in range(numItems):
 			item = items[i]
 			
 			if hasattr(item, "getData"):
-				if longOffset:
+				if self.longOffset:
 					items[i] = packULong(item.pos - pos)
 				else:
 					try:
diff --git a/Lib/fontTools/ttLib/tables/otConverters.py b/Lib/fontTools/ttLib/tables/otConverters.py
index 07e5edc..0ddc04d 100644
--- a/Lib/fontTools/ttLib/tables/otConverters.py
+++ b/Lib/fontTools/ttLib/tables/otConverters.py
@@ -35,7 +35,7 @@
 	return converters, convertersByName
 
 
-class BaseConverter:
+class BaseConverter(object):
 	
 	"""Base class for converter objects. Apart from the constructor, this
 	is an abstract class."""
@@ -174,6 +174,8 @@
 
 class Table(Struct):
 
+	longOffset = False
+
 	def readOffset(self, reader):
 		return reader.readUShort()
 
@@ -202,6 +204,7 @@
 		return table
 	
 	def write(self, writer, font, tableDict, value, repeatIndex=None):
+		writer.longOffset = self.longOffset
 		if value is None:
 			self.writeNullOffset(writer)
 		else:
@@ -212,16 +215,21 @@
 			writer.writeSubTable(subWriter)
 			value.compile(subWriter, font)
 
+class LTable(Table):
+
+	longOffset = True
+
+	def readOffset(self, reader):
+		return reader.readULong()
+
+
 class SubTable(Table):
 	def getConverter(self, tableType, lookupType):
 		tableClass = self.lookupTypes[tableType][lookupType]
 		return self.__class__(self.name, self.repeat, self.repeatOffset, tableClass)
 
 
-class ExtSubTable(SubTable):
-	
-	def readOffset(self, reader):
-		return reader.readULong()
+class ExtSubTable(LTable, SubTable):
 	
 	def write(self, writer, font, tableDict, value, repeatIndex=None):
 		writer.Extension = 1 # actually, mere presence of the field flags it as an Ext Subtable writer.
@@ -322,7 +330,7 @@
 	"GlyphID":     GlyphID,
 	"struct":      Struct,
 	"Offset":      Table,
-	"LOffset":     ExtSubTable,
+	"LOffset":     LTable,
 	"ValueRecord": ValueRecord,
 	"DeltaValue":  DeltaValue,
 }