 			genTrigger(self, $rejected)
 		return
 
-	addHandler = (self, thenIndex, onFulfilled, onRejected) ->
+	addHandler = (self, offset, onFulfilled, onRejected) ->
 		switch self._state
 			when $pending
-				self._handlers.splice self._handlers.length, 0,
-					onFulfilled, onRejected
+				self._handlers[offset] = onFulfilled
+				self._handlers[offset + 1] = onRejected
+				self._thenIndex++
 
 			when $resolved
-				self._handlers[thenIndex * 4] = onFulfilled self._value
+				self._handlers[offset] = onFulfilled self._value
 
 			when $rejected
-				self._handlers[thenIndex * 4 + 1] = onRejected self._value
+				self._handlers[offset + 1] = onRejected self._value
 		return
 
-	chainHandlers = (self, thenIndex, resolve, reject) ->
+	chainHandlers = (self, offset, resolve, reject) ->
 		switch self._state
 			when $pending
-				self._handlers.splice thenIndex * 4 + 2, 0,
-					resolve, reject
+				self._handlers[offset + 2] = resolve
+				self._handlers[offset + 3] = reject
 
 			when $resolved
-				chainHandler self._handlers[thenIndex * 4], 0, resolve
+				chainHandler self._handlers[offset], 0, resolve
 
 			when $rejected
-				chainHandler self._handlers[thenIndex * 4 + 1], 0, reject
+				chainHandler self._handlers[offset + 1], 0, reject
 
 		return
 

			handler = self._handlers[k]
			thenHandler = self._handlers[k + 2]

			if thenHandler
				chainHandler handler(value), thenHandler
			else

	then: (onFulfilled, onRejected) ->
		self = @

		offset = @_thenIndex * 4

		addHandler self, offset, onFulfilled, onRejected

		new Promise (resolve, reject) ->
			chainHandlers self, offset, resolve, reject

	catch: (onRejected) ->

