diff --git a/Backend-libXML/Parser.py b/Backend-libXML/Parser.py
index c652212..295b924 100644
--- a/Backend-libXML/Parser.py
+++ b/Backend-libXML/Parser.py
@@ -1,16 +1,32 @@
 from lxml import etree
 
 
+def prettify(source: str) -> str:
+    xml = etree.XML(source)
+    return etree.tostring(xml, pretty_print=True).decode()
+
+def minimize(source: str) -> str:
+    result = source
+    
+    to_remove = ["   ", "  ", "\t", "\n"]
+    to_substitute = [(" <", "<"), ("> ", ">"), (" ", ""), (" >", ">")]
+    
+    for chars in to_remove:
+        result = result.replace(chars, "")
+    
+    for e in to_substitute:
+        result = result.replace(e[0], e[1])
+    
+    return result
+
+
 def xpath(source: str, xpath: str) -> str:
     """
     Method used to get nodes from XML string using XPath
 
     :param source: XML string used for selection
-    :type source: str
     :param xpath: XPath query used for selection
-    :type xpath: str
     :return: Nodes selected using XPath
-    :rtype: str
     """
 
     
@@ -34,11 +50,8 @@ def xsd(source: str, xsd: str) -> bool:
     """
     Method used to validate XML string against XSD schema
     :param source: XML string used for validation
-    :type source: str
     :param xsd: XSD schema to validate XML against
-    :type xsd: str
     :return: Message saying, if the validation was successful or not
-    :rtype: str
     """
     xml_schema = etree.XMLSchema(etree.XML(xsd))
 
@@ -54,11 +67,8 @@ def xslt(source: str, xslt: str) -> str:
     Method used to transformate XML string using XSLT
 
     :param source: XML string to transform
-    :type source: str
     :param xslt: XSLT string used to transformate XML
-    :type xslt: str
     :return: Result of transformation
-    :rtype: str
     """
     xslt_transform = etree.XSLT(etree.XML(xslt))
 
diff --git a/Backend-libXML/main.py b/Backend-libXML/main.py
index 0869a00..55582cd 100644
--- a/Backend-libXML/main.py
+++ b/Backend-libXML/main.py
@@ -15,16 +15,50 @@ cors = CORS(app, resource={
     }
 })
 
+def format_xml(request: request, type: str) -> str:
+    """Function to format XML 
+
+    :param request: Received request
+    :param type: Type of needed processing: xsd, xslt or xpath
+    :raises ValueError: is raised when type is different than those provided above
+    :return: response JSON converted to string and response code
+    """
+    start = time.time_ns()
+    code = 200
+    response_json = dict()
+    try:
+        request_data = json.loads(request.get_data(as_text=True))
+        data = request_data['data']
+        process = request_data['process']
+        if (type == "prettify"):
+            response_json['result'] = Parser.xsd(data, process)
+        elif (type == "minimize"):
+            response_json['result'] = Parser.xslt(data, process)
+        else:
+            raise ValueError("Valid operation types are: prettify, minimize")
+
+        response_json['status'] = "OK"
+    except KeyError as e:
+        response_json['result'] = "Missing key: " + str(e)
+        response_json['status'] = "ERR"
+        code = 400
+    except Exception as e:
+        response_json['result'] = str(e)
+        response_json['status'] = "ERR"
+        code = 400
+    finally:
+        exec_time = (time.time_ns() - start) / 10**6
+        response_json['time'] = f"{exec_time:.03f}"
+        response_json['processor'] = "libxml2 over lxml"
+        return json.dumps(response_json), code
+
 def process_xml(request: request, type: str) -> str:
     """Function to process 
 
     :param request: Received request
-    :type request: request
     :param type: Type of needed processing: xsd, xslt or xpath
-    :type type: str
     :raises ValueError: is raised when type is different than those provided above
     :return: response JSON converted to string and response code
-    :rtype: str, int
     """
     start = time.time_ns()
     code = 200
@@ -39,6 +73,10 @@ def process_xml(request: request, type: str) -> str:
             response_json['result'] = Parser.xslt(data, process)
         elif (type == "xpath"):
             response_json['result'] = Parser.xpath(data, process)
+        elif (type == "prettify"):
+            response_json['result'] = Parser.prettify(data)
+        elif (type == "minimize"):
+            response_json['result'] = Parser.minimize(data)
         else:
             raise ValueError("Valid operation types are: xsd, xslt, xpath")
 
@@ -70,5 +108,13 @@ def xsd():
 def xslt():
     return process_xml(request, "xslt")
 
+@app.route("/prettifypost", methods=["POST"])
+def prettify():
+    return process_xml(request, "prettify")
+
+@app.route("/minimizepost", methods=["POST"])
+def minimize():
+    return process_xml(request, "minimize")
+
 if __name__ == "__main__":
     app.run()
\ No newline at end of file
diff --git a/Backend-libXML/sample/minimize/minimize.curl b/Backend-libXML/sample/minimize/minimize.curl
new file mode 100644
index 0000000..f75d62a
--- /dev/null
+++ b/Backend-libXML/sample/minimize/minimize.curl
@@ -0,0 +1,3 @@
+url = "http://localhost:5000/minimizepost"
+data = "@minimize.json"
+request = POST
diff --git a/Backend-libXML/sample/minimize/minimize.json b/Backend-libXML/sample/minimize/minimize.json
new file mode 100644
index 0000000..10bfc79
--- /dev/null
+++ b/Backend-libXML/sample/minimize/minimize.json
@@ -0,0 +1,5 @@
+{
+    "data": "Hamlet 2001-05-04 1 false Macbeth 2000-12-13 1 false Harry Potter and the Sorcerer's Stone 2005-04-29 2 true The Long Walk 2018-07-01 4 true Misery 2018-01-31 4 true Think and Grow Rich 2004-09-10 6 true The Law of Success 1982-05-09 6 false Patriot Games 1995-10-21 5 false The Sum of All Fears 1992-09-19 5 false The Alchemist 2017-02-20 3 false Hamlet 1994-06-01 1 false Measure for Measure 1990-03-23 1 false Hamlet 1989-05-05 1 true Hamlet 1999-05-30 1 true The Law of Success 2004-11-26 6 true Romeo and Juliet 1997-02-08 1 true The Alchemist 2009-08-21 3 true 
+  
+    Hamlet 
+    2001-05-04 
+    1 
+    false 
+   
+  
+    Macbeth 
+    2000-12-13 
+    1 
+    false 
+   
+  
+    Harry Potter and the Sorcerer's Stone 
+    2005-04-29 
+    2 
+    true 
+   
+  
+    The Long Walk 
+    2018-07-01 
+    4 
+    true 
+   
+  
+    Misery 
+    2018-01-31 
+    4 
+    true 
+   
+  
+    Think and Grow Rich 
+    2004-09-10 
+    6 
+    true 
+   
+  
+    The Law of Success 
+    1982-05-09 
+    6 
+    false 
+   
+  
+    Patriot Games 
+    1995-10-21 
+    5 
+    false 
+   
+  
+    The Sum of All Fears 
+    1992-09-19 
+    5 
+    false 
+   
+  
+    The Alchemist 
+    2017-02-20 
+    3 
+    false 
+   
+  
+    Hamlet 
+    1994-06-01 
+    1 
+    false 
+   
+  
+    Measure for Measure 
+    1990-03-23 
+    1 
+    false 
+   
+  
+    Hamlet 
+    1989-05-05 
+    1 
+    true 
+   
+  
+    Hamlet 
+    1999-05-30 
+    1 
+    true 
+   
+  
+    The Law of Success 
+    2004-11-26 
+    6 
+    true 
+   
+  
+    Romeo and Juliet 
+    1997-02-08 
+    1 
+    true 
+   
+  
+    The Alchemist 
+    2009-08-21 
+    3 
+    true 
+   
+ 
diff --git a/Backend-libXML/sample/prettify/prettify.curl b/Backend-libXML/sample/prettify/prettify.curl
new file mode 100644
index 0000000..643474d
--- /dev/null
+++ b/Backend-libXML/sample/prettify/prettify.curl
@@ -0,0 +1,3 @@
+url = "http://localhost:5000/prettifypost"
+data = "@prettify.json"
+request = POST
diff --git a/Backend-libXML/sample/prettify/prettify.json b/Backend-libXML/sample/prettify/prettify.json
new file mode 100644
index 0000000..cb3a5ec
--- /dev/null
+++ b/Backend-libXML/sample/prettify/prettify.json
@@ -0,0 +1,6 @@
+{
+    "data": "Hamlet 2001-05-04 1 false Macbeth 2000-12-13 1 false Harry Potter and the Sorcerer's Stone 2005-04-29 2 true The Long Walk 2018-07-01 4 true Misery 2018-01-31 4 true Think and Grow Rich 2004-09-10 6 true The Law of Success 1982-05-09 6 false Patriot Games 1995-10-21 5 false The Sum of All Fears 1992-09-19 5 false The Alchemist 2017-02-20 3 false Hamlet 1994-06-01 1 false Measure for Measure 1990-03-23 1 false Hamlet 1989-05-05 1 true Hamlet 1999-05-30 1 true The Law of Success 2004-11-26 6 true Romeo and Juliet 1997-02-08 1 true The Alchemist 2009-08-21 3 true 
                                 Http Status 
-                                
-                                
-                                    200 
-                                    300 
-                                    400 
-                                    403 
-                                    404 
-                                    500 
-                                 
+                                
+                                    
+                                     
+                                     
+                                     
+                                     
+                                     
+                                  
+
                             
                             
                             
diff --git a/Backend/mocked-services/src/main/resources/static/js/datatransfer.js b/Backend/mocked-services/src/main/resources/static/js/datatransfer.js
index 55eda14..1a042d5 100644
--- a/Backend/mocked-services/src/main/resources/static/js/datatransfer.js
+++ b/Backend/mocked-services/src/main/resources/static/js/datatransfer.js
@@ -13,6 +13,10 @@ const removeMessageName = 'removeMessage';
 const C_UUID = 'mock-uuid';
 const C_ID = 'last-displayed-id';
 const C_ADV = 'advanced-mode';
+
+const color_red = "#ff8f8f";
+const color_grey = "#6b6b6b";
+
 const setModified = function(){
     setDataModified();
 }
@@ -41,7 +45,6 @@ function getData(){
 }
 
 
-
 function checkUuid(){
     if(clientUUID == null || clientUUID == undefined || clientUUID == ''){
         clientUUID = json[0].clientUUID;
@@ -56,11 +59,22 @@ function getDomain(){
     return result;
 }
 
+function httpStatusInvalid(){
+    value = $('#httpStatus').val();
+    return value == '';
+}
+
 function setDataModified(){
-    if(dataModified) return;
+    if(httpStatusInvalid()){
+        $('#btn-save').removeClass('active');
+        $('#btn-save').off();
+        document.getElementById("httpStatus").style.backgroundColor = color_red;
+        return;
+    }
     dataModified = true;
     $('#btn-save').addClass('active');
     $('#btn-save').click(getUpdate);
+    document.getElementById("httpStatus").style.backgroundColor = null;
 }
 
 //Adding change listener to fields
@@ -198,13 +212,13 @@ function clearMock(){
 }
 
 function initializeMock(index){
-    clearMock();
-    fillStaticFields(json[index].clientUUID
-        , json[index].mockedResponseId
-        , json[index].mediaType
-        , json[index].messageBody
-        , json[index].httpStatus);
-    fillHeaderTable(json[index].httpHeaders);
+        clearMock();
+        fillStaticFields(json[index].clientUUID
+            , json[index].mockedResponseId
+            , json[index].mediaType
+            , json[index].messageBody
+            , json[index].httpStatus);
+        fillHeaderTable(json[index].httpHeaders);
 }
 
 function fillStaticFields(uuid, id, mediaType, body, httpStatus){
diff --git a/Frontend/assets/css/tools/r11form.css b/Frontend/assets/css/tools/r11form.css
index f4af46e..6eb8ab9 100644
--- a/Frontend/assets/css/tools/r11form.css
+++ b/Frontend/assets/css/tools/r11form.css
@@ -20,7 +20,7 @@
     padding: 15px 30px;
     font-family: 'Nunito', sans-serif;
     width: 30%;
-    height: 100%;
+    height: calc(100% - 25px);
     overflow: scroll;
 }
 
@@ -287,6 +287,10 @@
     width: 100%;
 }
 
+.half-width {
+    width: 50%;
+}
+
 .max-width.with-padding {
     width: 94%;
 }
@@ -437,10 +441,6 @@
     content: "▼";
 }
 
-.content.active{
-    
-}
-
 .hiddable {
     display: none;
 }
@@ -479,6 +479,16 @@ textarea {
 	box-sizing: border-box;
 }
 
-code{
+code {
     line-height: 150%;
+}
+
+@media only screen and (max-width: 768px) {
+    .rwd-hideable {
+        display: none;
+    }
+
+    .rwd-expandable {
+        width: 100%;
+    }
 }
\ No newline at end of file
diff --git a/Frontend/assets/scripts/tools/scripts.js b/Frontend/assets/scripts/tools/scripts.js
index 8792bc5..6becf43 100644
--- a/Frontend/assets/scripts/tools/scripts.js
+++ b/Frontend/assets/scripts/tools/scripts.js
@@ -91,7 +91,7 @@ function refreshTooltip() {
     document.getElementById("xsltelementsheader").innerText = XSLTheader;
 }
 
-function performRequest(text, checkXML, checkTransform){
+function performRequest(endpoint, checkXML, checkTransform){
     var xmlData = document.getElementById("xmlArea").value.trim();
     var transformData = document.getElementById("transformArea").value.trim();
     
@@ -106,7 +106,7 @@ function performRequest(text, checkXML, checkTransform){
         empty = true;
     }
     if (!empty) {
-        restRequest(text);
+        restRequest(endpoint, xmlData, transformData);
     }else{
         document.getElementById("resultArea").value = "No data provided!";
         return false;
@@ -114,17 +114,33 @@ function performRequest(text, checkXML, checkTransform){
     
 }
 
+function performFormatRequest(endpoint, checkXML){
+    var xmlData = document.getElementById("xmlArea").value.trim();
+    
+    var empty = false;
+    if (defaultStrings.includes(xmlData) && checkXML) {
+            document.getElementById("xmlArea").style.backgroundColor = color_red;
+            xmlData = "";
+            empty = true;
+    }
+    if (!empty) {
+        restRequest(endpoint, xmlData, null);
+    }else{
+        document.getElementById("resultArea").value = "No data provided!";
+        return false;
+    }
+    
+}
+
+
 //Form REST request, send, receive and display in resultArea
-async function restRequest(text) {
+async function restRequest(endpoint, xmlData, transformData) {
     const escapeChar = "specialEscapeChar";
     var port = ":8081/"
     if (getProcessor() == "libxml") {
         port = ":8082/"
     }
-    const addr = window.location.protocol + "//" + window.location.hostname + port + text;
-    
-    var xmlData = document.getElementById("xmlArea").value.trim();
-    var transformData = document.getElementById("transformArea").value.trim();
+    const addr = window.location.protocol + "//" + window.location.hostname + port + endpoint;
 
     if(defaultStrings.includes(xmlData)){
         xmlData = "
";
diff --git a/Frontend/index.html b/Frontend/index.html
index 162acd4..d9d0cd2 100644
--- a/Frontend/index.html
+++ b/Frontend/index.html
@@ -25,6 +25,7 @@
                 
XPath XSLT XSD 
+                
Formatter