diff --git a/compiler/cpp/src/generate/t_st_generator.cc b/compiler/cpp/src/generate/t_st_generator.cc
index 62a3e5b..413e8ae 100644
--- a/compiler/cpp/src/generate/t_st_generator.cc
+++ b/compiler/cpp/src/generate/t_st_generator.cc
@@ -47,6 +47,13 @@
   return capitalize(program_name_);
 }
 
+string t_st_generator::prefix(string class_name) {
+  string prefix = program_->get_smalltalk_prefix();
+  string name = capitalize(class_name);
+  name = prefix.empty() ? name : (prefix + name);
+  return name;
+}
+
 string t_st_generator::client_class_name() {
   return capitalize(service_name_) + "Client";
 }
@@ -64,11 +71,11 @@
 }
 
 void t_st_generator::generate_force_consts() {
-  f_ << class_name() << " enums keysAndValuesDo: [:k :v | " <<
-    class_name() << " enums at: k put: v value].!" << endl;
+  f_ << prefix(class_name()) << " enums keysAndValuesDo: [:k :v | " <<
+    prefix(class_name()) << " enums at: k put: v value].!" << endl;
 
-  f_ << class_name() << " constants keysAndValuesDo: [:k :v | " <<
-    class_name() << " constants at: k put: v value].!" << endl;
+  f_ << prefix(class_name()) << " constants keysAndValuesDo: [:k :v | " <<
+    prefix(class_name()) << " constants at: k put: v value].!" << endl;
 
 }
 
@@ -90,7 +97,7 @@
 void t_st_generator::generate_typedef(t_typedef* ttypedef) {}
 
 void t_st_generator::st_class_def(std::ofstream &out, string name) {
-  out << "Object subclass: #" << capitalize(name) << endl;
+  out << "Object subclass: #" << prefix(name) << endl;
   indent_up();
   out << indent() << "instanceVariableNames: ''" << endl <<
     indent() << "classVariableNames: ''" << endl <<
@@ -119,7 +126,7 @@
   tinfo = localtime(&rawtime);
   strftime(timestr, 50, "%m/%d/%Y %H:%M", tinfo);
 
-  out << "!" << capitalize(cls) <<
+  out << "!" << prefix(cls) <<
     " methodsFor: '"+category+"' stamp: 'thrift " << timestr << "'!\n" <<
     name << endl;
 
@@ -150,14 +157,14 @@
 }
 
 void t_st_generator::generate_class_side_definition() {
-  f_ << class_name() << " class" << endl <<
+  f_ << prefix(class_name()) << " class" << endl <<
     "\tinstanceVariableNames: 'constants enums'!" << endl << endl;
 
   st_accessors(f_, class_name() + " class", "enums");
   st_accessors(f_, class_name() + " class", "constants");
 
-  f_ << class_name() << " enums: Dictionary new!" << endl;
-  f_ << class_name() << " constants: Dictionary new!" << endl;
+  f_ << prefix(class_name()) << " enums: Dictionary new!" << endl;
+  f_ << prefix(class_name()) << " constants: Dictionary new!" << endl;
 
   f_ << endl;
 }
@@ -171,7 +178,7 @@
 void t_st_generator::generate_enum(t_enum* tenum) {
   string cls_name = program_name_ + capitalize(tenum->get_name());
 
-  f_ << class_name() << " enums at: '" << tenum->get_name() << "' put: [" <<
+  f_ << prefix(class_name()) << " enums at: '" << tenum->get_name() << "' put: [" <<
     "(Dictionary new " << endl;
 
   vector<t_enum_value*> constants = tenum->get_constants();
@@ -198,7 +205,7 @@
   string name = tconst->get_name();
   t_const_value* value = tconst->get_value();
 
-  f_ << class_name() << " constants at: '" << name << "' put: [" <<
+  f_ << prefix(class_name()) << " constants at: '" << name << "' put: [" <<
     render_const_value(type, value) << "]!" << endl << endl;
 }
 
@@ -337,7 +344,7 @@
   else
     out << "Object";
 
-  out << " subclass: #" << capitalize(type_name(tstruct)) << endl <<
+  out << " subclass: #" << prefix(type_name(tstruct)) << endl <<
     "\tinstanceVariableNames: '";
 
   if (members.size() > 0) {
@@ -598,9 +605,10 @@
   out << "[|" << desc << " " << val << "|" << endl;
   indent_up();
 
-  out << indent() << val << " := " <<
-    capitalize(clsName) << " new." << endl;
-
+  //This is nasty, but without it we'll break things by prefixing TResult.
+  string name = ((capitalize(clsName) == "TResult") ? capitalize(clsName) : prefix(clsName));
+  out << indent() << val << " := " << name << " new." << endl;
+    
   out << indent() << "iprot readStructBegin." << endl <<
     indent() << "[" << desc << " := iprot readFieldBegin." << endl <<
     indent() << desc << " type = TType stop] whileFalse: [|" << found << "|" << endl;
@@ -785,7 +793,7 @@
     extends_client = extends + "Client";
   }
 
-  f_ << extends_client << " subclass: #" << client_class_name() << endl <<
+  f_ << extends_client << " subclass: #" << prefix(client_class_name()) << endl <<
     "\tinstanceVariableNames: ''\n" <<
     "\tclassVariableNames: ''\n" <<
     "\tpoolDictionaries: ''\n" <<
diff --git a/compiler/cpp/src/generate/t_st_generator.h b/compiler/cpp/src/generate/t_st_generator.h
index 6491cbd..fd20456 100644
--- a/compiler/cpp/src/generate/t_st_generator.h
+++ b/compiler/cpp/src/generate/t_st_generator.h
@@ -99,16 +99,17 @@
 
   std::string class_name();
   std::string client_class_name();
+  std::string prefix(std::string name);
   std::string declare_field(t_field* tfield);
-	std::string sanitize(std::string s);
+  std::string sanitize(std::string s);
   std::string type_name(t_type* ttype);
 
-	std::string function_signature(t_function* tfunction);
+  std::string function_signature(t_function* tfunction);
   std::string argument_list(t_struct* tstruct);
-	std::string function_types_comment(t_function* fn);
+  std::string function_types_comment(t_function* fn);
 
   std::string type_to_enum(t_type* ttype);
-	std::string a_type(t_type* type);
+  std::string a_type(t_type* type);
   bool is_vowel(char c);
   std::string temp_name();
   std::string generated_category();
diff --git a/compiler/cpp/src/parse/t_program.h b/compiler/cpp/src/parse/t_program.h
index ddc121c..dc8c80c 100644
--- a/compiler/cpp/src/parse/t_program.h
+++ b/compiler/cpp/src/parse/t_program.h
@@ -200,6 +200,14 @@
     return smalltalk_category_;
   }
 
+  void set_smalltalk_prefix(std::string smalltalk_prefix) {
+    smalltalk_prefix_ = smalltalk_prefix;
+  }
+  
+  const std::string& get_smalltalk_prefix() const {
+    return smalltalk_prefix_;
+  }
+
  private:
 
   // File path
@@ -257,7 +265,8 @@
 
   // Smalltalk category
   std::string smalltalk_category_;
-
+  // Smalltalk prefix
+  std::string smalltalk_prefix_;
 };
 
 #endif
diff --git a/compiler/cpp/src/thriftl.ll b/compiler/cpp/src/thriftl.ll
index d371658..320d28f 100644
--- a/compiler/cpp/src/thriftl.ll
+++ b/compiler/cpp/src/thriftl.ll
@@ -78,6 +78,7 @@
 "perl_package"       { return tok_perl_package;         }
 "ruby_namespace"     { return tok_ruby_namespace;       }
 "smalltalk_category" { return tok_smalltalk_category;   }
+"smalltalk_prefix"   { return tok_smalltalk_prefix;     }
 "xsd_all"            { return tok_xsd_all;              }
 "xsd_optional"       { return tok_xsd_optional;         }
 "xsd_nillable"       { return tok_xsd_nillable;         }
diff --git a/compiler/cpp/src/thrifty.yy b/compiler/cpp/src/thrifty.yy
index 21828ff..e46d0ef 100644
--- a/compiler/cpp/src/thrifty.yy
+++ b/compiler/cpp/src/thrifty.yy
@@ -87,6 +87,7 @@
 %token tok_xsd_attrs
 %token tok_ruby_namespace
 %token tok_smalltalk_category
+%token tok_smalltalk_prefix
 %token tok_cocoa_prefix
 
 /**
@@ -302,6 +303,13 @@
         g_program->set_smalltalk_category($2);
       }
     }
+| tok_smalltalk_prefix tok_identifier
+    {
+      pdebug("Header -> tok_smalltalk_prefix tok_identifier");
+      if (g_parse_mode == PROGRAM) {
+        g_program->set_smalltalk_prefix($2);
+      }
+    }
 | tok_java_package tok_identifier
     {
       pdebug("Header -> tok_java_package tok_identifier");
