diff --git a/format/format.go b/format/format.go
index 8fde56b..5cd89bc 100644
--- a/format/format.go
+++ b/format/format.go
@@ -4,11 +4,11 @@
 package format
 
 import (
-	"context"
 	"fmt"
 	"reflect"
 	"strconv"
 	"strings"
+	"time"
 )
 
 // Use MaxDepth to set the maximum recursion depth when printing deeply nested objects
@@ -29,7 +29,17 @@
 Set PrintContextObjects = true to enable printing of the context internals.
 */
 var PrintContextObjects = false
-var contextType = reflect.TypeOf((*context.Context)(nil)).Elem()
+
+// Ctx interface defined here to keep backwards compatability with go < 1.7
+// It matches the context.Context interface
+type Ctx interface {
+	Deadline() (deadline time.Time, ok bool)
+	Done() <-chan struct{}
+	Err() error
+	Value(key interface{}) interface{}
+}
+
+var contextType = reflect.TypeOf((*Ctx)(nil)).Elem()
 
 //The default indentation string emitted by the format package
 var Indent = "    "
@@ -137,7 +147,7 @@
 
 	if !PrintContextObjects {
 		if value.Type().Implements(contextType) && indentation > 1 {
-			return "<suppressed>"
+			return "<suppressed context>"
 		}
 	}
 
diff --git a/format/format_test.go b/format/format_test.go
index 1b6f559..4d4b36c 100644
--- a/format/format_test.go
+++ b/format/format_test.go
@@ -1,9 +1,7 @@
 package format_test
 
 import (
-	"context"
 	"fmt"
-	"net/http"
 	"strings"
 	"time"
 
@@ -75,6 +73,25 @@
 	return "string"
 }
 
+type ctx struct {
+}
+
+func (c *ctx) Deadline() (deadline time.Time, ok bool) {
+	return time.Time{}, false
+}
+
+func (c *ctx) Done() <-chan struct{} {
+	return nil
+}
+
+func (c *ctx) Err() error {
+	return nil
+}
+
+func (c *ctx) Value(key interface{}) interface{} {
+	return nil
+}
+
 var _ = Describe("Format", func() {
 	match := func(typeRepresentation string, valueRepresentation string, args ...interface{}) types.GomegaMatcher {
 		if len(args) > 0 {
@@ -470,16 +487,21 @@
 	})
 
 	Describe("Printing a context.Context field", func() {
-		req, _ := http.NewRequest("GET", "http://example.com/test", nil)
-		ctx, _ := context.WithTimeout(context.Background(), time.Second)
-		reqWithContext := req.WithContext(ctx)
+
+		type structWithContext struct {
+			Context Ctx
+			Value   string
+		}
+
+		context := ctx{}
+		objWithContext := structWithContext{Value: "some-value", Context: &context}
 
 		It("Suppresses the content by default", func() {
-			Ω(Object(reqWithContext, 1)).Should(ContainSubstring("<suppressed>"))
+			Ω(Object(objWithContext, 1)).Should(ContainSubstring("<suppressed context>"))
 		})
 
 		It("Doesn't supress the context if it's the object being printed", func() {
-			Ω(Object(ctx, 1)).ShouldNot(MatchRegexp("^.*<suppressed>$"))
+			Ω(Object(context, 1)).ShouldNot(MatchRegexp("^.*<suppressed context>$"))
 		})
 
 		Context("PrintContextObjects is set", func() {
@@ -492,7 +514,7 @@
 			})
 
 			It("Prints the context", func() {
-				Ω(Object(reqWithContext, 1)).ShouldNot(ContainSubstring("<suppressed>"))
+				Ω(Object(objWithContext, 1)).ShouldNot(ContainSubstring("<suppressed context>"))
 			})
 		})
 	})
