diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,16 +2,27 @@
 
 ## Changelog
 
-### Version
+### 2.3.0.0
 
-2.2.0.0
+#### Added
 
-#### Downstreams
+- Support for GTK 3.10
+- Logo to about dialog
+- `findOrCreateTemporaryDirectory` to Gifcurry library API
 
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-2.2.0.0)
-- [Docker](https://hub.docker.com/r/lettier/gifcurry/)
-- [Arch Linux AUR](https://aur.archlinux.org/packages/gifcurry)
+#### Changed
 
+- Switched icon from ICO to PNG
+- Use XdgCache location for cross compatible way of storing temporary files
+
+#### Removed
+
+- ICO files
+
+-------------------------------------------------------------------------------
+
+### 2.2.0.0
+
 #### Added
 
 - Loading a video now populates the start and duration fields
@@ -46,13 +57,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-2.1.1.0
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-2.1.1.0)
+### 2.1.1.0
 
 #### Added
 
@@ -71,13 +76,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-2.1.0.0
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-2.1.0.0)
+### 2.1.0.0
 
 #### Added
 
@@ -102,13 +101,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-2.0.0.2
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-2.0.0.2)
+### 2.0.0.2
 
 #### Added
 
@@ -124,13 +117,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-2.0.0.1
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-2.0.0.1)
+### 2.0.0.1
 
 #### Added
 
@@ -147,13 +134,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-2.0.0.0
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-2.0.0.0)
+### 2.0.0.0
 
 #### Added
 
@@ -171,13 +152,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-0.1.1.0
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-0.1.1.0)
+### 0.1.1.0
 
 #### Added
 
@@ -195,13 +170,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-0.1.0.6
-
-#### Downstreams
-
--
+### 0.1.0.6
 
 #### Added
 
@@ -217,13 +186,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-0.1.0.5
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-0.1.0.5)
+### 0.1.0.5
 
 #### Added
 
@@ -239,13 +202,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-0.1.0.4
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-0.1.0.4)
+### 0.1.0.4
 
 #### Added
 
@@ -261,13 +218,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-0.1.0.3
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-0.1.0.3)
+### 0.1.0.3
 
 #### Added
 
@@ -283,13 +234,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-0.1.0.2
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-0.1.0.2)
+### 0.1.0.2
 
 #### Added
 
@@ -305,13 +250,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-0.1.0.1
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-0.1.0.1)
+### 0.1.0.1
 
 #### Added
 
@@ -327,13 +266,7 @@
 
 -------------------------------------------------------------------------------
 
-### Version
-
-0.1.0.0
-
-#### Downstreams
-
-- [Hackage](https://hackage.haskell.org/package/Gifcurry-0.1.0.0)
+### 0.1.0.0
 
 #### Added
 
@@ -346,14 +279,3 @@
 #### Removed
 
 -
-
--------------------------------------------------------------------------------
-
-## License
-
-See [LICENSE](LICENSE).
-
-## Copyright
-
-(C) 2017 David Lettier  
-[lettier.com](http://www.lettier.com/)
diff --git a/Gifcurry.cabal b/Gifcurry.cabal
--- a/Gifcurry.cabal
+++ b/Gifcurry.cabal
@@ -1,5 +1,5 @@
 name:                 Gifcurry
-version:              2.2.0.0
+version:              2.3.0.0
 synopsis:             GIF creation utility.
 description:          Create animated GIFs, optionally overlaid with text, from video files.
 homepage:             https://github.com/lettier/gifcurry
@@ -18,10 +18,12 @@
                       , ./lib/GtkMainSyncAsync.hs
                       , ./lib/LICENSE
                       , ./src/dev/Paths_Gifcurry.hs
-                      , ./src/data/icon.ico
+                      , ./src/data/gifcurry-logo.svg
+                      , ./src/data/gifcurry-icon.png
                       , ./makefile
 data-files:             data/gui.glade
-                      , data/icon.ico
+                      , data/gifcurry-logo.svg
+                      , data/gifcurry-icon.png
 data-dir:             ./src/
 cabal-version:        >=1.10
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -16,16 +16,24 @@
 ## CLI Usage
 
 ```bash
-gifcurry_cli \
-  -i inputFile \
-  -o outputFile \
-  -s startTime \
-  -d durationTime \
-  -w widthSize \
-  -q qualityPercent \
-  -f fontChoice \
-  -t topText \
-  -b bottomText
+gifcurry_cli [OPTIONS]
+
+Common flags:
+  -i --inputfile=FILE      The input video file path and name.
+  -o --outputfile=ITEM     The output GIF file path and name.
+  -s --starttime=NUM       The start time (in seconds) for the first frame.
+  -d --durationtime=NUM    How long the GIF lasts (in seconds) from the start
+                           time.
+  -w --widthsize=INT       How wide the GIF needs to be. Height will scale to
+                           match.
+  -q --qualitypercent=NUM  Ranges from 0.0 to 100.0.
+  -f --fontchoice=ITEM     Choose your desired font for the top and bottom
+                           text.
+  -t --toptext=ITEM        The text you wish to add to the top of the GIF.
+  -b --bottomtext=ITEM     The text you wish to add to the bottom of the GIF.
+  -? --help                Display help message
+  -V --version             Print version information
+     --numeric-version     Print just the version number
 ```
 
 ## CLI Example
@@ -51,7 +59,7 @@
                                   __/ |
                                  |___/ 
 
-Gifcurry 2.2.0.0
+Gifcurry 2.3.0.0
 (C) 2016 David Lettier
 lettier.com
 
@@ -75,35 +83,59 @@
 
 ## Dependencies
 
-* [Haskell](https://www.haskell.org/platform/)
+### Run
+
+* [GTK+](http://www.gtk.org/download/index.php)
 * [FFmpeg](https://www.ffmpeg.org/download.html)
 * [ImageMagick](http://www.imagemagick.org/script/download.php)
-* [GTK+](http://www.gtk.org/download/index.php)
 
+### Build
+
+* [Haskell](https://www.haskell.org/platform/)
+
 ## Install & Run
 
 ### Linux
 
+#### [AppImage (GUI Only)](https://appimage.github.io/gifcurry/)
+
+```bash
+# Install FFmpeg (https://www.ffmpeg.org/download.html)
+# Install ImageMagick (https://www.imagemagick.org/script/download.php)
+# Install GNU Wget (https://www.gnu.org/software/wget/) or download the AppImage with your browser
+# Find the latest release at https://github.com/lettier/gifcurry/releases
+# * equals the version number
+# Download gifcurry-*-x86_64.AppImage
+# Right click on the AppImage and allow the file to be executed as a program
+wget https://github.com/lettier/gifcurry/releases/download/*/gifcurry-*-x86_64.AppImage
+chmod a+x gifcurry-*-x86_64.AppImage
+./gifcurry-*-x86_64.AppImage
+# If you would like to install the AppImage, you can run the following
+cd
+wget "https://raw.githubusercontent.com/lettier/gifcurry/master/packaging/linux/gifcurry-gui-install.sh" -O "gifcurry-gui-install.sh"
+chmod +x "gifcurry-gui-install.sh"
+./gifcurry-gui-install.sh
+```
+
 #### Ubuntu/Mint
 
 ```bash
 # Install FFmpeg (https://www.ffmpeg.org/download.html)
 # Install ImageMagick (https://www.imagemagick.org/script/download.php)
-sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
+sudo add-apt-repository ppa:jonathonf/ffmpeg-3
 sudo apt-get update
 sudo apt-get install ffmpeg imagemagick
-# Install Haskell (https://www.haskell.org/platform/)
 # Install GNU Wget (https://www.gnu.org/software/wget/)
 # Find the latest release at https://github.com/lettier/gifcurry/releases
 # * equals the version number
 wget https://github.com/lettier/gifcurry/releases/download/*/gifcurry-linux-*.tar.gz
 tar -xvfz gifcurry-linux*.tar.gz
 cd gifcurry-linux-*/bin
-./gifcurry_gui
 ./gifcurry_cli -?
+./gifcurry_gui
 ```
 
-#### Arch/Manjaro
+#### Arch/Manjaro/Antergos
 
 ```bash
 cd
@@ -117,8 +149,8 @@
 makepkg -sic
 cd
 rm -rf build_gifcurry
-gifcurry_gui
 gifcurry_cli -?
+gifcurry_gui
 ```
 
 ### Mac
@@ -126,8 +158,9 @@
 #### Binaries
 
 ```bash
-# If you do not have Homebrew
+# Install Homebrew
 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+brew update
 brew install ffmpeg
 brew install imagemagick
 brew install ghostscript
@@ -138,43 +171,32 @@
 wget https://github.com/lettier/gifcurry/releases/download/*/gifcurry-macosx-*.tar.gz
 tar xvfz gifcurry-macosx-*.tar.gz
 cd gifcurry-macosx-*/bin
-./gifcurry_gui
 ./gifcurry_cli -?
+./gifcurry_gui
 ```
 
 #### Compile
 
 ```bash
-# If you do not have Homebrew
+# Install Homebrew
 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 brew update
 brew install xcode
 brew install git
-brew install ghc
-sudo chown -R $(whoami):admin /usr/local/bin
-brew link ghc
-brew install cabal-install
-brew install pkg-config
-brew install glib
-brew install gtk+3
-brew install cairo
-brew install pango
-brew install ffmpeg
-brew install imagemagick
-brew install ghostscript
-brew install gnome-icon-theme
-mkdir gifcurry
-cd gifcurry
-cabal sandbox init
-cabal update
-cabal install alex happy -j
-cabal install gifcurry -j
-cd .cabal-sandbox/bin/
-./gifcurry_gui
-./gifcurry_cli -?
+git clone git@github.com:lettier/gifcurry.git
+cd gifcurry/
+brew cask install haskell-platform
+brew install pkg-config gobject-introspection cairo gdk-pixbuf gsettings-desktop-schemas \
+  gtk+3 gtk-mac-integration ffmpeg imagemagick ghostscript gnome-icon-theme
+stack setup
+stack install hsc2hs
+stack install
+export PATH=$PATH:"$HOME/.local/bin/"
+gifcurry_cli -?
+gifcurry_gui
 ```
 
-### Hackage
+### [Hackage](https://hackage.haskell.org/package/Gifcurry)
 
 #### Stack
 
@@ -190,8 +212,8 @@
 cd Gifcurry-*
 stack setup
 stack install
-stack exec -- gifcurry_gui
 stack exec -- gifcurry_cli -?
+stack exec -- gifcurry_gui
 ```
 
 #### Cabal
@@ -204,11 +226,11 @@
 cabal install alex happy -j
 cabal install gifcurry -j
 cd ~/.cabal/bin
-./gifcurry_gui
 ./gifcurry_cli -?
+./gifcurry_gui
 ```
 
-### Github
+### [Github](https://github.com/lettier/gifcurry)
 
 ```bash
 # Install GNU Make (https://www.gnu.org/software/make/)
@@ -218,8 +240,8 @@
 git clone git@github.com:lettier/gifcurry.git
 cd gifcurry/
 make
-make run_gui
 make run_cli CLI_ARGS='-?'
+make run_gui
 ```
 
 ## License
diff --git a/makefile b/makefile
--- a/makefile
+++ b/makefile
@@ -9,14 +9,13 @@
 STACK_GHC_BIN=`$(STACK) path --compiler-bin`
 STACK_PATHS=$(STACK_PATH_LOCAL_BIN):$(STACK_GHC_BIN)
 CABAL=env PATH=$(PATH):$(STACK_PATHS) $(STACK_PATH_LOCAL_BIN)/cabal
-VERSION='2.2.0.0'
+VERSION='2.3.0.0'
 
 export PATH := $(PATH):$(STACK_PATH_LOCAL_BIN)
 
 all: setup update sandbox_clean clean alex happy install_dependencies configure build install
 
 setup:
-
   $(STACK) setup && $(STACK) update && $(STACK) install Cabal && $(STACK) install cabal-install
 
 alex: setup
diff --git a/src/data/gifcurry-icon.png b/src/data/gifcurry-icon.png
new file mode 100644
Binary files /dev/null and b/src/data/gifcurry-icon.png differ
diff --git a/src/data/gifcurry-logo.svg b/src/data/gifcurry-logo.svg
new file mode 100644
--- /dev/null
+++ b/src/data/gifcurry-logo.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   viewBox="0 0 384 384"
+   height="384"
+   width="384"
+   version="1.1"
+   id="svg4247">
+  <metadata
+     id="metadata4253">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs4251" />
+  <path
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 125.90653,283.63875 39.795,55.55914"
+     id="path4242" />
+  <path
+     id="path4244"
+     d="m 165.39543,339.58456 58.9867,-88.19368"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.02706873px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  <path
+     id="path4246"
+     d="M 106.73243,76.488293 224.38453,252.68766"
+     style="fill:none;fill-rule:evenodd;stroke:#ea2a89;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     id="path4248"
+     d="m 105.45393,253.63953 57.4321,-85.86931"
+     style="fill:none;fill-rule:evenodd;stroke:#ea2a89;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     id="path4250"
+     d="m 105.62833,253.21481 -80.554303,-118.985 61.3566,-89.60207 12.02058,19.213246"
+     style="fill:none;fill-rule:evenodd;stroke:#3f3f3f;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     id="path4252"
+     d="m 125.90653,283.63875 39.64195,55.75247 58.83365,-88.00034"
+     style="fill:none;fill-rule:evenodd;stroke:#3f3f3f;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     id="path4266"
+     d="M 130.78343,76.488293 248.43553,252.68766"
+     style="fill:none;fill-rule:evenodd;stroke:#5cb86b;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     id="path4268"
+     d="m 129.50493,253.63953 56.9392,-85.08075"
+     style="fill:none;fill-rule:evenodd;stroke:#5cb86b;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     id="path4270"
+     d="m 129.67923,253.21481 -80.554203,-118.985 61.356503,-89.60207 12.4395,19.804663"
+     style="fill:none;fill-rule:evenodd;stroke:#3f3f3f;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     id="path4272"
+     d="m 149.95743,283.63875 39.64195,55.75247 58.83365,-88.00034"
+     style="fill:none;fill-rule:evenodd;stroke:#3f3f3f;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  <path
+     style="fill:none;fill-rule:evenodd;stroke:#3f9ce6;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 158.38283,76.488293 276.03493,252.68766"
+     id="path4286" />
+  <path
+     style="fill:none;fill-rule:evenodd;stroke:#3f9ce6;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 157.10433,253.63953 56.2492,-84.19363"
+     id="path4288" />
+  <path
+     style="fill:none;fill-rule:evenodd;stroke:#3f3f3f;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 157.27873,253.21481 -80.554303,-118.985 61.356603,-89.60207 12.4395,19.804663"
+     id="path4290" />
+  <path
+     style="fill:none;fill-rule:evenodd;stroke:#3f3f3f;stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 177.55693,283.63875 39.6419,55.75247 58.8337,-88.00034"
+     id="path4292" />
+  <g
+     id="text4306"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Roboto Condensed';-inkscape-font-specification:'Roboto Condensed, ';letter-spacing:0px;word-spacing:0px;opacity:1;fill:#373737;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     transform="rotate(0.19415858)"
+     aria-label="Gifcurry">
+    <path
+       id="path4507"
+       style="font-size:40px;line-height:1.25"
+       d="m 257.95808,163.97894 q -0.35156,0.46875 -0.95703,1.15235 -0.58593,0.66406 -1.58203,1.28906 -0.99609,0.60547 -2.46094,1.05469 -1.44531,0.42968 -3.51562,0.42968 -2.20703,0 -4.04297,-0.74218 -1.81641,-0.74219 -3.125,-2.22657 -1.30859,-1.48437 -2.03125,-3.73046 -0.72266,-2.2461 -0.72266,-5.23438 v -5.35156 q 0,-11.9336 9.55079,-11.9336 2.07031,0 3.67187,0.60547 1.62109,0.58594 2.73438,1.71875 1.11328,1.11328 1.73828,2.73438 0.625,1.62109 0.74218,3.67187 h -3.57421 q -0.21485,-2.65625 -1.48438,-4.14062 -1.25,-1.50391 -3.80859,-1.50391 -1.64063,0 -2.77344,0.54688 -1.13281,0.54687 -1.85547,1.66015 -0.70312,1.09375 -1.03516,2.75391 -0.3125,1.64062 -0.3125,3.84766 v 5.39062 q 0,2.26563 0.44922,3.94531 0.44922,1.67969 1.26953,2.77344 0.83985,1.09375 2.01172,1.64063 1.17188,0.52734 2.61719,0.52734 1.23047,0 2.07031,-0.21484 0.83985,-0.21485 1.38672,-0.52735 0.56641,-0.3125 0.89844,-0.625 0.33203,-0.3125 0.56641,-0.52734 v -6.5625 h -5.19532 v -3.04688 h 8.76953 z" />
+    <path
+       id="path4509"
+       style="font-size:40px;line-height:1.25"
+       d="m 267.07918,167.5141 h -3.45703 v -21.13281 h 3.45703 z m -3.65235,-26.73828 q 0,-0.87891 0.48829,-1.48438 0.48828,-0.60547 1.46484,-0.60547 0.97656,0 1.46484,0.625 0.50782,0.60547 0.50782,1.46485 0,0.8789 -0.48829,1.46484 -0.48828,0.58594 -1.48437,0.58594 -0.97656,0 -1.46484,-0.58594 -0.48829,-0.58594 -0.48829,-1.46484 z" />
+    <path
+       id="path4511"
+       style="font-size:40px;line-height:1.25"
+       d="m 274.01277,167.5141 v -18.33984 h -2.7539 v -2.79297 h 2.7539 v -2.22657 q 0,-1.69921 0.41016,-3.00781 0.42969,-1.32812 1.21094,-2.22656 0.78125,-0.89844 1.91406,-1.34766 1.13281,-0.46875 2.53906,-0.46875 1.03516,0 2.08984,0.33203 l -0.17578,2.92969 q -0.33203,-0.0781 -0.76172,-0.11719 -0.42968,-0.0586 -0.82031,-0.0586 -1.40625,0 -2.1875,1.03516 -0.76172,1.01562 -0.76172,2.92968 v 2.22657 h 3.61328 v 2.79297 h -3.61328 v 18.33984 z" />
+    <path
+       id="path4513"
+       style="font-size:40px;line-height:1.25"
+       d="m 292.02058,164.95551 q 0.76172,0 1.44532,-0.23438 0.68359,-0.23437 1.21093,-0.72266 0.52735,-0.50781 0.83985,-1.26953 0.33203,-0.78125 0.39062,-1.875 h 3.26172 q -0.0586,1.58203 -0.66406,2.89063 -0.58594,1.28906 -1.5625,2.22656 -0.95703,0.91797 -2.22656,1.42578 -1.26953,0.50781 -2.69532,0.50781 -2.05078,0 -3.57421,-0.66406 -1.50391,-0.66406 -2.5,-1.91406 -0.9961,-1.25 -1.48438,-3.06641 -0.48828,-1.8164 -0.48828,-4.12109 v -2.38281 q 0,-2.30469 0.48828,-4.10157 0.48828,-1.8164 1.48438,-3.0664 0.99609,-1.26953 2.5,-1.9336 1.5039,-0.66406 3.55468,-0.66406 1.60157,0 2.89063,0.52735 1.30859,0.50781 2.22656,1.5039 0.9375,0.97656 1.46484,2.40235 0.52735,1.42578 0.58594,3.22265 h -3.26172 q -0.11718,-2.34375 -1.13281,-3.51562 -0.99609,-1.17188 -2.77344,-1.17188 -1.36718,0 -2.24609,0.48828 -0.87891,0.48828 -1.40625,1.38672 -0.50781,0.87891 -0.72266,2.12891 -0.19531,1.25 -0.19531,2.79297 v 2.38281 q 0,1.5625 0.19531,2.83203 0.19532,1.25 0.70313,2.14844 0.52734,0.8789 1.40625,1.36719 0.89844,0.46875 2.28515,0.46875 z" />
+    <path
+       id="path4515"
+       style="font-size:40px;line-height:1.25"
+       d="m 313.97371,165.65863 q -0.82031,1.07422 -2.07031,1.66016 -1.23047,0.58593 -2.94922,0.58593 -1.3086,0 -2.38281,-0.42968 -1.07422,-0.44922 -1.83594,-1.38672 -0.76172,-0.95703 -1.19141,-2.44141 -0.41015,-1.5039 -0.41015,-3.61328 v -13.65234 h 3.4375 v 13.6914 q 0,1.42578 0.2539,2.36328 0.27344,0.91797 0.6836,1.46485 0.42968,0.52734 0.95703,0.74219 0.54687,0.19531 1.07422,0.19531 1.71875,0 2.7539,-0.76172 1.03516,-0.76172 1.58203,-2.05078 v -15.64453 h 3.45703 v 21.13281 h -3.28125 z" />
+    <path
+       id="path4517"
+       style="font-size:40px;line-height:1.25"
+       d="m 331.29793,149.62347 q -0.41016,-0.0781 -0.76172,-0.0976 -0.35156,-0.0391 -0.80078,-0.0391 -1.40625,0 -2.32422,0.78125 -0.89844,0.78125 -1.38672,2.1289 v 15.11719 h -3.45703 v -21.13281 h 3.35937 l 0.0586,2.14843 q 0.64453,-1.17187 1.60156,-1.85546 0.97656,-0.6836 2.32422,-0.6836 0.15625,0 0.35156,0.0391 0.21485,0.0195 0.41016,0.0586 0.19531,0.0391 0.35156,0.0976 0.17578,0.0391 0.25391,0.0781 z" />
+    <path
+       id="path4519"
+       style="font-size:40px;line-height:1.25"
+       d="m 343.48543,149.62347 q -0.41016,-0.0781 -0.76172,-0.0976 -0.35156,-0.0391 -0.80078,-0.0391 -1.40625,0 -2.32422,0.78125 -0.89844,0.78125 -1.38672,2.1289 v 15.11719 h -3.45703 v -21.13281 h 3.35937 l 0.0586,2.14843 q 0.64453,-1.17187 1.60156,-1.85546 0.97656,-0.6836 2.32422,-0.6836 0.15625,0 0.35156,0.0391 0.21485,0.0195 0.41016,0.0586 0.19531,0.0391 0.35156,0.0976 0.17578,0.0391 0.25391,0.0781 z" />
+    <path
+       id="path4521"
+       style="font-size:40px;line-height:1.25"
+       d="m 353.11433,161.77191 3.84766,-15.39062 h 3.67188 l -6.99219,24.39453 q -0.23438,0.78125 -0.66406,1.69922 -0.41016,0.91797 -1.05469,1.69922 -0.64453,0.80078 -1.5625,1.32812 -0.89844,0.54688 -2.08985,0.54688 -0.19531,0 -0.44921,-0.0391 -0.25391,-0.0391 -0.50782,-0.0976 -0.2539,-0.0391 -0.48828,-0.0977 -0.21484,-0.0391 -0.35156,-0.0781 v -2.92969 q 0.11719,0.0391 0.37109,0.0586 0.27344,0.0195 0.39063,0.0195 0.76172,0 1.34765,-0.17578 0.58594,-0.17578 1.03516,-0.58594 0.46875,-0.39062 0.80078,-1.05468 0.35156,-0.66407 0.625,-1.64063 l 0.60547,-2.08984 -6.21094,-20.95703 h 3.76953 z" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Roboto Condensed';-inkscape-font-specification:'Roboto Condensed, ';letter-spacing:0px;word-spacing:0px;opacity:1;fill:#373737;fill-opacity:0.284153;fill-rule:nonzero;stroke:none;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     x="-160.13664"
+     y="380.55551"
+     id="text4502"
+     transform="rotate(-56.324282)"><tspan
+       style="font-size:7.5px;line-height:1.25"
+       id="tspan4504"
+       x="-160.13664"
+       y="380.55551">(C) DAVID LETTIER</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Roboto Condensed';-inkscape-font-specification:'Roboto Condensed, ';letter-spacing:0px;word-spacing:0px;opacity:1;fill:#373737;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     x="236.35316"
+     y="-52.491615"
+     id="text4505"
+     transform="rotate(0.19415858)"><tspan
+       id="tspan4503"
+       x="236.35316"
+       y="-52.491615"
+       style="font-size:40px;line-height:1.25">Gifcurry</tspan></text>
+</svg>
diff --git a/src/data/gui.glade b/src/data/gui.glade
--- a/src/data/gui.glade
+++ b/src/data/gui.glade
@@ -1,7 +1,41 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.20.0 
+
+Copyright (c) 2017 David Lettier
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the <organization> nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Author: David Lettier
+
+-->
 <interface>
   <requires lib="gtk+" version="3.10"/>
+  <!-- interface-license-type bsd3c -->
+  <!-- interface-name Gifcurry -->
+  <!-- interface-description Open source video to GIF maker, written in Haskell, that allows overlaid text. -->
+  <!-- interface-copyright 2017 David Lettier -->
+  <!-- interface-authors David Lettier -->
   <object class="GtkImage" id="about-image">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -39,7 +73,7 @@
     <property name="resizable">False</property>
     <property name="window_position">mouse</property>
     <property name="default_width">400</property>
-    <property name="icon">icon.ico</property>
+    <property name="icon">gifcurry-icon.png</property>
     <property name="gravity">center</property>
     <child>
       <object class="GtkBox" id="app-box">
@@ -307,7 +341,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkSeparator">
+              <object class="GtkSeparator" id="separator-2">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="orientation">vertical</property>
@@ -396,7 +430,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkSeparator">
+              <object class="GtkSeparator" id="separator-3">
                 <property name="visible">True</property>
                 <property name="sensitive">False</property>
                 <property name="can_focus">False</property>
@@ -475,7 +509,7 @@
         </child>
       </object>
     </child>
-    <child type="titlebar">
+    <child>
       <placeholder/>
     </child>
   </object>
@@ -491,7 +525,7 @@
     <property name="transient_for">gifcurry-window</property>
     <property name="attached_to">gifcurry-window</property>
     <property name="program_name">Gifcurry</property>
-    <property name="version">2.2.0.0</property>
+    <property name="version">2.3.0.0</property>
     <property name="copyright" translatable="yes">(C) 2016 David Lettier
 lettier.com</property>
     <property name="website">https://github.com/lettier/gifcurry</property>
@@ -526,15 +560,15 @@
 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</property>
     <property name="authors"> David Lettier</property>
-    <property name="logo">icon.ico</property>
+    <property name="logo">gifcurry-logo.svg</property>
     <property name="license_type">custom</property>
     <child internal-child="vbox">
-      <object class="GtkBox">
+      <object class="GtkBox" id="about-dialog-box">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkButtonBox">
+          <object class="GtkButtonBox" id="about-dialog-button-box">
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
           </object>
@@ -567,12 +601,12 @@
     <property name="message_type">warning</property>
     <property name="text" translatable="yes">Are you sure you want to make a GIF that long?</property>
     <child internal-child="vbox">
-      <object class="GtkBox">
+      <object class="GtkBox" id="long-gif-message-dialog-box">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkButtonBox">
+          <object class="GtkButtonBox" id="long-gif-message-dialog-button-box">
             <property name="can_focus">False</property>
             <property name="homogeneous">True</property>
             <property name="layout_style">end</property>
diff --git a/src/data/icon.ico b/src/data/icon.ico
deleted file mode 100644
Binary files a/src/data/icon.ico and /dev/null differ
diff --git a/src/gui/Main.hs b/src/gui/Main.hs
--- a/src/gui/Main.hs
+++ b/src/gui/Main.hs
@@ -31,6 +31,7 @@
     , defaultGifParams
     , gifParamsValid
     , getVideoDurationInSeconds
+    , findOrCreateTemporaryDirectory
   )
 import qualified GtkMainSyncAsync (gtkMainSync, gtkMainAsync)
 
@@ -75,6 +76,8 @@
   GI.Gtk.dialogAddActionWidget longGifGtkMessageDialog yesGtkButton (enumToInt32 GI.Gtk.ResponseTypeYes)
   GI.Gtk.dialogAddActionWidget longGifGtkMessageDialog noGtkButton  (enumToInt32 GI.Gtk.ResponseTypeNo)
 
+  temporaryDirectory <- Gifcurry.findOrCreateTemporaryDirectory
+
   _ <- GI.Gtk.onFileChooserButtonFileSet inputFileButton $ do
     setStatusEntryReady statusEntry
     GI.Gtk.imageSetFromIconName firstFrameImage
@@ -91,14 +94,31 @@
     _ <- GI.Gtk.entrySetText startTimeEntry startText
     _ <- GI.Gtk.entrySetText durationTimeEntry durationText
     unless (Data.Text.null startText || Data.Text.null durationText) (
-        makeFirstFramePreview inputFileButton startTimeEntry durationTimeEntry firstFrameImage lastFrameImage
+        makeFirstFramePreview
+          inputFileButton
+          startTimeEntry
+          durationTimeEntry
+          firstFrameImage
+          lastFrameImage
+          temporaryDirectory
       )
 
   _ <- GI.Gtk.onEditableChanged startTimeEntry $
-    makeFirstFramePreview inputFileButton startTimeEntry durationTimeEntry firstFrameImage lastFrameImage
+    makeFirstFramePreview
+      inputFileButton
+      startTimeEntry
+      durationTimeEntry
+      firstFrameImage
+      lastFrameImage
+      temporaryDirectory
 
   _ <- GI.Gtk.onEditableChanged durationTimeEntry $
-    makeLastFramePreview inputFileButton startTimeEntry durationTimeEntry lastFrameImage
+    makeLastFramePreview
+      inputFileButton
+      startTimeEntry
+      durationTimeEntry
+      lastFrameImage
+      temporaryDirectory
 
   _ <- GI.Gtk.onWidgetButtonReleaseEvent createButton $ \ _ -> do
     inputFilePathName <- inputFileButtonGetText inputFileButton
@@ -238,10 +258,22 @@
 framePreviewDirectoryName :: String
 framePreviewDirectoryName = "gifcurry-frame-previews"
 
-makeLastFramePreview :: GI.Gtk.FileChooserButton -> GI.Gtk.Entry -> GI.Gtk.Entry -> GI.Gtk.Image -> IO ()
-makeLastFramePreview inputFileButton startTimeEntry durationTimeEntry lastFrameImage =
+makeLastFramePreview ::
+  GI.Gtk.FileChooserButton ->
+  GI.Gtk.Entry ->
+  GI.Gtk.Entry ->
+  GI.Gtk.Image ->
+  System.FilePath.FilePath ->
+  IO ()
+makeLastFramePreview
+  inputFileButton
+  startTimeEntry
+  durationTimeEntry
+  lastFrameImage
+  temporaryDirectory
+  =
   void $ forkIO $
-    withTempDirectory "." framePreviewDirectoryName $ \ tmpdir -> do
+    withTempDirectory temporaryDirectory framePreviewDirectoryName $ \ tmpdir -> do
       inputFilePathName           <- inputFileButtonGetText inputFileButton
       startTimeText               <- GI.Gtk.entryGetText startTimeEntry
       durationTimeText            <- GI.Gtk.entryGetText durationTimeEntry
@@ -258,17 +290,36 @@
       _ <- setOrResetFramePrevew doSet inputFilePathName outputFilePathName startTime lastFrameImage " LAST  FRAME "
       return()
 
-makeFirstFramePreview :: GI.Gtk.FileChooserButton -> GI.Gtk.Entry -> GI.Gtk.Entry -> GI.Gtk.Image -> GI.Gtk.Image -> IO ()
-makeFirstFramePreview inputFileButton startTimeEntry durationTimeEntry firstFrameImage lastFrameImage =
+makeFirstFramePreview ::
+  GI.Gtk.FileChooserButton ->
+  GI.Gtk.Entry ->
+  GI.Gtk.Entry ->
+  GI.Gtk.Image ->
+  GI.Gtk.Image ->
+  System.FilePath.FilePath ->
+  IO ()
+makeFirstFramePreview
+  inputFileButton
+  startTimeEntry
+  durationTimeEntry
+  firstFrameImage
+  lastFrameImage
+  temporaryDirectory
+  =
   void $ forkIO $ do
-    withTempDirectory "." framePreviewDirectoryName $ \ tmpDir -> do
+    withTempDirectory temporaryDirectory framePreviewDirectoryName $ \ tmpDir -> do
       inputFilePathName       <- inputFileButtonGetText inputFileButton
       startTime               <- entryGetFloat startTimeEntry (-1.0)
       let outputFilePathName  = tmpDir ++ "/gifcurry-first-frame-preview.gif"
       let doSet               = not (Data.List.null inputFilePathName) && (startTime >= 0.0)
       _ <- setOrResetFramePrevew doSet inputFilePathName outputFilePathName startTime firstFrameImage " FIRST FRAME "
       return ()
-    makeLastFramePreview inputFileButton startTimeEntry durationTimeEntry lastFrameImage
+    makeLastFramePreview
+      inputFileButton
+      startTimeEntry
+      durationTimeEntry
+      lastFrameImage
+      temporaryDirectory
 
 setOrResetFramePrevew :: Bool -> String -> String -> Float -> GI.Gtk.Image -> String -> IO ()
 setOrResetFramePrevew False _ _ _ image _ = GtkMainSyncAsync.gtkMainAsync $ resetImage image
diff --git a/src/lib/Gifcurry.hs b/src/lib/Gifcurry.hs
--- a/src/lib/Gifcurry.hs
+++ b/src/lib/Gifcurry.hs
@@ -15,6 +15,7 @@
     , gifParamsValid
     , versionNumber
     , getVideoDurationInSeconds
+    , findOrCreateTemporaryDirectory
   ) where
 
 import System.Process
@@ -44,7 +45,7 @@
 
 -- | The version number.
 versionNumber :: String
-versionNumber = "2.2.0.0"
+versionNumber = "2.3.0.0"
 
 -- | Specifies default parameters for 'startTime', 'durationTime', 'widthSize', 'qualityPercent', and 'fontChoice'.
 defaultGifParams :: GifParams
@@ -75,13 +76,14 @@
 --        else return ()
 -- @
 gif :: GifParams -> IO (Either IOError String)
-gif gifParams =
-  withTempDirectory "." "gifcurry-frames" $ \tmpdir -> do
+gif gifParams = do
+  temporaryDirectory <- findOrCreateTemporaryDirectory
+  withTempDirectory temporaryDirectory "gifcurry-frames" $ \tmpdir -> do
     printGifParams gifParams tmpdir
     validParams <- gifParamsValid gifParams
     if validParams
       then do
-        fFMpegResult  <- tryFfmpeg gifParams tmpdir
+        fFMpegResult <- tryFfmpeg gifParams tmpdir
         let fFMpegSuccess = eitherBool fFMpegResult
         if fFMpegSuccess
           then do
@@ -154,6 +156,14 @@
     result :: Either IOError String -> IO (Maybe Float)
     result (Left _)               = return Nothing
     result (Right durationString) = return (readMaybe durationString :: Maybe Float)
+
+-- | Finds or creates the temporary directory for Gifcurry.
+-- This directory is used for storing temporary frames.
+findOrCreateTemporaryDirectory :: IO FilePath
+findOrCreateTemporaryDirectory = do
+  filePath <- System.Directory.getXdgDirectory System.Directory.XdgCache "gifcurry"
+  System.Directory.createDirectoryIfMissing True filePath
+  return filePath
 
 printGifParams :: GifParams -> String -> IO ()
 printGifParams
