diff --git a/NEWS b/NEWS
index e07b758bbff04d5d48ef84f2d763eebc54d94340..f70dc7b48a7ab3c8ad77d40d5ade8b41c533119a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,32 @@
+v0.3.4 06-04-2013 Stephan Bosch <stephan@rename-it.nl>
+
+	* Changed error handling to be less of a nuisance for administrators. Strictly
+	  user-caused errors are only reported in user log. Some errors are logged as
+	  info instead.
+	* Sieve: Changed behavior of redirect in case of a duplicate message delivery
+	  or a mail loop. If a duplicate is detected the implicit keep is canceled,
+	  as though the redirect was successful. This prevents getting local
+	  deliveries. The original SMTP recipient is used when it is available to
+	  augment the entry in the LDA duplicate database. This way, duplicates are
+	  only detected when (initially) addressed to the same recipient.
+	+ Sieve vnd.dovecot.duplicate extension: added new features to the duplicate
+	  test, making it possible to manually compose the key value for duplicate
+	  checking. This extension is in the process of being standardized
+	  (https://tools.ietf.org/html/draft-bosch-sieve-duplicate-01).
+	+ Sieve date extension: generate warning when invalid date part is specified.
+	- Sieve editheader extension: fixed crash occuring when addheader :last was
+	  used.
+	- Sieve include extension: fixed missing error cleanup that caused a resource
+	  leak.
+	- Sieve vacation extension: fixed determination of From: address for when
+	  sieve_vacation_dont_check_recipient is active.
+	- Sieve tools: the -D option wasn't enabled and documented for all tools.
+	- Siev dict script storage: fixed potential segfault occuring when dict
+		initialization fails.
+	- ManageSieve: fixed bug in skipping of CRLF at end of AUTHENTICATE command.
+	- ManageSieve: fixed handling of unkown commands pre-login.
+	- Fixed compile on Mageia Linux.
+
 v0.3.3 18-09-2012 Stephan Bosch <stephan@rename-it.nl>
 
 	- Fixed compile against installed Dovecot headers. This was broken by the
diff --git a/TODO b/TODO
index e1211b868e0ba18bd7e20576ad578f1c386fccf7..81c876603e1d65aed3d58da029e75b665a9da785 100644
--- a/TODO
+++ b/TODO
@@ -1,21 +1,21 @@
-Current activities:
-
-* Implement generic Sieve script object that abstracts from its location and
-  add support for retrieving scripts from dict database.
-	- Implement infrastructure for loading a sequence of global scripts from
-	  a database (for sieve_before/sieve_after).
+Active development is moved to Pigeonhole v0.4 for Dovecot v2.2. The v0.3.x
+series for Dovecot v2.1 is maintained for bug fixes and small updates. Check
+http://hg.rename-it.nl/dovecot-2.2-pigeonhole/raw-file/tip/TODO for the most
+up-to-date TODO list.
 
 Parallel plugin-based efforts:
 
-* Implement plugin to pipe messages to external programs. Will probably be
-  merged with the main tree eventually.
 * Implement enotify xmpp method as a plugin.
 * Implement metadata and servermetadata extensions as a plugin.
 	- Compiles against dovecot metadata plugin, as currently developed by
 	  Dennis Schridde.
 
-Next (mostly in order of descending priority/precedence):
+Open TODO issues for this revision:
 
+* Implement generic Sieve script object that abstracts from its location and
+  add support for retrieving scripts from dict database.
+	- Implement infrastructure for loading a sequence of global scripts from
+	  a database (for sieve_before/sieve_after).
 * Make the sieve storage a base class with (possibly) various implementations,
   just like mail-storage. This aims to provide support for alternate types
   of script storage like LDAP or SQL database.
diff --git a/configure.in b/configure.in
index c12a3f5b5551e950183277f8fc6da3add616600f..0acbad757275c36e5f29fc309c226dfaf9e31046 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-AC_INIT([Pigeonhole], [0.3.3], [dovecot@dovecot.org], [dovecot-2.1-pigeonhole])
+AC_INIT([Pigeonhole], [0.3.4], [dovecot@dovecot.org], [dovecot-2.1-pigeonhole])
 AC_CONFIG_AUX_DIR([.])
 AC_CONFIG_SRCDIR([src])
 AC_CONFIG_MACRO_DIR([m4])