                 ; Original partition data was unchanged by updates.
                 (= tablet tablet')
                   ; Original linked partition remains unchanged by update.
-                  ; FIXME: this will allow invalid partitions if the partition limit has changed!
-                  (recur (conj result part) nil (next inputs))
+                  (let [[parts pending] (check-partition store params limit half-full part)]
+                    (recur (into result parts) pending (next inputs)))
 
                 ; Accumulated enough records to output full partitions.
                 (<= (+ limit half-full) (count (tablet/read-all tablet')))
-                  (let [[parts pending'] (emit-parts store params emit-threshold emit-size tablet')]
-                    (recur (into result parts) pending' (next inputs)))
+                  (let [[parts pending] (emit-parts store params emit-threshold emit-size tablet')]
+                    (recur (into result parts) pending (next inputs)))
 
                 ; Not enough data to output a partition yet, keep pending.
                 :else


;; ## Update Functions

(defn- apply-patch
  "Performs an update on the tablet by applying the patch changes. Returns an
  updated tablet, or nil if the result was empty."

        (let [[part changes] (first inputs)]
          (if (and (nil? pending) (empty? changes))
            ; No pending records or changes, so use "pass through" logic.
            (let [[parts pending] (check-partition store params limit half-full part)]
              (recur (into result parts) pending (next inputs)))

            ; Load partition data or use virtual tablet records.
            (let [tablet (tablet/from-records (read-all store part nil))
                  tablet' (tablet/join pending (apply-patch tablet changes))]
