 class GPEntity: NSObject
 {
     // The internal list of components for this entity
-    private var components : [GPComponent] = [];
+    private var _components : [GPComponent] = [];
     
     // The unique identifier for this entity
-    var id = 0;
+    private var _id = 0;
     // A bitmask field used to quickly describe the type of this entity
-    var type = 0;
+    private var _type = 0;
     
     // A node that is associated with this entity
-    var node : SKNode;
+    private var _node : SKNode;
     
     // The game scene that owns this GPEntity instance
     var gameScene : GPGameScene?;
     
+    // Gets or sets the ID of this entity
+    var id: Int { get { return _id; } set { _id = newValue; self.gameScene?.entityModified(self); } }
+    // Gets or sets the type of this entity
+    var type: Int { get { return _type; } set { _type = newValue; self.gameScene?.entityModified(self); } }
+    
+    // Gets this entity's node
+    var node: SKNode { get { return _node; } }
+    
     init(_ node : SKNode)
     {
-        self.node = node;
+        self._node = node;
         
         super.init();
     }

    {
        var ret: [GPComponent] = [];
        
        for comp in self.components
        {
            if(comp.isKindOfClass(type))
            {

    {
        var i:Int = 0;
        
        while(i < self._components.count)
        {
            if(self._components[i].isKindOfClass(type))
            {
                self._components.removeAtIndex(i);
            }
            else
            {
