diff --git a/include/benchmark/benchmark_api.h b/include/benchmark/benchmark_api.h
index b3ebb27..5f1ee20 100644
--- a/include/benchmark/benchmark_api.h
+++ b/include/benchmark/benchmark_api.h
@@ -312,6 +312,19 @@
     return bytes_processed_;
   }
 
+  // If this routine is called with complexity_n > 0 and complexity report is requested for the 
+  // family benchmark, then current benchmark will be part of the computation and complexity_n will
+  // represent the length of N.
+  BENCHMARK_ALWAYS_INLINE
+  void SetComplexityN(size_t complexity_n) {
+	  complexity_n_ = complexity_n;
+  }
+
+  BENCHMARK_ALWAYS_INLINE
+  size_t complexity_n() {
+    return complexity_n_;
+  }
+
   // If this routine is called with items > 0, then an items/s
   // label is printed on the benchmark report line for the currently
   // executing benchmark. It is typically called at the end of a processing
@@ -383,6 +396,8 @@
   size_t bytes_processed_;
   size_t items_processed_;
 
+  size_t complexity_n_;
+
 public:
   // Index of the executing thread. Values from [0, threads).
   const int thread_index;
@@ -466,7 +481,7 @@
   // to control how many iterations are run, and in the printing of items/second
   // or MB/second values.
   Benchmark* UseManualTime();
-  
+
   // Set the asymptotic computational complexity for the benchmark. If called
   // the asymptotic computational complexity will be shown on the output. 
   Benchmark* Complexity(BigO complexity);
diff --git a/include/benchmark/reporter.h b/include/benchmark/reporter.h
index 2e164db..8656402 100644
--- a/include/benchmark/reporter.h
+++ b/include/benchmark/reporter.h
@@ -50,8 +50,7 @@
       items_per_second(0),
       max_heapbytes_used(0),
       complexity(oNone),
-      arg1(0), 
-      arg2(0),
+      complexity_n(0),
       report_big_o(false),
       report_rms(false) {}
 
@@ -71,8 +70,7 @@
     
     // Keep track of arguments to compute asymptotic complexity
     BigO   complexity;
-    int    arg1;
-    int    arg2;
+    int    complexity_n;
     
     // Inform print function whether the current run is a complexity report
     bool report_big_o;
diff --git a/src/benchmark.cc b/src/benchmark.cc
index 2245389..03f524b 100644
--- a/src/benchmark.cc
+++ b/src/benchmark.cc
@@ -116,9 +116,10 @@
 //static benchmark::MallocCounter *benchmark_mc;
 
 struct ThreadStats {
-    ThreadStats() : bytes_processed(0), items_processed(0) {}
+    ThreadStats() : bytes_processed(0), items_processed(0), complexity_n(0) {}
     int64_t bytes_processed;
     int64_t items_processed;
+    size_t complexity_n;
 };
 
 // Timer management class
@@ -693,6 +694,7 @@
     MutexLock l(GetBenchmarkLock());
     total->bytes_processed += st.bytes_processed();
     total->items_processed += st.items_processed();
+    total->complexity_n += st.complexity_n();
   }
 
   timer_manager->Finalize();
@@ -798,8 +800,7 @@
         report.cpu_accumulated_time = cpu_accumulated_time;
         report.bytes_per_second = bytes_per_second;
         report.items_per_second = items_per_second;
-        report.arg1 = b.arg1;
-        report.arg2 = b.arg2;
+        report.complexity_n = total.complexity_n;
         report.complexity = b.complexity;
         reports.push_back(report);
         
@@ -851,7 +852,8 @@
       bytes_processed_(0), items_processed_(0),
       thread_index(thread_i),
       threads(n_threads),
-      max_iterations(max_iters)
+      max_iterations(max_iters),
+      complexity_n_(0)
 {
     CHECK(max_iterations != 0) << "At least one iteration must be run";
     CHECK_LT(thread_index, threads) << "thread_index must be less than threads";
diff --git a/src/reporter.cc b/src/reporter.cc
index f928d69..544df87 100644
--- a/src/reporter.cc
+++ b/src/reporter.cc
@@ -90,7 +90,7 @@
 
   // Populate the accumulators.
   for (const Run& run : reports) {
-    n.push_back(run.arg1); 
+    n.push_back(run.complexity_n); 
     real_time.push_back(run.real_accumulated_time/run.iterations);
     cpu_time.push_back(run.cpu_accumulated_time/run.iterations);
   }
diff --git a/test/complexity_test.cc b/test/complexity_test.cc
index e169ad9..e454ee4 100644
--- a/test/complexity_test.cc
+++ b/test/complexity_test.cc
@@ -26,6 +26,7 @@
 void BM_Complexity_O1(benchmark::State& state) {
   while (state.KeepRunning()) {
   }
+  state.SetComplexityN(state.range_x());
 }
 BENCHMARK(BM_Complexity_O1) -> Range(1, 1<<18) -> Complexity(benchmark::o1);
 
@@ -35,6 +36,7 @@
   while (state.KeepRunning()) {
       benchmark::DoNotOptimize(std::find(v.begin(), v.end(), item_not_in_vector));
   }
+  state.SetComplexityN(state.range_x());
 }
 BENCHMARK(BM_Complexity_O_N) -> RangeMultiplier(2) -> Range(1<<10, 1<<16) -> Complexity(benchmark::oN);
 BENCHMARK(BM_Complexity_O_N) -> RangeMultiplier(2) -> Range(1<<10, 1<<16) -> Complexity(benchmark::oAuto);
@@ -42,6 +44,7 @@
 static void BM_Complexity_O_N_Squared(benchmark::State& state) {
   std::string s1(state.range_x(), '-');
   std::string s2(state.range_x(), '-');
+  state.SetComplexityN(state.range_x());
   while (state.KeepRunning())
     for(char& c1 : s1) {
         for(char& c2 : s2) {
@@ -56,6 +59,7 @@
   std::string s1(state.range_x(), '-');
   std::string s2(state.range_x(), '-');
   std::string s3(state.range_x(), '-');
+  state.SetComplexityN(state.range_x());
   while (state.KeepRunning())
     for(char& c1 : s1) {
         for(char& c2 : s2) {
@@ -75,6 +79,7 @@
   while (state.KeepRunning()) {
       benchmark::DoNotOptimize(m.find(item_not_in_vector));
   }
+  state.SetComplexityN(state.range_x());
 }
 BENCHMARK(BM_Complexity_O_log_N) 
     -> RangeMultiplier(2) -> Range(1<<10, 1<<16) -> Complexity(benchmark::oLogN);
@@ -84,6 +89,7 @@
   while (state.KeepRunning()) {
       std::sort(v.begin(), v.end());
   }
+  state.SetComplexityN(state.range_x());
 }
 BENCHMARK(BM_Complexity_O_N_log_N) -> RangeMultiplier(2) -> Range(1<<10, 1<<16) -> Complexity(benchmark::oNLogN);
 BENCHMARK(BM_Complexity_O_N_log_N) -> RangeMultiplier(2) -> Range(1<<10, 1<<16) -> Complexity(benchmark::oAuto);
