#ifndef BUILDING_RENAMERS
 
 %rename(ShapeRegion)                        wxShapeRegion;
+%rename(AttachmentPoint)                    wxAttachmentPoint;
 %rename(PyShapeEvtHandler)                  wxPyShapeEvtHandler;
 %rename(PyShape)                            wxPyShape;
 %rename(PseudoMetaFile)                     wxPseudoMetaFile;
 
 };
 
 
+//---------------------------------------------------------------------------
+
+/*
+ * User-defined attachment point
+ */
+
+class wxAttachmentPoint: public wxObject
+{
+public:
+    wxAttachmentPoint(int id=0, double x=0.0, double y=0.0);
+    int            m_id;           // Identifier
+    double         m_x;            // x offset from centre of object
+    double         m_y;            // y offset from centre of object
+};
+
+
 //---------------------------------------------------------------------------
 
 %{
                                int nth = 0, int no_arcs = 1, wxPyLineShape *line = NULL);
     int GetNumberOfAttachments();
     bool AttachmentIsValid(int attachment);
+
+    %extend {
+        PyObject* GetAttachments() {
+            wxList& list = self->GetAttachments();
+            return wxPy_ConvertList(&list);            
+        }
+    }
+    
     bool GetAttachmentPositionEdge(int attachment, double *OUTPUT, double *OUTPUT,
                                    int nth = 0, int no_arcs = 1, wxPyLineShape *line = NULL);
     wxRealPoint CalcSimpleAttachment(const wxRealPoint& pt1, const wxRealPoint& pt2,
     void CopyWithHandler(wxPyShape& copy);
     void Rotate(double x, double y, double theta);
     double GetRotation();
+    void SetRotation(double rotation);
     void ClearAttachments();
     void Recentre(wxDC& dc);
     void ClearPointList(wxList& list);
 
     void _setCallbackInfo(PyObject* self, PyObject* _class);
 
     void SetCornerRadius(double radius);
-
+    double GetCornerRadius();
+    
     void base_OnDelete();
     void base_OnDraw(wxDC& dc);
     void base_OnDrawContents(wxDC& dc);
 
     void Unlink();
 
 
+    void SetAlignmentOrientation(bool isEnd, bool isHoriz);
+    void SetAlignmentType(bool isEnd, int alignType);
+    bool GetAlignmentOrientation(bool isEnd);
+    int GetAlignmentType(bool isEnd);
+    int GetAlignmentStart() const;
+    int GetAlignmentEnd() const;
+
     void base_OnDraw(wxDC& dc);
     void base_OnDrawContents(wxDC& dc);
     void base_OnDrawBranches(wxDC& dc, bool erase = FALSE);
             wxPyEndBlockThreads();
             return pyList;
         }
+
+        PyObject* GetOriginalPoints() {
+            wxList* list = self->GetOriginalPoints();
+            PyObject*   pyList;
+            PyObject*   pyObj;
+            wxObject*   wxObj;
+            wxNode*     node = list->GetFirst();
+
+            wxPyBeginBlockThreads();
+            pyList = PyList_New(0);
+            while (node) {
+                wxObj = node->GetData();
+                pyObj = wxPyConstructObject(wxObj, wxT("wxRealPoint"), 0);
+                PyList_Append(pyList, pyObj);
+                node = node->GetNext();
+            }
+            wxPyEndBlockThreads();
+            return pyList;
+        }        
     }
 
+    double GetOriginalWidth() const;
+    double GetOriginalHeight() const;
+
+    void SetOriginalWidth(double w);
+    void SetOriginalHeight(double h);
+
     void UpdateOriginalPoints();
 
     void base_OnDraw(wxDC& dc);