     @bytesWritten = 0
     @pattern = null
     @callback = null
-    @fields = []
+    @_fields = []
 
   # Excute the pipeline of transforms for the `pattern` on the `value`.
   pipeline: (pattern, value) ->

  # pattern, with an optional `callback`. The optional `callback` will override
  # the callback assigned to a named pattern.
  parse: (nameOrPattern, callback) ->
    packet        = @packets[nameOrPattern] or {}
    pattern       = packet.pattern or parsePattern(nameOrPattern)
    callback    or= packet.callback or noop

    @pattern      = pattern
    @callback     = callback
    @patternIndex = 0
    @fields       = []

    @nextField()
    @nextValue()

      # The pattern is set to null, our terminal condition, because the callback
      # may specify a subsequent packet to parse.
      else if ++@patternIndex == @pattern.length
        @_fields.push(@pipeline(@pattern[@patternIndex - 1 ], @_fields.pop()))

        @_fields.push(this)
        for p in @user or []
          @_fields.push(p)

        @pattern = null

        @callback.apply @self, @_fields

      # Otherwise we proceed to the next field in the packet pattern.
      else
        if @pattern[@patternIndex - 1].endianness isnt "x"
          if @pattern[@patternIndex - 1].length
            @pattern[@patternIndex].repeat = @_fields.pop()
          else
            @_fields.push(@pipeline(@pattern[@patternIndex - 1], @_fields.pop()))

        @nextField()
        @nextValue()
