diff --git a/resources/node_resource.inc b/resources/node_resource.inc
index 7cc3e0e..c3e3112 100644
--- a/resources/node_resource.inc
+++ b/resources/node_resource.inc
@@ -311,36 +311,38 @@ function _node_resource_update($nid, $node) {
   $node['nid'] = $nid;
 
   $old_node = node_load($nid);
-  node_object_prepare($old_node);
+  if (empty($old_node->nid)) {
+    return services_error(t('Node @nid not found', array('@nid' => $old_node->nid)), 404);
+  }
+
+  // If no type is provided use the existing node type.
+  if (empty($node['type'])) {
+    $node['type'] = $old_node->type;
+  }
+  elseif ($node['type'] != $old_node->type) {
+    // Node types cannot be changed once they are created.
+    return services_error(t('Node type cannot be changed'), 406);
+  }
 
   // Validate the node. If there is validation error Exception will be thrown
   // so code below won't be executed.
   _node_resource_validate_type($node);
 
-  if ($old_node->nid) {
-    // Node types cannot be changed once they are created.
-    if (isset($node['type']) && $node['type'] != $old_node->type) {
-      return services_error(t('Node type cannot be changed'), 406);
-    }
-
-    // Load the required includes for drupal_execute
-    module_load_include('inc', 'node', 'node.pages');
+  // Load the required includes for drupal_execute
+  module_load_include('inc', 'node', 'node.pages');
 
-    $node_type = $node['type'];
+  $node_type = $node['type'];
+  node_object_prepare($old_node);
 
-    // Setup form_state.
-    $form_state = array();
-    $form_state['values'] = $node;
-    $form_state['values']['op'] = variable_get('services_node_save_button_' . $node_type . '_resource_update', t('Save'));
-    $form_state['node'] = $old_node;
-    drupal_form_submit($node_type . '_node_form', $form_state, $old_node);
+  // Setup form_state.
+  $form_state = array();
+  $form_state['values'] = $node;
+  $form_state['values']['op'] = variable_get('services_node_save_button_' . $node_type . '_resource_update', t('Save'));
+  $form_state['node'] = $old_node;
+  drupal_form_submit($node_type . '_node_form', $form_state, $old_node);
 
-    if ($errors = form_get_errors()) {
-      return services_error(implode(" ", $errors), 406, array('form_errors' => $errors));
-    }
-  }
-  else {
-    return services_error(t('Node @nid not found', array('@nid' => $old_node->nid)), 404);
+  if ($errors = form_get_errors()) {
+    return services_error(implode(" ", $errors), 406, array('form_errors' => $errors));
   }
 
   $node = array('nid' => $nid);
diff --git a/tests/functional/ServicesResourceNodeTests.test b/tests/functional/ServicesResourceNodeTests.test
index 73bbe8d..3440611 100644
--- a/tests/functional/ServicesResourceNodeTests.test
+++ b/tests/functional/ServicesResourceNodeTests.test
@@ -6,6 +6,10 @@
  *
  */
 
+define("SERVICES_NODE_TYPE_INCLUDE", 1);
+define("SERVICES_NODE_TYPE_EMPTY", 2);
+define("SERVICES_NODE_TYPE_REMOVED", 3);
+
 /**
  * Run test cases for the endpoint with no authentication turned on.
  *
@@ -265,34 +269,46 @@ class ServicesResourceNodetests extends ServicesWebTestCase {
   }
 
   /**
-   * Testing node_resource Update.
+   *  Helper function to perform node updates.
+   *
+   *  @parm $exclude_type
+   *    Integer how should the type value be treated.
    */
-  public function testEndpointResourceNodeUpdate() {
-    // Create and log in our privileged user.
-    $this->privilegedUser = $this->drupalCreateUser(array(
-      'administer services',
-      'bypass node access',
-    ));
-    $this->drupalLogin($this->privilegedUser);
+  function update_node($exclude_type) {
     $node = $this->drupalCreateNode();
-
     $node_update = (array) $node;
     $node_update['title'] = $this->randomName();
     $node_update['body'][LANGUAGE_NONE][0]['value'] = $this->randomName();
 
+    if ($exclude_type == SERVICES_NODE_TYPE_EMPTY) {
+      $node_update['type'] = '';
+    }
+    elseif($exclude_type == SERVICES_NODE_TYPE_REMOVED) {
+      unset($node_update['type']);
+    }
+
     $responseArray = $this->servicesPut($this->endpoint->path . '/node/' . $node->nid, $node_update);
     // Load node not from cache.
     $nodeAfterUpdate = node_load($responseArray['body']['nid'], NULL, TRUE);
     $this->assertTrue(isset($nodeAfterUpdate->nid), t('Node was successfully updated'), 'NodeResource: Updated');
     $this->assertEqual($nodeAfterUpdate->title, $node_update['title'], t('Title is the same'), 'NodeResource: Update');
     $this->assertEqual($nodeAfterUpdate->body[LANGUAGE_NONE][0]['value'], $node_update['body'][LANGUAGE_NONE][0]['value'], t('Body is the same'), 'NodeResource: Update');
+  }
+
+  /**
+   * Testing node_resource Update.
+   */
+  public function testEndpointResourceNodeUpdate() {
+    // Create and log in our privileged user.
+    $this->privilegedUser = $this->drupalCreateUser(array(
+      'administer services',
+      'bypass node access',
+    ));
+    $this->drupalLogin($this->privilegedUser);
 
-    // Try to update the node without node type.
-    $node_update_no_type = $node_update;
-    unset($node_update_no_type['type']);
-    $node_update_no_type['title'] = $this->randomName();
-    $responseArray = $this->servicesPut($this->endpoint->path . '/node/' . $node->nid, $node_update_no_type);
-    $this->assertNotEqual($responseArray['code'], 200, t('Can\'t update node without specifying node type'), 'NodeResource: Update');
+    $this->update_node(SERVICES_NODE_TYPE_INCLUDE);
+    $this->update_node(SERVICES_NODE_TYPE_EMPTY);
+    $this->update_node(SERVICES_NODE_TYPE_REMOVED);
   }
 
   /**
