Index: src/apps/devices/Device.cpp
===================================================================
--- src/apps/devices/Device.cpp	(revision 37630)
+++ src/apps/devices/Device.cpp	(working copy)
@@ -32,7 +32,8 @@
 	"Satellite communications controller",  // 0x0f
 	"Encryption controller",  				// 0x10
 	"Signal processing controller",			// 0x11
-	"Computer"								// 0x12 (added later)
+	"Computer",								// 0x12 (added later)
+	"ACPI controller"			// 0x13 (added later)
 };
 
 
Index: src/apps/devices/DeviceACPI.h
===================================================================
--- src/apps/devices/DeviceACPI.h	(revision 0)
+++ src/apps/devices/DeviceACPI.h	(revision 0)
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2008-2010 Haiku Inc. All rights reserved.
+ * Distributed under the terms of the MIT License.
+ *
+ * Authors:
+ *		Alexander von Gluck (kallisti5)
+ */
+#ifndef DEVICEACPI_H
+#define DEVICEACPI_H
+
+
+#include "Device.h"
+
+
+class DeviceACPI : public Device {
+public:
+						DeviceACPI(Device* parent);
+	virtual				~DeviceACPI();
+	virtual Attributes	GetBusAttributes();
+	virtual BString		GetBusStrings();
+	virtual void		InitFromAttributes();
+	
+	virtual BString		GetBusTabName()
+							{ return "ACPI Information"; }
+};
+
+#endif /* DEVICEACPI_H */
Index: src/apps/devices/Device.h
===================================================================
--- src/apps/devices/Device.h	(revision 37630)
+++ src/apps/devices/Device.h	(working copy)
@@ -24,6 +24,7 @@
 	BUS_ISA = 1,
 	BUS_PCI,
 	BUS_SCSI,
+	BUS_ACPI,
 	BUS_NONE
 } BusType;
 
@@ -45,7 +46,8 @@
 typedef enum {
 	CAT_NONE = 0,
 	CAT_BUS = 6,
-	CAT_COMPUTER = 0x12
+	CAT_COMPUTER = 0x12,
+	CAT_ACPI = 0x13
 } Category;
 
 
Index: src/apps/devices/DevicesView.cpp
===================================================================
--- src/apps/devices/DevicesView.cpp	(revision 37630)
+++ src/apps/devices/DevicesView.cpp	(working copy)
@@ -277,21 +277,28 @@
 	// Determine what type of device it is and create it
 	for (unsigned int i = 0; i < attributes.size(); i++) {
 		// Devices Root
-		if (attributes[i].fName == "device/pretty name"
+		if (attributes[i].fName == B_DEVICE_PRETTY_NAME
 				&& attributes[i].fValue == "Devices Root") {
 			newDevice = new Device(parent, BUS_NONE, CAT_COMPUTER, "Computer");
 			break;
 		}
 
+		// ACPI Controller
+		if (attributes[i].fName == B_DEVICE_PRETTY_NAME
+				&& attributes[i].fValue == "ACPI") {
+			newDevice = new Device(parent, BUS_ACPI, CAT_BUS, "ACPI Controller");
+			break;
+		}
+
 		// PCI bus
-		if (attributes[i].fName == "device/pretty name"
+		if (attributes[i].fName == B_DEVICE_PRETTY_NAME
 				&& attributes[i].fValue == "PCI") {
 			newDevice = new Device(parent, BUS_PCI, CAT_BUS, "PCI bus");
 			break;
 		}
 
 		// ISA bus
-		if (attributes[i].fName == "device/bus"
+		if (attributes[i].fName == B_DEVICE_BUS
 				&& attributes[i].fValue == "isa") {
 			newDevice = new Device(parent, BUS_ISA, CAT_BUS, "ISA bus");
 			break;
@@ -303,6 +310,13 @@
 			newDevice = new DevicePCI(parent);
 			break;
 		}
+
+		// ACPI device
+		if (attributes[i].fName == B_DEVICE_BUS
+				&& attributes[i].fValue == "acpi") {
+			newDevice = new DeviceACPI(parent);
+			break;
+		}
 	}
 
 	if (newDevice == NULL) {
Index: src/apps/devices/DevicesView.h
===================================================================
--- src/apps/devices/DevicesView.h	(revision 37630)
+++ src/apps/devices/DevicesView.h	(working copy)
@@ -26,6 +26,7 @@
 
 #include "Device.h"
 #include "DevicePCI.h"
+#include "DeviceACPI.h"
 #include "PropertyList.h"
 #include "PropertyListPlain.h"
 
Index: src/apps/devices/Jamfile
===================================================================
--- src/apps/devices/Jamfile	(revision 37630)
+++ src/apps/devices/Jamfile	(working copy)
@@ -65,6 +65,7 @@
 	DevicesView.cpp
 	dm_wrapper.c
 	DevicePCI.cpp
+	DeviceACPI.cpp
 	Device.cpp
 	PropertyList.cpp
 	PropertyListPlain.cpp
Index: src/apps/devices/DeviceACPI.cpp
===================================================================
--- src/apps/devices/DeviceACPI.cpp	(revision 0)
+++ src/apps/devices/DeviceACPI.cpp	(revision 0)
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2008-2010 Haiku Inc. All rights reserved.
+ * Distributed under the terms of the MIT License.
+ *
+ * Authors:
+ *		Alexander von Gluck (kallisti5)
+ */
+
+
+#include <sstream>
+#include <stdlib.h>
+
+#include "DeviceACPI.h"
+
+
+DeviceACPI::DeviceACPI(Device* parent)
+	:
+	Device(parent)
+{
+}
+
+
+DeviceACPI::~DeviceACPI()
+{
+}
+
+
+void
+DeviceACPI::InitFromAttributes()
+{
+	BString outlineName;
+	BString ACPIPath;
+
+	ACPIPath = GetAttribute("acpi/path").fValue;
+
+	// Grab just the root node info
+	// We grab 6 characters to not identify sub nodes of root node
+	ACPIPath.Truncate(6);
+
+	fCategory = (Category)CAT_ACPI;
+
+	// Identify Predefined root namespaces (ACPI Spec 4.0a, p162)
+	if (ACPIPath == "\\_SB_") {
+		outlineName = "ACPI System Bus";
+	} else if (ACPIPath == "\\_TZ_") {
+		outlineName = "ACPI Thermal Zone";
+	} else if (ACPIPath == "\\_PR_.") {
+		// each CPU node is considered a root node
+		outlineName = "ACPI Processor Namespace";
+	} else if (ACPIPath == "\\_SI_") {
+		outlineName = "ACPI System Indicator";
+	} else {
+		outlineName = "ACPI node";
+	}
+
+	SetAttribute("Device name", outlineName.String());
+	SetAttribute("Manufacturer", "Not implimented");
+
+	SetText(outlineName.String());
+}
+
+
+Attributes
+DeviceACPI::GetBusAttributes()
+{
+	// Push back things that matter for ACPI
+	Attributes attributes;
+	attributes.push_back(GetAttribute("device/bus"));
+	attributes.push_back(GetAttribute("acpi/path"));
+	attributes.push_back(GetAttribute("acpi/type"));
+	return attributes;
+}
+
+
+BString
+DeviceACPI::GetBusStrings()
+{
+	BString str;
+	str << "Class Info:\t\t\t\t: " << fAttributeMap["Class Info"];
+	return str;
+}
