diff --git a/client/status.go b/client/status.go
index 25e9212..5182772 100644
--- a/client/status.go
+++ b/client/status.go
@@ -176,14 +176,16 @@ func (t *tui) draw() {
 				t.newline()
 			}
 
+			maxNameLength := calculateMaxFilesystemAndVersionNameLength(&rep)
+
 			for _, fs := range rep.Completed {
-				printFilesystem(fs, t, false)
+				printFilesystem(fs, t, false, maxNameLength)
 			}
 			if rep.Active != nil {
-				printFilesystem(rep.Active, t, true)
+				printFilesystem(rep.Active, t, true, maxNameLength)
 			}
 			for _, fs := range rep.Pending {
-				printFilesystem(fs, t, false)
+				printFilesystem(fs, t, false, maxNameLength)
 			}
 
 		}
@@ -191,6 +193,28 @@ func (t *tui) draw() {
 	termbox.Flush()
 }
 
+const snapshotIndent = 1
+func calculateMaxFilesystemAndVersionNameLength(report *replication.Report) int {
+	all := append(report.Completed, report.Active)
+	all = append(all, report.Pending...)
+	maxLen := 0
+	for _, e := range all {
+		if e == nil { //active can be nil
+			continue
+		}
+		if len(e.Filesystem) > maxLen {
+			maxLen = len(e.Filesystem)
+		}
+		all2 := append(e.Pending, e.Completed...)
+		for _, e2 := range all2 {
+			if len(e2.To) + snapshotIndent > maxLen {
+				maxLen = len(e2.To) + snapshotIndent
+			}
+		}
+	}
+	return maxLen
+}
+
 func times(str string, n int) (out string) {
 	for i := 0; i < n; i++ {
 		out += str
@@ -205,8 +229,8 @@ func rightPad(str string, length int, pad string) string {
 	return str + times(pad, length-len(str))
 }
 
-func (t *tui) drawBar(name string, status string, bytes int64, totalBytes int64) {
-	t.write(rightPad(name, 20, " "))
+func (t *tui) drawBar(name string, maxNameLength int, status string, bytes int64, totalBytes int64) {
+	t.write(rightPad(name, maxNameLength + 1, " "))
 	t.write(" ")
 	t.write(rightPad(status, 14, " "))
 	t.write(" ")
@@ -244,7 +268,7 @@ func StringStepState(s fsrep.StepState) string {
 	}
 }
 
-func printFilesystem(rep *fsrep.Report, t *tui, versions bool) {
+func printFilesystem(rep *fsrep.Report, t *tui, versions bool, maxNameLength int) {
 	bytes := int64(0)
 	totalBytes := int64(0)
 	for _, s := range rep.Pending {
@@ -256,7 +280,7 @@ func printFilesystem(rep *fsrep.Report, t *tui, versions bool) {
 		totalBytes += s.ExpectedBytes
 	}
 
-	t.drawBar(rep.Filesystem, rep.Status, bytes, totalBytes)
+	t.drawBar(rep.Filesystem, maxNameLength, rep.Status, bytes, totalBytes)
 	if rep.Problem != "" {
 		t.addIndent(1)
 		t.printf("Problem: %s", rep.Problem)
@@ -265,7 +289,7 @@ func printFilesystem(rep *fsrep.Report, t *tui, versions bool) {
 	}
 	if versions && len(rep.Pending) > 0 {
 		v := rep.Pending[0]
-		t.drawBar(" " + v.To, StringStepState(v.Status), v.Bytes, v.ExpectedBytes)
+		t.drawBar(times(" ", snapshotIndent) + v.To, maxNameLength, StringStepState(v.Status), v.Bytes, v.ExpectedBytes)
 	}
 }