diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..68892bf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+/target
+/.classpath
+/.project
+/.settings/org.maven.ide.eclipse.prefs
+/.settings/org.eclipse.m2e.core.prefs
+/.idea
diff --git a/BUCK b/BUCK
new file mode 100644
index 0000000..e9575ac
--- /dev/null
+++ b/BUCK
@@ -0,0 +1,8 @@
+gerrit_plugin(
+  name = 'ref-protection',
+  srcs = glob(['src/main/java/**/*.java']),
+  resources = glob(['src/main/resources/**/*']),
+  manifest_entries = [
+    'Gerrit-Module: com.googlesource.gerrit.plugins.refprotection.RefProtectionModule'
+  ],
+)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefProtectionModule.java b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefProtectionModule.java
new file mode 100644
index 0000000..d8b3f14
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefProtectionModule.java
@@ -0,0 +1,13 @@
+package com.googlesource.gerrit.plugins.refprotection;
+
+import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
+import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.inject.AbstractModule;
+
+public class RefProtectionModule extends AbstractModule {
+  @Override
+  protected void configure() {
+    DynamicSet.bind(binder(), GitReferenceUpdatedListener.class).to(
+        RefUpdateListener.class);
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
new file mode 100644
index 0000000..92b6527
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
@@ -0,0 +1,82 @@
+package com.googlesource.gerrit.plugins.refprotection;
+
+import static org.eclipse.jgit.lib.Constants.R_HEADS;
+import static org.eclipse.jgit.lib.Constants.R_TAGS;
+
+import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
+
+import org.eclipse.jgit.lib.ObjectId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+class RefUpdateListener implements GitReferenceUpdatedListener {
+
+  private static final Logger log = LoggerFactory
+      .getLogger(RefUpdateListener.class);
+
+  @Override
+  public void onGitReferenceUpdated(final Event event) {
+    if (!isNewRef(event) && isRelevantRef(event)) {
+      if (isRefDeleted(event) || isNonFastForwardUpdate(event)) {
+        createBackupBranch(event);
+      }
+    }
+  }
+
+  /**
+   * Create a backup branch for the given ref.
+   *
+   * @param event the Event
+   */
+  private void createBackupBranch(Event event) {
+    // TODO
+  }
+
+  /**
+   * Is the event on a relevant ref?
+   *
+   * @param event the Event
+   * @return True if relevant, otherwise False.
+   */
+  private boolean isRelevantRef(Event event) {
+    return event.getRefName().startsWith(R_HEADS)
+        || event.getRefName().startsWith(R_TAGS);
+  }
+
+  /**
+   * Is the event a new ref?
+   *
+   * @param event the Event
+   * @return True if a new ref, otherwise False.
+   */
+  private boolean isNewRef(Event event) {
+    return event.getOldObjectId().equals(ObjectId.zeroId().getName());
+  }
+
+  /**
+   * Is the event a ref deletion?
+   *
+   * @param event the Event
+   * @return True if a ref deletion, otherwise False.
+   */
+  private boolean isRefDeleted(Event event) {
+    if (event.getNewObjectId().equals(ObjectId.zeroId().getName())) {
+      log.info(String.format(
+          "Ref Deleted: project [%s] refname [%s] old object id [%s]",
+          event.getProjectName(), event.getRefName(), event.getOldObjectId()));
+      return true;
+    }
+    return false;
+  }
+
+  /**
+   * Is the event a non-fast-forward update?
+   *
+   * @param event the Event
+   * @return True if a non-fast-forward update, otherwise False.
+   */
+  private boolean isNonFastForwardUpdate(Event event) {
+    // TODO
+    return false;
+  }
+}
diff --git a/src/main/resources/Documentation/about.md b/src/main/resources/Documentation/about.md
new file mode 100644
index 0000000..b917002
--- /dev/null
+++ b/src/main/resources/Documentation/about.md
@@ -0,0 +1,2 @@
+Makes backups of deleted refs.
+
