diff --git a/inbox/depends.txt b/inbox/depends.txt
new file mode 100644
index 00000000..4ad96d51
--- /dev/null
+++ b/inbox/depends.txt
@@ -0,0 +1 @@
+default
diff --git a/inbox/init.lua b/inbox/init.lua
new file mode 100644
index 00000000..7e334882
--- /dev/null
+++ b/inbox/init.lua
@@ -0,0 +1,109 @@
+local inbox = {}
+
+--[[
+TODO
+* Different node_box and texture for empty mailbox
+]]
+
+minetest.register_craft({
+  output ="inbox:empty",
+  recipe = {
+    {"","default:steel_ingot",""},
+    {"default:steel_ingot","","default:steel_ingot"},
+    {"default:steel_ingot","default:steel_ingot","default:steel_ingot"}
+  }
+})
+
+minetest.register_node("inbox:empty", {
+  paramtype = "light",
+  drawtype = "nodebox",
+  node_box = { 
+    type = "fixed",
+    fixed = {
+      {-4/12, -6/12, -6/12, 4/12, 0/12, 6/12},
+      {-3/12, 0/12, -6/12, 3/12, 2/12, 6/12},
+      {3/12, 0/12, -4/12, 4/12, 5/12, -2/12},
+      {3/12, 3/12, -2/12, 4/12, 5/12, 0/12}
+    }
+  },
+  description = "Mailbox",
+  tiles = {"inbox_top.png", "inbox_bottom.png", "inbox_east.png",
+    "inbox_west.png", "inbox_back.png", "inbox_front.png"},
+  paramtype2 = "facedir",
+  groups = {choppy=2,oddly_breakable_by_hand=2},
+  sounds = default.node_sound_wood_defaults(),
+  after_place_node = function(pos, placer, itemstack)
+    local meta = minetest.get_meta(pos)
+    local owner = placer:get_player_name()
+    meta:set_string("owner", owner)
+    meta:set_string("infotext", owner.."'s Mailbox")
+    local inv = meta:get_inventory()
+    inv:set_size("main", 8*4)
+    inv:set_size("drop", 1)
+  end,
+  on_rightclick = function(pos, node, clicker, itemstack)
+    local meta = minetest.get_meta(pos)
+    local player = clicker:get_player_name()
+    local owner  = meta:get_string("owner")
+    local meta = minetest.get_meta(pos)
+    if owner == player then
+      minetest.show_formspec(
+        clicker:get_player_name(),
+        "default:chest_locked",
+        inbox.get_inbox_formspec(pos))
+    else
+      minetest.show_formspec(
+        clicker:get_player_name(),
+        "default:chest_locked",
+        inbox.get_inbox_insert_formspec(pos))
+    end
+  end,
+  can_dig = function(pos,player)
+    local meta = minetest.get_meta(pos);
+    local owner = meta:get_string("owner")
+    local inv = meta:get_inventory()
+    return player:get_player_name() == owner and inv:is_empty("main")
+  end,
+  on_metadata_inventory_put = function(pos, listname, index, stack, player)
+    local meta = minetest.get_meta(pos)
+    local inv = meta:get_inventory()
+    if listname == "drop" and inv:room_for_item("main", stack) then
+      inv:remove_item("drop", stack)
+      inv:add_item("main", stack)
+    end
+  end,
+  allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+    if listname == "main" then
+      return 0
+    end
+    if listname == "drop" then
+      local meta = minetest.get_meta(pos)
+      local inv = meta:get_inventory()
+      if inv:room_for_item("main", stack) then
+        return -1
+      else
+        return 0
+      end
+    end
+  end,
+})
+
+function inbox.get_inbox_formspec(pos)
+	local spos = pos.x .. "," .. pos.y .. "," ..pos.z
+	local formspec =
+		"size[8,9]"..
+		"list[nodemeta:".. spos .. ";main;0,0;8,4;]"..
+		"list[current_player;main;0,5;8,4;]"
+	return formspec
+end
+
+function inbox.get_inbox_insert_formspec(pos)
+	local spos = pos.x .. "," .. pos.y .. "," ..pos.z
+	local formspec =
+		"size[8,9]"..
+		"list[nodemeta:".. spos .. ";drop;3.5,2;1,1;]"..
+		"list[current_player;main;0,5;8,4;]"
+	return formspec
+end
+
+print("[Mod]Inbox Loaded!")
diff --git a/inbox/textures/inbox_back.png b/inbox/textures/inbox_back.png
new file mode 100644
index 00000000..346aa922
Binary files /dev/null and b/inbox/textures/inbox_back.png differ
diff --git a/inbox/textures/inbox_bottom.png b/inbox/textures/inbox_bottom.png
new file mode 100644
index 00000000..027b8327
Binary files /dev/null and b/inbox/textures/inbox_bottom.png differ
diff --git a/inbox/textures/inbox_east.png b/inbox/textures/inbox_east.png
new file mode 100644
index 00000000..176a1938
Binary files /dev/null and b/inbox/textures/inbox_east.png differ
diff --git a/inbox/textures/inbox_front.png b/inbox/textures/inbox_front.png
new file mode 100644
index 00000000..bd8a9637
Binary files /dev/null and b/inbox/textures/inbox_front.png differ
diff --git a/inbox/textures/inbox_side_and_back.png b/inbox/textures/inbox_side_and_back.png
new file mode 100644
index 00000000..343732bc
Binary files /dev/null and b/inbox/textures/inbox_side_and_back.png differ
diff --git a/inbox/textures/inbox_top.png b/inbox/textures/inbox_top.png
new file mode 100644
index 00000000..fcda957c
Binary files /dev/null and b/inbox/textures/inbox_top.png differ
diff --git a/inbox/textures/inbox_west.png b/inbox/textures/inbox_west.png
new file mode 100644
index 00000000..0d4dbfb8
Binary files /dev/null and b/inbox/textures/inbox_west.png differ