diff --git a/app/src/main/java/org/nevack/unitconverter/adapters/UnitsCategoryAdapter.java b/app/src/main/java/org/nevack/unitconverter/adapters/UnitsCategoryAdapter.java
index 16e2e315..b0d7ce8f 100644
--- a/app/src/main/java/org/nevack/unitconverter/adapters/UnitsCategoryAdapter.java
+++ b/app/src/main/java/org/nevack/unitconverter/adapters/UnitsCategoryAdapter.java
@@ -41,8 +41,7 @@ public UnitsCategoryAdapter(Context context) {
     }
 
     @Override
-    public ViewHolder onCreateViewHolder(ViewGroup viewGroup,
-                                         int viewType) {
+    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
         View view = LayoutInflater.from(viewGroup.getContext())
                  .inflate(R.layout.unitcardview, viewGroup, false);
 
diff --git a/app/src/main/java/org/nevack/unitconverter/fragments/ConverterFragment.java b/app/src/main/java/org/nevack/unitconverter/fragments/ConverterFragment.java
index 2fc4b07e..6b924c0e 100644
--- a/app/src/main/java/org/nevack/unitconverter/fragments/ConverterFragment.java
+++ b/app/src/main/java/org/nevack/unitconverter/fragments/ConverterFragment.java
@@ -11,24 +11,14 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
+import android.widget.Button;
 import android.widget.EditText;
-import android.widget.ImageButton;
 import android.widget.Spinner;
 import android.widget.TextView;
 
 import org.nevack.unitconverter.R;
 import org.nevack.unitconverter.model.EUnitCategory;
-import org.nevack.unitconverter.model.converter.AreaConverter;
 import org.nevack.unitconverter.model.converter.Converter;
-import org.nevack.unitconverter.model.converter.CurrencyConverter;
-import org.nevack.unitconverter.model.converter.LengthConverter;
-import org.nevack.unitconverter.model.converter.MassConverter;
-import org.nevack.unitconverter.model.converter.MemoryConverter;
-import org.nevack.unitconverter.model.converter.OtherConverter;
-import org.nevack.unitconverter.model.converter.SpeedConverter;
-import org.nevack.unitconverter.model.converter.TemperatureConverter;
-import org.nevack.unitconverter.model.converter.TimeConverter;
-import org.nevack.unitconverter.model.converter.VolumeConverter;
 
 public class ConverterFragment extends Fragment{
 
@@ -41,7 +31,7 @@ public class ConverterFragment extends Fragment{
     private EditText mResultEditText;
     private TextView mResultTextView;
     private Spinner mResultSpinner;
-    private ImageButton mSwapImageButton;
+    private Button mSwapImageButton;
 
     private EUnitCategory mCategory;
     private Converter mConverter;
@@ -98,7 +88,7 @@ public void afterTextChanged(Editable s) {
         mSourceTextView = (TextView) view.findViewById(R.id.sourcevaluesymbol);
         mResultTextView = (TextView) view.findViewById(R.id.resultvaluesymbol);
 
-        mSwapImageButton = (ImageButton) view.findViewById(R.id.swapbutton);
+        mSwapImageButton = (Button) view.findViewById(R.id.swapbutton);
         mSwapImageButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -112,6 +102,20 @@ public void onClick(View v) {
             }
         });
 
+        mSourceTextView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mSourceSpinner.performClick();
+            }
+        });
+
+        mResultTextView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mResultSpinner.performClick();
+            }
+        });
+
         return view;
     }
 
@@ -189,41 +193,7 @@ protected void onPostExecute(Void aVoid) {
 
         @Override
         protected Void doInBackground(Void... params) {
-            switch (mCategory) {
-                case MASS:
-                    mConverter = new MassConverter(getActivity());
-                    break;
-                case VOLUME:
-                    mConverter = new VolumeConverter(getActivity());
-                    break;
-                case LENGTH:
-                    mConverter = new LengthConverter(getActivity());
-                    break;
-                case TEMPERATURE:
-                    mConverter = new TemperatureConverter(getActivity());
-                    break;
-                case SPEED:
-                    mConverter = new SpeedConverter(getActivity());
-                    break;
-                case TIME:
-                    mConverter = new TimeConverter(getActivity());
-                    break;
-                case OTHER:
-                    mConverter = new OtherConverter(getActivity());
-                    break;
-                case MEMORY:
-                    mConverter = new MemoryConverter(getActivity());
-                    break;
-                case CURRENCY:
-                    mConverter = new CurrencyConverter(getActivity());
-                    break;
-                case AREA:
-                    mConverter = new AreaConverter(getActivity());
-                    break;
-                default:
-                    mConverter = new OtherConverter(getActivity());
-                    break;
-            }
+            mConverter = mCategory.getConverter(getActivity());
 
             return null;
         }
diff --git a/app/src/main/java/org/nevack/unitconverter/model/EUnitCategory.java b/app/src/main/java/org/nevack/unitconverter/model/EUnitCategory.java
index 30f25ab8..d9b62f4d 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/EUnitCategory.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/EUnitCategory.java
@@ -1,29 +1,34 @@
 package org.nevack.unitconverter.model;
 
+import android.content.Context;
+
 import org.nevack.unitconverter.R;
+import org.nevack.unitconverter.model.converter.*;
 
 public enum EUnitCategory {
-    MASS(R.string.mass, R.drawable.weight, R.color.unitRed, R.drawable.ic_weight),
-    VOLUME(R.string.volume, R.drawable.volume, R.color.unitGreen, R.drawable.ic_volume),
-    TEMPERATURE(R.string.temperature, R.drawable.temperature, R.color.unitPurple, R.drawable.ic_temperature),
-    SPEED(R.string.speed, R.drawable.speed, R.color.unitDBlue, R.drawable.ic_speed),
-    LENGTH(R.string.length, R.drawable.ruler, R.color.unitGrey, R.drawable.ic_ruler),
-    AREA(R.string.area, R.drawable.area, R.color.unitRed, R.drawable.ic_area),
-    MEMORY(R.string.memory, R.drawable.memory, R.color.unitLBlue, R.drawable.ic_memory),
-    TIME(R.string.time, R.drawable.timer, R.color.unitOrange, R.drawable.ic_timer),
-    CURRENCY(R.string.currency, R.drawable.currency, R.color.unitDGreen, R.drawable.ic_currency),
-    OTHER(R.string.other, R.drawable.other, R.color.unitRed, R.drawable.ic_other);
+    MASS(R.string.mass, R.drawable.weight, R.color.unitRed, R.drawable.ic_weight, MassConverter.class),
+    VOLUME(R.string.volume, R.drawable.volume, R.color.unitGreen, R.drawable.ic_volume, VolumeConverter.class),
+    TEMPERATURE(R.string.temperature, R.drawable.temperature, R.color.unitPurple, R.drawable.ic_temperature, TemperatureConverter.class),
+    SPEED(R.string.speed, R.drawable.speed, R.color.unitDBlue, R.drawable.ic_speed, SpeedConverter.class),
+    LENGTH(R.string.length, R.drawable.ruler, R.color.unitGrey, R.drawable.ic_ruler, LengthConverter.class),
+    AREA(R.string.area, R.drawable.area, R.color.unitRed, R.drawable.ic_area, AreaConverter.class),
+    MEMORY(R.string.memory, R.drawable.memory, R.color.unitLBlue, R.drawable.ic_memory, MemoryConverter.class),
+    TIME(R.string.time, R.drawable.timer, R.color.unitOrange, R.drawable.ic_timer, TimeConverter.class),
+    CURRENCY(R.string.currency, R.drawable.currency, R.color.unitDGreen, R.drawable.ic_currency, CurrencyConverter.class),
+    OTHER(R.string.other, R.drawable.other, R.color.unitRed, R.drawable.ic_other, OtherConverter.class);
 
     private int unitNameResID;
     private int unitIconResID;
     private int unitColorResID;
     private int unitNavIconResID;
+    private Class<? extends Converter> converter;
 
-    EUnitCategory(int unitNameResID, int unitIconResID, int unitColorResID, int unitNavIconResID) {
+    EUnitCategory(int unitNameResID, int unitIconResID, int unitColorResID, int unitNavIconResID, Class<? extends Converter> converter) {
         this.unitNameResID = unitNameResID;
         this.unitIconResID = unitIconResID;
         this.unitColorResID = unitColorResID;
         this.unitNavIconResID = unitNavIconResID;
+        this.converter = converter;
     }
 
     public int getNameResID() {
@@ -41,4 +46,12 @@ public int getColorResID() {
     public int getNavIconResID() {
         return unitNavIconResID;
     }
+
+    public Converter getConverter(Context context) {
+        try {
+            return converter.getConstructor(Context.class).newInstance(context);
+        } catch (Exception e) {
+            return new OtherConverter(context);
+        }
+    }
 }
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/AreaConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/AreaConverter.java
index ef9825ce..f7143618 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/AreaConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/AreaConverter.java
@@ -6,11 +6,8 @@
 import org.nevack.unitconverter.model.Unit;
 
 public class AreaConverter extends Converter {
-
-    private static final String SQUARE_POSTFIX = "<sup><small>2</small></sup>";
-
     public AreaConverter(Context context) {
-        this.context = context;
+        super(context);
 
         unitList.add(new Unit(context.getString(R.string.squaremetre), 1d, context.getString(R.string.metresymbol) + SQUARE_POSTFIX));
         unitList.add(new Unit(context.getString(R.string.squarecentimetre), 0.0001, context.getString(R.string.centimetresymbol) + SQUARE_POSTFIX));
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/Converter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/Converter.java
index e138315a..fbfecd6e 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/Converter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/Converter.java
@@ -13,10 +13,16 @@
 
 public abstract class Converter {
     protected static final String TAG = "Converter";
+    protected static final String CUBIC_POSTFIX = "<sup><small>3</small></sup>";
+    protected static final String SQUARE_POSTFIX = "<sup><small>2</small></sup>";
 
     protected List<Unit> unitList = new ArrayList<>();
     protected Context context;
 
+    public Converter(Context context) {
+        this.context = context;
+    }
+
     public String convert(String inputValue, int inputValueType, int outputValueType) {
         BigDecimal source = new BigDecimal(inputValue);
         BigDecimal sourceFactor = BigDecimal.valueOf(unitList.get(inputValueType).getFactor());
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/CurrencyConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/CurrencyConverter.java
index 02aa8e1d..c49f8109 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/CurrencyConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/CurrencyConverter.java
@@ -17,6 +17,8 @@
 import java.net.URL;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
@@ -26,7 +28,7 @@ public class CurrencyConverter extends Converter{
     private static final String FILE_NAME = "currency.xml";
 
     public CurrencyConverter(Context context) {
-        this.context = context;
+        super(context);
 
         String url = NBRBCurrencyExchangeParser.NBRB_URL + new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH).format(new Date());
 
@@ -60,6 +62,13 @@ public CurrencyConverter(Context context) {
         }
 
         unitList.add(new Unit("Белорусский рубль", 1d, "BYR"));
+
+        Collections.sort(unitList, new Comparator<Unit>() {
+            @Override
+            public int compare(Unit lhs, Unit rhs) {
+                return lhs.getName().compareToIgnoreCase(rhs.getName());
+            }
+        });
     }
 
     @Override
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/LengthConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/LengthConverter.java
index 00a57d8a..ad40f5b2 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/LengthConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/LengthConverter.java
@@ -8,7 +8,8 @@
 public class LengthConverter extends Converter{
 
     public LengthConverter(Context context) {
-        this.context = context;
+        super(context);
+
         unitList.add(new Unit(context.getString(R.string.metre), 1d, context.getString(R.string.metresymbol)));
         unitList.add(new Unit(context.getString(R.string.millimetre), 0.001d, context.getString(R.string.millimetresymbol)));
         unitList.add(new Unit(context.getString(R.string.centimetre), 0.01d, context.getString(R.string.centimetresymbol)));
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/MassConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/MassConverter.java
index da9a2758..fd60924f 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/MassConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/MassConverter.java
@@ -8,7 +8,8 @@
 public class MassConverter extends Converter{
 
     public MassConverter(Context context) {
-        this.context = context;
+        super(context);
+
         unitList.add(new Unit(context.getString(R.string.kilogram), 1d, context.getString(R.string.kilogramsymbol)));
         unitList.add(new Unit(context.getString(R.string.gram), 0.001d, context.getString(R.string.gramsymbol)));
         unitList.add(new Unit(context.getString(R.string.milligram), 0.0000001d, context.getString(R.string.milligramsymbol)));
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/MemoryConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/MemoryConverter.java
index 6ce08ddd..cc17b823 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/MemoryConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/MemoryConverter.java
@@ -8,7 +8,7 @@
 public class MemoryConverter extends Converter {
 
     public MemoryConverter(Context context) {
-        this.context = context;
+        super(context);
 
         unitList.add(new Unit(context.getString(R.string.bit), 0.125d, context.getString(R.string.bit_symbol)));
         unitList.add(new Unit(context.getString(R.string.memorybyte), 1d, context.getString(R.string.memorybytesymbol)));
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/OtherConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/OtherConverter.java
index 1a56b231..ca9cf398 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/OtherConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/OtherConverter.java
@@ -8,7 +8,8 @@
 public class OtherConverter extends Converter {
 
     public OtherConverter(Context context){
-        this.context = context;
+        super(context);
+
         unitList.add(new Unit(context.getString(R.string.pico), 0.000000000001d, "×10<sup><small>-12</small></sup>"));
         unitList.add(new Unit(context.getString(R.string.nano), 0.000000001d, "×10<sup><small>-9</small></sup>"));
         unitList.add(new Unit(context.getString(R.string.micro), 0.000001d, "×10<sup><small>-6</small></sup>"));
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/SpeedConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/SpeedConverter.java
index 03839bca..4c5db20a 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/SpeedConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/SpeedConverter.java
@@ -7,7 +7,8 @@
 
 public class SpeedConverter extends Converter {
     public SpeedConverter(Context context) {
-        this.context = context;
+        super(context);
+
         unitList.add(new Unit(context.getString(R.string.metrespersecond), 3.6d, context.getString(R.string.mpssymbol)));
         unitList.add(new Unit(context.getString(R.string.kilometresperhour), 1d, context.getString(R.string.kmpssymbol)));
         unitList.add(new Unit(context.getString(R.string.milesperhour), 1.609344d, context.getString(R.string.miphsymbol)));
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/TemperatureConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/TemperatureConverter.java
index a6321ba0..28ab1fbe 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/TemperatureConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/TemperatureConverter.java
@@ -9,7 +9,8 @@
 
 public class TemperatureConverter extends Converter {
     public TemperatureConverter(Context context) {
-        this.context = context;
+        super(context);
+
         unitList.add(new Unit(context.getString(R.string.kelvin), 1d, context.getString(R.string.kelvinsymbol)));
         unitList.add(new Unit(context.getString(R.string.celsius), 1d, context.getString(R.string.celsiussymbol)));
         unitList.add(new Unit(context.getString(R.string.fahrenheit), 1d, context.getString(R.string.fahrenheitsymbol)));
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/TimeConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/TimeConverter.java
index 40aecab3..0edb9585 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/TimeConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/TimeConverter.java
@@ -8,7 +8,8 @@
 public class TimeConverter extends Converter
 {
     public TimeConverter(Context context) {
-        this.context = context;
+        super(context);
+
         unitList.add(new Unit(context.getString(R.string.microsecond), 0.000001d, context.getString(R.string.microsecondsymbol)));
         unitList.add(new Unit(context.getString(R.string.millisecond), 0.001d, context.getString(R.string.millisecondsymbol)));
         unitList.add(new Unit(context.getString(R.string.second), 1d, context.getString(R.string.secondsymbol)));
diff --git a/app/src/main/java/org/nevack/unitconverter/model/converter/VolumeConverter.java b/app/src/main/java/org/nevack/unitconverter/model/converter/VolumeConverter.java
index 9141d881..f3ad7e17 100644
--- a/app/src/main/java/org/nevack/unitconverter/model/converter/VolumeConverter.java
+++ b/app/src/main/java/org/nevack/unitconverter/model/converter/VolumeConverter.java
@@ -7,10 +7,9 @@
 
 public class VolumeConverter extends Converter{
 
-    private static final String CUBIC_POSTFIX = "<sup><small>3</small></sup>";
-
     public VolumeConverter(Context context) {
-        this.context = context;
+        super(context);
+
         unitList.add(new Unit(context.getString(R.string.litre), 0.001d, context.getString(R.string.litresymbol)));
         unitList.add(new Unit(context.getString(R.string.cubicmetre), 1d, context.getString(R.string.metresymbol) + CUBIC_POSTFIX));
         unitList.add(new Unit(context.getString(R.string.millilitre), 0.000001d, context.getString(R.string.millilitresymbol)));
diff --git a/app/src/main/res/drawable-hdpi/ic_swap_vertical.png b/app/src/main/res/drawable-hdpi/ic_swap_vertical.png
deleted file mode 100644
index 47e8f8eb..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_swap_vertical.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_swap_vertical.png b/app/src/main/res/drawable-mdpi/ic_swap_vertical.png
deleted file mode 100644
index 07ce126b..00000000
Binary files a/app/src/main/res/drawable-mdpi/ic_swap_vertical.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_swap_vertical.png b/app/src/main/res/drawable-xhdpi/ic_swap_vertical.png
deleted file mode 100644
index 4226ecda..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_swap_vertical.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_swap_vertical.png b/app/src/main/res/drawable-xxhdpi/ic_swap_vertical.png
deleted file mode 100644
index 34fbc588..00000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_swap_vertical.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_swap_vertical.png b/app/src/main/res/drawable-xxxhdpi/ic_swap_vertical.png
deleted file mode 100644
index deca0964..00000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_swap_vertical.png and /dev/null differ
diff --git a/app/src/main/res/layout/activity_convert.xml b/app/src/main/res/layout/activity_convert.xml
index 5b090687..1a6bbe55 100644
--- a/app/src/main/res/layout/activity_convert.xml
+++ b/app/src/main/res/layout/activity_convert.xml
@@ -44,7 +44,7 @@
 
     <android.support.design.widget.NavigationView
         android:id="@+id/navigation_view"
-        android:layout_width="match_parent"
+        android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="start"/>
 </android.support.v4.widget.DrawerLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_convert.xml b/app/src/main/res/layout/fragment_convert.xml
index 952a784e..8e4e2299 100644
--- a/app/src/main/res/layout/fragment_convert.xml
+++ b/app/src/main/res/layout/fragment_convert.xml
@@ -1,56 +1,84 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
+<FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <Spinner
-        android:id="@+id/sourcespinner"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:spinnerMode="dialog"/>
+    android:layout_height="match_parent"
+    android:padding="2dp">
 
     <LinearLayout
-        android:orientation="horizontal"
+        android:orientation="vertical"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content">
+        android:layout_height="match_parent">
 
-        <EditText
-            android:id="@+id/sourcevalue"
-            style="@style/EditTextValue"
-            android:hint="@string/source_value"/>
+        <LinearLayout
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
 
-        <TextView
-            android:id="@+id/sourcevaluesymbol"
-            style="@style/EditTextSymbol" />
+            <Spinner
+                android:id="@+id/sourcespinner"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:spinnerMode="dialog"/>
 
-    </LinearLayout>
+            <TextView
+                android:id="@+id/sourcevaluesymbol"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                style="@style/EditTextSymbol"
+                />
 
-    <LinearLayout
-        android:orientation="horizontal"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
+        </LinearLayout>
+
+        <EditText
+            android:id="@+id/sourcevalue"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:hint="@string/source_value"
+            android:imeOptions="actionNone"
+            style="@style/EditTextValue"/>
 
         <EditText
             android:id="@+id/resultvalue"
-            style="@style/EditTextValue"
-            android:hint="@string/result_value"/>
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:hint="@string/result_value"
+            android:imeOptions="actionNone"
+            style="@style/EditTextValue"/>
 
-        <TextView
-            android:id="@+id/resultvaluesymbol"
-            style="@style/EditTextSymbol"/>
-    </LinearLayout>
+        <LinearLayout
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
 
-    <Spinner
-        android:id="@+id/resultspinner"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:spinnerMode="dialog"/>
+            <Spinner
+                android:id="@+id/resultspinner"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:spinnerMode="dialog"/>
+
+            <TextView
+                android:id="@+id/resultvaluesymbol"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                style="@style/EditTextSymbol"/>
+        </LinearLayout>
+    </LinearLayout>
 
-    <ImageButton android:id="@+id/swapbutton"
+    <Button
+        android:id="@+id/swapbutton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:scaleType="center"
-        android:src="@drawable/ic_swap_vertical"/>
-</LinearLayout>
\ No newline at end of file
+        android:layout_gravity="bottom|start"
+        android:layout_margin="@dimen/fab_margin"
+        android:drawableRight="@drawable/ic_swap_vertical_white_24dp"
+        android:drawableEnd="@drawable/ic_swap_vertical_white_24dp"
+        android:paddingStart="28dp"
+        android:paddingLeft="28dp"
+        android:paddingEnd="12dp"
+        android:paddingRight="12dp"
+        android:text="@string/swap"
+        style="@style/Base.Widget.AppCompat.Button.Colored"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 93114afd..82cc1a48 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -119,4 +119,6 @@
     <string name="squarecentimetre">Квадратные сантиметры</string>
     <string name="squaremillimetre">Квадратные миллиметры</string>
     <string name="loading_data">Загрузка данных</string>
+    <string name="swap">Обмен</string>
+    <string name="unit_icon_description">Иконка единицы измерения</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index cd2c3b20..7b893df2 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimary">#3f51b5</color>
     <color name="colorPrimaryDark">#303F9F</color>
     <color name="colorAccent">#FFC107</color>
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ecf437ea..c9015e6a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -150,5 +150,6 @@
     <string name="unable_to_fetch_data">Unable to fetch data. Try again later</string>
     <string name="loading_data">Loading data</string>
     <string name="unit_icon_description">Unit icon</string>
+    <string name="swap">Swap</string>
 
 </resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 5c2d699b..63948ae2 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,7 +1,7 @@
 <resources>
 
     <!-- Base application theme. -->
-    <style name="AppTheme" parent="Theme.AppCompat.DayNight">
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
         <!-- Customize your theme here. -->
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
@@ -17,18 +17,17 @@
 
     <style name="EditTextValue" parent="Widget.AppCompat.EditText">
         <item name="android:inputType">numberDecimal|numberSigned</item>
-        <item name="android:textSize">25sp</item>
-        <item name="android:layout_width">0dp</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_weight">1</item>
-        <item name="android:gravity">right</item>
+        <item name="android:textSize">23sp</item>
+        <item name="android:layout_marginLeft">8dp</item>
+        <item name="android:layout_marginRight">8dp</item>
     </style>
 
     <style name="EditTextSymbol" parent="TextAppearance.AppCompat">
-        <item name="android:layout_width">75dp</item>
-        <item name="android:layout_height">match_parent</item>
         <item name="android:textSize">20sp</item>
-        <item name="android:gravity">center_vertical|left</item>
+        <item name="android:gravity">center_vertical|end</item>
+        <item name="android:layout_gravity">center_vertical</item>
+        <item name="android:paddingRight">8dp</item>
+        <item name="android:paddingLeft">8dp</item>
     </style>
 
 </resources>
diff --git a/build.gradle b/build.gradle
index 887ddacd..03bced9f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.0-alpha5'
+        classpath 'com.android.tools.build:gradle:2.1.0'
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files