diff --git a/ical/Readme.rst b/ical/Readme.rst
new file mode 100644
index 0000000..0260a72
--- /dev/null
+++ b/ical/Readme.rst
@@ -0,0 +1,28 @@
+ical
+--------
+
+This plugin read the calendar defined in the page metadata : calendar :
+
+with::
+
+ :calendar: /path/to/your/ics/file
+
+Example of code that can be added in page template ::
+
+
+ {% if page.calendar %}
+
+ {% for vevent in events[page.slug] %}
+ - {{ vevent.summary }}
+ - {{ vevent.description|replace('\n\n', '
') }}
+ - {{ vevent.dtstart }}
+ - {{ vevent.dtend }}
+
+ {% endfor %}
+
+ {% endif %}
+
+this plugins needs icalendar module installed::
+
+ pip install icalendar
+
diff --git a/ical/__init__.py b/ical/__init__.py
new file mode 100644
index 0000000..8a1352a
--- /dev/null
+++ b/ical/__init__.py
@@ -0,0 +1 @@
+from .ical import *
diff --git a/ical/ical.py b/ical/ical.py
new file mode 100644
index 0000000..26fdd12
--- /dev/null
+++ b/ical/ical.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+"""
+ical plugin for Pelican
+===========================
+
+This plugin parse the calendars defined in pages metadata :calendar:
+One calendar per page
+
+"""
+
+from icalendar import Calendar, Event
+from pelican import signals , utils
+import pytz
+import datetime
+import os.path
+
+def init_cal(generator):
+ # initialisation of the dictionnary of calendar
+ # you can add one calendar per page
+ calDict = {}
+ generator.context['events'] = calDict
+
+def add_ical(generator, metadata):
+ # check if a calendar is here
+ if 'calendar' in metadata.keys():
+ summ = []
+ path = metadata['calendar']
+ if not os.path.isabs(path):
+ path = os.path.abspath(metadata['calendar'])
+ cal = Calendar.from_ical(open(path,'rb').read())
+ for element in cal.walk():
+ eventdict = {}
+ if element.name == "VEVENT":
+ if element.get('summary') != None:
+ eventdict['summary'] = element.get('summary')
+ if element.get('description') != None:
+ eventdict['description'] = element.get('description')
+ if element.get('url') != None:
+ eventdict['url'] = element.get('url')
+ if element.get('dtstart') != None:
+ eventdict['dtstart'] = element.get('dtstart').dt
+ if element.get('dtend') != None:
+ eventdict['dtend'] = element.get('dtend').dt
+ summ.append(eventdict)
+ # the id of the calendar is the slugify name of the page
+ calId = utils.slugify(metadata['title'])
+ generator.context['events'][calId] = summ
+
+
+def register():
+ signals.pages_generator_init.connect(init_cal)
+ signals.pages_generate_context.connect(add_ical)