diff --git a/jee-jsf/jsf-tests.ts b/jee-jsf/jsf-tests.ts
new file mode 100644
index 000000000..76815bf9e
--- /dev/null
+++ b/jee-jsf/jsf-tests.ts
@@ -0,0 +1,27 @@
+///
+
+function callbackWithoutData() {
+
+}
+
+function callback(data:jsf.ajax.RequestData) {
+
+}
+
+class RequestOptionsImpl implements jsf.ajax.RequestOptions {
+ execute = "@all";
+ render = "@none";
+}
+
+
+jsf.ajax.addOnEvent(callbackWithoutData);
+jsf.ajax.addOnEvent(callback);
+
+jsf.ajax.addOnError(callbackWithoutData);
+jsf.ajax.addOnError(callback);
+
+jsf.ajax.request("someSource");
+jsf.ajax.request("someSource", "change");
+jsf.ajax.request("someSource", "change", new RequestOptionsImpl());
+
+jsf.ajax.response("someRequestObject", {context: "someContextObject"});
diff --git a/jee-jsf/jsf.d.ts b/jee-jsf/jsf.d.ts
new file mode 100644
index 000000000..d19dafe0e
--- /dev/null
+++ b/jee-jsf/jsf.d.ts
@@ -0,0 +1,72 @@
+// Type definitions for for the JSF 2.0 Ajax request API
+// Project: https://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/js-api/symbols/jsf.ajax.html
+// Definitions by: Lars Michaelis and Stephan Zerhusen
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+declare module jsf {
+ module ajax {
+
+ interface RequestData {
+ status: string;
+ description: string;
+ }
+
+ interface RequestOptions {
+ /**
+ * space seperated list of client identifiers
+ */
+ execute?: String;
+
+ /**
+ * space seperated list of client identifiers
+ */
+ render?: String;
+
+ /**
+ * function to callback for event
+ * @param callback the callback function
+ */
+ onevent?(callback:(data:RequestData) => void): void;
+
+ /**
+ * function to callback for error
+ * @param callback the callback function
+ */
+ onerror?(callback:(data:RequestData) => void): void;
+
+ /**
+ * object containing parameters to include in the request
+ */
+ params?: any;
+ }
+
+ /**
+ * Register a callback for event handling.
+ * @param callback a reference to a function to call on an event
+ */
+ function addOnEvent(callback:(data:RequestData) => void):void;
+
+ /**
+ * Register a callback for error handling.
+ * @param callback a reference to a function to call on an error
+ */
+ function addOnError(callback:(data:RequestData) => void):void;
+
+ /**
+ * Send an asynchronous Ajax request to the server.
+ * @param source The DOM element that triggered this Ajax request, or an id string of the element to use as the triggering element.
+ * @param event The DOM event that triggered this Ajax request. The event argument is optional.
+ * @param options The set of available options that can be sent as request parameters to control client and/or server side request processing.
+ */
+ function request(source:any, event?:String, options?:RequestOptions):void;
+
+ /**
+ * Receive an Ajax response from the server.
+ * @param request The XMLHttpRequest instance that contains the status code and response message from the server.
+ * @param context An object containing the request context, including the following properties: the source element, per call onerror callback function, and per call onevent callback function.
+ * @throws EmptyResponse error if request contains no data
+ */
+ function response(request:any, context:any):void;
+
+ }
+}