diff --git a/src/main.rs b/src/main.rs
index acecd97a7c31bce6939165f5c532969be57a27ef..615936c896a473a6f77829797ebe9ec658475aab 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -46,9 +46,9 @@ macro_rules! e {
     ($error: literal, $x:expr) => {
         match $x {
             Ok(_) => (),
-            Err(why) => eprintln!($error, why)
+            Err(why) => eprintln!($error, why),
         }
-    }
+    };
 }
 
 struct Handler;
@@ -80,11 +80,13 @@ impl EventHandler for Handler {
         let message_content: Vec<_> = msg.content.splitn(2, ' ').collect();
         match message_content[0] {
             "!join" => {
-                e!("Unable to get user: {:?}",
-                   serenity::model::id::GuildId(SERVER_ID)
-                    .member(ctx.http.clone(), msg.author.id)
-                    .map(|member| new_member(&ctx, member)));
-            },
+                e!(
+                    "Unable to get user: {:?}",
+                    serenity::model::id::GuildId(SERVER_ID)
+                        .member(ctx.http.clone(), msg.author.id)
+                        .map(|member| new_member(&ctx, member))
+                );
+            }
             "!move" => {
                 let motion = message_content[1];
                 if motion.len() > 0 {
@@ -96,14 +98,14 @@ impl EventHandler for Handler {
                         "If there's something you want to motion, put it after the !move keyword",
                     ));
                 }
-            },
+            }
             "!motion" => {
                 e!("Error sending message: {:?}",
                    msg.channel_id.say(
                     &ctx.http,
                     "I hope you're not having a motion. You may have wanted to !move something instead."
                 ));
-            },
+            }
             "!poll" => {
                 let topic = message_content[1];
                 if topic.len() > 0 {
@@ -115,45 +117,56 @@ impl EventHandler for Handler {
                         "If there's something you want to motion, put it after the !move keyword",
                     ));
                 }
-            },
+            }
             "!register" => {
                 let name = message_content[1];
                 if name.len() > 0 {
-                    e!("Unable to get member: {:?}",
-                    serenity::model::id::GuildId(SERVER_ID)
-                        .member(ctx.http.clone(), msg.author.id)
-                        .map(|mut member| {
-                            e!("Unable to remove role: {:?}",
-                               member.remove_role(&ctx.http, UNREGISTERED_MEMBER_ROLE));
-                            e!("Unable to edit nickname: {:?}",
-                               member.edit(&ctx.http, |m| {
-                                let mut rng = rand::thread_rng();
-                                m.nickname(format!(
-                                    "{}, {}",
-                                    name,
-                                    [
-                                        "The Big Cheese",
-                                        "The One and Only",
-                                        "The Exalted One",
-                                        "not to be trusted",
-                                        "The Scoundrel",
-                                        "A big fish in a small pond",
-                                    ][rng.gen_range(0, 5)]
-                                ));
-                                m
-                            }).map(|()| {
-                                e!("Unable to add role: {:?}",
-                                   member.add_role(&ctx.http, REGISTERED_MEMBER_ROLE));
-                            }));
-                        })
+                    e!(
+                        "Unable to get member: {:?}",
+                        serenity::model::id::GuildId(SERVER_ID)
+                            .member(ctx.http.clone(), msg.author.id)
+                            .map(|mut member| {
+                                e!(
+                                    "Unable to remove role: {:?}",
+                                    member.remove_role(&ctx.http, UNREGISTERED_MEMBER_ROLE)
+                                );
+                                e!(
+                                    "Unable to edit nickname: {:?}",
+                                    member
+                                        .edit(&ctx.http, |m| {
+                                            let mut rng = rand::thread_rng();
+                                            m.nickname(format!(
+                                                "{}, {}",
+                                                name,
+                                                [
+                                                    "The Big Cheese",
+                                                    "The One and Only",
+                                                    "The Exalted One",
+                                                    "not to be trusted",
+                                                    "The Scoundrel",
+                                                    "A big fish in a small pond",
+                                                ][rng.gen_range(0, 5)]
+                                            ));
+                                            m
+                                        })
+                                        .map(|()| {
+                                            e!(
+                                                "Unable to add role: {:?}",
+                                                member.add_role(&ctx.http, REGISTERED_MEMBER_ROLE)
+                                            );
+                                        })
+                                );
+                            })
                     );
-                    e!("Error deleting register message: {:?}",
-                       msg.delete(ctx));
+                    e!("Error deleting register message: {:?}", msg.delete(ctx));
                 } else {
-                    e!("Error sending message: {:?}",
-                       msg.channel_id.say(&ctx.http, "Usage: !register <ucc username>"));
+                    e!(
+                        "Error sending message: {:?}",
+                        msg.channel_id
+                            .say(&ctx.http, "Usage: !register <ucc username>")
+                    );
                 }
-            },
+            }
             "!cowsay" => {
                 let mut text = message_content[1].to_owned();
                 text.escape_default();
@@ -170,14 +183,20 @@ impl EventHandler for Handler {
                     String::from_utf8(output.stdout).expect("unable to parse stdout to String"),
                     None,
                 );
-                e!("Error sending message: {:?}", msg.channel_id.say(&ctx.http, message.build()));
-            },
+                e!(
+                    "Error sending message: {:?}",
+                    msg.channel_id.say(&ctx.http, message.build())
+                );
+            }
             "!help" => {
                 let mut message = MessageBuilder::new();
                 message.push_line("Use !move <action> to make a circular motion");
                 message.push_line("Use !poll <proposal> to see what people think about something");
-                e!("Error sending message: {:?}", msg.channel_id.say(&ctx.http, message.build()));
-            },
+                e!(
+                    "Error sending message: {:?}",
+                    msg.channel_id.say(&ctx.http, message.build())
+                );
+            }
             _ => {}
         }
     }
@@ -215,9 +234,13 @@ impl EventHandler for Handler {
                             }
                             Ok(false) => {
                                 if user.id.0 != BOT_ID {
-                                    if let Err(why) = add_reaction.delete(&ctx) {
-                                        println!("Error deleting react: {:?}", why);
-                                    };
+                                    if ![APPROVE_REACT, DISAPPROVE_REACT]
+                                        .contains(&add_reaction.emoji.as_data().as_str())
+                                    {
+                                        if let Err(why) = add_reaction.delete(&ctx) {
+                                            println!("Error deleting react: {:?}", why);
+                                        };
+                                    }
                                 }
                             }
                             Err(why) => {
@@ -301,7 +324,13 @@ fn create_motion(ctx: &Context, msg: &Message, topic: &str) {
             embed.field("Votes", "For: 0\nAgainst: 0\nAbstain: 0", true);
             embed
         });
-        m.reactions(vec![FOR_VOTE, AGAINST_VOTE, ABSTAIN_VOTE]);
+        m.reactions(vec![
+            FOR_VOTE,
+            AGAINST_VOTE,
+            ABSTAIN_VOTE,
+            APPROVE_REACT,
+            DISAPPROVE_REACT,
+        ]);
         m
     }) {
         Err(why) => {