Pack refactor

Closes #2054 
Closes #2055 
Closes #2056 

seems more readable as `this.length++;`  but maybe thats just me