diff --git a/authenticate.go b/authenticate.go
index 19fabf6..754823c 100644
--- a/authenticate.go
+++ b/authenticate.go
@@ -1,13 +1,17 @@
 package gophercloud
 
-import (
-	"fmt"
-)
-
 type AuthOptions struct {
 	Username, Password, TenantId string
 }
 
-func Authenticate(provider string, options AuthOptions) (*int, error) {
-	return nil, fmt.Errorf("Not implemented.")
+func (c *Context) Authenticate(provider string, options AuthOptions) (*int, error) {
+	_, err := c.ProviderByName(provider)
+	if err != nil {
+		return nil, err
+	}
+
+	if (options.Username == "") || (options.Password == "") {
+		return nil, ErrCredentials
+	}
+	return nil, nil
 }
diff --git a/authenticate_test.go b/authenticate_test.go
new file mode 100644
index 0000000..596df40
--- /dev/null
+++ b/authenticate_test.go
@@ -0,0 +1,55 @@
+package gophercloud
+
+import (
+	"testing"
+)
+
+func TestAuthProvider(t *testing.T) {
+	c := TestContext()
+
+	_, err := c.Authenticate("", AuthOptions{})
+	if err == nil {
+		t.Error("Expected error for empty provider string")
+		return
+	}
+	_, err = c.Authenticate("unknown-provider", AuthOptions{Username: "u", Password: "p"})
+	if err == nil {
+		t.Error("Expected error for unknown service provider")
+		return
+	}
+
+	err = c.RegisterProvider("provider", &Provider{})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	_, err = c.Authenticate("provider", AuthOptions{Username: "u", Password: "p"})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+}
+
+func TestUserNameAndPassword(t *testing.T) {
+	c := TestContext()
+	c.RegisterProvider("provider", &Provider{})
+
+	auths := []AuthOptions{
+		AuthOptions{},
+		AuthOptions{Username: "u"},
+		AuthOptions{Password: "p"},
+	}
+	for i, auth := range auths {
+		_, err := c.Authenticate("provider", auth)
+		if err == nil {
+			t.Error("Expected error from missing credentials (%d)", i)
+			return
+		}
+	}
+
+	_, err := c.Authenticate("provider", AuthOptions{Username: "u", Password: "p"})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+}
diff --git a/context.go b/context.go
new file mode 100644
index 0000000..0a73890
--- /dev/null
+++ b/context.go
@@ -0,0 +1,11 @@
+package gophercloud
+
+type Context struct {
+	providerMap map[string]*Provider
+}
+
+func TestContext() *Context {
+	return &Context{
+		providerMap: make(map[string]*Provider),
+	}
+}
diff --git a/errors.go b/errors.go
new file mode 100644
index 0000000..53397e1
--- /dev/null
+++ b/errors.go
@@ -0,0 +1,9 @@
+package gophercloud
+
+import (
+	"fmt"
+)
+
+var ErrNotImplemented = fmt.Errorf("Not implemented")
+var ErrProvider = fmt.Errorf("Missing or incorrect provider")
+var ErrCredentials = fmt.Errorf("Missing or incomplete credentials")
diff --git a/provider.go b/provider.go
new file mode 100644
index 0000000..f2249c3
--- /dev/null
+++ b/provider.go
@@ -0,0 +1,24 @@
+package gophercloud
+
+import (
+)
+
+type Provider struct {
+	// empty.
+}
+
+var providerMap = make(map[string]*Provider)
+
+func (c *Context) RegisterProvider(name string, p *Provider) error {
+	c.providerMap[name] = p
+	return nil
+}
+
+func (c *Context) ProviderByName(name string) (p *Provider, err error) {
+	for provider, descriptor := range c.providerMap {
+		if name == provider {
+			return descriptor, nil
+		}
+	}
+	return nil, ErrProvider
+}
\ No newline at end of file
diff --git a/provider_test.go b/provider_test.go
new file mode 100644
index 0000000..df3d877
--- /dev/null
+++ b/provider_test.go
@@ -0,0 +1,22 @@
+package gophercloud
+
+import (
+	"testing"
+)
+
+func TestProviderRegistry(t *testing.T) {
+	c := TestContext()
+
+	_, err := c.ProviderByName("aProvider")
+	if err == nil {
+		t.Error("Expected error when looking for a provider by non-existant name")
+		return
+	}
+
+	_ = c.RegisterProvider("aProvider", &Provider{})
+	_, err = c.ProviderByName("aProvider")
+	if err != nil {
+		t.Error(err)
+		return
+	}
+}
