diff --git a/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java b/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java
index 0907687..f8fea1d 100644
--- a/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java
+++ b/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf2/impl/navigation/CodiNavigationHandler.java
@@ -36,6 +36,7 @@
 import java.util.Set;
 import java.util.Map;
 import java.util.HashMap;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArraySet;
 
 import static org.apache.myfaces.extensions.cdi.core.api.util.ClassUtils.tryToLoadClassForName;
@@ -47,6 +48,9 @@
 {
     private Set<String> otherOutcomes = new CopyOnWriteArraySet<String>();
 
+    private Map<String, NavigationCase> viewConfigBasedNavigationCaseCache
+        = new ConcurrentHashMap<String, NavigationCase>();
+
     private final NavigationHandler wrapped;
     private final boolean deactivated;
     private final boolean addViewConfigsAsNavigationCase;
@@ -120,6 +124,13 @@
             {
                 String originalOutcome = outcome;
 
+                NavigationCase navigationCase = this.viewConfigBasedNavigationCaseCache.get(originalOutcome);
+
+                if (navigationCase != null)
+                {
+                    return navigationCase;
+                }
+
                 outcome = outcome.substring(6);
 
                 ViewConfigDescriptor entry = null;
@@ -146,14 +157,16 @@
 
                 if(entry != null)
                 {
-                    return new NavigationCase("*",
-                                              null,
-                                              null,
-                                              null,
-                                              entry.getViewId(),
-                                              null,
-                                              Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode()),
-                                              false);
+                    navigationCase = new NavigationCase("*",
+                                                        null,
+                                                        null,
+                                                        null,
+                                                        entry.getViewId(),
+                                                        null,
+                                                        Page.NavigationMode.REDIRECT.equals(entry.getNavigationMode()),
+                                                        false);
+                    this.viewConfigBasedNavigationCaseCache.put(originalOutcome, navigationCase);
+                    return navigationCase;
                 }
             }
             return ((ConfigurableNavigationHandler) this.wrapped).getNavigationCase(context, action, outcome);
