diff --git a/module5_BMI_calculator.m b/module5_BMI_calculator.m
new file mode 100644
index 0000000000000000000000000000000000000000..e4f0b79a5cf8b034fe9772d8ec31d45717879b7c
--- /dev/null
+++ b/module5_BMI_calculator.m
@@ -0,0 +1,74 @@
+% main program
+disp('*************************')
+disp('Welcome to BMI calculator')
+choice = 0;
+while choice<3
+    choice = input_main_menu();
+    if choice==1
+        h = input_measure('height', 'meters', 1, 2.5);
+        w = input_measure('weight', 'kilograms', 40, 300);
+        make_plot(h, w)
+    elseif choice==2
+        h = input_measure('height', 'meters', 1, 2.5);
+        make_plot(h)
+    end
+end
+disp('Bye!')
+
+
+function i = input_main_menu()
+disp('')
+disp('What would you like to do?')
+disp('Type 1, 2, or 3 followed by enter:')
+disp('1. Compute and display BMI from weight and height.')
+disp('2. Compute and display a normal BMI range from height.')
+disp('3. Quit')
+s = input('Choice: ', 's');
+i = str2num(s);
+while isempty(i) || ~any(i == [1,2,3])
+    disp(['You typed ', s])
+    disp('You should type 1, 2 or 3 followed by enter.')
+    s = input('Choice: ', 's');
+    i = str2num(s);
+end
+end
+
+
+function m = input_measure(measure_type, units, m_min, m_max)
+disp('')
+s = input(['Type ', measure_type, ' followed by enter: '], 's');
+m = str2double(s);
+while isnan(m) || m<m_min || m>m_max
+    disp(['You typed ', s])
+    disp(['Type a valid ', measure_type, ' in ', units, '.'])
+    s = input(['Type ', measure_type, ' followed by enter: '], 's');
+    m = str2double(s);    
+end
+end
+
+
+function make_plot(height, weight)
+close all
+figure
+hold on
+h = linspace(1.3, 2.2);
+plot(h, 30*h.^2, 'r')
+plot(h, 25*h.^2, 'm')
+plot(h, 18.5*h.^2, 'g')
+if nargin==1
+    wmin = 18.5*height^2;
+    wmax = 25*height^2;
+    plot([height, height], [wmin, wmax], 'k')
+    d = ['Normal range [',num2str(wmin,'%.2f'),' ',num2str(wmax,'%.2f'),']'];
+else
+    plot(height, weight, 'ko')
+    d = ['BMI ',num2str(weight/(height^2),'%.2f')];
+end
+legend('Obese to overweight', 'Overweight to normal',...
+    'Normal to underweight', d)
+xlabel('Height')
+ylabel('Weight')
+title('BMI plot')
+end
+
+