diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..c9274c1
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "include"]
+	path = include
+	url = git@github.com:Br3nda/PHP-Xero.git
diff --git a/include b/include
new file mode 160000
index 0000000..be1471b
--- /dev/null
+++ b/include
@@ -0,0 +1 @@
+Subproject commit be1471bdc689bceb9e884fa5e25977e24d616dce
diff --git a/tests/xero-connection.test b/tests/xero-connection.test
index f957651..0941b6c 100644
--- a/tests/xero-connection.test
+++ b/tests/xero-connection.test
@@ -51,16 +51,18 @@ class XeroConnectionTest extends DrupalUnitTestCase {
    $this->assertNotEqual($secret, '', t('Xero Consumer Secret is not empty.'));
   }
 
-// @todo This test is broken
-/*
+  // @note this test functions only with PHP-Xero from https://github.com/mradcliffe/PHP-Xero
   public function testXeroConnection() {
     $xero = xero_php_load();
 
-    $this->assertNotNull($xero, t('Sucessfully initialized the PHP-Xero library.'));
+    $this->assertNotNull($xero->verify(), t('Successfully initialized the PHP-Xero library.'));
 
-    $result = $xero->Accounts;
+    // I don't usually do it this way.
+    if ($xero->verify()) {
+      $result = json_decode($xero->Accounts);
 
-    $this->assertNotNull($result['Accounts']['Account'][0]['Name'], t('Successfully queried xero for accounts. Found an account named @name', array('@name' => $result['Accounts']['Account'][0]['Name'])));
+      $this->assertNotNull($result->Accounts[0]->Name, t('Successfully queried xero for accounts. Found an account named @name', array('@name' => json_encode($result->Accounts[0]->Name))));
+    }
   }
-*/
+
 }
diff --git a/xero.admin.inc b/xero.admin.inc
index 0689208..935fead 100644
--- a/xero.admin.inc
+++ b/xero.admin.inc
@@ -15,6 +15,7 @@ function xero_admin_settings() {
     '#title' => t('Xero Consumer Key'),
     '#description' => t('Provide the consumer key for your private application on xero.'),
     '#default_value' => variable_get('xero_consumer_key', ''),
+    '#required' => TRUE,
   );
 
   $form['xero_consumer_secret'] = array(
@@ -22,6 +23,7 @@ function xero_admin_settings() {
     '#title' => t('Xero Consumer Secret'),
     '#description' => t('Provide the consumer secret for your private application on xero.'),
     '#default_value' => variable_get('xero_consumer_secret', ''),
+    '#required' => TRUE,
   );
 
   $form['xero_cert_path'] = array(
@@ -29,6 +31,8 @@ function xero_admin_settings() {
     '#title' => t('Xero Certificate Path'),
     '#description' => t('Provide the full path and file name to your Xero certificate.'),
     '#default_value' => variable_get('xero_cert_path', ''),
+    '#element_validate' => array('xero_admin_settings_validate_exists'),
+    '#required' => TRUE,
   );
 
   $form['xero_key_path'] = array(
@@ -36,12 +40,23 @@ function xero_admin_settings() {
     '#title' => t('Xero Key Path'),
     '#description' => t('Provide the full path and file name to your Xero certificate private key.'),
     '#default_value' => variable_get('xero_key_path', ''),
+    '#element_validate' => array('xero_admin_settings_validate_exists'),
+    '#required' => TRUE,
   );
 
   return system_settings_form($form);
 }
 
 /**
+ * Validation callback for xero_admin_settings().  Verifies that the field's file exists and is readable.
+ */
+function xero_admin_settings_validate_exists($element, &$form_state) {
+  if (!@file_exists($element['#value'])) {
+    form_error($element, t('The specified file either does not exist, or is not accessible to the web server.'));
+  }
+}
+
+/**
  * Xero Autocomplete Contacts page callback
  * @param $string the string to search
  */
diff --git a/xero.install b/xero.install
index 28f9a68..9167a41 100644
--- a/xero.install
+++ b/xero.install
@@ -22,7 +22,7 @@ function xero_requirements($phase) {
 
   if (!drupal_verify_install_file($incpath . 'xero.php', FILE_EXIST, 'file')) {
     //Note: I don't think I can use l() or theme() here
-    $requirements['xero_lib']['value'] = $t('You must install the <a href="http://github.com/thinktree/PHP-Xero" target="new">PHP-Xero library</a> in the xero module include/ directory before proceeding.');
+    $requirements['xero_lib']['value'] = $t('You must install the <a href="http://github.com/mradcliffe/PHP-Xero" target="new">PHP-Xero library</a> in the xero module include/ directory before proceeding.');
     $requirements['xero_lib']['severity'] = REQUIREMENT_ERROR;
   }
 
@@ -40,6 +40,13 @@ function xero_requirements($phase) {
       $requirements['xero_cert']['value'] = $t('You must !configure the Xero module with the location of your Xero certificate!', array('!configure' => l($t('configure'), 'admin/settings/xero')));
       $requirements['xero_cert']['severity'] = REQUIREMENT_ERROR;
     }
+
+    $xero = xero_php_load();
+
+    if (!method_exists($xero, 'verify')) {
+      $requirements['xero_lib']['value'] = $t('For stability purposes, you should use a fork of PHP-Xero that has the verify() method such as !link', array('!link' => l($t("mradcliffe's version", 'http://github.com/mradcliffe/PHP-Xero'))));
+      $requirements['xero_lib']['severity'] = REQUIREMENT_ERROR;
+    }
   }
 
   if (module_exists('oauth_common')) {
diff --git a/xero.module b/xero.module
index db78cb6..a7ad4d8 100644
--- a/xero.module
+++ b/xero.module
@@ -185,7 +185,7 @@ function xero_php_load() {
 function xero_query($type = 'get', $action, $id = FALSE, $after = FALSE, $items = array()) {
   $xero = xero_php_load();
 
-  if (!is_object($xero)) {
+  if (!$xero->verify()) {
     xero_error(0, '', 'Error trying to make a xero connection object.');
     return NULL;
   }
