diff --git a/m4/albert-check.m4 b/m4/albert-check.m4
index b5b9c9694b9888883db02e2543b614a39574def6..246c668c2e4514b335fa33721ece117e59dc7945 100644
--- a/m4/albert-check.m4
+++ b/m4/albert-check.m4
@@ -86,47 +86,25 @@ dnl Now check for libALBERT_XXX itself
 dnl
 ALBERT_LIB_$1$2=ALBERT$1$2_${ALBERT_DEBUG}${ELINDEX}
 ALBERT_LIB_$1$2_C=ac_cv_lib_ALBERT$1$2_${ALBERT_DEBUG}${ELINDEX}
-ALBERT_GFX_LIBS_$1$2=""
-AC_CHECK_LIB($ALBERT_LIB_$1$2, main,
-             [ALBERT_LIBS_$1$2="-L$ALBERT_LIB_PATH -l$ALBERT_LIB_$1$2 $csolver_LIB"],,
-             $csolver_LIB)
-if test "x$ALBERT_LIBS_$1$2" = "x" ; then
-  if test "x$OpenGL_LIB" = "x" ; then :; else
-    AC_MSG_NOTICE([Trying again with OpenGL])
-    ALBERT_GFX_LIBS_$1$2="$OpenGL_LIB ${X_LIB} -lX11"
-    eval "unset ${ALBERT_LIB_$1$2_C}___main"
-    AC_CHECK_LIB($ALBERT_LIB_$1$2, main,
-	         [ALBERT_LIBS_$1$2="-L$ALBERT_LIB_PATH -l$ALBERT_LIB_$1$2 $csolver_LIB"],,
-	         $csolver_LIB $ALBERT_GFX_LIBS_$1$2)
-    if test "x$ALBERT_LIBS_$1$2" = "x" && \
-       test "x$gltools_LIB" != "x" ; then
-      AC_MSG_NOTICE([Trying again with gltools])
-      eval "unset ${ALBERT_LIB_$1$2_C}___main"
-      ALBERT_GFX_LIBS_$1$2="$gltools_LIB $OpenGL_LIB ${X_LIB} -lX11"	
-      AC_CHECK_LIB($ALBERT_LIB_$1$2, main,
-	          [ALBERT_LIBS_$1$2="-L$ALBERT_LIB_PATH -l$ALBERT_LIB_$1$2 $csolver_LIB"],,
-	           $csolver_LIB $ALBERT_GFX_LIBS_$1$2)
-    fi
-    if test "x$ALBERT_LIBS_$1$2" = "x" && \
-       test "x$PLOT_LIB" != "x" ; then
-      AC_MSG_NOTICE([Trying again with PLOTansi])
-      eval "unset ${ALBERT_LIB_$1$2_C}___main"
-      ALBERT_GFX_LIBS_$1$2="$PLOT_LIB $OpenGL_LIB ${X_LIB} -lX11"	
-      AC_CHECK_LIB($ALBERT_LIB_$1$2, main,
-	          [ALBERT_LIBS_$1$2="-L$ALBERT_LIB_PATH -l$ALBERT_LIB_$1$2 $csolver_LIB"],,
-	           $csolver_LIB $ALBERT_GFX_LIBS_$1$2)
-    fi
-    if test "x$ALBERT_LIBS_$1$2" = "x" && \
-       test "x$PLOT_LIB" != "x" && \
-       test "x$gltools_LIB" != "x" ; then
-      AC_MSG_NOTICE([Trying again with PLOTansi AND gltools])
-      eval "unset ${ALBERT_LIB_$1$2_C}___main"
-      ALBERT_GFX_LIBS_$1$2="$gltools_LIB $PLOT_LIB $OpenGL_LIB ${X_LIB} -lX11"
-      AC_CHECK_LIB($ALBERT_LIB_$1$2, main,
-		  [ALBERT_LIBS_$1$2="-L$ALBERT_LIB_PATH -l$ALBERT_LIB_$1$2 $csolver_LIB"],,
-	           $csolver_LIB $ALBERT_GFX_LIBS_$1$2)
-    fi
-  fi
+AC_CACHE_CHECK([for additional libraries needed to link],
+	[ac_cv_libalbert$1$2_gfxlibs],
+	[ac_cv_libalbert$1$2_gfxlibs=unset
+	for GFX_LIBS in	"" \
+			"$OpenGL_LIB ${X_LIB} -lX11" \
+			"$gltools_LIB $OpenGL_LIB ${X_LIB} -lX11" \
+			"$PLOT_LIB $OpenGL_LIB ${X_LIB} -lX11" \
+			"$gltools_LIB $PLOT_LIB $OpenGL_LIB ${X_LIB} -lX11"; do
+	  eval "unset ${ALBERT_LIB_$1$2_C}___main"
+	  AC_CHECK_LIB($ALBERT_LIB_$1$2, main,
+	  [ac_cv_libalbert$1$2_gfxlibs="$GFX_LIBS"
+	  break],,
+	  [$csolver_LIB $GFX_LIBS])
+	done])
+
+if test "$ac_cv_libalbert$1$2_gfxlibs" = unset; then
+	AC_MSG_ERROR([Unable to link a program with lib$ALBERT_LIB_$1$2!])
+else
+	ALBERT_LIBS_$1$2="-L$ALBERT_LIB_PATH -l$ALBERT_LIB_$1$2 $csolver_LIB $ac_cv_libalbert$1$2_gfxlibs"
 fi
 AC_SUBST([ALBERT_LIBS_$1$2])
 dnl