diff --git a/storm-1799550-sqlapi-d7.patch b/storm-1799550-sqlapi-d7.patch
new file mode 100644
index 0000000..d7f2874
--- /dev/null
+++ b/storm-1799550-sqlapi-d7.patch
@@ -0,0 +1,136 @@
+diff --git a/stormorganization/stormorganization.admin.inc b/stormorganization/stormorganization.admin.inc
+index 02d57d0..513ea0b 100644
+--- a/stormorganization/stormorganization.admin.inc
++++ b/stormorganization/stormorganization.admin.inc
+@@ -256,15 +256,21 @@ function stormorganization_list_filter_reset($form, &$form_state) {
+ function stormorganization_autocomplete($string = '') {
+   $matches = array();
+   if ($string) {
+-    $s = "SELECT title FROM {node} AS n WHERE n.type='stormorganization' AND LOWER(title) LIKE LOWER('%s%%')";
+-    $s = stormorganization_access_sql($s);
+-    $s = db_rewrite_sql($s);
+-
+-    $result = db_query_range($s, $string, 0, 10);
+-    while ($org = db_fetch_object($result)) {
+-      $matches[$org->title] = check_plain($org->title);
++    $query = db_select('node', 'n');
++
++    $return = $query
++      ->addTag('node_access')
++      ->fields('n', array('nid', 'title'))
++      ->condition('n.type', 'stormorganization')
++      ->condition('title', '%' . db_like($string) . '%', 'LIKE')
++      ->range(0, 10)
++      ->execute();
++
++      foreach($return as $row) {
++        $matches[$row->title] = check_plain($row->title);
++      }
+     }
+   }
+-
+-  drupal_json($matches);
++  drupal_json_output($matches);
+ }
++
+diff --git a/stormperson/stormperson.admin.inc b/stormperson/stormperson.admin.inc
+index f2abb20..d7d4e9a 100644
+--- a/stormperson/stormperson.admin.inc
++++ b/stormperson/stormperson.admin.inc
+@@ -188,17 +188,21 @@ function _stormperson_organization_people_js($organization_nid=0) {
+   $people = array();
+ 
+   if ($organization_nid) {
+-    $s = "SELECT n.nid, n.title FROM {node} n INNER JOIN {stormperson} AS spe ON n.vid=spe.vid WHERE n.status=1 AND n.type='stormperson' AND spe.organization_nid=%d ORDER BY n.title";
+-    $s = stormperson_access_sql($s);
+-    $s = db_rewrite_sql($s);
+-    $r = db_query($s, $organization_nid);
+-
+-    while ($item = db_fetch_object($r)) {
+-      $nid = $item->nid;
+-      $people[$nid] = $item->title;
++      $query = db_select('node', 'n')
++        ->fields('n', array('nid', 'title'))
++        ->condition('n.status', 1)
++        ->condition('n.type', 'organization')
++        ->condition('spe.organization', $organization_nid)
++        ->join('stormperson', 'spe', 'n.vid = spe.vid')
++        ->addTag('node_access');
++
++  $result = $query->execute();
++    foreach($result as $row) {
++      $nid = $row->name;
++      $people[$nid] = $row->title;
+     }
+   }
+-  print drupal_to_js($people);
++  print drupal_json_encode($people);
+   exit();
+ }
+ 
+diff --git a/stormperson/stormperson.module b/stormperson/stormperson.module
+index 2d53ace..17707ee 100644
+--- a/stormperson/stormperson.module
++++ b/stormperson/stormperson.module
+@@ -434,12 +434,19 @@ function stormperson_form(&$node) {
+ 
+ function stormperson_validate($node, &$form) {
+   if (!empty($node->user_name)) {
+-    $ass_user = user_load(array('name' => $node->user_name));
++    $username = $node->user_name;
++    $ass_user = user_load_by_name($username);
+     if (!empty($ass_user)) {
+-      $result = db_query("SELECT n.nid, n.title FROM {node} n JOIN {stormperson} stp ON (n.nid = stp.nid) WHERE stp.user_uid = %d", $ass_user->uid);
+-      $row = db_fetch_array($result);
+-      if ($row && (empty($form['#node']->user_name) || ($form['#node']->user_name != $node->user_name))) {
+-        form_set_error('user_name', t('This Drupal user is already assigned to a Storm person (!link). The same Drupal user can not be assigned to two Storm people.', array('!link' => l($row['title'], 'node/'. $row['nid']))));
++      $query = db_select('node', 'n');
++
++      $query->fields('n', array('nid', 'title'))
++            ->condition('stp.user_uid', $ass_user->uid)
++            ->join('stormperson', 'stp', 'n.nid = stp.nid');
++
++      $row = $query->execute()->fetchAssoc();
++        if ($row && (empty($form['#node']->user_name) || ($form['#node']->user_name != $node->user_name))) {
++          $message = t('This Drupal user is already assigned to a Storm person (!link). The same Drupal user can not be assigned to two Storm people.', array('!link' => l($row['title'], 'node/'. $row['nid'])));
++        form_set_error('user_name', $message);
+       }
+     }
+   }
+@@ -448,13 +455,21 @@ function stormperson_validate($node, &$form) {
+ function stormperson_user_autocomplete($string = '') {
+   $matches = array();
+   if ($string) {
+-    $result = db_query_range("SELECT name FROM {users} WHERE name LIKE '%s%%' AND uid NOT IN (SELECT user_uid FROM {stormperson})", $string, 0, 10);
+-    while ($user = db_fetch_object($result)) {
+-      $matches[$user->name] = check_plain($user->name);
++    $query = db_select('users', 'u')
++      ->fields('u', array('name', 'uid'))
++      ->condition('name', db_like($string) . '%', 'LIKE');
++
++    $subquery = db_select('stormperson', 'stp');
++    $subquery->addField('stp', 'user_uid', 'uid');
++
++    $query->condition('uid', $subquery, 'NOT IN');
++    $result = $query->execute();
++
++    foreach($result as $row) {
++      $matches[$row->name] = check_plain($row->name);
+     }
++    drupal_json_output($matches);
+   }
+-
+-  drupal_json($matches);
+ }
+ 
+ function stormperson_insert($node) {
+@@ -509,7 +524,8 @@ function stormperson_update($node) {
+ }
+ 
+ function _stormperson_beforesave(&$node) {
+-  $ass_user = user_load(array('name' => $node->user_name));
++  $username = $node->user_name;
++  $ass_user = user_load_by_name($username);
+   $node->user_uid = $ass_user->uid;
+   if (!$node->email) {
+     $node->email = $ass_user->mail;
diff --git a/stormorganization/stormorganization.admin.inc b/stormorganization/stormorganization.admin.inc
index 02d57d0..c8debc8 100644
--- a/stormorganization/stormorganization.admin.inc
+++ b/stormorganization/stormorganization.admin.inc
@@ -256,15 +256,19 @@ function stormorganization_list_filter_reset($form, &$form_state) {
 function stormorganization_autocomplete($string = '') {
   $matches = array();
   if ($string) {
-    $s = "SELECT title FROM {node} AS n WHERE n.type='stormorganization' AND LOWER(title) LIKE LOWER('%s%%')";
-    $s = stormorganization_access_sql($s);
-    $s = db_rewrite_sql($s);
-
-    $result = db_query_range($s, $string, 0, 10);
-    while ($org = db_fetch_object($result)) {
-      $matches[$org->title] = check_plain($org->title);
+    $query = db_select('node', 'n');
+
+    $return = $query
+      ->addTag('node_access')
+      ->fields('n', array('nid', 'title'))
+      ->condition('n.type', 'stormorganization')
+      ->condition('title', '%' . db_like($string) . '%', 'LIKE')
+      ->range(0, 10)
+      ->execute();
+
+      foreach($return as $row) {
+        $matches[$row->title] = check_plain($row->title);
+      }
     }
-  }
-
-  drupal_json($matches);
+  drupal_json_output($matches);
 }
diff --git a/stormperson/stormperson.admin.inc b/stormperson/stormperson.admin.inc
index f2abb20..d7d4e9a 100644
--- a/stormperson/stormperson.admin.inc
+++ b/stormperson/stormperson.admin.inc
@@ -188,17 +188,21 @@ function _stormperson_organization_people_js($organization_nid=0) {
   $people = array();
 
   if ($organization_nid) {
-    $s = "SELECT n.nid, n.title FROM {node} n INNER JOIN {stormperson} AS spe ON n.vid=spe.vid WHERE n.status=1 AND n.type='stormperson' AND spe.organization_nid=%d ORDER BY n.title";
-    $s = stormperson_access_sql($s);
-    $s = db_rewrite_sql($s);
-    $r = db_query($s, $organization_nid);
-
-    while ($item = db_fetch_object($r)) {
-      $nid = $item->nid;
-      $people[$nid] = $item->title;
+      $query = db_select('node', 'n')
+        ->fields('n', array('nid', 'title'))
+        ->condition('n.status', 1)
+        ->condition('n.type', 'organization')
+        ->condition('spe.organization', $organization_nid)
+        ->join('stormperson', 'spe', 'n.vid = spe.vid')
+        ->addTag('node_access');
+
+  $result = $query->execute();
+    foreach($result as $row) {
+      $nid = $row->name;
+      $people[$nid] = $row->title;
     }
   }
-  print drupal_to_js($people);
+  print drupal_json_encode($people);
   exit();
 }
 
diff --git a/stormperson/stormperson.module b/stormperson/stormperson.module
index 2d53ace..17707ee 100644
--- a/stormperson/stormperson.module
+++ b/stormperson/stormperson.module
@@ -434,12 +434,19 @@ function stormperson_form(&$node) {
 
 function stormperson_validate($node, &$form) {
   if (!empty($node->user_name)) {
-    $ass_user = user_load(array('name' => $node->user_name));
+    $username = $node->user_name;
+    $ass_user = user_load_by_name($username);
     if (!empty($ass_user)) {
-      $result = db_query("SELECT n.nid, n.title FROM {node} n JOIN {stormperson} stp ON (n.nid = stp.nid) WHERE stp.user_uid = %d", $ass_user->uid);
-      $row = db_fetch_array($result);
-      if ($row && (empty($form['#node']->user_name) || ($form['#node']->user_name != $node->user_name))) {
-        form_set_error('user_name', t('This Drupal user is already assigned to a Storm person (!link). The same Drupal user can not be assigned to two Storm people.', array('!link' => l($row['title'], 'node/'. $row['nid']))));
+      $query = db_select('node', 'n');
+
+      $query->fields('n', array('nid', 'title'))
+            ->condition('stp.user_uid', $ass_user->uid)
+            ->join('stormperson', 'stp', 'n.nid = stp.nid');
+
+      $row = $query->execute()->fetchAssoc();
+        if ($row && (empty($form['#node']->user_name) || ($form['#node']->user_name != $node->user_name))) {
+          $message = t('This Drupal user is already assigned to a Storm person (!link). The same Drupal user can not be assigned to two Storm people.', array('!link' => l($row['title'], 'node/'. $row['nid'])));
+        form_set_error('user_name', $message);
       }
     }
   }
@@ -448,13 +455,21 @@ function stormperson_validate($node, &$form) {
 function stormperson_user_autocomplete($string = '') {
   $matches = array();
   if ($string) {
-    $result = db_query_range("SELECT name FROM {users} WHERE name LIKE '%s%%' AND uid NOT IN (SELECT user_uid FROM {stormperson})", $string, 0, 10);
-    while ($user = db_fetch_object($result)) {
-      $matches[$user->name] = check_plain($user->name);
+    $query = db_select('users', 'u')
+      ->fields('u', array('name', 'uid'))
+      ->condition('name', db_like($string) . '%', 'LIKE');
+
+    $subquery = db_select('stormperson', 'stp');
+    $subquery->addField('stp', 'user_uid', 'uid');
+
+    $query->condition('uid', $subquery, 'NOT IN');
+    $result = $query->execute();
+
+    foreach($result as $row) {
+      $matches[$row->name] = check_plain($row->name);
     }
+    drupal_json_output($matches);
   }
-
-  drupal_json($matches);
 }
 
 function stormperson_insert($node) {
@@ -509,7 +524,8 @@ function stormperson_update($node) {
 }
 
 function _stormperson_beforesave(&$node) {
-  $ass_user = user_load(array('name' => $node->user_name));
+  $username = $node->user_name;
+  $ass_user = user_load_by_name($username);
   $node->user_uid = $ass_user->uid;
   if (!$node->email) {
     $node->email = $ass_user->mail;
