diff --git a/plugins/dns.py b/plugins/dns.py
new file mode 100644
index 0000000000000000000000000000000000000000..5967502b86cf86f323f478a1846903cfbabe3235
--- /dev/null
+++ b/plugins/dns.py
@@ -0,0 +1,24 @@
+# dns module
+# --gry
+
+import urllib
+import socket
+
+@plugin
+class dns(object):
+    def __init__(self, server):
+        self.server = server
+        self.commands = ["dns"]
+        self.server.handle("command", self.handle_command, self.commands)
+    
+    def handle_command(self, channel, user, cmd, args):
+        if cmd == "dns":
+            if len(args) < 1:
+                self.server.doMessage(channel, user+": Return a fully qualified domain name for a list of space-separated IPs or hostnames.")
+                return
+            try:
+                for each in args:
+                    self.server.doMessage(channel, user+": "+ each+" = "+socket.getfqdn(each))
+            except Exception, e:
+                self.server.doMessage(channel, user+": "+str(e))
+
diff --git a/plugins/rpn.py b/plugins/rpn.py
new file mode 100644
index 0000000000000000000000000000000000000000..16147fc7a3f441f972d4c90e03a389fefb171852
--- /dev/null
+++ b/plugins/rpn.py
@@ -0,0 +1,42 @@
+# rpn module
+# --gry
+
+
+@plugin
+class rpn(object):
+    def __init__(self, server):
+        self.server = server
+        self.commands = ["rpn"]
+        self.server.handle("command", self.handle_command, self.commands)
+    
+    def handle_command(self, channel, user, cmd, args):
+        if cmd == "rpn":
+            if len(args) < 1:
+                self.server.doMessage(channel, user+": reverse-polish-notation calculator. syntax: rpn 2 4 1 + / gives 2/5.")
+                return
+            self.stack = []
+            for char in args:
+                try:
+                    char = float(char)# if it succeeds, then char is a number
+                    self.stack.append(char)
+                except Exception,e: #float(char) failed, it's nonsense or an operator
+                    try:
+                        a = float(self.stack.pop()) #last
+                        b = float(self.stack.pop()) #pre-last
+                        if(char == "+"):
+                            self.stack.append(a + b)
+                        elif(char == "-"):
+                            self.stack.append(b - a)
+                        elif(char == "^"):
+                            self.stack.append(pow(b,a))
+                        elif(char == "*"):
+                            self.stack.append(a * b)
+                        elif(char == "/"):
+                            self.stack.append(b / a)
+                    except Exception, e:
+                        self.conn.reply(str(e))
+                        return
+            try:
+                self.server.doMessage(channel, user+": "+str(self.stack[0]))
+            except Exception, e:
+                return