diff --git a/resources/comment_resource.inc b/resources/comment_resource.inc
index 103ac96..00a61b4 100644
--- a/resources/comment_resource.inc
+++ b/resources/comment_resource.inc
@@ -85,6 +85,39 @@ function _comment_resource_definition() {
           ),
         ),
       ),
+      'index' => array(
+        'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/comment_resource'),
+        'callback' => '_comment_resource_index',
+        'args' => array(
+          array(
+            'name' => 'page',
+            'optional' => TRUE,
+            'type' => 'int',
+            'description' => 'The zero-based index of the page to get, defaults to 0.',
+            'default value' => 0,
+            'source' => array('param' => 'page'),
+          ),
+          array(
+            'name' => 'fields',
+            'optional' => TRUE,
+            'type' => 'string',
+            'description' => 'The fields to get.',
+            'default value' => '*',
+            'source' => array('param' => 'fields'),
+          ),
+          array(
+            'name' => 'parameters',
+            'optional' => TRUE,
+            'type' => 'array',
+            'description' => 'Parameters',
+            'default value' => NULL,
+            'source' => array('param' => 'parameters'),
+          ),
+        ),
+        'access callback' => '_comment_resource_access',
+        'access arguments' => array('view'),
+        'access arguments append' => TRUE,
+      ),
       'actions' => array(
         'loadNodeComments' => array(
           'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/comment_resource'),
@@ -269,6 +302,63 @@ function _comment_resource_delete($cid) {
   cache_clear_all();
   return TRUE;
 }
+/**
+ * Return an array of optionally paged cids baed on a set of criteria.
+ *
+ * An example request might look like
+ *
+ * http://domain/endpoint/comment?fields=cid,nid&parameters[nid]=7&parameters[uid]=2
+ *
+ * This would return an array of objects with only cid and nid defined, where
+ * nid = 7 and uid = 1.
+ *
+ * @param $page
+ *   Page number of results to return (in pages of 20).
+ * @param $fields
+ *   The fields you want returned.
+ * @param $parameters
+ *   An array of fields and values used to build a sql WHERE clause indicating
+ *   what items should be deleted.
+ * @return
+ *   An array of comment objects.
+ *
+ * @see _node_resource_index() for more notes
+ **/
+function _comment_resource_index($page = 0, $fields = '*', $parameters = array()) {
+  $comment_select = db_select('comment', 'c')
+    ->orderBy('sticky', 'DESC')
+    ->orderBy('created', 'DESC')
+    ->range($page * 20, 20);
+
+  if ($fields == '*') {
+    $comment_select->fields('c');
+  }
+  else {
+    $fields = explode(',', $fields);
+    $comment_select->fields('c', $explode(',', $fields));
+  }
+
+  if (!user_access('administer comments')) {
+    $comment_select->condition('status', COMMENT_PUBLISHED);
+  }
+
+  foreach ($parameters as $parameter => $parameter_value) {
+    $comment_select->condition($parameter, $parameter_value, '=');
+  }
+
+  $result = $comment_select->execute();
+
+  // Put together array of matching comments to return.
+  $comments = array();
+  foreach ($result as $comment) {{
+    if ($uri = services_resource_uri(array('comment', $comment->cid))) {
+      $comment->uri = $uri;
+    }
+    $comments[] = $comment;
+  }
+
+  return $comments;
+}
 
 /**
  * Returns the comments of a specified node.
diff --git a/resources/file_resource.inc b/resources/file_resource.inc
index a3580ed..8cc89f3 100644
--- a/resources/file_resource.inc
+++ b/resources/file_resource.inc
@@ -13,7 +13,6 @@
 function _file_resource_definition() {
   return array(
     'file' => array(
-
       'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/file_resource'),
       'create' => array(
         'help' => 'Creates a file',
@@ -31,7 +30,6 @@ function _file_resource_definition() {
           ),
         ),
       ),
-
       'retrieve' => array(
         'help' => 'Retrieves a file',
         'callback' => '_file_resource_retrieve',
@@ -56,7 +54,6 @@ function _file_resource_definition() {
           ),
         ),
       ),
-
       'delete' => array(
         'help' => 'Deletes a file',
         'callback' => '_file_resource_delete',
@@ -73,6 +70,39 @@ function _file_resource_definition() {
           ),
         ),
       ),
+      'index' => array(
+        'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/file_resource'),
+        'callback' => '_file_resource_index',
+        'args' => array(
+          array(
+            'name' => 'page',
+            'optional' => TRUE,
+            'type' => 'int',
+            'description' => 'The zero-based index of the page to get, defaults to 0.',
+            'default value' => 0,
+            'source' => array('param' => 'page'),
+          ),
+          array(
+            'name' => 'fields',
+            'optional' => TRUE,
+            'type' => 'string',
+            'description' => 'The fields to get.',
+            'default value' => '*',
+            'source' => array('param' => 'fields'),
+          ),
+          array(
+            'name' => 'parameters',
+            'optional' => TRUE,
+            'type' => 'array',
+            'description' => 'Parameters',
+            'default value' => NULL,
+            'source' => array('param' => 'parameters'),
+          ),
+        ),
+        'access callback' => '_file_resource_access',
+        'access arguments' => array('view'),
+        'access arguments append' => TRUE,
+      ),
     ),
   );
 }
@@ -171,6 +201,63 @@ function _file_resource_delete($fid) {
 }
 
 /**
+ * Return an array of optionally paged fids baed on a set of criteria.
+ *
+ * An example request might look like
+ *
+ * http://domain/endpoint/file?fields=fid,filename&parameters[fid]=7&parameters[uid]=1
+ *
+ * This would return an array of objects with only fid and filename defined, where
+ * fid = 7 and uid = 1.
+ *
+ * @param $page
+ *   Page number of results to return (in pages of 20).
+ * @param $fields
+ *   The fields you want returned.
+ * @param $parameters
+ *   An array of fields and values used to build a sql WHERE clause indicating
+ *   what items should be deleted.
+ * @return
+ *   An array of file objects.
+ *
+ * @see _node_resource_index() for more notes
+ **/
+function _file_resource_index($page = 0, $fields = '*', $parameters = array()) {  
+  $file_select = db_select('files', 'f')
+    ->orderBy('timestamp', 'DESC')
+    ->range($page * 20, 20);
+	
+  if ($fields == '*') {
+    $file_select->fields('f);
+  }
+  else {
+    $fields = explode(',', $fields);
+    $file_select->fields('f', $explode(',', $fields));
+  }
+
+  foreach ($parameters as $parameter => $parameter_value) {
+    $file_select->condition($parameter, $parameter_value, '=');
+  }
+
+  $result = $file_select->execute();
+
+  // Put together array of matching comments to return.
+  $comments = array();
+  foreach ($result as $comment) {{
+
+  // Put together array of matching files to return.
+  $files = array();
+  foreach ($result as $file) {{
+    if ($uri = services_resource_uri(array('file', $file->fid))) {
+      $file->uri = $uri;
+    }
+    $files[] = $file;
+  }
+
+  return $files;
+}
+
+/**
  * Access check callback for file controllers.
  */
 function _file_resource_access($op = 'view', $args = array()) {
diff --git a/resources/taxonomy_resource.inc b/resources/taxonomy_resource.inc
index 39c8e55..a272102 100644
--- a/resources/taxonomy_resource.inc
+++ b/resources/taxonomy_resource.inc
@@ -76,6 +76,39 @@ function _taxonomy_resource_definition() {
         'access arguments append' => TRUE,
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
+      'index' => array(
+        'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
+        'callback' => '_taxonomy_term_resource_index',
+        'args' => array(
+          array(
+            'name' => 'page',
+            'optional' => TRUE,
+            'type' => 'int',
+            'description' => 'The zero-based index of the page to get, defaults to 0.',
+            'default value' => 0,
+            'source' => array('param' => 'page'),
+          ),
+          array(
+            'name' => 'fields',
+            'optional' => TRUE,
+            'type' => 'string',
+            'description' => 'The fields to get.',
+            'default value' => '*',
+            'source' => array('param' => 'fields'),
+          ),
+          array(
+            'name' => 'parameters',
+            'optional' => TRUE,
+            'type' => 'array',
+            'description' => 'Parameters',
+            'default value' => NULL,
+            'source' => array('param' => 'parameters'),
+          ),
+        ),
+        'access callback' => '_taxonomy_resource_access',
+        'access arguments' => array('view'),
+        'access arguments append' => TRUE,
+      ),
       'actions' => array(
         'selectNodes' => array(
           'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
@@ -182,6 +215,39 @@ function _taxonomy_resource_definition() {
         'access arguments' => array('administer taxonomy'),
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
+      'index' => array(
+        'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
+        'callback' => '_taxonomy_vocabulary_resource_index',
+        'args' => array(
+          array(
+            'name' => 'page',
+            'optional' => TRUE,
+            'type' => 'int',
+            'description' => 'The zero-based index of the page to get, defaults to 0.',
+            'default value' => 0,
+            'source' => array('param' => 'page'),
+          ),
+          array(
+            'name' => 'fields',
+            'optional' => TRUE,
+            'type' => 'string',
+            'description' => 'The fields to get.',
+            'default value' => '*',
+            'source' => array('param' => 'fields'),
+          ),
+          array(
+            'name' => 'parameters',
+            'optional' => TRUE,
+            'type' => 'array',
+            'description' => 'Parameters',
+            'default value' => NULL,
+            'source' => array('param' => 'parameters'),
+          ),
+        ),
+        'access callback' => '_taxonomy_resource_access',
+        'access arguments' => array('view'),
+        'access arguments append' => TRUE,
+      ),
       'actions' => array(
         'getTree' => array(
           'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
@@ -445,3 +511,121 @@ function _taxonomy_resource_delete_access($tid) {
   }
   return user_access('delete terms in ' . $term->vid) || user_access('administer taxonomy');
 }
+
+/**
+ * Return an array of optionally paged tids baed on a set of criteria.
+ *
+ * An example request might look like
+ *
+ * http://domain/endpoint/taxonomy_term?fields=tid,name&parameters[tid]=7&parameters[vid]=1
+ *
+ * This would return an array of objects with only tid and name defined, where
+ * tid = 7 and vid = 1.
+ *
+ * @param $page
+ *   Page number of results to return (in pages of 20).
+ * @param $fields
+ *   The fields you want returned.
+ * @param $parameters
+ *   An array of fields and values used to build a sql WHERE clause indicating
+ *   what items should be returned.
+ * @return
+ *   An array of term objects.
+ *
+ * @see _node_resource_index() for more notes
+ **/
+function _taxonomy_term_resource_index($page = 0, $fields = '*', $parameters = array()) {
+  $taxonomy_select = db_select('taxonomy_term_data', 'd')
+    ->orderBy('vid', 'DESC')
+	->orderBy('weight', 'DESC')
+	->orderBy('name', 'DESC')
+    ->range($page * 20, 20);
+
+  if ($fields == '*') {
+    $taxonomy_select->fields('d');
+  }
+  else {
+    $fields = explode(',', $fields);
+    $taxonomy_select->fields('d', $fields);
+  }
+
+  foreach ($parameters as $parameter => $parameter_value) {
+    $taxonomy_select->condition($parameter, $parameter_value, '=');
+  }
+
+  $result = $taxonomy_select->execute();
+
+  // Put together array of matching terms to return.
+  $terms = array();
+  foreach ($result as $term) {
+    if ($uri = services_resource_uri(array('taxonomy_term', $term->tid))) {
+      $term->uri = $uri;
+    }
+    $terms[] = $term;
+  }
+
+  return $terms;
+}
+
+/**
+ * Return an array of optionally paged vids baed on a set of criteria.
+ *
+ * An example request might look like
+ *
+ * http://domain/endpoint/taxonomy_vocabulary?fields=vid,name&parameters[vid]=2
+ *
+ * This would return an array of objects with only vid and name defined, where
+ * vid = 2.
+ *
+ * @param $page
+ *   Page number of results to return (in pages of 20).
+ * @param $fields
+ *   The fields you want returned.
+ * @param $parameters
+ *   An array of fields and values used to build a sql WHERE clause indicating
+ *   what items should be returned.
+ * @return
+ *   An array of vocabulary objects.
+ *
+ * @todo
+ *   Support node types as parameters.
+ *
+ * @see _node_resource_index() for more notes
+ **/
+function _taxonomy_vocabulary_resource_index($page = 0, $fields = '*', $parameters = array()) {
+  $taxonomy_select = db_select('vocabulary', 'v')
+	->orderBy('weight', 'DESC')
+	->orderBy('name', 'DESC')
+    ->range($page * 20, 20);
+
+  if ($fields == '*') {
+    $taxonomy_select->fields('v');
+  }
+  else {
+    $fields = explode(',', $fields);
+    $taxonomy_select->fields('v', $fields);
+  }
+
+  foreach ($parameters as $parameter => $parameter_value) {
+    $taxonomy_select->condition($parameter, $parameter_value, '=');
+  }
+
+  $result = $taxonomy_select->execute();
+
+  // Put together array of matching vocabularies to return.
+  $vocabs = array();
+  $fields = field_info_fields();
+  while ($result as $vocab) {
+    foreach ($fields as $field) {
+	  if ($field['module'] == 'taxonomy' && $field['settings']['allowed_values'][0]['vocabulary'] == $vocab->machine_name) {
+	    $vocab->bundles = $field['bundles'];
+	  }
+	}
+    if ($uri = services_resource_uri(array('taxonomy_vocabulary', $vocab->vid))) {
+      $vocab->uri = $uri;
+    }
+    $vocabs[] = $vocab;
+  }
+
+  return $vocabs;
+}
\ No newline at end of file
