diff --git a/res/values/styles.xml b/res/values/styles.xml
index c19ee5b..323336d 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -176,11 +176,15 @@
         <attr name="layout_narrowParentWidth" format="dimension"/>
         <attr name="layout_narrowWidth" format="dimension"/>
         <attr name="layout_narrowLeftMargin" format="dimension"/>
+        <attr name="layout_narrowLeftPadding" format="dimension"/>
         <attr name="layout_narrowRightMargin" format="dimension"/>
+        <attr name="layout_narrowRightPadding" format="dimension"/>
         <attr name="layout_wideParentWidth" format="dimension"/>
         <attr name="layout_wideWidth" format="dimension"/>
         <attr name="layout_wideLeftMargin" format="dimension"/>
+        <attr name="layout_wideLeftPadding" format="dimension"/>
         <attr name="layout_wideRightMargin" format="dimension"/>
+        <attr name="layout_wideRightPadding" format="dimension"/>
     </declare-styleable>
     
     <declare-styleable name="TransitionAnimationView">
diff --git a/src/com/android/contacts/widget/InterpolatingLayout.java b/src/com/android/contacts/widget/InterpolatingLayout.java
index 5900bf1..fb0c371 100644
--- a/src/com/android/contacts/widget/InterpolatingLayout.java
+++ b/src/com/android/contacts/widget/InterpolatingLayout.java
@@ -58,17 +58,25 @@
         public int narrowParentWidth;
         public int narrowWidth;
         public int narrowLeftMargin;
+        public int narrowLeftPadding;
         public int narrowRightMargin;
+        public int narrowRightPadding;
         public int wideParentWidth;
         public int wideWidth;
         public int wideLeftMargin;
+        public int wideLeftPadding;
         public int wideRightMargin;
+        public int wideRightPadding;
         private float widthMultiplier;
         private int widthConstant;
         private float leftMarginMultiplier;
         private int leftMarginConstant;
+        private float leftPaddingMultiplier;
+        private int leftPaddingConstant;
         private float rightMarginMultiplier;
         private int rightMarginConstant;
+        private float rightPaddingMultiplier;
+        private int rightPaddingConstant;
 
         public LayoutParams(Context c, AttributeSet attrs) {
             super(c, attrs);
@@ -80,16 +88,24 @@
                     R.styleable.InterpolatingLayout_Layout_layout_narrowWidth, -1);
             narrowLeftMargin = a.getDimensionPixelSize(
                     R.styleable.InterpolatingLayout_Layout_layout_narrowLeftMargin, -1);
+            narrowLeftPadding = a.getDimensionPixelSize(
+                    R.styleable.InterpolatingLayout_Layout_layout_narrowLeftPadding, -1);
             narrowRightMargin = a.getDimensionPixelSize(
                     R.styleable.InterpolatingLayout_Layout_layout_narrowRightMargin, -1);
+            narrowRightPadding = a.getDimensionPixelSize(
+                    R.styleable.InterpolatingLayout_Layout_layout_narrowRightPadding, -1);
             wideParentWidth = a.getDimensionPixelSize(
                     R.styleable.InterpolatingLayout_Layout_layout_wideParentWidth, -1);
             wideWidth = a.getDimensionPixelSize(
                     R.styleable.InterpolatingLayout_Layout_layout_wideWidth, -1);
             wideLeftMargin = a.getDimensionPixelSize(
                     R.styleable.InterpolatingLayout_Layout_layout_wideLeftMargin, -1);
+            wideLeftPadding = a.getDimensionPixelSize(
+                    R.styleable.InterpolatingLayout_Layout_layout_wideLeftPadding, -1);
             wideRightMargin = a.getDimensionPixelSize(
                     R.styleable.InterpolatingLayout_Layout_layout_wideRightMargin, -1);
+            wideRightPadding = a.getDimensionPixelSize(
+                    R.styleable.InterpolatingLayout_Layout_layout_wideRightPadding, -1);
 
             a.recycle();
 
@@ -106,12 +122,26 @@
                         * leftMarginMultiplier);
             }
 
+            if (narrowLeftPadding != -1) {
+                leftPaddingMultiplier = (float) (wideLeftPadding - narrowLeftPadding)
+                        / (wideParentWidth - narrowParentWidth);
+                leftPaddingConstant = (int) (narrowLeftPadding - narrowParentWidth
+                        * leftPaddingMultiplier);
+            }
+
             if (narrowRightMargin != -1) {
                 rightMarginMultiplier = (float) (wideRightMargin - narrowRightMargin)
                         / (wideParentWidth - narrowParentWidth);
                 rightMarginConstant = (int) (narrowRightMargin - narrowParentWidth
                         * rightMarginMultiplier);
             }
+
+            if (narrowRightPadding != -1) {
+                rightPaddingMultiplier = (float) (wideRightPadding - narrowRightPadding)
+                        / (wideParentWidth - narrowParentWidth);
+                rightPaddingConstant = (int) (narrowRightPadding - narrowParentWidth
+                        * rightPaddingMultiplier);
+            }
         }
 
         public LayoutParams(int width, int height) {
@@ -140,6 +170,11 @@
             }
         }
 
+        public int resolveLeftPadding(int parentSize) {
+            int w = (int) (parentSize * leftPaddingMultiplier) + leftPaddingConstant;
+            return w < 0 ? 0 : w;
+        }
+
         public int resolveRightMargin(int parentSize) {
             if (narrowRightMargin == -1) {
                 return rightMargin;
@@ -148,6 +183,11 @@
                 return w < 0 ? 0 : w;
             }
         }
+
+        public int resolveRightPadding(int parentSize) {
+            int w = (int) (parentSize * rightPaddingMultiplier) + rightPaddingConstant;
+            return w < 0 ? 0 : w;
+        }
     }
 
     @Override
@@ -248,6 +288,15 @@
                 gravity = Gravity.LEFT | Gravity.TOP;
             }
 
+            if (params.narrowLeftPadding != -1 || params.narrowRightPadding != -1) {
+                int leftPadding = params.narrowLeftPadding == -1 ? child.getPaddingLeft()
+                        : params.resolveLeftPadding(width);
+                int rightPadding = params.narrowRightPadding == -1 ? child.getPaddingRight()
+                        : params.resolveRightPadding(width);
+                child.setPadding(
+                        leftPadding, child.getPaddingTop(), rightPadding, child.getPaddingBottom());
+            }
+
             int leftMargin = params.resolveLeftMargin(width);
             int rightMargin = params.resolveRightMargin(width);
 
