diff --git a/include/version.mk b/include/version.mk
index 575398bc2069b2383ba5364533fdbf7bb5d900de..a84065d1dd14c5411f21b6288f7d36db33f47692 100644
--- a/include/version.mk
+++ b/include/version.mk
@@ -12,7 +12,10 @@ PKG_CONFIG_DEPENDS += \
 	CONFIG_VERSION_NUMBER \
 	CONFIG_VERSION_NICK \
 	CONFIG_VERSION_REPO \
-	CONFIG_VERSION_DIST
+	CONFIG_VERSION_DIST \
+	CONFIG_VERSION_MANUFACTURER \
+	CONFIG_VERSION_PRODUCT \
+	CONFIG_VERSION_HWREV \
 
 VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER))
 VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),$(REVISION))
@@ -29,6 +32,14 @@ VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),http://downloads.openwrt.org/
 VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST))
 VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt)
 
+VERSION_MANUFACTURER:=$(call qstrip,$(CONFIG_VERSION_MANUFACTURER))
+VERSION_MANUFACTURER:=$(if $(VERSION_MANUFACTURER),$(VERSION_MANUFACTURER),OpenWrt)
+
+VERSION_PRODUCT:=$(call qstrip,$(CONFIG_VERSION_PRODUCT))
+VERSION_PRODUCT:=$(if $(VERSION_PRODUCT),$(VERSION_PRODUCT),Generic)
+
+VERSION_HWREV:=$(call qstrip,$(CONFIG_VERSION_HWREV))
+VERSION_HWREV:=$(if $(VERSION_HWREV),$(VERSION_HWREV),v0)
 
 define taint2sym
 $(CONFIG_$(firstword $(subst :, ,$(subst +,,$(subst -,,$(1))))))
@@ -66,3 +77,6 @@ VERSION_SED:=$(SED) 's,%U,$(VERSION_REPO),g' \
 	-e 's,%T,$(BOARD),g' \
 	-e 's,%S,$(BOARD)/$(if $(SUBTARGET),$(SUBTARGET),generic),g' \
 	-e 's,%t,$(VERSION_TAINTS),g' \
+	-e 's,%M,$(VERSION_MANUFACTURER),g' \
+	-e 's,%P,$(VERSION_PRODUCT),g' \
+	-e 's,%h,$(VERSION_HWREV),g'
diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 5faa439454a120908d7db3f2e7bb4dbaa1453a6f..76a4dabe0ed047d71e3fcd7acb8e6c3d270701c8 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -111,7 +111,8 @@ define Package/base-files/install
 	$(VERSION_SED) \
 		$(1)/etc/banner \
 		$(1)/etc/openwrt_version \
-		$(1)/etc/openwrt_release
+		$(1)/etc/openwrt_release \
+		$(1)/etc/device_info
 
 	mkdir -p $(1)/CONTROL
 	mkdir -p $(1)/dev
diff --git a/package/base-files/files/etc/device_info b/package/base-files/files/etc/device_info
new file mode 100644
index 0000000000000000000000000000000000000000..da2c4a3b9d7521f07af106277dd06634b1582bf6
--- /dev/null
+++ b/package/base-files/files/etc/device_info
@@ -0,0 +1,3 @@
+DEVICE_MANUFACTURER="%M"
+DEVICE_PRODUCT="%P"
+DEVICE_REVISION="%h"
diff --git a/package/base-files/image-config.in b/package/base-files/image-config.in
index a9eb78c4f9e67463ecbcf858d451c8cf96965cea..66134aad3c546476effb9fb222f2c38d6942be01 100644
--- a/package/base-files/image-config.in
+++ b/package/base-files/image-config.in
@@ -142,24 +142,26 @@ menuconfig VERSIONOPT
 		they're useful for release builds or custom OpenWrt redistributions
 		that should carry custom version tags.
 
+if VERSIONOPT
+
 	config VERSION_DIST
 		string
-		prompt "Release distribution" if VERSIONOPT
-		default "OpenWrt" if VERSIONOPT
+		prompt "Release distribution"
+		default "OpenWrt"
 		help
 			This is the name of the release distribution.
 			If unspecified, it defaults to OpenWrt.
 
 	config VERSION_NICK
 		string
-		prompt "Release version nickname" if VERSIONOPT
+		prompt "Release version nickname"
 		help
 			This is the release codename embedded in the image.
 			If unspecified, it defaults to the name of source branch.
 
 	config VERSION_NUMBER
 		string
-		prompt "Release version number" if VERSIONOPT
+		prompt "Release version number"
 		help
 			This is the release version number embedded in the image.
 			If unspecified, it defaults to the svn or git-svn revision
@@ -167,8 +169,8 @@ menuconfig VERSIONOPT
 
 	config VERSION_REPO
 		string
-		prompt "Release repository" if VERSIONOPT
-		default "http://downloads.openwrt.org/snapshots/trunk/%T/packages" if VERSIONOPT
+		prompt "Release repository"
+		default "http://downloads.openwrt.org/snapshots/trunk/%T/packages"
 		help
 			This is the repository address embedded in the image, it defaults
 			to the trunk snapshot repo; the url may contain the following placeholders:
@@ -184,6 +186,28 @@ menuconfig VERSIONOPT
 			 %T .. Target name
 			 %S .. Target/Subtarget name
 
+	config VERSION_MANUFACTURER
+		string
+		prompt "Manufacturer name"
+		help
+			This is the manufacturer name embedded in /etc/device_info
+			Useful for OEMs building OpenWrt based firmware
+
+	config VERSION_PRODUCT
+		string
+		prompt "Product name"
+		help
+			This is the product name embedded in /etc/device_info
+			Useful for OEMs building OpenWrt based firmware
+
+	config VERSION_HWREV
+		string
+		prompt "Hardware revision"
+		help
+			This is the hardware revision string embedded in /etc/device_info
+			Useful for OEMs building OpenWrt based firmware
+endif
+
 menuconfig SMIMEOPT
 	bool "Package signing options" if IMAGEOPT
         default n