Index: lib/model/QubitDigitalObject.php
===================================================================
--- lib/model/QubitDigitalObject.php	(revision 8878)
+++ lib/model/QubitDigitalObject.php	(working copy)
@@ -279,7 +279,7 @@
   {
     if (!isset($this->slug))
     {
-      $this->slug = QubitSlug::slugify($this->name);
+      $this->slug = QubitSlug::slugify($this->__get('name', array('sourceCulture' => true)));
     }
 
     return parent::insert($connection);
Index: lib/model/QubitObject.php
===================================================================
--- lib/model/QubitObject.php	(revision 8878)
+++ lib/model/QubitObject.php	(working copy)
@@ -209,7 +209,7 @@
 
       if (1 > strlen($this->slug))
       {
-        $statement->execute(array($this->id, QubitSlug::random()));
+        $statement->execute(array($this->id, QubitSlug::getUnique($connection)));
 
         return $this;
       }
@@ -222,7 +222,7 @@
       // Collision?  Try random, digit and letter slug
       catch (PDOException $e)
       {
-        $statement->execute(array($this->id, QubitSlug::random()));
+        $statement->execute(array($this->id, QubitSlug::getUnique($connection)));
       }
     }
 
Index: lib/model/QubitTerm.php
===================================================================
--- lib/model/QubitTerm.php	(revision 8878)
+++ lib/model/QubitTerm.php	(working copy)
@@ -198,7 +198,7 @@
   {
     if (!isset($this->slug))
     {
-      $this->slug = QubitSlug::slugify($this->name);
+      $this->slug = QubitSlug::slugify($this->__get('name', array('sourceCulture' => true)));
     }
 
     return parent::insert($connection);
Index: lib/model/QubitActor.php
===================================================================
--- lib/model/QubitActor.php	(revision 8878)
+++ lib/model/QubitActor.php	(working copy)
@@ -123,7 +123,7 @@
   {
     if (!isset($this->slug))
     {
-      $this->slug = QubitSlug::slugify($this->authorizedFormOfName);
+      $this->slug = QubitSlug::slugify($this->__get('authorizedFormOfName', array('sourceCulture' => true)));
     }
 
     return parent::insert($connection);
Index: lib/model/QubitSlug.php
===================================================================
--- lib/model/QubitSlug.php	(revision 8878)
+++ lib/model/QubitSlug.php	(working copy)
@@ -23,22 +23,22 @@
   {
     $slug = null;
 
-    $alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+    $alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
 
-    // Probability of collision is approximately the number of rows in slug
-    // table over getrandmax(), so the probability increases with the number
-    // of rows
+    // Probability of generating a collision can be found using this formula
+    // http://en.wikipedia.org/wiki/Birthday_paradox#Cast_as_a_collision_problem
     //
-    // More accurately, probability is number of slugs containing only digits
-    // and letters over getrandmax() - but this is most slugs
-    //
-    // For constant probability and increasing slug length, COUNT() the slug
-    // table, but then it'd be better to use an SQL expression for the slug
-    $rand = rand();
-    while (62 < $rand)
+    // Force max random value of 2^31-1 (32-bit signed integer max).
+    // 
+    // With 2^31 possible values, the probability of collision is >50% when we
+    // reach approx. 50,000 records
+    $rand = mt_rand(0, pow(2, 31)-1);
+
+    // Convert $rand to base36 hash 
+    while (36 < $rand)
     {
-      $slug .= $alphabet[$rand % 62];
-      $rand /= 62;
+      $slug .= $alphabet[$rand % 36];
+      $rand /= 36;
     }
 
     return $slug;
@@ -65,4 +65,28 @@
 
     return $slug;
   }
+
+  public static function getUnique($connection = null)
+  {
+    if (!isset($connection))
+    {
+      $connection = QubitTransactionFilter::getConnection(QubitObject::DATABASE_NAME);
+    }
+
+    // Try a max of 10 times before giving up (avoid infinite loops when 
+    // possible slugs exhausted)
+    for ($i=0; $i < 10; $i++)
+    {
+      $slug = self::random();
+
+      $statement = $connection->prepare('
+        SELECT COUNT(*) FROM '.QubitSlug::TABLE_NAME.' WHERE '.QubitSlug::SLUG.' = ?;');
+      $statement->execute(array($slug));
+
+      if (0 == $statement->fetchColumn(0))
+      {
+        return $slug;
+      }
+    }
+  }
 }
Index: lib/model/QubitInformationObject.php
===================================================================
--- lib/model/QubitInformationObject.php	(revision 8878)
+++ lib/model/QubitInformationObject.php	(working copy)
@@ -141,7 +141,7 @@
   {
     if (!isset($this->slug))
     {
-      $this->slug = QubitSlug::slugify($this->title);
+      $this->slug = QubitSlug::slugify($this->__get('title', array('sourceCulture' => true)));
     }
 
     return parent::insert($connection);
Index: lib/model/QubitStaticPage.php
===================================================================
--- lib/model/QubitStaticPage.php	(revision 8878)
+++ lib/model/QubitStaticPage.php	(working copy)
@@ -28,7 +28,7 @@
   {
     if (!isset($this->slug))
     {
-      $this->slug = QubitSlug::slugify($this->title);
+      $this->slug = QubitSlug::slugify($this->__get('title', array('sourceCulture' => true)));
     }
 
     return parent::insert($connection);
Index: lib/model/QubitFunction.php
===================================================================
--- lib/model/QubitFunction.php	(revision 8878)
+++ lib/model/QubitFunction.php	(working copy)
@@ -113,7 +113,7 @@
   {
     if (!isset($this->slug))
     {
-      $this->slug = QubitSlug::slugify($this->authorizedFormOfName);
+      $this->slug = QubitSlug::slugify($this->__get('authorizedFormOfName', array('sourceCulture' => true)));
     }
 
     return parent::insert($connection);
Index: lib/model/QubitPhysicalObject.php
===================================================================
--- lib/model/QubitPhysicalObject.php	(revision 8878)
+++ lib/model/QubitPhysicalObject.php	(working copy)
@@ -39,7 +39,7 @@
   {
     if (!isset($this->slug))
     {
-      $this->slug = QubitSlug::slugify($this->name);
+      $this->slug = QubitSlug::slugify($this->__get('name', array('sourceCulture' => true)));
     }
 
     return parent::insert($connection);
Index: lib/model/QubitTaxonomy.php
===================================================================
--- lib/model/QubitTaxonomy.php	(revision 8878)
+++ lib/model/QubitTaxonomy.php	(working copy)
@@ -83,7 +83,7 @@
   {
     if (!isset($this->slug))
     {
-      $this->slug = QubitSlug::slugify($this->name);
+      $this->slug = QubitSlug::slugify($this->__get('name', array('sourceCulture' => true)));
     }
 
     return parent::insert($connection);
