diff --git a/ring-android/app/src/main/java/cx/ring/service/DRingService.java b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
index 9fbcf1df35ac52786621f15d92fc88bffbed3a0e..7d6d2bdeb1a1a2c749be5ff5b8e4c14134ba43a9 100644
--- a/ring-android/app/src/main/java/cx/ring/service/DRingService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
@@ -27,7 +27,7 @@ package cx.ring.service;
 
 import android.app.Service;
 import android.content.Intent;
-import android.hardware.Camera;
+import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
@@ -36,7 +36,6 @@ import android.view.SurfaceHolder;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
@@ -44,42 +43,56 @@ import java.util.concurrent.ExecutorService;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import cx.ring.BuildConfig;
 import cx.ring.application.RingApplication;
 import cx.ring.daemon.StringMap;
 import cx.ring.model.Codec;
 import cx.ring.services.AccountService;
 import cx.ring.services.CallService;
 import cx.ring.services.ConferenceService;
+import cx.ring.services.ContactService;
 import cx.ring.services.DaemonService;
 import cx.ring.services.DeviceRuntimeService;
 import cx.ring.services.HardwareService;
+import cx.ring.services.NotificationService;
+import cx.ring.services.NotificationServiceImpl;
 
 
 public class DRingService extends Service {
 
+    public static final String ACTION_TRUST_REQUEST_ACCEPT = BuildConfig.APPLICATION_ID + ".action.TRUST_REQUEST_ACCEPT";
+    public static final String ACTION_TRUST_REQUEST_REFUSE = BuildConfig.APPLICATION_ID + ".action.TRUST_REQUEST_REFUSE";
+    public static final String ACTION_TRUST_REQUEST_BLOCK = BuildConfig.APPLICATION_ID + ".action.TRUST_REQUEST_BLOCK";
+
+    private static final String TAG = DRingService.class.getName();
+
     @Inject
-    DaemonService mDaemonService;
+    protected DaemonService mDaemonService;
 
     @Inject
-    CallService mCallService;
+    protected CallService mCallService;
 
     @Inject
-    ConferenceService mConferenceService;
+    protected ConferenceService mConferenceService;
 
     @Inject
-    AccountService mAccountService;
+    protected AccountService mAccountService;
 
     @Inject
-    HardwareService mHardwareService;
+    protected HardwareService mHardwareService;
 
     @Inject
-    DeviceRuntimeService mDeviceRuntimeService;
+    protected DeviceRuntimeService mDeviceRuntimeService;
 
     @Inject
-    @Named("DaemonExecutor")
-    ExecutorService mExecutor;
+    protected NotificationService mNotificationService;
 
-    static final String TAG = DRingService.class.getName();
+    @Inject
+    protected ContactService mContactService;
+
+    @Inject
+    @Named("DaemonExecutor")
+    protected ExecutorService mExecutor;
 
     @Override
     public void onCreate() {
@@ -93,6 +106,11 @@ public class DRingService extends Service {
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         Log.i(TAG, "onStartCommand " + (intent == null ? "null" : intent.getAction()) + " " + flags + " " + startId);
+
+        if (intent != null && intent.getAction() != null) {
+            parseIntent(intent);
+        }
+
         return START_STICKY; /* started and stopped explicitly */
     }
 
@@ -500,4 +518,43 @@ public class DRingService extends Service {
             mAccountService.registerName(account, password, name);
         }
     };
+
+    private void parseIntent(Intent intent) {
+        switch (intent.getAction()) {
+            case ACTION_TRUST_REQUEST_ACCEPT:
+            case ACTION_TRUST_REQUEST_REFUSE:
+            case ACTION_TRUST_REQUEST_BLOCK: {
+                Bundle extras = intent.getExtras();
+                if (extras != null) {
+                    handleTrustRequestAction(intent.getAction(), extras);
+                }
+                break;
+            }
+            default:
+                break;
+        }
+    }
+
+    private void handleTrustRequestAction(String action, Bundle extras) {
+        String account = extras.getString(NotificationServiceImpl.TRUST_REQUEST_NOTIFICATION_ACCOUNT_ID);
+        String from = extras.getString(NotificationServiceImpl.TRUST_REQUEST_NOTIFICATION_FROM);
+        if (account != null && from != null) {
+            mNotificationService.cancelTrustRequestNotification(account);
+            switch (action) {
+                case ACTION_TRUST_REQUEST_ACCEPT: {
+                    mAccountService.acceptTrustRequest(account, from);
+                    break;
+                }
+                case ACTION_TRUST_REQUEST_REFUSE: {
+                    mAccountService.discardTrustRequest(account, from);
+                    break;
+                }
+                case ACTION_TRUST_REQUEST_BLOCK: {
+                    mAccountService.discardTrustRequest(account, from);
+                    mContactService.removeContact(account, from);
+                    break;
+                }
+            }
+        }
+    }
 }
diff --git a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
index d45c171246017ad083377ab266197a9a46e97f7c..e69e9c89178b667697019760034d1958ad2f06a8 100644
--- a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
@@ -43,6 +43,7 @@ import cx.ring.BuildConfig;
 import cx.ring.R;
 import cx.ring.client.ConversationActivity;
 import cx.ring.client.HomeActivity;
+import cx.ring.contactrequests.PendingContactRequestsFragment;
 import cx.ring.fragments.ConversationFragment;
 import cx.ring.model.CallContact;
 import cx.ring.model.Conference;
@@ -51,8 +52,8 @@ import cx.ring.model.ServiceEvent;
 import cx.ring.model.SipCall;
 import cx.ring.model.TextMessage;
 import cx.ring.service.CallManagerCallBack;
+import cx.ring.service.DRingService;
 import cx.ring.service.LocalService;
-import cx.ring.contactrequests.PendingContactRequestsFragment;
 import cx.ring.utils.ActionHelper;
 import cx.ring.utils.BitmapUtils;
 import cx.ring.utils.ContentUriHandler;
@@ -64,17 +65,22 @@ public class NotificationServiceImpl extends NotificationService implements Obse
 
     private static final String TAG = NotificationServiceImpl.class.getName();
 
+    public static final String TRUST_REQUEST_NOTIFICATION_ACCOUNT_ID = "trustRequestNotificationAccountId";
+    public static final String TRUST_REQUEST_NOTIFICATION_FROM = "trustRequestNotificationFrom";
+
     private static final String NOTIF_CALL = "CALL";
     private static final String NOTIF_MSG = "MESSAGE";
     private static final String NOTIF_TRUST_REQUEST = "TRUST REQUEST";
-    private final String EXTRAS_NUMBER_TRUST_REQUEST_KEY = BuildConfig.APPLICATION_ID + "numberOfTrustRequestssKey";
-    private final String EXTRAS_TRUST_REQUEST_FROM_KEY = BuildConfig.APPLICATION_ID + "trustREquestFrom";
+
+    private static final String EXTRAS_NUMBER_TRUST_REQUEST_KEY = BuildConfig.APPLICATION_ID + "numberOfTrustRequestKey";
+    private static final String EXTRAS_TRUST_REQUEST_FROM_KEY = BuildConfig.APPLICATION_ID + "trustRequestFrom";
+
 
     @Inject
-    Context mContext;
+    protected Context mContext;
 
     @Inject
-    AccountService mAccountService;
+    protected AccountService mAccountService;
 
     private NotificationManagerCompat notificationManager;
 
@@ -240,7 +246,6 @@ public class NotificationServiceImpl extends NotificationService implements Obse
 
     @Override
     public void showIncomingTrustRequestNotification(String accountID, String from) {
-
         int notificationId = getIncomingTrustNotificationId(accountID);
         NotificationCompat.Builder messageNotificationBuilder = mNotificationBuilders.get(notificationId);
         //count number of notifications to update notification's text
@@ -255,14 +260,39 @@ public class NotificationServiceImpl extends NotificationService implements Obse
                 }
                 numberOfNotifications = notificationInfo.getInt(EXTRAS_NUMBER_TRUST_REQUEST_KEY);
                 numberOfNotifications++;
+
                 if (numberOfNotifications > 1) {
+                    cancelTrustRequestNotification(accountID);
                     messageNotificationBuilder.setContentText(String.format(mContext.getString(R.string.contact_request_msg), Integer.toString(numberOfNotifications)));
                     messageNotificationBuilder.setLargeIcon(null);
+                    messageNotificationBuilder.mActions.clear();
+                    numberOfNotifications--;
                 }
             }
         } else {
             messageNotificationBuilder = new NotificationCompat.Builder(mContext);
-            messageNotificationBuilder.setContentText(from);
+            Bundle info = new Bundle();
+            info.putString(TRUST_REQUEST_NOTIFICATION_ACCOUNT_ID, accountID);
+            info.putString(TRUST_REQUEST_NOTIFICATION_FROM, from);
+            messageNotificationBuilder.setContentText(from)
+                    .addAction(R.drawable.ic_action_accept, mContext.getText(R.string.accept),
+                            PendingIntent.getService(mContext, new Random().nextInt(),
+                                    new Intent(DRingService.ACTION_TRUST_REQUEST_ACCEPT)
+                                            .setClass(mContext, DRingService.class)
+                                            .putExtras(info),
+                                    PendingIntent.FLAG_ONE_SHOT))
+                    .addAction(R.drawable.ic_delete_white, mContext.getText(R.string.refuse),
+                            PendingIntent.getService(mContext, new Random().nextInt(),
+                                    new Intent(DRingService.ACTION_TRUST_REQUEST_REFUSE)
+                                            .setClass(mContext, DRingService.class)
+                                            .putExtras(info),
+                                    PendingIntent.FLAG_ONE_SHOT))
+                    .addAction(R.drawable.ic_close_white, mContext.getText(R.string.block),
+                            PendingIntent.getService(mContext, new Random().nextInt(),
+                                    new Intent(DRingService.ACTION_TRUST_REQUEST_BLOCK)
+                                            .setClass(mContext, DRingService.class)
+                                            .putExtras(info),
+                                    PendingIntent.FLAG_ONE_SHOT));
             Resources res = mContext.getResources();
             int height = (int) res.getDimension(android.R.dimen.notification_large_icon_height);
             int width = (int) res.getDimension(android.R.dimen.notification_large_icon_width);
@@ -276,6 +306,7 @@ public class NotificationServiceImpl extends NotificationService implements Obse
         Bundle extras = new Bundle();
         extras.putInt(EXTRAS_NUMBER_TRUST_REQUEST_KEY, numberOfNotifications);
         extras.putString(EXTRAS_TRUST_REQUEST_FROM_KEY, from);
+
         messageNotificationBuilder.setPriority(NotificationCompat.PRIORITY_HIGH)
                 .setDefaults(NotificationCompat.DEFAULT_ALL)
                 .setAutoCancel(true)
@@ -287,6 +318,7 @@ public class NotificationServiceImpl extends NotificationService implements Obse
         messageNotificationBuilder.setContentIntent(PendingIntent.getActivity(mContext,
                 new Random().nextInt(), intentOpenTrustRequestFragment, PendingIntent.FLAG_ONE_SHOT))
                 .addExtras(extras);
+
         notificationManager.notify(notificationId, messageNotificationBuilder.build());
         if (numberOfNotifications == 1) {
             mNotificationBuilders.put(notificationId, messageNotificationBuilder);
@@ -385,6 +417,7 @@ public class NotificationServiceImpl extends NotificationService implements Obse
                     }
                     break;
                 }
+
                 case INCOMING_TRUST_REQUEST: {
                     final String accountID = arg.getEventInput(ServiceEvent.EventInput.ACCOUNT_ID, String.class);
                     final String from = arg.getEventInput(ServiceEvent.EventInput.FROM, String.class);
@@ -414,4 +447,4 @@ public class NotificationServiceImpl extends NotificationService implements Obse
 
         notificationManager.notify(notificationId, messageNotificationBuilder.build());
     }
-}
+}
\ No newline at end of file