diff --git a/README.md b/README.md
index 93f2feb..de7881d 100644
--- a/README.md
+++ b/README.md
@@ -78,6 +78,8 @@ Package gowebdav A golang WebDAV library
   * [func (c *Client) Write(path string, data []byte, _ os.FileMode) error](#Client.Write)
   * [func (c *Client) WriteStream(path string, stream io.Reader, _ os.FileMode) error](#Client.WriteStream)
 * [type File](#File)
+  * [func (f File) ContentType() string](#File.ContentType)
+  * [func (f File) ETag() string](#File.ETag)
   * [func (f File) IsDir() bool](#File.IsDir)
   * [func (f File) ModTime() time.Time](#File.ModTime)
   * [func (f File) Mode() os.FileMode](#File.Mode)
@@ -133,55 +135,55 @@ func (c *Client) Connect() error
 ```
 Connect connects to our dav server
 
-#### func (\*Client) [Copy](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5825:5900#L279)
+#### func (\*Client) [Copy](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6149:6224#L289)
 ``` go
 func (c *Client) Copy(oldpath string, newpath string, overwrite bool) error
 ```
 Copy copies a file from A to B
 
-#### func (\*Client) [Mkdir](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=4909:4965#L238)
+#### func (\*Client) [Mkdir](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5233:5289#L248)
 ``` go
 func (c *Client) Mkdir(path string, _ os.FileMode) error
 ```
 Mkdir makes a directory
 
-#### func (\*Client) [MkdirAll](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5144:5203#L249)
+#### func (\*Client) [MkdirAll](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5468:5527#L259)
 ``` go
 func (c *Client) MkdirAll(path string, _ os.FileMode) error
 ```
 MkdirAll like mkdir -p, but for webdav
 
-#### func (\*Client) [Read](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6006:6056#L284)
+#### func (\*Client) [Read](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6330:6380#L294)
 ``` go
 func (c *Client) Read(path string) ([]byte, error)
 ```
 Read reads the contents of a remote file
 
-#### func (\*Client) [ReadDir](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=2102:2162#L96)
+#### func (\*Client) [ReadDir](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=2240:2300#L98)
 ``` go
 func (c *Client) ReadDir(path string) ([]os.FileInfo, error)
 ```
 ReadDir reads the contents of a remote directory
 
-#### func (\*Client) [ReadStream](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6368:6431#L303)
+#### func (\*Client) [ReadStream](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6692:6755#L313)
 ``` go
 func (c *Client) ReadStream(path string) (io.ReadCloser, error)
 ```
 ReadStream reads the stream for a given path
 
-#### func (\*Client) [Remove](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=4415:4457#L215)
+#### func (\*Client) [Remove](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=4739:4781#L225)
 ``` go
 func (c *Client) Remove(path string) error
 ```
 Remove removes a remote file
 
-#### func (\*Client) [RemoveAll](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=4523:4568#L220)
+#### func (\*Client) [RemoveAll](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=4847:4892#L230)
 ``` go
 func (c *Client) RemoveAll(path string) error
 ```
 RemoveAll removes remote files
 
-#### func (\*Client) [Rename](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5652:5729#L274)
+#### func (\*Client) [Rename](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=5976:6053#L284)
 ``` go
 func (c *Client) Rename(oldpath string, newpath string, overwrite bool) error
 ```
@@ -205,25 +207,25 @@ func (c *Client) SetTransport(transport http.RoundTripper)
 ```
 SetTransport exposes the ability to define custom transports
 
-#### func (\*Client) [Stat](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=3430:3485#L163)
+#### func (\*Client) [Stat](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=3661:3716#L169)
 ``` go
 func (c *Client) Stat(path string) (os.FileInfo, error)
 ```
 Stat returns the file stats for a specified path
 
-#### func (\*Client) [Write](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=6722:6791#L318)
+#### func (\*Client) [Write](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=7046:7115#L328)
 ``` go
 func (c *Client) Write(path string, data []byte, _ os.FileMode) error
 ```
 Write writes data to a given path
 
-#### func (\*Client) [WriteStream](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=7193:7273#L340)
+#### func (\*Client) [WriteStream](https://github.com/studio-b12/gowebdav/blob/master/client.go?s=7517:7597#L350)
 ``` go
 func (c *Client) WriteStream(path string, stream io.Reader, _ os.FileMode) error
 ```
 WriteStream writes a stream
 
-### type [File](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=93:198#L10)
+### type [File](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=93:253#L10)
 ``` go
 type File struct {
     // contains filtered or unexported fields
@@ -231,43 +233,55 @@ type File struct {
 ```
 File is our structure for a given file
 
-#### func (File) [IsDir](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=697:723#L44)
+#### func (File) [ContentType](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=388:422#L26)
+``` go
+func (f File) ContentType() string
+```
+ContentType returns the content type of a file
+
+#### func (File) [ETag](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=841:868#L51)
+``` go
+func (f File) ETag() string
+```
+ETag returns the ETag of a file
+
+#### func (File) [IsDir](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=947:973#L56)
 ``` go
 func (f File) IsDir() bool
 ```
 IsDir let us see if a given file is a directory or not
 
-#### func (File) [ModTime](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=581:614#L39)
+#### func (File) [ModTime](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=748:781#L46)
 ``` go
 func (f File) ModTime() time.Time
 ```
 ModTime returns the modified time of a file
 
-#### func (File) [Mode](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=410:442#L29)
+#### func (File) [Mode](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=577:609#L36)
 ``` go
 func (f File) Mode() os.FileMode
 ```
 Mode will return the mode of a given file
 
-#### func (File) [Name](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=235:262#L19)
+#### func (File) [Name](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=290:317#L21)
 ``` go
 func (f File) Name() string
 ```
 Name returns the name of a file
 
-#### func (File) [Size](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=318:344#L24)
+#### func (File) [Size](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=485:511#L31)
 ``` go
 func (f File) Size() int64
 ```
 Size returns the size of a file
 
-#### func (File) [String](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=845:874#L54)
+#### func (File) [String](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=1095:1124#L66)
 ``` go
 func (f File) String() string
 ```
 String lets us see file information
 
-#### func (File) [Sys](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=757:788#L49)
+#### func (File) [Sys](https://github.com/studio-b12/gowebdav/blob/master/file.go?s=1007:1038#L61)
 ``` go
 func (f File) Sys() interface{}
 ```
diff --git a/client.go b/client.go
index d471884..562971a 100644
--- a/client.go
+++ b/client.go
@@ -71,11 +71,13 @@ func (c *Client) Connect() error {
 }
 
 type props struct {
-	Status   string   `xml:"DAV: status"`
-	Name     string   `xml:"DAV: prop>displayname,omitempty"`
-	Type     xml.Name `xml:"DAV: prop>resourcetype>collection,omitempty"`
-	Size     string   `xml:"DAV: prop>getcontentlength,omitempty"`
-	Modified string   `xml:"DAV: prop>getlastmodified,omitempty"`
+	Status      string   `xml:"DAV: status"`
+	Name        string   `xml:"DAV: prop>displayname,omitempty"`
+	Type        xml.Name `xml:"DAV: prop>resourcetype>collection,omitempty"`
+	Size        string   `xml:"DAV: prop>getcontentlength,omitempty"`
+	ContentType string   `xml:"DAV: prop>getcontenttype,omitempty"`
+	ETag        string   `xml:"DAV: prop>getetag,omitempty"`
+	Modified    string   `xml:"DAV: prop>getlastmodified,omitempty"`
 }
 
 type response struct {
@@ -118,6 +120,8 @@ func (c *Client) ReadDir(path string) ([]os.FileInfo, error) {
 			}
 			f.path = path + f.name
 			f.modified = parseModified(&p.Modified)
+			f.etag = p.ETag
+			f.contentType = p.ContentType
 
 			if p.Type.Local == "collection" {
 				f.path += "/"
@@ -141,6 +145,8 @@ func (c *Client) ReadDir(path string) ([]os.FileInfo, error) {
 				
 				
 				
+				
+				
 				
 			
 		`,
@@ -168,6 +174,8 @@ func (c *Client) Stat(path string) (os.FileInfo, error) {
 			f = new(File)
 			f.name = p.Name
 			f.path = path
+			f.etag = p.ETag
+			f.contentType = p.ContentType
 
 			if p.Type.Local == "collection" {
 				if !strings.HasSuffix(f.path, "/") {
@@ -193,6 +201,8 @@ func (c *Client) Stat(path string) (os.FileInfo, error) {
 				
 				
 				
+				
+				
 				
 			
 		`,
diff --git a/file.go b/file.go
index 69ba799..200485d 100644
--- a/file.go
+++ b/file.go
@@ -8,11 +8,13 @@ import (
 
 // File is our structure for a given file
 type File struct {
-	path     string
-	name     string
-	size     int64
-	modified time.Time
-	isdir    bool
+	path        string
+	name        string
+	contentType string
+	size        int64
+	modified    time.Time
+	etag        string
+	isdir       bool
 }
 
 // Name returns the name of a file
@@ -20,6 +22,11 @@ func (f File) Name() string {
 	return f.name
 }
 
+// ContentType returns the content type of a file
+func (f File) ContentType() string {
+	return f.contentType
+}
+
 // Size returns the size of a file
 func (f File) Size() int64 {
 	return f.size
@@ -40,6 +47,11 @@ func (f File) ModTime() time.Time {
 	return f.modified
 }
 
+// ETag returns the ETag of a file
+func (f File) ETag() string {
+	return f.etag
+}
+
 // IsDir let us see if a given file is a directory or not
 func (f File) IsDir() bool {
 	return f.isdir
@@ -56,5 +68,5 @@ func (f File) String() string {
 		return fmt.Sprintf("Dir : '%s' - '%s'", f.path, f.name)
 	}
 
-	return fmt.Sprintf("File: '%s' SIZE: %d MODIFIED: %s", f.path, f.size, f.modified.String())
+	return fmt.Sprintf("File: '%s' SIZE: %d MODIFIED: %s ETAG: %s CTYPE: %s", f.path, f.size, f.modified.String(), f.etag, f.contentType)
 }