diff --git a/som.cabal b/som.cabal
--- a/som.cabal
+++ b/som.cabal
@@ -1,5 +1,5 @@
 Name:              som
-Version:           9.0
+Version:           9.0.1
 Stability:         experimental
 Synopsis:          Self-Organising Maps.
 Description:       A Kohonen Self-organising Map (SOM) maps input patterns 
diff --git a/src/Data/Datamining/Clustering/SGMInternal.hs b/src/Data/Datamining/Clustering/SGMInternal.hs
--- a/src/Data/Datamining/Clustering/SGMInternal.hs
+++ b/src/Data/Datamining/Clustering/SGMInternal.hs
@@ -19,7 +19,7 @@
 import Prelude hiding (lookup)
 
 import Control.DeepSeq (NFData)
-import Data.List (minimumBy, foldl')
+import Data.List (minimumBy, sortBy, foldl')
 import Data.Ord (comparing)
 import qualified Data.Map.Strict as M
 import GHC.Generics (Generic)
@@ -200,7 +200,9 @@
 --   It will not make any changes to the classifier.
 --   Returns the ID of the node with the best matching model,
 --   the difference between the best matching model and the pattern,
---   and the differences between the input and each model in the SGM.
+--   and the SGM labels paired  with the difference between the input
+--   and the corresponding model.
+--   The final paired list is sorted in decreasing order of similarity.
 classify
   :: (Num t, Ord t, Num x, Ord x, Enum k, Ord k)
     => SGM t x k p -> p -> (k, x, [(k, x)])
@@ -220,10 +222,16 @@
       && (numModels s < maxSize s || allowDeletion s)
                               = classify' (addModel p s) p
   | otherwise                 = (bmu, bmuDiff, diffs, s')
-  where (bmu, bmuDiff) = minimumBy (comparing snd) diffs
-        diffs = M.toList . M.map (difference s p) . M.map fst
-                    . toMap $ s
+  where diffs = sortBy matchOrder . M.toList . M.map (difference s p)
+                    . M.map fst . toMap $ s
+        (bmu, bmuDiff) = head diffs
         s' = incrementCounter bmu s
+
+-- We want the model with the lowest difference from the input pattern.
+-- If two models have the same difference, return the model that was
+-- created earlier (has the lower label #).
+matchOrder :: (Ord a, Ord b) => (a, b) -> (a, b) -> Ordering
+matchOrder (a, b) (c, d) = compare (b, a) (d, c)
 
 -- | @'trainAndClassify' s p@ identifies the model in @s@ that most
 --   closely matches @p@, and updates it to be a somewhat better match.
