diff --git a/core/modules/search/search.test b/core/modules/search/search.test
index 376c8e1..3886783 100644
--- a/core/modules/search/search.test
+++ b/core/modules/search/search.test
@@ -450,8 +450,14 @@ class SearchRankingTestCase extends SearchWebTestCase {
     variable_set('statistics_count_content_views', 1);
 
     // Then View one of the nodes a bunch of times.
+    // Manually calling statistics.php, simulating ajax behavior.
+    $nids = array($nodes['views'][1]->nid);
+    $post = http_build_query(array('nids' => json_encode($nids)));
+    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    global $base_url;
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
     for ($i = 0; $i < 5; $i ++) {
-      $this->drupalGet('node/' . $nodes['views'][1]->nid);
+      drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     }
 
     // Test each of the possible rankings.
diff --git a/core/modules/statistics/statistics.admin.inc b/core/modules/statistics/statistics.admin.inc
index 6606b8b..6617078 100644
--- a/core/modules/statistics/statistics.admin.inc
+++ b/core/modules/statistics/statistics.admin.inc
@@ -269,6 +269,12 @@ function statistics_settings_form() {
     '#default_value' => variable_get('statistics_count_content_views', 0),
     '#description' => t('Increment a counter each time content is viewed.'),
   );
+  $form['content']['statistics_count_only_full'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Count full nodes only'),
+    '#default_value' => variable_get('statistics_count_only_full', 1),
+    '#description' => t('Count views of only whole content and not as part of blocks, lists or teasers.'),
+  );
 
   return system_settings_form($form);
 }
diff --git a/core/modules/statistics/statistics.js b/core/modules/statistics/statistics.js
new file mode 100644
index 0000000..7b3c4af
--- /dev/null
+++ b/core/modules/statistics/statistics.js
@@ -0,0 +1,12 @@
+(function ($) {
+   $(document).ready(function() {
+      var nids = Drupal.settings.statistics.nids;
+      var basePath = Drupal.settings.basePath
+      $.ajax({
+        type: "POST",
+        cache: false,
+        url: basePath+"core/modules/statistics/statistics.php",
+        data: "nids="+nids
+      });
+    });
+})(jQuery);
\ No newline at end of file
diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module
index af1f833..db152be 100644
--- a/core/modules/statistics/statistics.module
+++ b/core/modules/statistics/statistics.module
@@ -41,7 +41,6 @@ function statistics_help($path, $arg) {
   }
 }
 
-
 /**
  * Implements hook_exit().
  *
@@ -57,22 +56,6 @@ function statistics_exit() {
   // in which case we need to bootstrap to the session phase anyway.
   drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES);
 
-  if (variable_get('statistics_count_content_views', 0)) {
-    // We are counting content views.
-    if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == NULL) {
-      // A node has been viewed, so update the node's counters.
-      db_merge('node_counter')
-        ->key(array('nid' => arg(1)))
-        ->fields(array(
-          'daycount' => 1,
-          'totalcount' => 1,
-          'timestamp' => REQUEST_TIME,
-        ))
-        ->expression('daycount', 'daycount + 1')
-        ->expression('totalcount', 'totalcount + 1')
-        ->execute();
-    }
-  }
   if (variable_get('statistics_enable_access_log', 0)) {
     drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);
 
@@ -115,6 +98,18 @@ function statistics_permission() {
  * Implements hook_node_view().
  */
 function statistics_node_view($node, $view_mode) {
+  $statistics_view_mode = variable_get('statistics_count_only_full', 1);
+  if (!empty($node->nid) && ($view_mode == 'full' || !$statistics_view_mode)) {
+    global $nids_json;
+    if(!empty($nids_json)) {
+      $nids = drupal_json_decode($nids_json);
+    }
+    $nids[] = $node->nid;
+    $nids_json = drupal_json_encode($nids);
+    drupal_add_js(drupal_get_path('module', 'statistics') . '/statistics.js', array('scope' => 'footer'));
+    drupal_add_js(array('statistics' => array('nids' => $nids_json)), 'setting');
+  }
+
   if ($view_mode != 'rss') {
     if (user_access('view post access counter')) {
       $statistics = statistics_get($node->nid);
diff --git a/core/modules/statistics/statistics.php b/core/modules/statistics/statistics.php
new file mode 100644
index 0000000..aff7d14
--- /dev/null
+++ b/core/modules/statistics/statistics.php
@@ -0,0 +1,33 @@
+<?php
+
+// Change the directory to the Drupal root.
+chdir('../../..');
+
+/**
+ * Root directory of Drupal installation.
+ */
+define('DRUPAL_ROOT', getcwd());
+
+include_once DRUPAL_ROOT . '/core/includes/bootstrap.inc';
+drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES);
+if (variable_get('statistics_count_content_views', 0)) {
+  $nids = json_decode($_POST['nids']);
+  if(is_array($nids)) {
+  foreach($nids as $nid) {
+    if(is_numeric($nid)) {
+    db_merge('node_counter')
+      ->key(array('nid' => $nid))
+      ->fields(array(
+        'daycount' => 1, 
+        'totalcount' => 1, 
+        'timestamp' => REQUEST_TIME,
+        ))
+        ->expression('daycount', 'daycount + 1')
+        ->expression('totalcount', 'totalcount + 1')
+        ->execute();
+      }
+  }
+  }
+}
+
+?>
\ No newline at end of file
diff --git a/core/modules/statistics/statistics.test b/core/modules/statistics/statistics.test
index 62cec24..26f185c 100644
--- a/core/modules/statistics/statistics.test
+++ b/core/modules/statistics/statistics.test
@@ -104,6 +104,13 @@ class StatisticsLoggingTestCase extends DrupalWebTestCase {
 
     // Verify logging of an uncached page.
     $this->drupalGet($path);
+    // Manually calling statistics.php, simulating ajax behavior.
+    $nids = array($this->node->nid);
+    $post = http_build_query(array('nids' => json_encode($nids)));
+    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    global $base_url;
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     $this->assertIdentical($this->drupalGetHeader('X-Drupal-Cache'), 'MISS', t('Testing an uncached page.'));
     $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
     $this->assertTrue(is_array($log) && count($log) == 1, t('Page request was logged.'));
@@ -113,6 +120,8 @@ class StatisticsLoggingTestCase extends DrupalWebTestCase {
 
     // Verify logging of a cached page.
     $this->drupalGet($path);
+    // Manually calling statistics.php, simulating ajax behavior.
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     $this->assertIdentical($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', t('Testing a cached page.'));
     $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
     $this->assertTrue(is_array($log) && count($log) == 2, t('Page request was logged.'));
@@ -123,6 +132,8 @@ class StatisticsLoggingTestCase extends DrupalWebTestCase {
     // Test logging from authenticated users
     $this->drupalLogin($this->auth_user);
     $this->drupalGet($path);
+    // Manually calling statistics.php, simulating ajax behavior.
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
     // Check the 6th item since login and account pages are also logged
     $this->assertTrue(is_array($log) && count($log) == 6, t('Page request was logged.'));
@@ -339,6 +350,13 @@ class StatisticsAdminTestCase extends DrupalWebTestCase {
 
     // Hit the node.
     $this->drupalGet('node/' . $this->test_node->nid);
+    // Manually calling statistics.php, simulating ajax behavior.
+    $nids = array($this->test_node->nid);
+    $post = http_build_query(array('nids' => json_encode($nids)));
+    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    global $base_url;
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
 
     $this->drupalGet('admin/reports/pages');
     $this->assertText('node/1', t('Test node found.'));
@@ -346,9 +364,11 @@ class StatisticsAdminTestCase extends DrupalWebTestCase {
     // Hit the node again (the counter is incremented after the hit, so
     // "1 view" will actually be shown when the node is hit the second time).
     $this->drupalGet('node/' . $this->test_node->nid);
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     $this->assertText('1 view', t('Node is viewed once.'));
 
     $this->drupalGet('node/' . $this->test_node->nid);
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     $this->assertText('2 views', t('Node is viewed 2 times.'));
   }
 
@@ -359,6 +379,13 @@ class StatisticsAdminTestCase extends DrupalWebTestCase {
     variable_set('statistics_count_content_views', 1);
 
     $this->drupalGet('node/' . $this->test_node->nid);
+    // Manually calling statistics.php, simulating ajax behavior.
+    $nids = array($this->test_node->nid);
+    $post = http_build_query(array('nids' => json_encode($nids)));
+    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    global $base_url;
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
 
     $result = db_select('node_counter', 'n')
       ->fields('n', array('nid'))
@@ -418,7 +445,15 @@ class StatisticsAdminTestCase extends DrupalWebTestCase {
     variable_set('statistics_flush_accesslog_timer', 1);
 
     $this->drupalGet('node/' . $this->test_node->nid);
+    // Manually calling statistics.php, simulating ajax behavior.
+    $nids = array($this->test_node->nid);
+    $post = http_build_query(array('nids' => json_encode($nids)));
+    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    global $base_url;
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     $this->drupalGet('node/' . $this->test_node->nid);
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     $this->assertText('1 view', t('Node is viewed once.'));
 
     $this->drupalGet('admin/reports/pages');
@@ -467,6 +502,13 @@ class StatisticsTokenReplaceTestCase extends StatisticsTestCase {
 
     // Hit the node.
     $this->drupalGet('node/' . $node->nid);
+    // Manually calling statistics.php, simulating ajax behavior.
+    $nids = array($node->nid);
+    $post = http_build_query(array('nids' => json_encode($nids)));
+    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    global $base_url;
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
+    drupal_http_request($stats_path, array('method' => 'POST','data' => $post,'headers' => $headers,'timeout' => 10000));
     $statistics = statistics_get($node->nid);
 
     // Generate and test tokens.
