diff --git a/Config.hs b/Config.hs
--- a/Config.hs
+++ b/Config.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeSynonymInstances #-}
+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
 
 module Config (Option(..), getOption, defaultOption) where
 
diff --git a/Milter/Switch.hs b/Milter/Switch.hs
--- a/Milter/Switch.hs
+++ b/Milter/Switch.hs
@@ -3,7 +3,7 @@
 module Milter.Switch (milter) where
 
 import Control.Applicative
-import Control.Monad
+import Control.Monad (unless)
 import Data.ByteString.Lazy.Char8 (ByteString)
 import Data.IORef
 import MailSpec
diff --git a/rpf.cabal b/rpf.cabal
--- a/rpf.cabal
+++ b/rpf.cabal
@@ -1,5 +1,5 @@
 Name:                   rpf
-Version:                0.2.2
+Version:                0.2.3
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -18,10 +18,13 @@
 Extra-Source-Files:     README Test.hs
 Executable rpf
   Main-Is:              Main.hs
-  if impl(ghc >= 6.12)
-    GHC-Options:        -Wall -fno-warn-unused-do-bind
+  if impl(ghc >= 7)
+    GHC-Options:        -Wall -O2 -fno-warn-unused-do-bind -threaded
   else
-    GHC-Options:        -Wall
+    if impl(ghc >= 6.12)
+      GHC-Options:        -Wall -O2 -fno-warn-unused-do-bind
+    else
+      GHC-Options:        -Wall -O2
   Build-Depends:        base >= 4.0 && < 5, containers, bytestring,
                         hdaemonize, hslogger, parsec,
                         appar, c10k, iproute, dns, domain-auth
