diff --git a/compiler/cpp/src/generate/t_generator.h b/compiler/cpp/src/generate/t_generator.h
index d5cf835..d131777 100644
--- a/compiler/cpp/src/generate/t_generator.h
+++ b/compiler/cpp/src/generate/t_generator.h
@@ -193,7 +193,7 @@
     in[0] = tolower(in[0]);
     return in;
   }
-  std::string lowercase(std::string in) {
+  static std::string lowercase(std::string in) {
     for (size_t i = 0; i < in.size(); ++i) {
       in[i] = tolower(in[i]);
     }
diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc
index 4893c71..6f273f1 100644
--- a/compiler/cpp/src/generate/t_go_generator.cc
+++ b/compiler/cpp/src/generate/t_go_generator.cc
@@ -254,12 +254,11 @@
             return package_flag;
         }
         std::string real_module = program->get_namespace("go");
-
-        if (real_module.empty()) {
-            return program->get_name();
+        if (!real_module.empty()) {
+        	return real_module;
         }
 
-        return real_module;
+        return lowercase(program->get_name());
     }
 
 private:
@@ -1510,7 +1509,15 @@
  */
 void t_go_generator::generate_service(t_service* tservice)
 {
-    string f_service_name = package_dir_ + "/" + underscore(service_name_) + ".go";
+	string test_suffix("_test");
+	string filename = lowercase(service_name_);
+	string f_service_name;
+	if (filename.compare(filename.length() - test_suffix.length(),
+			test_suffix.length(), test_suffix) == 0) {
+		f_service_name = package_dir_ + "/" + filename + "_.go";
+	} else {
+		f_service_name = package_dir_ + "/" + filename + ".go";
+	}
     f_service_.open(f_service_name.c_str());
     f_service_ <<
                go_autogen_comment() <<
diff --git a/lib/go/test/Makefile.am b/lib/go/test/Makefile.am
index 5499fb7..0be6cf7 100644
--- a/lib/go/test/Makefile.am
+++ b/lib/go/test/Makefile.am
@@ -47,11 +47,11 @@
 
 check: gopath
 	GOPATH=`pwd`/gopath $(GO) build \
-				IncludesTest \
-				BinaryKeyTest \
-				ServicesTest \
-				TypedefFieldTest \
-				RefAnnotationFieldsTest
+				includestest \
+				binarykeytest \
+				servicestest \
+				typedeffieldtest \
+				refannotationfieldstest
 	GOPATH=`pwd`/gopath $(GO) test thrift tests
 
 clean-local:
diff --git a/lib/go/test/NamespacedTest.thrift b/lib/go/test/NamespacedTest.thrift
index 1bb2fc4..a910350 100644
--- a/lib/go/test/NamespacedTest.thrift
+++ b/lib/go/test/NamespacedTest.thrift
@@ -19,7 +19,7 @@
 
 include "ThriftTest.thrift"
 
-namespace go lib.go.test.NamespacedTest
+namespace go lib.go.test.namespacedtest
 
 enum Stuff {
   ONE = 1,
diff --git a/lib/go/test/tests/binary_key_test.go b/lib/go/test/tests/binary_key_test.go
index 4cd3eb4..aa96193 100644
--- a/lib/go/test/tests/binary_key_test.go
+++ b/lib/go/test/tests/binary_key_test.go
@@ -20,12 +20,12 @@
 package tests
 
 import (
-	"BinaryKeyTest"
+	"binarykeytest"
 	"testing"
 )
 
 func TestBinaryMapKeyGeneratesString(t *testing.T) {
-	s := BinaryKeyTest.NewTestStruct()
+	s := binarykeytest.NewTestStruct()
 	//This will only compile if BinToString has type of map[string]string
 	s.BinToString = make(map[string]string)
 }
diff --git a/lib/go/test/tests/multiplexed_protocol_test.go b/lib/go/test/tests/multiplexed_protocol_test.go
index 5b8a328..00669ef 100644
--- a/lib/go/test/tests/multiplexed_protocol_test.go
+++ b/lib/go/test/tests/multiplexed_protocol_test.go
@@ -20,7 +20,7 @@
 package tests
 
 import (
-	"MultiplexedProtocolTest"
+	"multiplexedprotocoltest"
 	"net"
 	"testing"
 	"thrift"
@@ -61,37 +61,37 @@
 	}
 	server = thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory)
 
-	firstProcessor := MultiplexedProtocolTest.NewFirstProcessor(&FirstImpl{})
+	firstProcessor := multiplexedprotocoltest.NewFirstProcessor(&FirstImpl{})
 	processor.RegisterProcessor("FirstService", firstProcessor)
 
-	secondProcessor := MultiplexedProtocolTest.NewSecondProcessor(&SecondImpl{})
+	secondProcessor := multiplexedprotocoltest.NewSecondProcessor(&SecondImpl{})
 	processor.RegisterProcessor("SecondService", secondProcessor)
 
 	go server.Serve()
 }
 
-var firstClient *MultiplexedProtocolTest.FirstClient
+var firstClient *multiplexedprotocoltest.FirstClient
 
 func TestInitClient1(t *testing.T) {
 	socket := thrift.NewTSocketFromAddrTimeout(addr, TIMEOUT)
 	transport := thrift.NewTFramedTransport(socket)
 	var protocol thrift.TProtocol = thrift.NewTBinaryProtocolTransport(transport)
 	protocol = thrift.NewTMultiplexedProtocol(protocol, "FirstService")
-	firstClient = MultiplexedProtocolTest.NewFirstClientProtocol(transport, protocol, protocol)
+	firstClient = multiplexedprotocoltest.NewFirstClientProtocol(transport, protocol, protocol)
 	err := transport.Open()
 	if err != nil {
 		t.Fatal("Unable to open client socket", err)
 	}
 }
 
-var secondClient *MultiplexedProtocolTest.SecondClient
+var secondClient *multiplexedprotocoltest.SecondClient
 
 func TestInitClient2(t *testing.T) {
 	socket := thrift.NewTSocketFromAddrTimeout(addr, TIMEOUT)
 	transport := thrift.NewTFramedTransport(socket)
 	var protocol thrift.TProtocol = thrift.NewTBinaryProtocolTransport(transport)
 	protocol = thrift.NewTMultiplexedProtocol(protocol, "SecondService")
-	secondClient = MultiplexedProtocolTest.NewSecondClientProtocol(transport, protocol, protocol)
+	secondClient = multiplexedprotocoltest.NewSecondClientProtocol(transport, protocol, protocol)
 	err := transport.Open()
 	if err != nil {
 		t.Fatal("Unable to open client socket", err)
@@ -99,11 +99,11 @@
 }
 
 //create client without service prefix
-func createLegacyClient(t *testing.T) *MultiplexedProtocolTest.SecondClient {
+func createLegacyClient(t *testing.T) *multiplexedprotocoltest.SecondClient {
 	socket := thrift.NewTSocketFromAddrTimeout(addr, TIMEOUT)
 	transport := thrift.NewTFramedTransport(socket)
 	var protocol thrift.TProtocol = thrift.NewTBinaryProtocolTransport(transport)
-	legacyClient := MultiplexedProtocolTest.NewSecondClientProtocol(transport, protocol, protocol)
+	legacyClient := multiplexedprotocoltest.NewSecondClientProtocol(transport, protocol, protocol)
 	err := transport.Open()
 	if err != nil {
 		t.Fatal("Unable to open client socket", err)
@@ -139,7 +139,7 @@
 		t.Fatal("Expecting error")
 	}
 	//register default processor and call again
-	processor.RegisterDefault(MultiplexedProtocolTest.NewSecondProcessor(&SecondImpl{}))
+	processor.RegisterDefault(multiplexedprotocoltest.NewSecondProcessor(&SecondImpl{}))
 	legacyClient = createLegacyClient(t)
 	ret, err = legacyClient.ReturnTwo()
 	if err != nil {
diff --git a/lib/go/test/tests/one_way_test.go b/lib/go/test/tests/one_way_test.go
index 5ffbbfe..3ff025f 100644
--- a/lib/go/test/tests/one_way_test.go
+++ b/lib/go/test/tests/one_way_test.go
@@ -20,9 +20,9 @@
 package tests
 
 import (
-	"OnewayTest"
 	"fmt"
 	"net"
+	"onewaytest"
 	"testing"
 	"thrift"
 	"time"
@@ -47,7 +47,7 @@
 
 var addr net.Addr
 var server *thrift.TSimpleServer
-var client *OnewayTest.OneWayClient
+var client *onewaytest.OneWayClient
 
 func TestInitOneway(t *testing.T) {
 	var err error
@@ -56,7 +56,7 @@
 	if err != nil {
 		t.Fatal("Unable to create server socket", err)
 	}
-	processor := OnewayTest.NewOneWayProcessor(&impl{})
+	processor := onewaytest.NewOneWayProcessor(&impl{})
 	server = thrift.NewTSimpleServer2(processor, serverTransport)
 
 	go server.Serve()
@@ -65,7 +65,7 @@
 func TestInitOnewayClient(t *testing.T) {
 	transport := thrift.NewTSocketFromAddrTimeout(addr, TIMEOUT)
 	protocol := thrift.NewTBinaryProtocolTransport(transport)
-	client = OnewayTest.NewOneWayClientProtocol(transport, protocol, protocol)
+	client = onewaytest.NewOneWayClientProtocol(transport, protocol, protocol)
 	err := transport.Open()
 	if err != nil {
 		t.Fatal("Unable to open client socket", err)
diff --git a/lib/go/test/tests/optional_fields_test.go b/lib/go/test/tests/optional_fields_test.go
index 4b0797c..324bf00 100644
--- a/lib/go/test/tests/optional_fields_test.go
+++ b/lib/go/test/tests/optional_fields_test.go
@@ -20,15 +20,15 @@
 package tests
 
 import (
-	"OptionalFieldsTest"
 	"bytes"
 	gomock "code.google.com/p/gomock/gomock"
+	"optionalfieldstest"
 	"testing"
 	"thrift"
 )
 
 func TestIsSetReturnFalseOnCreation(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	if ao.IsSetS() {
 		t.Errorf("Optional field S is set on initialization")
 	}
@@ -71,7 +71,7 @@
 }
 
 func TestDefaultValuesOnCreation(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	if ao.GetS() != "DEFAULT" {
 		t.Errorf("Unexpected default value %#v for field S", ao.GetS())
 	}
@@ -112,7 +112,7 @@
 }
 
 func TestInitialValuesOnCreation(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	if ao.S != "DEFAULT" {
 		t.Errorf("Unexpected initial value %#v for field S", ao.S)
 	}
@@ -152,11 +152,11 @@
 }
 
 func TestIsSetReturnTrueAfterUpdate(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.S = "somevalue"
 	ao.I = 123
 	ao.B = true
-	ao.Aa = OptionalFieldsTest.NewStructA()
+	ao.Aa = optionalfieldstest.NewStructA()
 	if !ao.IsSetS() {
 		t.Errorf("Field S should be set")
 	}
@@ -172,7 +172,7 @@
 }
 
 func TestListNotEmpty(t *testing.T) {
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.L = []int64{1, 2, 3}
 	if !ao.IsSetL() {
 		t.Errorf("Field L should be set")
@@ -189,7 +189,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.Write(proto)
 }
 
@@ -202,7 +202,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.I = 42
 	ao.Write(proto)
 }
@@ -220,7 +220,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.I = 123
 	ao.Write(proto)
 }
@@ -240,7 +240,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.L = []int64{1, 2}
 	ao.Write(proto)
 }
@@ -257,7 +257,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.Bin = []byte("somebytestring")
 	ao.Write(proto)
 }
@@ -274,7 +274,7 @@
 		proto.EXPECT().WriteFieldStop().Return(nil),
 		proto.EXPECT().WriteStructEnd().Return(nil),
 	)
-	ao := OptionalFieldsTest.NewAllOptional()
+	ao := optionalfieldstest.NewAllOptional()
 	ao.Bin = []byte{}
 	ao.Write(proto)
 }
diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index 7ca194e..4a689fe 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -31,7 +31,7 @@
 namespace st ThriftTest
 namespace py ThriftTest
 namespace py.twisted ThriftTest
-namespace go ThriftTest
+namespace go thrifttest
 namespace php ThriftTest
 namespace delphi Thrift.Test
 namespace cocoa ThriftTest
