diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index 118f2e0..a69fa49 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -273,6 +273,7 @@
   ceres_test(cost_function_to_functor)
   ceres_test(covariance)
   ceres_test(cubic_interpolation)
+  ceres_test(detect_structure)
   ceres_test(dense_sparse_matrix)
   ceres_test(dynamic_autodiff_cost_function)
   ceres_test(dynamic_compressed_row_sparse_matrix)
diff --git a/internal/ceres/detect_structure.cc b/internal/ceres/detect_structure.cc
index a87f6ba..959a0ee 100644
--- a/internal/ceres/detect_structure.cc
+++ b/internal/ceres/detect_structure.cc
@@ -55,6 +55,7 @@
       break;
     }
 
+    // Detect fixed or dynamic row block size.
     if (*row_block_size == 0) {
       *row_block_size = row.block.size;
     } else if (*row_block_size != Eigen::Dynamic &&
@@ -65,6 +66,7 @@
       *row_block_size = Eigen::Dynamic;
     }
 
+    // Detect fixed or dynamic e-block size.
     const int e_block_id = row.cells.front().block_id;
     if (*e_block_size == 0) {
       *e_block_size = bs.cols[e_block_id].size;
@@ -76,19 +78,24 @@
       *e_block_size = Eigen::Dynamic;
     }
 
-    if (*f_block_size == 0) {
-      if (row.cells.size() > 1) {
+    // Detect fixed or dynamic f-block size. We are only interested in
+    // rows with e-blocks, and the e-block is always the first block,
+    // so only rows of size greater than 1 are of interest.
+    if (row.cells.size() > 1) {
+      if (*f_block_size == 0) {
         const int f_block_id = row.cells[1].block_id;
         *f_block_size = bs.cols[f_block_id].size;
       }
-    } else if (*f_block_size != Eigen::Dynamic) {
-      for (int c = 1; c < row.cells.size(); ++c) {
-        if (*f_block_size != bs.cols[row.cells[c].block_id].size) {
+
+      for (int c = 1;
+           (c < row.cells.size()) && (*f_block_size != Eigen::Dynamic);
+           ++c) {
+        const int f_block_id = row.cells[c].block_id;
+        if (*f_block_size != bs.cols[f_block_id].size) {
           VLOG(2) << "Dynamic f block size because the block size "
                   << "changed from " << *f_block_size << " to "
-                  << bs.cols[row.cells[c].block_id].size;
+                  << bs.cols[f_block_id].size;
           *f_block_size = Eigen::Dynamic;
-          break;
         }
       }
     }
diff --git a/internal/ceres/detect_structure_test.cc b/internal/ceres/detect_structure_test.cc
new file mode 100644
index 0000000..533f49f
--- /dev/null
+++ b/internal/ceres/detect_structure_test.cc
@@ -0,0 +1,294 @@
+// Ceres Solver - A fast non-linear least squares minimizer
+// Copyright 2015 Google Inc. All rights reserved.
+// http://ceres-solver.org/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright notice,
+//   this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright notice,
+//   this list of conditions and the following disclaimer in the documentation
+//   and/or other materials provided with the distribution.
+// * Neither the name of Google Inc. nor the names of its contributors may be
+//   used to endorse or promote products derived from this software without
+//   specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+//
+// Author: sameeragarwal@google.com (Sameer Agarwal)
+
+#include "Eigen/Core"
+#include "glog/logging.h"
+#include "gtest/gtest.h"
+#include "ceres/block_structure.h"
+#include "ceres/detect_structure.h"
+
+namespace ceres {
+namespace internal {
+
+TEST(DetectStructure, EverythingStatic) {
+  const int expected_row_block_size = 2;
+  const int expected_e_block_size = 3;
+  const int expected_f_block_size = 4;
+
+  CompressedRowBlockStructure bs;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 3;
+  bs.cols.back().position = 0;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 4;
+  bs.cols.back().position = 3;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 4;
+  bs.cols.back().position = 7;
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 2;
+    row.block.position = 0;
+    row.cells.push_back(Cell(0, 0));
+    row.cells.push_back(Cell(1, 0));
+  }
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 2;
+    row.block.position = 2;
+    row.cells.push_back(Cell(0, 0));
+    row.cells.push_back(Cell(2, 0));
+  }
+
+  int row_block_size = 0;
+  int e_block_size = 0;
+  int f_block_size = 0;
+  const int num_eliminate_blocks = 1;
+  DetectStructure(bs,
+                  num_eliminate_blocks,
+                  &row_block_size,
+                  &e_block_size,
+                  &f_block_size);
+
+  EXPECT_EQ(row_block_size, expected_row_block_size);
+  EXPECT_EQ(e_block_size, expected_e_block_size);
+  EXPECT_EQ(f_block_size, expected_f_block_size);
+}
+
+TEST(DetectStructure, DynamicRow) {
+  const int expected_row_block_size = Eigen::Dynamic;
+  const int expected_e_block_size = 3;
+  const int expected_f_block_size = 4;
+
+  CompressedRowBlockStructure bs;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 3;
+  bs.cols.back().position = 0;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 4;
+  bs.cols.back().position = 3;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 4;
+  bs.cols.back().position = 7;
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 2;
+    row.block.position = 0;
+    row.cells.push_back(Cell(0, 0));
+    row.cells.push_back(Cell(1, 0));
+  }
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 1;
+    row.block.position = 2;
+    row.cells.push_back(Cell(0, 0));
+    row.cells.push_back(Cell(2, 0));
+  }
+
+  int row_block_size = 0;
+  int e_block_size = 0;
+  int f_block_size = 0;
+  const int num_eliminate_blocks = 1;
+  DetectStructure(bs,
+                  num_eliminate_blocks,
+                  &row_block_size,
+                  &e_block_size,
+                  &f_block_size);
+
+  EXPECT_EQ(row_block_size, expected_row_block_size);
+  EXPECT_EQ(e_block_size, expected_e_block_size);
+  EXPECT_EQ(f_block_size, expected_f_block_size);
+}
+
+TEST(DetectStructure, DynamicFBlockDifferentRows) {
+  const int expected_row_block_size = 2;
+  const int expected_e_block_size = 3;
+  const int expected_f_block_size = Eigen::Dynamic;
+
+
+  CompressedRowBlockStructure bs;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 3;
+  bs.cols.back().position = 0;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 4;
+  bs.cols.back().position = 3;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 3;
+  bs.cols.back().position = 7;
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 2;
+    row.block.position = 0;
+    row.cells.push_back(Cell(0, 0));
+    row.cells.push_back(Cell(1, 0));
+  }
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 2;
+    row.block.position = 2;
+    row.cells.push_back(Cell(0, 0));
+    row.cells.push_back(Cell(2, 0));
+  }
+
+  int row_block_size = 0;
+  int e_block_size = 0;
+  int f_block_size = 0;
+  const int num_eliminate_blocks = 1;
+  DetectStructure(bs,
+                  num_eliminate_blocks,
+                  &row_block_size,
+                  &e_block_size,
+                  &f_block_size);
+
+  EXPECT_EQ(row_block_size, expected_row_block_size);
+  EXPECT_EQ(e_block_size, expected_e_block_size);
+  EXPECT_EQ(f_block_size, expected_f_block_size);
+}
+
+TEST(DetectStructure, DynamicEBlock) {
+  const int expected_row_block_size = 2;
+  const int expected_e_block_size = Eigen::Dynamic;
+  const int expected_f_block_size = 3;
+
+  CompressedRowBlockStructure bs;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 3;
+  bs.cols.back().position = 0;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 4;
+  bs.cols.back().position = 3;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 3;
+  bs.cols.back().position = 7;
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 2;
+    row.block.position = 0;
+    row.cells.push_back(Cell(0, 0));
+    row.cells.push_back(Cell(2, 0));
+  }
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 2;
+    row.block.position = 2;
+    row.cells.push_back(Cell(1, 0));
+    row.cells.push_back(Cell(2, 0));
+  }
+
+  int row_block_size = 0;
+  int e_block_size = 0;
+  int f_block_size = 0;
+  const int num_eliminate_blocks = 2;
+  DetectStructure(bs,
+                  num_eliminate_blocks,
+                  &row_block_size,
+                  &e_block_size,
+                  &f_block_size);
+
+  EXPECT_EQ(row_block_size, expected_row_block_size);
+  EXPECT_EQ(e_block_size, expected_e_block_size);
+  EXPECT_EQ(f_block_size, expected_f_block_size);
+}
+
+TEST(DetectStructure, DynamicFBlockSameRow) {
+  const int expected_row_block_size = 2;
+  const int expected_e_block_size = 3;
+  const int expected_f_block_size = Eigen::Dynamic;
+
+  CompressedRowBlockStructure bs;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 3;
+  bs.cols.back().position = 0;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 4;
+  bs.cols.back().position = 3;
+
+  bs.cols.push_back(Block());
+  bs.cols.back().size = 3;
+  bs.cols.back().position = 7;
+
+  {
+    bs.rows.push_back(CompressedRow());
+    CompressedRow& row = bs.rows.back();
+    row.block.size = 2;
+    row.block.position = 0;
+    row.cells.push_back(Cell(0, 0));
+    row.cells.push_back(Cell(2, 0));
+    row.cells.push_back(Cell(3, 0));
+  }
+
+  int row_block_size = 0;
+  int e_block_size = 0;
+  int f_block_size = 0;
+  const int num_eliminate_blocks = 1;
+  DetectStructure(bs,
+                  num_eliminate_blocks,
+                  &row_block_size,
+                  &e_block_size,
+                  &f_block_size);
+
+  EXPECT_EQ(row_block_size, expected_row_block_size);
+  EXPECT_EQ(e_block_size, expected_e_block_size);
+  EXPECT_EQ(f_block_size, expected_f_block_size);
+}
+
+}  // namespace internal
+}  // namespace ceres
