diff --git a/src/main/java/com/dinnerbone/bukkit/home/commands/GoHomeCommand.java b/src/main/java/com/dinnerbone/bukkit/home/commands/GoHomeCommand.java
index 041316e..a86f1c4 100644
--- a/src/main/java/com/dinnerbone/bukkit/home/commands/GoHomeCommand.java
+++ b/src/main/java/com/dinnerbone/bukkit/home/commands/GoHomeCommand.java
@@ -21,7 +21,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
 
         if (player == null) {
             return true;
-        } else if ((player != sender) && (!sender.isOp())) {
+        } else if ((player != sender) && (!player.hasPermission("homebukkit.home.other"))) {
             sender.sendMessage(ChatColor.RED + "You don't have permission to go to other players homes");
             return true;
         } else if (!(sender instanceof Player)) {
@@ -32,7 +32,10 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
         }
 
         String name = args[0];
-
+        if(player.hasPermission("homebukkit.home.self")){
+        	player.sendMessage("you dont have permission to go to your home");
+        	return true;
+        }
         Home home = plugin.getDatabase().find(Home.class).where().ieq("name", name).ieq("playerName", player.getName()).findUnique();
 
         if (home == null) {
diff --git a/src/main/java/com/dinnerbone/bukkit/home/commands/ListHomesCommand.java b/src/main/java/com/dinnerbone/bukkit/home/commands/ListHomesCommand.java
index 6e4f31d..c4a7d95 100644
--- a/src/main/java/com/dinnerbone/bukkit/home/commands/ListHomesCommand.java
+++ b/src/main/java/com/dinnerbone/bukkit/home/commands/ListHomesCommand.java
@@ -32,6 +32,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
                 sender.sendMessage("That player has no homes!");
             }
         } else {
+        	if(sender == player && player.hasPermission("homebukkit.list.self") ){
+        		
+        	
             String result = "";
 
             for (Home home : homes) {
@@ -44,6 +47,26 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
 
             sender.sendMessage("All home(s): " + result);
         }
+        	else if(sender != player && player.hasPermission("homebukkit.list.other")){
+        		 String result = "";
+
+                 for (Home home : homes) {
+                     if (result.length() > 0) {
+                         result += ", ";
+                     }
+
+                     result += home.getName();
+                 }
+
+                 sender.sendMessage("All home(s): " + result);
+        	}
+        	else if(sender == player &&! player.hasPermission("homebukkit.list.self")){
+        		player.sendMessage("you dont have permission to list your own homes!");
+        	}
+        	else if(sender != player &&! player.hasPermission("homebukkit.list.other")){
+        		player.sendMessage("you dont have permission to list other peoples homes!");
+        	}
+        }
 
         return true;
     }
diff --git a/src/main/java/com/dinnerbone/bukkit/home/commands/SetHomeCommand.java b/src/main/java/com/dinnerbone/bukkit/home/commands/SetHomeCommand.java
index dbbac02..e61ba43 100644
--- a/src/main/java/com/dinnerbone/bukkit/home/commands/SetHomeCommand.java
+++ b/src/main/java/com/dinnerbone/bukkit/home/commands/SetHomeCommand.java
@@ -21,7 +21,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
 
         if (player == null) {
             return true;
-        } else if ((player != sender) && (!sender.isOp())) {
+        } else if ((player != sender) && (!sender.hasPermission("homebukkit.set.other"))) {
             sender.sendMessage(ChatColor.RED + "You don't have permission to set other players homes");
             return true;
         } else if (!(sender instanceof Player)) {
@@ -32,7 +32,10 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
         }
 
         String name = args[0];
-
+        if(!player.hasPermission("homebukkit.set.self")){
+        	player.sendMessage("You dont have permission to set your home");
+        	return true;
+        }
         Home home = plugin.getDatabase().find(Home.class).where().ieq("name", name).ieq("playerName", player.getName()).findUnique();
 
         if (home == null) {
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index fbd486f..b46145f 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -21,4 +21,41 @@ commands:
   gohome:
     aliases: [home]
     description: Goes to a home
-    usage: /<command> <name> [player]
\ No newline at end of file
+    usage: /<command> <name> [player]
+permissions:
+  homebukkit.set:
+    description: allows the player to set homes
+    children:
+          homebukkit.set.self: true
+          homebukkit.set.other: true
+  homebukkit.set.self:
+    description: Allows the player to set their own home
+  homebukkit.set.other:
+    description: Allows the player to set other peoples homes
+  homebukkit.list:
+    description: Allows the player to list theirs and other players homes
+    children: 
+          homebukkit.list.self:true
+          homebukkit.list.other:true
+  homebukkit.list.self:
+    description: Allows the player to list their homes
+  homebukkit.list.other:
+     description: Allows the player to list others homes
+  homebukkit.home:
+    description: allows the player to teleport to his/others homes
+    chidren:
+         homebukkit.set.self:true
+         homebukkit.set.other:true
+  homebukkit.home.self:
+    description: Allows the player to teleport to their home
+  homebukkit.home.other:
+    description: Allows the player to teleport to other players home
+
+  homebukkit.*:
+    description: Gives all permissions for HomeBukkit
+    default: op
+    children:
+      homebukkit.set: true
+      homebukkit.list: true
+      homebukkit.home: true
+  
\ No newline at end of file