diff --git a/logic_gates.py b/logic_gates.py
new file mode 100644
index 0000000000000000000000000000000000000000..740c5327a4b3822798f82bb19a85a9de2fdb715a
--- /dev/null
+++ b/logic_gates.py
@@ -0,0 +1,49 @@
+# Ryan McShane
+# Logic Gates Modules
+
+    # AND, OR, XOR, NAND, NOR, XNOR
+def and(circuit, A, B, result):
+    circuit.ccx(q[A], q[B], q[result])
+
+def or(circuit, A, B, result):
+    circuit.x(q[A])
+    circuit.x(q[B])
+    circuit.ccx(q[result])
+    circuit.x(q[result])
+
+    circuit.x(q[B])
+    circuit.x(q[A])
+
+def nand(circuit, A, B, result):
+    circuit.ccx(q[A], q[B], q[result])
+    circuit.x(q[result])
+
+def nor(circuit, A, B, result):
+    circuit.x(q[A])
+    circuit.x(q[B])
+    circuit.ccx(q[result])
+
+    circuit.x(q[B])
+    circuit.x(q[A])
+
+def xor(circuit, A, B, result, t1, t2, t3):
+    nand(circuit, q[A], q[B], q[t1])
+    circuit.x(q[t1])
+    nand(circuit, q[A], q[t1], q[t2])
+    circuit.x(q[t2])
+    nand(circuit, q[B], q[t1], q[t3])
+    circuit.x(q[t3])
+    nand(circuit, q[t2], q[t3], q[result])
+    circuit.x(q[result])
+
+    circuit.x(q[t3])
+    nand(circuit, q[B], q[t1], q[t3])
+    circuit.x(q[t2])
+    nand(circuit, q[A], q[t1], q[t2])
+    circuit.x(q[t1])
+    nand(circuit, q[A], q[B], q[t1])
+
+def xnor(circuit, a, b, result, R, At, Bt):
+    xor(circuit, a, b, result, R, At, Bt)
+    circuit.x(q[result])
+