Constants Module
module m_ConstantsOnly
  integer, public, parameter :: TENNIS  = 1
  integer, public, parameter :: SWIM    = 2
  integer, public, parameter :: SAUNA   = 3
  integer, public, parameter :: HOT_TUB = 4
  integer, public, parameter :: &
	NUMBER_OF_ACTIVITIES = 4
  integer, public, parameter :: &
	MAX_MONTHLY_ACTIVITIES = 60
endmodule m_ConstantsOnly
Global Variables Module
module m_GlobalVariables
 use m_ConstantsOnly, only: MAX_MONTHLY_ACTIVITIES
 private ! makes sure not to export entities
	 ! from m_ConstantsOnly
 integer, public, &
	dimension(MAX_MONTHLY_ACTIVITIES) :: &
	activities_list
 integer, public :: number_of_monthly_activities
endmodule m_GlobalVariables
Types and Procedures Module
module m_types_and_procs
 ! public procedures
 public :: SetActivity, GetActivity 
 ! private procedures
 private :: SetStartTime, SetEndTime 
 type, private :: t_act_schedule ! This type is 
			! private to this module
		     ! yyyymmddhhmmss
  character(len=14) :: start_day_time
  integer :: duration_in_seconds
 endtype t_act_schedule
 type, public :: t_agenda ! This type is available
			  ! to users of this module
  private ! The inside parts of this type are 
	  ! private to this module
   integer :: activity
   type(t_act_schedule) :: act_schedule
 endtype t_agenda
contains ! separates the data entities from the
	 ! procedures
 subroutine SetActivity(an_activity)
  integer, intent(in) :: an_activity
  ! ...
 endsubroutine SetActivity
 function GetActivity() result(an_activity)
  ! ...
 subroutine SetStartTime()
  ! ...
 subroutine SetEndTime()
  ! ...
endmodule m_types_and_procs