diff --git a/resources/node_resource.inc b/resources/node_resource.inc
index 7cc3e0e..aec6924 100644
--- a/resources/node_resource.inc
+++ b/resources/node_resource.inc
@@ -313,13 +313,18 @@ function _node_resource_update($nid, $node) {
   $old_node = node_load($nid);
   node_object_prepare($old_node);
 
+  // If no type is provided use the existing node type.
+  if (empty($node['type']) && isset($old_node->type)) {
+    $node['type'] = $old_node->type;
+  }
+
   // 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) {
+  if (!empty($old_node->nid)) {
     // Node types cannot be changed once they are created.
-    if (isset($node['type']) && $node['type'] != $old_node->type) {
+    if ($node['type'] != $old_node->type) {
       return services_error(t('Node type cannot be changed'), 406);
     }
 
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);
   }
 
   /**
