                                            (remove nil?)
                                            not-empty)]
                   (when neighbors-clusters
-                    (let [cluster-sizes          (map (fn [cluster]
-                                                        hash-map
-                                                        :cluster cluster
-                                                        :cluster-size (cluster->size cluster @updated-state*))
-                                                      neighbors-clusters)
-                          biggest-cluster        (->> cluster-sizes
-                                                      (sort-by :cluster-size)
-                                                      first
-                                                      :cluster)
-                          grid-w-biggest-cluster (first
-                                                   (keep
-                                                     (fn [neigh-pos-id neigh-char-vec]
-                                                       (= biggest-cluster
-                                                          (:cluster neigh-char-vec)))
-                                                     neighbors))]
-                      (case (::label grid-w-biggest-cluster)
+                    (let [cluster-sizes                      (map (fn [cluster]
+                                                                    hash-map
+                                                                    :cluster cluster
+                                                                    :cluster-size (cluster->size cluster @updated-state*))
+                                                                  neighbors-clusters)
+                          biggest-neighboring-cluster        (->> cluster-sizes
+                                                                  (sort-by :cluster-size)
+                                                                  first
+                                                                  :cluster)
+                          grid-w-biggest-neighboring-cluster (first
+                                                               (keep
+                                                                 (fn [neigh-pos-id neigh-char-vec]
+                                                                   (= biggest-neighboring-cluster
+                                                                      (:cluster neigh-char-vec)))
+                                                                 neighbors))
+                          current-cluster                    (::cluster char-vec)]
+                      (case (::label grid-w-biggest-neighboring-cluster)
                         ;;9
-                        ::dense ()
+                        ::dense (
+                                  ;;10
+                                  (if (= "NO_CLASS" current-cluster)
+                                    (swap! updated-state* assoc-in [::grid-cells pos-idx]
+                                           (do
+                                             (log-it pos-idx ::move-grid-to-biggest-neighboring-cluster biggest-neighboring-cluster)
+                                             (assoc char-vec ::cluster biggest-neighboring-cluster)))
+                                    (swap! updated-state* assoc-in [::grid-cells]
+                                           (merge (::grid-cells @updated-state*)
+                                                  (if (> (cluster->size current-cluster @updated-state*)
+                                                         (cluster->size biggest-neighboring-cluster @updated-state*))
+                                                    ;;11
+                                                    (do
+                                                      (log-it pos-idx ::move-biggest-neighboring-cluster-to-current-cluster {:from biggest-neighboring-cluster
+                                                                                                                             :to   current-cluster})
+                                                      (relabel-cluster biggest-neighboring-cluster current-cluster @updated-state*))
+                                                    ;;12
+                                                    (do
+                                                      (log-it pos-idx ::move-current-cluster-to-biggest-neighboring-cluster {:from current-cluster
+                                                                                                                             :to   biggest-neighboring-cluster})
+                                                      (relabel-cluster current-cluster biggest-neighboring-cluster @updated-state*)))))))
 
                         ;;15
                         ::transitional ()

    (doseq [[pos-idx char-vec] (::grid-cells @state*)]
      (if (= ::dense (::label char-vec))
        (do
          (my-log state ::dense-grid-creating-cluster {:char-vec char-vec})
          (swap! state* assoc-in
                 [::grid-cells pos-idx ::cluster]
                 (str (java.util.UUID/randomUUID))))
        (do (my-log state ::not-dense-grid {:char-vec char-vec})
            (swap! state* assoc-in
                   [::grid-cells pos-idx ::cluster]
                   "NO_CLASS"))))

  [& args]
  (println "Hello, World!"))

(defn log-it [context summary data]
  (info (hash context) summary data))

;;;TODO thought i needed to spec these "enums" for spec, but doesnt make it work
