diff --git a/fs.go b/fs.go
index e9b9cbf..593ca23 100644
--- a/fs.go
+++ b/fs.go
@@ -27,6 +27,7 @@
 	"io"
 	"os"
 	"sort"
+	"time"
 )
 
 // File represents a file in the filesystem.
@@ -85,6 +86,12 @@
 
 	// The name of this FileSystem
 	Name() string
+
+	//Chmod changes the mode of the named file to mode.
+	Chmod(name string, mode os.FileMode) error
+
+	//Chtimes changes the access and modification times of the named file
+	Chtimes(name string, atime time.Time, mtime time.Time) error
 }
 
 var (
diff --git a/memfile.go b/memfile.go
index ef6fdaf..ceaf528 100644
--- a/memfile.go
+++ b/memfile.go
@@ -32,16 +32,19 @@
 }
 
 type InMemoryFile struct {
-	at     int64
-	name   string
-	data   []byte
-	memDir MemDir
-	dir    bool
-	closed bool
+	at      int64
+	name    string
+	data    []byte
+	memDir  MemDir
+	dir     bool
+	closed  bool
+	mode    os.FileMode
+	modtime time.Time
 }
 
 func MemFileCreate(name string) *InMemoryFile {
-	return &InMemoryFile{name: name}
+	return &InMemoryFile{name: name, mode: os.ModeTemporary, modtime: time.Now()}
+}
 }
 
 func (f *InMemoryFile) Close() error {
@@ -184,7 +187,7 @@
 // Implements os.FileInfo
 func (s *InMemoryFileInfo) Name() string       { return s.file.Name() }
 func (s *InMemoryFileInfo) Size() int64        { return int64(len(s.file.data)) }
-func (s *InMemoryFileInfo) Mode() os.FileMode  { return os.ModeTemporary }
-func (s *InMemoryFileInfo) ModTime() time.Time { return time.Time{} }
+func (s *InMemoryFileInfo) Mode() os.FileMode  { return s.file.mode }
+func (s *InMemoryFileInfo) ModTime() time.Time { return s.file.modtime }
 func (s *InMemoryFileInfo) IsDir() bool        { return s.file.dir }
 func (s *InMemoryFileInfo) Sys() interface{}   { return nil }
diff --git a/memmap.go b/memmap.go
index 9b4d0a0..af3c653 100644
--- a/memmap.go
+++ b/memmap.go
@@ -14,11 +14,13 @@
 package afero
 
 import (
+	"errors"
 	"os"
 	"path"
 	"path/filepath"
 	"strings"
 	"sync"
+	"time"
 )
 
 var mux = &sync.Mutex{}
@@ -217,3 +219,37 @@
 	}
 	return &InMemoryFileInfo{file: f.(*InMemoryFile)}, nil
 }
+
+func (m *MemMapFs) Chmod(name string, mode os.FileMode) error {
+	f, ok := m.getData()[name]
+	if !ok {
+		return &os.PathError{"chmod", name, ErrFileNotFound}
+	}
+
+	ff, ok := f.(*InMemoryFile)
+	if ok {
+		m.lock()
+		ff.mode = mode
+		m.unlock()
+	} else {
+		return errors.New("Unable to Chmod Memory File")
+	}
+	return nil
+}
+
+func (m *MemMapFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
+	f, ok := m.getData()[name]
+	if !ok {
+		return &os.PathError{"chtimes", name, ErrFileNotFound}
+	}
+
+	ff, ok := f.(*InMemoryFile)
+	if ok {
+		m.lock()
+		ff.modtime = mtime
+		m.unlock()
+	} else {
+		return errors.New("Unable to Chtime Memory File")
+	}
+	return nil
+}
diff --git a/os.go b/os.go
index 4f472fc..30f23ca 100644
--- a/os.go
+++ b/os.go
@@ -14,7 +14,10 @@
 
 package afero
 
-import "os"
+import (
+	"os"
+	"time"
+)
 
 // OsFs is a Fs implementation that uses functions provided by the os package.
 //
@@ -59,3 +62,11 @@
 func (OsFs) Stat(name string) (os.FileInfo, error) {
 	return os.Stat(name)
 }
+
+func (OsFs) Chmod(name string, mode os.FileMode) error {
+	return os.Chmod(name, mode)
+}
+
+func (OsFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
+	return os.Chtimes(name, atime, mtime)
+}
