diff --git a/server/src/main/java/com/metamx/druid/db/DatabaseRuleManager.java b/server/src/main/java/com/metamx/druid/db/DatabaseRuleManager.java
index 0ecc9a2..a9955d8 100644
--- a/server/src/main/java/com/metamx/druid/db/DatabaseRuleManager.java
+++ b/server/src/main/java/com/metamx/druid/db/DatabaseRuleManager.java
@@ -53,7 +53,12 @@
  */
 public class DatabaseRuleManager
 {
-  public static void createDefaultRule(final DBI dbi, final String ruleTable, final ObjectMapper jsonMapper)
+  public static void createDefaultRule(
+      final DBI dbi,
+      final String ruleTable,
+      final String defaultDatasource,
+      final ObjectMapper jsonMapper
+  )
   {
     try {
       dbi.withHandle(
@@ -64,8 +69,9 @@
             {
               List<Map<String, Object>> existing = handle.select(
                   String.format(
-                      "SELECT id from %s where datasource='_default';",
-                      ruleTable
+                      "SELECT id from %s where datasource=%s;",
+                      ruleTable,
+                      defaultDatasource
                   )
               );
 
@@ -80,7 +86,6 @@
                       "_default_tier"
                   )
               );
-              final String dataSource = "_default";
               final String version = new DateTime().toString();
               handle.createStatement(
                   String.format(
@@ -88,8 +93,8 @@
                       ruleTable
                   )
               )
-                    .bind("id", String.format("%s_%s", dataSource, version))
-                    .bind("dataSource", dataSource)
+                    .bind("id", String.format("%s_%s", defaultDatasource, version))
+                    .bind("dataSource", defaultDatasource)
                     .bind("version", version)
                     .bind("payload", jsonMapper.writeValueAsString(defaultRules))
                     .execute();
diff --git a/server/src/main/java/com/metamx/druid/db/DatabaseRuleManagerConfig.java b/server/src/main/java/com/metamx/druid/db/DatabaseRuleManagerConfig.java
index 33b35ad..41e21a0 100644
--- a/server/src/main/java/com/metamx/druid/db/DatabaseRuleManagerConfig.java
+++ b/server/src/main/java/com/metamx/druid/db/DatabaseRuleManagerConfig.java
@@ -31,6 +31,7 @@
   public abstract String getRuleTable();
 
   @Config("druid.database.defaultDatasource")
+  @Default("_default")
   public abstract String getDefaultDatasource();
 
   @Config("druid.database.rules.poll.duration")
diff --git a/server/src/main/java/com/metamx/druid/http/MasterMain.java b/server/src/main/java/com/metamx/druid/http/MasterMain.java
index 6bb6d50..51df502 100644
--- a/server/src/main/java/com/metamx/druid/http/MasterMain.java
+++ b/server/src/main/java/com/metamx/druid/http/MasterMain.java
@@ -132,7 +132,12 @@
         databaseRuleManagerConfig,
         dbi
     );
-    DatabaseRuleManager.createDefaultRule(dbi, databaseRuleManagerConfig.getRuleTable(), jsonMapper);
+    DatabaseRuleManager.createDefaultRule(
+        dbi,
+        databaseRuleManagerConfig.getRuleTable(),
+        databaseRuleManagerConfig.getDefaultDatasource(),
+        jsonMapper
+    );
 
     final ScheduledExecutorService globalScheduledExec = scheduledExecutorFactory.create(1, "Global--%d");
     final MonitorScheduler healthMonitor = new MonitorScheduler(
diff --git a/server/src/main/java/com/metamx/druid/utils/DruidSetup.java b/server/src/main/java/com/metamx/druid/utils/DruidSetup.java
index 6b7c9e1..8df47ba 100644
--- a/server/src/main/java/com/metamx/druid/utils/DruidSetup.java
+++ b/server/src/main/java/com/metamx/druid/utils/DruidSetup.java
@@ -128,22 +128,26 @@
     InputStream is = null;
     try {
       is = new FileInputStream(pfile);
-    } catch (FileNotFoundException e) {
+    }
+    catch (FileNotFoundException e) {
       System.err.println("File not found: " + pfile);
       System.err.println("No changes made.");
       System.exit(4);
-    } catch (IOException ioe) {
+    }
+    catch (IOException ioe) {
       reportErrorAndExit(pfile, ioe);
     }
     try {
       props.load(is);
-    } catch (IOException e) {
+    }
+    catch (IOException e) {
       reportErrorAndExit(pfile, e);
-    } finally {
+    }
+    finally {
       Closeables.closeQuietly(is);
     }
 
-    if (! Initialization.validateResolveProps(props)) { // bail, errors have been emitted
+    if (!Initialization.validateResolveProps(props)) { // bail, errors have been emitted
       System.exit(9);
     }
 
@@ -152,14 +156,16 @@
     for (String pname : Initialization.SUB_PATH_PROPS) {
       System.out.println("  " + pname + "=" + props.getProperty(pname));
     }
-    System.out.println("  " + "druid.zk.paths.propertiesPath" + "=" +
-        props.getProperty("druid.zk.paths.propertiesPath"));
+    System.out.println(
+        "  " + "druid.zk.paths.propertiesPath" + "=" +
+        props.getProperty("druid.zk.paths.propertiesPath")
+    );
 
   }
 
   /**
    * @param zkClient  zookeeper client.
-   * @param zpathBase     znode base path.
+   * @param zpathBase znode base path.
    * @param zkConnect ZK coordinates in the form host1:port1[,host2:port2[, ...]]
    * @param out
    */
@@ -172,7 +178,8 @@
         out.println("# Begin Properties Listing for zkConnect=" + zkConnect + " zpath=" + propPath);
         try {
           currProps.store(out, "Druid");
-        } catch (IOException ignored) {
+        }
+        catch (IOException ignored) {
         }
         out.println("# End Properties Listing for zkConnect=" + zkConnect + " zpath=" + propPath);
         out.println("# NOTE:  properties like druid.zk.paths.*Path are always stored in zookeeper in absolute form.");
@@ -205,10 +212,10 @@
   }
 
   /**
-   * @param zkClient zookeeper client.
-   * @param zpathBase    znode base path.
-   * @param props    the properties to store.
-   * @param out      the PrintStream for human readable update summary (usually System.out).
+   * @param zkClient  zookeeper client.
+   * @param zpathBase znode base path.
+   * @param props     the properties to store.
+   * @param out       the PrintStream for human readable update summary (usually System.out).
    */
   private static void updatePropertiesZK(ZkClient zkClient, String zpathBase, Properties props, PrintStream out)
   {
@@ -231,7 +238,9 @@
       String currMetaPropVal = "";
       StringBuilder changes = new StringBuilder(1024);
       for (String pname : props.stringPropertyNames()) {
-        if (pname.equals(PropertiesZkSerializer.META_PROP)) continue; // ignore meta prop datestamp, if any
+        if (pname.equals(PropertiesZkSerializer.META_PROP)) {
+          continue; // ignore meta prop datestamp, if any
+        }
         final String pvalue = props.getProperty(pname);
         final String pvalueCurr = currProps.getProperty(pname);
         if (pvalueCurr == null) {
@@ -242,7 +251,7 @@
           } else {
             countDiffer++;
             changes.append("CHANGED: ").append(pname).append("=  PREV=").append(pvalueCurr)
-                .append("   NOW=").append(pvalue).append("\n");
+                   .append("   NOW=").append(pvalue).append("\n");
           }
         }
       }
@@ -257,7 +266,8 @@
         }
       }
       if (countNew + countRemoved + countDiffer > 0) {
-        out.println("Current properties differ: "
+        out.println(
+            "Current properties differ: "
             + countNew + " new,  "
             + countDiffer + " different values, "
             + countRemoved + " removed, "
@@ -281,9 +291,9 @@
   }
 
   /**
-   * @param zkClient zookeeper client.
-   * @param zpathBase    znode base path.
-   * @param out      the PrintStream for human readable update summary.
+   * @param zkClient  zookeeper client.
+   * @param zpathBase znode base path.
+   * @param out       the PrintStream for human readable update summary.
    */
   private static void createZNodes(ZkClient zkClient, String zpathBase, PrintStream out)
   {
@@ -332,6 +342,7 @@
     final String dbConnectionUrl = tmp_props.getProperty("druid.database.connectURI");
     final String username = tmp_props.getProperty("druid.database.user");
     final String password = tmp_props.getProperty("druid.database.password");
+    final String defaultDatasource = tmp_props.getProperty("druid.database.defaultDatasource", "_default");
 
     //
     //   validation
@@ -383,7 +394,12 @@
 
     DbConnector.createSegmentTable(dbConnector.getDBI(), tableName);
     DbConnector.createRuleTable(dbConnector.getDBI(), ruleTableName);
-    DatabaseRuleManager.createDefaultRule(dbConnector.getDBI(), ruleTableName, new DefaultObjectMapper());
+    DatabaseRuleManager.createDefaultRule(
+        dbConnector.getDBI(),
+        ruleTableName,
+        defaultDatasource,
+        new DefaultObjectMapper()
+    );
   }
 
   /**
@@ -391,7 +407,8 @@
    */
   private static void printUsage()
   {
-    System.out.println("Usage: <java invocation> CMD [args]\n"
+    System.out.println(
+        "Usage: <java invocation> CMD [args]\n"
         + "  Where CMD is a particular command:\n"
         + "  CMD choices:\n"
         + "    dump zkConnect baseZkPath    # dump info from zk at given coordinates\n"
