diff --git a/.idea/misc.xml b/.idea/misc.xml
index 37a7509..7bfef59 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/easypermission/src/main/java/com/androidisland/easypermission/EasyPermission.kt b/easypermission/src/main/java/com/androidisland/easypermission/EasyPermission.kt
index 0a302c7..7422f61 100644
--- a/easypermission/src/main/java/com/androidisland/easypermission/EasyPermission.kt
+++ b/easypermission/src/main/java/com/androidisland/easypermission/EasyPermission.kt
@@ -81,9 +81,9 @@ class EasyPermission {
 
         fun request(
             listener: (
-                granted: List<String>,
-                denied: List<String>,
-                permanentlyDenied: List<String>
+                granted: Set<String>,
+                denied: Set<String>,
+                permanentlyDenied: Set<String>
             ) -> Unit
         ) {
             val intent = Intent(context, RuntimePermissionActivity::class.java)
diff --git a/easypermission/src/main/java/com/androidisland/easypermission/PermissionResult.kt b/easypermission/src/main/java/com/androidisland/easypermission/PermissionResult.kt
index 49574e3..bc57f22 100644
--- a/easypermission/src/main/java/com/androidisland/easypermission/PermissionResult.kt
+++ b/easypermission/src/main/java/com/androidisland/easypermission/PermissionResult.kt
@@ -5,7 +5,7 @@ import android.os.Handler
 import android.os.Looper
 import android.os.ResultReceiver
 
-internal class PermissionResult(private val listener: (List<String>, List<String>, List<String>) -> Unit) :
+internal class PermissionResult(private val listener: (Set<String>, Set<String>, Set<String>) -> Unit) :
     ResultReceiver(Handler(Looper.getMainLooper())) {
 
     companion object {
@@ -27,6 +27,6 @@ internal class PermissionResult(private val listener: (List<String>, List<String
             denied = getStringArrayList(EXTRA_DENIED_PERMISSIONS) ?: ArrayList()
             permanentlyDenied = getStringArrayList(EXTRA_PERMANENTLY_DENIED_PERMISSIONS) ?: ArrayList()
         }
-        listener.invoke(granted, denied, permanentlyDenied)
+        listener.invoke(granted.toSet(), denied.toSet(), permanentlyDenied.toSet())
     }
 }
\ No newline at end of file
diff --git a/easypermission/src/main/java/com/androidisland/easypermission/RuntimePermissionActivity.kt b/easypermission/src/main/java/com/androidisland/easypermission/RuntimePermissionActivity.kt
index 6d27ef4..27b035c 100644
--- a/easypermission/src/main/java/com/androidisland/easypermission/RuntimePermissionActivity.kt
+++ b/easypermission/src/main/java/com/androidisland/easypermission/RuntimePermissionActivity.kt
@@ -11,11 +11,16 @@ internal class RuntimePermissionActivity : AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        ActivityCompat.requestPermissions(
-            this,
-            getRequestedPermissions(),
-            PermissionResult.CODE_PERMISSION
-        )
+        val notGranted = getNotGrantedPermissions()
+        if (notGranted.isNotEmpty()) {
+            ActivityCompat.requestPermissions(
+                this,
+                getNotGrantedPermissions(),
+                PermissionResult.CODE_PERMISSION
+            )
+        } else {
+            sendResult(ArrayList(getGrantedPermissions().toList()), ArrayList(), ArrayList())
+        }
     }
 
     private fun sendResult(
@@ -33,16 +38,26 @@ internal class RuntimePermissionActivity : AppCompatActivity() {
                 PermissionResult.EXTRA_PERMANENTLY_DENIED_PERMISSIONS to permanentlyDenied
             )
         )
+        finish()
     }
 
     private fun getRequestedPermissions() =
         intent.getStringArrayExtra(PermissionResult.EXTRA_REQUESTED_PERMISSIONS)
 
-    private fun getNotGrantedRequests() =
-        getRequestedPermissions().filter { !EasyPermission.isGranted(
-            this,
-            it
-        )
+    private fun getGrantedPermissions() =
+        getRequestedPermissions().filter {
+            EasyPermission.isGranted(
+                this,
+                it
+            )
+        }.toTypedArray()
+
+    private fun getNotGrantedPermissions() =
+        getRequestedPermissions().filter {
+            !EasyPermission.isGranted(
+                this,
+                it
+            )
         }.toTypedArray()
 
 
@@ -53,6 +68,7 @@ internal class RuntimePermissionActivity : AppCompatActivity() {
     ) {
         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
         val granted = ArrayList<String>()
+        granted.addAll(getGrantedPermissions())
         val denied = ArrayList<String>()
         val permanentlyDenied = ArrayList<String>()
         permissions.forEachIndexed { index, permission ->
@@ -67,6 +83,5 @@ internal class RuntimePermissionActivity : AppCompatActivity() {
             }
         }
         sendResult(granted, denied, permanentlyDenied)
-        finish()
     }
 }
\ No newline at end of file