diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp
index e43ed876d6e3235e58ea3c738c66030df0bdc868..0cec0a30e022a066de1c306439d4418db33d80fc 100644
--- a/src/plugins/android/androiddevice.cpp
+++ b/src/plugins/android/androiddevice.cpp
@@ -37,7 +37,9 @@ namespace Android {
 namespace Internal {
 
 AndroidDevice::AndroidDevice():
-    ProjectExplorer::IDevice(Core::Id(Constants::ANDROID_DEVICE_TYPE), IDevice::AutoDetected,
+    ProjectExplorer::IDevice(Core::Id(Constants::ANDROID_DEVICE_TYPE),
+                             IDevice::AutoDetected,
+                             IDevice::Hardware,
                              Core::Id(Constants::ANDROID_DEVICE_ID))
 {
     setDisplayName(QCoreApplication::translate("ProjectExplorer::AndroidDevice", "Run on Android"));
diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
index b3422ca66790b7f75ab88c7f6207c5676ceee48d..e6c2f76a9f75fa9156a28fb0413381fd6b4d09e3 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
+++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
@@ -71,7 +71,9 @@ IDevice::Ptr DesktopDevice::clone() const
     return Ptr(new DesktopDevice(*this));
 }
 
-DesktopDevice::DesktopDevice() : IDevice(Core::Id(Constants::DESKTOP_DEVICE_TYPE), IDevice::AutoDetected,
+DesktopDevice::DesktopDevice() : IDevice(Core::Id(Constants::DESKTOP_DEVICE_TYPE),
+                                         IDevice::AutoDetected,
+                                         IDevice::Hardware,
                                          Core::Id(Constants::DESKTOP_DEVICE_ID))
 {
     setDisplayName(QCoreApplication::translate("ProjectExplorer::DesktopDevice", "Run locally"));
diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp
index 476cb8f883c8d68cac880ce462f83703c48e188d..13675b3dd08d1577ba13fb1d1fdf80c92b33ddda 100644
--- a/src/plugins/projectexplorer/devicesupport/idevice.cpp
+++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp
@@ -150,6 +150,7 @@ const char DisplayNameKey[] = "Name";
 const char TypeKey[] = "OsType";
 const char IdKey[] = "InternalId";
 const char OriginKey[] = "Origin";
+const char MachineTypeKey[] = "Type";
 
 // Connection
 const char HostKey[] = "Host";
@@ -163,6 +164,7 @@ const char TimeoutKey[] = "Timeout";
 
 typedef QSsh::SshConnectionParameters::AuthenticationType AuthType;
 const AuthType DefaultAuthType = QSsh::SshConnectionParameters::AuthenticationByKey;
+const IDevice::MachineType DefaultMachineType = IDevice::Hardware;
 
 const int DefaultTimeout = 10;
 
@@ -172,7 +174,8 @@ class IDevicePrivate
 public:
     IDevicePrivate() :
         origin(IDevice::AutoDetected),
-        deviceState(IDevice::DeviceStateUnknown)
+        deviceState(IDevice::DeviceStateUnknown),
+        machineType(IDevice::Hardware)
     { }
 
     QString displayName;
@@ -180,6 +183,7 @@ public:
     IDevice::Origin origin;
     Core::Id id;
     IDevice::DeviceState deviceState;
+    IDevice::MachineType machineType;
 
     QSsh::SshConnectionParameters sshParameters;
     Utils::PortList freePorts;
@@ -189,10 +193,12 @@ public:
 IDevice::IDevice() : d(new Internal::IDevicePrivate)
 { }
 
-IDevice::IDevice(Core::Id type, Origin origin, Core::Id id) : d(new Internal::IDevicePrivate)
+IDevice::IDevice(Core::Id type, Origin origin, MachineType machineType, Core::Id id)
+    : d(new Internal::IDevicePrivate)
 {
     d->type = type;
     d->origin = origin;
+    d->machineType = machineType;
     QTC_CHECK(origin == ManuallyAdded || id.isValid());
     d->id = id.isValid() ? id : newId();
 }
@@ -288,6 +294,7 @@ void IDevice::fromMap(const QVariantMap &map)
 
     d->freePorts = Utils::PortList::fromString(map.value(PortsSpecKey,
         QLatin1String("10000-10100")).toString());
+    d->machineType = static_cast<MachineType>(map.value(MachineTypeKey, DefaultMachineType).toInt());
 }
 
 QVariantMap IDevice::toMap() const
@@ -298,6 +305,7 @@ QVariantMap IDevice::toMap() const
     map.insert(QLatin1String(IdKey), d->id.name());
     map.insert(QLatin1String(OriginKey), d->origin);
 
+    map.insert(MachineTypeKey, d->machineType);
     map.insert(HostKey, d->sshParameters.host);
     map.insert(SshPortKey, d->sshParameters.port);
     map.insert(UserNameKey, d->sshParameters.userName);
@@ -353,6 +361,11 @@ Utils::PortList IDevice::freePorts() const
     return d->freePorts;
 }
 
+IDevice::MachineType IDevice::machineType() const
+{
+    return d->machineType;
+}
+
 QString IDevice::defaultPrivateKeyFilePath()
 {
     return QDesktopServices::storageLocation(QDesktopServices::HomeLocation)
diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h
index 456dd8641fcb633c43958371ed4aca31ea1c4ccd..427bbffb0bc10fd1dfdc7ae121b7b5b4ae0bd5ba 100644
--- a/src/plugins/projectexplorer/devicesupport/idevice.h
+++ b/src/plugins/projectexplorer/devicesupport/idevice.h
@@ -57,6 +57,7 @@ public:
     typedef QSharedPointer<const IDevice> ConstPtr;
 
     enum Origin { ManuallyAdded, AutoDetected };
+    enum MachineType { Hardware, Emulator };
 
     virtual ~IDevice();
 
@@ -108,9 +109,11 @@ public:
     Utils::PortList freePorts() const;
     void setFreePorts(const Utils::PortList &freePorts);
 
+    MachineType machineType() const;
+
 protected:
     IDevice();
-    IDevice(Core::Id type, Origin origin, Core::Id id = Core::Id());
+    IDevice(Core::Id type, Origin origin, MachineType machineType, Core::Id id = Core::Id());
     IDevice(const IDevice &other);
 
     Ptr sharedFromThis();
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianidevice.cpp b/src/plugins/qt4projectmanager/qt-s60/symbianidevice.cpp
index a7209bbc33927c23d57f1b5fc5e16a9305ddf323..faf0682ad1ab962a8f017291426a8793dfe8e479 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianidevice.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianidevice.cpp
@@ -51,6 +51,7 @@ namespace Qt4ProjectManager {
 SymbianIDevice::SymbianIDevice() :
     ProjectExplorer::IDevice(Internal::SymbianIDeviceFactory::deviceType(),
                              ProjectExplorer::IDevice::AutoDetected,
+                             ProjectExplorer::IDevice::Hardware,
                              Core::Id("Symbian Device")),
     m_port(QLatin1String(DEFAULT_CODA_TCP_PORT)),
     m_communicationChannel(CommunicationCodaSerialConnection)
diff --git a/src/plugins/remotelinux/linuxdeviceconfiguration.cpp b/src/plugins/remotelinux/linuxdeviceconfiguration.cpp
index 11cae54d24d74a8d601892cc3fdd0944de57460a..3a567df716d0dd61c654856654900ca21ac9dc9d 100644
--- a/src/plugins/remotelinux/linuxdeviceconfiguration.cpp
+++ b/src/plugins/remotelinux/linuxdeviceconfiguration.cpp
@@ -45,9 +45,6 @@
 
 namespace RemoteLinux {
 
-const QLatin1String MachineTypeKey("Type");
-const LinuxDeviceConfiguration::MachineType DefaultMachineType = LinuxDeviceConfiguration::Hardware;
-
 LinuxDeviceConfiguration::Ptr LinuxDeviceConfiguration::create(const QString &name,
        Core::Id type, MachineType machineType, Origin origin, Core::Id id)
 {
@@ -102,18 +99,16 @@ void LinuxDeviceConfiguration::executeAction(Core::Id actionId, QWidget *parent)
         d->exec();
 }
 
-LinuxDeviceConfiguration::LinuxDeviceConfiguration(const QString &name, Core::Id type,
-        MachineType machineType, Origin origin, Core::Id id)
-    : IDevice(type, origin, id)
+LinuxDeviceConfiguration::LinuxDeviceConfiguration(const QString &name, Core::Id type, MachineType machineType,
+        Origin origin, Core::Id id)
+    : IDevice(type, origin, machineType, id)
 {
     setDisplayName(name);
-    m_machineType = machineType;
 }
 
 LinuxDeviceConfiguration::LinuxDeviceConfiguration(const LinuxDeviceConfiguration &other)
     : IDevice(other)
 {
-    m_machineType = other.machineType();
 }
 
 LinuxDeviceConfiguration::Ptr LinuxDeviceConfiguration::create()
@@ -121,27 +116,9 @@ LinuxDeviceConfiguration::Ptr LinuxDeviceConfiguration::create()
     return Ptr(new LinuxDeviceConfiguration);
 }
 
-void LinuxDeviceConfiguration::fromMap(const QVariantMap &map)
-{
-    IDevice::fromMap(map);
-    m_machineType = static_cast<MachineType>(map.value(MachineTypeKey, DefaultMachineType).toInt());
-}
-
-QVariantMap LinuxDeviceConfiguration::toMap() const
-{
-    QVariantMap map = IDevice::toMap();
-    map.insert(MachineTypeKey, m_machineType);
-    return map;
-}
-
 ProjectExplorer::IDevice::Ptr LinuxDeviceConfiguration::clone() const
 {
     return Ptr(new LinuxDeviceConfiguration(*this));
 }
 
-LinuxDeviceConfiguration::MachineType LinuxDeviceConfiguration::machineType() const
-{
-    return m_machineType;
-}
-
 } // namespace RemoteLinux
diff --git a/src/plugins/remotelinux/linuxdeviceconfiguration.h b/src/plugins/remotelinux/linuxdeviceconfiguration.h
index b1e02a394e59dd675cc9e55979d36a2354b67c79..3f54da66540c3c04a1f44c98ad71622175babd18 100644
--- a/src/plugins/remotelinux/linuxdeviceconfiguration.h
+++ b/src/plugins/remotelinux/linuxdeviceconfiguration.h
@@ -51,10 +51,6 @@ public:
     typedef QSharedPointer<LinuxDeviceConfiguration> Ptr;
     typedef QSharedPointer<const LinuxDeviceConfiguration> ConstPtr;
 
-    enum MachineType { Hardware, Emulator };
-
-    MachineType machineType() const;
-
     static Ptr create();
     static Ptr create(const QString &name, Core::Id type, MachineType machineType,
                       Origin origin = ManuallyAdded, Core::Id id = Core::Id());
@@ -64,20 +60,16 @@ public:
     QList<Core::Id> actionIds() const;
     QString displayNameForActionId(Core::Id actionId) const;
     void executeAction(Core::Id actionId, QWidget *parent) const;
-    void fromMap(const QVariantMap &map);
     ProjectExplorer::IDevice::Ptr clone() const;
 
 protected:
     LinuxDeviceConfiguration() {}
-    LinuxDeviceConfiguration(const QString &name, Core::Id type, MachineType machineType,
-                             Origin origin, Core::Id id);
+    LinuxDeviceConfiguration(const QString &name, Core::Id type,
+                             MachineType machineType, Origin origin, Core::Id id);
     LinuxDeviceConfiguration(const LinuxDeviceConfiguration &other);
 
-    QVariantMap toMap() const;
-
 private:
     LinuxDeviceConfiguration &operator=(const LinuxDeviceConfiguration &);
-    LinuxDeviceConfiguration::MachineType m_machineType;
 };
 
 } // namespace RemoteLinux