diff --git a/src/modules/hg_branch.rs b/src/modules/hg_branch.rs
index 34b666c4..23d92482 100644
--- a/src/modules/hg_branch.rs
+++ b/src/modules/hg_branch.rs
@@ -1,4 +1,3 @@
-use std::process::Command;
 use unicode_segmentation::UnicodeSegmentation;
 
 use super::{Context, Module, RootModuleConfig};
@@ -9,11 +8,7 @@ use crate::configs::hg_branch::HgBranchConfig;
 ///
 /// Will display the bookmark or branch name if the current directory is an hg repo
 pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
-    let is_hg_repo = context
-        .try_begin_scan()?
-        .set_files(&[".hgignore"])
-        .set_folders(&[".hg"])
-        .is_match();
+    let is_hg_repo = context.try_begin_scan()?.set_folders(&[".hg"]).is_match();
 
     if !is_hg_repo {
         return None;
@@ -25,7 +20,6 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
 
     module.get_prefix().set_value("on ");
 
-    let truncation_symbol = get_graphemes(config.truncation_symbol, 1);
     module.create_segment("symbol", &config.symbol);
 
     // TODO: Once error handling is implemented, warn the user if their config
@@ -40,15 +34,13 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
         config.truncation_length as usize
     };
 
-    let get_branch_name = |tmpl| get_hg_log_template(tmpl, context);
-
-    let branch_name = get_branch_name("{activebookmark}")
-        .or_else(|| get_branch_name("{branch}"))
-        .unwrap_or_else(|| "(no branch)".to_string());
+    let branch_name =
+        get_hg_current_bookmark(context).unwrap_or_else(|| get_hg_branch_name(context));
 
     let truncated_graphemes = get_graphemes(&branch_name, len);
     // The truncation symbol should only be added if we truncated
     let truncated_and_symbol = if len < graphemes_len(&branch_name) {
+        let truncation_symbol = get_graphemes(config.truncation_symbol, 1);
         truncated_graphemes + &truncation_symbol
     } else {
         truncated_graphemes
@@ -62,19 +54,16 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
     Some(module)
 }
 
-fn get_hg_log_template(hgtmpl: &str, ctx: &Context) -> Option<String> {
-    let output = Command::new("hg")
-        .args(&["log", "-r", ".", "--template", hgtmpl])
-        .current_dir(&ctx.current_dir)
-        .output()
-        .ok()
-        .and_then(|output| String::from_utf8(output.stdout).ok())?;
+fn get_hg_branch_name(ctx: &Context) -> String {
+    std::fs::read_to_string(ctx.current_dir.join(".hg").join("branch"))
+        .map(|s| s.trim().into())
+        .unwrap_or_else(|_| "default".to_string())
+}
 
-    if output.is_empty() {
-        None
-    } else {
-        Some(output)
-    }
+fn get_hg_current_bookmark(ctx: &Context) -> Option<String> {
+    std::fs::read_to_string(ctx.current_dir.join(".hg").join("bookmarks.current"))
+        .map(|s| s.trim().into())
+        .ok()
 }
 
 fn get_graphemes(text: &str, length: usize) -> String {
diff --git a/tests/testsuite/hg_branch.rs b/tests/testsuite/hg_branch.rs
index 12d2dc9b..dc54b620 100644
--- a/tests/testsuite/hg_branch.rs
+++ b/tests/testsuite/hg_branch.rs
@@ -29,7 +29,7 @@ fn test_hg_get_branch_fails() -> io::Result<()> {
     expect_hg_branch_with_config(
         tempdir.path(),
         "",
-        &[Expect::BranchName(&"(no branch)"), Expect::NoTruncation],
+        &[Expect::BranchName(&"default"), Expect::NoTruncation],
     )
 }
 
@@ -156,7 +156,7 @@ fn expect_hg_branch_with_config(
 
     let actual = String::from_utf8(output.stdout).unwrap();
 
-    let mut expect_branch_name = "(no branch)";
+    let mut expect_branch_name = "default";
     let mut expect_style = Color::Purple.bold();
     let mut expect_symbol = "\u{e0a0}";
     let mut expect_truncation_symbol = "…";