Index: modules/system/system.install
===================================================================
--- modules/system/system.install	(revision 81b830768a5cea8c7b5c4f49f44eaf3bbd6f7da3)
+++ modules/system/system.install	(revision )
@@ -53,6 +53,12 @@
     'value' => $software,
   );
 
+  $uuid = new Uuid();
+  $requirements['uuid'] = array(
+    'title' => $t('UUID plugin implementation'),
+    'value' => $uuid->determinePlugin()
+  );
+
   // Test PHP version and show link to phpinfo() if it's available
   $phpversion = phpversion();
   if (function_exists('phpinfo')) {
Index: includes/uuid.inc
===================================================================
--- includes/uuid.inc	(revision 81b830768a5cea8c7b5c4f49f44eaf3bbd6f7da3)
+++ includes/uuid.inc	(revision )
@@ -17,7 +17,7 @@
    *   A 32 byte integer represented as a hex string formatted with 4 hypens.
    */
   public function generate();
-
+  public function validate($uuid);
 }
 
 /**
@@ -31,14 +31,15 @@
   /**
    * Holds the UUID implementation.
    */
-  protected $plugin;
+  static protected $plugin;
+  protected $instance;
 
   /**
-   * This constructor instantiates the correct UUID object.
+   * Constructs a UUID object.
    */
   public function __construct() {
     $class = $this->determinePlugin();
-    $this->plugin = new $class();
+    $this->instance = new $class();
   }
 
   /**
@@ -47,85 +48,71 @@
    * @see UuidInterface::generate()
    */
   public function generate() {
-    return $this->plugin->generate();
+    return $this->instance->generate();
   }
 
   /**
-   * Check that a string appears to be in the format of a UUID.
-   *
-   * Plugins should not implement validation, since UUIDs should be in a
-   * consistent format across all plugins.
-   *
-   * @param $uuid
-   *   The string to test.
-   *
-   * @return
-   *   TRUE if the string is well formed.
-   */
-  public function isValid($uuid) {
-    return preg_match("/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/", $uuid);
-  }
-
-  /**
    * Determines the optimal implementation to use for generating UUIDs.
    *
    * The selection is made based on the enabled PHP extensions with the
    * most performant available option chosen.
    *
    * @return
-   *  The class name for the optimal UUID generator.
+   *   The class name for the optimal UUID generator.
    */
-  protected function determinePlugin() {
-    static $plugin;
-    if (!empty($plugin)) {
-      return $plugin;
+  public function determinePlugin() {
+    if (!empty(self::$plugin)) {
+      return self::$plugin;
     }
 
-    $plugin = 'UuidPhp';
-
     // Debian/Ubuntu uses the (broken) OSSP extension as their UUID
     // implementation. The OSSP implementation is not compatible with the
     // PECL functions.
     if (function_exists('uuid_create') && !function_exists('uuid_make')) {
-      $plugin = 'UuidPecl';
+      self::$plugin = 'UuidPecl';
     }
     // Try to use the COM implementation for Windows users.
     elseif (function_exists('com_create_guid')) {
-      $plugin = 'UuidCom';
+      self::$plugin = 'UuidCom';
     }
-    return $plugin;
+    // Use the default PHP implementation.
+    else {
+      self::$plugin = 'UuidPhp';
-  }
+    }
+    return self::$plugin;
-}
+  }
+}
 
 /**
- * UUID implementation using the PECL extension.
+ * Generates an UUID v4 using PHP code.
+ *
+ * Loosely based on Ruby's UUIDTools generate_random logic.
+ *
+ * @see http://uuidtools.rubyforge.org/api/classes/UUIDTools/UUID.html
  */
-class UuidPecl implements UuidInterface {
-  public function generate() {
-    return uuid_create(UUID_TYPE_DEFAULT);
-  }
-}
+class UuidPhp implements UuidInterface {
 
-/**
+  /**
- * UUID implementation using the Windows internal GUID extension.
+   * Check that a string appears to be in the format of a UUID.
- *
+   *
- * @see http://php.net/com_create_guid
+   * Plugins should not implement validation, since UUIDs should be in a
+   * consistent format across all plugins.
+   *
+   * @param $uuid
+   *   The string to test.
+   *
+   * @return
+   *   TRUE if the string is well formed.
- */
+   */
-class UuidCom implements UuidInterface {
-  public function generate() {
-    // Remove {} wrapper and make lower case to keep result consistent.
-    return drupal_strtolower(trim(com_create_guid(), '{}'));
+  public function validate($uuid) {
+    return preg_match("/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/", $uuid);
   }
-}
 
-/**
+  /**
- * Generates an UUID v4 using PHP code.
+   * Generate a UUID hash.
- *
+   *
- * Loosely based on Ruby's UUIDTools generate_random logic.
- *
- * @see http://uuidtools.rubyforge.org/api/classes/UUIDTools/UUID.html
+   * @return string
- */
+   */
-class UuidPhp implements UuidInterface {
   public function generate() {
     $hex = substr(hash('sha256', drupal_random_bytes(16)), 0, 32);
 
@@ -152,3 +139,24 @@
     return $uuid;
   }
 }
+
+/**
+ * UUID implementation using the PECL extension.
+ */
+class UuidPecl extends UuidPhp implements UuidInterface {
+  public function generate() {
+    return uuid_create(UUID_TYPE_DEFAULT);
+  }
+}
+
+/**
+ * UUID implementation using the Windows internal GUID extension.
+ *
+ * @see http://php.net/com_create_guid
+ */
+class UuidCom extends UuidPhp implements UuidInterface {
+  public function generate() {
+    // Remove {} wrapper and make lower case to keep result consistent.
+    return drupal_strtolower(trim(com_create_guid(), '{}'));
+  }
+}
\ No newline at end of file
