diff --git a/src/cam/options.cpp b/src/cam/options.cpp
index c9ca017b4cf3fa3d..d3bff1cd897a5cfb 100644
--- a/src/cam/options.cpp
+++ b/src/cam/options.cpp
@@ -30,8 +30,8 @@ bool OptionsParser::addOption(int opt, const char *help, const char *name,
 	if (optionsMap_.find(opt) != optionsMap_.end())
 		return false;
 
-	options_.push_back(Option({ opt, name, argument, argumentName, help }));
-	optionsMap_[opt] = &options_.back();
+	optionsMap_[opt] = Option({ opt, name, argument, argumentName, help });
+
 	return true;
 }
 
@@ -43,14 +43,16 @@ OptionsParser::Options OptionsParser::parse(int argc, char **argv)
 	 * Allocate short and long options arrays large enough to contain all
 	 * options.
 	 */
-	char shortOptions[options_.size() * 3 + 2] = {};
-	struct option longOptions[options_.size() + 1] = {};
+	char shortOptions[optionsMap_.size() * 3 + 2] = {};
+	struct option longOptions[optionsMap_.size() + 1] = {};
 	unsigned int ids = 0;
 	unsigned int idl = 0;
 
 	shortOptions[ids++] = ':';
 
-	for (const Option &option : options_) {
+	for (auto const &iter : optionsMap_) {
+		const Option &option = iter.second;
+
 		if (option.hasShortOption()) {
 			shortOptions[ids++] = option.opt;
 			if (option.argument != ArgumentNone)
@@ -112,7 +114,8 @@ void OptionsParser::usage()
 
 	unsigned int indent = 0;
 
-	for (const Option &option : options_) {
+	for (auto const &iter : optionsMap_) {
+		const Option &option = iter.second;
 		unsigned int length = 14;
 		if (option.hasLongOption())
 			length += 2 + strlen(option.name);
@@ -127,7 +130,8 @@ void OptionsParser::usage()
 
 	indent = (indent + 7) / 8 * 8;
 
-	for (const Option &option : options_) {
+	for (auto const &iter : optionsMap_) {
+		const Option &option = iter.second;
 		std::string argument;
 		if (option.hasShortOption())
 			argument = std::string("  -")
diff --git a/src/cam/options.h b/src/cam/options.h
index dfb7fcc9f6fa3324..cb7286a0a8005579 100644
--- a/src/cam/options.h
+++ b/src/cam/options.h
@@ -57,8 +57,7 @@ private:
 		bool hasLongOption() const { return name != nullptr; }
 	};
 
-	std::vector<Option> options_;
-	std::map<unsigned int, Option *> optionsMap_;
+	std::map<unsigned int, Option> optionsMap_;
 };
 
 #endif /* __CAM_OPTIONS_H__ */
