diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,7 @@
+Version 1.20
+------------
+  * bugfixes for #if defined(FOO) && FOO(a,b)
+
 Version 1.19
 ------------
   * expose more of the cpphs API
diff --git a/Language/Preprocessor/Cpphs/CppIfdef.hs b/Language/Preprocessor/Cpphs/CppIfdef.hs
--- a/Language/Preprocessor/Cpphs/CppIfdef.hs
+++ b/Language/Preprocessor/Cpphs/CppIfdef.hs
@@ -216,16 +216,22 @@
 -- | Expansion of symbols.
 expandSymOrCall :: SymTab HashDefine -> TextParser String
 expandSymOrCall st =
-  do  sym <- parseSym
+  do sym <- parseSym
+     if sym=="defined" then do arg <- skip parseSym; convert sym [arg]
+                            <|>
+                            do arg <- skip $ parenthesis (do x <- skip parseSym;
+                                                             skip (return x))
+                               convert sym [arg]
+                            <|> convert sym []
+      else
       ( do  args <- parenthesis (commit $ fragment `sepBy` skip (isWord ","))
             args' <- flip mapM args $ \arg->
                          case runParser (preExpand st) arg of
                              (Left msg, _) -> fail msg
                              (Right s, _)  -> return s
             convert sym args'
-        <|>
-        if (sym=="defined") then do arg <- skip parseSym; convert sym [arg]
-                            else convert sym [] )
+        <|> convert sym []
+      )
   where
     fragment = many1 (satisfy (`notElem`",)"))
     convert "defined" [arg] =
@@ -238,14 +244,16 @@
     convert sym args =
       case lookupST sym st of
         Nothing  -> if null args then return sym
-                    else fail (disp sym args++" is not a defined macro")
+                    else return "0"
+                 -- else fail (disp sym args++" is not a defined macro")
         Just (a@SymbolReplacement{}) -> do reparse (replacement a)
                                            return ""
         Just (a@MacroExpansion{})    -> do reparse (expandMacro a args False)
                                            return ""
         Just (a@AntiDefined{})       ->
                     if null args then return sym
-                    else fail (disp sym args++" explicitly undefined with -U")
+                    else return "0"
+                 -- else fail (disp sym args++" explicitly undefined with -U")
     disp sym args = let len = length args
                         chars = map (:[]) ['a'..'z']
                     in sym ++ if null args then ""
diff --git a/README b/README
--- a/README
+++ b/README
@@ -30,7 +30,7 @@
 
 COPYRIGHT
 ---------
-Copyright (c) 2004-2015 Malcolm Wallace (Malcolm.Wallace@me.com)
+Copyright (c) 2004-2016 Malcolm Wallace (Malcolm.Wallace@me.com)
 
 
 LICENCE
diff --git a/cpphs.cabal b/cpphs.cabal
--- a/cpphs.cabal
+++ b/cpphs.cabal
@@ -1,6 +1,6 @@
 Name: cpphs
-Version: 1.19.3
-Copyright: 2004-2015, Malcolm Wallace
+Version: 1.20
+Copyright: 2004-2016, Malcolm Wallace
 License: LGPL
 License-File: LICENCE-LGPL
 Cabal-Version: >= 1.6
diff --git a/docs/index.html b/docs/index.html
--- a/docs/index.html
+++ b/docs/index.html
@@ -198,12 +198,11 @@
 <b>Current stable version:</b>
 
 <p>
-cpphs-1.19.3, release date 2015-08-23<br>
+cpphs-1.20, release date 2016-03-04<br>
 By HTTP:
 <a href="http://hackage.haskell.org/package/cpphs">Hackage</a>.
 <ul>
-<li> bugfix for hlint ticket #161, for
-     the interaction of --unlit and --linepragma options
+<li> bugfix for #if defined(FOO) &amp;&amp; FOO(a,b)
 </ul>
 
 <p>
@@ -227,6 +226,15 @@
 <b>Older versions:</b>
 
 <p>
+cpphs-1.19.3, release date 2015-08-23<br>
+By HTTP:
+<a href="http://hackage.haskell.org/package/cpphs">Hackage</a>.
+<ul>
+<li> bugfix for hlint ticket #161, for
+     the interaction of --unlit and --linepragma options
+</ul>
+
+<p>
 cpphs-1.19.2, release date 2015-07-31<br>
 By HTTP:
 <a href="http://hackage.haskell.org/package/cpphs">Hackage</a>.
@@ -753,7 +761,7 @@
         Malcolm.Wallace@me.com</a> 
 </ul>
 
-<p><b>Copyright:</b> &copy; 2004-2015 Malcolm Wallace
+<p><b>Copyright:</b> &copy; 2004-2016 Malcolm Wallace
 
 <p><b>License:</b> The library modules in cpphs are distributed under
 the terms of the LGPL (see file <a href="LICENCE-LGPL">LICENCE-LGPL</a>
