diff --git a/resources/comment_resource.inc b/resources/comment_resource.inc
index 0270cb2..514a9b5 100644
--- a/resources/comment_resource.inc
+++ b/resources/comment_resource.inc
@@ -194,7 +194,7 @@ function _comment_resource_index($page, $fields, $parameters) {
   if (!user_access('administer comments')) {
     $parameters['status'] = 1;
   }
-  $query = services_resource_build_index_query('comments', 'timestamp DESC', $page, $fields, $parameters);
+  $query = services_resource_build_index_query('comments', 'c.timestamp DESC', $page, $fields, $parameters, 'c', 'cid');
   // Put together array of matching nodes to return.
   $results = array();
   while ($comments = db_fetch_object($query)) {
diff --git a/resources/file_resource.inc b/resources/file_resource.inc
index 0b0a96b..64ccc70 100644
--- a/resources/file_resource.inc
+++ b/resources/file_resource.inc
@@ -130,9 +130,9 @@ function _file_resource_definition() {
  * @see _node_resource_index() for more notes
  **/
 function _file_resource_index($page, $fields, $parameters) {
-  services_resource_build_index_query('files', 'timestamp DESC', $page, $fields, $parameters);
+  services_resource_build_index_query('files', 'f.timestamp DESC', $page, $fields, $parameters, 'f', 'fid');
 
-  $query = services_resource_build_index_query('files', 'timestamp', $page, $fields, $parameters);
+  $query = services_resource_build_index_query('files', 'f.timestamp', $page, $fields, $parameters, 'f', 'fid');
   // Put together array of matching nodes to return.
   $results = array();
   while ($comments = db_fetch_object($query)) {
diff --git a/resources/node_resource.inc b/resources/node_resource.inc
index d6c5786..8cb414f 100644
--- a/resources/node_resource.inc
+++ b/resources/node_resource.inc
@@ -374,7 +374,7 @@ function _node_resource_index($page, $fields, $parameters) {
   if (!user_access('administer nodes')) {
     $parameters['status'] = 1;
   }
-  $query = services_resource_build_index_query('node', 'sticky DESC, created DESC', $page, $fields, $parameters);
+  $query = services_resource_build_index_query('node', 'n.sticky DESC, n.created DESC', $page, $fields, $parameters);
   // Put together array of matching nodes to return.
   $results = array();
   while ($node = db_fetch_object($query)) {
diff --git a/resources/taxonomy_resource.inc b/resources/taxonomy_resource.inc
index 00b93e0..af18a81 100644
--- a/resources/taxonomy_resource.inc
+++ b/resources/taxonomy_resource.inc
@@ -334,7 +334,7 @@ function _taxonomy_resource_definition() {
  * @see _node_resource_index() for more notes
  **/
 function _taxonomy_term_resource_index($page, $fields, $parameters) {
-  $query = services_resource_build_index_query('term_data', 'vid DESC, weight DESC, name DESC', $page, $fields, $parameters);
+  $query = services_resource_build_index_query('term_data', 't.vid DESC, t.weight DESC, t.name DESC', $page, $fields, $parameters, 't', 'tid');
 
   $results = array();
   while ($taxonomy = db_fetch_object($query)) {
@@ -369,7 +369,7 @@ function _taxonomy_term_resource_index($page, $fields, $parameters) {
  * @see _node_resource_index() for more notes
  **/
 function _taxonomy_vocabulary_resource_index($page, $fields, $parameters) {
-  $query = services_resource_build_index_query('vocabulary', 'weight DESC, name DESC', $page, $fields, $parameters);
+  $query = services_resource_build_index_query('vocabulary', 'v.weight DESC, v.name DESC', $page, $fields, $parameters, 'v', 'vid');
 
   $results = array();
   while ($taxonomy = db_fetch_object($query)) {
diff --git a/resources/user_resource.inc b/resources/user_resource.inc
index cd46157..16277c3 100644
--- a/resources/user_resource.inc
+++ b/resources/user_resource.inc
@@ -404,7 +404,7 @@ function _user_resource_index($page, $fields, $parameters) {
   if (!user_access('administer users')) {
     $parameters['active'] = 1;
   }
-  $query = services_resource_build_index_query('users', 'created DESC', $page, $fields, $parameters);
+  $query = services_resource_build_index_query('users', 'u.created DESC', $page, $fields, $parameters, 'u', 'uid');
 
   $results = array();
   while ($user = db_fetch_object($query)) {
diff --git a/services.module b/services.module
index 5c370b7..51920f7 100644
--- a/services.module
+++ b/services.module
@@ -432,9 +432,17 @@ function _services_resource_controller_as_procedure($resource, $name, $controlle
  * @param $parameter
  *   Array parameters to add to the index query.
  */
-function services_resource_build_index_query($schema, $order, $page, $fields, $parameters = array()) {
+function services_resource_build_index_query($schema, $order, $page, $fields, $parameters = array(), $primary_table = 'n', $primary_field = 'nid') {
   $where = array();
   $fields = db_escape_string($fields);
+
+  // need to append table prefix
+  $fields = explode(',', $fields);
+  foreach ($fields as &$field) {
+    $field = $primary_table . '.' . trim($field);
+  }
+  $fields = implode(',', $fields);
+
   $schema = db_escape_string($schema);
   $table = $schema;
   $schema = drupal_get_schema($schema);
@@ -442,7 +450,7 @@ function services_resource_build_index_query($schema, $order, $page, $fields, $p
   // db_query().
   if(is_array($parameters)) {
     foreach ($parameters as $field => $value) {
-      $where[] = $field . ' = ' . db_type_placeholder($schema['fields'][$field]['type']);
+      $where[] = $primary_table . '.' . $field . ' = ' . db_type_placeholder($schema['fields'][$field]['type']);
     } 
   }
 
@@ -450,8 +458,8 @@ function services_resource_build_index_query($schema, $order, $page, $fields, $p
   $where = !empty($where) ? ' WHERE '. implode(' AND ', $where) : '';
 
   // Run through db_rewrite_sql to make sure proper access checks are applied.
-  $sql = "SELECT $fields FROM {{$table}} $where ORDER BY $order";
-  $sql = db_rewrite_sql($sql);
+  $sql = "SELECT $fields FROM {{$table}} AS $primary_table $where ORDER BY $order";
+  $sql = db_rewrite_sql($sql, $primary_table, $primary_field);
   $result = db_query_range($sql, $parameters, $page * 20, 20);
   return $result;
 }
