diff --git a/src/com/android/contacts/FastTrackWindow.java b/src/com/android/contacts/FastTrackWindow.java
index 1252086..7758c87 100644
--- a/src/com/android/contacts/FastTrackWindow.java
+++ b/src/com/android/contacts/FastTrackWindow.java
@@ -40,6 +40,7 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Color;
+import android.graphics.drawable.BitmapDrawable;
 import android.net.Uri;
 import android.provider.Contacts.Phones;
 import android.text.SpannableStringBuilder;
@@ -64,6 +65,8 @@
 import android.view.ViewTreeObserver.OnScrollChangedListener;
 import android.view.accessibility.AccessibilityEvent;
 import android.widget.AbsListView;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.ListView;
@@ -88,7 +91,7 @@
  * Window that shows fast-track contact details for a specific
  * {@link Aggregate#_ID}.
  */
-public class FastTrackWindow implements Window.Callback, QueryCompleteListener, OnClickListener {
+public class FastTrackWindow implements Window.Callback, QueryCompleteListener, OnClickListener, AbsListView.OnItemClickListener {
     private static final String TAG = "FastTrackWindow";
 
     /**
@@ -130,6 +133,7 @@
     private TextView mContent;
     private TextView mPublished;
     private ViewGroup mTrack;
+    private ListView mResolveList;
 
     // TODO: read from a resource somewhere
     private static final int mHeight = 138;
@@ -196,6 +200,7 @@
         mContent = (TextView)mWindow.findViewById(R.id.content);
         mPublished = (TextView)mWindow.findViewById(R.id.published);
         mTrack = (ViewGroup)mWindow.findViewById(R.id.fasttrack);
+        mResolveList = (ListView)mWindow.findViewById(android.R.id.list);
 
         // TODO: move generation of mime-type cache to more-efficient place
         generateMappingCache();
@@ -338,9 +343,9 @@
 
         // Reset all views to prepare for possible recycling
         mPhoto.setImageResource(R.drawable.ic_contact_list_picture);
-        mPresence.setImageDrawable(null);
+//        mPresence.setImageDrawable(null);
+//        mPublished.setText(null);
         mContent.setText(null);
-        mPublished.setText(null);
 
         mActions.clear();
         mTrack.removeAllViews();
@@ -593,22 +598,31 @@
         // Add direct intent if single child, otherwise flag for multiple
         LinkedList<ActionInfo> children = mActions.get(mimeType);
         ActionInfo firstInfo = children.get(0);
-        if (children.size() == 1) {
+//        if (children.size() == 1) {
             view.setTag(firstInfo.buildIntent());
-        } else {
-            view.setTag(mimeType);
-        }
+//        } else {
+//            view.setTag(children);
+//        }
 
         // Set icon and listen for clicks
         view.setImageBitmap(firstInfo.mapping.icon);
         view.setOnClickListener(this);
         return view;
     }
+    
+    /** {@inheritDoc} */
+    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+        // Pass list item clicks along so that Intents are handled uniformly
+        onClick(view);
+    }
 
     /** {@inheritDoc} */
     public void onClick(View v) {
         final Object tag = v.getTag();
         if (tag instanceof Intent) {
+            // Hide the resolution list, if present
+            mResolveList.setVisibility(View.GONE);
+            
             // Incoming tag is concrete intent, so launch
             try {
                 mContext.startActivity((Intent)tag);
@@ -616,12 +630,48 @@
                 Log.w(TAG, NOT_FOUND);
                 Toast.makeText(mContext, NOT_FOUND, Toast.LENGTH_SHORT).show();
             }
-        } else if (tag instanceof String) {
-            // Incoming tag is a mime-type, so show resolution list
-            LinkedList<ActionInfo> children = mActions.get(tag);
-
-            // TODO: show drop-down resolution list
-            Log.d(TAG, "would show list between several options here");
+//        } else if (tag instanceof LinkedList) {
+//            // Incoming tag is a mime-type, so show resolution list
+//            final LinkedList<ActionInfo> children = (LinkedList<ActionInfo>)tag;
+//            Log.d(TAG, "found chidlren=" + children);
+//
+//            mResolveList.setVisibility(View.VISIBLE);
+//            mResolveList.setOnItemClickListener(this);
+//            mResolveList.setAdapter(new BaseAdapter() {
+//                public int getCount() {
+//                    return children.size();
+//                }
+//
+//                public Object getItem(int position) {
+//                    return children.get(position);
+//                }
+//
+//                public long getItemId(int position) {
+//                    return position;
+//                }
+//
+//                public View getView(int position, View convertView, ViewGroup parent) {
+//                    if (convertView == null) {
+//                        convertView = mInflater.inflate(R.layout.fasttrack_resolve_item, parent, false);
+//                    }
+//                    
+//                    // Set action title based on summary value
+//                    ActionInfo info = (ActionInfo)getItem(position);
+//                    TextView textView = (TextView)convertView;
+//                    textView.setText(info.summaryValue);
+//                    textView.setTag(info.buildIntent());
+//                    textView.setCompoundDrawablesWithIntrinsicBounds(
+//                            new BitmapDrawable(info.mapping.icon), null, null, null);
+//                    
+//                    return convertView;
+//                }
+//            });
+//            
+//            // Make sure we resize to make room for ListView
+//            onWindowAttributesChanged(mWindow.getAttributes());
+//
+//            // TODO: show drop-down resolution list
+//            Log.d(TAG, "would show list between several options here");
 
         }
     }
diff --git a/src/com/android/contacts/ShowOrCreateActivity.java b/src/com/android/contacts/ShowOrCreateActivity.java
index 059a7ee..aa7a1c5 100755
--- a/src/com/android/contacts/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/ShowOrCreateActivity.java
@@ -86,7 +86,7 @@
     private static final String EXTRA_X = "pixel_x";
     private static final String EXTRA_Y = "pixel_y";
     private static final String EXTRA_HEIGHT = "pixel_height";
-    private static final int DEFAULT_X = 0;
+    private static final int DEFAULT_X = 30;
     private static final int DEFAULT_Y = 90;
     private static final int DEFAULT_HEIGHT = 30;
 
