diff --git a/linkchecker.module b/linkchecker.module
index 3c58e3b..a9c8583 100644
--- a/linkchecker.module
+++ b/linkchecker.module
@@ -568,44 +568,10 @@ function _linkchecker_add_node_links($node, $skip_missing_links_detection = FALS
   // Create array of node fields to scan.
   $text_items = array();
   $text_items[] = _filter_url($node->title, $filter);
-  //$text_items[] = _linkchecker_check_markup($node->summary, $node->format, $node->language);
-  $text_items[] = _linkchecker_check_markup($node->body, $node->format, $node->language);
-  $text_items[] = _linkchecker_check_markup($node->teaser, $node->format, $node->language);
-
-  // Search for links in 'weblink' nodes from 'links' module package.
-  if (module_exists('links_weblink') && $node->type == 'weblink' && !empty($node->links_weblink_url)) {
-    $text_items[] = _filter_url(url($node->links_weblink_url, $url_options), $node->format);
-  }
-
-  // Search for links in 'weblinks' nodes from 'weblinks' module.
-  if (module_exists('weblinks') && $node->type == 'weblinks' && !empty($node->url)) {
-    $text_items[] = _filter_url(url($node->url, $url_options), $node->format);
-  }
-
-  // Search for CCK-fields of types 'link' and 'text'.
-  if (module_exists('content')) {
-    // FIXME: How to port to D7???
-    $fields = content_fields(NULL, $node->type);
-    foreach ($fields as $field) {
-      if (!empty($node->{$field['field_name']})) {
-        if (module_exists('link') && $field['type'] == 'link') {
-          foreach ($node->$field['field_name'] as $delta => $item) {
-            if (!empty($item['url'])) {
-              // Make non-absolute urls absolute or they are not found by _filter_url().
-              // FIXME D7: needs language parameter for check_markup.
-              $text_items[] = _filter_url(url($item['url'], $url_options), $node->format);
-            }
-          }
-        }
-        elseif (module_exists('text') && $field['type'] == 'text') {
-          foreach ($node->$field['field_name'] as $delta => $item) {
-            $text_items[] = _filter_url($item['value'], $filter);
-          }
-        }
-      }
-    }
-  }
 
+  // Parse the fields from node and get all urls(add they to $text_items array).
+  linkchecker_parse_fields($node, $node->type, $text_items);
+  
   // Get the absolute node path for extraction of relative links.
   $path = url('node/'. $node->nid, $url_options);
 
@@ -676,6 +642,54 @@ function _linkchecker_add_node_links($node, $skip_missing_links_detection = FALS
 }
 
 /**
+ * Parse the urls from entity.
+ * 
+ * This function parse all fields from the entity(a node or comment) and
+ * add they to $text_items array.
+ * 
+ * @param $entity
+ *   The entity to parse, a node or a comment object.
+ * @param $type
+ *   The type(blunde) to parse. As a example, when the $entity is a node
+ *   object, pass $node->type as value for this parameter.
+ * @param $text_items
+ *   This is an array with all URLs found.
+ */
+function linkchecker_parse_fields($entity, $type, &$text_items) {
+  $field_list = field_info_fields();
+
+  foreach($field_list as $name => $field) {
+    // The followning line will always cause a warning, because only
+    // of the two options will be set, so the @.
+    if (@in_array($type, $field['bundles']['node']) || @in_array($type, $field['bundles']['comment'])) {
+      // This is because a php parse error.
+      $entityField = $entity->$name;
+      switch($field['type']) {
+        case 'text_with_summary':
+          foreach($entityField as $language) {
+            foreach($language as $item) {
+              $text_items[] = _linkchecker_check_markup($item['value'],
+                $item['format'], $entity->language);
+              $text_items[] = _linkchecker_check_markup($item['summary'],
+                $item['format'], $entity->language);
+            }
+          }
+          break;
+        case 'text_long':
+        case 'text':
+          foreach($entityField as $language) {
+            foreach($language as $item) {
+              $text_items[] = _linkchecker_check_markup($item['value'],
+                $item['format'], $entity->language);
+            }
+          }
+          break;
+      }
+    }
+  }
+}
+
+/**
  * Add comment links to database.
  *
  * @param $comment
@@ -1337,9 +1351,12 @@ function _linkchecker_link_replace(&$text, $old_link_fqdn = '', $new_link_fqdn =
  *
  * See http://api.drupal.org/api/function/check_markup/7 for API documentation.
  */
-function _linkchecker_check_markup($text, $format = FILTER_FORMAT_DEFAULT, $langcode = '', $cache = TRUE) {
-  if (isset($text)) {
-    $format = filter_resolve_format($format);
+function _linkchecker_check_markup($text, $format = NULL, $langcode = '', $cache = TRUE) {
+	if (isset($text)) {
+	  // If the format for the filter is not set, use the fallback.
+	  if ($format) {
+  	  $format = filter_fallback_format();
+    }
 
     // Check for a cached version of this piece of text.
     $cache_id = 'linkchecker:' . $format . ':' . $langcode . ':' . md5($text);
@@ -1365,10 +1382,13 @@ function _linkchecker_check_markup($text, $format = FILTER_FORMAT_DEFAULT, $lang
     // Give filters the chance to escape HTML-like data such as code or formulas.
     foreach ($filters as $filter) {
       if (!in_array($filter->name, $filters_blacklist)) {
-        $filter_info = module_invoke($filter->module, 'filter_info');
-        // TODO: http://drupal.org/node/562694
-        if (isset($filter_info[$filter->name]['prepare callback']) && function_exists($filter_info[$filter->name]['prepare callback'])) {
-          $text = call_user_func($filter_info[$filter->name]['prepare callback'], $text, $format, $langcode, $cache_id);
+        //run only enabled filters, not all
+        if ($filter->status == 1) {
+          $filter_info = module_invoke($filter->module, 'filter_info');
+          // TODO: http://drupal.org/node/562694
+          if (isset($filter_info[$filter->name]['prepare callback']) && function_exists($filter_info[$filter->name]['prepare callback'])) {
+            $text = call_user_func($filter_info[$filter->name]['prepare callback'], $text, $filter, $langcode, $cache_id);
+          }
         }
       }
     }
@@ -1376,10 +1396,13 @@ function _linkchecker_check_markup($text, $format = FILTER_FORMAT_DEFAULT, $lang
     // Perform filtering.
     foreach ($filters as $filter) {
       if (!in_array($filter->name, $filters_blacklist)) {
-        $filter_info = module_invoke($filter->module, 'filter_info');
-        // TODO: http://drupal.org/node/562694
-        if (isset($filter_info[$filter->name]['process callback']) && function_exists($filter_info[$filter->name]['process callback'])) {
-          $text = call_user_func($filter_info[$filter->name]['process callback'], $text, $format, $langcode, $cache_id);
+        //run only enabled filters, not all
+        if ($filter->status == 1) {
+          $filter_info = module_invoke($filter->module, 'filter_info');
+          // TODO: http://drupal.org/node/562694
+          if (isset($filter_info[$filter->name]['prepare callback']) && function_exists($filter_info[$filter->name]['prepare callback'])) {
+            $text = call_user_func($filter_info[$filter->name]['prepare callback'], $text, $filter, $langcode, $cache_id);
+          }
         }
       }
     }
