diff --git a/ini_private.go b/ini_private.go
index 0f2bc06..887aa76 100644
--- a/ini_private.go
+++ b/ini_private.go
@@ -366,10 +366,7 @@
 		groups := i.matchingGroups(name)
 
 		if len(groups) == 0 {
-			return newError(
-				ErrUnknownGroup,
-				fmt.Sprintf("could not find option group `%s'", name),
-			)
+			return newErrorf(ErrUnknownGroup, "could not find option group `%s'", name)
 		}
 
 		for _, inival := range section {
diff --git a/parser_private.go b/parser_private.go
index c0811fc..e25cffd 100644
--- a/parser_private.go
+++ b/parser_private.go
@@ -159,8 +159,7 @@
 func (p *Parser) parseOption(s *parseState, name string, option *Option, canarg bool, argument *string) (err error) {
 	if !option.canArgument() {
 		if argument != nil {
-			msg := fmt.Sprintf("bool flag `%s' cannot have an argument", option)
-			return newError(ErrNoArgumentForBool, msg)
+			return newErrorf(ErrNoArgumentForBool, "bool flag `%s' cannot have an argument", option)
 		}
 
 		err = option.set(nil)
@@ -172,8 +171,7 @@
 		} else {
 			arg = s.pop()
 			if argumentIsOption(arg) {
-				msg := fmt.Sprintf("expected argument for flag `%s', but got option `%s'", option, arg)
-				return newError(ErrExpectedArgument, msg)
+				return newErrorf(ErrExpectedArgument, "expected argument for flag `%s', but got option `%s'", option, arg)
 			}
 		}
 
@@ -195,18 +193,15 @@
 			}
 		}
 	} else {
-		msg := fmt.Sprintf("expected argument for flag `%s'", option)
-		err = newError(ErrExpectedArgument, msg)
+		err = newErrorf(ErrExpectedArgument, "expected argument for flag `%s'", option)
 	}
 
 	if err != nil {
 		if _, ok := err.(*Error); !ok {
-			msg := fmt.Sprintf("invalid argument for flag `%s' (expected %s): %s",
+			err = newErrorf(ErrMarshal, "invalid argument for flag `%s' (expected %s): %s",
 				option,
 				option.value.Type(),
 				err.Error())
-
-			err = newError(ErrMarshal, msg)
 		}
 	}
 
@@ -222,7 +217,7 @@
 		return p.parseOption(s, name, option, canarg, argument)
 	}
 
-	return newError(ErrUnknownFlag, fmt.Sprintf("unknown flag `%s'", name))
+	return newErrorf(ErrUnknownFlag, "unknown flag `%s'", name)
 }
 
 func (p *Parser) splitShortConcatArg(s *parseState, optname string) (string, *string) {
@@ -259,7 +254,7 @@
 				return err
 			}
 		} else {
-			return newError(ErrUnknownFlag, fmt.Sprintf("unknown flag `%s'", shortname))
+			return newErrorf(ErrUnknownFlag, "unknown flag `%s'", shortname)
 		}
 
 		// Only the first option can have a concatted argument, so just
