Index: tol/btol/text_type/txtgra.cpp
===================================================================
--- tol/btol/text_type/txtgra.cpp	(revision ad7183de188eba7eda5af55019c25b86c37fbd4b)
+++ tol/btol/text_type/txtgra.cpp	(revision fa5f9a1af9de3fe8f32086cec7e69b59a8dc8f5e)
@@ -64,4 +64,5 @@
 
 #include <locale.h>
+#include <stdlib.h>
 
 /*! key used to force that Sub be initialized before than Sub of matrix
@@ -2633,2 +2634,45 @@
   contens_ = textToWrap.Wrap(maxLineLength, wordSeparators, prefix);
 }
+
+
+//--------------------------------------------------------------------
+BInt CompareVersionString(const BText* txt1, const BText* txt2) 
+//--------------------------------------------------------------------
+{
+  BChar sep = '.';
+  BArray<BText> tok1, tok2;
+  ReadAllTokens(*txt1, tok1, sep);
+  ReadAllTokens(*txt2, tok2, sep);
+  int n1 = tok1.Size();
+  int n2 = tok2.Size();
+  int n = Minimum(n1,n2);
+  int k, t1, t2;
+  int cmp = 0;
+
+  for(k=0; (k<n) && !cmp; k++)
+  {
+    t1 = atoi(tok1[k].String());
+    t2 = atoi(tok2[k].String());
+    cmp = t1-t2;
+  }
+  if(!cmp) { cmp = n1-n2; }
+  return (cmp);
+}
+
+//--------------------------------------------------------------------
+DeclareContensClass(BDat, BDatTemporary, BDatCompareVersionString);
+DefExtOpr(1, BDatCompareVersionString, "Compare.VersionString", 2, 2, 
+"Text Text",
+"(Text a, Text b)",
+I2("Compares two version strings with an arbitrary number of numeric "
+    "tokens separated by the point character. For example 1.9 would "
+    "be prior to 1.10 while it is the reverse alphabetical order.",
+    "Compara dos cadenas de version con un número arbitrario de tokens "
+    "numéricos separados por el caracter punto. Por ejemplo 1.9 sería "
+    "anterior a 1.10 mientras que alfabéticamente es al revés.\n"),
+	  BOperClassify::System_);
+void BDatCompareVersionString::CalcContens()
+//--------------------------------------------------------------------
+{
+  contens_ = CompareVersionString(&Text(Arg(1)),&Text(Arg(2)));
+}
Index: tol/stdlib/general/TolPackage/client.tol
===================================================================
--- tol/stdlib/general/TolPackage/client.tol	(revision ad7183de188eba7eda5af55019c25b86c37fbd4b)
+++ tol/stdlib/general/TolPackage/client.tol	(revision fa5f9a1af9de3fe8f32086cec7e69b59a8dc8f5e)
@@ -117,5 +117,6 @@
   Text If(!Card(pkgSel),"",
   {
-    Set pkgSort = Sort(pkgSel, Real(Text a, Text b) { Compare(b, a) });
+    Set pkgSort = Sort(pkgSel, Real(Text a, Text b) { 
+      Compare.VersionString(b, a) });
     pkgSort[1]
   })
@@ -616,5 +617,6 @@
     },
     {
-      Set ord = Sort(cls,Real ev.sort(Text a, Text b) { Compare(b, a) });
+      Set ord = Sort(cls,Real ev.sort(Text a, Text b) { 
+        Compare.VersionString(b, a) });
       Text ver = ord[1];
       Date gmt = Copy(NowGmt);
@@ -739,5 +741,5 @@
   Real(TolPackage::@VersionSynchro a, TolPackage::@VersionSynchro b)
   {
-    Compare(b->co_name_version,a->co_name_version)
+    Compare.VersionString(b->co_name_version,a->co_name_version)
   })[1];
   last_compatible->co_name_version
