diff --git a/src/com/android/contacts/editor/CompactKindSectionView.java b/src/com/android/contacts/editor/CompactKindSectionView.java
index a5f159c..448e7c5 100644
--- a/src/com/android/contacts/editor/CompactKindSectionView.java
+++ b/src/com/android/contacts/editor/CompactKindSectionView.java
@@ -101,7 +101,7 @@
      * Whether a new empty editor is added is controlled by {@link #setShowOneEmptyEditor} and
      * {@link #setHideWhenEmpty}.
      */
-    private final class NonNameEditorListener implements Editor.EditorListener {
+    private class NonNameEditorListener implements Editor.EditorListener {
 
         @Override
         public void onRequest(int request) {
@@ -124,6 +124,27 @@
         }
     }
 
+    private class EventEditorListener extends NonNameEditorListener {
+
+        @Override
+        public void onRequest(int request) {
+            super.onRequest(request);
+        }
+
+        @Override
+        public void onDeleteRequested(Editor editor) {
+            if (editor instanceof EventFieldEditorView){
+                final EventFieldEditorView delView = (EventFieldEditorView) editor;
+                if (delView.isBirthdayType() && mEditors.getChildCount() > 1) {
+                    final EventFieldEditorView bottomView = (EventFieldEditorView) mEditors
+                            .getChildAt(mEditors.getChildCount() - 1);
+                    bottomView.restoreBirthday();
+                }
+            }
+            super.onDeleteRequested(editor);
+        }
+    }
+
     private List<KindSectionData> mKindSectionDataList;
     private ViewIdGenerator mViewIdGenerator;
     private CompactRawContactsEditorView.Listener mListener;
@@ -241,8 +262,14 @@
                 addGroupEditorView(kindSectionData.getRawContactDelta(),
                         kindSectionData.getDataKind());
             } else {
-                final Editor.EditorListener editorListener = kindSectionData.isNicknameDataKind()
-                        ? new OtherNameKindEditorListener() : new NonNameEditorListener();
+                final Editor.EditorListener editorListener;
+                if (kindSectionData.isNicknameDataKind()) {
+                    editorListener = new OtherNameKindEditorListener();
+                } else if (kindSectionData.isEventDataKind()) {
+                    editorListener = new EventEditorListener();
+                } else {
+                    editorListener = new NonNameEditorListener();
+                }
                 for (ValuesDelta valuesDelta : kindSectionData.getValuesDeltas()) {
                     addNonNameEditorView(kindSectionData.getRawContactDelta(),
                             kindSectionData.getDataKind(), valuesDelta, editorListener);
@@ -461,8 +488,10 @@
             final RawContactDelta rawContactDelta =
                     mKindSectionDataList.get(0).getRawContactDelta();
             final ValuesDelta values = RawContactModifier.insertChild(rawContactDelta, dataKind);
+            final Editor.EditorListener editorListener = mKindSectionDataList.get(0)
+                    .isEventDataKind() ? new EventEditorListener() : new NonNameEditorListener();
             final View view = addNonNameEditorView(rawContactDelta, dataKind, values,
-                    new NonNameEditorListener());
+                    editorListener);
             showView(view, shouldAnimate);
         }
     }
diff --git a/src/com/android/contacts/editor/EventFieldEditorView.java b/src/com/android/contacts/editor/EventFieldEditorView.java
index 17e52a7..b8ded06 100644
--- a/src/com/android/contacts/editor/EventFieldEditorView.java
+++ b/src/com/android/contacts/editor/EventFieldEditorView.java
@@ -20,6 +20,8 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.View;
@@ -268,4 +270,24 @@
         final String column = getKind().fieldList.get(0).column;
         onFieldChanged(column, "");
     }
+
+    /**
+     * Sets the typeColumn of entry as TYPE_BIRTHDAY and calls rebuildValues() to refresh the view.
+     */
+    public void restoreBirthday() {
+        saveValue(getKind().typeColumn, Integer.toString(Event.TYPE_BIRTHDAY));
+        rebuildValues();
+    }
+
+    /**
+     * EventEditType Birthday:
+     * rawValue=3 labelRes=17039911 secondary=false specificMax=1 customColumn=null
+     * mYearOptional=true
+     */
+    public boolean isBirthdayType(){
+        final EventEditType eventType = getType();
+        return eventType.rawValue == Event.TYPE_BIRTHDAY && !eventType.secondary
+                && eventType.specificMax == 1 && eventType.customColumn == null
+                && eventType.isYearOptional();
+    }
 }
diff --git a/src/com/android/contacts/editor/KindSectionData.java b/src/com/android/contacts/editor/KindSectionData.java
index d46001a..33aeed2 100644
--- a/src/com/android/contacts/editor/KindSectionData.java
+++ b/src/com/android/contacts/editor/KindSectionData.java
@@ -24,6 +24,7 @@
 
 import android.provider.ContactsContract.CommonDataKinds.Nickname;
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.text.TextUtils;
 
 import java.util.Collections;
@@ -105,6 +106,10 @@
         return Nickname.CONTENT_ITEM_TYPE.equals(mDataKind.mimeType);
     }
 
+    public boolean isEventDataKind() {
+        return Event.CONTENT_ITEM_TYPE.equals(mDataKind.mimeType);
+    }
+
     public RawContactDelta getRawContactDelta() {
         return mRawContactDelta;
     }
