diff --git a/node_embed.module b/node_embed.module
index 99e0be2..a47805b 100644
--- a/node_embed.module
+++ b/node_embed.module
@@ -167,7 +167,9 @@ function node_embed_views_data_alter(&$data) {
  * Add a validation handler to nodes with node_embed.
  */
 function node_embed_form_alter(&$form, &$form_state, $form_id) {
-  $form['#validate'][] = 'node_embed_validate';
+  if (isset($form['#node_edit_form'])) {
+    $form['#validate'][] = 'node_embed_validate';
+  }
 }
 
 /**
@@ -176,21 +178,44 @@ function node_embed_form_alter(&$form, &$form_state, $form_id) {
  * We do not allow nodes to embed in themselves.
  * results in segment fault.
  */
-function node_embed_validate($node, $form) {
+function node_embed_validate(&$form_state, $form) {
+  global $user;
+
   if (isset($form['values']['nid'])) {
+    $node = $form_state['#node'];
+    $fields = field_info_instances('node', $node->type);
+
     $nid = $form['values']['nid'];
     $needle = "[[nid:{$nid}]]";
-    $num = 0;
-    $language = (isset($form['values']['language']) && $form['values']['language']) ? $form['values']['language'] : LANGUAGE_NONE;
 
-    while (isset($form['values']['body'][$language][$num])) {
-      $found = strpos($form['values']['body'][$language][$num]['value'], $needle);
+    // Collect all allowed text format filters.
+    $filters = array();
+    foreach(filter_formats($user) as $format) {
+      $filters[$format->format] = filter_list_format($format->format);
+    }
 
-      if ($found !== FALSE) {
-        form_set_error('edit-body', t('A node is not allowed to embed in itself.'));
-      }
+    foreach($fields as $field_name => $field) {
+      $languages = field_available_languages('node', $field);
 
-      $num++;
+      foreach ($languages as $language) {
+        if (!isset($form['values'][$field_name][$language])) {
+          continue;
+        }
+
+        foreach (element_children($form['values'][$field_name][$language]) as $key) {
+          $format = isset($form['values'][$field_name][$language][$key]['format']) ? $form['values'][$field_name][$language][$key]['format'] : '';
+
+          // Skip validation if node_embed isn't used
+          if (!isset($filters[$format]['node_embed'])) {
+            continue;
+          }
+
+          $found = strpos($form['values'][$field_name][$language][$key]['value'], $needle);
+          if ($found !== FALSE) {
+            form_set_error("{$field_name}][{$language}][{$key}][value", t('!label can not embed its own node.', array('!label' => $field['label'])));
+          }
+        }
+      }
     }
   }
 }
