diff --git a/src/cache.c b/src/cache.c
index 09b6dbf..e53e2c9 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -1386,6 +1386,12 @@
 	    daemon->cachesize, cache_live_freed, cache_inserted);
   my_syslog(LOG_INFO, _("queries forwarded %u, queries answered locally %u"), 
 	    daemon->queries_forwarded, daemon->local_answer);
+  my_syslog(LOG_INFO, ("dns_timings: %d,%d,%d,%d,%d,%d,%d,%d,%d"),
+            daemon->forward_timings[0], daemon->forward_timings[1], daemon->forward_timings[2],
+            daemon->forward_timings[3], daemon->forward_timings[4], daemon->forward_timings[5],
+            daemon->forward_timings[6], daemon->forward_timings[7], daemon->forward_timings[8]);
+  // Clear the forward timings.
+  memset(daemon->forward_timings, 0, sizeof(daemon->forward_timings));
 #ifdef HAVE_AUTH
   my_syslog(LOG_INFO, _("queries for authoritative zones %u"), daemon->auth_answer);
 #endif
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
index 418f815..3370aec 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
@@ -48,6 +48,7 @@
 
 /* Also needed before config.h. */
 #include <getopt.h>
+#include <stdint.h>
 
 #include "config.h"
 #include "ip6addr.h"
@@ -607,6 +608,7 @@
   unsigned short orig_id, new_id;
   int log_id, fd, forwardall, flags;
   time_t time;
+  int64_t time64;
   unsigned char *hash[HASH_SIZE];
 #ifdef HAVE_DNSSEC 
   int class, work_counter;
@@ -908,6 +910,18 @@
   struct dhcp_relay *current, *next;
 };
 
+
+#define TIMING_BUCKET_ZEROES 0
+#define TIMING_BUCKET_1_MILLIS 1
+#define TIMING_BUCKET_2_MILLIS 2
+#define TIMING_BUCKET_5_MILLIS 3
+#define TIMING_BUCKET_10_MILLIS 4
+#define TIMING_BUCKET_50_MILLIS 5
+#define TIMING_BUCKET_100_MILLIS 6
+#define TIMING_BUCKET_200_MILLIS 7
+#define TIMING_BUCKET_500_MILLIS 8
+#define TIMING_BUCKETS 9
+
 extern struct daemon {
   /* datastuctures representing the command-line and 
      config file arguments. All set (including defaults)
@@ -1044,6 +1058,9 @@
   char *addrbuff;
   char *addrbuff2; /* only allocated when OPT_EXTRALOG */
 
+  /* Keep track of forwarded requests timings. */
+  int forward_timings[TIMING_BUCKETS];
+
 } *daemon;
 
 /* cache.c */
@@ -1160,6 +1177,7 @@
 int sockaddr_isequal(union mysockaddr *s1, union mysockaddr *s2);
 int hostname_isequal(const char *a, const char *b);
 time_t dnsmasq_time(void);
+int64_t dnsmasq_time64(void);
 int netmask_length(struct in_addr mask);
 int is_same_net(struct in_addr a, struct in_addr b, struct in_addr mask);
 #ifdef HAVE_IPV6
diff --git a/src/forward.c b/src/forward.c
index b17bc34..8893870 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -527,7 +527,7 @@
 }
 
 static size_t process_reply(struct dns_header *header, time_t now, struct server *server, size_t n, int check_rebind, 
-			    int no_cache, int cache_secure, int ad_reqd, int do_bit, int added_pheader, int check_subnet, union mysockaddr *query_source)
+			    int no_cache, int cache_secure, int ad_reqd, int do_bit, int added_pheader, int check_subnet, union mysockaddr *query_source, int64_t time64)
 {
   unsigned char *pheader, *sizep;
   char **sets = 0;
@@ -537,6 +537,20 @@
   (void)ad_reqd;
   (void) do_bit;
 
+  if (time64 >= 0)
+    {
+      int64_t milliseconds = time64/1000000;
+      int bucket = TIMING_BUCKET_ZEROES;
+      if (milliseconds < 2)        bucket = TIMING_BUCKET_1_MILLIS;
+      else if (milliseconds <   5) bucket = TIMING_BUCKET_2_MILLIS;
+      else if (milliseconds <  10) bucket = TIMING_BUCKET_5_MILLIS;
+      else if (milliseconds <  50) bucket = TIMING_BUCKET_10_MILLIS;
+      else if (milliseconds < 100) bucket = TIMING_BUCKET_50_MILLIS;
+      else if (milliseconds < 500) bucket = TIMING_BUCKET_100_MILLIS;
+      else  bucket = TIMING_BUCKET_500_MILLIS;
+      daemon->forward_timings[bucket]++;
+    }
+
 #ifdef HAVE_IPSET
   if (daemon->ipsets && extract_request(header, n, daemon->namebuff, NULL))
     {
@@ -693,6 +707,7 @@
 #ifndef HAVE_DNSSEC
   unsigned int crc;
 #endif
+  int64_t now64 = dnsmasq_time64();
 
   /* packet buffer overwritten */
   daemon->srv_save = NULL;
@@ -1019,7 +1034,8 @@
       
       if ((nn = process_reply(header, now, server, (size_t)n, check_rebind, no_cache_dnssec, cache_secure,
 			      forward->flags & FREC_AD_QUESTION, forward->flags & FREC_DO_QUESTION, 
-			      forward->flags & FREC_ADDED_PHEADER, forward->flags & FREC_HAS_SUBNET, &forward->source)))
+			      forward->flags & FREC_ADDED_PHEADER, forward->flags & FREC_HAS_SUBNET, &forward->source,
+			      now64 - forward->time64)))
 	{
 	  header->id = htons(forward->orig_id);
 	  header->hb4 |= HB4_RA; /* recursion if available */
@@ -1985,7 +2001,7 @@
 
 		      m = process_reply(header, now, last_server, (unsigned int)m, 
 					option_bool(OPT_NO_REBIND) && !norebind, no_cache_dnssec,
-					cache_secure, ad_question, do_bit, added_pheader, check_subnet, &peer_addr); 
+                                cache_secure, ad_question, do_bit, added_pheader, check_subnet, &peer_addr, -1);
 		      
 		      break;
 		    }
@@ -2014,6 +2030,7 @@
     {
       f->next = daemon->frec_list;
       f->time = now;
+      f->time64 = dnsmasq_time64();
       f->sentto = NULL;
       f->rfd4 = NULL;
       f->flags = 0;
@@ -2139,6 +2156,7 @@
   if (target)
     {
       target->time = now;
+      target->time64 = dnsmasq_time64();
       return target;
     }
   
@@ -2157,6 +2175,7 @@
 	{
 	  free_frec(oldest);
 	  oldest->time = now;
+          oldest->time64 = dnsmasq_time64();
 	}
       return oldest;
     }
diff --git a/src/util.c b/src/util.c
index d532444..81cfeeb 100644
--- a/src/util.c
+++ b/src/util.c
@@ -28,6 +28,8 @@
 #include <idna.h>
 #endif
 
+#include <stdint.h>
+
 /* SURF random number generator */
 
 static u32 seed[32];
@@ -332,6 +334,13 @@
 #endif
 }
 
+int64_t dnsmasq_time64(void)
+{
+  struct timespec ts;
+  clock_gettime(CLOCK_MONOTONIC, &ts);
+  return (int64_t)ts.tv_sec * INT64_C(1000000000) + ts.tv_nsec;
+}
+
 int netmask_length(struct in_addr mask)
 {
   int zero_count = 0;
