diff --git a/res/layout/recurrencepicker.xml b/res/layout/recurrencepicker.xml
index cfe4b6a..9ad5a0d 100644
--- a/res/layout/recurrencepicker.xml
+++ b/res/layout/recurrencepicker.xml
@@ -223,6 +223,7 @@
                             android:layout_height="wrap_content"
                             android:layout_gravity="center_vertical"
                             android:gravity="bottom"
+                            android:singleLine="true"
                             android:layout_marginBottom="-3dp"
                             android:visibility="gone" />
 
@@ -234,6 +235,8 @@
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:layout_gravity="center"
+                            android:singleLine="true"
+                            android:minWidth="80dp"
                             android:contentDescription="@string/acessibility_recurrence_choose_end_date_description"
                             android:gravity="center_horizontal|bottom"
                             android:layout_marginTop="3dp"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5a71aae..49bcf87 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -718,16 +718,16 @@
     <!-- Repeat an monthly event on the same day of every month [CHAR LIMIT=20] -->
     <string name="recurrence_month_pattern_by_day">on the same day each month</string>
 
-    <!-- Specifies that a repeating event to repeat forever (based on the defined frequency) instead of ending at a future date[CHAR LIMIT=25] -->
+    <!-- Specifies that a repeating event to repeat forever (based on the defined frequency) instead of ending at a future date[CHAR LIMIT=20] -->
     <string name="recurrence_end_continously">Forever</string>
     <!-- Specifies that a repeating event to repeat until a certain date[CHAR LIMIT=25] -->
     <string name="recurrence_end_date_label">Until a date</string>
-    <!-- Specifies that a repeating event to repeat until a certain date[CHAR LIMIT=25] -->
+    <!-- Specifies that a repeating event to repeat until a certain date[CHAR LIMIT=20] -->
     <string name="recurrence_end_date">Until <xliff:g id="date">%s</xliff:g></string>
     <!-- Specifies that a repeating event to repeat for a number of times. A repeating event can repeat forever, repeat in a certain frequency until a certain date, or repeat for a number of times. e.g. repeat 10 times and stop. This string is for the last case [CHAR LIMIT=25] -->
     <string name="recurrence_end_count_label">For a number of events</string>
 
-    <!-- Specifies that a repeating event should repeat for a certain number of iterations. -->
+    <!-- Specifies that a repeating event should repeat for a certain number of iterations. [CHAR LIMIT=20]-->
     <plurals name="recurrence_end_count">
         <item quantity="one">For <xliff:g id="event_count">%d</xliff:g> event</item>
         <item quantity="other">For <xliff:g id="event_count">%d</xliff:g> events</item>
diff --git a/src/com/android/calendar/recurrencepicker/RecurrencePickerDialog.java b/src/com/android/calendar/recurrencepicker/RecurrencePickerDialog.java
index 580d211..a11591f 100644
--- a/src/com/android/calendar/recurrencepicker/RecurrencePickerDialog.java
+++ b/src/com/android/calendar/recurrencepicker/RecurrencePickerDialog.java
@@ -34,8 +34,8 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
-import android.view.ViewGroup.LayoutParams;
 import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
 import android.view.Window;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemSelectedListener;
@@ -56,7 +56,6 @@
 
 import com.android.calendar.R;
 import com.android.calendar.Utils;
-import com.android.calendar.CalendarController.ViewType;
 import com.android.calendarcommon2.EventRecurrence;
 import com.android.datetimepicker.date.DatePickerDialog;
 
@@ -1012,17 +1011,9 @@
                 mIntervalPreText.setText("");
             } else {
                 int postTextStart = markerStart + INTERVAL_COUNT_MARKER.length();
-                if (postTextStart < intervalString.length() &&
-                        intervalString.charAt(postTextStart) == ' ') {
-                    postTextStart++;
-                }
-                mIntervalPostText.setText(intervalString.subSequence(postTextStart,
-                        intervalString.length()));
-
-                if (intervalString.charAt(markerStart - 1) == ' ') {
-                    markerStart--;
-                }
-                mIntervalPreText.setText(intervalString.subSequence(0, markerStart));
+                mIntervalPostText.setText(intervalString.substring(postTextStart,
+                        intervalString.length()).trim());
+                mIntervalPreText.setText(intervalString.substring(0, markerStart).trim());
             }
         }
     }
@@ -1042,12 +1033,8 @@
                 Log.e(TAG, "No text to put in to recurrence's end spinner.");
             } else {
                 int postTextStart = markerStart + END_COUNT_MARKER.length();
-                if (postTextStart < endString.length() &&
-                        endString.charAt(postTextStart) == ' ') {
-                    postTextStart++;
-                }
-                mPostEndCount.setText(endString.subSequence(postTextStart,
-                        endString.length()));
+                mPostEndCount.setText(endString.substring(postTextStart,
+                        endString.length()).trim());
             }
         }
     }
@@ -1256,10 +1243,7 @@
                             // so we'll just set the whole "Until a date" string.
                             item.setText(mEndDateLabel);
                         } else {
-                            if (mEndDateString.charAt(markerStart - 1) == ' ') {
-                                markerStart--;
-                            }
-                            item.setText(mEndDateString.subSequence(0, markerStart));
+                            item.setText(mEndDateString.substring(0, markerStart).trim());
                         }
                     }
                     break;
@@ -1279,11 +1263,8 @@
                             mHidePostEndCount = true;
                         } else {
                             int postTextStart = markerStart + END_COUNT_MARKER.length();
-                            if (endString.charAt(postTextStart) == ' ') {
-                                postTextStart++;
-                            }
-                            mPostEndCount.setText(endString.subSequence(postTextStart,
-                                    endString.length()));
+                            mPostEndCount.setText(endString.substring(postTextStart,
+                                    endString.length()).trim());
                             // In case it's a recycled view that wasn't visible.
                             if (mModel.end == RecurrenceModel.END_BY_COUNT) {
                                 mPostEndCount.setVisibility(View.VISIBLE);
@@ -1291,7 +1272,7 @@
                             if (endString.charAt(markerStart - 1) == ' ') {
                                 markerStart--;
                             }
-                            item.setText(endString.subSequence(0, markerStart));
+                            item.setText(endString.substring(0, markerStart).trim());
                         }
                     }
                     break;
