diff --git a/doc/manual-src/en/aria2c.rst b/doc/manual-src/en/aria2c.rst
index 722a664d..31b8e8f7 100644
--- a/doc/manual-src/en/aria2c.rst
+++ b/doc/manual-src/en/aria2c.rst
@@ -3548,38 +3548,40 @@ Console Readout
 While downloading files, aria2 prints the console readout to tell the
 progress of the downloads. The console readout is like this::
 
-    [#1 SIZE:400.0KiB/33.2MiB(1%) CN:1 SPD:115.7KiBs ETA:4m51s]
+    [#1 400.0KiB/33.2MiB(1%) CN:1 DL:115.7KiB ETA:4m51s]
 
 This section describes what these numbers and strings mean.
 
 ``#N``
   N means GID, which is an unique ID for each download.
 
-``SIZE``
-  Completed length and Total length in bytes. If
+``X/Y(Z%)``
+  Completed length, the total file length and its ratio. If
   :option:`--select-file` is used, this is the sum of selected file.
 
-``SEEDING``
+``SEED``
   Share ratio. The client is now seeding. After BitTorrent download
-  finished, ``SIZE`` is replaced with ``SEEDING``.
+  finished, size information is replaced with this.
 
 ``CN``
   The number of connections the client has established.
 
-``SEED``
-  The number of seeders the client has connected to.
+``SD``
+  The number of seeders the client is now connecting to.
 
-``SPD``
-  Download speed.
+``DL``
+  Download speed (bytes per second).
 
-``UP``
-  Upload speed and the number of uploaded bytes.
+``UL``
+  Upload speed (bytes per second) and the number of uploaded bytes.
 
 ``ETA``
   Expected time to finish.
 
-``TOTAL SPD``
-  The sum of download speed for all parallel downloads.
+When more than 1 download are going on, some of the information
+described above will be omitted in order to show several download
+information. And the overall download and upload speed are shown at
+the beginning of the line.
 
 When aria2 is allocating file space or validating checksum, it
 additionally prints the their progress:
diff --git a/src/ConsoleStatCalc.cc b/src/ConsoleStatCalc.cc
index 47dfa4dc..861fece8 100644
--- a/src/ConsoleStatCalc.cc
+++ b/src/ConsoleStatCalc.cc
@@ -96,18 +96,34 @@ protected:
 } // namespace
 
 namespace {
-void printSeedRatio(std::ostream& o, const SharedHandle<RequestGroup>& rg,
-                    const TransferStat& stat)
+void printSizeProgress(std::ostream& o, const SharedHandle<RequestGroup>& rg,
+                       const TransferStat& stat,
+                       const SizeFormatter& sizeFormatter)
 {
-  if(rg->getCompletedLength() > 0) {
-    std::streamsize oldprec = o.precision();
-    o << std::fixed << std::setprecision(1)
-      << ((stat.allTimeUploadLength*10)/rg->getCompletedLength())/10.0
-      << std::setprecision(oldprec)
-      << std::resetiosflags(std::ios::fixed);
-  } else {
-    o << "--";
-  }
+#ifdef ENABLE_BITTORRENT
+  if(rg->getDownloadContext()->hasAttribute(CTX_ATTR_BT) &&
+     !bittorrent::getTorrentAttrs(rg->getDownloadContext())
+     ->metadata.empty() && rg->downloadFinished()) {
+    o << "SEED(";
+    if(rg->getCompletedLength() > 0) {
+      std::streamsize oldprec = o.precision();
+      o << std::fixed << std::setprecision(1)
+        << ((stat.allTimeUploadLength*10)/rg->getCompletedLength())/10.0
+        << std::setprecision(oldprec)
+        << std::resetiosflags(std::ios::fixed);
+    } else {
+      o << "--";
+    }
+    o << ")";
+  } else
+#endif // ENABLE_BITTORRENT
+    {
+      o << sizeFormatter(rg->getCompletedLength()) << "B/"
+        << sizeFormatter(rg->getTotalLength()) << "B";
+      if(rg->getTotalLength() > 0) {
+        o << "(" << 100*rg->getCompletedLength()/rg->getTotalLength() << "%)";
+      }
+    }
 }
 } // namespace
 
@@ -131,29 +147,11 @@ void printProgressCompact(std::ostream& o, const DownloadEngine* e,
       ++i, ++cnt) {
     TransferStat stat = (*i)->calculateStat();
     o << "[#" << (*i)->getGID() << " ";
-#ifdef ENABLE_BITTORRENT
-    if((*i)->getDownloadContext()->hasAttribute(CTX_ATTR_BT) &&
-       !bittorrent::getTorrentAttrs((*i)->getDownloadContext())
-       ->metadata.empty() && (*i)->downloadFinished()) {
-      o << "SEED(";
-      printSeedRatio(o, *i, stat);
-      o << ")";
-    } else
-#endif // ENABLE_BITTORRENT
-      {
-        o << sizeFormatter((*i)->getCompletedLength()) << "B"
-          << "/"
-          << sizeFormatter((*i)->getTotalLength()) << "B";
-        if((*i)->getTotalLength() > 0) {
-          o << "("
-            << 100*(*i)->getCompletedLength()/(*i)->getTotalLength()
-            << "%)";
-        }
-      }
+    printSizeProgress(o, *i, stat, sizeFormatter);
     o << "]";
   }
   if(cnt < groups.size()) {
-    o << "(" << groups.size()-cnt << "more)";
+    o << "(+" << groups.size()-cnt << ")";
   }
 }
 } // namespace
@@ -168,30 +166,8 @@ void printProgress
   if(rg->getTotalLength() > 0 && stat.downloadSpeed > 0) {
     eta = (rg->getTotalLength()-rg->getCompletedLength())/stat.downloadSpeed;
   }
-
   o << "[#" << rg->getGID() << " ";
-
-#ifdef ENABLE_BITTORRENT
-  if(rg->getDownloadContext()->hasAttribute(CTX_ATTR_BT) &&
-     !bittorrent::getTorrentAttrs(rg->getDownloadContext())->metadata.empty() &&
-     rg->downloadFinished()) {
-    o << "SEEDING(ratio:";
-    printSeedRatio(o, rg, stat);
-    o << ")";
-  } else
-#endif // ENABLE_BITTORRENT
-    {
-      o << "SIZE:"
-        << sizeFormatter(rg->getCompletedLength())
-        << "B/"
-        << sizeFormatter(rg->getTotalLength())
-        << "B";
-      if(rg->getTotalLength() > 0) {
-        o << "("
-          << 100*rg->getCompletedLength()/rg->getTotalLength()
-          << "%)";
-      }
-    }
+  printSizeProgress(o, rg, stat, sizeFormatter);
   o << " CN:"
     << rg->getNumConnection();
 #ifdef ENABLE_BITTORRENT
@@ -199,18 +175,18 @@ void printProgress
   if(btObj) {
     std::vector<SharedHandle<Peer> > peers;
     btObj->peerStorage->getActivePeers(peers);
-    o << " SEED:"
+    o << " SD:"
       << countSeeder(peers.begin(), peers.end());
   }
 #endif // ENABLE_BITTORRENT
 
   if(!rg->downloadFinished()) {
-    o << " SPD:"
-      << sizeFormatter(stat.downloadSpeed) << "Bs";
+    o << " DL:"
+      << sizeFormatter(stat.downloadSpeed) << "B";
   }
   if(stat.sessionUploadLength > 0) {
-    o << " UP:"
-      << sizeFormatter(stat.uploadSpeed) << "Bs"
+    o << " UL:"
+      << sizeFormatter(stat.uploadSpeed) << "B"
       << "(" << sizeFormatter(stat.allTimeUploadLength) << "B)";
   }
   if(eta > 0) {
@@ -309,20 +285,16 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
   cp_ = global::wallclock();
   const SizeFormatter& sizeFormatter = *sizeFormatter_.get();
 
-#ifdef __MINGW32__
-  // Windows terminal cannot handle at the end of line (80 columns)
-  // properly.
+  // Some terminals (e.g., Windows terminal) prints next line when the
+  // character reached at the last column.
   unsigned short int cols = 79;
-#else // !__MINGW32__
-  unsigned short int cols = 80;
-#endif // !__MINGW32__
 
   if(isTTY_) {
 #ifndef __MINGW32__
 #ifdef HAVE_TERMIOS_H
     struct winsize size;
     if(ioctl(STDOUT_FILENO, TIOCGWINSZ, &size) == 0) {
-      cols = size.ws_col;
+      cols = std::max(0, (int)size.ws_col-1);
     }
 #endif // HAVE_TERMIOS_H
 #endif // !__MINGW32__
@@ -346,31 +318,21 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
   }
   size_t numGroup = e->getRequestGroupMan()->countRequestGroup();
   if(numGroup == 1) {
-    SharedHandle<RequestGroup> firstRequestGroup =
-      e->getRequestGroupMan()->getRequestGroup(0);
-
-    printProgress(o, firstRequestGroup, e, sizeFormatter);
-
-    if(e->getRequestGroupMan()->countRequestGroup() > 1) {
-      o << "("
-        << e->getRequestGroupMan()->countRequestGroup()-1
-        << "more...)";
-    }
+    printProgress(o, e->getRequestGroupMan()->getRequestGroup(0), e,
+                  sizeFormatter);
   } else if(numGroup > 1) {
     // For more than 2 RequestGroups, use compact readout form
     printProgressCompact(o, e, sizeFormatter);
   }
 
   {
-    SharedHandle<FileAllocationEntry> entry =
+    const SharedHandle<FileAllocationEntry>& entry =
       e->getFileAllocationMan()->getPickedEntry();
     if(entry) {
-      o << " [FileAlloc:"
-        << "#" << entry->getRequestGroup()->getGID() << " "
-        << sizeFormatter(entry->getCurrentLength())
-        << "B/"
-        << sizeFormatter(entry->getTotalLength())
-        << "B(";
+      o << " [FileAlloc:#"
+        << entry->getRequestGroup()->getGID() << " "
+        << sizeFormatter(entry->getCurrentLength()) << "B/"
+        << sizeFormatter(entry->getTotalLength()) << "B(";
       if(entry->getTotalLength() > 0) {
         o << 100LL*entry->getCurrentLength()/entry->getTotalLength();
       } else {
@@ -378,23 +340,19 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
       }
       o << "%)]";
       if(e->getFileAllocationMan()->hasNext()) {
-        o << "("
-          << e->getFileAllocationMan()->countEntryInQueue()
-          << "waiting...)";
+        o << "(+" << e->getFileAllocationMan()->countEntryInQueue() << ")";
       }
     }
   }
 #ifdef ENABLE_MESSAGE_DIGEST
   {
-    SharedHandle<CheckIntegrityEntry> entry =
+    const SharedHandle<CheckIntegrityEntry>& entry =
       e->getCheckIntegrityMan()->getPickedEntry();
     if(entry) {
       o << " [Checksum:#"
         << entry->getRequestGroup()->getGID() << " "
-        << sizeFormatter(entry->getCurrentLength())
-        << "B/"
-        << sizeFormatter(entry->getTotalLength())
-        << "B(";
+        << sizeFormatter(entry->getCurrentLength()) << "B/"
+        << sizeFormatter(entry->getTotalLength()) << "B(";
       if(entry->getTotalLength() > 0) {
         o << 100LL*entry->getCurrentLength()/entry->getTotalLength();
       } else {
@@ -402,9 +360,7 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e)
       }
       o << "%)]";
       if(e->getCheckIntegrityMan()->hasNext()) {
-        o << "("
-          << e->getCheckIntegrityMan()->countEntryInQueue()
-          << "waiting...)";
+        o << "(+" << e->getCheckIntegrityMan()->countEntryInQueue() << ")";
       }
     }
   }
diff --git a/src/SequentialPicker.h b/src/SequentialPicker.h
index 5b4f5027..fac4ac45 100644
--- a/src/SequentialPicker.h
+++ b/src/SequentialPicker.h
@@ -54,7 +54,7 @@ public:
     return pickedEntry_;
   }
 
-  SharedHandle<T> getPickedEntry() const
+  const SharedHandle<T>& getPickedEntry() const
   {
     return pickedEntry_;
   }