diff --git a/values.go b/values.go
index d7a821ff..4aecf278 100644
--- a/values.go
+++ b/values.go
@@ -503,7 +503,7 @@ func (n NullInt16) Encode(w *WriteBuf, oid OID) error {
 		return nil
 	}
 
-	return encodeInt16(w, oid, n.Int16)
+	return pgtype.Int2(n.Int16).EncodeBinary(w)
 }
 
 // NullInt32 represents an integer that may be null. NullInt32 implements the
@@ -542,7 +542,7 @@ func (n NullInt32) Encode(w *WriteBuf, oid OID) error {
 		return nil
 	}
 
-	return encodeInt32(w, oid, n.Int32)
+	return pgtype.Int4(n.Int32).EncodeBinary(w)
 }
 
 // OID (Object Identifier Type) is, according to https://www.postgresql.org/docs/current/static/datatype-oid.html,
@@ -788,7 +788,7 @@ func (n NullInt64) Encode(w *WriteBuf, oid OID) error {
 		return nil
 	}
 
-	return encodeInt64(w, oid, n.Int64)
+	return pgtype.Int8(n.Int64).EncodeBinary(w)
 }
 
 // NullBool represents an bool that may be null. NullBool implements the Scanner
@@ -1558,256 +1558,12 @@ func decodeInt2(vr *ValueReader) int16 {
 	return int16(n)
 }
 
-func encodeInt(w *WriteBuf, oid OID, value int) error {
-	switch oid {
-	case Int2OID:
-		if value < math.MinInt16 {
-			return fmt.Errorf("%d is less than min pg:int2", value)
-		} else if value > math.MaxInt16 {
-			return fmt.Errorf("%d is greater than max pg:int2", value)
-		}
-		w.WriteInt32(2)
-		w.WriteInt16(int16(value))
-	case Int4OID:
-		if value < math.MinInt32 {
-			return fmt.Errorf("%d is less than min pg:int4", value)
-		} else if value > math.MaxInt32 {
-			return fmt.Errorf("%d is greater than max pg:int4", value)
-		}
-		w.WriteInt32(4)
-		w.WriteInt32(int32(value))
-	case Int8OID:
-		if int64(value) <= int64(math.MaxInt64) {
-			w.WriteInt32(8)
-			w.WriteInt64(int64(value))
-		} else {
-			return fmt.Errorf("%d is larger than max int64 %d", value, int64(math.MaxInt64))
-		}
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "int8", oid)
-	}
-
-	return nil
-}
-
-func encodeUInt(w *WriteBuf, oid OID, value uint) error {
-	switch oid {
-	case Int2OID:
-		if value > math.MaxInt16 {
-			return fmt.Errorf("%d is greater than max pg:int2", value)
-		}
-		w.WriteInt32(2)
-		w.WriteInt16(int16(value))
-	case Int4OID:
-		if value > math.MaxInt32 {
-			return fmt.Errorf("%d is greater than max pg:int4", value)
-		}
-		w.WriteInt32(4)
-		w.WriteInt32(int32(value))
-	case Int8OID:
-		//****** Changed value to int64(value) and math.MaxInt64 to int64(math.MaxInt64)
-		if int64(value) > int64(math.MaxInt64) {
-			return fmt.Errorf("%d is greater than max pg:int8", value)
-		}
-		w.WriteInt32(8)
-		w.WriteInt64(int64(value))
-
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "uint8", oid)
-	}
-
-	return nil
-}
-
 func encodeChar(w *WriteBuf, oid OID, value Char) error {
 	w.WriteInt32(1)
 	w.WriteByte(byte(value))
 	return nil
 }
 
-func encodeInt8(w *WriteBuf, oid OID, value int8) error {
-	switch oid {
-	case Int2OID:
-		w.WriteInt32(2)
-		w.WriteInt16(int16(value))
-	case Int4OID:
-		w.WriteInt32(4)
-		w.WriteInt32(int32(value))
-	case Int8OID:
-		w.WriteInt32(8)
-		w.WriteInt64(int64(value))
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "int8", oid)
-	}
-
-	return nil
-}
-
-func encodeUInt8(w *WriteBuf, oid OID, value uint8) error {
-	switch oid {
-	case Int2OID:
-		w.WriteInt32(2)
-		w.WriteInt16(int16(value))
-	case Int4OID:
-		w.WriteInt32(4)
-		w.WriteInt32(int32(value))
-	case Int8OID:
-		w.WriteInt32(8)
-		w.WriteInt64(int64(value))
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "uint8", oid)
-	}
-
-	return nil
-}
-
-func encodeInt16(w *WriteBuf, oid OID, value int16) error {
-	switch oid {
-	case Int2OID:
-		w.WriteInt32(2)
-		w.WriteInt16(value)
-	case Int4OID:
-		w.WriteInt32(4)
-		w.WriteInt32(int32(value))
-	case Int8OID:
-		w.WriteInt32(8)
-		w.WriteInt64(int64(value))
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "int16", oid)
-	}
-
-	return nil
-}
-
-func encodeUInt16(w *WriteBuf, oid OID, value uint16) error {
-	switch oid {
-	case Int2OID:
-		if value <= math.MaxInt16 {
-			w.WriteInt32(2)
-			w.WriteInt16(int16(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int16 %d", value, math.MaxInt16)
-		}
-	case Int4OID:
-		w.WriteInt32(4)
-		w.WriteInt32(int32(value))
-	case Int8OID:
-		w.WriteInt32(8)
-		w.WriteInt64(int64(value))
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "int16", oid)
-	}
-
-	return nil
-}
-
-func encodeInt32(w *WriteBuf, oid OID, value int32) error {
-	switch oid {
-	case Int2OID:
-		if value <= math.MaxInt16 {
-			w.WriteInt32(2)
-			w.WriteInt16(int16(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int16 %d", value, math.MaxInt16)
-		}
-	case Int4OID:
-		err := pgtype.Int4(value).EncodeBinary(w)
-		if err != nil {
-			return err
-		}
-	case Int8OID:
-		w.WriteInt32(8)
-		w.WriteInt64(int64(value))
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "int32", oid)
-	}
-
-	return nil
-}
-
-func encodeUInt32(w *WriteBuf, oid OID, value uint32) error {
-	switch oid {
-	case Int2OID:
-		if value <= math.MaxInt16 {
-			w.WriteInt32(2)
-			w.WriteInt16(int16(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int16 %d", value, math.MaxInt16)
-		}
-	case Int4OID:
-		if value <= math.MaxInt32 {
-			w.WriteInt32(4)
-			w.WriteInt32(int32(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int32 %d", value, math.MaxInt32)
-		}
-	case Int8OID:
-		w.WriteInt32(8)
-		w.WriteInt64(int64(value))
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "uint32", oid)
-	}
-
-	return nil
-}
-
-func encodeInt64(w *WriteBuf, oid OID, value int64) error {
-	switch oid {
-	case Int2OID:
-		if value <= math.MaxInt16 {
-			w.WriteInt32(2)
-			w.WriteInt16(int16(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int16 %d", value, math.MaxInt16)
-		}
-	case Int4OID:
-		if value <= math.MaxInt32 {
-			w.WriteInt32(4)
-			w.WriteInt32(int32(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int32 %d", value, math.MaxInt32)
-		}
-	case Int8OID:
-		w.WriteInt32(8)
-		w.WriteInt64(value)
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "int64", oid)
-	}
-
-	return nil
-}
-
-func encodeUInt64(w *WriteBuf, oid OID, value uint64) error {
-	switch oid {
-	case Int2OID:
-		if value <= math.MaxInt16 {
-			w.WriteInt32(2)
-			w.WriteInt16(int16(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int16 %d", value, math.MaxInt16)
-		}
-	case Int4OID:
-		if value <= math.MaxInt32 {
-			w.WriteInt32(4)
-			w.WriteInt32(int32(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int32 %d", value, math.MaxInt32)
-		}
-	case Int8OID:
-
-		if value <= math.MaxInt64 {
-			w.WriteInt32(8)
-			w.WriteInt64(int64(value))
-		} else {
-			return fmt.Errorf("%d is greater than max int64 %d", value, int64(math.MaxInt64))
-		}
-	default:
-		return fmt.Errorf("cannot encode %s into oid %v", "uint64", oid)
-	}
-
-	return nil
-}
-
 func decodeInt4(vr *ValueReader) int32 {
 	if vr.Len() == -1 {
 		vr.Fatal(ProtocolError("Cannot decode null into int32"))