diff --git a/node_convert.module b/node_convert.module
index 5446acb..51f6857 100755
--- a/node_convert.module
+++ b/node_convert.module
@@ -793,55 +793,65 @@ function node_convert_node_convert($nid, $dest_node_type, $source_fields, $dest_
     return FALSE;
   }
 
-  // Change the node type in the DB
-  db_update('node')->fields(array('type' => $dest_node_type,))->condition('nid', $nid)->execute();
-
-  // If there are fields that can be converted
-  if ($no_fields_flag == FALSE) {
-
-    // Conversion process for each field
-    $resave_body_field = FALSE;
-    foreach ($source_fields as $key => $field) {
-      $replaced_body = node_convert_field_convert($node, $field, $dest_fields[$key]);
-      if ($replaced_body == REPLACE_BODY) {
-        $resave_body_field = TRUE; 
+  try {
+
+    // Change the node type in the DB
+    $affected = db_update('node')->fields(array('type' => $dest_node_type,))->condition('nid', $nid)->execute();
+    if (!$affected) {
+      throw new Exception('Failed to change node type.');
+    }
+
+    // If there are fields that can be converted
+    if ($no_fields_flag == FALSE) {
+
+      // Conversion process for each field
+      $resave_body_field = FALSE;
+      foreach ($source_fields as $key => $field) {
+        $replaced_body = node_convert_field_convert($node, $field, $dest_fields[$key]);
+        if ($replaced_body == REPLACE_BODY) {
+          $resave_body_field = TRUE;
+        }
+      }
+      // If something was appended to the body, or replaced the body, we update body field.
+      if ($resave_body_field == TRUE) {
+        $field_body = field_info_fields();
+        $field_body = $field_body['body'];
+        $field_ids = array($field_body['id'] => $field_body['id']);
+        module_invoke($field_body['storage']['module'], 'field_storage_write', 'node', $node, FIELD_STORAGE_UPDATE, $field_ids);
       }
     }
-    // If something was appended to the body, or replaced the body, we update body field.
-    if ($resave_body_field == TRUE) {
-      $field_body = field_info_fields();
-      $field_body = $field_body['body'];
-      $field_ids = array($field_body['id'] => $field_body['id']);
-      module_invoke($field_body['storage']['module'], 'field_storage_write', 'node', $node, FIELD_STORAGE_UPDATE, $field_ids);
+    // We collate data to send to the hook implementations
+    $data = array(
+      'node' => $node,
+      'dest_node_type' => $dest_node_type,
+    );
+    if (!empty($hook_options)) {
+      $data['hook_options'] = $hook_options;
     }
-  }
-  // We collate data to send to the hook implementations
-  $data = array(
-    'node' => $node,
-    'dest_node_type' => $dest_node_type,
-  );
-  if (!empty($hook_options)) {
-    $data['hook_options'] = $hook_options;
-  }
-  // We make sure that all custom node modules do their changes at the appropriate steps
-  module_invoke_all('node_convert_change', $data, 'insert');
-  module_invoke_all('node_convert_change', $data, 'delete');
+    // We make sure that all custom node modules do their changes at the appropriate steps
+    module_invoke_all('node_convert_change', $data, 'insert');
+    module_invoke_all('node_convert_change', $data, 'delete');
+
+    // TODO Check what to do about token cache clearing.
+    /*if (module_exists('token')) {
+      token_get_values('global', NULL, TRUE);
+    }*/
+    cache_clear_all('field:node:' . $node->nid, 'cache_field');
+    $converted_node = node_load($nid, NULL, TRUE);
+
+    // Attempt to force node type.
+    $converted_node->type = $dest_node_type;
 
-  // TODO Check what to do about token cache clearing.
-  /*if (module_exists('token')) {
-    token_get_values('global', NULL, TRUE);
-  }*/
-  cache_clear_all('field:node:' . $node->nid, 'cache_field');
-  $converted_node = node_load($nid, NULL, TRUE);
-  try {
     node_save($converted_node);
+
+    if (module_exists('rules')) {
+      rules_invoke_event('node_convert_converted_node', $converted_node);
+    }
+
   }
   catch (Exception $e) {
-      drupal_set_message(t('Caught exception: @exception', array('@exception' => $e->getMessage())), 'error');
-  }
-  
-  if (module_exists('rules')) {
-    rules_invoke_event('node_convert_converted_node', $converted_node);
+    drupal_set_message(t('Caught exception: @exception', array('@exception' => $e->getMessage())), 'error');
+    watchdog_exception('node_convert', $e);
   }
 
   return $nid;
@@ -876,7 +886,7 @@ function node_convert_field_convert(&$node, $source_field, $dest_field) {
     $field_info_dest = $field_info_dest[$dest_field]; // Get destination field information
     $db_info_dest = $field_info_dest['storage']; // Get DB specific destination field information
   }
-  
+
   $source_values = array();
   // We save each field value from the DB for transfer.
   $source_values = field_get_items('node', $node, $source_field);
@@ -912,7 +922,7 @@ function node_convert_field_convert(&$node, $source_field, $dest_field) {
 
     return REPLACE_BODY;
   }
-  
+
   // We put each field value back into the DB
   // To do it we first get the id of the field, then we find its language code from the source value
   // We add $source_values into the node object, and invoke field_storage write
@@ -1124,10 +1134,10 @@ function node_convert_get_field_value($node, $field) {
   if ($field['type'] == "image") {
     $value = $field_values[0]['title'] . " ; " . $field_values[0]['uri'];
   }
-  /*elseif ($field['type'] == "link") {
+  elseif ($field['type'] == "link_field") {
     $value = $field_values[0]['url'] . " ; " . $field_values[0]['title'];
   }
-  elseif ($field['type'] == "email") {
+  /*elseif ($field['type'] == "email") {
     $value = $field_values[0]['email'];
   }
   elseif ($field['type'] == "file_audio" || $field['type'] == "file_video") {
