Index: src/java/org/apache/fop/layoutmgr/BlockLevelEventProducer.java
===================================================================
--- src/java/org/apache/fop/layoutmgr/BlockLevelEventProducer.java	(revision 757381)
+++ src/java/org/apache/fop/layoutmgr/BlockLevelEventProducer.java	(working copy)
@@ -93,13 +93,14 @@
      * @param amount the amount by which the contents overflow (in mpt)
      * @param clip true if the content will be clipped
      * @param canRecover indicates whether FOP can recover from this problem and continue working
+     * @param isError indicates whether an error message should be issued
      * @param loc the location of the error or null
      * @throws LayoutException the layout error provoked by the method call
-     * @event.severity FATAL
+     * @event.severity WARN
      */
     void viewportOverflow(Object source, String elementName,
-            int amount, boolean clip, boolean canRecover,
-            Locator loc) throws LayoutException;
+            int amount, boolean clip, boolean canRecover, boolean isError,
+            Locator loc);
 
     /**
      * Contents overflow a region viewport.
Index: src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
===================================================================
--- src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java	(revision 757381)
+++ src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java	(working copy)
@@ -378,9 +378,10 @@
             if (contentOverflows) {
                 BlockLevelEventProducer eventProducer = BlockLevelEventProducer.Provider.get(
                         getBlockContainerFO().getUserAgent().getEventBroadcaster());
-                boolean canRecover = (getBlockContainerFO().getOverflow() != EN_ERROR_IF_OVERFLOW);
+                boolean canRecover = true;
+                boolean isError = (getBlockContainerFO().getOverflow() == EN_ERROR_IF_OVERFLOW);
                 eventProducer.viewportOverflow(this, getBlockContainerFO().getName(),
-                        breaker.getOverflowAmount(), needClip(), canRecover,
+                        breaker.getOverflowAmount(), needClip(), canRecover, isError,
                         getBlockContainerFO().getLocator());
             }
         }
@@ -529,9 +530,10 @@
             if (!autoHeight & (contentOverflows)) {
                 BlockLevelEventProducer eventProducer = BlockLevelEventProducer.Provider.get(
                         getBlockContainerFO().getUserAgent().getEventBroadcaster());
-                boolean canRecover = (getBlockContainerFO().getOverflow() != EN_ERROR_IF_OVERFLOW);
+                boolean canRecover = true;
+                boolean isError = (getBlockContainerFO().getOverflow() == EN_ERROR_IF_OVERFLOW);
                 eventProducer.viewportOverflow(this, getBlockContainerFO().getName(),
-                        breaker.getOverflowAmount(), needClip(), canRecover,
+                        breaker.getOverflowAmount(), needClip(), canRecover, isError,
                         getBlockContainerFO().getLocator());
             }
         }
Index: src/java/org/apache/fop/events/FOPEventListenerProxy.java
===================================================================
--- src/java/org/apache/fop/events/FOPEventListenerProxy.java	(revision 757381)
+++ src/java/org/apache/fop/events/FOPEventListenerProxy.java	(working copy)
@@ -66,6 +66,11 @@
                 //Reduce severity if FOP can recover
                 event.setSeverity(EventSeverity.WARN);
             }
+            Boolean isError = (Boolean)event.getParam("isError");
+            if (Boolean.TRUE.equals(isError)) {
+                //Increase severity as specified by user
+                event.setSeverity(EventSeverity.ERROR);
+            }
         }
         this.delegate.processEvent(event);
     }
