diff --git a/app/src/main/java/com/google/reviewit/UnifiedDiffFragment.java b/app/src/main/java/com/google/reviewit/UnifiedDiffFragment.java
index b575409..33a4f80 100644
--- a/app/src/main/java/com/google/reviewit/UnifiedDiffFragment.java
+++ b/app/src/main/java/com/google/reviewit/UnifiedDiffFragment.java
@@ -93,9 +93,10 @@
       setVisible(v(R.id.navigationButtons));
       initPostReviewNavPanel(change);
       FileInfo file = files.get(path);
-      checkState(file != null, "File not found:" + path);
+      checkState(file != null, "File not found: " + path);
       init(path, change, files);
-      displayFile(change, path, file);
+      displayFile(change, path, file,
+          (new ArrayList<>(files.keySet())).indexOf(path) + 1, files.size());
     } else {
       setGone(v(R.id.navigationButtons));
       initPostReviewPanel(change);
@@ -196,7 +197,7 @@
         WidgetUtil.setText(v(R.id.navigationPrevFile),
             new File(prevPath).getName());
         setNavigationOnClickListener(R.id.navigationPrev, change, prevPath,
-            files);
+            i, files);
       } else {
         setInvisible(v(R.id.navigationPrev));
       }
@@ -205,7 +206,7 @@
         WidgetUtil.setText(v(R.id.navigationNextFile),
             new File(nextPath).getName());
         setNavigationOnClickListener(R.id.navigationNext, change, nextPath,
-            files);
+            i + 2, files);
       } else {
         setInvisible(v(R.id.navigationNext));
       }
@@ -214,29 +215,39 @@
 
   private void setNavigationOnClickListener(
       @IdRes int id, final Change change,
-      final String path, final Map<String, FileInfo> files) {
+      final String path, final int fileNumber,
+      final Map<String, FileInfo> files) {
     v(id).setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
         removeDiffView();
         createDiffView();
         init(path, change, files);
-        displayFile(change, path, files.get(path));
+        displayFile(change, path, files.get(path), fileNumber, files.size());
       }
     });
   }
 
-  private void displayFile(Change change, String path, FileInfo file) {
+  private void displayFile(Change change, String path, FileInfo file,
+                           int fileNumber, int totalFileCount) {
     Map<String, FileInfo> files = new HashMap<>();
     files.put(path, file);
-    displayFiles(change, files);
+    displayFiles(change, files, fileNumber, totalFileCount);
+  }
+
+  private void displayFiles(Change change, Map<String, FileInfo> files) {
+    displayFiles(change, files, 1, files.size());
   }
 
   private void displayFiles(final Change change,
-      Map<String, FileInfo> files) {
+                            final Map<String, FileInfo> files,
+                            final int startFileNumber,
+                            final int totalFileCount) {
     final Iterator<Map.Entry<String, FileInfo>> fileEntryIt =
         files.entrySet().iterator();
     diffView.setContent(new Iterator<ScrollWithHeadingsView.Content>() {
+      private int currentFileNumber = startFileNumber;
+
       @Override
       public boolean hasNext() {
         return fileEntryIt.hasNext();
@@ -248,10 +259,14 @@
         File f = new File(fileEntry.getKey());
         return new ScrollWithHeadingsView.Content(
             new ScrollWithHeadingsView.HeadingWithDetails(
-                getContext(), f.getName(), null,
-                FormatUtil.ensureSlash(f.getParent())),
-                createContent(change, fileEntry.getKey(),
-                    fileEntry.getValue()));
+                getContext(), f.getName(),
+                new ScrollWithHeadingsView.RightAlignedHeadingDetails(
+                    getContext().getString(R.string.file_count,
+                        currentFileNumber++, totalFileCount)),
+                new ScrollWithHeadingsView.CenteredHeadingDetails(
+                    FormatUtil.ensureSlash(f.getParent()))),
+            createContent(change, fileEntry.getKey(),
+                fileEntry.getValue()));
       }
 
       public View createContent(
diff --git a/app/src/main/java/com/google/reviewit/widget/ScrollWithHeadingsView.java b/app/src/main/java/com/google/reviewit/widget/ScrollWithHeadingsView.java
index 1972d3a..058a0f1 100644
--- a/app/src/main/java/com/google/reviewit/widget/ScrollWithHeadingsView.java
+++ b/app/src/main/java/com/google/reviewit/widget/ScrollWithHeadingsView.java
@@ -402,15 +402,22 @@
 
   public static class HeadingWithDetails extends TextHeading {
     private final RelativeLayout layout;
-    private final TextView detailsTop;
-    private final TextView detailsBottom;
+    private final TextView detailsTopView;
+    private final TextView detailsBottomView;
     private int height;
 
+    public HeadingWithDetails(
+        Context context, String headingText, String detailsTopText,
+        String detailsBottomText) {
+      this(context, headingText, new CenteredHeadingDetails(detailsTopText),
+          new CenteredHeadingDetails(detailsBottomText));
+    }
+
     // TODO make top/bottom heading smaller if there are no top/bottom
     // details
     public HeadingWithDetails(
-        Context context, String headingText, String detailsTopText,
-        String detailsBottomText) {
+        Context context, String headingText, HeadingDetails detailsTop,
+        HeadingDetails detailsBottom) {
       super(context, headingText);
 
       LayoutUtil.addOneTimeOnGlobalLayoutListener(headingView,
@@ -425,24 +432,38 @@
       layout = new RelativeLayout(context);
       layout.setLayoutParams(matchAndWrapLayout());
 
-      detailsTop = createDetailsView(detailsTopText);
-      layout.addView(detailsTop);
+      detailsTopView = createDetailsView(detailsTop);
+      if (detailsTopView != null) {
+        layout.addView(detailsTopView);
+      }
 
       layout.addView(headingView);
 
-      detailsBottom = createDetailsView(detailsBottomText);
-      layout.addView(gravityBottom(detailsBottom));
+      detailsBottomView = createDetailsView(detailsBottom);
+      if (detailsBottomView != null) {
+        layout.addView(gravityBottom(detailsBottomView));
+      }
     }
 
-    private TextView createDetailsView(String detailsText) {
+    private TextView createDetailsView(HeadingDetails details) {
+      if (details == null) {
+        return null;
+      }
+
       final MaxFontSizeTextView detailsView =
           new MaxFontSizeTextView(context);
-      detailsView.setLayoutParams(matchAndWrapLayout());
-      detailsView.setText(detailsText);
+      RelativeLayout.LayoutParams layoutParams =
+          new RelativeLayout.LayoutParams(
+              ViewGroup.LayoutParams.MATCH_PARENT,
+              ViewGroup.LayoutParams.WRAP_CONTENT);
+      layoutParams.setMargins(widgetUtil.dpToPx(5), 0,
+          widgetUtil.dpToPx(5), 0);
+      detailsView.setLayoutParams(layoutParams);
+      detailsView.setText(details.getText());
       detailsView.setTextColor(widgetUtil.color(R.color.headingFont));
       detailsView.setMinTextSize(widgetUtil.spToPx(5));
       detailsView.setMaxTextSize(widgetUtil.spToPx(15));
-      detailsView.setGravity(Gravity.CENTER_HORIZONTAL);
+      detailsView.setGravity(details.getGravity());
 
       LayoutUtil.addOnHeightListener(detailsView,
           new LayoutUtil.OnHeightListener() {
@@ -483,15 +504,27 @@
 
       float paddingSquish = heightToSquish / 2;
       if (paddingSquish > headingPaddingMax / 3) {
-        detailsTop.setAlpha(0f);
-        detailsBottom.setAlpha(0f);
+        if (detailsTopView != null) {
+          detailsTopView.setAlpha(0f);
+        }
+        if (detailsBottomView != null) {
+          detailsBottomView.setAlpha(0f);
+        }
       } else if (paddingSquish > 0) {
         float alpha = 1 - paddingSquish / (headingPaddingMax / 3);
-        detailsTop.setAlpha(alpha);
-        detailsBottom.setAlpha(alpha);
+        if (detailsTopView != null) {
+          detailsTopView.setAlpha(alpha);
+        }
+        if (detailsBottomView != null) {
+          detailsBottomView.setAlpha(alpha);
+        }
       } else {
-        detailsTop.setAlpha(1f);
-        detailsBottom.setAlpha(1f);
+        if (detailsTopView != null) {
+          detailsTopView.setAlpha(1f);
+        }
+        if (detailsBottomView != null) {
+          detailsBottomView.setAlpha(1f);
+        }
       }
 
       layout.getLayoutParams().height = height - heightToSquish;
@@ -507,4 +540,38 @@
       return ((ColorDrawable) layout.getBackground()).getColor();
     }
   }
+
+  public static abstract class HeadingDetails {
+    private final String text;
+
+    public HeadingDetails(String text) {
+      this.text = text;
+    }
+
+    public String getText() {
+      return text;
+    }
+
+    public abstract int getGravity();
+  }
+
+  public static class CenteredHeadingDetails extends HeadingDetails {
+    public CenteredHeadingDetails(String text) {
+      super(text);
+    }
+
+    public int getGravity() {
+      return Gravity.CENTER_HORIZONTAL;
+    }
+  }
+
+  public static class RightAlignedHeadingDetails extends HeadingDetails {
+    public RightAlignedHeadingDetails(String text) {
+      super(text);
+    }
+
+    public int getGravity() {
+      return Gravity.RIGHT;
+    }
+  }
 }
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b11a66c..7f6c378 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -241,6 +241,7 @@
 
   <!-- UnifiedDiffFragment -->
   <string name="title_activity_unified_diff">UnifiedDiffActivity</string>
+  <string name="file_count">%1$d / %2$d</string>
 
   <!-- UnfifiedDiffView -->
   <string name="skipped_common_lines">... skipped %1$d common lines ...</string>
