Index: /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Component.java
===================================================================
--- /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Component.java	(revision 7482)
+++ /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Component.java	(revision 7485)
@@ -1,4 +1,5 @@
 package edu.vt.ossie.wavedev;
 
+import org.python.core.PyException;
 import org.python.core.PyList;
 import org.python.core.PyObject;
@@ -35,5 +36,18 @@
     public PyList getChildren()
     {
-        return getPorts();
+        return isDevice()
+            ? getAssignedComponents()
+            : getPorts();
+    }
+
+
+    // ----------------------------------------------------------
+    @Override
+    public boolean allowChildrenToExpand()
+    {
+        // Don't let components allocated to a device be expandable
+        return isDevice()
+            ? false
+            : super.allowChildrenToExpand();
     }
 
@@ -44,4 +58,51 @@
         // Should this check to see if "device" is found in the type?
         return !"resource".equals(getType());
+    }
+
+
+    // ----------------------------------------------------------
+    public void assignToDevice(Component device)
+    {
+        System.out.println(
+            "assignToDevice: " + this + "(" + isDevice() + ") -> " + device);
+        if (!isDevice())
+        {
+            // First, remove from old device
+            Component oldDevice = getDevice();
+            if (oldDevice != null)
+            {
+                try
+                {
+                    oldDevice.getAssignedComponents().remove(pyObject());
+                }
+                catch (PyException e)
+                {
+                    // object was not in list
+                }
+            }
+
+            // Now add to new device
+            setDevice(device);
+            setNode(device.getNode());
+            device.getAssignedComponents().append(pyObject());
+        }
+    }
+
+
+    // ----------------------------------------------------------
+    public PyList getAssignedComponents()
+    {
+        if (!hasAttribute(ASSIGNED_COMPONENTS))
+        {
+            setAssignedComponents(new PyList());
+        }
+        return getList(ASSIGNED_COMPONENTS);
+    }
+
+
+    // ----------------------------------------------------------
+    public void setAssignedComponents(PyList components)
+    {
+        put(ASSIGNED_COMPONENTS, components);
     }
 
@@ -131,5 +192,5 @@
     public void setDevice(Component device)
     {
-        put(DEVICE, device.pyObject());
+        put(DEVICE, device);
     }
 
@@ -145,5 +206,5 @@
     public void setNode(Node node)
     {
-        put(NODE, node.pyObject());
+        put(NODE, node);
     }
 
@@ -237,6 +298,6 @@
     private static final String UUID                = "uuid";
 
-
-//    self.uuid = uuidgen()
+    private static final String ASSIGNED_COMPONENTS = "xAssignedComponents";
+
 //    self.file_uuid = uuidgen()
 //    self.ace = False
Index: /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Platform.java
===================================================================
--- /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Platform.java	(revision 7482)
+++ /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Platform.java	(revision 7485)
@@ -62,7 +62,9 @@
     public void addNewNode(Node template, Node after)
     {
+        Node copy = (Node)factory().wrap(template.deepcopy());
+        copy.EnsureDevicesAreParented();
         addAfter(
             getNodes(),
-            template.deepcopy(),
+            copy.pyObject(),
             (after == null)
                 ? null
Index: /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Node.java
===================================================================
--- /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Node.java	(revision 7482)
+++ /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/Node.java	(revision 7485)
@@ -73,9 +73,21 @@
 
     // ----------------------------------------------------------
+    public void EnsureDevicesAreParented()
+    {
+        for (Component c : getDevicesAsArray())
+        {
+            c.setNode(this);
+        }
+    }
+
+
+    // ----------------------------------------------------------
     public void addNewDevice(Component template, Component after)
     {
+        Component copy = (Component)factory().wrap(template.deepcopy());
+        copy.setNode(this);
         addAfter(
             getDevices(),
-            template.deepcopy(),
+            copy.pyObject(),
             (after == null)
                 ? null
Index: /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/PyWrapper.java
===================================================================
--- /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/PyWrapper.java	(revision 7482)
+++ /ossiedev/branches/jsnyder/ComponentProject/src/edu/vt/ossie/wavedev/PyWrapper.java	(revision 7485)
@@ -211,9 +211,29 @@
      * @param value The new value for the attribute
      */
+    public void put(String attribute, PyWrapper value)
+    {
+        try
+        {
+            pyObject().__setattr__(attribute,
+                value == null ? Py.None : value.pyObject());
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+
+    // ----------------------------------------------------------
+    /**
+     * Set an attribute in the object.
+     * @param attribute The name of the attribute to set
+     * @param value The new value for the attribute
+     */
     public void put(String attribute, PyObject value)
     {
         try
         {
-            pyObject().__setattr__(attribute, value);
+            pyObject().__setattr__(attribute, value == null ? Py.None : value);
         }
         catch (Exception e)
