-    m_needParent = TRUE;
-
-    PreCreation( parent, id, pos, size, style, name );
-
-    m_isStaticBox = TRUE;
-    
-    m_widget = gtk_frame_new(m_label);
+    if (!PreCreation( parent, pos, size ) ||
+        !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
+    {
+        wxFAIL_MSG( wxT("wxStaticBox creation failed") );
+        return false;
+    }
+
+    m_widget = GTKCreateFrame(label);
+    g_object_ref(m_widget);
+    // only base SetLabel needs to be called after GTKCreateFrame
+    wxControl::SetLabel(label);
+
+    m_parent->DoAddChild( this );
+
+    PostCreation(size);
+
+    // need to set non default alignment?
+    gfloat xalign = 0;
+    if ( style & wxALIGN_CENTER )
+        xalign = 0.5;
+    else if ( style & wxALIGN_RIGHT )
+        xalign = 1.0;
+
+    gtk_frame_set_label_align(GTK_FRAME(m_widget), xalign, 0.5);
+
+    if (gtk_check_version(2, 12, 0))
+    {
+        // for clipping label as GTK >= 2.12 does
+        g_signal_connect(m_widget, "size_allocate",
+            G_CALLBACK(size_allocate), NULL);
+    }
+
+    return true;
+}