diff --git a/configure.in b/configure.in
index 21e2232..a26beef 100644
--- a/configure.in
+++ b/configure.in
@@ -45,4 +45,5 @@ foundation.gnome.org/vote/2007/Makefile
foundation.gnome.org/vote/2009/Makefile
foundation.gnome.org/vote/2010/Makefile
foundation.gnome.org/vote/2011/Makefile
+foundation.gnome.org/vote/2012/Makefile
])
diff --git a/foundation.gnome.org/vote/2012/Makefile.am b/foundation.gnome.org/vote/2012/Makefile.am
new file mode 100644
index 0000000..2cd0af5
--- /dev/null
+++ b/foundation.gnome.org/vote/2012/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS =
+
+urlpath = /vote/2012
+
+page_SCRIPTS = \
+ index.html \
+ candidates.html\
+ rules.html
+
+page_DATA = \
+ timeline.ics
+ mkical.py
+
+include $(top_srcdir)/rules.common
diff --git a/foundation.gnome.org/vote/2012/candidates.wml b/foundation.gnome.org/vote/2012/candidates.wml
new file mode 100644
index 0000000..a56b63d
--- /dev/null
+++ b/foundation.gnome.org/vote/2012/candidates.wml
@@ -0,0 +1,244 @@
+
+
+
+
+
+ GNOME Foundation 2012 Elections Candidates
+
+
+
+
+ Candidates for the GNOME Foundation 2012 Elections
+
+
+ Below you will find a list of candidates who are running for the
+ GNOME Foundation Board of Directors. A short summary statement from
+ each candidate and a link to their full candidacy announcement is
+ provided to help you learn more about them. We encourage all voters
+ to read the full candidacy statements and related discussions on
+ foundation-list@gnome.org.
+
+
+
+ When deciding who you should vote for, please carefully consider
+ the various tasks the Board of Directors must perform. This
+ overview may be helpful. Keep in mind that
+ the board will make a number of important decisions and will also have to
+ perform many tasks which require a significant amount of time and effort
+ and the ability to work and communicate with other people, companies, and
+ the media. The board of directors will represent GNOME to companies and
+ the world in a very real way. It is a good idea to strive for a
+ well-balanced board consisting of people with various backgrounds,
+ skills, and perspectives.
+
+
+
+ Additional elections details can be found on the
+ GNOME Foundation Web Site.
+
+
+
+ If you have any questions, please send them to either
+ foundation-list@gnome.org
+ or to us at elections@gnome.org.
+
+
+ Candidates for the GNOME Foundation Board of Directors
+
+
+
+ 1. Brian Cameron
+ Affiliation: Oracle
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00005.html
+
+
+I am running for re-election for a third term on the board. I am
+running not just because I love GNOME, the GNOME community, and free
+software; but also because I have experience working on the board and a
+good track record of getting things done.
+
+
+
+
+
+ 2. Yang Emily Chen
+ Affiliation: Sun Microsystems, Inc. (Will become Oracle soon after LEC in China)
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00008.html
+
+
+Hi, this Emily Chen. I participated in GNOME since 2006. Now I am continue working in GNOME community because I believe in GNOME. I worked on LDTP project in 2006, then participated in Google Summer of Code 2006 and 2007 on GNOME LDTP projects as mentor. In 2008, I started the GNOME.Asia and organized the GNOME.Asia Summit 2008 in China and GNOME.Asia Summit 2009 in Vietnam. Now I am working on the GNOME.Asia 2010, which will be host in Taiwan in August. Also, I start the Beijing GNOME Users Group in Beijing since 2008 Nov. Now Beijing GNOME Users Group is one of the most active organization in Beijing. I want to make GNOME grow in Beijing, China, and Asia, it is meaningful to promote GNOME to more people, especially in Asia, because I see many opportunity and good community here in Asian.
+
+
+
+
+
+ 3. Baris Cicek
+ Affiliation: Nerd Software
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00015.html
+
+
+I'm 27 years old, and contributing GNOME since early 2000s. I've been
+taking role of GNOME Turkish translation coordinator since 2004, and in
+past served community at GNOME Membership and Elections committee for
+three years. My last but not the least significant contribution was
+organizing GUADEC 2008 which was held in Istanbul.
+
+Since from the day one I've also been trying to contribute with
+occasional bug reports and patches for various GNOME applications as
+well.
+
+
+
+
+
+ 4. Paul Cutler
+ Affiliation: Novell
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00002.html
+
+
+Hi, I'm Paul and I've been contributing to GNOME since 2006 in
+documentation, marketing and the web team. I have been on the Board for
+the last two months having been asked to fill Behdad's term. I think the
+GNOME Foundation is doing very well and the future is bright with GNOME
+3.0 just around the corner. I want to help promote GNOME 3 and continue
+to improve the communication between the Board, the GNOME communities
+and GNOME's partners to help GNOME grow.
+
+
+
+
+ 5. Seif Lotfy
+ Affiliation: None
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00014.html
+
+
+ Hello, I'm Seif Lotfy, I have been using GNOME since 2004
+and participated starting 2007. I enjoy being part of the community and
+enjoy spreading GNOME.
+
+ I initiated Zeitgeist and GNOME activity Journal, and dedicated most of
+my time developing them and building a community around both. Now I would
+love to start contributing in other parts of GNOME.
+
+
+
+
+ 6. Og Maciel
+ Affiliation: rPath Inc
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00004.html
+
+
+The GNOME Project has allowed me to take my first steps into the world
+of collaborative projects and long nights of translation sprints. Due
+to my open minded attitude, I have been able to get involved in many
+different projects and work with a great number of interesting people.
+
+My passion is in the community aspect of these projects and how to
+better integrate new comers and volunteers with the rest of the
+community. I am also extremely interested in how we, the open source
+community as a whole, can leverage this immense pool of ideas and
+projects, and use it to the benefit of all.
+
+If elected to the board, I will bring in my experience of building
+communities and guiding/enabling users to become more active in the
+GNOME Project. After all, the GNOME Project IS about people! I will
+also push to make accessibility a high priority for the project.
+
+
+
+
+ 7. Andreas Nilsson
+ Affiliation: None
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00013.html
+
+
+I'm Andreas Nilsson, 28 years old, from Sweden. I've been part of the GNOME community since around 2005 and do all kinds of visual stuff for the project. Websites, t-shirts, icons, etc. as part of the Art team and the Marketing team. I run my own freelance design company in Gothenburg and this is my candidacy for GNOME Board of Directors.
+
+
+
+
+
+
+
+ 8. Bastien Nocera
+ Affiliation: Red Hat UK Ltd., a wholly owned subsidiary of Red
+Hat Inc.
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00016.html
+
+
+I'm a 31 year-old French Anglophile, who has been involved in GNOME for
+more than 10 years, first as an application developer, then as a core
+hacker (though I did not hack on gnome-core[1] at the time).
+
+
+
+
+
+ 9. Germán Póo-Caamaño
+ Affiliation: None
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00017.html
+
+
+ I am a contributor since 2000 and I am running for re-election
+ for the Foundation Board because I am confident there is plenty
+ of room where I can help to Gnome and its community, as in the
+ last year, bringing a different perspective and an independent
+ voice.
+
+
+
+
+
+ 10. Diego Escalante Urrelo
+ Affiliation: Igalia S.L.
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00009.html
+
+
+ I'm Diego, 22, from good old Lima - Perú. I've been involved
+ since 2006, I've contributed with code, bug triaging, accounts
+ administration, promotion with/at events, organization, Board, etc.
+
+ I love GNOME and our community, it's awesome :).
+
+
+
+
+
+ 11. Jonh Wendell
+ Affiliation: Santo Antonio Sugar Company
+ Full statement at http://mail.gnome.org/archives/foundation-announce/2010-May/msg00003.html
+
+
+I've been using GNOME since 2005 and contributing since 2006.
+I love GNOME. I love to spread GNOME. I love to bring new
+contributors to GNOME. That's why I'm running for the board
+of directors (for the first time).
+
+
+
+
+
+
+
+ Additional Elections-related Information
+
+
+ Note, that according to the
+ Bylaws Article VIII Section 2d
+ there is a 2-person maximum on the number of people affiliated with any
+ one company that can be on the board: if more than 2 persons from one
+ company get elected, only the top 2 vote getters will get on.
+ You will be able to vote for up to 7 candidates of your choice, with no
+ restrictions, except that you cannot vote more than once for the same
+ candidate.
+
+
+
+ If you have any futher question, please consult the
+ Rules for this election or write to
+ elections@gnome.org.
+
+
+
+
diff --git a/foundation.gnome.org/vote/2012/index.wml b/foundation.gnome.org/vote/2012/index.wml
new file mode 100644
index 0000000..0d58ab8
--- /dev/null
+++ b/foundation.gnome.org/vote/2012/index.wml
@@ -0,0 +1,63 @@
+
+
+
+
+
+ GNOME Foundation 2012 Elections
+
+
+
+
+
+
+ GNOME Foundation 2012 Elections
+
+
+ The GNOME Foundation Membership currently elects the Board of
+ Directors each year for July, 1st. Any member can nominate
+ themself to run in the elections. The overall elections process
+ is overseen by the Membership and Elections Committee, which can
+ be reached at elections@gnome.org.
+
+
+
+ The elections results from the 2012 Board of Directors elections
+ will be archived here for public access.
+
+
+ 2012 Elections Materials:
+
+
+
+
diff --git a/foundation.gnome.org/vote/2012/mkical.py b/foundation.gnome.org/vote/2012/mkical.py
new file mode 100644
index 0000000..977ac1c
--- /dev/null
+++ b/foundation.gnome.org/vote/2012/mkical.py
@@ -0,0 +1,258 @@
+#!/usr/bin/env python
+'''
+This Python script creates a simple iCal file based on hardcoded events
+in this file.
+'''
+
+import calendar
+import datetime
+import logging
+import math
+import os
+import vobject
+
+
+#### Configure these variables
+YEAR = 2012
+CANDIDATES_OPENED_DATE = (YEAR, 5, 7)
+CANDIDATES_CLOSED_DATE = (YEAR, 5, 20)
+CANDIDATES_ANNOUNCED_DATE = (YEAR, 5, 23)
+VOTING_OPENED_DATE = (YEAR, 5, 27)
+VOTING_CLOSED_DATE = (YEAR, 6, 10)
+PRELIMINARY_RESULTS_DATE = (YEAR, 6, 12)
+CHALLENGE_CLOSED_DATE = (YEAR, 6, 19)
+
+
+
+### I'm sorry that these functions clutter your calendar-creating experience
+### Please scroll down a bit to edit the description texts
+
+#### Application Data
+def c(multilinestring):
+ '''
+ A helper functions which cleans up a multiline string, so that
+ it doesn't contain any newlines or multiple whitespaces
+ '''
+ stripped = [l.strip() for l in multilinestring.splitlines()]
+ ret = " ".join (stripped)
+ return ret
+
+def d(year, month, day):
+ '''
+ Just a tiny wrapper around datetime.datetime to create a datetime object
+ '''
+ return datetime.date(year, month, day)
+
+
+
+CANDIDATES_OPENED = (
+ d(*CANDIDATES_OPENED_DATE),
+ 'Announcements and list of candidates opens',
+ c("""If you are a member of the GNOME Foundation and are interested
+ in running for election, you may nominate yourself by sending an
+ e-mail to foundation-announce@gnome.org with your name, e-mail
+ address, corporate affiliation (if any), and a description of why
+ you'd like to serve, before
+ %s (23:59 UTC).""" % d(*CANDIDATES_CLOSED_DATE)) + '''
+ ''' + c("""
+ You should also send a summary of your candidacy announcement
+ (75 words or less) to elections@gnome.org. If you are not yet a
+ GNOME Foundation member and would like to stand for election,
+ you must first apply for membership and be accepted to be eligible
+ to run. (You may, however, announce your candidacy prior to formal
+ acceptance of your application;
+ should your application not be accepted, you will not be included in
+ the list of candidates.)""") + '''
+ '''
+)
+
+CANDIDATES_CLOSED = (
+ d(*CANDIDATES_CLOSED_DATE),
+ 'List of candidates closed',
+ CANDIDATES_OPENED[2] # Get the same text again
+)
+
+CANDIDATES_ANNOUNCED = (
+ d(*CANDIDATES_ANNOUNCED_DATE),
+ 'List of candidates announced',
+ 'You may now start to send your questions to the candidates'
+)
+
+VOTING_OPENED = (
+ d(*VOTING_OPENED_DATE),
+ 'Instructions to vote are sent',
+ 'Please read your email and follow these instructions and submit your vote by %s' % d(*VOTING_CLOSED_DATE)
+)
+VOTING_CLOSED = (
+ d(*VOTING_CLOSED_DATE),
+ 'Votes must be returned',
+ 'Preliminary results are announced on %s' % d(*PRELIMINARY_RESULTS_DATE)
+)
+
+
+PRELIMINARY_RESULTS = (
+ d(*PRELIMINARY_RESULTS_DATE),
+ 'Preliminary results are announced',
+ 'The preliminary results can be challenged until %s' % d(*CHALLENGE_CLOSED_DATE)
+)
+
+CHALLENGE_CLOSED = (
+ d(*CHALLENGE_CLOSED_DATE),
+ 'Challenges to the results closed',
+ "If there weren't any challenges, preliminary results are valid"
+)
+
+
+
+
+def create_ical(eventlist):
+ '''Generates an ical stream based on the list given as eventlist.
+ The list shall contain elements with a tuple with a
+ (date, string, string) object, serving as date when the event takes place,
+ summary and description respectively.
+ '''
+ log = logging.getLogger('create_ical')
+
+ cal = vobject.iCalendar()
+ cal.add('method').value = 'PUBLISH'
+ cal.add('calscale').value = 'GREGORIAN'
+ cal.add('x-wr-timezone').value = 'UTC'
+
+ for (timestamp, summary, description) in eventlist:
+ log.debug('creating %s, %s', timestamp, description)
+ vevent = cal.add('vevent')
+ vevent.add('dtstart').value = timestamp
+ vevent.add('dtend').value = timestamp + datetime.timedelta(1)
+ vevent.add('summary').value = summary
+ vevent.add('description').value = description
+
+ stream = cal.serialize()
+ return stream
+
+
+def wraptext(s, width):
+ '''Wraps a string @s at @width characters.
+
+ >>> wraptext('fooo', 2)
+ ['fo','oo']
+ '''
+ l = len(s)
+ nr_frames = int(math.ceil(float(l)/width))
+ print nr_frames
+ frames = []
+ for i in xrange(nr_frames):
+ start, end = i*width, (i+1) * width
+ frames.append(s[start:end])
+ # One could (and prolly should) yield that
+ return frames
+
+def ordinal(n):
+ n = int(n)
+ if 10 <= n % 100 < 20:
+ return str(n) + 'th'
+ else:
+ return str(n) + {1 : 'st', 2 : 'nd', 3 : 'rd'}.get(n % 10, "th")
+
+
+def cal_for_month(month, events, width=80, year=datetime.datetime.now().year):
+ '''Generates a textual calendar for the @month in @year.
+ It will return a string with the calendar on the left hand side and the
+ events on the right hand side.
+ @events shall be a list with tuples: timestamp, summary, description.
+
+ Returns a string with the calendar
+ '''
+ log = logging.getLogger('cal_for_month')
+
+ cal = calendar.TextCalendar()
+ calstrings = cal.formatmonth(year, month, 3).splitlines()
+
+ for (timestamp, summary, description) in events:
+ log.debug('creating %s, %s', timestamp, summary)
+ year, month, day = timestamp.year, timestamp.month, timestamp.day
+ maxwidth = max([len(cs) for cs in calstrings])
+ rightwidth = 80 - maxwidth
+ for i, line in enumerate(calstrings):
+ needles = (" %d " % day,
+ " %d\n" % day)
+ replacement = "(%d)" % day
+ # Find the day so that we can highlight it and add a comment
+ day_in_week = False
+ for needle in needles:
+ if needle in line+"\n":
+ # k, this looks a bit weird but we have that corner
+ # case with the day being at the end of the line
+ # which in turn will have been split off
+ day_in_week = True
+ break # Set the needle to the found one
+ if day_in_week == False: # Nothing found, try next week
+ log.debug('Day (%d) not found in %s', day, line)
+ continue
+ else:
+ log.debug('Day (%d) found in %s', day, line)
+ new_line = (line+"\n").replace(needle, replacement).rstrip()
+ new_line += " %s (%s)" % (summary, ordinal(day))
+ # Replace in-place for two events in the same week
+ # FIXME: This has bugs :-(
+ calstrings[i] = new_line
+
+ return os.linesep.join(calstrings)
+
+def create_textcal(eventlist):
+ '''Generates a multiline string containing a calendar with the
+ events written on the side
+ The list shall contain elements with a tuple with a
+ (date, string, string) object, serving as date when the event takes place,
+ summary and description respectively.
+ '''
+ log = logging.getLogger('textcal')
+ log.debug('Generating from %s', eventlist)
+ months = set(map(lambda x: x[0].month, eventlist))
+ year = set(map(lambda x: x[0].year, eventlist)).pop()
+
+ final_cal = []
+ for month in months:
+ events = filter(lambda x: x[0].month == month, eventlist)
+ log.debug('Events for %d: %s', month, events)
+ month_cal = cal_for_month(month, events, year=year)
+ final_cal.append(month_cal)
+
+ return os.linesep.join(final_cal)
+
+if __name__ == "__main__":
+ from optparse import OptionParser
+ parser = OptionParser("usage: %prog [options]")
+ parser.add_option("-l", "--loglevel", dest="loglevel", help="Sets the loglevel to one of debug, info, warn, error, critical",
+ default=None)
+ parser.add_option("-i", "--ical",
+ action="store_true", dest="ical", default=False,
+ help="print iCal file to stdout")
+ parser.add_option("-t", "--textcal",
+ action="store_true", dest="tcal", default=False,
+ help="print textual calendar to stdout")
+ (options, args) = parser.parse_args()
+
+ loglevel = {'debug': logging.DEBUG, 'info': logging.INFO,
+ 'warn': logging.WARN, 'error': logging.ERROR,
+ 'critical': logging.CRITICAL}.get(options.loglevel, "warn")
+ logging.basicConfig( level=loglevel )
+ log = logging.getLogger()
+
+ eventlist = [
+ CANDIDATES_OPENED,
+ CANDIDATES_CLOSED,
+ CANDIDATES_ANNOUNCED,
+ VOTING_OPENED,
+ VOTING_CLOSED,
+ PRELIMINARY_RESULTS,
+ CHALLENGE_CLOSED,
+ ]
+
+ if not any([options.ical, options.tcal]):
+ parser.error("You want to select either ical or textcal output. See --help for details")
+ if options.ical:
+ ical = create_ical( eventlist )
+ print ical
+ if options.tcal:
+ tcal = create_textcal( eventlist )
+ print tcal
diff --git a/foundation.gnome.org/vote/2012/rules.wml b/foundation.gnome.org/vote/2012/rules.wml
new file mode 100644
index 0000000..4c40c0b
--- /dev/null
+++ b/foundation.gnome.org/vote/2012/rules.wml
@@ -0,0 +1,144 @@
+
+
+
+
+
+ GNOME Foundation 2012 Elections Rules
+
+
+
+
+
+ Rules & Timeline for the GNOME Foundation 2012 Elections
+
+ Elections Rules
+
+
+ -
+ See the GNOME Foundation charter for
+ general rules.
+
+ -
+ There are 7 board slots that are to be filled during these elections.
+
+ -
+ Members of the GNOME Foundation as of
+ 2012-05-23
+
+ are eligible to vote in the elections. Anyone who has made a
+ contribution to GNOME can apply for membership by completing the
+ application.
+ Also, your membership needs to be valid at least until the end of the
+ elections
+ (2012-06-19).
+
+
+ -
+ Any eligible voter is eligible to be elected to the Board of Directors.
+ To announce your candidacy, send a message to
+ foundation-announce@gnome.org
+ with your full name, e-mail, corporate affiliation (if any), and a
+ description of your reasons for wanting to serve as a director.
+ Candidacies must be announced prior to
+ 2012-05-20, 23:59 UTC.
+
+
+ -
+ All candidates should mail a summary of their candicacy announcement
+ (see previous rule) to elections@gnome.org.
+ Summaries should be no more than 75 words of continuous text (i.e. no
+ bullet lists or multiple paragraphs) and must be received by the
+ nomination deadline given above. A compilation of the summaries will
+ be mailed to all registered voters several days prior to the elections.
+
+ -
+ All discussion related to the elections should be held on
+ foundation-list@gnome.org.
+ Members are invited to ask questions to one or all candidates on that
+ list.
+
+ -
+ Instructions explaining how to vote will be sent via e-mail to all
+ eligible voters on
+ 2012-05-27,
+
+ and votes must be returned by
+ 2012-06-11, 23:59 UTC.
+
+ -
+ Votes will be held confidential during the elections, but an
+ anonymized archive of all submitted votes will be made publicly
+ accessible at its conclusion.
+
+ -
+ The GNOME Foundation Membership and Elections Committee is
+ responsible for counting the votes.
+
+ -
+ The 7 candidates voted for most as counted by a single transferable
+ vote system will be elected, except that no more than two
+ individuals affiliated with any one corporation may be elected. Should
+ more than two of the top seven vote-getters be affiliated with the
+ same company, only the two with the most votes will be considered
+ elected. For a full definition of corporate affiliation, see the
+ GNOME Foundation charter.
+
+ -
+ In the event of a tie for the final slot on the board, the Elections
+ Committee will schedule run-off elections as soon as possible.
+
+ -
+ The Elections Committee will announce preliminary results as soon as
+ possible after the elections close, along with instructions on how to
+ access the votes archive and how to independently verify the vote
+ count.
+
+ -
+ Any eligible voter may challenge the preliminary results by e-mailing
+ elections@gnome.org
+ prior to
+ 2012-06-19.
+
+ The decision of the Elections Committee as
+ to any challenge shall be final. Once any challenges have been
+ resolved, the Elections Committee shall announce the final results.
+
+ -
+ Any questions regarding these procedures should be directed to the
+ Elections Committee by e-mail to elections@gnome.org.
+ The committee shall have the power to make any necessary changes or
+ clarifications to these rules at any point during the elections.
+
+
+
+ Timeline
+ (all deadlines are 23:59 UTC)
+
+ -
+ 2012-05-07: Announcements and list of candidates opens.
+
+ -
+ 2012-05-20: Last day to announce candidacies, submit summary statements.
+
+ -
+ 2012-05-23: Final list of candidates.
+
+ -
+ 2012-05-27: Instructions mailed to eligible voters, voting begins.
+
+ -
+ 2012-06-10: Voting closes.
+
+ -
+ 2012-06-12: Preliminary results are announced.
+
+ -
+ 2012-06-19: Last day to challenge preliminary results.
+
+
+
+
+
diff --git a/foundation.gnome.org/vote/2012/timeline.ics b/foundation.gnome.org/vote/2012/timeline.ics
new file mode 100644
index 0000000..e75e2ab
--- /dev/null
+++ b/foundation.gnome.org/vote/2012/timeline.ics
@@ -0,0 +1,79 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:20110504T161927Z-98567@xbox
+DTSTART;VALUE=DATE:20120507
+DTEND;VALUE=DATE:20120508
+DESCRIPTION:If you are a member of the GNOME Foundation and are interested
+ in running for election\, you may nominate yourself by sending an e-mail
+ to foundation-announce@gnome.org with your name\, e-mail address\, corpora
+ te affiliation (if any)\, and a description of why you'd like to serve\, b
+ efore 2012-05-20 (23:59 UTC).\n You should also send a summary of your
+ candidacy announcement (75 words or less) to elections@gnome.org. If you
+ are not yet a GNOME Foundation member and would like to stand for election
+ \, you must first apply for membership and be accepted to be eligible to r
+ un. (You may\, however\, announce your candidacy prior to formal acceptanc
+ e of your application\; should your application not be accepted\, you will
+ not be included in the list of candidates.)\n
+SUMMARY:Announcements and list of candidates opens
+END:VEVENT
+BEGIN:VEVENT
+UID:20110504T161927Z-2533@xbox
+DTSTART;VALUE=DATE:20120520
+DTEND;VALUE=DATE:20120521
+DESCRIPTION:If you are a member of the GNOME Foundation and are interested
+ in running for election\, you may nominate yourself by sending an e-mail
+ to foundation-announce@gnome.org with your name\, e-mail address\, corpora
+ te affiliation (if any)\, and a description of why you'd like to serve\, b
+ efore 2012-05-20 (23:59 UTC).\n You should also send a summary of your
+ candidacy announcement (75 words or less) to elections@gnome.org. If you
+ are not yet a GNOME Foundation member and would like to stand for election
+ \, you must first apply for membership and be accepted to be eligible to r
+ un. (You may\, however\, announce your candidacy prior to formal acceptanc
+ e of your application\; should your application not be accepted\, you will
+ not be included in the list of candidates.)\n
+SUMMARY:List of candidates closed
+END:VEVENT
+BEGIN:VEVENT
+UID:20110504T161927Z-67367@xbox
+DTSTART;VALUE=DATE:20120523
+DTEND;VALUE=DATE:20120524
+DESCRIPTION:You may now start to send your questions to the candidates
+SUMMARY:List of candidates announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20110504T161927Z-36748@xbox
+DTSTART;VALUE=DATE:20120527
+DTEND;VALUE=DATE:20120528
+DESCRIPTION:Please read your email and follow these instructions and submi
+ t your vote by 2012-06-10
+SUMMARY:Instructions to vote are sent
+END:VEVENT
+BEGIN:VEVENT
+UID:20110504T161927Z-82792@xbox
+DTSTART;VALUE=DATE:20120610
+DTEND;VALUE=DATE:20120611
+DESCRIPTION:Preliminary results are announced on 2012-06-12
+SUMMARY:Votes must be returned
+END:VEVENT
+BEGIN:VEVENT
+UID:20110504T161927Z-79881@xbox
+DTSTART;VALUE=DATE:20120612
+DTEND;VALUE=DATE:20120613
+DESCRIPTION:The preliminary results can be challenged until 2012-06-19
+SUMMARY:Preliminary results are announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20110504T161927Z-71057@xbox
+DTSTART;VALUE=DATE:20120619
+DTEND;VALUE=DATE:20120620
+DESCRIPTION:If there weren't any challenges\, preliminary results are vali
+ d
+SUMMARY:Challenges to the results closed
+END:VEVENT
+X-WR-TIMEZONE:UTC
+END:VCALENDAR
+
diff --git a/foundation.gnome.org/vote/2012/voting-instructions.txt b/foundation.gnome.org/vote/2012/voting-instructions.txt
new file mode 100644
index 0000000..e5028d8
--- /dev/null
+++ b/foundation.gnome.org/vote/2012/voting-instructions.txt
@@ -0,0 +1,35 @@
+tobiasmue@gnome.org
+GNOME Foundation Board election - voting instructions
+
+Dear
+
+The election of the GNOME Foundation Board is now open.
+
+Voting will run from 2012-05-27 (today) until 2010-06-10, 23:59 UTC.
+
+To vote, please go to http://foundation.gnome.org/vote/vote.php?id=16
+and follow the instructions there.
+
+A list of candidates and their reasons for running is available at
+http://foundation.gnome.org/elections/2012/candidates.html
+
+When instructed to do so, enter the following details:
+
+ E-mail:
+ Vote token:
+
+The election has 4 steps - first, you must identify yourself using the
+voting token above. Then select your preferred candidates in order of
+preference. A third step will show you your choice, and ask you to
+confirm or return to the previous step. Finally, after confirming your
+choice, a unique identifier will be given to you which will allow you to
+verify after the election that your vote was counted correctly. To ensure
+anonymity, no link will be kept between this token and your identifiers,
+so please keep this token safe. Once you have voted, you will not be able
+to vote again.
+
+Thank you for your vote!
+
+Regards,
+ Tobias Mueller
+ on behalf of the GNOME Membership and Elections Commitee
diff --git a/foundation.gnome.org/vote/Makefile.am b/foundation.gnome.org/vote/Makefile.am
index 2c65430..9aa2d46 100644
--- a/foundation.gnome.org/vote/Makefile.am
+++ b/foundation.gnome.org/vote/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = include 2004-10 2005-10 2000 2001 2002 2003 2004 2005 2006 2007 2009 2010 2011
+SUBDIRS = include 2004-10 2005-10 2000 2001 2002 2003 2004 2005 2006 2007 2009 2010 2011 2012
urlpath = /vote
diff --git a/foundation.gnome.org/vote/index.wml b/foundation.gnome.org/vote/index.wml
index 5559ca9..5b85b16 100644
--- a/foundation.gnome.org/vote/index.wml
+++ b/foundation.gnome.org/vote/index.wml
@@ -27,6 +27,7 @@