diff --git a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
index 597ddb0..38bf211 100644
--- a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
@@ -20,7 +20,6 @@
 package cx.ring.client;
 
 import android.Manifest;
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
@@ -43,7 +42,6 @@
 import android.preference.PreferenceManager;
 import android.provider.MediaStore;
 import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.support.design.widget.FloatingActionButton;
 import android.support.design.widget.NavigationView;
 import android.support.v4.app.ActivityCompat;
@@ -52,22 +50,13 @@
 import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
-import android.transition.Explode;
-import android.transition.Fade;
 import android.util.Log;
-import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import com.google.zxing.BarcodeFormat;
-import com.google.zxing.WriterException;
-import com.google.zxing.common.BitMatrix;
-import com.google.zxing.qrcode.QRCodeWriter;
-
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -77,12 +66,12 @@
 
 import butterknife.BindView;
 import butterknife.ButterKnife;
-import butterknife.OnClick;
 import cx.ring.R;
 import cx.ring.fragments.AboutFragment;
 import cx.ring.fragments.AccountsManagementFragment;
 import cx.ring.fragments.ContactListFragment;
 import cx.ring.fragments.SettingsFragment;
+import cx.ring.fragments.ShareFragment;
 import cx.ring.fragments.SmartListFragment;
 import cx.ring.model.CallContact;
 import cx.ring.model.account.Account;
@@ -99,7 +88,7 @@
     static final String TAG = HomeActivity.class.getSimpleName();
 
     public static final int REQUEST_CODE_PREFERENCES = 1;
-    public static final int REQUEST_CODE_CREATE_ACCOUNT= 7;
+    public static final int REQUEST_CODE_CREATE_ACCOUNT = 7;
     public static final int REQUEST_CODE_CALL = 3;
     public static final int REQUEST_CODE_CONVERSATION = 4;
 
@@ -111,6 +100,8 @@
     private static final String HOME_TAG = "Home";
     private static final String ACCOUNTS_TAG = "Accounts";
     private static final String ABOUT_TAG = "About";
+    private static final String SETTINGS_TAG = "Prefs";
+    private static final String SHARE_TAG = "Share";
 
 
     private LocalService service;
@@ -217,27 +208,6 @@
         }
     }
 
-    /**
-     * Listener given to the MenuHeaderView to be notified when the QRCode is clicked
-     */
-    private View.OnClickListener mQRCodeClickListener = new View.OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            QRCodeFragment zoom = QRCodeFragment.newInstance(fMenuHead.getSelectedAccount().getShareURI());
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-                zoom.setEnterTransition(new Explode());
-                zoom.setReturnTransition(new Fade());
-            }
-
-            mNavigationDrawer.closeDrawers();
-            getSupportFragmentManager()
-                    .beginTransaction()
-                    .replace(R.id.drawer_layout, zoom)
-                    .addToBackStack(null)
-                    .commit();
-        }
-    };
-
     final BroadcastReceiver receiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -539,7 +509,6 @@
                 fMenuHead = new MenuHeaderView(HomeActivity.this);
                 fMenuHead.setCallbacks(service);
                 fMenu.addHeaderView(fMenuHead);
-                fMenuHead.setQRCodeListener(mQRCodeClickListener);
             }
 
             FragmentManager fragmentManager = getFragmentManager();
@@ -589,12 +558,12 @@
                 }
                 break;
             case REQUEST_CODE_PHOTO:
-                if(resultCode == RESULT_OK && data != null){
+                if (resultCode == RESULT_OK && data != null) {
                     fMenuHead.updatePhoto((Bitmap) data.getExtras().get("data"));
                 }
                 break;
             case REQUEST_CODE_GALLERY:
-                if(resultCode == RESULT_OK && data != null) {
+                if (resultCode == RESULT_OK && data != null) {
                     fMenuHead.updatePhoto(data.getData());
                 }
                 break;
@@ -642,12 +611,31 @@
             case R.id.menuitem_prefs:
                 this.goToSettings();
                 break;
+            case R.id.menuitem_share:
+                goToShare();
+                break;
             default:
                 return false;
         }
         return true;
     }
 
+    private void goToShare() {
+        if (fContent instanceof ShareFragment) {
+            return;
+        }
+        fContent = new ShareFragment();
+
+        if (fMenuHead != null) {
+            fMenuHead.registerAccountSelectionListener((MenuHeaderView.MenuHeaderAccountSelectionListener) fContent);
+        }
+
+        Bundle args = new Bundle();
+        args.putString(ShareFragment.ARG_URI, fMenuHead.getSelectedAccount().getShareURI());
+        fContent.setArguments(args);
+        getFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.main_frame, fContent, SHARE_TAG).addToBackStack(SHARE_TAG).commit();
+    }
+
     public void goToSettings() {
         if (fMenu != null) {
             MenuItem settingsItem = fMenu.getMenu().findItem(R.id.menuitem_prefs);
@@ -665,8 +653,8 @@
         getFragmentManager()
                 .beginTransaction()
                 .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
-                .replace(R.id.main_frame, fContent, "Prefs")
-                .addToBackStack("Prefs")
+                .replace(R.id.main_frame, fContent, SETTINGS_TAG)
+                .addToBackStack(SETTINGS_TAG)
                 .commit();
     }
 
@@ -750,90 +738,4 @@
             }
         }
     }
-
-    /**
-     * Inner fragment used to show a fullscreen QRCode
-     * Only used here, may need its own file if used somewhere else
-     */
-    public static class QRCodeFragment extends android.support.v4.app.Fragment {
-
-        private static String ARG_URI = "QRCodeFragment.URI";
-
-        @BindView(R.id.qr_image)
-        ImageView mQrImage;
-
-        /**
-         * Create a new QRCodeFragment
-         *
-         * @param uri the string representing the uri to be displayed
-         * @return a new QRCodeFragment instance
-         */
-        public static QRCodeFragment newInstance(String uri) {
-            Bundle args = new Bundle();
-            args.putString(ARG_URI, uri);
-            QRCodeFragment fragment = new QRCodeFragment();
-            fragment.setArguments(args);
-            return fragment;
-        }
-
-        @Nullable
-        @Override
-        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-            View rootView = inflater.inflate(R.layout.frag_qrcode, container, false);
-            ButterKnife.bind(this,rootView);
-
-            final String uriToShow = getArguments().getString(ARG_URI);
-
-            mQrImage.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
-                @Override
-                public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                    if (uriToShow != null) {
-                        Bitmap qrBitmap = encodeStringAsQrBitmap(uriToShow, mQrImage.getMeasuredWidth());
-                        mQrImage.setImageBitmap(qrBitmap);
-                    }
-                }
-            });
-            return rootView;
-        }
-
-        @OnClick(R.id.exit)
-        @SuppressWarnings("unused")
-        void onExitClickListener(View view) {
-            getFragmentManager().popBackStack();
-        }
-
-        /**
-         * @param input          uri to be displayed
-         * @param qrWindowPixels the ImageView size that will contain the QRcode
-         * @return the resulting image
-         */
-        public static Bitmap encodeStringAsQrBitmap(String input, int qrWindowPixels) {
-            QRCodeWriter qrWriter = new QRCodeWriter();
-            BitMatrix qrImageMatrix;
-            try {
-                qrImageMatrix = qrWriter.encode(input, BarcodeFormat.QR_CODE, qrWindowPixels, qrWindowPixels);
-            } catch (WriterException e) {
-                Log.e(TAG, "Error while encoding QR", e);
-                return null;
-            }
-
-            int qrImageWidth = qrImageMatrix.getWidth();
-            int qrImageHeight = qrImageMatrix.getHeight();
-            int[] pixels = new int[qrImageWidth * qrImageHeight];
-
-            final int BLACK = 0x00FFFFFF;
-            final int WHITE = 0xFFFFFFFF;
-
-            for (int row = 0; row < qrImageHeight; row++) {
-                int offset = row * qrImageWidth;
-                for (int column = 0; column < qrImageWidth; column++) {
-                    pixels[offset + column] = qrImageMatrix.get(column, row) ? BLACK : WHITE;
-                }
-            }
-
-            Bitmap bitmap = Bitmap.createBitmap(qrImageWidth, qrImageHeight, Bitmap.Config.ARGB_8888);
-            bitmap.setPixels(pixels, 0, qrImageWidth, 0, 0, qrImageWidth, qrImageHeight);
-            return bitmap;
-        }
-    }
 }
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ShareFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ShareFragment.java
new file mode 100644
index 0000000..248ab4b
--- /dev/null
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ShareFragment.java
@@ -0,0 +1,109 @@
+/*
+ *  Copyright (C) 2015-2016 Savoir-faire Linux Inc.
+ *
+ *  Authors: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
+ *           Alexandre Lision <alexandre.lision@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package cx.ring.fragments;
+
+import android.app.Fragment;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ImageView;
+
+import butterknife.BindString;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import cx.ring.R;
+import cx.ring.client.HomeActivity;
+import cx.ring.model.account.Account;
+import cx.ring.utils.QRCodeUtils;
+import cx.ring.views.MenuHeaderView;
+
+public class ShareFragment extends Fragment implements MenuHeaderView.MenuHeaderAccountSelectionListener {
+
+    public static final String ARG_URI = "ShareFragment.URI";
+
+    @BindView(R.id.qr_image)
+    ImageView mQrImage;
+
+    @BindView(R.id.share_button)
+    Button mShareButton;
+
+    @BindString(R.string.account_contact_me)
+    String mAccountCountactMe;
+
+    @BindString(R.string.share_via)
+    String mShareVia;
+
+    String mUriToShow;
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        ((HomeActivity) getActivity()).setToolbarState(false, R.string.menu_item_share);
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
+        final View inflatedView = inflater.inflate(R.layout.frag_share, parent, false);
+        ButterKnife.bind(this, inflatedView);
+
+        mUriToShow = getArguments().getString(ARG_URI);
+
+        mQrImage.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+            @Override
+            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                updateView();
+            }
+        });
+
+        return inflatedView;
+    }
+
+    private void updateView() {
+        if (!TextUtils.isEmpty(mUriToShow)) {
+            Bitmap qrBitmap = QRCodeUtils.encodeStringAsQrBitmap(mUriToShow, mQrImage.getMeasuredWidth());
+            mQrImage.setImageBitmap(qrBitmap);
+        }
+    }
+
+    @OnClick(R.id.share_button)
+    public void shareRingAccount() {
+        if (!TextUtils.isEmpty(mUriToShow)) {
+            Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
+            sharingIntent.setType("text/plain");
+            String shareBody = getString(R.string.account_share_body, mUriToShow);
+            sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, mAccountCountactMe);
+            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
+            startActivity(Intent.createChooser(sharingIntent, mShareVia));
+        }
+    }
+
+    @Override
+    public void accountSelected(Account account) {
+        mUriToShow = account.getShareURI();
+        updateView();
+    }
+}
diff --git a/ring-android/app/src/main/java/cx/ring/utils/QRCodeUtils.java b/ring-android/app/src/main/java/cx/ring/utils/QRCodeUtils.java
new file mode 100644
index 0000000..ce6008a
--- /dev/null
+++ b/ring-android/app/src/main/java/cx/ring/utils/QRCodeUtils.java
@@ -0,0 +1,69 @@
+/*
+ *  Copyright (C) 2004-2016 Savoir-faire Linux Inc.
+ *
+ *  Author: Thibault Wittemberg <thibault.wittemberg@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package cx.ring.utils;
+
+import android.graphics.Bitmap;
+import android.util.Log;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+
+public class QRCodeUtils {
+
+    private final static String TAG = QRCodeUtils.class.getName();
+
+    /**
+     * @param input          uri to be displayed
+     * @param qrWindowPixels the ImageView size that will contain the QRcode
+     * @return the resulting image
+     */
+    public static Bitmap encodeStringAsQrBitmap(String input, int qrWindowPixels) {
+        QRCodeWriter qrWriter = new QRCodeWriter();
+        BitMatrix qrImageMatrix;
+        try {
+            qrImageMatrix = qrWriter.encode(input, BarcodeFormat.QR_CODE, qrWindowPixels, qrWindowPixels);
+        } catch (WriterException e) {
+            Log.e(TAG, "Error while encoding QR", e);
+            return null;
+        }
+
+        int qrImageWidth = qrImageMatrix.getWidth();
+        int qrImageHeight = qrImageMatrix.getHeight();
+        int[] pixels = new int[qrImageWidth * qrImageHeight];
+
+        final int BLACK = 0x00FFFFFF;
+        final int WHITE = 0xFFFFFFFF;
+
+        for (int row = 0; row < qrImageHeight; row++) {
+            int offset = row * qrImageWidth;
+            for (int column = 0; column < qrImageWidth; column++) {
+                pixels[offset + column] = qrImageMatrix.get(column, row) ? BLACK : WHITE;
+            }
+        }
+
+        Bitmap bitmap = Bitmap.createBitmap(qrImageWidth, qrImageHeight, Bitmap.Config.ARGB_8888);
+        bitmap.setPixels(pixels, 0, qrImageWidth, 0, 0, qrImageWidth, qrImageHeight);
+        return bitmap;
+    }
+
+}
diff --git a/ring-android/app/src/main/java/cx/ring/views/MenuHeaderView.java b/ring-android/app/src/main/java/cx/ring/views/MenuHeaderView.java
index 7de246b..7a2fcfe 100644
--- a/ring-android/app/src/main/java/cx/ring/views/MenuHeaderView.java
+++ b/ring-android/app/src/main/java/cx/ring/views/MenuHeaderView.java
@@ -48,6 +48,7 @@
 import android.widget.TextView;
 
 import java.io.ByteArrayOutputStream;
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -76,15 +77,9 @@
     @BindView(R.id.account_selection)
     Spinner mSpinnerAccounts;
 
-    @BindView(R.id.share_btn)
-    ImageButton mShareBtn;
-
     @BindView(R.id.addaccount_btn)
     Button mNewAccountBtn;
 
-    @BindView(R.id.qr_image)
-    ImageButton mQrImage;
-
     @BindView(R.id.user_photo)
     ImageView mUserImage;
 
@@ -94,6 +89,8 @@
     private ImageView mProfilePhoto;
     private VCard mVCardProfile;
 
+    private List<WeakReference<MenuHeaderAccountSelectionListener>> mListeners;
+
     public MenuHeaderView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
         initViews();
@@ -118,12 +115,12 @@
                         mAccountAdapter.setSelectedAccount(pos);
                         service.setAccountOrder(mAccountAdapter.getAccountOrder());
                     }
-                    String shareUri = getSelectedAccount().getShareURI();
-                    if (!shareUri.isEmpty()) {
-                        Bitmap qrBitmap = HomeActivity.QRCodeFragment.encodeStringAsQrBitmap(shareUri, mQrImage.getWidth());
-                        mQrImage.setImageBitmap(qrBitmap);
-                    } else {
-                        mQrImage.setImageBitmap(null);
+
+                    for (WeakReference<MenuHeaderAccountSelectionListener> weakListener : mListeners) {
+                        MenuHeaderAccountSelectionListener listener = weakListener.get();
+                        if (listener != null) {
+                            listener.accountSelected(getSelectedAccount());
+                        }
                     }
                 }
 
@@ -136,6 +133,10 @@
         }
     }
 
+    public void registerAccountSelectionListener(MenuHeaderAccountSelectionListener listener) {
+        mListeners.add(new WeakReference<>(listener));
+    }
+
     public void updateUserView() {
         LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         Log.d(TAG, "updateUserView");
@@ -182,6 +183,8 @@
         mVCardProfile = VCardUtils.loadLocalProfileFromDisk(getContext());
 
         updateUserView();
+
+        mListeners = new ArrayList<>();
     }
 
     @OnClick(R.id.profile_container)
@@ -273,37 +276,16 @@
     public void updateAccounts(List<Account> accounts) {
         if (accounts.isEmpty()) {
             mNewAccountBtn.setVisibility(View.VISIBLE);
-            mShareBtn.setVisibility(View.GONE);
             mSpinnerAccounts.setVisibility(View.GONE);
-            mQrImage.setVisibility(View.GONE);
         } else {
             mNewAccountBtn.setVisibility(View.GONE);
-            mShareBtn.setVisibility(View.VISIBLE);
             mSpinnerAccounts.setVisibility(View.VISIBLE);
-            mQrImage.setVisibility(View.VISIBLE);
             mAccountAdapter.replaceAll(accounts);
             mSpinnerAccounts.setSelection(0);
         }
     }
 
-    public void setQRCodeListener(OnClickListener l) {
-        mQrImage.setOnClickListener(l);
+    public interface MenuHeaderAccountSelectionListener {
+        void accountSelected(Account account);
     }
-
-    /**
-     * Click listeners
-     */
-
-    @OnClick(R.id.share_btn)
-    public void shareButtonClicked() {
-        Account account = mAccountAdapter.getSelectedAccount();
-        String shareUri = account.getShareURI();
-        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
-        sharingIntent.setType("text/plain");
-        String shareBody = getContext().getString(R.string.account_share_body, shareUri);
-        sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getContext().getString(R.string.account_contact_me));
-        sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
-        getContext().startActivity(Intent.createChooser(sharingIntent, getContext().getText(R.string.share_via)));
-    }
-
 }
diff --git a/ring-android/app/src/main/res/drawable-hdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-hdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..20ba480
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-hdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-mdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-mdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..f02d360
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-mdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xhdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-xhdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..81c80b7
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xhdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xxhdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-xxhdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..784933a
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xxhdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xxxhdpi/ic_share_black_24dp.png b/ring-android/app/src/main/res/drawable-xxxhdpi/ic_share_black_24dp.png
new file mode 100644
index 0000000..5a8544c
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xxxhdpi/ic_share_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/layout/frag_menu_header.xml b/ring-android/app/src/main/res/layout/frag_menu_header.xml
index e52effc..6f0a299 100644
--- a/ring-android/app/src/main/res/layout/frag_menu_header.xml
+++ b/ring-android/app/src/main/res/layout/frag_menu_header.xml
@@ -35,6 +35,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignTop="@+id/anchor"
+            android:layout_toEndOf="@+id/anchor"
             android:layout_toRightOf="@+id/anchor"
             android:src="@drawable/ic_action_edit"
             app:backgroundTint="@color/transparent_light"
@@ -56,14 +57,6 @@
 
     </RelativeLayout>
 
-    <ImageButton
-        android:id="@+id/qr_image"
-        android:layout_width="85dp"
-        android:layout_height="85dp"
-        android:layout_below="@+id/profile_container"
-        android:layout_centerHorizontal="true"
-        android:background="@null" />
-
     <Spinner
         android:id="@+id/account_selection"
         android:layout_width="wrap_content"
@@ -72,24 +65,12 @@
         android:layout_alignParentLeft="true"
         android:layout_alignParentRight="true"
         android:layout_alignParentStart="true"
-        android:layout_below="@+id/qr_image"
-        android:layout_toStartOf="@+id/share_btn"
+        android:layout_below="@+id/profile_container"
+        android:layout_toEndOf="@+id/profile_container"
+        android:layout_toRightOf="@+id/profile_container"
         android:visibility="visible"
         tools:listitem="@layout/item_account_selected" />
 
-    <ImageButton
-        android:id="@+id/share_btn"
-        style="?android:attr/borderlessButtonStyle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignBottom="@+id/qr_image"
-        android:layout_alignTop="@+id/qr_image"
-        android:layout_toEndOf="@+id/qr_image"
-        android:layout_toRightOf="@+id/qr_image"
-        android:src="@drawable/ic_share_white_24dp"
-        android:text="@string/share_number"
-        android:visibility="visible" />
-
     <Button
         android:id="@+id/addaccount_btn"
         style="@style/Widget.AppCompat.Button.Borderless"
diff --git a/ring-android/app/src/main/res/layout/frag_qrcode.xml b/ring-android/app/src/main/res/layout/frag_qrcode.xml
deleted file mode 100644
index 4f5ef4f..0000000
--- a/ring-android/app/src/main/res/layout/frag_qrcode.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:clickable="true"
-    android:background="@color/black">
-
-    <ImageButton
-        android:id="@+id/exit"
-        android:layout_width="48dp"
-        android:layout_height="48dp"
-        android:layout_alignParentRight="true"
-        android:layout_alignParentTop="true"
-        android:layout_marginTop="20dp"
-        android:layout_marginRight="20dp"
-        android:background="@null"
-        android:src="@drawable/ic_action_remove" />
-
-    <ImageView
-        android:id="@+id/qr_image"
-        android:layout_width="300dp"
-        android:layout_height="300dp"
-        android:layout_centerHorizontal="true"
-        android:layout_centerInParent="true"
-        android:background="@null" />
-
-</RelativeLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/layout/frag_share.xml b/ring-android/app/src/main/res/layout/frag_share.xml
new file mode 100644
index 0000000..28c03f9
--- /dev/null
+++ b/ring-android/app/src/main/res/layout/frag_share.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_above="@+id/qr_image_panel"
+        android:layout_alignEnd="@+id/qr_image_panel"
+        android:layout_alignLeft="@+id/qr_image_panel"
+        android:layout_alignRight="@+id/qr_image_panel"
+        android:layout_alignStart="@+id/qr_image_panel"
+        android:paddingBottom="24sp"
+        android:paddingTop="16sp"
+        android:text="@string/share_message"
+        android:textColor="@color/text_color_primary"
+        android:textSize="16sp" />
+
+    <LinearLayout
+        android:id="@+id/qr_image_panel"
+        android:layout_width="300dp"
+        android:layout_height="300dp"
+        android:layout_centerHorizontal="true"
+        android:layout_centerInParent="true"
+        android:background="@color/black"
+        android:padding="10dp">
+
+        <ImageView
+            android:id="@+id/qr_image"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="@null" />
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:background="@color/color_primary_dark">
+
+        <android.support.v7.widget.AppCompatButton
+            android:id="@+id/share_button"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="?attr/selectableItemBackground"
+            android:paddingBottom="5dp"
+            android:paddingTop="5dp"
+            android:text="@string/share_your_account_information"
+            android:textColor="@color/white" />
+
+    </LinearLayout>
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/menu/drawer.xml b/ring-android/app/src/main/res/menu/drawer.xml
index 2c2cc83..f9493d5 100644
--- a/ring-android/app/src/main/res/menu/drawer.xml
+++ b/ring-android/app/src/main/res/menu/drawer.xml
@@ -15,6 +15,10 @@
             android:icon="@drawable/ic_settings_black_24dp"
             android:title="@string/menu_item_settings"/>
         <item
+            android:id="@+id/menuitem_share"
+            android:icon="@drawable/ic_share_black_24dp"
+            android:title="@string/menu_item_share"/>
+        <item
             android:id="@+id/menuitem_about"
             android:icon="@drawable/ic_info_black_48dp"
             android:title="@string/menu_item_about"/>
diff --git a/ring-android/app/src/main/res/values/strings.xml b/ring-android/app/src/main/res/values/strings.xml
index 4b6d9c6..86cbb38 100644
--- a/ring-android/app/src/main/res/values/strings.xml
+++ b/ring-android/app/src/main/res/values/strings.xml
@@ -57,6 +57,7 @@
     <string name="menu_item_home">Home</string>
     <string name="menu_item_accounts">Manage accounts</string>
     <string name="menu_item_settings">Settings</string>
+    <string name="menu_item_share">Share my contact</string>
     <string name="menu_item_about">About Ring</string>
 
     <!-- Dialing Fragment -->
@@ -177,4 +178,9 @@
     <string name="unknowm_if_empty">Unknown if empty</string>
     <string name="unknown">Unknown</string>
 
+    <!-- Share fragment -->
+    <string name="share_label">Click on the Ring id to share</string>
+    <string name="share_message">Scan this QRCode with the embedded scanner of the Ring application that wants to communicate with you.</string>
+    <string name="share_your_account_information">Share your contact information</string>
+
 </resources>
