diff --git a/cli/btinfo.c b/cli/btinfo.c
index cfd1991..ec9873a 100644
--- a/cli/btinfo.c
+++ b/cli/btinfo.c
@@ -31,21 +31,29 @@ print_metainfo(const char *mi)
     unsigned nfiles = mi_nfiles(mi);
     struct mi_file *files = mi_files(mi);
     struct mi_announce *ann = mi_announce(mi);
-    for (int i = 0; i < ann->ntiers; i++)
+    printf("Name: %s\n", name);
+    printf("Info hash: %s\n", bin2hex(mi_info_hash(mi, hash), hex, 20));
+    printf("Tracker URLs: [ ");
+    for (int i = 0; i < ann->ntiers; i++) {
+        printf("[ ");
         for (int j = 0; j < ann->tiers[i].nurls; j++)
-            printf("%d: %s\n", i, ann->tiers[i].urls[j]);
+            printf("%s ", ann->tiers[i].urls[j]);
+        printf("] ");
+    }
+    printf("]\n");
+    printf("Number of pieces: %lu\n", (unsigned long)mi_npieces(mi));
+    printf("Piece size: %lld\n", (long long)mi_piece_length(mi));
+    printf("Total size: %lld\n", (long long)mi_total_length(mi));
+    printf("Number of files: %u\n", nfiles);
+    printf("Files:\n");
+    for (int i = 0; i < nfiles; i++) {
+        printf("%s (%lld)\n",
+            files[i].path, (long long)files[i].length);
+    }
     printf("\n");
-    mi_free_announce(ann);
-    mi_info_hash(mi, hash);
-    bin2hex(hash, hex, 20);
-    printf("name: %s\n", name);
-    printf("info hash: %s\n", hex);
-    printf("length: %jd\n", (intmax_t)mi_total_length(mi));
-    printf("piece length: %jd\n", (intmax_t)mi_piece_length(mi));
-    printf("files: %u\n", nfiles);
-    for (unsigned i = 0; i < nfiles; i++)
-        printf("%s(%jd)\n", files[i].path, (intmax_t)files[i].length);
     free(name);
+    mi_free_files(nfiles, files);
+    mi_free_announce(ann);
 }
 
 int