diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for Hoogle
 
+5.0.12
+    #210, expose targetInfo and targetSearchDisplay
 5.0.11
     #209, add a defaultDatabaseLocation function
 5.0.10
diff --git a/hoogle.cabal b/hoogle.cabal
--- a/hoogle.cabal
+++ b/hoogle.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.18
 build-type:         Simple
 name:               hoogle
-version:            5.0.11
+version:            5.0.12
 license:            BSD3
 license-file:       LICENSE
 category:           Development
diff --git a/src/Action/Search.hs b/src/Action/Search.hs
--- a/src/Action/Search.hs
+++ b/src/Action/Search.hs
@@ -1,6 +1,9 @@
 {-# LANGUAGE TupleSections, RecordWildCards, ScopedTypeVariables #-}
 
-module Action.Search(actionSearch, withSearch, search, action_search_test) where
+module Action.Search(actionSearch, withSearch, search,
+                    targetInfo,
+                    targetResultDisplay,
+                    action_search_test) where
 
 import Control.Monad.Extra
 import Control.DeepSeq
@@ -32,23 +35,14 @@
         if null compare_ then do
             (q, res) <- return $ search store $ parseQuery $ unwords query
             whenLoud $ putStrLn $ "Query: " ++ unescapeHTML (renderQuery q)
-            let disp Target{..} = unwords $
-                    fmap fst (maybeToList targetModule) ++
-                    [targetItem] ++
-                    ["-- " ++ targetURL | link]
-            let (shown, hidden) = splitAt count $ nubOrd $ map disp res
+            let (shown, hidden) = splitAt count $ nubOrd $ map (targetResultDisplay link) res
             if null res then
                 putStrLn "No results found"
              else if info then do
-                let Target{..} = head res
-                putStrLn (unHTML targetItem)
-                let packageModule = map fst $ catMaybes [targetPackage, targetModule]
-                unless (null packageModule) $ do
-                    putStrLn (unwords packageModule)
-                putStrLn (unHTML targetDocs)
+                 putStr $ targetInfo $ head res
              else do
                 let toShow = if numbers && not info then addCounter shown else shown
-                putStr $ unlines $ map unHTML toShow
+                putStr $ unlines toShow
                 when (hidden /= []) $ do
                     whenNormal $ putStrLn $ "-- plus more results not shown, pass --count=" ++ show (count+10) ++ " to see more"
         else do
@@ -57,7 +51,21 @@
                                   _ -> error $ "Expected a type signature, got: " ++ x
             putStr $ unlines $ searchTypesDebug store (parseType $ unwords query) (map parseType compare_)
 
-    where unHTML = unescapeHTML . innerTextHTML
+-- | Returns the details printed out when hoogle --info is called
+targetInfo :: Target -> String
+targetInfo Target{..} = 
+    unlines $ [ unHTML targetItem ] ++
+              [ unwords packageModule | not $ null packageModule] ++
+              [ unHTML targetDocs ]
+            where packageModule = map fst $ catMaybes [targetPackage, targetModule]
+
+-- | Returns the Target formatted as an item to display in the results
+-- | Bool argument decides whether links are shown
+targetResultDisplay :: Bool -> Target -> String
+targetResultDisplay link Target{..} = unHTML $ unwords $
+        fmap fst (maybeToList targetModule) ++
+        [targetItem] ++
+        ["-- " ++ targetURL | link]
 
 addCounter :: [String] -> [String]
 addCounter = zipWith (\i x -> show i ++ ") " ++ x) [1..]
diff --git a/src/General/Util.hs b/src/General/Util.hs
--- a/src/General/Util.hs
+++ b/src/General/Util.hs
@@ -11,7 +11,7 @@
     showUTCTime,
     strict,
     withs,
-    escapeHTML, unescapeHTML, innerTextHTML, tag, tag_,
+    escapeHTML, unescapeHTML, innerTextHTML, unHTML, tag, tag_,
     takeSortOn,
     Average, toAverage, fromAverage,
     inRanges,
@@ -179,6 +179,9 @@
 innerTextHTML ('<':xs) = innerTextHTML $ drop 1 $ dropWhile (/= '>') xs
 innerTextHTML (x:xs) = x : innerTextHTML xs
 innerTextHTML [] = []
+
+unHTML :: String -> String
+unHTML = unescapeHTML . innerTextHTML
 
 isUpper1 (x:xs) = isUpper x
 isUpper1 _ = False
diff --git a/src/Hoogle.hs b/src/Hoogle.hs
--- a/src/Hoogle.hs
+++ b/src/Hoogle.hs
@@ -3,7 +3,9 @@
 module Hoogle(
     Database, withDatabase, searchDatabase, defaultDatabaseLocation,
     Target(..), URL,
-    hoogle
+    hoogle,
+    targetInfo,
+    targetResultDisplay
     ) where
 
 import Control.DeepSeq (NFData)
