diff --git a/README.textile b/README.textile
--- a/README.textile
+++ b/README.textile
@@ -1,56 +1,57 @@
-h1. ANSI Terminal
-
-You can help improve this README with extra snippets and advice by using the "GitHub wiki":http://github.com/batterseapower/ansi-terminal/wikis/readme.
-
-
-h2. Installing
-
-To just install the library:
-
-<pre>
-<code>runghc Setup.lhs configure
-runghc Setup.lhs build
-sudo runghc Setup.lhs install
-</pre>
-</code>
-
-If you want to build the example, to check it's all working:
-
-<pre>
-<code>runghc Setup.lhs configure -fexample
-runghc Setup.lhs build
-dist/build/ansi-terminal-example/ansi-terminal-example
-</pre>
-</code>
-
-
-h2. Description
-
-"ANSI":http://en.wikipedia.org/wiki/ANSI_escape_sequences terminal support for Haskell, which allows:
-
-* Cursor movement
-* Screen and line clearing
-* Color output
-* Showing or hiding the cursor
-
-It is compatible with Windows (via an emulation layer) and those Unixes with ANSI terminals
-
-If you like this, you may be interested in "ansi-wl-pprint":http://github.com/batterseapower/ansi-wl-pprint, which provides a pretty-printer that can construct strings containing ANSI colorisation.
-
-
-h2. Example
-
-A full example is provided with the package, and can be compiled by suppling Cabal with the @-fexample@ flag. It is also available online at "GitHub":http://github.com/batterseapower/ansi-terminal/tree/master/System/Console/ANSI/Example.hs.
-
-Not all of the ANSI escape codes are provided by this module, but most (if not all) of the popular and well supported ones are. For a full list, you can see the API "here":http://github.com/batterseapower/ansi-terminal/tree/master/includes/Common-Include.hs. Each supported escape code or family of codes has a corresponding function that comes in three variants:
-
-* A straight @IO@ variant that doesn't take a @Handle@ and just applies the ANSI escape code to the terminal attached to stdout
-* An @IO@ variant similar to above, but which takes a @Handle@ to which the ANSI escape should be applied
-* A @String@ variant that returns a literal string that should be included to get the effect of the code. This is the only one of the three API variants that only works on Unix-like operating systems: on Windows these strings will always be blank!
-
-
-h2. Linkage
-
-* "Hackage":http://hackage.haskell.org/cgi-bin/hackage-scripts/package/ansi-terminal
-* "Bug Tracker":http://bsp.lighthouseapp.com/projects/16235-hs-ansi-terminal
+h1. ANSI Terminal
+
+You can help improve this README with extra snippets and advice by using the "GitHub wiki":http://github.com/batterseapower/ansi-terminal/wikis/readme.
+
+
+h2. Installing
+
+To just install the library:
+
+<pre>
+<code>runghc Setup.lhs configure
+runghc Setup.lhs build
+sudo runghc Setup.lhs install
+</pre>
+</code>
+
+If you want to build the example, to check it's all working:
+
+<pre>
+<code>runghc Setup.lhs configure -fexample
+runghc Setup.lhs build
+dist/build/ansi-terminal-example/ansi-terminal-example
+</pre>
+</code>
+
+
+h2. Description
+
+"ANSI":http://en.wikipedia.org/wiki/ANSI_escape_sequences terminal support for Haskell, which allows:
+
+* Cursor movement
+* Screen and line clearing
+* Color output
+* Showing or hiding the cursor
+* Changing the console title (though this is not strictly part of ANSI, it is widely supported in Unix)
+
+It is compatible with Windows (via an emulation layer) and those Unixes with ANSI terminals
+
+If you like this, you may be interested in "ansi-wl-pprint":http://github.com/batterseapower/ansi-wl-pprint, which provides a pretty-printer that can construct strings containing ANSI colorisation.
+
+
+h2. Example
+
+A full example is provided with the package, and can be compiled by suppling Cabal with the @-fexample@ flag. It is also available online at "GitHub":http://github.com/batterseapower/ansi-terminal/tree/master/System/Console/ANSI/Example.hs.
+
+Not all of the ANSI escape codes are provided by this module, but most (if not all) of the popular and well supported ones are. For a full list, you can see the API "here":http://github.com/batterseapower/ansi-terminal/tree/master/includes/Common-Include.hs. Each supported escape code or family of codes has a corresponding function that comes in three variants:
+
+* A straight @IO@ variant that doesn't take a @Handle@ and just applies the ANSI escape code to the terminal attached to stdout
+* An @IO@ variant similar to above, but which takes a @Handle@ to which the ANSI escape should be applied
+* A @String@ variant that returns a literal string that should be included to get the effect of the code. This is the only one of the three API variants that only works on Unix-like operating systems: on Windows these strings will always be blank!
+
+
+h2. Linkage
+
+* "Hackage":http://hackage.haskell.org/cgi-bin/hackage-scripts/package/ansi-terminal
+* "Bug Tracker":http://bsp.lighthouseapp.com/projects/16235-hs-ansi-terminal
 * "GitHub":http://github.com/batterseapower/ansi-terminal/
diff --git a/System/Console/ANSI/Example.hs b/System/Console/ANSI/Example.hs
--- a/System/Console/ANSI/Example.hs
+++ b/System/Console/ANSI/Example.hs
@@ -18,6 +18,7 @@
            , scrollExample
            , sgrExample
            , cursorVisibilityExample
+           , titleExample
            ]
 
 main :: IO ()
@@ -250,3 +251,17 @@
     showCursor
     pause
     -- Cursor Demo|
+
+titleExample :: IO ()
+titleExample = do
+    putStr "Title Demo"
+    pause
+    -- ~/foo/ - ansi-terminal-ex - 83x70
+    ------------------------------------
+    -- Title Demo
+    
+    setTitle "Yup, I'm a new title!"
+    pause
+    -- Yup, I'm a new title! - ansi-terminal-ex - 83x70
+    ---------------------------------------------------
+    -- Title Demo
diff --git a/System/Console/ANSI/Unix.hs b/System/Console/ANSI/Unix.hs
--- a/System/Console/ANSI/Unix.hs
+++ b/System/Console/ANSI/Unix.hs
@@ -13,7 +13,7 @@
 #include "Common-Include.hs"
 
 
--- | The reference I used for the escape characters in this module was http://en.wikipedia.org/wiki/ANSI_escape_sequences
+-- | The reference I used for the ANSI escape characters in this module was <http://en.wikipedia.org/wiki/ANSI_escape_sequences>.
 csi :: [Int] -> String -> String
 csi args code = "\ESC[" ++ concat (intersperse ";" (map show args)) ++ code
 
@@ -115,3 +115,11 @@
 
 hHideCursor h = hPutStr h hideCursorCode
 hShowCursor h = hPutStr h showCursorCode
+
+
+-- | Thanks to Brandon S. Allbery and Curt Sampson for pointing me in the right direction on xterm title setting on haskell-cafe.
+-- The "0" signifies that both the title and "icon" text should be set: i.e. the text for the window in the Start bar (or similar)
+-- as well as that in the actual window title.  This is chosen for consistent behaviour between Unixes and Windows.
+setTitleCode title = "\ESC]0;" ++ filter (/= '\007') title ++ "\007"
+
+hSetTitle h title = hPutStr h $ setTitleCode title
diff --git a/System/Console/ANSI/Windows/Emulator.hs b/System/Console/ANSI/Windows/Emulator.hs
--- a/System/Console/ANSI/Windows/Emulator.hs
+++ b/System/Console/ANSI/Windows/Emulator.hs
@@ -220,3 +220,11 @@
 
 hideCursorCode = ""
 showCursorCode = ""
+
+
+-- Windows only supports setting the terminal title on a process-wide basis, so for now we will
+-- assume that that is what the user intended. This will fail if they are sending the command
+-- over e.g. a network link... but that's not really what I'm designing for.
+hSetTitle _ title = withTString title $ setConsoleTitle
+
+setTitleCode _ = ""
diff --git a/System/Console/ANSI/Windows/Foreign.hs b/System/Console/ANSI/Windows/Foreign.hs
--- a/System/Console/ANSI/Windows/Foreign.hs
+++ b/System/Console/ANSI/Windows/Foreign.hs
@@ -21,12 +21,13 @@
         setConsoleTextAttribute,
         setConsoleCursorPosition,
         setConsoleCursorInfo,
+        setConsoleTitle,
         
         fillConsoleOutputAttribute,
         fillConsoleOutputCharacter,
         scrollConsoleScreenBuffer,
         
-        withHandleToHANDLE
+        withTString, withHandleToHANDLE
     ) where
 
 import Foreign.C.Types
@@ -229,6 +230,7 @@
 foreign import stdcall unsafe "windows.h SetConsoleTextAttribute" cSetConsoleTextAttribute :: HANDLE -> WORD -> IO BOOL
 foreign import stdcall unsafe "windows.h SetConsoleCursorPosition" cSetConsoleCursorPosition :: HANDLE -> UNPACKED_COORD -> IO BOOL
 foreign import stdcall unsafe "windows.h SetConsoleCursorInfo" cSetConsoleCursorInfo :: HANDLE -> Ptr CONSOLE_CURSOR_INFO -> IO BOOL
+foreign import stdcall unsafe "windows.h SetConsoleTitleW" cSetConsoleTitle :: LPCTSTR -> IO BOOL
 
 foreign import stdcall unsafe "windows.h FillConsoleOutputAttribute" cFillConsoleOutputAttribute :: HANDLE -> WORD -> DWORD -> UNPACKED_COORD -> Ptr DWORD -> IO BOOL
 foreign import stdcall unsafe "windows.h FillConsoleOutputCharacterW" cFillConsoleOutputCharacter :: HANDLE -> TCHAR -> DWORD -> UNPACKED_COORD -> Ptr DWORD -> IO BOOL
@@ -255,6 +257,9 @@
 setConsoleCursorInfo :: HANDLE -> CONSOLE_CURSOR_INFO -> IO ()
 setConsoleCursorInfo handle console_cursor_info = with console_cursor_info $ \ptr_console_cursor_info -> do
     failIfFalse_ "setConsoleCursorInfo" $ cSetConsoleCursorInfo handle ptr_console_cursor_info
+
+setConsoleTitle :: LPCTSTR -> IO ()
+setConsoleTitle title = failIfFalse_ "setConsoleTitle" $ cSetConsoleTitle title
 
 
 fillConsoleOutputAttribute :: HANDLE -> WORD -> DWORD -> COORD -> IO DWORD
diff --git a/ansi-terminal.cabal b/ansi-terminal.cabal
--- a/ansi-terminal.cabal
+++ b/ansi-terminal.cabal
@@ -1,10 +1,10 @@
 Name:                ansi-terminal
-Version:             0.4.0
+Version:             0.5.0
 Cabal-Version:       >= 1.2
 Category:            User Interfaces
 Synopsis:            Simple ANSI terminal support, with Windows compatibility
-Description:         ANSI terminal support for Haskell: allows cursor movement, screen clearing, color output and showing or hiding the cursor.
-                     Compatible with Windows and those Unixes with ANSI terminals, but only GHC is supported as a compiler.
+Description:         ANSI terminal support for Haskell: allows cursor movement, screen clearing, color output showing or hiding the cursor, and
+                     changing the title. Compatible with Windows and those Unixes with ANSI terminals, but only GHC is supported as a compiler.
 License:             BSD3
 License-File:        LICENSE
 Extra-Source-Files:  README.textile
diff --git a/includes/Common-Include.hs b/includes/Common-Include.hs
--- a/includes/Common-Include.hs
+++ b/includes/Common-Include.hs
@@ -111,3 +111,17 @@
 
 hideCursor = hHideCursor stdout
 showCursor = hShowCursor stdout
+
+
+-- | Set the terminal window title
+hSetTitle :: Handle
+          -> String -- ^ New title
+          -> IO ()
+-- | Set the terminal window title
+setTitle :: String -- ^ New title
+         -> IO ()
+-- | Set the terminal window title
+setTitleCode :: String -- ^ New title
+             -> String
+
+setTitle = hSetTitle stdout
diff --git a/includes/Exports-Include.hs b/includes/Exports-Include.hs
--- a/includes/Exports-Include.hs
+++ b/includes/Exports-Include.hs
@@ -42,4 +42,9 @@
 -- * Cursor visibilty changes
 hideCursor, showCursor,
 hHideCursor, hShowCursor,
-hideCursorCode, showCursorCode
+hideCursorCode, showCursorCode,
+
+-- * Changing the title
+setTitle,
+hSetTitle,
+setTitleCode
