diff --git a/cabal-install/Hackage/List.hs b/cabal-install/Hackage/List.hs
index 4060fe61ad8aea3ed62fa71110c9726af092c5b4..1a819d966854e9f3b178b854ee567e89d820fb59 100644
--- a/cabal-install/Hackage/List.hs
+++ b/cabal-install/Hackage/List.hs
@@ -16,13 +16,14 @@ module Hackage.List
 
 import Text.Regex
 import Data.Maybe (isJust)
-import Data.List (nubBy, sortBy)
+import Data.List (nubBy, sortBy, groupBy, intersperse)
 import Data.Char as Char (toLower)
 import Data.Ord  (comparing)
 import Distribution.Package
 import Distribution.PackageDescription
+import Distribution.Version (showVersion)
 import Hackage.Config (getKnownPackages)
-import Hackage.Types (PkgInfo(..), ConfigFlags(..), {- UnresolvedDependency(..)-} )
+import Hackage.Types (PkgInfo(..), pkgInfoId, ConfigFlags(..), {- UnresolvedDependency(..)-} )
 
 -- |Show information about packages
 list :: ConfigFlags -> [String] -> IO ()
@@ -30,7 +31,7 @@ list cfg pats = do
     pkgs <- getKnownPackages cfg
     let pkgs' | null pats = pkgs
               | otherwise = nubBy samePackage (concatMap (findInPkgs pkgs) pats)
-    mapM_ doList (sortBy (comparing nameAndVersion) pkgs')
+    mapM_ doList (groupBy sameName (sortBy (comparing nameAndVersion) pkgs'))
     where
     findInPkgs :: [PkgInfo] -> String -> [PkgInfo]
     findInPkgs pkgs pat = let rx = mkRegexWithOpts pat False False in
@@ -43,12 +44,15 @@ list cfg pats = do
               name = pkgName (package d)
               version = pkgVersion (package d)
     samePackage a b = nameAndVersion a == nameAndVersion b
+    sameName a b = pkgName (pkgInfoId a) == pkgName (pkgInfoId b)
 
-doList :: PkgInfo -> IO ()
-doList info = do   
-    putStr . (if null syn then id else padTo 25) . showPackageId . package $ d
+doList :: [PkgInfo] -> IO ()
+doList ps = do   
+    putStr $ padTo 35 $ pkgName (package d) ++ " [" ++ concat (intersperse "," versions) ++ "]"
     putStrLn syn
     where
+    info = last ps
     d = packageDescription (pkgDesc info)
     syn = synopsis d
+    versions = map (showVersion . pkgVersion . package . packageDescription . pkgDesc) ps
     padTo n s = s ++ (replicate (n - length s) ' ')