diff --git a/picfg/pimodel/revcode.go b/picfg/pimodel/revcode.go
index 6fe73ddfccd87644a323f647e4554bf438d1cf33..2983157533b867afbb5ac8fc63ae06da56047a83 100644
--- a/picfg/pimodel/revcode.go
+++ b/picfg/pimodel/revcode.go
@@ -67,6 +67,23 @@ func (code RevisionCode) String() string {
 	return fmt.Sprintf("%06x", uint(code))
 }
 
+// MarshalText implements encoding.TextMarshaler.
+func (revCode RevisionCode) MarshalText() ([]byte, error) {
+	return []byte(revCode.String()), nil
+}
+
+// UnmarshalText implements encoding.TextUnmarshaler.
+func (revCode *RevisionCode) UnmarshalText(text []byte) error {
+	n, err := strconv.ParseUint(string(text), 0, 32)
+	if err != nil {
+		return err
+	}
+
+	*revCode = RevisionCode(n)
+
+	return nil
+}
+
 // newFlag returns true if the revision code uses new-style format.
 func (code RevisionCode) newFlag() bool {
 	return (code>>newFlagShift)&newFlagMask == 1
diff --git a/picfg/pimodel/revcode_test.go b/picfg/pimodel/revcode_test.go
index 9464de7885c32d0da2993555192f3c19aeb3594a..35647bdff22d0c073e2ee4060049fe3675672f44 100644
--- a/picfg/pimodel/revcode_test.go
+++ b/picfg/pimodel/revcode_test.go
@@ -22,6 +22,29 @@ func (s *revCodeSuite) TestString(c *C) {
 	c.Check(pimodel.RevisionCode(0xa03140).String(), Equals, "a03140")
 }
 
+func (s *revCodeSuite) TestMarshalText(c *C) {
+	revCode := pimodel.RevisionCode(0x0004)
+	data, err := revCode.MarshalText()
+	c.Assert(err, IsNil)
+	c.Check(data, DeepEquals, []byte("0004"))
+
+	revCode = pimodel.RevisionCode(0xa03140)
+	data, err = revCode.MarshalText()
+	c.Assert(err, IsNil)
+	c.Check(data, DeepEquals, []byte("a03140"))
+}
+
+func (s *revCodeSuite) TestUnmarshalText(c *C) {
+	var revCode pimodel.RevisionCode
+
+	err := revCode.UnmarshalText([]byte("0004"))
+	c.Assert(err, IsNil)
+	c.Check(revCode, Equals, pimodel.RevisionCode(0x0004))
+
+	err = revCode.UnmarshalText([]byte("potato"))
+	c.Assert(err, ErrorMatches, `strconv.ParseUint: parsing "potato": invalid syntax`)
+}
+
 func (s *revCodeSuite) TestKnownRevisionCodes(c *C) {
 	for _, t := range []struct {
 		code         pimodel.RevisionCode