         (if (is-group-separator byte)
           ; Pack new group
           (process-next-byte (rest seq) (-> context
-                                            (update-in [:processed] + 1)
-                                            (update-in [:groups] conj (:pending context))
-                                            (assoc :pending [])))
+                                          (update-in [:processed] + 1)
+                                          (append-pending-to-groups)))
           ; Add to pending group
           (process-next-byte (rest seq) (-> context
                                             (update-in [:processed] + 1)

    ; Too many characters in group
    (= 3 (count (:pending context)))))

(defn- process-next-byte [seq context]
  (if-let [byte (first seq)]
    (if (is-valid-byte byte)


      (if (has-potential-address context)
        ; Create the address
        (create-address-result-from-context (append-pending-to-groups context) (rest seq))
        ; Ended early
        (NotDeserialisableResult/create (+ (:processed context) 1))))
    ; No more data
