diff --git a/fs-ext/fs-ext-tests.ts b/fs-ext/fs-ext-tests.ts
new file mode 100644
index 000000000..aba507c6d
--- /dev/null
+++ b/fs-ext/fs-ext-tests.ts
@@ -0,0 +1,28 @@
+///
+///
+
+import fs = require('fs-ext');
+
+var num:number;
+var str:string;
+
+//from node.js 'fs' module
+fs.appendFileSync(str, "data");
+
+fs.flock(num, str, (err)=>{
+});
+fs.flockSync(num, str);
+
+fs.fcntl(num, str, num, (err, res)=>{
+});
+fs.fcntl(num, str, (err, res)=>{
+});
+fs.fcntlSync(num, str, num);
+
+fs.seek(num, num, num, (err, pos)=>{
+});
+fs.seekSync(num, num, num);
+
+fs.utime(str, num, num, (err)=>{
+});
+fs.utimeSync(str, num, num);
diff --git a/fs-ext/fs-ext.d.ts b/fs-ext/fs-ext.d.ts
new file mode 100644
index 000000000..00f63c5a0
--- /dev/null
+++ b/fs-ext/fs-ext.d.ts
@@ -0,0 +1,102 @@
+// Type definitions for fs-ext
+// Project: https://github.com/baudehlo/node-fs-ext
+// Definitions by: Oguzhan Ergin
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module "fs-ext" {
+ export * from "fs";
+
+ /**
+ * Asynchronous flock(2). No arguments other than a possible error are passed to the callback.
+ * @param fd File Descriptor
+ * @param flags Flags can be 'sh', 'ex', 'shnb', 'exnb', 'un' and correspond to the various LOCK_SH, LOCK_EX, LOCK_SH|LOCK_NB, etc.
+ **/
+ export function flock(fd: number, flags: string, callback: (err: Error) => void): void;
+
+ /**
+ * Synchronous flock(2). Throws an exception on error.
+ * @param fd File Descriptor
+ * @param flags Flags can be 'sh', 'ex', 'shnb', 'exnb', 'un' and correspond to the various LOCK_SH, LOCK_EX, LOCK_SH|LOCK_NB, etc.
+ **/
+ export function flockSync(fd: number, flags: string):void;
+
+ /**
+ * Asynchronous fcntl(2).
+ * @param fd File Descriptor
+ * @param cmd The supported commands are: 'getfd' ( F_GETFD ) , 'setfd' ( F_SETFD )
+ * Requiring this module adds FD_CLOEXEC to the constants module, for use with F_SETFD.
+ * @param arg arg
+ **/
+ export function fcntl(fd: number, cmd: string, arg: number, callback: (err: Error, result: number) => void):void;
+
+ /**
+ * Asynchronous fcntl(2).
+ * @param fd File Descriptor
+ * @param cmd The supported commands are: 'getfd' ( F_GETFD ) , 'setfd' ( F_SETFD )
+ * Requiring this module adds FD_CLOEXEC to the constants module, for use with F_SETFD.
+ **/
+ export function fcntl(fd: number, cmd: string, callback: (err: Error, result: number) => void):void;
+
+ /**
+ * Synchronous fcntl(2). Throws an exception on error.
+ * @param fd File Descriptor
+ * @param cmd The supported commands are: 'getfd' ( F_GETFD ) , 'setfd' ( F_SETFD )
+ * Requiring this module adds FD_CLOEXEC to the constants module, for use with F_SETFD.
+ * @param arg arg
+ * @return Returns flags
+ **/
+ export function fcntlSync(fd: number, cmd: string, arg?: number): number;
+
+ /**
+ * Asynchronous lseek(2).
+ * @param fd File Descriptor
+ * @param offset Offset
+ * @param whence
+ * Whence can be 0 (SEEK_SET) to set the new position in bytes to offset, 1 (SEEK_CUR) to set the new
+ * position to the current position plus offset bytes (can be negative), or 2 (SEEK_END) to set to the end
+ * of the file plus offset bytes (usually negative or zero to seek to the end of the file).
+ **/
+ export function seek(fd: number, offset: number, whence: number, callback: (err: Error, currFilePos: number) => void): void;
+
+ /**
+ * Synchronous lseek(2). Throws an exception on error. Returns current file position.
+ * @param fd File Descriptor
+ * @param offset Offset
+ * @param whence
+ * Whence can be 0 (SEEK_SET) to set the new position in bytes to offset, 1 (SEEK_CUR) to set the new
+ * position to the current position plus offset bytes (can be negative), or 2 (SEEK_END) to set to the end
+ * of the file plus offset bytes (usually negative or zero to seek to the end of the file).
+ * @returns Returns current file position.
+ **/
+ export function seekSync(fd: number, offset: number, whence: number): number;
+
+ /**
+ * Asynchronous utime(2).
+ * @param path File path
+ * @param atime
+ * Arguments atime and mtime are in seconds as for the system call.Note that the number value of Date() is in milliseconds,
+ * so to use the 'now' value with fs.utime() you would have to divide by 1000 first, e.g. Date.now()/1000
+ * Just like for utime(2), the absence of the atime and mtime means 'now'.
+ * @param mtime
+ * Arguments atime and mtime are in seconds as for the system call.Note that the number value of Date() is in milliseconds,
+ * so to use the 'now' value with fs.utime() you would have to divide by 1000 first, e.g. Date.now()/1000
+ * Just like for utime(2), the absence of the atime and mtime means 'now'.
+ **/
+ export function utime(path: string, atime: number, mtime: number, callback: (err: Error) => void):void;
+
+ /**
+ * Synchronous version of utime(). Throws an exception on error.
+ * @param path File path
+ * @param atime
+ * Arguments atime and mtime are in seconds as for the system call.Note that the number value of Date() is in milliseconds,
+ * so to use the 'now' value with fs.utime() you would have to divide by 1000 first, e.g. Date.now()/1000
+ * Just like for utime(2), the absence of the atime and mtime means 'now'.
+ * @param mtime
+ * Arguments atime and mtime are in seconds as for the system call.Note that the number value of Date() is in milliseconds,
+ * so to use the 'now' value with fs.utime() you would have to divide by 1000 first, e.g. Date.now()/1000
+ * Just like for utime(2), the absence of the atime and mtime means 'now'.
+ **/
+ export function utimeSync(path: string, atime: number, mtime: number):void;
+}