return;
 
     m_sig.name = QString::fromStdString(s->sig->name);
-    for (unsigned i = 0; i < s->members.size(); ++i) {
+    for (unsigned i = 0; i < s->sig->num_members; ++i) {
         VariantVisitor vis;
         m_sig.memberNames.append(
             QString::fromStdString(s->sig->member_names[i]));
 
     sig->id = id;
     sig->name = qstrdup(aSig.name.toLocal8Bit());
     sig->num_members = aSig.memberNames.count();
-    char **members = new char*[aSig.memberNames.count()];
-    sig->members = (const char **)members;
+    char **member_names = new char*[aSig.memberNames.count()];
+    sig->member_names = (const char **)member_names;
     for (int i = 0; i < aSig.memberNames.count(); ++i) {
-        members[i] = qstrdup(aSig.memberNames[i].toLocal8Bit());
+        member_names[i] = qstrdup(aSig.memberNames[i].toLocal8Bit());
     }
     return sig;
 }
 deleteStructSig(Trace::StructSig *sig)
 {
     for (int i = 0; i < sig->num_members; ++i) {
-        delete [] sig->members[i];
+        delete [] sig->member_names[i];
     }
-    delete [] sig->members;
+    delete [] sig->member_names;
     delete [] sig->name;
     delete sig;
 }
 
 class Struct : public Value
 {
 public:
-    struct Signature {
-        const char *name;
-        std::vector<const char *> member_names;
-    };
-
-    Struct(Signature *_sig) : sig(_sig), members(_sig->member_names.size()) { }
+    Struct(StructSig *_sig) : sig(_sig), members(_sig->num_members) { }
     ~Struct();
 
     bool toBool(void) const;
     void visit(Visitor &visitor);
 
-    const Signature *sig;
+    const StructSig *sig;
     std::vector<Value *> members;
 };
 
 
 Value *Parser::parse_struct() {
     size_t id = read_uint();
 
-    Struct::Signature *sig = lookup(structs, id);
+    StructSig *sig = lookup(structs, id);
     if (!sig) {
-        sig = new Struct::Signature;
+        sig = new StructSig;
+        sig->id = id;
         sig->name = read_string();
-        unsigned size = read_uint();
-        for (unsigned i = 0; i < size; ++i) {
-            sig->member_names.push_back(read_string());
+        sig->num_members = read_uint();
+        const char **member_names = new const char *[sig->num_members];
+        for (unsigned i = 0; i < sig->num_members; ++i) {
+            member_names[i] = read_string();
         }
+        sig->member_names = member_names;
         structs[id] = sig;
     }
     assert(sig);
 
     Struct *value = new Struct(sig);
 
-    for (size_t i = 0; i < sig->member_names.size(); ++i) {
+    for (size_t i = 0; i < sig->num_members; ++i) {
         value->members[i] = parse_value();
     }
 
 
     typedef std::vector<Call::Signature *> FunctionMap;
     FunctionMap functions;
 
-    typedef std::vector<Struct::Signature *> StructMap;
+    typedef std::vector<StructSig *> StructMap;
     StructMap structs;
 
     typedef std::vector<EnumSig *> EnumMap;
 
         _writeString(sig->name);
         _writeUInt(sig->num_members);
         for (unsigned i = 0; i < sig->num_members; ++i) {
-            _writeString(sig->members[i]);
+            _writeString(sig->member_names[i]);
         }
         structs[sig->id] = true;
     }
 
         Id id;
         const char *name;
         unsigned num_members;
-        const char **members;
+        const char **member_names;
     };
 
     struct EnumSig {