diff --git a/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java b/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java
index e5bf607..d34c23d 100644
--- a/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java
+++ b/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf2/annotation/BeanImplementationListener.java
@@ -18,6 +18,7 @@
  */
 package org.apache.myfaces.scripting.jsf2.annotation;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.myfaces.config.RuntimeConfig;
 import org.apache.myfaces.config.element.NavigationRule;
 import org.apache.myfaces.config.impl.digester.elements.ManagedBean;
@@ -54,7 +55,6 @@
         return annotation.equals(javax.faces.bean.ManagedBean.class);
     }
 
-
     public void register(Class clazz, java.lang.annotation.Annotation ann) {
         String annotationName = ann.getClass().getName();
 
@@ -63,6 +63,9 @@
         javax.faces.bean.ManagedBean annCasted = (javax.faces.bean.ManagedBean) ann;
 
         String beanName = annCasted.name();
+        if (StringUtils.isBlank(beanName)) {
+            beanName = normalizeName(clazz.getName());
+        }
 
         beanName = beanName.replaceAll("\"", "");
         //we need to reregister for every bean due to possible managed prop
@@ -105,13 +108,13 @@
     private void handleManagedpropertiesCompiled(ManagedBean mbean, Field[] fields) {
         for (Field field : fields) {
             if (log.isLoggable(Level.FINEST)) {
-                log.log(Level.FINEST,"  Scanning field '" + field.getName() + "'");
+                log.log(Level.FINEST, "  Scanning field '" + field.getName() + "'");
             }
             javax.faces.bean.ManagedProperty property = (javax.faces.bean.ManagedProperty) field
                     .getAnnotation(javax.faces.bean.ManagedProperty.class);
             if (property != null) {
                 if (log.isLoggable(Level.FINE)) {
-                    log.log(Level.FINE,"  Field '" + field.getName()
+                    log.log(Level.FINE, "  Field '" + field.getName()
                             + "' has a @ManagedProperty annotation");
                 }
 
@@ -156,6 +159,19 @@
         return mbean == null || !mbean.getManagedBeanClassName().equals(clazz.getName());
     }
 
+    /**
+     * name normalizer for automated name mapping
+     * (aka if no name attribute is given in the annotation)
+     *
+     * @param className the classname to be mapped (can be with package=
+     * @return the normalized jsf bean name
+     */
+    private String normalizeName(String className) {
+        String name = className.substring(className.lastIndexOf(".") + 1);
+
+        return name.substring(0, 1).toLowerCase() + name.substring(1);
+    }
+
     @SuppressWarnings("unchecked")
     public void purge(String className) {
         RuntimeConfig config = getRuntimeConfig();
diff --git a/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/instantbean/HelloBean.java b/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/instantbean/HelloBean.java
index e9572bb..cfeb03e 100644
--- a/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/instantbean/HelloBean.java
+++ b/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/instantbean/HelloBean.java
@@ -27,7 +27,7 @@
  * @version $Revision$ $Date$
  */
 
-@ManagedBean(name="hello")
+@ManagedBean
 @RequestScoped
 public class HelloBean {
     private String hello = "Hello world from an instant bean";
@@ -37,7 +37,7 @@
     }
 
     public String getHello() {
-        return hello + addedMethod();
+        return hello;
     }
 
     public void setHello(String hello) {
diff --git a/examples/myfaces20-example/src/main/webapp/helloWorld2.xhtml b/examples/myfaces20-example/src/main/webapp/helloWorld2.xhtml
index bcffbb8..ce00e66 100644
--- a/examples/myfaces20-example/src/main/webapp/helloWorld2.xhtml
+++ b/examples/myfaces20-example/src/main/webapp/helloWorld2.xhtml
@@ -10,7 +10,7 @@
 <ui:composition template="/template.xhtml">
     <ui:define name="body">
         <h1 style="color: yellow;">
-           <h:outputText value="#{hello.hello}" />  
+           <h:outputText value="#{helloBean.hello}" />  
         </h1>
     </ui:define>
 </ui:composition>
