diff --git a/pelicanext/gallery/README.md b/pelicanext/gallery/README.md
new file mode 100644
index 0000000..e07045c
--- /dev/null
+++ b/pelicanext/gallery/README.md
@@ -0,0 +1,98 @@
+Gallery
+==================
+
+* Allows an article to contain an album of pictures.
+* All albums can also be syndicated into a central gallery page.
+
+##How to Use
+
+1. Group images into folders, with each folder representing an album.
+2. Place all album folders within a folder named gallery, which resides within the images folder.
+
+ ./content/images/gallery/album_name
+
+###Articles
+
+Attach an album to an article/post by placing a gallery stub with the name of the album.
+
+ gallery:album_name
+
+The template has access to the album name.
+
+ article.album
+
+And the filename of images within an album.
+
+ article.albumimages
+
+###Gallery Page
+
+Create a page and a gallery template (named gallery.html). And inform pelican to use the gallery template for the page.
+
+ template:gallery
+
+The template has access to a dictionary of lists.
+The dictionary key is the name of the album and the lists contain the filenames.
+
+ page.gallery
+
+##Examples
+
+###article.html
+
+ {% for album, images in page.gallery.iteritems() %}
+
+
+ {% for image in article.galleryimages %}
+ 
+ {% endfor %}
+
+ {% endfor %}
+
+###gallery.html
+
+ {% for album, images in page.gallery.iteritems() %}
+
+
+ {% for image in images %}
+ 
+ {% endfor %}
+
+ {% endfor %}
+
+###posts/foo.md
+
+ title:Foo
+ gallery:albumname
+
+###pages/gallery.md
+
+ title:All Images
+ template:gallery
+
+##Reasoning
+
+The album name and filenames are returned as opposed to the direct path to the images,
+to allow flexibility of different thumbnail sizes to be used it different locations of a website.
+
+ href="{{ SITEURL }}/static/images/gallery/{{album}}/{{ image }}"
+ href="{{ SITEURL }}/static/images/gallery200x200/{{album}}/{{ image }}"
+
+It also allows a thumbnail to link to the full image,
+as well as the filename extension to be stripped and the title of an image to be displayed along side the title of an album.
+
+##Recommendation
+
+It is recommended to use this extension along with the thumbnailer plugin.
+
+ RESIZE = [
+ ('gallery', False, 200,200),
+ ]
+
+You may also wish to use this along with a gallery plugin such as [Colorbox](http://www.jacklmoore.com/colorbox/).
+
+##In Use
+
+* [SESIF Article](http://sesif.github.io/my-super-title.html)
+* [SESIF Gallery](http://sesif.github.io/pages/gallery.html)
+* [SESIF Source](http://github.com/SESIF/SESIF.github.io/tree/source)
diff --git a/pelicanext/gallery/gallery.py b/pelicanext/gallery/gallery.py
new file mode 100644
index 0000000..35c6052
--- /dev/null
+++ b/pelicanext/gallery/gallery.py
@@ -0,0 +1,156 @@
+"""
+Copyright (c) Emmet McPoland
+
+Gallery
+==================
+
+* Allows an article to contain an album of pictures.
+* All albums can also be syndicated into a central gallery page.
+
+##How to Use
+
+1. Group images into folders, with each folder representing an album.
+2. Place all album folders within a folder named gallery, which resides within the images folder.
+
+ ./content/images/gallery/album_name
+
+###Articles
+
+Attach an album to an article/post by placing a gallery stub with the name of the album.
+
+ gallery:album_name
+
+The template has access to the album name.
+
+ article.album
+
+And the filename of images within an album.
+
+ article.albumimages
+
+###Gallery Page
+
+Create a page and a gallery template (named gallery.html). And inform pelican to use the gallery template for the page.
+
+ template:gallery
+
+The template has access to a dictionary of lists.
+The dictionary key is the name of the album and the lists contain the filenames.
+
+ page.gallery
+
+##Examples
+
+###article.html
+
+ {% for album, images in page.gallery.iteritems() %}
+
+
+ {% for image in article.galleryimages %}
+ 
+ {% endfor %}
+
+ {% endfor %}
+
+###gallery.html
+
+ {% for album, images in page.gallery.iteritems() %}
+
+
+ {% for image in images %}
+ 
+ {% endfor %}
+
+ {% endfor %}
+
+###posts/foo.md
+
+ title:Foo
+ gallery:albumname
+
+###pages/gallery.md
+
+ title:All Images
+ template:gallery
+
+##Reasoning
+
+The album name and filenames are returned as opposed to the direct path to the images,
+to allow flexibility of different thumbnail sizes to be used it different locations of a website.
+
+ href="{{ SITEURL }}/static/images/gallery/{{album}}/{{ image }}"
+ href="{{ SITEURL }}/static/images/gallery200x200/{{album}}/{{ image }}"
+
+It also allows a thumbnail to link to the full image,
+as well as the filename extension to be stripped and the title of an image to be displayed along side the title of an album.
+
+##Recommendation
+
+It is recommended to use this extension along with the thumbnailer plugin.
+
+ RESIZE = [
+ ('gallery', False, 200,200),
+ ]
+
+You may also wish to use this along with a gallery plugin such as [Colorbox](http://www.jacklmoore.com/colorbox/).
+
+##In Use
+
+* [SESIF Article](http://sesif.github.io/my-super-title.html)
+* [SESIF Gallery](http://sesif.github.io/pages/gallery.html)
+* [SESIF Source](http://github.com/SESIF/SESIF.github.io/tree/source)
+
+"""
+
+import os
+from pelican import signals
+
+__author__ = "Emmet McPoland"
+
+def add_gallery_post(generator):
+
+ contentpath = generator.settings.get('PATH')
+ gallerycontentpath = os.path.join(contentpath,'images/gallery')
+
+
+ for article in generator.articles:
+ if 'gallery' in article.metadata.keys():
+ album = article.metadata.get('gallery')
+ galleryimages = []
+
+ articlegallerypath=os.path.join(gallerycontentpath, album)
+
+ if(os.path.isdir(articlegallerypath)):
+ for i in os.listdir(articlegallerypath):
+ if os.path.isfile(os.path.join(os.path.join(gallerycontentpath, album), i)):
+ galleryimages.append(i)
+
+ article.album=album
+ article.galleryimages=galleryimages
+
+
+
+def generate_gallery_page(generator):
+
+ contentpath = generator.settings.get('PATH')
+ gallerycontentpath = os.path.join(contentpath,'images/gallery')
+
+
+ for page in generator.pages:
+ if page.metadata.get('template') == 'gallery':
+ gallery=dict()
+
+ for a in os.listdir(gallerycontentpath):
+ if os.path.isdir(os.path.join(gallerycontentpath, a)):
+
+ for i in os.listdir(os.path.join(gallerycontentpath, a)):
+ if os.path.isfile(os.path.join(os.path.join(gallerycontentpath, a), i)):
+ gallery.setdefault(a, []).append(i)
+
+ page.gallery=gallery
+
+
+
+def register():
+ signals.article_generator_finalized.connect(add_gallery_post)
+ signals.pages_generator_finalized.connect(generate_gallery_page)