diff --git a/m4/ipopt.m4 b/m4/ipopt.m4
index 1df26d222a6770878d8e04cdc8cab9dbe2ccce45..2477f9c1f849e0448003313d8e5f49968a17580b 100644
--- a/m4/ipopt.m4
+++ b/m4/ipopt.m4
@@ -30,20 +30,23 @@ AS_IF([test x$with_ipopt != xno], [
 
     IPOPT_LIB_PATH="$IPOPTROOT/lib"
 
-    # Check whether ipopt is installed at all
+    # Check for ipopt and set IPOPT_*
     export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$IPOPT_LIB_PATH/pkgconfig"
-    PKG_CHECK_EXISTS([ipopt], [
+    PKG_CHECK_MODULES([IPOPT], [ipopt], [
 	HAVE_IPOPT="1"
     ], [ dnl default rule would fail
 	AC_MSG_WARN([IPOpt not found in $IPOPTROOT])
     ])
 
+    dnl FIXME: We have two problems with the information provided by pkg-config:
+    dnl (1) What we would expect in IPOPT_CPPFLAGS (namely, -I<path>)
+    dnl     ends up in IPOPT_CFLAGS with ipopt 3.10.1
+    dnl (2) IPOPT_CFLAGS contain -I<prefix>/include/coin rather than
+    dnl     -I<prefix>/include. We currently include <coin/..> everywhere.
+    IPOPT_CPPFLAGS="-I$IPOPTROOT/include"
 
-    IPOPT_LDFLAGS="`PKG_CONFIG_PATH=$IPOPT_LIB_PATH/pkgconfig $PKG_CONFIG --libs-only-L ipopt`"
     LDFLAGS="$LDFLAGS $IPOPT_LDFLAGS"
-    IPOPT_CPPFLAGS="-I$IPOPTROOT/include"
     CPPFLAGS="$CPPFLAGS $IPOPT_CPPFLAGS"
-    IPOPT_LIBS="`PKG_CONFIG_PATH=$IPOPT_LIB_PATH/pkgconfig $PKG_CONFIG --libs-only-l ipopt`"
     LIBS="$LIBS $IPOPT_LIBS"
 
     AC_LANG_PUSH([C++])