diff --git resources/taxonomy_resource.inc resources/taxonomy_resource.inc
index d0790d6..cb1026b 100644
--- resources/taxonomy_resource.inc
+++ resources/taxonomy_resource.inc
@@ -23,9 +23,7 @@ function _taxonomy_resource_definition() {
             'description' => 'The tid of the taxonomy term to get',
           ),
         ),
-        'access callback' => '_taxonomy_resource_access',
-        'access arguments' => array('view'),
-        'access arguments append' => TRUE,
+        'access arguments' => array('access content'),
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
       'create' => array(
@@ -39,8 +37,7 @@ function _taxonomy_resource_definition() {
             'type' => 'struct',
           ),
         ),
-        'access callback' => '_taxonomy_resource_access',
-        'access arguments' => array('create'),
+        'access callback' => '_taxonomy_resource_create_access',
         'access arguments append' => TRUE,
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
@@ -62,8 +59,7 @@ function _taxonomy_resource_definition() {
             'type' => 'struct',
           ),
         ),
-        'access callback' => '_taxonomy_resource_access',
-        'access arguments' => array('update'),
+        'access callback' => '_taxonomy_resource_update_access',
         'access arguments append' => TRUE,
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
@@ -74,10 +70,10 @@ function _taxonomy_resource_definition() {
             'name' => 'tid',
             'optional' => FALSE,
             'source' => array('path' => 0),
+            'type' => 'int',
           ),
         ),
-        'access callback' => '_taxonomy_resource_access',
-        'access arguments' => array('delete'),
+        'access callback' => '_taxonomy_resource_delete_access',
         'access arguments append' => TRUE,
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
@@ -85,9 +81,7 @@ function _taxonomy_resource_definition() {
         'selectNodes' => array(
           'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
           'help'   => t('This method returns all nodes with provided taxonomy id.'),
-          'access callback' => '_taxonomy_resource_access',
-          'access arguments' => array('view'),
-          'access arguments append' => TRUE,
+          'access arguments' => array('access content'),
           'callback' => 'taxonomy_service_select_nodes',
           'args'     => array(
             array(
@@ -103,6 +97,7 @@ function _taxonomy_resource_definition() {
               'description'  => t('Whether the nodes are to be used with a pager (the case on most Drupal pages) or not (in an XML feed, for example).'),
               'source'       => 'data',
               'optional'     => TRUE,
+              'default value'=> TRUE,
             ),
             array(
               'name'         => 'limit',
@@ -110,7 +105,7 @@ function _taxonomy_resource_definition() {
               'description'  => t('Maximum number of nodes to find.'),
               'source'       => 'data',
               'optional'     => TRUE,
-              'default value' => FALSE,
+              'default value'=> FALSE,
             ),
             array(
               'name'         => 'order',
@@ -118,6 +113,7 @@ function _taxonomy_resource_definition() {
               'description'  => t('The order clause for the query that retrieve the nodes.'),
               'source'       => 'data',
               'optional'     => TRUE,
+              'default value'=> array('t.sticky' => 'DESC', 't.created' => 'DESC'),
             ),
           ),
         ),
@@ -136,9 +132,7 @@ function _taxonomy_resource_definition() {
             'description' => 'The vid of the taxonomy vocabulary to get',
           ),
         ),
-        'access callback' => '_taxonomy_resource_access',
-        'access arguments' => array('view'),
-        'access arguments append' => TRUE,
+        'access arguments' => array('access content'),
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
       'create' => array(
@@ -152,9 +146,7 @@ function _taxonomy_resource_definition() {
             'type' => 'struct',
           ),
         ),
-        'access callback' => '_taxonomy_resource_access',
-        'access arguments' => array('create'),
-        'access arguments append' => TRUE,
+        'access arguments' => array('administer taxonomy'),
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
       'update' => array(
@@ -175,9 +167,7 @@ function _taxonomy_resource_definition() {
             'type' => 'struct',
           ),
         ),
-        'access callback' => '_taxonomy_resource_access',
-        'access arguments' => array('update'),
-        'access arguments append' => TRUE,
+        'access arguments' => array('administer taxonomy'),
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
       'delete' => array(
@@ -187,20 +177,17 @@ function _taxonomy_resource_definition() {
             'name' => 'vid',
             'optional' => FALSE,
             'source' => array('path' => 0),
+            'type' => 'int',
           ),
         ),
-        'access callback' => '_taxonomy_resource_access',
-        'access arguments' => array('delete'),
-        'access arguments append' => TRUE,
+        'access arguments' => array('administer taxonomy'),
         'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
       ),
       'actions' =>array(
         'getTree' => array(
           'file' => array('type' => 'inc', 'module' => 'services', 'name' => 'resources/taxonomy_resource'),
           'help'   => t('This method returns a full list of taxonomy terms.'),
-          'access callback' => '_taxonomy_resource_access',
-          'access arguments' => array('view'),
-          'access arguments append' => TRUE,
+          'access arguments' => array('access content'),
           'callback' => 'taxonomy_service_get_tree',
           'args'     => array(
             array(
@@ -217,7 +204,7 @@ function _taxonomy_resource_definition() {
               'source'       => 'data',
               'default value' => 0,
               'optional'     => TRUE,
-            ), 
+            ),
             array(
               'name'         => 'maxdepth',
               'type'         => 'int',
@@ -244,7 +231,7 @@ function _taxonomy_resource_definition() {
  * @see taxonomy_get_term().
  */
 function _taxonomy_term_resource_retrieve($tid) {
-  return taxonomy_get_term($tid);
+  return taxonomy_term_load($tid);
 }
 
 /**
@@ -277,7 +264,7 @@ function _taxonomy_term_resource_create($term) {
 function _taxonomy_term_resource_update($tid, $term) {
   $term = (object) $term;
   $term->tid = $tid;
-  return _taxonomy_term_resource_create($term);
+  return taxonomy_term_save($term);
 }
 
 /**
@@ -336,11 +323,11 @@ function _taxonomy_vocabulary_resource_retrieve($vid) {
  * @return
  *   Status constant indicating if vocabulary was inserted or updated.
  *
- * @see taxonomy_save_vocabulary().
+ * @see taxonomy_vocabulary_save().
  */
 function _taxonomy_vocabulary_resource_create($vocabulary) {
-  $vocabulary = (array) $vocabulary;
-  return taxonomy_save_vocabulary($vocabulary);
+  $vocabulary = (object) $vocabulary;
+  return taxonomy_vocabulary_save($vocabulary);
 }
 
 /**
@@ -353,12 +340,11 @@ function _taxonomy_vocabulary_resource_create($vocabulary) {
  * @return
  *   Status constant indicating if vocabulary was inserted or updated.
  *
- * @see taxonomy_save_vocabulary().
+ * @see taxonomy_vocabulary_save().
  */
 function _taxonomy_vocabulary_resource_update($vid, $vocabulary) {
-  $vocabulary = (array) $vocabulary;
-  $vocabulary['vid'] = $vid;
-  return _taxonomy_vocabulary_resource_create($vocabulary);
+  $vocabulary = (object) $vocabulary;
+  return taxonomy_vocabulary_save($vocabulary);
 }
 
 /**
@@ -372,7 +358,7 @@ function _taxonomy_vocabulary_resource_update($vid, $vocabulary) {
  * @see taxonomy_del_vocabulary().
  */
 function _taxonomy_vocabulary_resource_delete($vid) {
-  return taxonomy_del_vocabulary($vid);
+  return taxonomy_vocabulary_delete($vid);
 }
 
 
@@ -399,12 +385,12 @@ function taxonomy_service_get_tree($vid, $parent = 0, $max_depth = NULL) {
  *
  * @see
  *   taxonomy_select_nodes().
- * @return 
+ * @return
  *   An array of node objects.
  */
-function taxonomy_service_select_nodes($tid = '', $pager = TRUE, $limit = FALSE,  $order = array('t.sticky' => 'DESC', 't.created' => 'DESC')) {
+function taxonomy_service_select_nodes($tid = '', $pager, $limit,  $order) {
   $result = taxonomy_select_nodes($tid, (bool)$pager, $limit, $order);
-  foreach($result as $nid) {  
+  foreach($result as $nid) {
     if ($uri = services_resource_uri(array('node', $nid))) {
       $node = node_load($nid);
       $node->uri = $uri;
@@ -417,9 +403,47 @@ function taxonomy_service_select_nodes($tid = '', $pager = TRUE, $limit = FALSE,
   return $nodes;
 }
 
-function _taxonomy_resource_access($op = 'view', $args = array()) {
-  if (user_access('administer taxonomy')) {
-    return TRUE;
+/**
+ * Access callback for term updating.
+ *
+ * @param $term
+ *   An taxonomy term object
+ * @return
+ *   Boolean whether or not the user has access to create or edit the term.
+ */
+function _taxonomy_resource_update_access($tid, $term) {
+  $term = (object) $term;
+  if (!isset($term->vid)) {
+    throw new ServicesArgumentException(t('Term object needs vid property.'), 'term', 0);
+  }
+  return user_access('edit terms in ' . $term->vid) || user_access('administer taxonomy');
+}
+
+/**
+ * Access callback for term creating.
+ *
+ * @param $term
+ *   An taxonomy term object
+ * @return
+ *   Boolean whether or not the user has access to create or edit the term.
+ */
+function _taxonomy_resource_create_access($term) {
+  $term = (object) $term;
+  return user_access('edit terms in ' . $term->vid) || user_access('administer taxonomy');
+}
+
+/**
+ * Access callback for term deleting.
+ *
+ * @param $term
+ *   An taxonomy term object
+ * @return
+ *   Boolean whether or not the user has access to delete the term.
+ */
+function _taxonomy_resource_delete_access($tid) {
+  $term = taxonomy_term_load($tid);
+  if (!$term) {
+    throw new ServicesArgumentException(t('There is no term with id %tid', array('%tid' => $tid)), 'tid', 0);
   }
-  // TODO - check perms of user to return ability to interact with terms / vocabulary
+  return user_access('delete terms in ' . $term->vid) || user_access('administer taxonomy');
 }
diff --git services.info services.info
index e5d8649..8b8f32a 100644
--- services.info
+++ services.info
@@ -15,9 +15,9 @@ files[] = services.servers.api.php
 files[] = serviers.services.api.php
 files[] = tests/functional/NoAuthEndpointTestRunner.test
 files[] = tests/functional/ServicesResourceNodeTests.test
-files[] = tests/functional/ServicesResourceUserTests.test
+files[] = tests/functional/ServicesResourceTaxonomyTests.test
 files[] = tests/functional/ServicesEndpointTests.test
 files[] = tests/unit/TestServicesModule.test
 files[] = tests/services.test
 
-dependencies[] = ctools
\ No newline at end of file
+dependencies[] = ctools
